-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension.yaml
187 lines (168 loc) · 6.81 KB
/
extension.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# Learn detailed information about the fields of an extension.yaml file in the docs:
# https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml
name: field-uniqueness # Identifier for your extension
version: 0.1.6 # Follow semver versioning
specVersion: v1beta # Version of the Firebase Extensions specification
icon: image.png
tags: [utilities]
# Friendly display name for your extension (~3-5 words)
displayName: Enforce Field Uniqueness
# Brief description of the task your extension performs (~1 sentence)
description: >-
Enforces uniqueness on a specified field of a document written to a specified Cloud Firestore collection.
license: Apache-2.0 # https://spdx.org/licenses/
author:
authorName: Tomas Piaggio
url: https://github.com/tpiaggio
roles:
- role: datastore.user
reason: Allows the extension to write documents to Cloud Firestore.
# Public URL for the source code of your extension
sourceUrl: https://github.com/tpiaggio/ext-field-uniqueness
# Specify whether a paid-tier billing plan is required to use your extension.
# Learn more in the docs: https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml#billing-required-field
billingRequired: true
# In an `apis` field, list any Google APIs (like Cloud Translation, BigQuery, etc.)
# required for your extension to operate.
# Learn more in the docs: https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml#apis-field
# In a `roles` field, list any IAM access roles required for your extension to operate.
# Learn more in the docs: https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml#roles-field
# In the `resources` field, list each of your extension's functions, including the trigger for each function.
# Learn more in the docs: https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml#resources-field
resources:
- name: fieldUniqueness
type: firebaseextensions.v1beta.function
description: >-
HTTP request-triggered function that responds with a specified greeting message
properties:
# LOCATION is a user-configured parameter value specified by the user during installation.
location: ${LOCATION}
runtime: nodejs14
eventTrigger:
eventType: providers/cloud.firestore/eventTypes/document.write
resource: projects/${PROJECT_ID}/databases/(default)/documents/${COLLECTION_PATH}/{documentId}
- name: fieldUniquenessBackfill
type: firebaseextensions.v1beta.function
description:
Searches your specified Cloud Firestore collection for existing documents, then writes the new documents in the aux collection
properties:
location: ${param:LOCATION}
runtime: nodejs14
availableMemoryMb: 1024
timeout: 540s
taskQueueTrigger: {}
# In the `params` field, set up your extension's user-configured parameters.
# Learn more in the docs: https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml#params-field
params:
- param: COLLECTION_PATH
label: Collection path
description: >-
What is the path to the collection that contains the field that you want to check for uniqueness?
type: string
example: users
default: users
validationRegex: "^[^/]+(/[^/]+/[^/]+)*$"
validationErrorMessage: Must be a valid Cloud Firestore Collection
required: true
- param: FIELD_NAME
label: Field name
description: >-
What is the name of the field that you want to check for uniqueness?
type: string
example: username
default: username
validationRegex: "^[^/]+(/[^/]+/[^/]+)*$"
validationErrorMessage: Must be a valid Cloud Firestore Field
required: true
- param: HASH_FIELD
label: Hash field
description: >-
The value of the unique field will be used as an id for a new document in Firestore. Would you like to hash the value of the field due to constraints on document IDs?
type: select
options:
- label: Yes (hash using the MD5 algorithm)
value: yes
- label: No (validate on the client's side)
value: no
required: true
- param: AUX_COLLECTION_PATH
label: Aux collection path
description: >-
What is the name of the auxiliar collection where you want to write documents?
type: string
example: usernames
default: usernames
validationRegex: "^[^/]+(/[^/]+/[^/]+)*$"
validationErrorMessage: Must be a valid Cloud Firestore Collection
required: true
- param: DO_BACKFILL
label: Check uniqueness for existing documents?
description: >
Should existing documents in the Firestore collection be checked for field uniqueness as well?
type: select
required: true
options:
- label: Yes
value: yes
- label: No
value: no
- param: LOCATION
label: Cloud Functions location
description: >-
Where do you want to deploy the functions created for this extension?
For help selecting a location, refer to the [location selection
guide](https://firebase.google.com/docs/functions/locations).
type: select
options:
- label: Iowa (us-central1)
value: us-central1
- label: South Carolina (us-east1)
value: us-east1
- label: Northern Virginia (us-east4)
value: us-east4
- label: Los Angeles (us-west2)
value: us-west2
- label: Salt Lake City (us-west3)
value: us-west3
- label: Las Vegas (us-west4)
value: us-west4
- label: Warsaw (europe-central2)
value: europe-central2
- label: Belgium (europe-west1)
value: europe-west1
- label: London (europe-west2)
value: europe-west2
- label: Frankfurt (europe-west3)
value: europe-west3
- label: Zurich (europe-west6)
value: europe-west6
- label: Hong Kong (asia-east2)
value: asia-east2
- label: Tokyo (asia-northeast1)
value: asia-northeast1
- label: Osaka (asia-northeast2)
value: asia-northeast2
- label: Seoul (asia-northeast3)
value: asia-northeast3
- label: Mumbai (asia-south1)
value: asia-south1
- label: Jakarta (asia-southeast2)
value: asia-southeast2
- label: Montreal (northamerica-northeast1)
value: northamerica-northeast1
- label: Sao Paulo (southamerica-east1)
value: southamerica-east1
- label: Sydney (australia-southeast1)
value: australia-southeast1
required: true
immutable: true
lifecycleEvents:
onInstall:
function: fieldUniquenessBackfill
processingMessage: "Checking uniqueness for existing documents in ${COLLECTION_PATH}"
onUpdate:
function: fieldUniquenessBackfill
processingMessage: "Checking uniqueness for existing documents in ${COLLECTION_PATH}"
onConfigure:
function: fieldUniquenessBackfill
processingMessage: "Checking uniqueness for existing documents in ${COLLECTION_PATH}"