-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension.yaml
173 lines (155 loc) · 6.48 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
# 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-http # 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 HTTP
# 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, using a HTTP Callable function.
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-http
# 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 function that writes a document to a specified collection ensuring uniqueness of a specified field
properties:
# LOCATION is a user-configured parameter value specified by the user during installation.
location: ${LOCATION}
# httpsTrigger is used for an HTTP triggered function.
httpsTrigger: {}
runtime: nodejs14
- 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: 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 contraints 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: REQUIRE_AUTH
label: Require auth
description: >-
Would you like to check for user authentication inside the Cloud Function?
type: select
options:
- label: Yes
value: yes
- label: No
value: no
required: true
- param: BACKFILL_COLLECTION
label: Backfill collection
description: >-
What is the path to the collection that you want to check for uniqueness for existing documents?
type: string
example: users
validationRegex: "^[^/]+(/[^/]+/[^/]+)*$"
validationErrorMessage: Must be a valid Cloud Firestore Collection
required: false
- param: BACKFILL_FIELD_NAME
label: Backfill field name
description: >-
What is the field name that you want to check for uniqueness for existing documents?
type: string
example: username
validationRegex: "^[^/]+(/[^/]+/[^/]+)*$"
validationErrorMessage: Must be a valid Cloud Firestore Collection
required: false
- 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 ${BACKFILL_COLLECTION} for field ${BACKFILL_FIELD_NAME}"
onUpdate:
function: fieldUniquenessBackfill
processingMessage: "Checking uniqueness for existing documents in ${BACKFILL_COLLECTION} for field ${BACKFILL_FIELD_NAME}"
onConfigure:
function: fieldUniquenessBackfill
processingMessage: "Checking uniqueness for existing documents in ${BACKFILL_COLLECTION} for field ${BACKFILL_FIELD_NAME}"