@dereekb/firebase 14.0.1 → 14.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@dereekb/firebase/eslint",
3
- "version": "14.0.1",
3
+ "version": "14.1.0",
4
4
  "type": "module",
5
5
  "peerDependencies": {
6
- "@dereekb/util": "14.0.1",
6
+ "@dereekb/util": "14.1.0",
7
7
  "@marcbachmann/cel-js": "^8.0.0",
8
8
  "@typescript-eslint/parser": "8.69.0",
9
9
  "@typescript-eslint/utils": "8.69.0",
10
10
  "typescript": "6.0.3"
11
11
  },
12
12
  "devDependencies": {
13
- "@dereekb/firebase": "14.0.1",
13
+ "@dereekb/firebase": "14.1.0",
14
14
  "eslint": "10.9.1",
15
15
  "firebase": "^12.18.0"
16
16
  },
package/index.esm.js CHANGED
@@ -26853,6 +26853,20 @@ var UserExternalConnectionDocument = /*#__PURE__*/ function(AbstractFirestoreDoc
26853
26853
  }),
26854
26854
  er: optionalFirestoreEnum()
26855
26855
  };
26856
+ /**
26857
+ * Field conversions for a {@link UserExternalConnectionLogin}.
26858
+ */ var userExternalConnectionLoginFields = {
26859
+ ea: firestoreString(),
26860
+ l: optionalFirestoreString(),
26861
+ em: optionalFirestoreString(),
26862
+ emv: optionalFirestoreBoolean(),
26863
+ lat: firestoreDate({
26864
+ saveDefaultAsNow: true
26865
+ }),
26866
+ uat: firestoreDate({
26867
+ saveDefaultAsNow: true
26868
+ })
26869
+ };
26856
26870
  var userExternalConnectionConverter = snapshotConverterFunctions({
26857
26871
  fields: {
26858
26872
  uid: firestoreUID(),
@@ -26861,7 +26875,15 @@ var userExternalConnectionConverter = snapshotConverterFunctions({
26861
26875
  fields: userExternalConnectionEntryFields
26862
26876
  }
26863
26877
  }),
26878
+ // an absent map decodes as {}, so every document written before `li` existed reads back as
26879
+ // "no login links" without a migration
26880
+ li: firestoreObjectMap({
26881
+ objectField: {
26882
+ fields: userExternalConnectionLoginFields
26883
+ }
26884
+ }),
26864
26885
  c: firestoreEnumArray(),
26886
+ ec: optionalFirestoreArray(),
26865
26887
  uat: firestoreDate({
26866
26888
  saveDefaultAsNow: true
26867
26889
  })
@@ -26912,6 +26934,29 @@ var userExternalConnectionConverter = snapshotConverterFunctions({
26912
26934
  /**
26913
26935
  * Provider type for Zoho.
26914
26936
  */ var ZOHO_USER_EXTERNAL_CONNECTION_PROVIDER_TYPE = 'zoho';
26937
+ /**
26938
+ * The delimiter joining a provider type to an external account id in a
26939
+ * {@link UserExternalConnectionExternalAccountKey}.
26940
+ *
26941
+ * A colon is safe on both sides: {@link UserExternalConnectionProviderType} must already be a valid
26942
+ * Firestore map key (no dots or slashes), and the key is only ever a stored/queried string VALUE,
26943
+ * never a document id or field path.
26944
+ */ var USER_EXTERNAL_CONNECTION_EXTERNAL_ACCOUNT_KEY_DELIMITER = ':';
26945
+ /**
26946
+ * Builds the {@link UserExternalConnectionExternalAccountKey} for a provider/account pair.
26947
+ *
26948
+ * The SOLE producer of the key format: the derivation that stores it and the query that reads it
26949
+ * both go through here, so the two can never disagree about the delimiter.
26950
+ *
26951
+ * @param input - The provider type and external account id to join.
26952
+ * @param input.providerType - The provider the account belongs to.
26953
+ * @param input.externalAccountId - The provider's stable id for the account.
26954
+ * @returns The external account key.
26955
+ *
26956
+ * @__NO_SIDE_EFFECTS__
26957
+ */ function userExternalConnectionExternalAccountKey(input) {
26958
+ return "".concat(input.providerType).concat(USER_EXTERNAL_CONNECTION_EXTERNAL_ACCOUNT_KEY_DELIMITER).concat(input.externalAccountId);
26959
+ }
26915
26960
 
26916
26961
  function _define_property(obj, key, value) {
26917
26962
  if (key in obj) {
@@ -26957,6 +27002,53 @@ function _object_spread(target) {
26957
27002
  result.sort();
26958
27003
  return result;
26959
27004
  }
27005
+ /**
27006
+ * The SOLE producer of a {@link UserExternalConnection}'s `ec` array.
27007
+ *
27008
+ * Membership is every ENTRY carrying an `ea`, at ANY status, UNION every LOGIN LINK's `ea` —
27009
+ * deliberately unlike {@link userExternalConnectionConnectedProviderTypes}, which is `connected`-only.
27010
+ * `c` answers "whose credentials can I use?", a question about the credentials; `ec` answers "who IS
27011
+ * this account?", a question about identity, which survives an expired token. Filtering it by status
27012
+ * would make a returning user with `error` credentials look like a stranger, and a sign-in would
27013
+ * mint them a second Firebase user.
27014
+ *
27015
+ * The union is what makes the two lifecycles independent. Disconnecting a data connection removes its
27016
+ * entry, and if `ec` came from `e` alone that would take the sign-in binding with it — the next
27017
+ * sign-in would find no match and mint a second Firebase user for the same person.
27018
+ *
27019
+ * @param input - The entry map and the login map to derive from.
27020
+ * @returns The external account keys, deduped and sorted for a stable stored value.
27021
+ */ function userExternalConnectionExternalAccountKeys(input) {
27022
+ var entries = input.entries, logins = input.logins;
27023
+ var keys = new Set();
27024
+ if (entries) {
27025
+ Object.keys(entries).forEach(function(providerType) {
27026
+ var _entries_providerType;
27027
+ var externalAccountId = (_entries_providerType = entries[providerType]) === null || _entries_providerType === void 0 ? void 0 : _entries_providerType.ea;
27028
+ if (externalAccountId != null) {
27029
+ keys.add(userExternalConnectionExternalAccountKey({
27030
+ providerType: providerType,
27031
+ externalAccountId: externalAccountId
27032
+ }));
27033
+ }
27034
+ });
27035
+ }
27036
+ if (logins) {
27037
+ Object.keys(logins).forEach(function(providerType) {
27038
+ var _logins_providerType;
27039
+ var externalAccountId = (_logins_providerType = logins[providerType]) === null || _logins_providerType === void 0 ? void 0 : _logins_providerType.ea;
27040
+ if (externalAccountId != null) {
27041
+ keys.add(userExternalConnectionExternalAccountKey({
27042
+ providerType: providerType,
27043
+ externalAccountId: externalAccountId
27044
+ }));
27045
+ }
27046
+ });
27047
+ }
27048
+ var result = Array.from(keys);
27049
+ result.sort();
27050
+ return result;
27051
+ }
26960
27052
  /**
26961
27053
  * Derives the {@link UserExternalConnectionEntry} for an operation's outcome.
26962
27054
  *
@@ -27009,6 +27101,32 @@ function _object_spread(target) {
27009
27101
  }
27010
27102
  return result;
27011
27103
  }
27104
+ /**
27105
+ * Assembles the COMPLETE document value from both maps.
27106
+ *
27107
+ * Extracted so the two appliers cannot diverge on how the derived arrays are produced: `ec` is the
27108
+ * union of `e` and `li`, and either applier computing it from only the map it happened to change
27109
+ * would drop the other map's keys out of the sign-in lookup.
27110
+ *
27111
+ * Exported for the one caller that legitimately replaces a whole map rather than one provider's key —
27112
+ * the login backfill. Ordinary writes go through the two appliers.
27113
+ *
27114
+ * @param input - The uid, both maps, and the instant to stamp.
27115
+ * @returns The next UserExternalConnection value to write.
27116
+ */ function userExternalConnectionValue(input) {
27117
+ var uid = input.uid, entries = input.entries, logins = input.logins, now = input.now;
27118
+ return {
27119
+ uid: uid,
27120
+ e: entries,
27121
+ li: logins,
27122
+ c: userExternalConnectionConnectedProviderTypes(entries),
27123
+ ec: userExternalConnectionExternalAccountKeys({
27124
+ entries: entries,
27125
+ logins: logins
27126
+ }),
27127
+ uat: now
27128
+ };
27129
+ }
27012
27130
  /**
27013
27131
  * Applies a single provider's entry and returns the COMPLETE next document.
27014
27132
  *
@@ -27016,6 +27134,9 @@ function _object_spread(target) {
27016
27134
  * exported way to change `e`, and it always recomputes `c` from the resulting map. There is no
27017
27135
  * exported path that touches one without the other.
27018
27136
  *
27137
+ * The login map is carried through UNCHANGED. A data connection's lifecycle says nothing about
27138
+ * whether the provider is still a way to sign in, so a disconnect must not remove the link.
27139
+ *
27019
27140
  * @param input - The current document plus the provider entry to apply.
27020
27141
  * @returns The next UserExternalConnection value to write.
27021
27142
  */ function applyUserExternalConnectionEntry(input) {
@@ -27026,10 +27147,56 @@ function _object_spread(target) {
27026
27147
  } else {
27027
27148
  delete entries[providerType];
27028
27149
  }
27029
- return {
27150
+ return userExternalConnectionValue({
27030
27151
  uid: uid,
27031
- e: entries,
27032
- c: userExternalConnectionConnectedProviderTypes(entries),
27152
+ entries: entries,
27153
+ logins: _object_spread({}, current === null || current === void 0 ? void 0 : current.li),
27154
+ now: now
27155
+ });
27156
+ }
27157
+ /**
27158
+ * Applies a single provider's LOGIN LINK and returns the COMPLETE next document.
27159
+ *
27160
+ * The mirror of {@link applyUserExternalConnectionEntry}, and the only exported way to change `li`.
27161
+ * The entry map is carried through unchanged: linking a provider as a login method grants nothing
27162
+ * about its data connection, because the identity scopes and the data scopes are not guaranteed to
27163
+ * be the same set.
27164
+ *
27165
+ * @param input - The current document plus the login link to apply.
27166
+ * @returns The next UserExternalConnection value to write.
27167
+ */ function applyUserExternalConnectionLogin(input) {
27168
+ var current = input.current, uid = input.uid, providerType = input.providerType, login = input.login, now = input.now;
27169
+ var logins = _object_spread({}, current === null || current === void 0 ? void 0 : current.li);
27170
+ if (login) {
27171
+ logins[providerType] = login;
27172
+ } else {
27173
+ delete logins[providerType];
27174
+ }
27175
+ return userExternalConnectionValue({
27176
+ uid: uid,
27177
+ entries: _object_spread({}, current === null || current === void 0 ? void 0 : current.e),
27178
+ logins: logins,
27179
+ now: now
27180
+ });
27181
+ }
27182
+ /**
27183
+ * Derives the {@link UserExternalConnectionLogin} for an identity a link round trip resolved.
27184
+ *
27185
+ * `lat` survives a relink, the mirror of how {@link userExternalConnectionEntryForOutcome} preserves
27186
+ * `coa`: relinking the same provider is a re-consent, not a new relationship, so the date the account
27187
+ * first became a login method stays what it was.
27188
+ *
27189
+ * @param input - The resolved identity, the stored link, and the instant to stamp.
27190
+ * @returns The next login link.
27191
+ */ function userExternalConnectionLoginForIdentity(input) {
27192
+ var _identity_label, _identity_email, _identity_emailVerified, _ref;
27193
+ var identity = input.identity, previous = input.previous, now = input.now;
27194
+ return {
27195
+ ea: identity.externalAccountId,
27196
+ l: (_identity_label = identity.label) !== null && _identity_label !== void 0 ? _identity_label : previous === null || previous === void 0 ? void 0 : previous.l,
27197
+ em: (_identity_email = identity.email) !== null && _identity_email !== void 0 ? _identity_email : previous === null || previous === void 0 ? void 0 : previous.em,
27198
+ emv: (_identity_emailVerified = identity.emailVerified) !== null && _identity_emailVerified !== void 0 ? _identity_emailVerified : previous === null || previous === void 0 ? void 0 : previous.emv,
27199
+ lat: (_ref = previous === null || previous === void 0 ? void 0 : previous.lat) !== null && _ref !== void 0 ? _ref : now,
27033
27200
  uat: now
27034
27201
  };
27035
27202
  }
@@ -27047,7 +27214,9 @@ function _object_spread(target) {
27047
27214
  return {
27048
27215
  uid: uid,
27049
27216
  e: {},
27217
+ li: {},
27050
27218
  c: [],
27219
+ ec: [],
27051
27220
  uat: now
27052
27221
  };
27053
27222
  }
@@ -27089,6 +27258,26 @@ function _object_spread(target) {
27089
27258
  */ function userExternalConnectionIsConnectedToProvider(connection, providerType) {
27090
27259
  return userExternalConnectionEntryIsConnected(userExternalConnectionEntryForProvider(connection, providerType));
27091
27260
  }
27261
+ /**
27262
+ * Returns the login link for the given provider, if any.
27263
+ *
27264
+ * @param connection - The loaded connection document.
27265
+ * @param providerType - The provider to read.
27266
+ * @returns The provider's login link, or null when the provider is not a login method for this user.
27267
+ */ function userExternalConnectionLoginForProvider(connection, providerType) {
27268
+ var _connection_li;
27269
+ return connection === null || connection === void 0 ? void 0 : (_connection_li = connection.li) === null || _connection_li === void 0 ? void 0 : _connection_li[providerType];
27270
+ }
27271
+ /**
27272
+ * Returns every provider type that is a login method for this user.
27273
+ *
27274
+ * @param connection - The loaded connection document.
27275
+ * @returns The linked provider types, sorted for a stable render order.
27276
+ */ function userExternalConnectionLinkedLoginProviderTypes(connection) {
27277
+ var result = (connection === null || connection === void 0 ? void 0 : connection.li) ? Object.keys(connection.li) : [];
27278
+ result.sort();
27279
+ return result;
27280
+ }
27092
27281
 
27093
27282
  /**
27094
27283
  * Query for the UserExternalConnection documents that are currently connected to the given provider.
@@ -27110,6 +27299,30 @@ function _object_spread(target) {
27110
27299
  where('c', 'array-contains', providerType)
27111
27300
  ];
27112
27301
  }
27302
+ /**
27303
+ * Query for the UserExternalConnection document holding the given third-party account.
27304
+ *
27305
+ * The sign-in counterpart of {@link userExternalConnectionsWithConnectedProviderQuery}: that one
27306
+ * asks "which users are connected to this provider?", this one asks "which user IS this account?".
27307
+ * Both exist because a per-user document makes `e.<provider>.ea` unqueryable.
27308
+ *
27309
+ * Matches at ANY entry status — see the `ec` field docs. Expect at most one result when the
27310
+ * provider's policy declares the connection unique, but the caller must still handle more than one:
27311
+ * uniqueness is enforced at write time and a provider may only have started enforcing it recently.
27312
+ *
27313
+ * @param input - The provider type and external account id to search for.
27314
+ * @param input.providerType - The provider the account belongs to.
27315
+ * @param input.externalAccountId - The provider's stable id for the account.
27316
+ * @returns Firestore query constraints matching the user holding that external account.
27317
+ *
27318
+ * @dbxModelFirebaseIndex
27319
+ * @dbxModelFirebaseIndexModel UserExternalConnection
27320
+ * @dbxModelFirebaseIndexScope COLLECTION
27321
+ */ function userExternalConnectionsWithExternalAccountQuery(input) {
27322
+ return [
27323
+ where('ec', 'array-contains', userExternalConnectionExternalAccountKey(input))
27324
+ ];
27325
+ }
27113
27326
 
27114
27327
  function _class_call_check(instance, Constructor) {
27115
27328
  if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
@@ -27119,6 +27332,10 @@ var disconnectUserExternalConnectionParamsType = /* @__PURE__ */ inferredTargetM
27119
27332
  providerType: 'string'
27120
27333
  }));
27121
27334
  var readUserExternalConnectionAuthorizeStateParamsType = /* @__PURE__ */ inferredTargetModelParamsType.merge(type({
27335
+ providerType: 'string',
27336
+ 'mode?': "'connect' | 'link'"
27337
+ }));
27338
+ var unlinkUserExternalConnectionLoginParamsType = /* @__PURE__ */ inferredTargetModelParamsType.merge(type({
27122
27339
  providerType: 'string'
27123
27340
  }));
27124
27341
  var USER_EXTERNAL_CONNECTION_FUNCTION_TYPE_CONFIG_MAP = {};
@@ -27126,7 +27343,7 @@ var USER_EXTERNAL_CONNECTION_MODEL_CRUD_FUNCTIONS_CONFIG = {
27126
27343
  userExternalConnection: [
27127
27344
  'create',
27128
27345
  'read:authorizeState',
27129
- 'update:disconnect'
27346
+ 'update:disconnect,unlink'
27130
27347
  ]
27131
27348
  };
27132
27349
  /**
@@ -27140,4 +27357,50 @@ var USER_EXTERNAL_CONNECTION_MODEL_CRUD_FUNCTIONS_CONFIG = {
27140
27357
  * Used to generate the UserExternalConnectionFunctions map for a Functions instance.
27141
27358
  */ var userExternalConnectionFunctionMap = callModelFirebaseFunctionMapFactory(USER_EXTERNAL_CONNECTION_FUNCTION_TYPE_CONFIG_MAP, USER_EXTERNAL_CONNECTION_MODEL_CRUD_FUNCTIONS_CONFIG);
27142
27359
 
27143
- export { ALL_FORM_SPACE_NOTIFICATION_TASK_TYPES, ALL_NOTIFICATION_DELIVERY_METHODS, ALL_OIDC_TOKEN_ENDPOINT_AUTH_METHODS, ALL_OIDC_TOKEN_ENDPOINT_AUTH_METHOD_OPTIONS, ALL_STORAGE_FILE_NOTIFICATION_TASK_TYPES, ALL_USER_UPLOADS_FOLDER_NAME, ALL_USER_UPLOADS_FOLDER_PATH, ALREADY_EXISTS_ERROR_CODE, AbstractFirestoreDocument, AbstractFirestoreDocumentDataAccessorWrapper, AbstractFirestoreDocumentWithParent, AppCalendarTypeConfigService, AppFormSpaceTypeConfigService, AppNotificationTemplateTypeInfoRecordService, BAD_DOCUMENT_QUERY_CURSOR_ERROR_CODE, BAD_REQUEST_ERROR_CODE, BASE_MODEL_STORAGE_FILE_PATH, CALCOM_USER_EXTERNAL_CONNECTION_PROVIDER_TYPE, CALENDAR_EXTENSION_PROPERTY_PREFIX, CALENDAR_ICS_DEFAULT_TIMEZONE, CALENDAR_ICS_DOMAIN_NOT_CONFIGURED_ERROR_CODE, CALENDAR_ICS_FILE_EXTENSION, CALENDAR_ICS_ROTATE_THROTTLED_ERROR_CODE, CALENDAR_ICS_STORAGE_FILE_PURPOSE, CALENDAR_ICS_STORAGE_FILE_PURPOSE_GENERATE_ICS_SUBTASK, CALENDAR_ICS_STORAGE_FILE_UNAVAILABLE_ERROR_CODE, CALENDAR_OCCURRENCE_KEY_SEPARATOR, CALENDAR_ROOT_FOLDER_PATH, CALL_MODEL_APP_FUNCTION_KEY, CALL_MODEL_MISSING_OIDC_SCOPE_ERROR_CODE, CALL_MODEL_OIDC_SCOPES, CALL_MODEL_OIDC_SCOPE_DETAILS, CALL_MODEL_OIDC_SCOPE_FOR_CALL_TYPE, CALL_MODEL_OIDC_SCOPE_PREFIX, CLIENT_SECRET_BASIC_TOKEN_ENDPOINT_AUTH_METHOD, CLIENT_SECRET_JWT_TOKEN_ENDPOINT_AUTH_METHOD, CLIENT_SECRET_POST_TOKEN_ENDPOINT_AUTH_METHOD, CONFLICT_ERROR_CODE, COPY_USER_RELATED_DATA_ACCESSOR_FACTORY_FUNCTION, CREATE_MODEL_OIDC_SCOPE, CREATE_NOTIFICATION_ID_REQUIRED_ERROR_CODE, CREATE_STORAGE_FILE_SIGNED_UPLOAD_URL_MAX_EXPIRES_IN_MS, CREATE_STORAGE_FILE_SIGNED_UPLOAD_URL_MAX_FILENAME_LENGTH, CREATE_STORAGE_FILE_SIGNED_UPLOAD_URL_MIN_EXPIRES_IN_MS, CalendarDocument, CalendarEventStatus, CalendarFirestoreCollections, CalendarFunctions, CalendarSyncState, ContextGrantedModelRolesReaderInstance, DBX_FIREBASE_SERVER_NO_AUTH_ERROR_CODE, DBX_FIREBASE_SERVER_NO_UID_ERROR_CODE, DBX_FIREBASE_SERVER_PASSWORD_RESET_INVALID_CODE_ERROR_CODE, DBX_FIREBASE_SERVER_PASSWORD_RESET_NO_CONFIG_ERROR_CODE, DBX_FIREBASE_SERVER_PASSWORD_RESET_SEND_ONCE_ERROR_CODE, DBX_FIREBASE_SERVER_PASSWORD_RESET_THROTTLE_ERROR_CODE, DEFAULT_CALENDAR_ICS_EXPANSION_FUTURE_DAYS, DEFAULT_CALENDAR_ICS_EXPANSION_PAST_DAYS, DEFAULT_CALENDAR_ICS_RECURRENCE_MODE, DEFAULT_CALENDAR_ICS_ROTATE_THROTTLE_HOURS, DEFAULT_CALENDAR_INVITE_ATTENDEE_PARTICIPATION_STATUS, DEFAULT_CALENDAR_INVITE_ATTENDEE_ROLE, DEFAULT_CALENDAR_INVITE_METHOD, DEFAULT_CALENDAR_MAX_EVENTS, DEFAULT_CALENDAR_RESYNC_INTERVAL, DEFAULT_CALENDAR_RETAIN_PAST_EVENT_DAYS, DEFAULT_CALENDAR_TYPE_CONFIG, DEFAULT_CREATE_STORAGE_FILE_SIGNED_UPLOAD_URL_EXPIRES_IN_MS, DEFAULT_DATE_CELL_RANGE_VALUE, DEFAULT_FIRESTORE_DATE_CELL_SCHEDULE_VALUE, DEFAULT_FIRESTORE_ITEM_PAGE_ITERATOR_ITEMS_PER_PAGE, DEFAULT_FIRESTORE_STRING_FIELD_VALUE, DEFAULT_FIRESTORE_TIMEZONE_STRING_VALUE, DEFAULT_FIRESTORE_UNITED_STATES_ADDRESS_VALUE, DEFAULT_FIRESTORE_WEBSITE_FILE_LINK_VALUE, DEFAULT_FORM_SPACE_ALLOWED_MIME_TYPES, DEFAULT_FORM_SPACE_EXPIRES_IN, DEFAULT_FORM_SPACE_FILE_ACCESS, DEFAULT_FORM_SPACE_MAX_FILE_SIZE_BYTES, DEFAULT_FORM_SPACE_MAX_UPLOADS, DEFAULT_FORM_SPACE_SLOT_MAX_FILES, DEFAULT_FORM_SPACE_TYPE_CONFIG, DEFAULT_IN_MEMORY_CACHE_TTL, DEFAULT_ITERATE_FIRESTORE_DOCUMENT_SNAPSHOT_BATCHES_BATCH_SIZE, DEFAULT_MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER, DEFAULT_NOTIFICATION_MESSAGE_CALENDAR_ATTACHMENT_FILENAME, DEFAULT_NOTIFICATION_TASK_NOTIFICATION_MODEL_KEY, DEFAULT_NOTIFICATION_TASK_SUBTASK_CLEANUP_RETRY_ATTEMPTS, DEFAULT_NOTIFICATION_TASK_SUBTASK_CLEANUP_RETRY_DELAY, DEFAULT_NOTIFICATION_TEMPLATE_TYPE, DEFAULT_NOTIFICATION_USER_HEALTH_CHECK_PROBE_THROTTLE_MINUTES, DEFAULT_NOTIFICATION_USER_HEALTH_CHECK_THROTTLE_MINUTES, DEFAULT_NOTIFICATION_USER_HEALTH_CHECK_VERIFY_THROTTLE_SECONDS, DEFAULT_ON_CALL_QUERY_MODEL_LIMIT, DEFAULT_PAGED_ITEM_INDEX_DOCUMENT_ID, DEFAULT_PAGED_ITEM_MAX_ITEMS_PER_PAGE, DEFAULT_QUERY_CHANGE_WATCHER_DELAY, DEFAULT_SINGLE_ITEM_FIRESTORE_COLLECTION_DOCUMENT_IDENTIFIER, DEFAULT_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, DEFAULT_WEBSITE_LINK, DELETE_MODEL_OIDC_SCOPE, DISCORD_USER_EXTERNAL_CONNECTION_PROVIDER_TYPE, DOWNLOAD_MULTIPLE_STORAGE_FILES_MAX_FILES, DOWNLOAD_MULTIPLE_STORAGE_FILES_MIN_FILES, EMAIL_OIDC_SCOPE, EMAIL_OIDC_SCOPE_DETAILS, EMPTY_STORAGE_FILE_PURPOSE_SUBGROUP, EXACT_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, FIREBASE_AUTH_CREDENTIAL_ALREADY_IN_USE_ERROR, FIREBASE_AUTH_EMAIL_ALREADY_EXISTS_ERROR, FIREBASE_AUTH_EMAIL_ALREADY_IN_USE_ERROR, FIREBASE_AUTH_INVALID_PHONE_NUMBER_ERROR, FIREBASE_AUTH_NETWORK_REQUEST_ERROR, FIREBASE_AUTH_NETWORK_REQUEST_FAILED, FIREBASE_AUTH_OOB_CODE_DATA_PAIR_DELIMITER, FIREBASE_AUTH_PASSWORD_MAX_LENGTH, FIREBASE_AUTH_PASSWORD_MIN_LENGTH, FIREBASE_AUTH_PHONE_NUMBER_ALREADY_EXISTS_ERROR, FIREBASE_AUTH_PROVIDER_ALREADY_LINKED_ERROR, FIREBASE_AUTH_QUOTA_EXCEEDED_ERROR, FIREBASE_AUTH_USER_NOT_FOUND_ERROR, FIREBASE_AUTH_WRONG_PASSWORD, FIREBASE_DEVELOPMENT_FUNCTIONS_MAP_KEY, FIREBASE_SERVER_AUTH_CLAIMS_RESET_EXPIRES_AT_KEY, FIREBASE_SERVER_AUTH_CLAIMS_RESET_LAST_COM_DATE_KEY, FIREBASE_SERVER_AUTH_CLAIMS_RESET_PASSWORD_KEY, FIREBASE_SERVER_AUTH_CLAIMS_SETUP_LAST_COM_DATE_KEY, FIREBASE_SERVER_AUTH_CLAIMS_SETUP_PASSWORD_KEY, FIRESTORE_CLIENT_QUERY_CONSTRAINT_HANDLER_MAPPING, FIRESTORE_COLLECTION_NAME_SEPARATOR, FIRESTORE_DUMMY_MODEL_KEY, FIRESTORE_EMPTY_VALUE, FIRESTORE_END_AT_QUERY_CONSTRAINT_TYPE, FIRESTORE_END_AT_VALUE_QUERY_CONSTRAINT_TYPE, FIRESTORE_END_BEFORE_QUERY_CONSTRAINT_TYPE, FIRESTORE_ITEM_PAGE_ITERATOR, FIRESTORE_ITEM_PAGE_ITERATOR_DELEGATE, FIRESTORE_LIMIT_QUERY_CONSTRAINT_TYPE, FIRESTORE_LIMIT_TO_LAST_QUERY_CONSTRAINT_TYPE, FIRESTORE_MAX_WHERE_IN_FILTER_ARGS_COUNT, FIRESTORE_MODEL_ID_REGEX, FIRESTORE_MODEL_KEY_REGEX, FIRESTORE_MODEL_KEY_REGEX_STRICT, FIRESTORE_OFFSET_QUERY_CONSTRAINT_TYPE, FIRESTORE_ORDER_BY_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE, FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE, FIRESTORE_PASSTHROUGH_FIELD, FIRESTORE_PERMISSION_DENIED_ERROR_CODE, FIRESTORE_SESSION_OIDC_SCOPE, FIRESTORE_SESSION_OIDC_SCOPE_DETAILS, FIRESTORE_START_AFTER_QUERY_CONSTRAINT_TYPE, FIRESTORE_START_AT_QUERY_CONSTRAINT_TYPE, FIRESTORE_START_AT_VALUE_QUERY_CONSTRAINT_TYPE, FIRESTORE_WHERE_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE, FIRESTORE_WHERE_QUERY_CONSTRAINT_TYPE, FORBIDDEN_ERROR_CODE, FORM_SPACE_ALREADY_EXISTS_ERROR_CODE, FORM_SPACE_FILES_ROOT_FOLDER_PATH, FORM_SPACE_FILE_ACCESS_DENIED_ERROR_CODE, FORM_SPACE_FILE_NOT_FOUND_ERROR_CODE, FORM_SPACE_FUNCTION_TYPE_CONFIG_MAP, FORM_SPACE_HAS_INVALID_FILES_ERROR_CODE, FORM_SPACE_MODEL_CRUD_FUNCTIONS_CONFIG, FORM_SPACE_NOT_EDITABLE_ERROR_CODE, FORM_SPACE_NOT_FOUND_ERROR_CODE, FORM_SPACE_NOT_REOPENABLE_ERROR_CODE, FORM_SPACE_NOT_SUBMITTED_ERROR_CODE, FORM_SPACE_PROCESSING_IN_PROGRESS_ERROR_CODE, FORM_SPACE_PURPOSE, FORM_SPACE_PURPOSE_REGISTER_SUBTASK, FORM_SPACE_PURPOSE_VALIDATE_SUBTASK, FORM_SPACE_REQUIRED_SLOT_MISSING_ERROR_CODE, FORM_SPACE_SUBMISSION_NOTIFICATION_TASK_TYPE, FORM_SPACE_TYPE_MISMATCH_ERROR_CODE, FORM_SPACE_TYPE_NOT_REGISTERED_ERROR_CODE, FORM_SPACE_UPLOADED_FILE_TYPE_IDENTIFIER, FORM_SPACE_UPLOADS_FOLDER_NAME, FORM_SPACE_UPLOAD_NOT_ALLOWED_ERROR_CODE, FORM_SPACE_UPLOAD_POLICY, FORM_SPACE_UPLOAD_USER_MISMATCH_ERROR_CODE, FORM_SPACE_VALIDATION_PENDING_ERROR_CODE, FirebaseDevelopmentFunctions, FirebaseModelPermissionServiceInstance, FirebaseServerError, FirestoreAccessorStreamMode, FirestoreDocumentContextType, FormSpaceDocument, FormSpaceFileValidationState, FormSpaceFirestoreCollections, FormSpaceFunctions, FormSpaceProcessingState, FormSpaceState, GOOGLE_CLOUD_STORAGE_PUBLIC_URL_API_ENDPOINT, HIGH_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, INTERNAL_SERVER_ERROR_CODE, INVOKE_MODEL_OIDC_SCOPE, KnownNotificationHealthCheckIssueCode, LOW_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, MAX_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MAX_ON_CALL_QUERY_MODEL_LIMIT, MIN_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER_SPLITTER, MODEL_NOT_AVAILABLE_ERROR_CODE, MODEL_STORAGE_FILE_SLASH_PATH_FACTORY, MailgunNotificationHealthCheckIssueCode, ModifyBeforeSetFirestoreDocumentDataAccessorWrapper, NOTIFICATION_BOX_DOES_NOT_EXIST_ERROR_CODE, NOTIFICATION_BOX_EXCLUSION_TARGET_INVALID_ERROR_CODE, NOTIFICATION_BOX_EXISTS_FOR_MODEL_ERROR_CODE, NOTIFICATION_BOX_MODEL_CRUD_FUNCTIONS_CONFIG, NOTIFICATION_BOX_RECIPIENT_DOES_NOT_EXIST_ERROR_CODE, NOTIFICATION_FUNCTION_TYPE_CONFIG_MAP, NOTIFICATION_HEALTH_CHECK_STATUS_SEVERITY, NOTIFICATION_LOGGED_EVENT_DAY_ITEM_CONVERTER, NOTIFICATION_MESSAGE_MAX_LENGTH, NOTIFICATION_MESSAGE_MIN_LENGTH, NOTIFICATION_MODEL_ALREADY_INITIALIZED_ERROR_CODE, NOTIFICATION_RECIPIENT_NAME_MAX_LENGTH, NOTIFICATION_RECIPIENT_NAME_MIN_LENGTH, NOTIFICATION_SUBJECT_MAX_LENGTH, NOTIFICATION_SUBJECT_MIN_LENGTH, NOTIFICATION_SUMMARY_EMBEDDED_NOTIFICATION_ITEM_MESSAGE_MAX_LENGTH, NOTIFICATION_SUMMARY_EMBEDDED_NOTIFICATION_ITEM_SUBJECT_MAX_LENGTH, NOTIFICATION_SUMMARY_ITEM_LIMIT, NOTIFICATION_TASK_SUBTASK_CHECKPOINT_CLEANUP, NOTIFICATION_TASK_SUBTASK_CHECKPOINT_PROCESSING, NOTIFICATION_USER_BLOCKED_FROM_BEING_ADD_TO_RECIPIENTS_ERROR_CODE, NOTIFICATION_USER_HEALTH_CHECK_PROBE_THROTTLED_ERROR_CODE, NOTIFICATION_USER_HEALTH_CHECK_THROTTLED_ERROR_CODE, NOTIFICATION_USER_HEALTH_CHECK_VERIFY_THROTTLED_ERROR_CODE, NOTIFICATION_USER_INVALID_UID_FOR_CREATE_ERROR_CODE, NOTIFICATION_USER_LOCKED_CONFIG_FROM_BEING_UPDATED_ERROR_CODE, NOTIFICATION_WEEK_NOTIFICATION_ITEM_LIMIT, NOT_FOUND_ERROR_CODE, NotificationBoxDocument, NotificationBoxRecipientFlag, NotificationBoxRecipientTemplateConfigBoolean, NotificationDeliveryMethod, NotificationDocument, NotificationFirestoreCollections, NotificationFunctions, NotificationHealthCheckStatus, NotificationLoggedEventDayDocument, NotificationLoggedEventDayPageDocument, NotificationMessageFlag, NotificationRecipientSendFlag, NotificationSendState, NotificationSendType, NotificationSummaryDocument, NotificationUserDocument, NotificationWeekDocument, OFFLINE_ACCESS_OIDC_SCOPE, OFFLINE_ACCESS_OIDC_SCOPE_DETAILS, OIDC_ENTRY_CLIENT_TYPE, OIDC_FUNCTION_TYPE_CONFIG_MAP, OIDC_MODEL_CRUD_FUNCTIONS_CONFIG, OIDC_PROVIDER_PROFILE_DEFAULT_DESCRIPTION_SUFFIX, OPENID_OIDC_SCOPE, OPENID_OIDC_SCOPE_DETAILS, OidcEntryDocument, OidcModelFirestoreCollections, OidcModelFunctions, PERMISSION_DENIED_ERROR_CODE, PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD, PROFILE_OIDC_SCOPE, PROFILE_OIDC_SCOPE_DETAILS, PUBLIC_PKCE_TOKEN_ENDPOINT_AUTH_METHOD, QUERY_MODEL_OIDC_SCOPE, READ_MODEL_OIDC_SCOPE, RUN_DEV_FUNCTION_APP_FUNCTION_KEY, SCHEDULED_FUNCTION_DEV_FUNCTION_SPECIFIER, SCHEDULER_SYSTEM_STATE_TYPE, SERVICE_TOKEN_OIDC_SCOPE, SERVICE_TOKEN_OIDC_SCOPE_DETAILS, STANDARD_OIDC_SCOPES, STANDARD_OIDC_SCOPE_DETAILS, STORAGEFILE_RELATED_FILE_METADATA_KEY, STORAGE_FILE_ALREADY_PROCESSED_ERROR_CODE, STORAGE_FILE_CANNOT_BE_DELETED_YET_ERROR_CODE, STORAGE_FILE_FUNCTION_TYPE_CONFIG_MAP, STORAGE_FILE_GROUP_CREATE_INPUT_ERROR_CODE, STORAGE_FILE_GROUP_QUEUED_FOR_INITIALIZATION_ERROR_CODE, STORAGE_FILE_GROUP_ROOT_FOLDER_PATH, STORAGE_FILE_GROUP_ZIP_FILE_PATH, STORAGE_FILE_GROUP_ZIP_INFO_JSON_FILE_NAME, STORAGE_FILE_GROUP_ZIP_STORAGE_FILE_PURPOSE, STORAGE_FILE_GROUP_ZIP_STORAGE_FILE_PURPOSE_CREATE_ZIP_SUBTASK, STORAGE_FILE_MODEL_ALREADY_INITIALIZED_ERROR_CODE, STORAGE_FILE_MODEL_CRUD_FUNCTIONS_CONFIG, STORAGE_FILE_NOT_FLAGGED_FOR_DELETION_ERROR_CODE, STORAGE_FILE_NOT_FLAGGED_FOR_GROUPS_SYNC_ERROR_CODE, STORAGE_FILE_PROCESSING_NOTIFICATION_TASK_TYPE, STORAGE_FILE_PROCESSING_NOT_ALLOWED_FOR_INVALID_STATE_ERROR_CODE, STORAGE_FILE_PROCESSING_NOT_AVAILABLE_FOR_TYPE_ERROR_CODE, STORAGE_FILE_PROCESSING_NOT_QUEUED_FOR_PROCESSING_ERROR_CODE, STORAGE_FILE_PROCESSING_STUCK_THROTTLE_CHECK_MS, STORAGE_FILE_UPLOAD_USER_ROLE, STORAGE_FILE_UPLOAD_USER_SIMPLE_CLAIMS_CONFIGURATION, ScheduledFunctionDevelopmentFirebaseFunctionListEntry, ScheduledFunctionDevelopmentFunctionTypeEnum, StorageFileCreationType, StorageFileDocument, StorageFileFirestoreCollections, StorageFileFunctions, StorageFileGroupDocument, StorageFileProcessingState, StorageFileState, StorageFileUploadStreamUnsupportedError, SystemStateDocument, SystemStateFirestoreCollections, UNAUTHENTICATED_ERROR_CODE, UNAVAILABLE_ERROR_CODE, UNAVAILABLE_OR_DEACTIVATED_FUNCTION_ERROR_CODE, UNKNOWN_CALENDAR_TYPE, UNKNOWN_FORM_SPACE_TYPE, UNKNOWN_MODEL_TYPE_ERROR_CODE, UNTRACKABLE_NOTIFICATION_HEALTH_CHECK_PROBE_ID, UPDATE_MODEL_OIDC_SCOPE, UPLOADED_FILE_DOES_NOT_EXIST_ERROR_CODE, UPLOADED_FILE_INITIALIZATION_DISCARDED_ERROR_CODE, UPLOADED_FILE_INITIALIZATION_FAILED_ERROR_CODE, UPLOADED_FILE_NOT_ALLOWED_TO_BE_INITIALIZED_ERROR_CODE, UPLOADS_FOLDER_PATH, USER_EXTERNAL_CONNECTION_ENTRY_STATUSES, USER_EXTERNAL_CONNECTION_FUNCTION_TYPE_CONFIG_MAP, USER_EXTERNAL_CONNECTION_MODEL_CRUD_FUNCTIONS_CONFIG, UserExternalConnectionDocument, UserExternalConnectionFunctions, ZOHO_USER_EXTERNAL_CONNECTION_PROVIDER_TYPE, ZOOM_USER_EXTERNAL_CONNECTION_PROVIDER_TYPE, _createNotificationDocumentFromPair, abstractSubscribeOrUnsubscribeToNotificationBoxParamsType, abstractSubscribeToNotificationBoxParamsType, addConstraintToBuilder, addOrReplaceLimitInConstraints, adminOnlyScopesForOidcProviderProfiles, allChildDocumentsUnderParent, allChildDocumentsUnderParentPath, allChildDocumentsUnderRelativePath, allNotificationHealthCheckIssues, allowDocumentSnapshotWithPathOnceFilter, allowedNotificationRecipients, appCalendarTypeConfigService, appFormSpaceTypeConfigService, appNotificationTemplateTypeInfoRecordService, applyExclusionsToNotificationUserNotificationBoxRecipientConfigs, applyUserExternalConnectionEntry, arrayUpdateWithAccessorFunction, asTopLevelFieldPath, asTopLevelFieldPaths, assertFirestoreUpdateHasData, assertFormSpaceUploadAllowed, assertStorageUploadOptionsStringFormat, assignDateCellRangeFunction, assignDateCellScheduleFunction, assignUnitedStatesAddressFunction, assignWebsiteFileLinkFunction, assignWebsiteLinkFunction, assignmentOnlyScopesForOidcProviderProfiles, buildFirebaseCollectionTypeModelTypeMap, calculateNsForNotificationUserNotificationBoxRecipientConfigs, calculateStorageFileGroupEmbeddedFileUpdate, calculateStorageFileGroupRegeneration, calendarCollectionReference, calendarConverter, calendarEventItem, calendarEventItemCalendarDate, calendarEventItemEndDate, calendarEventItemExceptionDateSet, calendarEventItemExceptionDateValue, calendarEventItemFields, calendarEventItemForId, calendarEventItemTimezone, calendarEventItemToICalendarEvent, calendarEventItemToInviteICalendar, calendarEventItemToInviteIcsString, calendarEventItemsFilterUniqueFunction, calendarEventItemsForModelKey, calendarEventItemsSortFunction, calendarEventOccurrenceToICalendarEvent, calendarExtensionDataToICalendarExtraProperties, calendarFirestoreCollection, calendarFunctionMap, calendarFunctionTypeConfigMap, calendarIcsFileStoragePath, calendarIdForModel, calendarIdentity, calendarModelCrudFunctionsConfig, calendarNextIcsRotateAt, calendarRecurringEventItem, calendarRecurringEventItemForScheduleRange, calendarRecurringEventItemModelRecurrenceInfo, calendarRecurringEventItemRecurrenceFields, calendarRecurringEventItemToICalendarEvent, calendarRecurringEventOccurrenceKey, calendarSyncState, calendarTemplate, calendarToICalendar, calendarToIcsString, calendarTypeConfigIcsConfig, calendarTypeConfigIcsExpansionRange, calendarTypeConfigRecord, calendarsDueForResyncQuery, calendarsFlaggedForSyncQuery, calendarsForTypeQuery, callModelFirebaseFunctionMapFactory, callModelOidcScopeForCallType, canQueueStorageFileForProcessing, childFirestoreModelKey, childFirestoreModelKeyPath, childFirestoreModelKeys, cleanupOldNotificationLoggedEventDaysParamsType, cleanupSentNotificationsParamsType, clientFirebaseFirestoreContextFactory, clientFirebaseStorageContextFactory, combineUploadFileTypeDeterminers, completeSubtaskProcessingAndScheduleCleanupTaskResult, contextGrantedModelRolesReader, contextGrantedModelRolesReaderDoesNotExistErrorMessage, contextGrantedModelRolesReaderPermissionErrorMessage, convertHttpsCallableErrorToReadableError, copyDocumentIdForUserRelatedModifierFunction, copyDocumentIdToFieldModifierFunction, copyStoragePath, copyUserRelatedDataAccessorFactoryFunction, copyUserRelatedDataModifierConfig, createFormSpaceParamsType, createNotificationBoxParamsType, createNotificationDocument, createNotificationDocumentIfSending, createNotificationDocumentPair, createNotificationLoggedEventTemplate, createNotificationSummaryParamsType, createNotificationTaskTemplate, createNotificationTemplate, createNotificationUserParamsType, createOidcClientFieldParamsType, createOidcClientParamsType, createStorageFileDocumentPair, createStorageFileDocumentPairFactory, createStorageFileGroupParamsType, createStorageFileParamsType, createStorageFileSignedUploadUrlParamsType, createUserExternalConnectionParamsType, dataFromDocumentSnapshots, dataFromSnapshotStream, decodeFirebaseAuthOobCode, defaultOidcProviderProfiles, defaultPagedItemPageDataConverter, defaultUnlockedScopesForOidcProviderProfiles, delayCompletion, deleteAllQueuedStorageFilesParamsType, deleteFormSpaceParamsType, targetModelParamsType as deleteOidcClientParamsType, targetModelParamsType as deleteOidcTokenParamsType, deleteStorageFileParamsType, determineByFileName, determineByFilePath, determineByFolderName, determineUserByFolder, determineUserByFolderWrapperFunction, determineUserByUserUploadsFolderWrapperFunction, developmentFirebaseFunctionMapFactory, directDataHttpsCallable, disconnectUserExternalConnectionParamsType, documentData, documentDataFunction, documentDataWithIdAndKey, documentReferenceFromDocument, documentReferencesFromDocuments, documentReferencesFromSnapshot, downloadMultipleStorageFilesFileParamsType, downloadMultipleStorageFilesParamsType, downloadStorageFileParamsType, effectiveNotificationBoxRecipientConfig, effectiveNotificationBoxRecipientTemplateConfig, emptyUserExternalConnection, encodeFirebaseAuthOobCode, endAt, endAtValue, endBefore, expandCalendarEvents, expireAllExpiredFormSpacesParamsType, expireFormSpaceTemplate, extendFirestoreCollectionWithPagedItemAccessor, extendFirestoreCollectionWithSingleDocumentAccessor, filterConstraintsOfType, filterDisallowedFirestoreItemPageIteratorInputConstraints, filterRepeatCheckpointSnapshots, filterWithDateRange, firebaseAuthErrorToReadableError, firebaseFirestoreClientDrivers, firebaseFirestoreQueryConstraintFunctionsDriver, firebaseFirestoreQueryDriver, firebaseFunctionMapFactory, firebaseModelLoader, firebaseModelPermissionService, firebaseModelService, firebaseModelServiceFactory, firebaseModelsService, firebaseQueryItemAccumulator, firebaseQuerySnapshotAccumulator, firebaseStorageBucketFolderPath, firebaseStorageClientAccessorDriver, firebaseStorageClientAccessorFile, firebaseStorageClientAccessorFolder, firebaseStorageClientDrivers, firebaseStorageClientListFilesResultFactory, firebaseStorageContextFactory, firebaseStorageFileExists, firebaseStorageFilePathFromStorageFilePath, firebaseStorageRefForStorageFilePath, firestoreArray, firestoreArrayMap, firestoreBitwiseObjectMap, firestoreBitwiseSet, firestoreBitwiseSetMap, firestoreBoolean, firestoreClientAccessorDriver, firestoreClientArrayUpdateToUpdateData, firestoreClientIncrementUpdateToUpdateData, firestoreCollectionDocumentCache, firestoreCollectionQueryFactory, firestoreContextFactory, firestoreDate, firestoreDateCellRange, firestoreDateCellRangeArray, firestoreDateCellRangeAssignFn, firestoreDateCellSchedule, firestoreDateCellScheduleAssignFn, firestoreDateNumber, firestoreDencoderArray, firestoreDencoderMap, firestoreDencoderStringArray, firestoreDocumentAccessorContextExtension, firestoreDocumentAccessorFactory, firestoreDocumentLoader, firestoreDocumentSnapshotPairsLoader, firestoreDocumentSnapshotPairsLoaderInstance, firestoreDummyKey, firestoreEncodedArray, firestoreEncodedObjectMap, firestoreEnum, firestoreEnumArray, firestoreField, firestoreFieldConfigToModelMapFunctionsRef, firestoreFixedItemPageIteration, firestoreFixedItemPageIterationFactory, firestoreIdBatchVerifierFactory, firestoreIdentityTypeArray, firestoreIdentityTypeArrayName, firestoreItemPageIteration, firestoreItemPageIterationFactory, firestoreLatLngString, firestoreMap, firestoreMapZoomLevel, firestoreModelId, firestoreModelIdArrayField, firestoreModelIdFromDocument, firestoreModelIdFromEmail, firestoreModelIdGrantedRoleArrayMap, firestoreModelIdGrantedRoleMap, firestoreModelIdOrKeyType, firestoreModelIdString, firestoreModelIdType, firestoreModelIdentity, firestoreModelIdentityTypeMap, firestoreModelIdsFromDocuments, firestoreModelIdsFromKey, firestoreModelKey, firestoreModelKeyArrayField, firestoreModelKeyCollectionName, firestoreModelKeyCollectionType, firestoreModelKeyCollectionTypeArray, firestoreModelKeyCollectionTypeArrayName, firestoreModelKeyCollectionTypePair, firestoreModelKeyEncodedGrantedRoleMap, firestoreModelKeyFactory, firestoreModelKeyFromDocument, firestoreModelKeyGrantedRoleArrayMap, firestoreModelKeyGrantedRoleMap, firestoreModelKeyPairObject, firestoreModelKeyParentKey, firestoreModelKeyParentKeyPartPairs, firestoreModelKeyPart, firestoreModelKeyPartPairs, firestoreModelKeyPartPairsKeyPath, firestoreModelKeyPartPairsPaths, firestoreModelKeyPath, firestoreModelKeyString, firestoreModelKeyType, firestoreModelKeyTypePair, firestoreModelKeys, firestoreModelKeysFromDocuments, firestoreModelType, firestoreNotificationBoxRecipient, firestoreNotificationBoxRecipientTemplateConfigRecord, firestoreNotificationDeliveryHealthCheckResult, firestoreNotificationHealthCheck, firestoreNotificationHealthCheckIssue, firestoreNotificationHealthCheckProbe, firestoreNotificationItem, firestoreNotificationRecipientWithConfig, firestoreNotificationUserDefaultNotificationBoxRecipientConfig, firestoreNotificationUserNotificationBoxRecipientConfig, firestoreNumber, firestoreObjectArray, firestoreObjectMap, firestorePassThroughField, firestoreQueryConstraint, firestoreQueryConstraintFactory, firestoreQueryDocumentSnapshotPairsLoader, firestoreQueryFactory, firestoreSingleDocumentAccessor, firestoreString, firestoreSubObject, firestoreTimezoneString, firestoreUID, firestoreUniqueArray, firestoreUniqueKeyedArray, firestoreUniqueNumberArray, firestoreUniqueStringArray, firestoreUnitedStatesAddress, firestoreUnitedStatesAddressAssignFn, firestoreUnixDateTimeSecondsNumber, firestoreUpdateWithNoDataError, firestoreWebsiteFileLink, firestoreWebsiteFileLinkAssignFn, firestoreWebsiteFileLinkEncodedArray, firestoreWebsiteFileLinkObjectArray, firestoreWebsiteLink, firestoreWebsiteLinkArray, firestoreWebsiteLinkAssignFn, flagStaleCalendarsForSyncParamsType, flatFirestoreModelKey, formSpaceCollectionReference, formSpaceConverter, formSpaceFileSlotConfig, formSpaceFileSlotName, formSpaceFileStoragePath, formSpaceFileSubObject, formSpaceFileUploaderId, formSpaceFilesInSlot, formSpaceFirestoreCollection, formSpaceFunctionMap, formSpaceIdForModel, formSpaceIdentity, formSpaceKeyForStorageFile, formSpaceSlotFileAccess, formSpaceSlotMaxFiles, formSpaceSlotMinFiles, formSpaceSlotStatus, formSpaceStorageFileGroupId, formSpaceSubmissionNotificationTaskTemplate, formSpaceSubmissionNotificationTaskUniqueId, formSpaceSubmitBlockers, formSpaceTemplate, formSpaceTypeConfigRecord, formSpaceUploadFileNameDetails, formSpaceUploadsFilePath, formSpaceUploadsFolderPath, formSpacesDueForExpirationQuery, formSpacesForOwnerQuery, formSpacesQueuedForProcessingQuery, getDataFromDocumentSnapshots, getDocumentSnapshotData, getDocumentSnapshotDataPair, getDocumentSnapshotDataPairs, getDocumentSnapshotDataPairsWithData, getDocumentSnapshotDataTuples, getDocumentSnapshotPair, getDocumentSnapshotPairs, getDocumentSnapshots, getDocumentSnapshotsData, grantFormSpaceRolesForUserAuthFunction, grantFullAccessIfAdmin, grantFullAccessIfAuthUserRelated, grantModelRolesIfAdmin, grantModelRolesIfAdminFunction, grantModelRolesIfAuthUserRelatedModelFunction, grantModelRolesIfFunction, grantModelRolesIfHasAuthRolesFactory, grantModelRolesIfHasAuthRolesFunction, grantModelRolesOnlyIfFunction, grantStorageFileRolesForUserAuthFunction, hasRunInCurrentHour, inContextFirebaseModelServiceFactory, inContextFirebaseModelsServiceFactory, inMemoryFirestoreCollectionCacheDelegate, inMemoryFirestoreContextCache, inMemoryFirestoreContextCacheFactory, incrementUpdateWithAccessorFunction, inferCalendarRelatedModelKey, inferKeyFromTwoWayFlatFirestoreModelKey, inferNotificationBoxRelatedModelKey, inferStorageFileGroupRelatedModelKey, inferredTargetModelIdParamsType, inferredTargetModelParamsType, initializeAllApplicableNotificationBoxesParamsType, initializeAllApplicableNotificationSummariesParamsType, initializeAllApplicableStorageFileGroupsParamsType, initializeAllStorageFilesFromUploadsParamsType, initializeNotificationModelParamsType, initializeStorageFileFromUploadParamsType, initializeStorageFileModelParamsType, interceptAccessorFactoryFunction, isAdminInFirebaseModelContext, isCalendarIcsRotateThrottled, isClientFirebaseError, isCompleteNotificationSendState, isFirebaseStorageObjectNotFoundError, isFirestoreModelId, isFirestoreModelIdOrKey, isFirestoreModelKey, isFormSpaceEditable, isFormSpaceFileAccessibleByUser, isFormSpaceFileAccessibleWithAccess, isFormSpaceFullyLocked, isFormSpaceReopenable, isFormSpaceStorageFileAccessibleByUser, isLoggedEventNotification, isNthHourOfDay, isOwnerOfUserRelatedModelInFirebaseModelContext, isPendingNotificationHealthCheckProbe, isProblemNotificationHealthCheckStatus, iterateFirestoreDocumentSnapshotBatches, iterateFirestoreDocumentSnapshotCheckpoints, iterateFirestoreDocumentSnapshotPairBatches, iterateFirestoreDocumentSnapshotPairs, iterateFirestoreDocumentSnapshots, iterateStorageListFiles, iterateStorageListFilesByEachFile, iterateStorageListFilesFactory, iterationQueryDocChangeWatcher, iterationQueryDocChangeWatcherChangeTypeForGroup, latestSnapshotsFromDocuments, lazyFirebaseFunctionsFactory, limit, limitToLast, limitUploadFileTypeDeterminer, limitedFirestoreDocumentAccessorFactory, limitedFirestoreDocumentAccessorSnapshotCache, loadAllFirestoreDocumentSnapshot, loadAllFirestoreDocumentSnapshotPairs, loadDocumentsForDocumentReferences, loadDocumentsForDocumentReferencesFromValues, loadDocumentsForIds, loadDocumentsForIdsFromValues, loadDocumentsForKeys, loadDocumentsForKeysFromValues, loadDocumentsForSnapshots, loadDocumentsForValues, loadNotificationBoxDocumentForReferencePair, loadSchedulerSystemState, loadStorageFileGroupDocumentForReferencePair, lockFormSpaceParamsType, lockFormSpaceTemplate, makeDocuments, makeFirestoreCollection, makeFirestoreCollectionGroup, makeFirestoreCollectionWithParent, makeFirestoreContextCache, makeFirestoreItemPageIteratorDelegate, makeFirestoreQueryConstraintFunctionsDriver, makePagedItemFirestoreCollection, makeRootSingleItemFirestoreCollection, makeSingleItemFirestoreCollection, mapDataFromSnapshot, mapHttpsCallable, mapLatestSnapshotsFromDocuments, markCalendarForSyncTemplate, mergeNotificationBoxRecipientTemplateConfigRecords, mergeNotificationBoxRecipientTemplateConfigs, mergeNotificationBoxRecipients, mergeNotificationSendMessagesResult, mergeNotificationUserDefaultNotificationBoxRecipientConfig, mergeNotificationUserNotificationBoxRecipientConfigs, modelStorageSlashPathFactory, modifyBeforeSetInterceptAccessorFactoryFunction, newDocuments, newNotificationBoxRecipientForUid, noContentNotificationMessageFunctionFactory, noStringFormatInStorageUploadOptionsError, noopFirestoreCollectionCache, noopFirestoreCollectionCacheDelegate, noopFirestoreCollectionDocumentCache, noopFirestoreContextCache, notificationBoxCollectionReference, notificationBoxConverter, notificationBoxFirestoreCollection, notificationBoxIdForModel, notificationBoxIdentity, notificationBoxRecipientTemplateConfigArrayEntryParamType, notificationBoxRecipientTemplateConfigArrayToRecord, notificationBoxRecipientTemplateConfigRecordToArray, notificationBoxesFlaggedForNeedsInitializationQuery, notificationBoxesFlaggedInvalidQuery, notificationCollectionReference, notificationCollectionReferenceFactory, notificationConverter, notificationDeliveryHealthCheckResultForMethod, notificationFirestoreCollectionFactory, notificationFirestoreCollectionGroup, notificationFunctionMap, notificationHealthCheckIssue, notificationHealthCheckPendingProbeMethods, notificationIdentity, notificationLoggedEventDayCollectionReference, notificationLoggedEventDayCollectionReferenceFactory, notificationLoggedEventDayConverter, notificationLoggedEventDayFirestoreCollectionFactory, notificationLoggedEventDayFirestoreCollectionGroup, notificationLoggedEventDayId, notificationLoggedEventDayIdentity, notificationLoggedEventDayPageCollectionReference, notificationLoggedEventDayPageFirestoreCollectionGroup, notificationLoggedEventDayPageIdentity, notificationLoggedEventDayPagedItemsCollectionFactory, notificationLoggedEventDayPagedItemsCollectionReferenceFactory, notificationLoggedEventDaysOlderThanQuery, notificationLoggedEventLoader, notificationMessageFunction, notificationRecipientParamsType, notificationSendExclusionCanSendFunction, notificationSendFlagsImplyIsComplete, notificationSubtaskComplete, notificationSummariesFlaggedForNeedsInitializationQuery, notificationSummaryCollectionReference, notificationSummaryConverter, notificationSummaryFirestoreCollection, notificationSummaryIdForModel, notificationSummaryIdForUidFunctionForRootFirestoreModelIdentity, notificationSummaryIdentity, notificationTaskCanRunNextCheckpoint, notificationTaskComplete, notificationTaskDelayRetry, notificationTaskFailed, notificationTaskPartiallyComplete, notificationTaskUniqueId, notificationTemplateTypeInfoRecord, notificationUserCollectionReference, notificationUserConverter, notificationUserFirestoreCollection, notificationUserHasExclusionQuery, notificationUserHealthCheckNextProbeAt, notificationUserHealthCheckNextProbeAtByMethod, notificationUserHealthCheckNextRunAt, notificationUserHealthCheckNextVerifyAt, notificationUserHealthCheckParamsType, notificationUserIdentity, notificationUsersFlaggedForNeedsSyncQuery, notificationWeekCollectionReference, notificationWeekCollectionReferenceFactory, notificationWeekConverter, notificationWeekFirestoreCollectionFactory, notificationWeekFirestoreCollectionGroup, notificationWeekIdentity, notificationsPastSendAtTimeQuery, notificationsReadyForCleanupQuery, nthHourOfDayIndex, offset, oidcClientEntriesByOwnerQuery, oidcEntriesByClientIdQuery, oidcEntriesByGrantIdQuery, oidcEntriesByUidQuery, oidcEntriesByUserCodeQuery, oidcEntriesWithTypeQuery, oidcEntryCollectionReference, oidcEntryConverter, oidcEntryFirestoreCollection, oidcEntryIdentity, oidcGrantEntriesByUidQuery, oidcModelFunctionMap, oidcProviderProfileDetails, oidcProviderProfilesForClient, oidcProviderProfilesForKeys, oidcScopeTermSatisfied, oidcScopeTermsSatisfied, oidcScopesFromScopeClaim, onCallCreateModelParams, onCallCreateModelResult, onCallCreateModelResultWithDocs, onCallDeleteModelParams, onCallDevelopmentParams, onCallInvokeModelParams, onCallQueryModelParams, onCallReadModelParams, onCallTypedModelParamsFunction, onCallUpdateModelParams, optionalFirestoreArray, optionalFirestoreBoolean, optionalFirestoreDate, optionalFirestoreDateNumber, optionalFirestoreEnum, optionalFirestoreField, optionalFirestoreNotificationHealthCheck, optionalFirestoreNumber, optionalFirestorePassthroughJsonField, optionalFirestoreString, optionalFirestoreUID, optionalFirestoreUnitedStatesAddress, optionalFirestoreUnixDateTimeSecondsNumber, orderBy, orderByDocumentId, parseFormSpaceUploadPath, processAllQueuedFormSpacesParamsType, processAllQueuedStorageFilesParamsType, processStorageFileParamsType, pruneCalendarEvents, readFirestoreModelKey, readFirestoreModelKeyFromDocumentSnapshot, readLoggingFirestoreContextCache, readLoggingFirestoreContextCacheFactory, readMultipleStorageFilesMetadataFileParamsType, readMultipleStorageFilesMetadataParamsType, readStorageFileMetadataParamsType, readUserExternalConnectionAuthorizeStateParamsType, regenerateAllFlaggedStorageFileGroupsContentParamsType, regenerateStorageFileGroupContentParamsType, removeCalendarEventItems, removeFormSpaceFileParamsType, reopenFormSpaceParamsType, reopenFormSpaceTemplate, replaceCalendarEventItemsForModelKey, replaceConstraints, requiredFormSpaceFileSlots, requiredScopesForOidcProviderProfiles, resolveEffectiveOidcScopeTerms, resolveFormSpaceExpiresAt, resolveFormSpaceLocksAt, resolveOidcModelScopeRequirement, resyncAllNotificationUserParamsType, targetModelParamsType as resyncNotificationUserParamsType, rollupNotificationDeliveryHealthCheckResultStatus, rollupNotificationHealthCheckResultStatus, rollupNotificationHealthCheckStatus, rotateCalendarIcsParamsType, targetModelParamsType as rotateOidcClientSecretParamsType, scheduledFunctionDevelopmentFirebaseFunctionParamsType, schedulerSystemDataConverter, schedulerSystemStateRead, scopesForOidcProviderProfiles, selectFromFirebaseModelsService, sendNotificationParamsType, sendQueuedNotificationsParamsType, separateConstraints, setIdAndKeyFromKeyIdRefOnDocumentData, setIdAndKeyFromSnapshotOnDocumentData, shouldSaveNotificationToNotificationWeek, shouldSendCreatedNotificationInput, snapshotConverterFunctions, snapshotStreamDataForAccessor, snapshotStreamForAccessor, sortNotificationItemsFunction, startAfter, startAt, startAtValue, storageFileCollectionReference, storageFileConverter, storageFileDisplayFileName, storageFileFirestoreCollection, storageFileFlaggedForSyncWithGroupsQuery, storageFileFunctionMap, storageFileGroupCollectionReference, storageFileGroupConverter, storageFileGroupCreateStorageFileKeyFactory, storageFileGroupCreatedStorageFileKey, storageFileGroupEmbeddedFile, storageFileGroupFirestoreCollection, storageFileGroupFolderPath, storageFileGroupIdForModel, storageFileGroupIdentity, storageFileGroupZipFileStoragePath, storageFileGroupZipStorageFileKey, storageFileGroupsFlaggedForContentRegenerationQuery, storageFileGroupsFlaggedForNeedsInitializationQuery, storageFileGroupsFlaggedInvalidQuery, storageFileIdentity, storageFileProcessingNotificationTaskTemplate, storageFilePurposeAndUserQuery, storageFileUploadScopeType, storageFilesForFormSpaceQuery, storageFilesQueuedForDeleteQuery, storageFilesQueuedForProcessingQuery, storageListFilesResultFactory, storageListFilesResultHasNoNextError, storagePathFactory, storagePublicDownloadUrl, storedFileReaderFactory, streamDocumentSnapshotDataPairs, streamDocumentSnapshotDataPairsWithData, streamDocumentSnapshotsData, streamFromOnSnapshot, submitFormSpaceParamsType, submitFormSpaceTemplate, syncAllFlaggedCalendarsParamsType, syncAllFlaggedStorageFilesWithGroupsParamsType, syncCalendarParamsType, syncStorageFileWithGroupsParamsType, systemStateCollectionReference, systemStateConverter, systemStateFirestoreCollection, systemStateIdentity, systemStateStoredDataConverterFactory, targetModelIdParamsType, targetModelParamsType, twoWayFlatFirestoreModelKey, unreadNotificationItems, unsupportedFirestoreDriverFunctionError, untrackableNotificationHealthCheckProbe, updateCalendarEventsTemplate, updateFormSpaceParamsType, targetModelParamsType as updateNotificationBoxParamsType, updateNotificationBoxRecipientLikeParamsType, updateNotificationBoxRecipientParamsType, updateNotificationBoxRecipientTemplateConfigRecord, updateNotificationRecipient, updateNotificationSummaryParamsType, updateNotificationUserDefaultNotificationBoxRecipientConfig, updateNotificationUserDefaultNotificationBoxRecipientConfigParamsType, updateNotificationUserNotificationBoxRecipientConfigIfChanged, updateNotificationUserNotificationBoxRecipientConfigs, updateNotificationUserNotificationBoxRecipientParamsType, updateNotificationUserNotificationSendExclusions, updateNotificationUserParamsType, updateOidcClientFieldParamsType, updateOidcClientParamsType, updateStorageFileGroupEntryParamsType, updateStorageFileGroupParamsType, updateStorageFileParamsType, updateWithAccessorUpdateAndConverterFunction, uploadFileWithStream, upsertCalendarEventItems, useContextAuth, useContextAuthUid, useDocumentSnapshot, useDocumentSnapshotData, useFirebaseModelsService, userExternalConnectionAccessorFactory, userExternalConnectionCollectionReference, userExternalConnectionConnectedProviderTypes, userExternalConnectionConverter, userExternalConnectionEntryFields, userExternalConnectionEntryForOutcome, userExternalConnectionEntryForProvider, userExternalConnectionEntryIsConnected, userExternalConnectionEntryIsExpired, userExternalConnectionFirestoreCollection, userExternalConnectionFunctionMap, userExternalConnectionIdentity, userExternalConnectionIsConnectedToProvider, userExternalConnectionsWithConnectedProviderQuery, userUploadsFolderSlashPathFactory, userUploadsFolderStoragePathFactory, where, whereDateIsAfter, whereDateIsAfterWithSort, whereDateIsBefore, whereDateIsBeforeWithSort, whereDateIsBetween, whereDateIsInRange, whereDateIsOnOrAfter, whereDateIsOnOrAfterWithSort, whereDateIsOnOrBefore, whereDateIsOnOrBeforeWithSort, whereDocumentId, whereStringHasRootIdentityModelKey, whereStringValueHasPrefix };
27360
+ /**
27361
+ * Error codes the UserExternalConnection server surfaces.
27362
+ *
27363
+ * Declared HERE rather than beside the `HttpsError` factories in `@dereekb/firebase-server/model`
27364
+ * because both sides need them: the server throws them, and the client branches on them — a login
27365
+ * page deciding what to say about a refused sign-in, or a client treating a raced
27366
+ * `..._ALREADY_EXISTS` as success. A code the browser cannot import is a code the browser has to
27367
+ * hard-code.
27368
+ */ var USER_EXTERNAL_CONNECTION_PROVIDER_NOT_CONNECTED_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_PROVIDER_NOT_CONNECTED';
27369
+ var USER_EXTERNAL_CONNECTION_PROVIDER_NOT_ALLOWED_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_PROVIDER_NOT_ALLOWED';
27370
+ var USER_EXTERNAL_CONNECTION_ALREADY_EXISTS_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_ALREADY_EXISTS';
27371
+ var USER_EXTERNAL_CONNECTION_CREDENTIALS_EXPIRED_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_CREDENTIALS_EXPIRED';
27372
+ var USER_EXTERNAL_CONNECTION_EXTERNAL_ACCOUNT_IN_USE_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_EXTERNAL_ACCOUNT_IN_USE';
27373
+ var USER_EXTERNAL_CONNECTION_SIGN_IN_NOT_ENABLED_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_SIGN_IN_NOT_ENABLED';
27374
+ var USER_EXTERNAL_CONNECTION_SIGN_IN_DENIED_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_SIGN_IN_DENIED';
27375
+ var USER_EXTERNAL_CONNECTION_SIGN_IN_EMAIL_CONFLICT_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_SIGN_IN_EMAIL_CONFLICT';
27376
+ var USER_EXTERNAL_CONNECTION_SIGN_IN_USER_MISSING_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_SIGN_IN_USER_MISSING';
27377
+ var USER_EXTERNAL_CONNECTION_SIGN_IN_IDENTITY_UNAVAILABLE_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_SIGN_IN_IDENTITY_UNAVAILABLE';
27378
+ /**
27379
+ * Refuses an unlink that would leave the account with no way back in.
27380
+ */ var USER_EXTERNAL_CONNECTION_UNLINK_LAST_LOGIN_METHOD_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_UNLINK_LAST_LOGIN_METHOD';
27381
+ /**
27382
+ * Refuses a `link` round trip for a provider the app has not enabled for sign-in.
27383
+ *
27384
+ * Distinct from `..._SIGN_IN_NOT_ENABLED`: nothing is signing in — an already-authenticated user asked
27385
+ * to make the provider a login method, and the same `policy.signIn` opt-in governs both.
27386
+ */ var USER_EXTERNAL_CONNECTION_LINK_NOT_ENABLED_ERROR_CODE = 'USER_EXTERNAL_CONNECTION_LINK_NOT_ENABLED';
27387
+ /**
27388
+ * The only error codes a failed SIGN-IN reports back to the browser.
27389
+ *
27390
+ * An ALLOWLIST rather than a filter: a failed sign-in redirects to a URL the user can read, so
27391
+ * anything that reaches it is public. Passing whatever code an internal failure happened to carry
27392
+ * would leak the shape of that failure, and passing a message would leak its text — so a code absent
27393
+ * from this set is reported as nothing at all.
27394
+ *
27395
+ * Shared with the client so a login page's copy map and the server's allowlist cannot drift.
27396
+ */ var USER_EXTERNAL_CONNECTION_SIGN_IN_REPORTABLE_ERROR_CODES = new Set([
27397
+ USER_EXTERNAL_CONNECTION_EXTERNAL_ACCOUNT_IN_USE_ERROR_CODE,
27398
+ USER_EXTERNAL_CONNECTION_SIGN_IN_NOT_ENABLED_ERROR_CODE,
27399
+ USER_EXTERNAL_CONNECTION_SIGN_IN_DENIED_ERROR_CODE,
27400
+ USER_EXTERNAL_CONNECTION_SIGN_IN_EMAIL_CONFLICT_ERROR_CODE,
27401
+ USER_EXTERNAL_CONNECTION_SIGN_IN_USER_MISSING_ERROR_CODE,
27402
+ USER_EXTERNAL_CONNECTION_SIGN_IN_IDENTITY_UNAVAILABLE_ERROR_CODE,
27403
+ USER_EXTERNAL_CONNECTION_LINK_NOT_ENABLED_ERROR_CODE
27404
+ ]);
27405
+
27406
+ export { ALL_FORM_SPACE_NOTIFICATION_TASK_TYPES, ALL_NOTIFICATION_DELIVERY_METHODS, ALL_OIDC_TOKEN_ENDPOINT_AUTH_METHODS, ALL_OIDC_TOKEN_ENDPOINT_AUTH_METHOD_OPTIONS, ALL_STORAGE_FILE_NOTIFICATION_TASK_TYPES, ALL_USER_UPLOADS_FOLDER_NAME, ALL_USER_UPLOADS_FOLDER_PATH, ALREADY_EXISTS_ERROR_CODE, AbstractFirestoreDocument, AbstractFirestoreDocumentDataAccessorWrapper, AbstractFirestoreDocumentWithParent, AppCalendarTypeConfigService, AppFormSpaceTypeConfigService, AppNotificationTemplateTypeInfoRecordService, BAD_DOCUMENT_QUERY_CURSOR_ERROR_CODE, BAD_REQUEST_ERROR_CODE, BASE_MODEL_STORAGE_FILE_PATH, CALCOM_USER_EXTERNAL_CONNECTION_PROVIDER_TYPE, CALENDAR_EXTENSION_PROPERTY_PREFIX, CALENDAR_ICS_DEFAULT_TIMEZONE, CALENDAR_ICS_DOMAIN_NOT_CONFIGURED_ERROR_CODE, CALENDAR_ICS_FILE_EXTENSION, CALENDAR_ICS_ROTATE_THROTTLED_ERROR_CODE, CALENDAR_ICS_STORAGE_FILE_PURPOSE, CALENDAR_ICS_STORAGE_FILE_PURPOSE_GENERATE_ICS_SUBTASK, CALENDAR_ICS_STORAGE_FILE_UNAVAILABLE_ERROR_CODE, CALENDAR_OCCURRENCE_KEY_SEPARATOR, CALENDAR_ROOT_FOLDER_PATH, CALL_MODEL_APP_FUNCTION_KEY, CALL_MODEL_MISSING_OIDC_SCOPE_ERROR_CODE, CALL_MODEL_OIDC_SCOPES, CALL_MODEL_OIDC_SCOPE_DETAILS, CALL_MODEL_OIDC_SCOPE_FOR_CALL_TYPE, CALL_MODEL_OIDC_SCOPE_PREFIX, CLIENT_SECRET_BASIC_TOKEN_ENDPOINT_AUTH_METHOD, CLIENT_SECRET_JWT_TOKEN_ENDPOINT_AUTH_METHOD, CLIENT_SECRET_POST_TOKEN_ENDPOINT_AUTH_METHOD, CONFLICT_ERROR_CODE, COPY_USER_RELATED_DATA_ACCESSOR_FACTORY_FUNCTION, CREATE_MODEL_OIDC_SCOPE, CREATE_NOTIFICATION_ID_REQUIRED_ERROR_CODE, CREATE_STORAGE_FILE_SIGNED_UPLOAD_URL_MAX_EXPIRES_IN_MS, CREATE_STORAGE_FILE_SIGNED_UPLOAD_URL_MAX_FILENAME_LENGTH, CREATE_STORAGE_FILE_SIGNED_UPLOAD_URL_MIN_EXPIRES_IN_MS, CalendarDocument, CalendarEventStatus, CalendarFirestoreCollections, CalendarFunctions, CalendarSyncState, ContextGrantedModelRolesReaderInstance, DBX_FIREBASE_SERVER_NO_AUTH_ERROR_CODE, DBX_FIREBASE_SERVER_NO_UID_ERROR_CODE, DBX_FIREBASE_SERVER_PASSWORD_RESET_INVALID_CODE_ERROR_CODE, DBX_FIREBASE_SERVER_PASSWORD_RESET_NO_CONFIG_ERROR_CODE, DBX_FIREBASE_SERVER_PASSWORD_RESET_SEND_ONCE_ERROR_CODE, DBX_FIREBASE_SERVER_PASSWORD_RESET_THROTTLE_ERROR_CODE, DEFAULT_CALENDAR_ICS_EXPANSION_FUTURE_DAYS, DEFAULT_CALENDAR_ICS_EXPANSION_PAST_DAYS, DEFAULT_CALENDAR_ICS_RECURRENCE_MODE, DEFAULT_CALENDAR_ICS_ROTATE_THROTTLE_HOURS, DEFAULT_CALENDAR_INVITE_ATTENDEE_PARTICIPATION_STATUS, DEFAULT_CALENDAR_INVITE_ATTENDEE_ROLE, DEFAULT_CALENDAR_INVITE_METHOD, DEFAULT_CALENDAR_MAX_EVENTS, DEFAULT_CALENDAR_RESYNC_INTERVAL, DEFAULT_CALENDAR_RETAIN_PAST_EVENT_DAYS, DEFAULT_CALENDAR_TYPE_CONFIG, DEFAULT_CREATE_STORAGE_FILE_SIGNED_UPLOAD_URL_EXPIRES_IN_MS, DEFAULT_DATE_CELL_RANGE_VALUE, DEFAULT_FIRESTORE_DATE_CELL_SCHEDULE_VALUE, DEFAULT_FIRESTORE_ITEM_PAGE_ITERATOR_ITEMS_PER_PAGE, DEFAULT_FIRESTORE_STRING_FIELD_VALUE, DEFAULT_FIRESTORE_TIMEZONE_STRING_VALUE, DEFAULT_FIRESTORE_UNITED_STATES_ADDRESS_VALUE, DEFAULT_FIRESTORE_WEBSITE_FILE_LINK_VALUE, DEFAULT_FORM_SPACE_ALLOWED_MIME_TYPES, DEFAULT_FORM_SPACE_EXPIRES_IN, DEFAULT_FORM_SPACE_FILE_ACCESS, DEFAULT_FORM_SPACE_MAX_FILE_SIZE_BYTES, DEFAULT_FORM_SPACE_MAX_UPLOADS, DEFAULT_FORM_SPACE_SLOT_MAX_FILES, DEFAULT_FORM_SPACE_TYPE_CONFIG, DEFAULT_IN_MEMORY_CACHE_TTL, DEFAULT_ITERATE_FIRESTORE_DOCUMENT_SNAPSHOT_BATCHES_BATCH_SIZE, DEFAULT_MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER, DEFAULT_NOTIFICATION_MESSAGE_CALENDAR_ATTACHMENT_FILENAME, DEFAULT_NOTIFICATION_TASK_NOTIFICATION_MODEL_KEY, DEFAULT_NOTIFICATION_TASK_SUBTASK_CLEANUP_RETRY_ATTEMPTS, DEFAULT_NOTIFICATION_TASK_SUBTASK_CLEANUP_RETRY_DELAY, DEFAULT_NOTIFICATION_TEMPLATE_TYPE, DEFAULT_NOTIFICATION_USER_HEALTH_CHECK_PROBE_THROTTLE_MINUTES, DEFAULT_NOTIFICATION_USER_HEALTH_CHECK_THROTTLE_MINUTES, DEFAULT_NOTIFICATION_USER_HEALTH_CHECK_VERIFY_THROTTLE_SECONDS, DEFAULT_ON_CALL_QUERY_MODEL_LIMIT, DEFAULT_PAGED_ITEM_INDEX_DOCUMENT_ID, DEFAULT_PAGED_ITEM_MAX_ITEMS_PER_PAGE, DEFAULT_QUERY_CHANGE_WATCHER_DELAY, DEFAULT_SINGLE_ITEM_FIRESTORE_COLLECTION_DOCUMENT_IDENTIFIER, DEFAULT_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, DEFAULT_WEBSITE_LINK, DELETE_MODEL_OIDC_SCOPE, DISCORD_USER_EXTERNAL_CONNECTION_PROVIDER_TYPE, DOWNLOAD_MULTIPLE_STORAGE_FILES_MAX_FILES, DOWNLOAD_MULTIPLE_STORAGE_FILES_MIN_FILES, EMAIL_OIDC_SCOPE, EMAIL_OIDC_SCOPE_DETAILS, EMPTY_STORAGE_FILE_PURPOSE_SUBGROUP, EXACT_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, FIREBASE_AUTH_CREDENTIAL_ALREADY_IN_USE_ERROR, FIREBASE_AUTH_EMAIL_ALREADY_EXISTS_ERROR, FIREBASE_AUTH_EMAIL_ALREADY_IN_USE_ERROR, FIREBASE_AUTH_INVALID_PHONE_NUMBER_ERROR, FIREBASE_AUTH_NETWORK_REQUEST_ERROR, FIREBASE_AUTH_NETWORK_REQUEST_FAILED, FIREBASE_AUTH_OOB_CODE_DATA_PAIR_DELIMITER, FIREBASE_AUTH_PASSWORD_MAX_LENGTH, FIREBASE_AUTH_PASSWORD_MIN_LENGTH, FIREBASE_AUTH_PHONE_NUMBER_ALREADY_EXISTS_ERROR, FIREBASE_AUTH_PROVIDER_ALREADY_LINKED_ERROR, FIREBASE_AUTH_QUOTA_EXCEEDED_ERROR, FIREBASE_AUTH_USER_NOT_FOUND_ERROR, FIREBASE_AUTH_WRONG_PASSWORD, FIREBASE_DEVELOPMENT_FUNCTIONS_MAP_KEY, FIREBASE_SERVER_AUTH_CLAIMS_RESET_EXPIRES_AT_KEY, FIREBASE_SERVER_AUTH_CLAIMS_RESET_LAST_COM_DATE_KEY, FIREBASE_SERVER_AUTH_CLAIMS_RESET_PASSWORD_KEY, FIREBASE_SERVER_AUTH_CLAIMS_SETUP_LAST_COM_DATE_KEY, FIREBASE_SERVER_AUTH_CLAIMS_SETUP_PASSWORD_KEY, FIRESTORE_CLIENT_QUERY_CONSTRAINT_HANDLER_MAPPING, FIRESTORE_COLLECTION_NAME_SEPARATOR, FIRESTORE_DUMMY_MODEL_KEY, FIRESTORE_EMPTY_VALUE, FIRESTORE_END_AT_QUERY_CONSTRAINT_TYPE, FIRESTORE_END_AT_VALUE_QUERY_CONSTRAINT_TYPE, FIRESTORE_END_BEFORE_QUERY_CONSTRAINT_TYPE, FIRESTORE_ITEM_PAGE_ITERATOR, FIRESTORE_ITEM_PAGE_ITERATOR_DELEGATE, FIRESTORE_LIMIT_QUERY_CONSTRAINT_TYPE, FIRESTORE_LIMIT_TO_LAST_QUERY_CONSTRAINT_TYPE, FIRESTORE_MAX_WHERE_IN_FILTER_ARGS_COUNT, FIRESTORE_MODEL_ID_REGEX, FIRESTORE_MODEL_KEY_REGEX, FIRESTORE_MODEL_KEY_REGEX_STRICT, FIRESTORE_OFFSET_QUERY_CONSTRAINT_TYPE, FIRESTORE_ORDER_BY_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE, FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE, FIRESTORE_PASSTHROUGH_FIELD, FIRESTORE_PERMISSION_DENIED_ERROR_CODE, FIRESTORE_SESSION_OIDC_SCOPE, FIRESTORE_SESSION_OIDC_SCOPE_DETAILS, FIRESTORE_START_AFTER_QUERY_CONSTRAINT_TYPE, FIRESTORE_START_AT_QUERY_CONSTRAINT_TYPE, FIRESTORE_START_AT_VALUE_QUERY_CONSTRAINT_TYPE, FIRESTORE_WHERE_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE, FIRESTORE_WHERE_QUERY_CONSTRAINT_TYPE, FORBIDDEN_ERROR_CODE, FORM_SPACE_ALREADY_EXISTS_ERROR_CODE, FORM_SPACE_FILES_ROOT_FOLDER_PATH, FORM_SPACE_FILE_ACCESS_DENIED_ERROR_CODE, FORM_SPACE_FILE_NOT_FOUND_ERROR_CODE, FORM_SPACE_FUNCTION_TYPE_CONFIG_MAP, FORM_SPACE_HAS_INVALID_FILES_ERROR_CODE, FORM_SPACE_MODEL_CRUD_FUNCTIONS_CONFIG, FORM_SPACE_NOT_EDITABLE_ERROR_CODE, FORM_SPACE_NOT_FOUND_ERROR_CODE, FORM_SPACE_NOT_REOPENABLE_ERROR_CODE, FORM_SPACE_NOT_SUBMITTED_ERROR_CODE, FORM_SPACE_PROCESSING_IN_PROGRESS_ERROR_CODE, FORM_SPACE_PURPOSE, FORM_SPACE_PURPOSE_REGISTER_SUBTASK, FORM_SPACE_PURPOSE_VALIDATE_SUBTASK, FORM_SPACE_REQUIRED_SLOT_MISSING_ERROR_CODE, FORM_SPACE_SUBMISSION_NOTIFICATION_TASK_TYPE, FORM_SPACE_TYPE_MISMATCH_ERROR_CODE, FORM_SPACE_TYPE_NOT_REGISTERED_ERROR_CODE, FORM_SPACE_UPLOADED_FILE_TYPE_IDENTIFIER, FORM_SPACE_UPLOADS_FOLDER_NAME, FORM_SPACE_UPLOAD_NOT_ALLOWED_ERROR_CODE, FORM_SPACE_UPLOAD_POLICY, FORM_SPACE_UPLOAD_USER_MISMATCH_ERROR_CODE, FORM_SPACE_VALIDATION_PENDING_ERROR_CODE, FirebaseDevelopmentFunctions, FirebaseModelPermissionServiceInstance, FirebaseServerError, FirestoreAccessorStreamMode, FirestoreDocumentContextType, FormSpaceDocument, FormSpaceFileValidationState, FormSpaceFirestoreCollections, FormSpaceFunctions, FormSpaceProcessingState, FormSpaceState, GOOGLE_CLOUD_STORAGE_PUBLIC_URL_API_ENDPOINT, HIGH_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, INTERNAL_SERVER_ERROR_CODE, INVOKE_MODEL_OIDC_SCOPE, KnownNotificationHealthCheckIssueCode, LOW_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, MAX_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MAX_ON_CALL_QUERY_MODEL_LIMIT, MIN_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER_SPLITTER, MODEL_NOT_AVAILABLE_ERROR_CODE, MODEL_STORAGE_FILE_SLASH_PATH_FACTORY, MailgunNotificationHealthCheckIssueCode, ModifyBeforeSetFirestoreDocumentDataAccessorWrapper, NOTIFICATION_BOX_DOES_NOT_EXIST_ERROR_CODE, NOTIFICATION_BOX_EXCLUSION_TARGET_INVALID_ERROR_CODE, NOTIFICATION_BOX_EXISTS_FOR_MODEL_ERROR_CODE, NOTIFICATION_BOX_MODEL_CRUD_FUNCTIONS_CONFIG, NOTIFICATION_BOX_RECIPIENT_DOES_NOT_EXIST_ERROR_CODE, NOTIFICATION_FUNCTION_TYPE_CONFIG_MAP, NOTIFICATION_HEALTH_CHECK_STATUS_SEVERITY, NOTIFICATION_LOGGED_EVENT_DAY_ITEM_CONVERTER, NOTIFICATION_MESSAGE_MAX_LENGTH, NOTIFICATION_MESSAGE_MIN_LENGTH, NOTIFICATION_MODEL_ALREADY_INITIALIZED_ERROR_CODE, NOTIFICATION_RECIPIENT_NAME_MAX_LENGTH, NOTIFICATION_RECIPIENT_NAME_MIN_LENGTH, NOTIFICATION_SUBJECT_MAX_LENGTH, NOTIFICATION_SUBJECT_MIN_LENGTH, NOTIFICATION_SUMMARY_EMBEDDED_NOTIFICATION_ITEM_MESSAGE_MAX_LENGTH, NOTIFICATION_SUMMARY_EMBEDDED_NOTIFICATION_ITEM_SUBJECT_MAX_LENGTH, NOTIFICATION_SUMMARY_ITEM_LIMIT, NOTIFICATION_TASK_SUBTASK_CHECKPOINT_CLEANUP, NOTIFICATION_TASK_SUBTASK_CHECKPOINT_PROCESSING, NOTIFICATION_USER_BLOCKED_FROM_BEING_ADD_TO_RECIPIENTS_ERROR_CODE, NOTIFICATION_USER_HEALTH_CHECK_PROBE_THROTTLED_ERROR_CODE, NOTIFICATION_USER_HEALTH_CHECK_THROTTLED_ERROR_CODE, NOTIFICATION_USER_HEALTH_CHECK_VERIFY_THROTTLED_ERROR_CODE, NOTIFICATION_USER_INVALID_UID_FOR_CREATE_ERROR_CODE, NOTIFICATION_USER_LOCKED_CONFIG_FROM_BEING_UPDATED_ERROR_CODE, NOTIFICATION_WEEK_NOTIFICATION_ITEM_LIMIT, NOT_FOUND_ERROR_CODE, NotificationBoxDocument, NotificationBoxRecipientFlag, NotificationBoxRecipientTemplateConfigBoolean, NotificationDeliveryMethod, NotificationDocument, NotificationFirestoreCollections, NotificationFunctions, NotificationHealthCheckStatus, NotificationLoggedEventDayDocument, NotificationLoggedEventDayPageDocument, NotificationMessageFlag, NotificationRecipientSendFlag, NotificationSendState, NotificationSendType, NotificationSummaryDocument, NotificationUserDocument, NotificationWeekDocument, OFFLINE_ACCESS_OIDC_SCOPE, OFFLINE_ACCESS_OIDC_SCOPE_DETAILS, OIDC_ENTRY_CLIENT_TYPE, OIDC_FUNCTION_TYPE_CONFIG_MAP, OIDC_MODEL_CRUD_FUNCTIONS_CONFIG, OIDC_PROVIDER_PROFILE_DEFAULT_DESCRIPTION_SUFFIX, OPENID_OIDC_SCOPE, OPENID_OIDC_SCOPE_DETAILS, OidcEntryDocument, OidcModelFirestoreCollections, OidcModelFunctions, PERMISSION_DENIED_ERROR_CODE, PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD, PROFILE_OIDC_SCOPE, PROFILE_OIDC_SCOPE_DETAILS, PUBLIC_PKCE_TOKEN_ENDPOINT_AUTH_METHOD, QUERY_MODEL_OIDC_SCOPE, READ_MODEL_OIDC_SCOPE, RUN_DEV_FUNCTION_APP_FUNCTION_KEY, SCHEDULED_FUNCTION_DEV_FUNCTION_SPECIFIER, SCHEDULER_SYSTEM_STATE_TYPE, SERVICE_TOKEN_OIDC_SCOPE, SERVICE_TOKEN_OIDC_SCOPE_DETAILS, STANDARD_OIDC_SCOPES, STANDARD_OIDC_SCOPE_DETAILS, STORAGEFILE_RELATED_FILE_METADATA_KEY, STORAGE_FILE_ALREADY_PROCESSED_ERROR_CODE, STORAGE_FILE_CANNOT_BE_DELETED_YET_ERROR_CODE, STORAGE_FILE_FUNCTION_TYPE_CONFIG_MAP, STORAGE_FILE_GROUP_CREATE_INPUT_ERROR_CODE, STORAGE_FILE_GROUP_QUEUED_FOR_INITIALIZATION_ERROR_CODE, STORAGE_FILE_GROUP_ROOT_FOLDER_PATH, STORAGE_FILE_GROUP_ZIP_FILE_PATH, STORAGE_FILE_GROUP_ZIP_INFO_JSON_FILE_NAME, STORAGE_FILE_GROUP_ZIP_STORAGE_FILE_PURPOSE, STORAGE_FILE_GROUP_ZIP_STORAGE_FILE_PURPOSE_CREATE_ZIP_SUBTASK, STORAGE_FILE_MODEL_ALREADY_INITIALIZED_ERROR_CODE, STORAGE_FILE_MODEL_CRUD_FUNCTIONS_CONFIG, STORAGE_FILE_NOT_FLAGGED_FOR_DELETION_ERROR_CODE, STORAGE_FILE_NOT_FLAGGED_FOR_GROUPS_SYNC_ERROR_CODE, STORAGE_FILE_PROCESSING_NOTIFICATION_TASK_TYPE, STORAGE_FILE_PROCESSING_NOT_ALLOWED_FOR_INVALID_STATE_ERROR_CODE, STORAGE_FILE_PROCESSING_NOT_AVAILABLE_FOR_TYPE_ERROR_CODE, STORAGE_FILE_PROCESSING_NOT_QUEUED_FOR_PROCESSING_ERROR_CODE, STORAGE_FILE_PROCESSING_STUCK_THROTTLE_CHECK_MS, STORAGE_FILE_UPLOAD_USER_ROLE, STORAGE_FILE_UPLOAD_USER_SIMPLE_CLAIMS_CONFIGURATION, ScheduledFunctionDevelopmentFirebaseFunctionListEntry, ScheduledFunctionDevelopmentFunctionTypeEnum, StorageFileCreationType, StorageFileDocument, StorageFileFirestoreCollections, StorageFileFunctions, StorageFileGroupDocument, StorageFileProcessingState, StorageFileState, StorageFileUploadStreamUnsupportedError, SystemStateDocument, SystemStateFirestoreCollections, UNAUTHENTICATED_ERROR_CODE, UNAVAILABLE_ERROR_CODE, UNAVAILABLE_OR_DEACTIVATED_FUNCTION_ERROR_CODE, UNKNOWN_CALENDAR_TYPE, UNKNOWN_FORM_SPACE_TYPE, UNKNOWN_MODEL_TYPE_ERROR_CODE, UNTRACKABLE_NOTIFICATION_HEALTH_CHECK_PROBE_ID, UPDATE_MODEL_OIDC_SCOPE, UPLOADED_FILE_DOES_NOT_EXIST_ERROR_CODE, UPLOADED_FILE_INITIALIZATION_DISCARDED_ERROR_CODE, UPLOADED_FILE_INITIALIZATION_FAILED_ERROR_CODE, UPLOADED_FILE_NOT_ALLOWED_TO_BE_INITIALIZED_ERROR_CODE, UPLOADS_FOLDER_PATH, USER_EXTERNAL_CONNECTION_ALREADY_EXISTS_ERROR_CODE, USER_EXTERNAL_CONNECTION_CREDENTIALS_EXPIRED_ERROR_CODE, USER_EXTERNAL_CONNECTION_ENTRY_STATUSES, USER_EXTERNAL_CONNECTION_EXTERNAL_ACCOUNT_IN_USE_ERROR_CODE, USER_EXTERNAL_CONNECTION_EXTERNAL_ACCOUNT_KEY_DELIMITER, USER_EXTERNAL_CONNECTION_FUNCTION_TYPE_CONFIG_MAP, USER_EXTERNAL_CONNECTION_LINK_NOT_ENABLED_ERROR_CODE, USER_EXTERNAL_CONNECTION_MODEL_CRUD_FUNCTIONS_CONFIG, USER_EXTERNAL_CONNECTION_PROVIDER_NOT_ALLOWED_ERROR_CODE, USER_EXTERNAL_CONNECTION_PROVIDER_NOT_CONNECTED_ERROR_CODE, USER_EXTERNAL_CONNECTION_SIGN_IN_DENIED_ERROR_CODE, USER_EXTERNAL_CONNECTION_SIGN_IN_EMAIL_CONFLICT_ERROR_CODE, USER_EXTERNAL_CONNECTION_SIGN_IN_IDENTITY_UNAVAILABLE_ERROR_CODE, USER_EXTERNAL_CONNECTION_SIGN_IN_NOT_ENABLED_ERROR_CODE, USER_EXTERNAL_CONNECTION_SIGN_IN_REPORTABLE_ERROR_CODES, USER_EXTERNAL_CONNECTION_SIGN_IN_USER_MISSING_ERROR_CODE, USER_EXTERNAL_CONNECTION_UNLINK_LAST_LOGIN_METHOD_ERROR_CODE, UserExternalConnectionDocument, UserExternalConnectionFunctions, ZOHO_USER_EXTERNAL_CONNECTION_PROVIDER_TYPE, ZOOM_USER_EXTERNAL_CONNECTION_PROVIDER_TYPE, _createNotificationDocumentFromPair, abstractSubscribeOrUnsubscribeToNotificationBoxParamsType, abstractSubscribeToNotificationBoxParamsType, addConstraintToBuilder, addOrReplaceLimitInConstraints, adminOnlyScopesForOidcProviderProfiles, allChildDocumentsUnderParent, allChildDocumentsUnderParentPath, allChildDocumentsUnderRelativePath, allNotificationHealthCheckIssues, allowDocumentSnapshotWithPathOnceFilter, allowedNotificationRecipients, appCalendarTypeConfigService, appFormSpaceTypeConfigService, appNotificationTemplateTypeInfoRecordService, applyExclusionsToNotificationUserNotificationBoxRecipientConfigs, applyUserExternalConnectionEntry, applyUserExternalConnectionLogin, arrayUpdateWithAccessorFunction, asTopLevelFieldPath, asTopLevelFieldPaths, assertFirestoreUpdateHasData, assertFormSpaceUploadAllowed, assertStorageUploadOptionsStringFormat, assignDateCellRangeFunction, assignDateCellScheduleFunction, assignUnitedStatesAddressFunction, assignWebsiteFileLinkFunction, assignWebsiteLinkFunction, assignmentOnlyScopesForOidcProviderProfiles, buildFirebaseCollectionTypeModelTypeMap, calculateNsForNotificationUserNotificationBoxRecipientConfigs, calculateStorageFileGroupEmbeddedFileUpdate, calculateStorageFileGroupRegeneration, calendarCollectionReference, calendarConverter, calendarEventItem, calendarEventItemCalendarDate, calendarEventItemEndDate, calendarEventItemExceptionDateSet, calendarEventItemExceptionDateValue, calendarEventItemFields, calendarEventItemForId, calendarEventItemTimezone, calendarEventItemToICalendarEvent, calendarEventItemToInviteICalendar, calendarEventItemToInviteIcsString, calendarEventItemsFilterUniqueFunction, calendarEventItemsForModelKey, calendarEventItemsSortFunction, calendarEventOccurrenceToICalendarEvent, calendarExtensionDataToICalendarExtraProperties, calendarFirestoreCollection, calendarFunctionMap, calendarFunctionTypeConfigMap, calendarIcsFileStoragePath, calendarIdForModel, calendarIdentity, calendarModelCrudFunctionsConfig, calendarNextIcsRotateAt, calendarRecurringEventItem, calendarRecurringEventItemForScheduleRange, calendarRecurringEventItemModelRecurrenceInfo, calendarRecurringEventItemRecurrenceFields, calendarRecurringEventItemToICalendarEvent, calendarRecurringEventOccurrenceKey, calendarSyncState, calendarTemplate, calendarToICalendar, calendarToIcsString, calendarTypeConfigIcsConfig, calendarTypeConfigIcsExpansionRange, calendarTypeConfigRecord, calendarsDueForResyncQuery, calendarsFlaggedForSyncQuery, calendarsForTypeQuery, callModelFirebaseFunctionMapFactory, callModelOidcScopeForCallType, canQueueStorageFileForProcessing, childFirestoreModelKey, childFirestoreModelKeyPath, childFirestoreModelKeys, cleanupOldNotificationLoggedEventDaysParamsType, cleanupSentNotificationsParamsType, clientFirebaseFirestoreContextFactory, clientFirebaseStorageContextFactory, combineUploadFileTypeDeterminers, completeSubtaskProcessingAndScheduleCleanupTaskResult, contextGrantedModelRolesReader, contextGrantedModelRolesReaderDoesNotExistErrorMessage, contextGrantedModelRolesReaderPermissionErrorMessage, convertHttpsCallableErrorToReadableError, copyDocumentIdForUserRelatedModifierFunction, copyDocumentIdToFieldModifierFunction, copyStoragePath, copyUserRelatedDataAccessorFactoryFunction, copyUserRelatedDataModifierConfig, createFormSpaceParamsType, createNotificationBoxParamsType, createNotificationDocument, createNotificationDocumentIfSending, createNotificationDocumentPair, createNotificationLoggedEventTemplate, createNotificationSummaryParamsType, createNotificationTaskTemplate, createNotificationTemplate, createNotificationUserParamsType, createOidcClientFieldParamsType, createOidcClientParamsType, createStorageFileDocumentPair, createStorageFileDocumentPairFactory, createStorageFileGroupParamsType, createStorageFileParamsType, createStorageFileSignedUploadUrlParamsType, createUserExternalConnectionParamsType, dataFromDocumentSnapshots, dataFromSnapshotStream, decodeFirebaseAuthOobCode, defaultOidcProviderProfiles, defaultPagedItemPageDataConverter, defaultUnlockedScopesForOidcProviderProfiles, delayCompletion, deleteAllQueuedStorageFilesParamsType, deleteFormSpaceParamsType, targetModelParamsType as deleteOidcClientParamsType, targetModelParamsType as deleteOidcTokenParamsType, deleteStorageFileParamsType, determineByFileName, determineByFilePath, determineByFolderName, determineUserByFolder, determineUserByFolderWrapperFunction, determineUserByUserUploadsFolderWrapperFunction, developmentFirebaseFunctionMapFactory, directDataHttpsCallable, disconnectUserExternalConnectionParamsType, documentData, documentDataFunction, documentDataWithIdAndKey, documentReferenceFromDocument, documentReferencesFromDocuments, documentReferencesFromSnapshot, downloadMultipleStorageFilesFileParamsType, downloadMultipleStorageFilesParamsType, downloadStorageFileParamsType, effectiveNotificationBoxRecipientConfig, effectiveNotificationBoxRecipientTemplateConfig, emptyUserExternalConnection, encodeFirebaseAuthOobCode, endAt, endAtValue, endBefore, expandCalendarEvents, expireAllExpiredFormSpacesParamsType, expireFormSpaceTemplate, extendFirestoreCollectionWithPagedItemAccessor, extendFirestoreCollectionWithSingleDocumentAccessor, filterConstraintsOfType, filterDisallowedFirestoreItemPageIteratorInputConstraints, filterRepeatCheckpointSnapshots, filterWithDateRange, firebaseAuthErrorToReadableError, firebaseFirestoreClientDrivers, firebaseFirestoreQueryConstraintFunctionsDriver, firebaseFirestoreQueryDriver, firebaseFunctionMapFactory, firebaseModelLoader, firebaseModelPermissionService, firebaseModelService, firebaseModelServiceFactory, firebaseModelsService, firebaseQueryItemAccumulator, firebaseQuerySnapshotAccumulator, firebaseStorageBucketFolderPath, firebaseStorageClientAccessorDriver, firebaseStorageClientAccessorFile, firebaseStorageClientAccessorFolder, firebaseStorageClientDrivers, firebaseStorageClientListFilesResultFactory, firebaseStorageContextFactory, firebaseStorageFileExists, firebaseStorageFilePathFromStorageFilePath, firebaseStorageRefForStorageFilePath, firestoreArray, firestoreArrayMap, firestoreBitwiseObjectMap, firestoreBitwiseSet, firestoreBitwiseSetMap, firestoreBoolean, firestoreClientAccessorDriver, firestoreClientArrayUpdateToUpdateData, firestoreClientIncrementUpdateToUpdateData, firestoreCollectionDocumentCache, firestoreCollectionQueryFactory, firestoreContextFactory, firestoreDate, firestoreDateCellRange, firestoreDateCellRangeArray, firestoreDateCellRangeAssignFn, firestoreDateCellSchedule, firestoreDateCellScheduleAssignFn, firestoreDateNumber, firestoreDencoderArray, firestoreDencoderMap, firestoreDencoderStringArray, firestoreDocumentAccessorContextExtension, firestoreDocumentAccessorFactory, firestoreDocumentLoader, firestoreDocumentSnapshotPairsLoader, firestoreDocumentSnapshotPairsLoaderInstance, firestoreDummyKey, firestoreEncodedArray, firestoreEncodedObjectMap, firestoreEnum, firestoreEnumArray, firestoreField, firestoreFieldConfigToModelMapFunctionsRef, firestoreFixedItemPageIteration, firestoreFixedItemPageIterationFactory, firestoreIdBatchVerifierFactory, firestoreIdentityTypeArray, firestoreIdentityTypeArrayName, firestoreItemPageIteration, firestoreItemPageIterationFactory, firestoreLatLngString, firestoreMap, firestoreMapZoomLevel, firestoreModelId, firestoreModelIdArrayField, firestoreModelIdFromDocument, firestoreModelIdFromEmail, firestoreModelIdGrantedRoleArrayMap, firestoreModelIdGrantedRoleMap, firestoreModelIdOrKeyType, firestoreModelIdString, firestoreModelIdType, firestoreModelIdentity, firestoreModelIdentityTypeMap, firestoreModelIdsFromDocuments, firestoreModelIdsFromKey, firestoreModelKey, firestoreModelKeyArrayField, firestoreModelKeyCollectionName, firestoreModelKeyCollectionType, firestoreModelKeyCollectionTypeArray, firestoreModelKeyCollectionTypeArrayName, firestoreModelKeyCollectionTypePair, firestoreModelKeyEncodedGrantedRoleMap, firestoreModelKeyFactory, firestoreModelKeyFromDocument, firestoreModelKeyGrantedRoleArrayMap, firestoreModelKeyGrantedRoleMap, firestoreModelKeyPairObject, firestoreModelKeyParentKey, firestoreModelKeyParentKeyPartPairs, firestoreModelKeyPart, firestoreModelKeyPartPairs, firestoreModelKeyPartPairsKeyPath, firestoreModelKeyPartPairsPaths, firestoreModelKeyPath, firestoreModelKeyString, firestoreModelKeyType, firestoreModelKeyTypePair, firestoreModelKeys, firestoreModelKeysFromDocuments, firestoreModelType, firestoreNotificationBoxRecipient, firestoreNotificationBoxRecipientTemplateConfigRecord, firestoreNotificationDeliveryHealthCheckResult, firestoreNotificationHealthCheck, firestoreNotificationHealthCheckIssue, firestoreNotificationHealthCheckProbe, firestoreNotificationItem, firestoreNotificationRecipientWithConfig, firestoreNotificationUserDefaultNotificationBoxRecipientConfig, firestoreNotificationUserNotificationBoxRecipientConfig, firestoreNumber, firestoreObjectArray, firestoreObjectMap, firestorePassThroughField, firestoreQueryConstraint, firestoreQueryConstraintFactory, firestoreQueryDocumentSnapshotPairsLoader, firestoreQueryFactory, firestoreSingleDocumentAccessor, firestoreString, firestoreSubObject, firestoreTimezoneString, firestoreUID, firestoreUniqueArray, firestoreUniqueKeyedArray, firestoreUniqueNumberArray, firestoreUniqueStringArray, firestoreUnitedStatesAddress, firestoreUnitedStatesAddressAssignFn, firestoreUnixDateTimeSecondsNumber, firestoreUpdateWithNoDataError, firestoreWebsiteFileLink, firestoreWebsiteFileLinkAssignFn, firestoreWebsiteFileLinkEncodedArray, firestoreWebsiteFileLinkObjectArray, firestoreWebsiteLink, firestoreWebsiteLinkArray, firestoreWebsiteLinkAssignFn, flagStaleCalendarsForSyncParamsType, flatFirestoreModelKey, formSpaceCollectionReference, formSpaceConverter, formSpaceFileSlotConfig, formSpaceFileSlotName, formSpaceFileStoragePath, formSpaceFileSubObject, formSpaceFileUploaderId, formSpaceFilesInSlot, formSpaceFirestoreCollection, formSpaceFunctionMap, formSpaceIdForModel, formSpaceIdentity, formSpaceKeyForStorageFile, formSpaceSlotFileAccess, formSpaceSlotMaxFiles, formSpaceSlotMinFiles, formSpaceSlotStatus, formSpaceStorageFileGroupId, formSpaceSubmissionNotificationTaskTemplate, formSpaceSubmissionNotificationTaskUniqueId, formSpaceSubmitBlockers, formSpaceTemplate, formSpaceTypeConfigRecord, formSpaceUploadFileNameDetails, formSpaceUploadsFilePath, formSpaceUploadsFolderPath, formSpacesDueForExpirationQuery, formSpacesForOwnerQuery, formSpacesQueuedForProcessingQuery, getDataFromDocumentSnapshots, getDocumentSnapshotData, getDocumentSnapshotDataPair, getDocumentSnapshotDataPairs, getDocumentSnapshotDataPairsWithData, getDocumentSnapshotDataTuples, getDocumentSnapshotPair, getDocumentSnapshotPairs, getDocumentSnapshots, getDocumentSnapshotsData, grantFormSpaceRolesForUserAuthFunction, grantFullAccessIfAdmin, grantFullAccessIfAuthUserRelated, grantModelRolesIfAdmin, grantModelRolesIfAdminFunction, grantModelRolesIfAuthUserRelatedModelFunction, grantModelRolesIfFunction, grantModelRolesIfHasAuthRolesFactory, grantModelRolesIfHasAuthRolesFunction, grantModelRolesOnlyIfFunction, grantStorageFileRolesForUserAuthFunction, hasRunInCurrentHour, inContextFirebaseModelServiceFactory, inContextFirebaseModelsServiceFactory, inMemoryFirestoreCollectionCacheDelegate, inMemoryFirestoreContextCache, inMemoryFirestoreContextCacheFactory, incrementUpdateWithAccessorFunction, inferCalendarRelatedModelKey, inferKeyFromTwoWayFlatFirestoreModelKey, inferNotificationBoxRelatedModelKey, inferStorageFileGroupRelatedModelKey, inferredTargetModelIdParamsType, inferredTargetModelParamsType, initializeAllApplicableNotificationBoxesParamsType, initializeAllApplicableNotificationSummariesParamsType, initializeAllApplicableStorageFileGroupsParamsType, initializeAllStorageFilesFromUploadsParamsType, initializeNotificationModelParamsType, initializeStorageFileFromUploadParamsType, initializeStorageFileModelParamsType, interceptAccessorFactoryFunction, isAdminInFirebaseModelContext, isCalendarIcsRotateThrottled, isClientFirebaseError, isCompleteNotificationSendState, isFirebaseStorageObjectNotFoundError, isFirestoreModelId, isFirestoreModelIdOrKey, isFirestoreModelKey, isFormSpaceEditable, isFormSpaceFileAccessibleByUser, isFormSpaceFileAccessibleWithAccess, isFormSpaceFullyLocked, isFormSpaceReopenable, isFormSpaceStorageFileAccessibleByUser, isLoggedEventNotification, isNthHourOfDay, isOwnerOfUserRelatedModelInFirebaseModelContext, isPendingNotificationHealthCheckProbe, isProblemNotificationHealthCheckStatus, iterateFirestoreDocumentSnapshotBatches, iterateFirestoreDocumentSnapshotCheckpoints, iterateFirestoreDocumentSnapshotPairBatches, iterateFirestoreDocumentSnapshotPairs, iterateFirestoreDocumentSnapshots, iterateStorageListFiles, iterateStorageListFilesByEachFile, iterateStorageListFilesFactory, iterationQueryDocChangeWatcher, iterationQueryDocChangeWatcherChangeTypeForGroup, latestSnapshotsFromDocuments, lazyFirebaseFunctionsFactory, limit, limitToLast, limitUploadFileTypeDeterminer, limitedFirestoreDocumentAccessorFactory, limitedFirestoreDocumentAccessorSnapshotCache, loadAllFirestoreDocumentSnapshot, loadAllFirestoreDocumentSnapshotPairs, loadDocumentsForDocumentReferences, loadDocumentsForDocumentReferencesFromValues, loadDocumentsForIds, loadDocumentsForIdsFromValues, loadDocumentsForKeys, loadDocumentsForKeysFromValues, loadDocumentsForSnapshots, loadDocumentsForValues, loadNotificationBoxDocumentForReferencePair, loadSchedulerSystemState, loadStorageFileGroupDocumentForReferencePair, lockFormSpaceParamsType, lockFormSpaceTemplate, makeDocuments, makeFirestoreCollection, makeFirestoreCollectionGroup, makeFirestoreCollectionWithParent, makeFirestoreContextCache, makeFirestoreItemPageIteratorDelegate, makeFirestoreQueryConstraintFunctionsDriver, makePagedItemFirestoreCollection, makeRootSingleItemFirestoreCollection, makeSingleItemFirestoreCollection, mapDataFromSnapshot, mapHttpsCallable, mapLatestSnapshotsFromDocuments, markCalendarForSyncTemplate, mergeNotificationBoxRecipientTemplateConfigRecords, mergeNotificationBoxRecipientTemplateConfigs, mergeNotificationBoxRecipients, mergeNotificationSendMessagesResult, mergeNotificationUserDefaultNotificationBoxRecipientConfig, mergeNotificationUserNotificationBoxRecipientConfigs, modelStorageSlashPathFactory, modifyBeforeSetInterceptAccessorFactoryFunction, newDocuments, newNotificationBoxRecipientForUid, noContentNotificationMessageFunctionFactory, noStringFormatInStorageUploadOptionsError, noopFirestoreCollectionCache, noopFirestoreCollectionCacheDelegate, noopFirestoreCollectionDocumentCache, noopFirestoreContextCache, notificationBoxCollectionReference, notificationBoxConverter, notificationBoxFirestoreCollection, notificationBoxIdForModel, notificationBoxIdentity, notificationBoxRecipientTemplateConfigArrayEntryParamType, notificationBoxRecipientTemplateConfigArrayToRecord, notificationBoxRecipientTemplateConfigRecordToArray, notificationBoxesFlaggedForNeedsInitializationQuery, notificationBoxesFlaggedInvalidQuery, notificationCollectionReference, notificationCollectionReferenceFactory, notificationConverter, notificationDeliveryHealthCheckResultForMethod, notificationFirestoreCollectionFactory, notificationFirestoreCollectionGroup, notificationFunctionMap, notificationHealthCheckIssue, notificationHealthCheckPendingProbeMethods, notificationIdentity, notificationLoggedEventDayCollectionReference, notificationLoggedEventDayCollectionReferenceFactory, notificationLoggedEventDayConverter, notificationLoggedEventDayFirestoreCollectionFactory, notificationLoggedEventDayFirestoreCollectionGroup, notificationLoggedEventDayId, notificationLoggedEventDayIdentity, notificationLoggedEventDayPageCollectionReference, notificationLoggedEventDayPageFirestoreCollectionGroup, notificationLoggedEventDayPageIdentity, notificationLoggedEventDayPagedItemsCollectionFactory, notificationLoggedEventDayPagedItemsCollectionReferenceFactory, notificationLoggedEventDaysOlderThanQuery, notificationLoggedEventLoader, notificationMessageFunction, notificationRecipientParamsType, notificationSendExclusionCanSendFunction, notificationSendFlagsImplyIsComplete, notificationSubtaskComplete, notificationSummariesFlaggedForNeedsInitializationQuery, notificationSummaryCollectionReference, notificationSummaryConverter, notificationSummaryFirestoreCollection, notificationSummaryIdForModel, notificationSummaryIdForUidFunctionForRootFirestoreModelIdentity, notificationSummaryIdentity, notificationTaskCanRunNextCheckpoint, notificationTaskComplete, notificationTaskDelayRetry, notificationTaskFailed, notificationTaskPartiallyComplete, notificationTaskUniqueId, notificationTemplateTypeInfoRecord, notificationUserCollectionReference, notificationUserConverter, notificationUserFirestoreCollection, notificationUserHasExclusionQuery, notificationUserHealthCheckNextProbeAt, notificationUserHealthCheckNextProbeAtByMethod, notificationUserHealthCheckNextRunAt, notificationUserHealthCheckNextVerifyAt, notificationUserHealthCheckParamsType, notificationUserIdentity, notificationUsersFlaggedForNeedsSyncQuery, notificationWeekCollectionReference, notificationWeekCollectionReferenceFactory, notificationWeekConverter, notificationWeekFirestoreCollectionFactory, notificationWeekFirestoreCollectionGroup, notificationWeekIdentity, notificationsPastSendAtTimeQuery, notificationsReadyForCleanupQuery, nthHourOfDayIndex, offset, oidcClientEntriesByOwnerQuery, oidcEntriesByClientIdQuery, oidcEntriesByGrantIdQuery, oidcEntriesByUidQuery, oidcEntriesByUserCodeQuery, oidcEntriesWithTypeQuery, oidcEntryCollectionReference, oidcEntryConverter, oidcEntryFirestoreCollection, oidcEntryIdentity, oidcGrantEntriesByUidQuery, oidcModelFunctionMap, oidcProviderProfileDetails, oidcProviderProfilesForClient, oidcProviderProfilesForKeys, oidcScopeTermSatisfied, oidcScopeTermsSatisfied, oidcScopesFromScopeClaim, onCallCreateModelParams, onCallCreateModelResult, onCallCreateModelResultWithDocs, onCallDeleteModelParams, onCallDevelopmentParams, onCallInvokeModelParams, onCallQueryModelParams, onCallReadModelParams, onCallTypedModelParamsFunction, onCallUpdateModelParams, optionalFirestoreArray, optionalFirestoreBoolean, optionalFirestoreDate, optionalFirestoreDateNumber, optionalFirestoreEnum, optionalFirestoreField, optionalFirestoreNotificationHealthCheck, optionalFirestoreNumber, optionalFirestorePassthroughJsonField, optionalFirestoreString, optionalFirestoreUID, optionalFirestoreUnitedStatesAddress, optionalFirestoreUnixDateTimeSecondsNumber, orderBy, orderByDocumentId, parseFormSpaceUploadPath, processAllQueuedFormSpacesParamsType, processAllQueuedStorageFilesParamsType, processStorageFileParamsType, pruneCalendarEvents, readFirestoreModelKey, readFirestoreModelKeyFromDocumentSnapshot, readLoggingFirestoreContextCache, readLoggingFirestoreContextCacheFactory, readMultipleStorageFilesMetadataFileParamsType, readMultipleStorageFilesMetadataParamsType, readStorageFileMetadataParamsType, readUserExternalConnectionAuthorizeStateParamsType, regenerateAllFlaggedStorageFileGroupsContentParamsType, regenerateStorageFileGroupContentParamsType, removeCalendarEventItems, removeFormSpaceFileParamsType, reopenFormSpaceParamsType, reopenFormSpaceTemplate, replaceCalendarEventItemsForModelKey, replaceConstraints, requiredFormSpaceFileSlots, requiredScopesForOidcProviderProfiles, resolveEffectiveOidcScopeTerms, resolveFormSpaceExpiresAt, resolveFormSpaceLocksAt, resolveOidcModelScopeRequirement, resyncAllNotificationUserParamsType, targetModelParamsType as resyncNotificationUserParamsType, rollupNotificationDeliveryHealthCheckResultStatus, rollupNotificationHealthCheckResultStatus, rollupNotificationHealthCheckStatus, rotateCalendarIcsParamsType, targetModelParamsType as rotateOidcClientSecretParamsType, scheduledFunctionDevelopmentFirebaseFunctionParamsType, schedulerSystemDataConverter, schedulerSystemStateRead, scopesForOidcProviderProfiles, selectFromFirebaseModelsService, sendNotificationParamsType, sendQueuedNotificationsParamsType, separateConstraints, setIdAndKeyFromKeyIdRefOnDocumentData, setIdAndKeyFromSnapshotOnDocumentData, shouldSaveNotificationToNotificationWeek, shouldSendCreatedNotificationInput, snapshotConverterFunctions, snapshotStreamDataForAccessor, snapshotStreamForAccessor, sortNotificationItemsFunction, startAfter, startAt, startAtValue, storageFileCollectionReference, storageFileConverter, storageFileDisplayFileName, storageFileFirestoreCollection, storageFileFlaggedForSyncWithGroupsQuery, storageFileFunctionMap, storageFileGroupCollectionReference, storageFileGroupConverter, storageFileGroupCreateStorageFileKeyFactory, storageFileGroupCreatedStorageFileKey, storageFileGroupEmbeddedFile, storageFileGroupFirestoreCollection, storageFileGroupFolderPath, storageFileGroupIdForModel, storageFileGroupIdentity, storageFileGroupZipFileStoragePath, storageFileGroupZipStorageFileKey, storageFileGroupsFlaggedForContentRegenerationQuery, storageFileGroupsFlaggedForNeedsInitializationQuery, storageFileGroupsFlaggedInvalidQuery, storageFileIdentity, storageFileProcessingNotificationTaskTemplate, storageFilePurposeAndUserQuery, storageFileUploadScopeType, storageFilesForFormSpaceQuery, storageFilesQueuedForDeleteQuery, storageFilesQueuedForProcessingQuery, storageListFilesResultFactory, storageListFilesResultHasNoNextError, storagePathFactory, storagePublicDownloadUrl, storedFileReaderFactory, streamDocumentSnapshotDataPairs, streamDocumentSnapshotDataPairsWithData, streamDocumentSnapshotsData, streamFromOnSnapshot, submitFormSpaceParamsType, submitFormSpaceTemplate, syncAllFlaggedCalendarsParamsType, syncAllFlaggedStorageFilesWithGroupsParamsType, syncCalendarParamsType, syncStorageFileWithGroupsParamsType, systemStateCollectionReference, systemStateConverter, systemStateFirestoreCollection, systemStateIdentity, systemStateStoredDataConverterFactory, targetModelIdParamsType, targetModelParamsType, twoWayFlatFirestoreModelKey, unlinkUserExternalConnectionLoginParamsType, unreadNotificationItems, unsupportedFirestoreDriverFunctionError, untrackableNotificationHealthCheckProbe, updateCalendarEventsTemplate, updateFormSpaceParamsType, targetModelParamsType as updateNotificationBoxParamsType, updateNotificationBoxRecipientLikeParamsType, updateNotificationBoxRecipientParamsType, updateNotificationBoxRecipientTemplateConfigRecord, updateNotificationRecipient, updateNotificationSummaryParamsType, updateNotificationUserDefaultNotificationBoxRecipientConfig, updateNotificationUserDefaultNotificationBoxRecipientConfigParamsType, updateNotificationUserNotificationBoxRecipientConfigIfChanged, updateNotificationUserNotificationBoxRecipientConfigs, updateNotificationUserNotificationBoxRecipientParamsType, updateNotificationUserNotificationSendExclusions, updateNotificationUserParamsType, updateOidcClientFieldParamsType, updateOidcClientParamsType, updateStorageFileGroupEntryParamsType, updateStorageFileGroupParamsType, updateStorageFileParamsType, updateWithAccessorUpdateAndConverterFunction, uploadFileWithStream, upsertCalendarEventItems, useContextAuth, useContextAuthUid, useDocumentSnapshot, useDocumentSnapshotData, useFirebaseModelsService, userExternalConnectionAccessorFactory, userExternalConnectionCollectionReference, userExternalConnectionConnectedProviderTypes, userExternalConnectionConverter, userExternalConnectionEntryFields, userExternalConnectionEntryForOutcome, userExternalConnectionEntryForProvider, userExternalConnectionEntryIsConnected, userExternalConnectionEntryIsExpired, userExternalConnectionExternalAccountKey, userExternalConnectionExternalAccountKeys, userExternalConnectionFirestoreCollection, userExternalConnectionFunctionMap, userExternalConnectionIdentity, userExternalConnectionIsConnectedToProvider, userExternalConnectionLinkedLoginProviderTypes, userExternalConnectionLoginFields, userExternalConnectionLoginForIdentity, userExternalConnectionLoginForProvider, userExternalConnectionValue, userExternalConnectionsWithConnectedProviderQuery, userExternalConnectionsWithExternalAccountQuery, userUploadsFolderSlashPathFactory, userUploadsFolderStoragePathFactory, where, whereDateIsAfter, whereDateIsAfterWithSort, whereDateIsBefore, whereDateIsBeforeWithSort, whereDateIsBetween, whereDateIsInRange, whereDateIsOnOrAfter, whereDateIsOnOrAfterWithSort, whereDateIsOnOrBefore, whereDateIsOnOrBeforeWithSort, whereDocumentId, whereStringHasRootIdentityModelKey, whereStringValueHasPrefix };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/firebase",
3
- "version": "14.0.1",
3
+ "version": "14.1.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -22,10 +22,10 @@
22
22
  }
23
23
  },
24
24
  "peerDependencies": {
25
- "@dereekb/date": "14.0.1",
26
- "@dereekb/model": "14.0.1",
27
- "@dereekb/rxjs": "14.0.1",
28
- "@dereekb/util": "14.0.1",
25
+ "@dereekb/date": "14.1.0",
26
+ "@dereekb/model": "14.1.0",
27
+ "@dereekb/rxjs": "14.1.0",
28
+ "@dereekb/util": "14.1.0",
29
29
  "@firebase/rules-unit-testing": "5.0.2",
30
30
  "@marcbachmann/cel-js": "^8.0.0",
31
31
  "@typescript-eslint/parser": "8.69.0",
@@ -4,3 +4,4 @@ export * from './userexternalconnection.util';
4
4
  export * from './userexternalconnection.query';
5
5
  export * from './userexternalconnection.api';
6
6
  export * from './userexternalconnection.action';
7
+ export * from './userexternalconnection.error';
@@ -1,4 +1,5 @@
1
1
  import { type Type } from 'arktype';
2
+ import { type Maybe } from '@dereekb/util';
2
3
  import { type InferredTargetModelParams } from '../../common/model/model/model.param';
3
4
  import { type FirebaseFunctionTypeConfigMap, type ModelFirebaseCreateFunction, type ModelFirebaseCrudFunction, type ModelFirebaseCrudFunctionConfigMap, type ModelFirebaseFunctionMap } from '../../client';
4
5
  import { type UserExternalConnectionTypes } from './userexternalconnection';
@@ -41,8 +42,38 @@ export interface ReadUserExternalConnectionAuthorizeStateParams extends Inferred
41
42
  * The provider type to begin connecting to.
42
43
  */
43
44
  readonly providerType: UserExternalConnectionProviderType;
45
+ /**
46
+ * Which handoff the state begins. Defaults to `connect`.
47
+ *
48
+ * - `connect` — attach the provider as a DATA connection, with the data scopes.
49
+ * - `link` — make the provider a LOGIN METHOD for the already-signed-in caller, with the sign-in
50
+ * scopes. A separate round trip because the two scope sets are not guaranteed to be the same,
51
+ * so a data grant cannot be assumed to cover an identity read.
52
+ *
53
+ * Absent means `connect`, so a client minting a state before `link` existed still gets one.
54
+ */
55
+ readonly mode?: Maybe<'connect' | 'link'>;
44
56
  }
45
57
  export declare const readUserExternalConnectionAuthorizeStateParamsType: Type<ReadUserExternalConnectionAuthorizeStateParams>;
58
+ /**
59
+ * Parameters for removing a provider as a LOGIN METHOD for the current user.
60
+ *
61
+ * Distinct from {@link DisconnectUserExternalConnectionParams}, and strictly larger: a disconnect
62
+ * drops the data connection and leaves the login link in place, whereas an unlink removes the login
63
+ * link AND the data connection and its credentials. "Stop using my Discord token" and "Discord is no
64
+ * longer how I log in" are different requests, so they are different calls.
65
+ *
66
+ * If no target model is provided, the current user's connection document is assumed.
67
+ *
68
+ * @dbxModelApiParams
69
+ */
70
+ export interface UnlinkUserExternalConnectionLoginParams extends InferredTargetModelParams {
71
+ /**
72
+ * The provider type to unlink.
73
+ */
74
+ readonly providerType: UserExternalConnectionProviderType;
75
+ }
76
+ export declare const unlinkUserExternalConnectionLoginParamsType: Type<UnlinkUserExternalConnectionLoginParams>;
46
77
  /**
47
78
  * The opaque, short-lived `state` to carry through a provider's OAuth handoff.
48
79
  *
@@ -91,9 +122,17 @@ export type UserExternalConnectionModelCrudFunctionsConfig = {
91
122
  * Disconnects the current user from the given provider.
92
123
  *
93
124
  * Removes the provider's credentials and its entry in one transaction, and recomputes the
94
- * connected-provider array from the result.
125
+ * connected-provider array from the result. The provider's LOGIN LINK is retained — a data
126
+ * connection ending says nothing about whether the provider is still a way to sign in.
95
127
  */
96
128
  disconnect: DisconnectUserExternalConnectionParams;
129
+ /**
130
+ * Removes the given provider as a login method for the current user.
131
+ *
132
+ * Removes the login link, the entry, and the credentials in one transaction. Refused when it
133
+ * would leave the account with no way to sign back in.
134
+ */
135
+ unlink: UnlinkUserExternalConnectionLoginParams;
97
136
  };
98
137
  };
99
138
  };
@@ -111,6 +150,7 @@ export declare abstract class UserExternalConnectionFunctions implements ModelFi
111
150
  };
112
151
  updateUserExternalConnection: {
113
152
  disconnect: ModelFirebaseCrudFunction<DisconnectUserExternalConnectionParams>;
153
+ unlink: ModelFirebaseCrudFunction<UnlinkUserExternalConnectionLoginParams>;
114
154
  };
115
155
  };
116
156
  }
@@ -1,8 +1,8 @@
1
- import { type Maybe } from '@dereekb/util';
1
+ import { type EmailAddress, type Maybe } from '@dereekb/util';
2
2
  import { type GrantedReadRole, type GrantedUpdateRole } from '@dereekb/model';
3
3
  import { AbstractFirestoreDocument, type CollectionReference, type FirestoreCollection, type FirestoreContext } from '../../common';
4
4
  import { type UserRelated, type UserRelatedById } from '../user';
5
- import { type UserExternalConnectionCapability, type UserExternalConnectionExternalAccountId, type UserExternalConnectionProviderType } from './userexternalconnection.id';
5
+ import { type UserExternalConnectionCapability, type UserExternalConnectionExternalAccountId, type UserExternalConnectionExternalAccountKey, type UserExternalConnectionProviderType } from './userexternalconnection.id';
6
6
  /**
7
7
  * Provides access to the {@link UserExternalConnection} collection.
8
8
  *
@@ -99,6 +99,69 @@ export interface UserExternalConnectionEntry {
99
99
  * Map of provider type to the user's connection state for that provider.
100
100
  */
101
101
  export type UserExternalConnectionEntryMap = Record<UserExternalConnectionProviderType, UserExternalConnectionEntry>;
102
+ /**
103
+ * A provider that is a LOGIN METHOD for this account.
104
+ *
105
+ * Separate from {@link UserExternalConnectionEntry} rather than a flag on it, because the two describe
106
+ * different kinds of fact and have different lifecycles. Every field on an entry is DERIVED from the
107
+ * credentials stored beside it — take the credentials away and the entry has nothing left to say — so
108
+ * an entry is a statement about a grant. A login link is a statement about the ACCOUNT: "this Discord
109
+ * user is how this person signs in". It survives the credentials expiring, being revoked by the
110
+ * provider, and the user disconnecting the data connection, and it is removed only by an explicit
111
+ * unlink.
112
+ *
113
+ * Folding it into the entry would mean a disconnect had to choose between destroying the sign-in
114
+ * binding and retaining a `disconnected` entry that lies about the credentials. Two maps make the
115
+ * choice unnecessary.
116
+ *
117
+ * Written ONLY by an identity-scoped OAuth round trip (the sign-in or `link` direction), never by the
118
+ * data connect flow: the scopes a data connection is granted are not guaranteed to cover what an
119
+ * identity read needs.
120
+ *
121
+ * @dbxModelSubObject
122
+ */
123
+ export interface UserExternalConnectionLogin {
124
+ /**
125
+ * Identifier of the linked account within the provider. REQUIRED: this IS the identity.
126
+ *
127
+ * @dbxModelVariable externalAccountId
128
+ */
129
+ ea: UserExternalConnectionExternalAccountId;
130
+ /**
131
+ * Human-readable label for the linked account (e.g. the provider-side username).
132
+ *
133
+ * @dbxModelVariable label
134
+ */
135
+ l?: Maybe<string>;
136
+ /**
137
+ * The email the provider reported at link time, when it reported one.
138
+ *
139
+ * @dbxModelVariable email
140
+ */
141
+ em?: Maybe<EmailAddress>;
142
+ /**
143
+ * Whether the PROVIDER considered that email verified at link time.
144
+ *
145
+ * @dbxModelVariable emailVerified
146
+ */
147
+ emv?: Maybe<boolean>;
148
+ /**
149
+ * Date the provider was FIRST linked. Preserved across relinks.
150
+ *
151
+ * @dbxModelVariable linkedAt
152
+ */
153
+ lat: Date;
154
+ /**
155
+ * Date this link was last updated at.
156
+ *
157
+ * @dbxModelVariable updatedAt
158
+ */
159
+ uat: Date;
160
+ }
161
+ /**
162
+ * Map of provider type to the login link the user holds for that provider.
163
+ */
164
+ export type UserExternalConnectionLoginMap = Record<UserExternalConnectionProviderType, UserExternalConnectionLogin>;
102
165
  /**
103
166
  * The client-readable half of a user's third-party OAuth connection state.
104
167
  *
@@ -136,6 +199,37 @@ export interface UserExternalConnection extends UserRelated, UserRelatedById {
136
199
  * @dbxModelVariable connectedProviderTypes
137
200
  */
138
201
  c: UserExternalConnectionProviderType[];
202
+ /**
203
+ * Per-provider LOGIN LINKS, keyed by provider type.
204
+ *
205
+ * A provider present here is a way this account signs in. Independent of `e`: a provider can be
206
+ * linked without a data connection (the sign-in wrote the link and the app did not opt into
207
+ * `signInConnects`), connected without being linked (a connect-only provider), or both.
208
+ *
209
+ * @dbxModelVariable logins
210
+ */
211
+ li: UserExternalConnectionLoginMap;
212
+ /**
213
+ * DERIVED from `e` UNION `li`: the `<providerType>:<externalAccountId>` key of every entry that
214
+ * names an external account, plus every login link's.
215
+ *
216
+ * The `c` array's sibling, and it exists for the same reason: Firestore cannot query across map
217
+ * keys, so `e.<provider>.ea` is unreachable. `c` answers "who is connected to X?"; this answers
218
+ * "who IS X?" — the lookup a sign-in performs to resolve a third-party identity to a Firebase uid.
219
+ *
220
+ * Both maps contribute because either one alone loses the answer. Sourcing it from `e` only meant
221
+ * disconnecting a data connection silently destroyed the sign-in binding and the next sign-in minted
222
+ * a second Firebase user; sourcing it from `li` only would lose a connect-established account that
223
+ * was never a login method.
224
+ *
225
+ * Unlike `c`, membership is NOT filtered by status. Which Discord account a user is is a fact
226
+ * about their identity, not about whether their credentials currently work: a returning user whose
227
+ * token expired (`error`) must still resolve to the same uid, or a sign-in would mint them a
228
+ * second account. Recomputed on every write and never passed in by a caller.
229
+ *
230
+ * @dbxModelVariable externalAccountKeys
231
+ */
232
+ ec?: Maybe<UserExternalConnectionExternalAccountKey[]>;
139
233
  /**
140
234
  * Date this document was last updated at.
141
235
  *
@@ -147,12 +241,17 @@ export interface UserExternalConnection extends UserRelated, UserRelatedById {
147
241
  * Roles for a UserExternalConnection. Users can read their own connection state; all writes go
148
242
  * through the server.
149
243
  *
150
- * `connect` and `disconnect` are called out separately from `update` because they are the only
151
- * operations a client can reach, so an app can withhold either one (a user allowed to drop a
244
+ * `connect`, `disconnect` and `unlink` are called out separately from `update` because they are the
245
+ * only operations a client can reach, so an app can withhold any one of them (a user allowed to drop a
152
246
  * connection but not to add another, or the reverse) without also withholding the server-driven
153
247
  * writes that share `update`.
248
+ *
249
+ * `unlink` is distinct from `disconnect` because they remove different things: a disconnect drops the
250
+ * data connection and keeps the login link, an unlink removes the login link AND everything the
251
+ * disconnect would have. Removing a way to sign in is the more consequential of the two, so an app can
252
+ * grant one without the other.
154
253
  */
155
- export type UserExternalConnectionRoles = GrantedReadRole | GrantedUpdateRole | 'connect' | 'disconnect';
254
+ export type UserExternalConnectionRoles = GrantedReadRole | GrantedUpdateRole | 'connect' | 'disconnect' | 'unlink';
156
255
  export declare class UserExternalConnectionDocument extends AbstractFirestoreDocument<UserExternalConnection, UserExternalConnectionDocument, typeof userExternalConnectionIdentity> {
157
256
  get modelIdentity(): import("../..").RootFirestoreModelIdentity<"userExternalConnection", "uec">;
158
257
  }
@@ -169,6 +268,17 @@ export declare const userExternalConnectionEntryFields: {
169
268
  uat: import("../..").FirestoreModelFieldMapFunctionsConfig<Date, string>;
170
269
  er: import("../..").FirestoreModelFieldMapFunctionsConfig<Maybe<UserExternalConnectionErrorCode>, Maybe<UserExternalConnectionErrorCode>>;
171
270
  };
271
+ /**
272
+ * Field conversions for a {@link UserExternalConnectionLogin}.
273
+ */
274
+ export declare const userExternalConnectionLoginFields: {
275
+ ea: import("../..").FirestoreModelFieldMapFunctionsConfig<string, string>;
276
+ l: import("../..").FirestoreModelFieldMapFunctionsConfig<Maybe<string>, Maybe<string>>;
277
+ em: import("../..").FirestoreModelFieldMapFunctionsConfig<Maybe<string>, Maybe<string>>;
278
+ emv: import("../..").FirestoreModelFieldMapFunctionsConfig<Maybe<boolean>, Maybe<boolean>>;
279
+ lat: import("../..").FirestoreModelFieldMapFunctionsConfig<Date, string>;
280
+ uat: import("../..").FirestoreModelFieldMapFunctionsConfig<Date, string>;
281
+ };
172
282
  export declare const userExternalConnectionConverter: import("../..").SnapshotConverterFunctions<UserExternalConnection, Partial<import("@dereekb/util").ReplaceType<UserExternalConnection, import("@dereekb/util").MaybeMap<object>, any>>>;
173
283
  /**
174
284
  * Copies the document id into `uid` on write, so the stored uid can never drift from the document id.
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Error codes the UserExternalConnection server surfaces.
3
+ *
4
+ * Declared HERE rather than beside the `HttpsError` factories in `@dereekb/firebase-server/model`
5
+ * because both sides need them: the server throws them, and the client branches on them — a login
6
+ * page deciding what to say about a refused sign-in, or a client treating a raced
7
+ * `..._ALREADY_EXISTS` as success. A code the browser cannot import is a code the browser has to
8
+ * hard-code.
9
+ */
10
+ export declare const USER_EXTERNAL_CONNECTION_PROVIDER_NOT_CONNECTED_ERROR_CODE = "USER_EXTERNAL_CONNECTION_PROVIDER_NOT_CONNECTED";
11
+ export declare const USER_EXTERNAL_CONNECTION_PROVIDER_NOT_ALLOWED_ERROR_CODE = "USER_EXTERNAL_CONNECTION_PROVIDER_NOT_ALLOWED";
12
+ export declare const USER_EXTERNAL_CONNECTION_ALREADY_EXISTS_ERROR_CODE = "USER_EXTERNAL_CONNECTION_ALREADY_EXISTS";
13
+ export declare const USER_EXTERNAL_CONNECTION_CREDENTIALS_EXPIRED_ERROR_CODE = "USER_EXTERNAL_CONNECTION_CREDENTIALS_EXPIRED";
14
+ export declare const USER_EXTERNAL_CONNECTION_EXTERNAL_ACCOUNT_IN_USE_ERROR_CODE = "USER_EXTERNAL_CONNECTION_EXTERNAL_ACCOUNT_IN_USE";
15
+ export declare const USER_EXTERNAL_CONNECTION_SIGN_IN_NOT_ENABLED_ERROR_CODE = "USER_EXTERNAL_CONNECTION_SIGN_IN_NOT_ENABLED";
16
+ export declare const USER_EXTERNAL_CONNECTION_SIGN_IN_DENIED_ERROR_CODE = "USER_EXTERNAL_CONNECTION_SIGN_IN_DENIED";
17
+ export declare const USER_EXTERNAL_CONNECTION_SIGN_IN_EMAIL_CONFLICT_ERROR_CODE = "USER_EXTERNAL_CONNECTION_SIGN_IN_EMAIL_CONFLICT";
18
+ export declare const USER_EXTERNAL_CONNECTION_SIGN_IN_USER_MISSING_ERROR_CODE = "USER_EXTERNAL_CONNECTION_SIGN_IN_USER_MISSING";
19
+ export declare const USER_EXTERNAL_CONNECTION_SIGN_IN_IDENTITY_UNAVAILABLE_ERROR_CODE = "USER_EXTERNAL_CONNECTION_SIGN_IN_IDENTITY_UNAVAILABLE";
20
+ /**
21
+ * Refuses an unlink that would leave the account with no way back in.
22
+ */
23
+ export declare const USER_EXTERNAL_CONNECTION_UNLINK_LAST_LOGIN_METHOD_ERROR_CODE = "USER_EXTERNAL_CONNECTION_UNLINK_LAST_LOGIN_METHOD";
24
+ /**
25
+ * Refuses a `link` round trip for a provider the app has not enabled for sign-in.
26
+ *
27
+ * Distinct from `..._SIGN_IN_NOT_ENABLED`: nothing is signing in — an already-authenticated user asked
28
+ * to make the provider a login method, and the same `policy.signIn` opt-in governs both.
29
+ */
30
+ export declare const USER_EXTERNAL_CONNECTION_LINK_NOT_ENABLED_ERROR_CODE = "USER_EXTERNAL_CONNECTION_LINK_NOT_ENABLED";
31
+ /**
32
+ * The only error codes a failed SIGN-IN reports back to the browser.
33
+ *
34
+ * An ALLOWLIST rather than a filter: a failed sign-in redirects to a URL the user can read, so
35
+ * anything that reaches it is public. Passing whatever code an internal failure happened to carry
36
+ * would leak the shape of that failure, and passing a message would leak its text — so a code absent
37
+ * from this set is reported as nothing at all.
38
+ *
39
+ * Shared with the client so a login page's copy map and the server's allowlist cannot drift.
40
+ */
41
+ export declare const USER_EXTERNAL_CONNECTION_SIGN_IN_REPORTABLE_ERROR_CODES: ReadonlySet<string>;
@@ -49,3 +49,37 @@ export type UserExternalConnectionCapability = string;
49
49
  * Identifier for the connected account within the third-party provider.
50
50
  */
51
51
  export type UserExternalConnectionExternalAccountId = string;
52
+ /**
53
+ * The delimiter joining a provider type to an external account id in a
54
+ * {@link UserExternalConnectionExternalAccountKey}.
55
+ *
56
+ * A colon is safe on both sides: {@link UserExternalConnectionProviderType} must already be a valid
57
+ * Firestore map key (no dots or slashes), and the key is only ever a stored/queried string VALUE,
58
+ * never a document id or field path.
59
+ */
60
+ export declare const USER_EXTERNAL_CONNECTION_EXTERNAL_ACCOUNT_KEY_DELIMITER = ":";
61
+ /**
62
+ * A `<providerType>:<externalAccountId>` pair identifying one third-party account globally.
63
+ *
64
+ * The provider type is part of the key because an external account id is only unique WITHIN a
65
+ * provider — a Discord snowflake and a Zoom user id could collide as bare strings.
66
+ */
67
+ export type UserExternalConnectionExternalAccountKey = string;
68
+ export interface UserExternalConnectionExternalAccountKeyInput {
69
+ readonly providerType: UserExternalConnectionProviderType;
70
+ readonly externalAccountId: UserExternalConnectionExternalAccountId;
71
+ }
72
+ /**
73
+ * Builds the {@link UserExternalConnectionExternalAccountKey} for a provider/account pair.
74
+ *
75
+ * The SOLE producer of the key format: the derivation that stores it and the query that reads it
76
+ * both go through here, so the two can never disagree about the delimiter.
77
+ *
78
+ * @param input - The provider type and external account id to join.
79
+ * @param input.providerType - The provider the account belongs to.
80
+ * @param input.externalAccountId - The provider's stable id for the account.
81
+ * @returns The external account key.
82
+ *
83
+ * @__NO_SIDE_EFFECTS__
84
+ */
85
+ export declare function userExternalConnectionExternalAccountKey(input: UserExternalConnectionExternalAccountKeyInput): UserExternalConnectionExternalAccountKey;
@@ -1,5 +1,5 @@
1
1
  import { type FirestoreQueryConstraint } from '../../common';
2
- import { type UserExternalConnectionProviderType } from './userexternalconnection.id';
2
+ import { type UserExternalConnectionExternalAccountKeyInput, type UserExternalConnectionProviderType } from './userexternalconnection.id';
3
3
  /**
4
4
  * Query for the UserExternalConnection documents that are currently connected to the given provider.
5
5
  *
@@ -17,3 +17,24 @@ import { type UserExternalConnectionProviderType } from './userexternalconnectio
17
17
  * @dbxModelFirebaseIndexScope COLLECTION
18
18
  */
19
19
  export declare function userExternalConnectionsWithConnectedProviderQuery(providerType: UserExternalConnectionProviderType): FirestoreQueryConstraint[];
20
+ /**
21
+ * Query for the UserExternalConnection document holding the given third-party account.
22
+ *
23
+ * The sign-in counterpart of {@link userExternalConnectionsWithConnectedProviderQuery}: that one
24
+ * asks "which users are connected to this provider?", this one asks "which user IS this account?".
25
+ * Both exist because a per-user document makes `e.<provider>.ea` unqueryable.
26
+ *
27
+ * Matches at ANY entry status — see the `ec` field docs. Expect at most one result when the
28
+ * provider's policy declares the connection unique, but the caller must still handle more than one:
29
+ * uniqueness is enforced at write time and a provider may only have started enforcing it recently.
30
+ *
31
+ * @param input - The provider type and external account id to search for.
32
+ * @param input.providerType - The provider the account belongs to.
33
+ * @param input.externalAccountId - The provider's stable id for the account.
34
+ * @returns Firestore query constraints matching the user holding that external account.
35
+ *
36
+ * @dbxModelFirebaseIndex
37
+ * @dbxModelFirebaseIndexModel UserExternalConnection
38
+ * @dbxModelFirebaseIndexScope COLLECTION
39
+ */
40
+ export declare function userExternalConnectionsWithExternalAccountQuery(input: UserExternalConnectionExternalAccountKeyInput): FirestoreQueryConstraint[];
@@ -1,7 +1,7 @@
1
- import { type Maybe } from '@dereekb/util';
1
+ import { type EmailAddress, type Maybe } from '@dereekb/util';
2
2
  import { type FirebaseAuthUserId } from '../../common';
3
- import { type UserExternalConnection, type UserExternalConnectionEntry, type UserExternalConnectionEntryMap, type UserExternalConnectionEntryStatus, type UserExternalConnectionErrorCode } from './userexternalconnection';
4
- import { type UserExternalConnectionCapability, type UserExternalConnectionExternalAccountId, type UserExternalConnectionProviderType } from './userexternalconnection.id';
3
+ import { type UserExternalConnection, type UserExternalConnectionEntry, type UserExternalConnectionEntryMap, type UserExternalConnectionEntryStatus, type UserExternalConnectionErrorCode, type UserExternalConnectionLogin, type UserExternalConnectionLoginMap } from './userexternalconnection';
4
+ import { type UserExternalConnectionCapability, type UserExternalConnectionExternalAccountId, type UserExternalConnectionExternalAccountKey, type UserExternalConnectionProviderType } from './userexternalconnection.id';
5
5
  /**
6
6
  * The facts about a granted third-party authorization that a {@link UserExternalConnectionEntry} is
7
7
  * allowed to summarize.
@@ -29,6 +29,36 @@ export interface UserExternalConnectionGrantSummary {
29
29
  * @returns The connected provider types, sorted for a stable stored value.
30
30
  */
31
31
  export declare function userExternalConnectionConnectedProviderTypes(entries: Maybe<UserExternalConnectionEntryMap>): UserExternalConnectionProviderType[];
32
+ /**
33
+ * Input for {@link userExternalConnectionExternalAccountKeys}.
34
+ *
35
+ * BOTH maps, always. Taking them as one object rather than as a positional entry map is deliberate:
36
+ * `ec` is the union of the two, and a signature that made either one omittable would make it possible
37
+ * to recompute the array from half its sources — which silently drops the other half's keys out of the
38
+ * lookup a sign-in performs.
39
+ */
40
+ export interface UserExternalConnectionExternalAccountKeysInput {
41
+ readonly entries?: Maybe<UserExternalConnectionEntryMap>;
42
+ readonly logins?: Maybe<UserExternalConnectionLoginMap>;
43
+ }
44
+ /**
45
+ * The SOLE producer of a {@link UserExternalConnection}'s `ec` array.
46
+ *
47
+ * Membership is every ENTRY carrying an `ea`, at ANY status, UNION every LOGIN LINK's `ea` —
48
+ * deliberately unlike {@link userExternalConnectionConnectedProviderTypes}, which is `connected`-only.
49
+ * `c` answers "whose credentials can I use?", a question about the credentials; `ec` answers "who IS
50
+ * this account?", a question about identity, which survives an expired token. Filtering it by status
51
+ * would make a returning user with `error` credentials look like a stranger, and a sign-in would
52
+ * mint them a second Firebase user.
53
+ *
54
+ * The union is what makes the two lifecycles independent. Disconnecting a data connection removes its
55
+ * entry, and if `ec` came from `e` alone that would take the sign-in binding with it — the next
56
+ * sign-in would find no match and mint a second Firebase user for the same person.
57
+ *
58
+ * @param input - The entry map and the login map to derive from.
59
+ * @returns The external account keys, deduped and sorted for a stable stored value.
60
+ */
61
+ export declare function userExternalConnectionExternalAccountKeys(input: UserExternalConnectionExternalAccountKeysInput): UserExternalConnectionExternalAccountKey[];
32
62
  /**
33
63
  * Input for {@link userExternalConnectionEntryForOutcome}.
34
64
  *
@@ -87,6 +117,29 @@ export interface ApplyUserExternalConnectionEntryInput {
87
117
  readonly entry: Maybe<UserExternalConnectionEntry>;
88
118
  readonly now: Date;
89
119
  }
120
+ /**
121
+ * Input for {@link userExternalConnectionValue}.
122
+ */
123
+ export interface UserExternalConnectionValueInput {
124
+ readonly uid: FirebaseAuthUserId;
125
+ readonly entries: UserExternalConnectionEntryMap;
126
+ readonly logins: UserExternalConnectionLoginMap;
127
+ readonly now: Date;
128
+ }
129
+ /**
130
+ * Assembles the COMPLETE document value from both maps.
131
+ *
132
+ * Extracted so the two appliers cannot diverge on how the derived arrays are produced: `ec` is the
133
+ * union of `e` and `li`, and either applier computing it from only the map it happened to change
134
+ * would drop the other map's keys out of the sign-in lookup.
135
+ *
136
+ * Exported for the one caller that legitimately replaces a whole map rather than one provider's key —
137
+ * the login backfill. Ordinary writes go through the two appliers.
138
+ *
139
+ * @param input - The uid, both maps, and the instant to stamp.
140
+ * @returns The next UserExternalConnection value to write.
141
+ */
142
+ export declare function userExternalConnectionValue(input: UserExternalConnectionValueInput): UserExternalConnection;
90
143
  /**
91
144
  * Applies a single provider's entry and returns the COMPLETE next document.
92
145
  *
@@ -94,10 +147,77 @@ export interface ApplyUserExternalConnectionEntryInput {
94
147
  * exported way to change `e`, and it always recomputes `c` from the resulting map. There is no
95
148
  * exported path that touches one without the other.
96
149
  *
150
+ * The login map is carried through UNCHANGED. A data connection's lifecycle says nothing about
151
+ * whether the provider is still a way to sign in, so a disconnect must not remove the link.
152
+ *
97
153
  * @param input - The current document plus the provider entry to apply.
98
154
  * @returns The next UserExternalConnection value to write.
99
155
  */
100
156
  export declare function applyUserExternalConnectionEntry(input: ApplyUserExternalConnectionEntryInput): UserExternalConnection;
157
+ /**
158
+ * Input for {@link applyUserExternalConnectionLogin}.
159
+ */
160
+ export interface ApplyUserExternalConnectionLoginInput {
161
+ /**
162
+ * The currently stored document, when one exists.
163
+ */
164
+ readonly current?: Maybe<UserExternalConnection>;
165
+ readonly uid: FirebaseAuthUserId;
166
+ readonly providerType: UserExternalConnectionProviderType;
167
+ /**
168
+ * The next login link for this provider, or null to remove the provider's key entirely.
169
+ */
170
+ readonly login: Maybe<UserExternalConnectionLogin>;
171
+ readonly now: Date;
172
+ }
173
+ /**
174
+ * Applies a single provider's LOGIN LINK and returns the COMPLETE next document.
175
+ *
176
+ * The mirror of {@link applyUserExternalConnectionEntry}, and the only exported way to change `li`.
177
+ * The entry map is carried through unchanged: linking a provider as a login method grants nothing
178
+ * about its data connection, because the identity scopes and the data scopes are not guaranteed to
179
+ * be the same set.
180
+ *
181
+ * @param input - The current document plus the login link to apply.
182
+ * @returns The next UserExternalConnection value to write.
183
+ */
184
+ export declare function applyUserExternalConnectionLogin(input: ApplyUserExternalConnectionLoginInput): UserExternalConnection;
185
+ /**
186
+ * The identity facts a {@link UserExternalConnectionLogin} is derived from.
187
+ *
188
+ * Structurally the subset of `UserExternalConnectionSignInIdentity` (in
189
+ * `@dereekb/firebase-server/model`) that a link records. Declared here rather than imported because
190
+ * this package is shared with the browser and cannot name a server type — and because the derivation
191
+ * genuinely needs nothing more than these four values.
192
+ */
193
+ export interface UserExternalConnectionLoginIdentity {
194
+ readonly externalAccountId: UserExternalConnectionExternalAccountId;
195
+ readonly email?: Maybe<EmailAddress>;
196
+ readonly emailVerified?: Maybe<boolean>;
197
+ readonly label?: Maybe<string>;
198
+ }
199
+ /**
200
+ * Input for {@link userExternalConnectionLoginForIdentity}.
201
+ */
202
+ export interface UserExternalConnectionLoginForIdentityInput {
203
+ readonly identity: UserExternalConnectionLoginIdentity;
204
+ /**
205
+ * The link currently stored for this provider, when there is one.
206
+ */
207
+ readonly previous?: Maybe<UserExternalConnectionLogin>;
208
+ readonly now: Date;
209
+ }
210
+ /**
211
+ * Derives the {@link UserExternalConnectionLogin} for an identity a link round trip resolved.
212
+ *
213
+ * `lat` survives a relink, the mirror of how {@link userExternalConnectionEntryForOutcome} preserves
214
+ * `coa`: relinking the same provider is a re-consent, not a new relationship, so the date the account
215
+ * first became a login method stays what it was.
216
+ *
217
+ * @param input - The resolved identity, the stored link, and the instant to stamp.
218
+ * @returns The next login link.
219
+ */
220
+ export declare function userExternalConnectionLoginForIdentity(input: UserExternalConnectionLoginForIdentityInput): UserExternalConnectionLogin;
101
221
  /**
102
222
  * Input for {@link emptyUserExternalConnection}.
103
223
  */
@@ -147,3 +267,18 @@ export declare function userExternalConnectionEntryIsExpired(entry: Maybe<UserEx
147
267
  * @returns True when the provider's entry is connected.
148
268
  */
149
269
  export declare function userExternalConnectionIsConnectedToProvider(connection: Maybe<UserExternalConnection>, providerType: UserExternalConnectionProviderType): boolean;
270
+ /**
271
+ * Returns the login link for the given provider, if any.
272
+ *
273
+ * @param connection - The loaded connection document.
274
+ * @param providerType - The provider to read.
275
+ * @returns The provider's login link, or null when the provider is not a login method for this user.
276
+ */
277
+ export declare function userExternalConnectionLoginForProvider(connection: Maybe<UserExternalConnection>, providerType: UserExternalConnectionProviderType): Maybe<UserExternalConnectionLogin>;
278
+ /**
279
+ * Returns every provider type that is a login method for this user.
280
+ *
281
+ * @param connection - The loaded connection document.
282
+ * @returns The linked provider types, sorted for a stable render order.
283
+ */
284
+ export declare function userExternalConnectionLinkedLoginProviderTypes(connection: Maybe<UserExternalConnection>): UserExternalConnectionProviderType[];
package/test/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@dereekb/firebase/test",
3
- "version": "14.0.1",
3
+ "version": "14.1.0",
4
4
  "type": "module",
5
5
  "peerDependencies": {
6
- "@dereekb/date": "14.0.1",
7
- "@dereekb/firebase": "14.0.1",
8
- "@dereekb/model": "14.0.1",
9
- "@dereekb/rxjs": "14.0.1",
10
- "@dereekb/util": "14.0.1",
6
+ "@dereekb/date": "14.1.0",
7
+ "@dereekb/firebase": "14.1.0",
8
+ "@dereekb/model": "14.1.0",
9
+ "@dereekb/rxjs": "14.1.0",
10
+ "@dereekb/util": "14.1.0",
11
11
  "@firebase/rules-unit-testing": "5.0.2",
12
12
  "date-fns": "^4.1.0",
13
13
  "firebase": "^12.18.0",