@dereekb/firebase 12.2.1 → 12.3.1

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.
package/index.cjs.js CHANGED
@@ -8031,6 +8031,16 @@ function notificationSummaryIdForUidFunctionForRootFirestoreModelIdentity(userMo
8031
8031
  * The default notification template type that can be provided to subscribe to notifications not specified in the configurations.
8032
8032
  */
8033
8033
  const DEFAULT_NOTIFICATION_TEMPLATE_TYPE = 'D';
8034
+ /**
8035
+ * Creates a NotificationTaskUniqueId from the input model id and task type.
8036
+ *
8037
+ * @param input model id input
8038
+ * @param taskType task type
8039
+ * @returns NotificationTaskUniqueId
8040
+ */
8041
+ function notificationTaskUniqueId(input, taskType) {
8042
+ return `${firestoreModelId(input)}_${taskType}`; // combineation of model id and template type
8043
+ }
8034
8044
 
8035
8045
  function mergeNotificationBoxRecipientTemplateConfigs(a, b) {
8036
8046
  const {
@@ -8482,6 +8492,12 @@ exports.NotificationSendType = void 0;
8482
8492
  * Sends the notification even if the NotificationBox does not exist.
8483
8493
  */
8484
8494
  NotificationSendType[NotificationSendType["SEND_WITHOUT_CREATING_BOX"] = 2] = "SEND_WITHOUT_CREATING_BOX";
8495
+ /**
8496
+ * A task notification.
8497
+ *
8498
+ * This is used with Task-type notifications.
8499
+ */
8500
+ NotificationSendType[NotificationSendType["TASK_NOTIFICATION"] = 3] = "TASK_NOTIFICATION";
8485
8501
  })(exports.NotificationSendType || (exports.NotificationSendType = {}));
8486
8502
  exports.NotificationSendState = void 0;
8487
8503
  (function (NotificationSendState) {
@@ -8494,7 +8510,7 @@ exports.NotificationSendState = void 0;
8494
8510
  */
8495
8511
  NotificationSendState[NotificationSendState["QUEUED"] = 0] = "QUEUED";
8496
8512
  /**
8497
- * Notification has been sent. Will still show as sent even if there were no messages/recipients to send for this medium.
8513
+ * Notification has been sent/complete. Will still show as sent even if there were no messages/recipients to send for this medium.
8498
8514
  */
8499
8515
  NotificationSendState[NotificationSendState["SENT"] = 1] = "SENT";
8500
8516
  /**
@@ -8522,17 +8538,9 @@ exports.NotificationSendState = void 0;
8522
8538
  */
8523
8539
  NotificationSendState[NotificationSendState["CONFIG_ERROR"] = 7] = "CONFIG_ERROR";
8524
8540
  })(exports.NotificationSendState || (exports.NotificationSendState = {}));
8525
- exports.NotificationType = void 0;
8526
- (function (NotificationType) {
8527
- /**
8528
- * Normal notification that is sent to everyone that is configured for the notification box.
8529
- */
8530
- NotificationType[NotificationType["NORMAL"] = 0] = "NORMAL";
8531
- /**
8532
- * Notification that goes to only the configured users.
8533
- */
8534
- NotificationType[NotificationType["AD_HOC"] = 1] = "AD_HOC";
8535
- })(exports.NotificationType || (exports.NotificationType = {}));
8541
+ /**
8542
+ * Notification recipient send flags.
8543
+ */
8536
8544
  exports.NotificationRecipientSendFlag = void 0;
8537
8545
  (function (NotificationRecipientSendFlag) {
8538
8546
  /**
@@ -8597,7 +8605,8 @@ const notificationConverter = snapshotConverterFunctions({
8597
8605
  default: false
8598
8606
  }),
8599
8607
  tsr: firestoreUniqueStringArray(),
8600
- esr: firestoreUniqueStringArray()
8608
+ esr: firestoreUniqueStringArray(),
8609
+ tpr: firestoreUniqueStringArray()
8601
8610
  }
8602
8611
  });
8603
8612
  function notificationCollectionReferenceFactory(context) {
@@ -9146,6 +9155,8 @@ function createNotificationTemplate(input) {
9146
9155
  const {
9147
9156
  notificationModel: inputNotification,
9148
9157
  type,
9158
+ unique,
9159
+ overrideExistingTask,
9149
9160
  // notification
9150
9161
  sendType,
9151
9162
  recipients,
@@ -9153,6 +9164,8 @@ function createNotificationTemplate(input) {
9153
9164
  r,
9154
9165
  rf,
9155
9166
  sat,
9167
+ // task notifications
9168
+ tpr,
9156
9169
  // item
9157
9170
  createdBy,
9158
9171
  targetModel: inputTargetModel,
@@ -9181,6 +9194,7 @@ function createNotificationTemplate(input) {
9181
9194
  notificationModel,
9182
9195
  st: sendType ?? st,
9183
9196
  sat,
9197
+ tpr,
9184
9198
  rf,
9185
9199
  r: recipients ?? r,
9186
9200
  n: {
@@ -9191,7 +9205,9 @@ function createNotificationTemplate(input) {
9191
9205
  s: subject ?? s,
9192
9206
  g: message ?? g,
9193
9207
  d
9194
- }
9208
+ },
9209
+ unique,
9210
+ overrideExistingTask
9195
9211
  };
9196
9212
  return template;
9197
9213
  }
@@ -9235,7 +9251,10 @@ function createNotificationDocumentPair(input) {
9235
9251
  ts,
9236
9252
  es,
9237
9253
  ps,
9238
- ns
9254
+ ns,
9255
+ tpr,
9256
+ unique: inputUnique,
9257
+ overrideExistingTask
9239
9258
  } = template;
9240
9259
  let accessor = inputAccessor;
9241
9260
  const notificationBoxId = notificationBoxIdForModel(notificationModel);
@@ -9252,7 +9271,22 @@ function createNotificationDocumentPair(input) {
9252
9271
  if (!accessor) {
9253
9272
  throw new Error('createNotificationDocument() failed as neither an accessor nor sufficient information was provided about the target.');
9254
9273
  }
9255
- const notificationDocument = accessor.newDocument();
9274
+ let notificationDocument;
9275
+ const isNotificationTask = st === exports.NotificationSendType.TASK_NOTIFICATION;
9276
+ if (isNotificationTask && inputUnique) {
9277
+ let uniqueId;
9278
+ if (typeof inputUnique === 'string') {
9279
+ uniqueId = inputUnique;
9280
+ if (!isFirestoreModelId(uniqueId)) {
9281
+ throw new Error('Input "unique" notification task id is not a valid firestore model id.');
9282
+ }
9283
+ } else {
9284
+ uniqueId = notificationTaskUniqueId(notificationModel, n.t);
9285
+ }
9286
+ notificationDocument = accessor.loadDocumentForId(uniqueId);
9287
+ } else {
9288
+ notificationDocument = accessor.newDocument();
9289
+ }
9256
9290
  const id = notificationDocument.id;
9257
9291
  const notification = {
9258
9292
  st: st ?? exports.NotificationSendType.INIT_BOX_AND_SEND,
@@ -9273,14 +9307,27 @@ function createNotificationDocumentPair(input) {
9273
9307
  d: false,
9274
9308
  tsr: [],
9275
9309
  esr: [],
9310
+ tpr: [],
9276
9311
  ts: ts ?? exports.NotificationSendState.QUEUED,
9277
9312
  es: es ?? exports.NotificationSendState.QUEUED,
9278
9313
  ps: ps ?? exports.NotificationSendState.QUEUED,
9279
9314
  ns: ns ?? exports.NotificationSendState.QUEUED
9280
9315
  };
9316
+ if (isNotificationTask) {
9317
+ notification.tpr = tpr ?? []; // only set for task notifications
9318
+ // no recipients
9319
+ notification.r = [];
9320
+ // no send states
9321
+ notification.ts = exports.NotificationSendState.NONE;
9322
+ notification.es = exports.NotificationSendState.NONE;
9323
+ notification.ps = exports.NotificationSendState.NONE;
9324
+ notification.ns = exports.NotificationSendState.NONE;
9325
+ }
9281
9326
  return {
9282
9327
  notificationDocument,
9283
9328
  notification,
9329
+ isNotificationTask,
9330
+ overrideExistingTask,
9284
9331
  notificationCreated: false
9285
9332
  };
9286
9333
  }
@@ -9293,10 +9340,16 @@ async function createNotificationDocument(input) {
9293
9340
  const pair = createNotificationDocumentPair(input);
9294
9341
  const {
9295
9342
  notification,
9296
- notificationDocument
9343
+ notificationDocument,
9344
+ isNotificationTask,
9345
+ overrideExistingTask
9297
9346
  } = pair;
9298
9347
  if (input.shouldCreateNotification !== false && shouldSendCreatedNotificationInput(input)) {
9299
- await notificationDocument.create(notification);
9348
+ if (isNotificationTask && overrideExistingTask) {
9349
+ await notificationDocument.accessor.set(notification);
9350
+ } else {
9351
+ await notificationDocument.create(notification);
9352
+ }
9300
9353
  pair.notificationCreated = true;
9301
9354
  }
9302
9355
  return pair;
@@ -9316,6 +9369,24 @@ async function createNotificationDocumentIfSending(input) {
9316
9369
  }
9317
9370
  }
9318
9371
 
9372
+ /**
9373
+ * Creates a notification template for a Notification with the task type.
9374
+ *
9375
+ * @param input
9376
+ * @returns
9377
+ */
9378
+ function createNotificationTaskTemplate(input) {
9379
+ return createNotificationTemplate({
9380
+ ...input,
9381
+ tpr: input.completedCheckpoints ?? input.tpr,
9382
+ sendType: exports.NotificationSendType.TASK_NOTIFICATION,
9383
+ st: undefined,
9384
+ rf: undefined,
9385
+ recipients: undefined,
9386
+ r: undefined
9387
+ });
9388
+ }
9389
+
9319
9390
  /**
9320
9391
  * Creates a NotificationTemplateTypeInfoRecord from the input info array.
9321
9392
  *
@@ -9532,6 +9603,13 @@ function mergeNotificationSendMessagesResult(a, b) {
9532
9603
  };
9533
9604
  }
9534
9605
 
9606
+ /**
9607
+ * Returns an empty array, which is used to signal that the task did not fail but has not complete the current checkpoint.
9608
+ */
9609
+ function delayCompletion() {
9610
+ return [];
9611
+ }
9612
+
9535
9613
  function effectiveNotificationBoxRecipientConfig(input) {
9536
9614
  const {
9537
9615
  uid,
@@ -9890,9 +9968,11 @@ exports.copyUserRelatedDataModifierConfig = copyUserRelatedDataModifierConfig;
9890
9968
  exports.createNotificationDocument = createNotificationDocument;
9891
9969
  exports.createNotificationDocumentIfSending = createNotificationDocumentIfSending;
9892
9970
  exports.createNotificationDocumentPair = createNotificationDocumentPair;
9971
+ exports.createNotificationTaskTemplate = createNotificationTaskTemplate;
9893
9972
  exports.createNotificationTemplate = createNotificationTemplate;
9894
9973
  exports.dataFromDocumentSnapshots = dataFromDocumentSnapshots;
9895
9974
  exports.dataFromSnapshotStream = dataFromSnapshotStream;
9975
+ exports.delayCompletion = delayCompletion;
9896
9976
  exports.developmentFirebaseFunctionMapFactory = developmentFirebaseFunctionMapFactory;
9897
9977
  exports.directDataHttpsCallable = directDataHttpsCallable;
9898
9978
  exports.documentData = documentData;
@@ -10147,6 +10227,7 @@ exports.notificationSummaryFirestoreCollection = notificationSummaryFirestoreCol
10147
10227
  exports.notificationSummaryIdForModel = notificationSummaryIdForModel;
10148
10228
  exports.notificationSummaryIdForUidFunctionForRootFirestoreModelIdentity = notificationSummaryIdForUidFunctionForRootFirestoreModelIdentity;
10149
10229
  exports.notificationSummaryIdentity = notificationSummaryIdentity;
10230
+ exports.notificationTaskUniqueId = notificationTaskUniqueId;
10150
10231
  exports.notificationTemplateTypeDetailsRecord = notificationTemplateTypeDetailsRecord;
10151
10232
  exports.notificationTemplateTypeInfoRecord = notificationTemplateTypeInfoRecord;
10152
10233
  exports.notificationUserCollectionReference = notificationUserCollectionReference;
package/index.esm.js CHANGED
@@ -8029,6 +8029,16 @@ function notificationSummaryIdForUidFunctionForRootFirestoreModelIdentity(userMo
8029
8029
  * The default notification template type that can be provided to subscribe to notifications not specified in the configurations.
8030
8030
  */
8031
8031
  const DEFAULT_NOTIFICATION_TEMPLATE_TYPE = 'D';
8032
+ /**
8033
+ * Creates a NotificationTaskUniqueId from the input model id and task type.
8034
+ *
8035
+ * @param input model id input
8036
+ * @param taskType task type
8037
+ * @returns NotificationTaskUniqueId
8038
+ */
8039
+ function notificationTaskUniqueId(input, taskType) {
8040
+ return `${firestoreModelId(input)}_${taskType}`; // combineation of model id and template type
8041
+ }
8032
8042
 
8033
8043
  function mergeNotificationBoxRecipientTemplateConfigs(a, b) {
8034
8044
  const {
@@ -8480,6 +8490,12 @@ var NotificationSendType;
8480
8490
  * Sends the notification even if the NotificationBox does not exist.
8481
8491
  */
8482
8492
  NotificationSendType[NotificationSendType["SEND_WITHOUT_CREATING_BOX"] = 2] = "SEND_WITHOUT_CREATING_BOX";
8493
+ /**
8494
+ * A task notification.
8495
+ *
8496
+ * This is used with Task-type notifications.
8497
+ */
8498
+ NotificationSendType[NotificationSendType["TASK_NOTIFICATION"] = 3] = "TASK_NOTIFICATION";
8483
8499
  })(NotificationSendType || (NotificationSendType = {}));
8484
8500
  var NotificationSendState;
8485
8501
  (function (NotificationSendState) {
@@ -8492,7 +8508,7 @@ var NotificationSendState;
8492
8508
  */
8493
8509
  NotificationSendState[NotificationSendState["QUEUED"] = 0] = "QUEUED";
8494
8510
  /**
8495
- * Notification has been sent. Will still show as sent even if there were no messages/recipients to send for this medium.
8511
+ * Notification has been sent/complete. Will still show as sent even if there were no messages/recipients to send for this medium.
8496
8512
  */
8497
8513
  NotificationSendState[NotificationSendState["SENT"] = 1] = "SENT";
8498
8514
  /**
@@ -8520,17 +8536,9 @@ var NotificationSendState;
8520
8536
  */
8521
8537
  NotificationSendState[NotificationSendState["CONFIG_ERROR"] = 7] = "CONFIG_ERROR";
8522
8538
  })(NotificationSendState || (NotificationSendState = {}));
8523
- var NotificationType;
8524
- (function (NotificationType) {
8525
- /**
8526
- * Normal notification that is sent to everyone that is configured for the notification box.
8527
- */
8528
- NotificationType[NotificationType["NORMAL"] = 0] = "NORMAL";
8529
- /**
8530
- * Notification that goes to only the configured users.
8531
- */
8532
- NotificationType[NotificationType["AD_HOC"] = 1] = "AD_HOC";
8533
- })(NotificationType || (NotificationType = {}));
8539
+ /**
8540
+ * Notification recipient send flags.
8541
+ */
8534
8542
  var NotificationRecipientSendFlag;
8535
8543
  (function (NotificationRecipientSendFlag) {
8536
8544
  /**
@@ -8595,7 +8603,8 @@ const notificationConverter = snapshotConverterFunctions({
8595
8603
  default: false
8596
8604
  }),
8597
8605
  tsr: firestoreUniqueStringArray(),
8598
- esr: firestoreUniqueStringArray()
8606
+ esr: firestoreUniqueStringArray(),
8607
+ tpr: firestoreUniqueStringArray()
8599
8608
  }
8600
8609
  });
8601
8610
  function notificationCollectionReferenceFactory(context) {
@@ -9144,6 +9153,8 @@ function createNotificationTemplate(input) {
9144
9153
  const {
9145
9154
  notificationModel: inputNotification,
9146
9155
  type,
9156
+ unique,
9157
+ overrideExistingTask,
9147
9158
  // notification
9148
9159
  sendType,
9149
9160
  recipients,
@@ -9151,6 +9162,8 @@ function createNotificationTemplate(input) {
9151
9162
  r,
9152
9163
  rf,
9153
9164
  sat,
9165
+ // task notifications
9166
+ tpr,
9154
9167
  // item
9155
9168
  createdBy,
9156
9169
  targetModel: inputTargetModel,
@@ -9179,6 +9192,7 @@ function createNotificationTemplate(input) {
9179
9192
  notificationModel,
9180
9193
  st: sendType ?? st,
9181
9194
  sat,
9195
+ tpr,
9182
9196
  rf,
9183
9197
  r: recipients ?? r,
9184
9198
  n: {
@@ -9189,7 +9203,9 @@ function createNotificationTemplate(input) {
9189
9203
  s: subject ?? s,
9190
9204
  g: message ?? g,
9191
9205
  d
9192
- }
9206
+ },
9207
+ unique,
9208
+ overrideExistingTask
9193
9209
  };
9194
9210
  return template;
9195
9211
  }
@@ -9233,7 +9249,10 @@ function createNotificationDocumentPair(input) {
9233
9249
  ts,
9234
9250
  es,
9235
9251
  ps,
9236
- ns
9252
+ ns,
9253
+ tpr,
9254
+ unique: inputUnique,
9255
+ overrideExistingTask
9237
9256
  } = template;
9238
9257
  let accessor = inputAccessor;
9239
9258
  const notificationBoxId = notificationBoxIdForModel(notificationModel);
@@ -9250,7 +9269,22 @@ function createNotificationDocumentPair(input) {
9250
9269
  if (!accessor) {
9251
9270
  throw new Error('createNotificationDocument() failed as neither an accessor nor sufficient information was provided about the target.');
9252
9271
  }
9253
- const notificationDocument = accessor.newDocument();
9272
+ let notificationDocument;
9273
+ const isNotificationTask = st === NotificationSendType.TASK_NOTIFICATION;
9274
+ if (isNotificationTask && inputUnique) {
9275
+ let uniqueId;
9276
+ if (typeof inputUnique === 'string') {
9277
+ uniqueId = inputUnique;
9278
+ if (!isFirestoreModelId(uniqueId)) {
9279
+ throw new Error('Input "unique" notification task id is not a valid firestore model id.');
9280
+ }
9281
+ } else {
9282
+ uniqueId = notificationTaskUniqueId(notificationModel, n.t);
9283
+ }
9284
+ notificationDocument = accessor.loadDocumentForId(uniqueId);
9285
+ } else {
9286
+ notificationDocument = accessor.newDocument();
9287
+ }
9254
9288
  const id = notificationDocument.id;
9255
9289
  const notification = {
9256
9290
  st: st ?? NotificationSendType.INIT_BOX_AND_SEND,
@@ -9271,14 +9305,27 @@ function createNotificationDocumentPair(input) {
9271
9305
  d: false,
9272
9306
  tsr: [],
9273
9307
  esr: [],
9308
+ tpr: [],
9274
9309
  ts: ts ?? NotificationSendState.QUEUED,
9275
9310
  es: es ?? NotificationSendState.QUEUED,
9276
9311
  ps: ps ?? NotificationSendState.QUEUED,
9277
9312
  ns: ns ?? NotificationSendState.QUEUED
9278
9313
  };
9314
+ if (isNotificationTask) {
9315
+ notification.tpr = tpr ?? []; // only set for task notifications
9316
+ // no recipients
9317
+ notification.r = [];
9318
+ // no send states
9319
+ notification.ts = NotificationSendState.NONE;
9320
+ notification.es = NotificationSendState.NONE;
9321
+ notification.ps = NotificationSendState.NONE;
9322
+ notification.ns = NotificationSendState.NONE;
9323
+ }
9279
9324
  return {
9280
9325
  notificationDocument,
9281
9326
  notification,
9327
+ isNotificationTask,
9328
+ overrideExistingTask,
9282
9329
  notificationCreated: false
9283
9330
  };
9284
9331
  }
@@ -9291,10 +9338,16 @@ async function createNotificationDocument(input) {
9291
9338
  const pair = createNotificationDocumentPair(input);
9292
9339
  const {
9293
9340
  notification,
9294
- notificationDocument
9341
+ notificationDocument,
9342
+ isNotificationTask,
9343
+ overrideExistingTask
9295
9344
  } = pair;
9296
9345
  if (input.shouldCreateNotification !== false && shouldSendCreatedNotificationInput(input)) {
9297
- await notificationDocument.create(notification);
9346
+ if (isNotificationTask && overrideExistingTask) {
9347
+ await notificationDocument.accessor.set(notification);
9348
+ } else {
9349
+ await notificationDocument.create(notification);
9350
+ }
9298
9351
  pair.notificationCreated = true;
9299
9352
  }
9300
9353
  return pair;
@@ -9314,6 +9367,24 @@ async function createNotificationDocumentIfSending(input) {
9314
9367
  }
9315
9368
  }
9316
9369
 
9370
+ /**
9371
+ * Creates a notification template for a Notification with the task type.
9372
+ *
9373
+ * @param input
9374
+ * @returns
9375
+ */
9376
+ function createNotificationTaskTemplate(input) {
9377
+ return createNotificationTemplate({
9378
+ ...input,
9379
+ tpr: input.completedCheckpoints ?? input.tpr,
9380
+ sendType: NotificationSendType.TASK_NOTIFICATION,
9381
+ st: undefined,
9382
+ rf: undefined,
9383
+ recipients: undefined,
9384
+ r: undefined
9385
+ });
9386
+ }
9387
+
9317
9388
  /**
9318
9389
  * Creates a NotificationTemplateTypeInfoRecord from the input info array.
9319
9390
  *
@@ -9530,6 +9601,13 @@ function mergeNotificationSendMessagesResult(a, b) {
9530
9601
  };
9531
9602
  }
9532
9603
 
9604
+ /**
9605
+ * Returns an empty array, which is used to signal that the task did not fail but has not complete the current checkpoint.
9606
+ */
9607
+ function delayCompletion() {
9608
+ return [];
9609
+ }
9610
+
9533
9611
  function effectiveNotificationBoxRecipientConfig(input) {
9534
9612
  const {
9535
9613
  uid,
@@ -9728,4 +9806,4 @@ function systemStateFirestoreCollection(firestoreContext, converters) {
9728
9806
  });
9729
9807
  }
9730
9808
 
9731
- export { AbstractFirestoreDocument, AbstractFirestoreDocumentDataAccessorWrapper, AbstractFirestoreDocumentWithParent, AbstractSubscribeOrUnsubscribeToNotificationBoxParams, AbstractSubscribeToNotificationBoxParams, AppNotificationTemplateTypeInfoRecordService, BASE_MODEL_STORAGE_FILE_PATH, CALL_MODEL_APP_FUNCTION_KEY, COPY_USER_RELATED_DATA_ACCESSOR_FACTORY_FUNCTION, CREATE_NOTIFICATION_ID_REQUIRED_ERROR_CODE, CleanupSentNotificationsParams, ContextGrantedModelRolesReaderInstance, CreateNotificationBoxParams, CreateNotificationSummaryParams, CreateNotificationUserParams, 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_UNITED_STATES_ADDRESS_VALUE, DEFAULT_FIRESTORE_WEBSITE_FILE_LINK_VALUE, DEFAULT_ITERATE_FIRESTORE_DOCUMENT_SNAPSHOT_BATCHES_BATCH_SIZE, DEFAULT_NOTIFICATION_TEMPLATE_TYPE, DEFAULT_QUERY_CHANGE_WATCHER_DELAY, DEFAULT_SINGLE_ITEM_FIRESTORE_COLLECTION_DOCUMENT_IDENTIFIER, DEFAULT_WEBSITE_LINK, FIREBASE_AUTH_NETWORK_REQUEST_ERROR, FIREBASE_AUTH_NETWORK_REQUEST_FAILED, FIREBASE_AUTH_PASSWORD_MAX_LENGTH, FIREBASE_AUTH_PASSWORD_MIN_LENGTH, FIREBASE_AUTH_USER_NOT_FOUND_ERROR, FIREBASE_AUTH_WRONG_PASSWORD, FIREBASE_DEVELOPMENT_FUNCTIONS_MAP_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_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, FirebaseDevelopmentFunctions, FirebaseModelPermissionServiceInstance, FirebaseServerError, FirestoreAccessorStreamMode, FirestoreDocumentContextType, InferredTargetModelIdParams, InferredTargetModelParams, InitializeAllApplicableNotificationBoxesParams, InitializeAllApplicableNotificationSummariesParams, InitializeNotificationModelParams, IsFirestoreModelId, IsFirestoreModelIdOrKey, IsFirestoreModelKey, MAX_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MIN_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER_DEFAULT, MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER_SPLITTER, MODEL_STORAGE_FILE_SLASH_PATH_FACTORY, ModifyBeforeSetFirestoreDocumentDataAccessorWrapper, NOTIFICATION_BOX_DOES_NOT_EXIST_ERROR_CODE, NOTIFICATION_BOX_EXISTS_FOR_MODEL_ERROR_CODE, NOTIFICATION_BOX_RECIPIENT_DOES_NOT_EXIST_ERROR_CODE, 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_USER_BLOCKED_FROM_BEING_ADD_TO_RECIPIENTS_ERROR_CODE, NOTIFICATION_USER_INVALID_UID_FOR_CREATE_ERROR_CODE, NOTIFICATION_USER_LOCKED_CONFIG_FROM_BEING_UPDATED_ERROR_CODE, NOTIFICATION_WEEK_NOTIFICATION_ITEM_LIMIT, NotificationBoxDocument, NotificationBoxRecipientFlag, NotificationBoxRecipientTemplateConfigArrayEntryParam, NotificationBoxRecipientTemplateConfigBoolean, NotificationDocument, NotificationFirestoreCollections, NotificationFunctions, NotificationMessageFlag, NotificationRecipientParams, NotificationRecipientSendFlag, NotificationSendState, NotificationSendType, NotificationSummaryDocument, NotificationType, NotificationUserDocument, NotificationWeekDocument, RUN_DEV_FUNCTION_APP_FUNCTION_KEY, ResyncAllNotificationUserParams, ResyncNotificationUserParams, SCHEDULED_FUNCTION_DEV_FUNCTION_SPECIFIER, ScheduledFunctionDevelopmentFirebaseFunctionListEntry, ScheduledFunctionDevelopmentFirebaseFunctionParams, ScheduledFunctionDevelopmentFunctionTypeEnum, SendNotificationParams, SendQueuedNotificationsParams, SystemStateDocument, SystemStateFirestoreCollections, TargetModelIdParams, TargetModelParams, UpdateNotificationBoxParams, UpdateNotificationBoxRecipientLikeParams, UpdateNotificationBoxRecipientParams, UpdateNotificationSummaryParams, UpdateNotificationUserDefaultNotificationBoxRecipientConfigParams, UpdateNotificationUserNotificationBoxRecipientParams, UpdateNotificationUserParams, addConstraintToBuilder, addOrReplaceLimitInConstraints, allChildDocumentsUnderParent, allChildDocumentsUnderParentPath, allChildDocumentsUnderRelativePath, allowDocumentSnapshotWithPathOnceFilter, allowedNotificationRecipients, appNotificationTemplateTypeInfoRecordService, arrayUpdateWithAccessorFunction, asTopLevelFieldPath, asTopLevelFieldPaths, assertFirestoreUpdateHasData, assertStorageUploadOptionsStringFormat, assignDateCellRangeFunction, assignDateCellScheduleFunction, assignUnitedStatesAddressFunction, assignWebsiteFileLinkFunction, assignWebsiteLinkFunction, buildFirebaseCollectionTypeModelTypeMap, callModelFirebaseFunctionMapFactory, childFirestoreModelKey, childFirestoreModelKeyPath, childFirestoreModelKeys, clientFirebaseFirestoreContextFactory, clientFirebaseStorageContextFactory, contextGrantedModelRolesReader, contextGrantedModelRolesReaderDoesNotExistErrorMessage, contextGrantedModelRolesReaderPermissionErrorMessage, convertHttpsCallableErrorToReadableError, copyDocumentIdForUserRelatedModifierFunction, copyDocumentIdToFieldModifierFunction, copyUserRelatedDataAccessorFactoryFunction, copyUserRelatedDataModifierConfig, createNotificationDocument, createNotificationDocumentIfSending, createNotificationDocumentPair, createNotificationTemplate, dataFromDocumentSnapshots, dataFromSnapshotStream, developmentFirebaseFunctionMapFactory, directDataHttpsCallable, documentData, documentDataFunction, documentDataWithIdAndKey, documentReferenceFromDocument, documentReferencesFromDocuments, documentReferencesFromSnapshot, effectiveNotificationBoxRecipientConfig, effectiveNotificationBoxRecipientTemplateConfig, endAt, endAtValue, endBefore, extendFirestoreCollectionWithSingleDocumentAccessor, filterConstraintsOfType, filterDisallowedFirestoreItemPageIteratorInputConstraints, filterDisallowedFirestoreItemPageIteratorInputContraints, 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, firestoreCollectionQueryFactory, firestoreContextFactory, firestoreDate, firestoreDateCellRange, firestoreDateCellRangeArray, firestoreDateCellRangeAssignFn, firestoreDateCellSchedule, firestoreDateCellScheduleAssignFn, firestoreDencoderArray, firestoreDencoderMap, firestoreDencoderStringArray, firestoreDocumentAccessorContextExtension, firestoreDocumentAccessorFactory, firestoreDocumentLoader, firestoreDocumentSnapshotPairsLoader, firestoreDocumentSnapshotPairsLoaderInstance, firestoreDummyKey, firestoreEncodedArray, firestoreEncodedObjectMap, firestoreEnum, firestoreEnumArray, firestoreField, firestoreFieldConfigToModelMapFunctionsRef, firestoreIdBatchVerifierFactory, firestoreIdentityTypeArray, firestoreIdentityTypeArrayName, firestoreItemPageIteration, firestoreItemPageIterationFactory, firestoreLatLngString, firestoreMap, firestoreMapZoomLevel, firestoreModelId, firestoreModelIdArrayField, firestoreModelIdFromDocument, firestoreModelIdGrantedRoleArrayMap, firestoreModelIdGrantedRoleMap, firestoreModelIdString, firestoreModelIdentity, firestoreModelIdentityTypeMap, firestoreModelIdsFromDocuments, firestoreModelIdsFromKey, firestoreModelKey, firestoreModelKeyArrayField, firestoreModelKeyCollectionName, firestoreModelKeyCollectionType, firestoreModelKeyCollectionTypeArray, firestoreModelKeyCollectionTypeArrayName, firestoreModelKeyCollectionTypePair, firestoreModelKeyEncodedGrantedRoleMap, firestoreModelKeyFromDocument, firestoreModelKeyGrantedRoleArrayMap, firestoreModelKeyGrantedRoleMap, firestoreModelKeyPairObject, firestoreModelKeyParentKey, firestoreModelKeyParentKeyPartPairs, firestoreModelKeyPart, firestoreModelKeyPartPairs, firestoreModelKeyPartPairsKeyPath, firestoreModelKeyPartPairsPaths, firestoreModelKeyPath, firestoreModelKeyString, firestoreModelKeyTypePair, firestoreModelKeys, firestoreModelKeysFromDocuments, firestoreModelType, firestoreNotificationBoxRecipient, firestoreNotificationBoxRecipientTemplateConfigRecord, firestoreNotificationItem, firestoreNotificationRecipientWithConfig, firestoreNotificationUserDefaultNotificationBoxRecipientConfig, firestoreNotificationUserNotificationBoxRecipientConfig, firestoreNumber, firestoreObjectArray, firestorePassThroughField, firestoreQueryConstraint, firestoreQueryConstraintFactory, firestoreQueryDocumentSnapshotPairsLoader, firestoreQueryFactory, firestoreSingleDocumentAccessor, firestoreString, firestoreSubObject, firestoreTimezoneString, firestoreUID, firestoreUniqueArray, firestoreUniqueKeyedArray, firestoreUniqueNumberArray, firestoreUniqueStringArray, firestoreUnitedStatesAddress, firestoreUnitedStatesAddressAssignFn, firestoreUpdateWithNoDataError, firestoreWebsiteFileLink, firestoreWebsiteFileLinkAssignFn, firestoreWebsiteFileLinkEncodedArray, firestoreWebsiteFileLinkObjectArray, firestoreWebsiteLink, firestoreWebsiteLinkArray, firestoreWebsiteLinkAssignFn, flatFirestoreModelKey, getDataFromDocumentSnapshots, getDocumentSnapshotData, getDocumentSnapshotDataPair, getDocumentSnapshotDataPairs, getDocumentSnapshotDataPairsWithData, getDocumentSnapshotDataTuples, getDocumentSnapshotPair, getDocumentSnapshotPairs, getDocumentSnapshots, getDocumentSnapshotsData, grantFullAccessIfAdmin, grantFullAccessIfAuthUserRelated, grantModelRolesIfAdmin, grantModelRolesIfAdminFunction, grantModelRolesIfAuthUserRelatedModelFunction, grantModelRolesIfFunction, grantModelRolesIfHasAuthRolesFactory, grantModelRolesIfHasAuthRolesFunction, grantModelRolesOnlyIfFunction, inContextFirebaseModelServiceFactory, inContextFirebaseModelsServiceFactory, incrementUpdateWithAccessorFunction, inferKeyFromTwoWayFlatFirestoreModelKey, inferNotificationBoxRelatedModelKey, interceptAccessorFactoryFunction, isAdminInFirebaseModelContext, isClientFirebaseError, isCompleteNotificationSendState, isFirebaseStorageObjectNotFoundError, isFirestoreModelId, isFirestoreModelIdOrKey, isFirestoreModelKey, isOwnerOfUserRelatedModelInFirebaseModelContext, iterateFirestoreDocumentSnapshotBatches, iterateFirestoreDocumentSnapshotCheckpoints, iterateFirestoreDocumentSnapshotPairBatches, iterateFirestoreDocumentSnapshotPairs, iterateFirestoreDocumentSnapshots, iterationQueryDocChangeWatcher, iterationQueryDocChangeWatcherChangeTypeForGroup, latestDataFromDocuments, latestSnapshotsFromDocuments, lazyFirebaseFunctionsFactory, limit, limitToLast, limitedFirestoreDocumentAccessorFactory, loadAllFirestoreDocumentSnapshot, loadAllFirestoreDocumentSnapshotPairs, loadDocumentsForDocumentReferences, loadDocumentsForDocumentReferencesFromValues, loadDocumentsForIds, loadDocumentsForIdsFromValues, loadDocumentsForKeys, loadDocumentsForKeysFromValues, loadDocumentsForSnapshots, loadDocumentsForValues, loadNotificationBoxDocumentForReferencePair, makeDocuments, makeFirestoreCollection, makeFirestoreCollectionGroup, makeFirestoreCollectionWithParent, makeFirestoreItemPageIteratorDelegate, makeFirestoreQueryConstraintFunctionsDriver, makeRootSingleItemFirestoreCollection, makeSingleItemFirestoreCollection, mapDataFromSnapshot, mapHttpsCallable, mergeNotificationBoxRecipientTemplateConfigRecords, mergeNotificationBoxRecipientTemplateConfigs, mergeNotificationBoxRecipients, mergeNotificationSendMessagesResult, mergeNotificationUserDefaultNotificationBoxRecipientConfig, mergeNotificationUserNotificationBoxRecipientConfigs, modelStorageSlashPathFactory, modifyBeforeSetInterceptAccessorFactoryFunction, newDocuments, newNotificationBoxRecipientForUid, noContentNotificationMessageFunctionFactory, noStringFormatInStorageUploadOptionsError, notificationBoxCollectionReference, notificationBoxConverter, notificationBoxFirestoreCollection, notificationBoxIdForModel, notificationBoxIdentity, notificationBoxModelCrudFunctionsConfig, notificationBoxRecipientTemplateConfigArrayToRecord, notificationBoxRecipientTemplateConfigRecordToArray, notificationBoxesFlaggedForNeedsInitializationQuery, notificationBoxesFlaggedInvalidQuery, notificationCollectionReference, notificationCollectionReferenceFactory, notificationConverter, notificationFirestoreCollectionFactory, notificationFirestoreCollectionGroup, notificationFunctionMap, notificationFunctionTypeConfigMap, notificationIdentity, notificationMessageFunction, notificationSendFlagsImplyIsComplete, notificationSummariesFlaggedForNeedsInitializationQuery, notificationSummaryCollectionReference, notificationSummaryConverter, notificationSummaryFirestoreCollection, notificationSummaryIdForModel, notificationSummaryIdForUidFunctionForRootFirestoreModelIdentity, notificationSummaryIdentity, notificationTemplateTypeDetailsRecord, notificationTemplateTypeInfoRecord, notificationUserCollectionReference, notificationUserConverter, notificationUserFirestoreCollection, notificationUserIdentity, notificationUsersFlaggedForNeedsSyncQuery, notificationWeekCollectionReference, notificationWeekCollectionReferenceFactory, notificationWeekConverter, notificationWeekFirestoreCollectionFactory, notificationWeekFirestoreCollectionGroup, notificationWeekIdentity, notificationsPastSendAtTimeQuery, notificationsReadyForCleanupQuery, offset, onCallCreateModelParams, onCallCreateModelResult, onCallCreateModelResultWithDocs, onCallDeleteModelParams, onCallDevelopmentParams, onCallReadModelParams, onCallTypedModelParams, onCallTypedModelParamsFunction, onCallUpdateModelParams, optionalFirestoreArray, optionalFirestoreBoolean, optionalFirestoreDate, optionalFirestoreEnum, optionalFirestoreField, optionalFirestoreNumber, optionalFirestoreString, optionalFirestoreUID, optionalFirestoreUnitedStatesAddress, orderBy, orderByDocumentId, readFirestoreModelKey, readFirestoreModelKeyFromDocumentSnapshot, replaceConstraints, selectFromFirebaseModelsService, separateConstraints, setIdAndKeyFromKeyIdRefOnDocumentData, setIdAndKeyFromSnapshotOnDocumentData, shouldSaveNotificationToNotificationWeek, shouldSendCreatedNotificationInput, snapshotConverterFunctions, snapshotStreamDataForAccessor, snapshotStreamForAccessor, sortNotificationItemsFunction, startAfter, startAt, startAtValue, storageListFilesResultFactory, storageListFilesResultHasNoNextError, storagePathFactory, streamFromOnSnapshot, systemStateCollectionReference, systemStateConverter, systemStateFirestoreCollection, systemStateIdentity, twoWayFlatFirestoreModelKey, unreadNotificationItems, unsupportedFirestoreDriverFunctionError, updateNotificationBoxRecipientTemplateConfigRecord, updateNotificationRecipient, updateNotificationUserDefaultNotificationBoxRecipientConfig, updateNotificationUserNotificationBoxRecipientConfigIfChanged, updateNotificationUserNotificationBoxRecipientConfigs, updateWithAccessorUpdateAndConverterFunction, useContextAuth, useContextAuthUid, useDocumentSnapshot, useDocumentSnapshotData, useFirebaseModelsService, where, whereDateIsAfter, whereDateIsAfterWithSort, whereDateIsBefore, whereDateIsBeforeWithSort, whereDateIsBetween, whereDateIsInRange, whereDateIsOnOrAfter, whereDateIsOnOrAfterWithSort, whereDateIsOnOrBefore, whereDateIsOnOrBeforeWithSort, whereDocumentId, whereStringHasRootIdentityModelKey, whereStringValueHasPrefix };
9809
+ export { AbstractFirestoreDocument, AbstractFirestoreDocumentDataAccessorWrapper, AbstractFirestoreDocumentWithParent, AbstractSubscribeOrUnsubscribeToNotificationBoxParams, AbstractSubscribeToNotificationBoxParams, AppNotificationTemplateTypeInfoRecordService, BASE_MODEL_STORAGE_FILE_PATH, CALL_MODEL_APP_FUNCTION_KEY, COPY_USER_RELATED_DATA_ACCESSOR_FACTORY_FUNCTION, CREATE_NOTIFICATION_ID_REQUIRED_ERROR_CODE, CleanupSentNotificationsParams, ContextGrantedModelRolesReaderInstance, CreateNotificationBoxParams, CreateNotificationSummaryParams, CreateNotificationUserParams, 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_UNITED_STATES_ADDRESS_VALUE, DEFAULT_FIRESTORE_WEBSITE_FILE_LINK_VALUE, DEFAULT_ITERATE_FIRESTORE_DOCUMENT_SNAPSHOT_BATCHES_BATCH_SIZE, DEFAULT_NOTIFICATION_TEMPLATE_TYPE, DEFAULT_QUERY_CHANGE_WATCHER_DELAY, DEFAULT_SINGLE_ITEM_FIRESTORE_COLLECTION_DOCUMENT_IDENTIFIER, DEFAULT_WEBSITE_LINK, FIREBASE_AUTH_NETWORK_REQUEST_ERROR, FIREBASE_AUTH_NETWORK_REQUEST_FAILED, FIREBASE_AUTH_PASSWORD_MAX_LENGTH, FIREBASE_AUTH_PASSWORD_MIN_LENGTH, FIREBASE_AUTH_USER_NOT_FOUND_ERROR, FIREBASE_AUTH_WRONG_PASSWORD, FIREBASE_DEVELOPMENT_FUNCTIONS_MAP_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_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, FirebaseDevelopmentFunctions, FirebaseModelPermissionServiceInstance, FirebaseServerError, FirestoreAccessorStreamMode, FirestoreDocumentContextType, InferredTargetModelIdParams, InferredTargetModelParams, InitializeAllApplicableNotificationBoxesParams, InitializeAllApplicableNotificationSummariesParams, InitializeNotificationModelParams, IsFirestoreModelId, IsFirestoreModelIdOrKey, IsFirestoreModelKey, MAX_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MIN_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER_DEFAULT, MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER_SPLITTER, MODEL_STORAGE_FILE_SLASH_PATH_FACTORY, ModifyBeforeSetFirestoreDocumentDataAccessorWrapper, NOTIFICATION_BOX_DOES_NOT_EXIST_ERROR_CODE, NOTIFICATION_BOX_EXISTS_FOR_MODEL_ERROR_CODE, NOTIFICATION_BOX_RECIPIENT_DOES_NOT_EXIST_ERROR_CODE, 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_USER_BLOCKED_FROM_BEING_ADD_TO_RECIPIENTS_ERROR_CODE, NOTIFICATION_USER_INVALID_UID_FOR_CREATE_ERROR_CODE, NOTIFICATION_USER_LOCKED_CONFIG_FROM_BEING_UPDATED_ERROR_CODE, NOTIFICATION_WEEK_NOTIFICATION_ITEM_LIMIT, NotificationBoxDocument, NotificationBoxRecipientFlag, NotificationBoxRecipientTemplateConfigArrayEntryParam, NotificationBoxRecipientTemplateConfigBoolean, NotificationDocument, NotificationFirestoreCollections, NotificationFunctions, NotificationMessageFlag, NotificationRecipientParams, NotificationRecipientSendFlag, NotificationSendState, NotificationSendType, NotificationSummaryDocument, NotificationUserDocument, NotificationWeekDocument, RUN_DEV_FUNCTION_APP_FUNCTION_KEY, ResyncAllNotificationUserParams, ResyncNotificationUserParams, SCHEDULED_FUNCTION_DEV_FUNCTION_SPECIFIER, ScheduledFunctionDevelopmentFirebaseFunctionListEntry, ScheduledFunctionDevelopmentFirebaseFunctionParams, ScheduledFunctionDevelopmentFunctionTypeEnum, SendNotificationParams, SendQueuedNotificationsParams, SystemStateDocument, SystemStateFirestoreCollections, TargetModelIdParams, TargetModelParams, UpdateNotificationBoxParams, UpdateNotificationBoxRecipientLikeParams, UpdateNotificationBoxRecipientParams, UpdateNotificationSummaryParams, UpdateNotificationUserDefaultNotificationBoxRecipientConfigParams, UpdateNotificationUserNotificationBoxRecipientParams, UpdateNotificationUserParams, addConstraintToBuilder, addOrReplaceLimitInConstraints, allChildDocumentsUnderParent, allChildDocumentsUnderParentPath, allChildDocumentsUnderRelativePath, allowDocumentSnapshotWithPathOnceFilter, allowedNotificationRecipients, appNotificationTemplateTypeInfoRecordService, arrayUpdateWithAccessorFunction, asTopLevelFieldPath, asTopLevelFieldPaths, assertFirestoreUpdateHasData, assertStorageUploadOptionsStringFormat, assignDateCellRangeFunction, assignDateCellScheduleFunction, assignUnitedStatesAddressFunction, assignWebsiteFileLinkFunction, assignWebsiteLinkFunction, buildFirebaseCollectionTypeModelTypeMap, callModelFirebaseFunctionMapFactory, childFirestoreModelKey, childFirestoreModelKeyPath, childFirestoreModelKeys, clientFirebaseFirestoreContextFactory, clientFirebaseStorageContextFactory, contextGrantedModelRolesReader, contextGrantedModelRolesReaderDoesNotExistErrorMessage, contextGrantedModelRolesReaderPermissionErrorMessage, convertHttpsCallableErrorToReadableError, copyDocumentIdForUserRelatedModifierFunction, copyDocumentIdToFieldModifierFunction, copyUserRelatedDataAccessorFactoryFunction, copyUserRelatedDataModifierConfig, createNotificationDocument, createNotificationDocumentIfSending, createNotificationDocumentPair, createNotificationTaskTemplate, createNotificationTemplate, dataFromDocumentSnapshots, dataFromSnapshotStream, delayCompletion, developmentFirebaseFunctionMapFactory, directDataHttpsCallable, documentData, documentDataFunction, documentDataWithIdAndKey, documentReferenceFromDocument, documentReferencesFromDocuments, documentReferencesFromSnapshot, effectiveNotificationBoxRecipientConfig, effectiveNotificationBoxRecipientTemplateConfig, endAt, endAtValue, endBefore, extendFirestoreCollectionWithSingleDocumentAccessor, filterConstraintsOfType, filterDisallowedFirestoreItemPageIteratorInputConstraints, filterDisallowedFirestoreItemPageIteratorInputContraints, 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, firestoreCollectionQueryFactory, firestoreContextFactory, firestoreDate, firestoreDateCellRange, firestoreDateCellRangeArray, firestoreDateCellRangeAssignFn, firestoreDateCellSchedule, firestoreDateCellScheduleAssignFn, firestoreDencoderArray, firestoreDencoderMap, firestoreDencoderStringArray, firestoreDocumentAccessorContextExtension, firestoreDocumentAccessorFactory, firestoreDocumentLoader, firestoreDocumentSnapshotPairsLoader, firestoreDocumentSnapshotPairsLoaderInstance, firestoreDummyKey, firestoreEncodedArray, firestoreEncodedObjectMap, firestoreEnum, firestoreEnumArray, firestoreField, firestoreFieldConfigToModelMapFunctionsRef, firestoreIdBatchVerifierFactory, firestoreIdentityTypeArray, firestoreIdentityTypeArrayName, firestoreItemPageIteration, firestoreItemPageIterationFactory, firestoreLatLngString, firestoreMap, firestoreMapZoomLevel, firestoreModelId, firestoreModelIdArrayField, firestoreModelIdFromDocument, firestoreModelIdGrantedRoleArrayMap, firestoreModelIdGrantedRoleMap, firestoreModelIdString, firestoreModelIdentity, firestoreModelIdentityTypeMap, firestoreModelIdsFromDocuments, firestoreModelIdsFromKey, firestoreModelKey, firestoreModelKeyArrayField, firestoreModelKeyCollectionName, firestoreModelKeyCollectionType, firestoreModelKeyCollectionTypeArray, firestoreModelKeyCollectionTypeArrayName, firestoreModelKeyCollectionTypePair, firestoreModelKeyEncodedGrantedRoleMap, firestoreModelKeyFromDocument, firestoreModelKeyGrantedRoleArrayMap, firestoreModelKeyGrantedRoleMap, firestoreModelKeyPairObject, firestoreModelKeyParentKey, firestoreModelKeyParentKeyPartPairs, firestoreModelKeyPart, firestoreModelKeyPartPairs, firestoreModelKeyPartPairsKeyPath, firestoreModelKeyPartPairsPaths, firestoreModelKeyPath, firestoreModelKeyString, firestoreModelKeyTypePair, firestoreModelKeys, firestoreModelKeysFromDocuments, firestoreModelType, firestoreNotificationBoxRecipient, firestoreNotificationBoxRecipientTemplateConfigRecord, firestoreNotificationItem, firestoreNotificationRecipientWithConfig, firestoreNotificationUserDefaultNotificationBoxRecipientConfig, firestoreNotificationUserNotificationBoxRecipientConfig, firestoreNumber, firestoreObjectArray, firestorePassThroughField, firestoreQueryConstraint, firestoreQueryConstraintFactory, firestoreQueryDocumentSnapshotPairsLoader, firestoreQueryFactory, firestoreSingleDocumentAccessor, firestoreString, firestoreSubObject, firestoreTimezoneString, firestoreUID, firestoreUniqueArray, firestoreUniqueKeyedArray, firestoreUniqueNumberArray, firestoreUniqueStringArray, firestoreUnitedStatesAddress, firestoreUnitedStatesAddressAssignFn, firestoreUpdateWithNoDataError, firestoreWebsiteFileLink, firestoreWebsiteFileLinkAssignFn, firestoreWebsiteFileLinkEncodedArray, firestoreWebsiteFileLinkObjectArray, firestoreWebsiteLink, firestoreWebsiteLinkArray, firestoreWebsiteLinkAssignFn, flatFirestoreModelKey, getDataFromDocumentSnapshots, getDocumentSnapshotData, getDocumentSnapshotDataPair, getDocumentSnapshotDataPairs, getDocumentSnapshotDataPairsWithData, getDocumentSnapshotDataTuples, getDocumentSnapshotPair, getDocumentSnapshotPairs, getDocumentSnapshots, getDocumentSnapshotsData, grantFullAccessIfAdmin, grantFullAccessIfAuthUserRelated, grantModelRolesIfAdmin, grantModelRolesIfAdminFunction, grantModelRolesIfAuthUserRelatedModelFunction, grantModelRolesIfFunction, grantModelRolesIfHasAuthRolesFactory, grantModelRolesIfHasAuthRolesFunction, grantModelRolesOnlyIfFunction, inContextFirebaseModelServiceFactory, inContextFirebaseModelsServiceFactory, incrementUpdateWithAccessorFunction, inferKeyFromTwoWayFlatFirestoreModelKey, inferNotificationBoxRelatedModelKey, interceptAccessorFactoryFunction, isAdminInFirebaseModelContext, isClientFirebaseError, isCompleteNotificationSendState, isFirebaseStorageObjectNotFoundError, isFirestoreModelId, isFirestoreModelIdOrKey, isFirestoreModelKey, isOwnerOfUserRelatedModelInFirebaseModelContext, iterateFirestoreDocumentSnapshotBatches, iterateFirestoreDocumentSnapshotCheckpoints, iterateFirestoreDocumentSnapshotPairBatches, iterateFirestoreDocumentSnapshotPairs, iterateFirestoreDocumentSnapshots, iterationQueryDocChangeWatcher, iterationQueryDocChangeWatcherChangeTypeForGroup, latestDataFromDocuments, latestSnapshotsFromDocuments, lazyFirebaseFunctionsFactory, limit, limitToLast, limitedFirestoreDocumentAccessorFactory, loadAllFirestoreDocumentSnapshot, loadAllFirestoreDocumentSnapshotPairs, loadDocumentsForDocumentReferences, loadDocumentsForDocumentReferencesFromValues, loadDocumentsForIds, loadDocumentsForIdsFromValues, loadDocumentsForKeys, loadDocumentsForKeysFromValues, loadDocumentsForSnapshots, loadDocumentsForValues, loadNotificationBoxDocumentForReferencePair, makeDocuments, makeFirestoreCollection, makeFirestoreCollectionGroup, makeFirestoreCollectionWithParent, makeFirestoreItemPageIteratorDelegate, makeFirestoreQueryConstraintFunctionsDriver, makeRootSingleItemFirestoreCollection, makeSingleItemFirestoreCollection, mapDataFromSnapshot, mapHttpsCallable, mergeNotificationBoxRecipientTemplateConfigRecords, mergeNotificationBoxRecipientTemplateConfigs, mergeNotificationBoxRecipients, mergeNotificationSendMessagesResult, mergeNotificationUserDefaultNotificationBoxRecipientConfig, mergeNotificationUserNotificationBoxRecipientConfigs, modelStorageSlashPathFactory, modifyBeforeSetInterceptAccessorFactoryFunction, newDocuments, newNotificationBoxRecipientForUid, noContentNotificationMessageFunctionFactory, noStringFormatInStorageUploadOptionsError, notificationBoxCollectionReference, notificationBoxConverter, notificationBoxFirestoreCollection, notificationBoxIdForModel, notificationBoxIdentity, notificationBoxModelCrudFunctionsConfig, notificationBoxRecipientTemplateConfigArrayToRecord, notificationBoxRecipientTemplateConfigRecordToArray, notificationBoxesFlaggedForNeedsInitializationQuery, notificationBoxesFlaggedInvalidQuery, notificationCollectionReference, notificationCollectionReferenceFactory, notificationConverter, notificationFirestoreCollectionFactory, notificationFirestoreCollectionGroup, notificationFunctionMap, notificationFunctionTypeConfigMap, notificationIdentity, notificationMessageFunction, notificationSendFlagsImplyIsComplete, notificationSummariesFlaggedForNeedsInitializationQuery, notificationSummaryCollectionReference, notificationSummaryConverter, notificationSummaryFirestoreCollection, notificationSummaryIdForModel, notificationSummaryIdForUidFunctionForRootFirestoreModelIdentity, notificationSummaryIdentity, notificationTaskUniqueId, notificationTemplateTypeDetailsRecord, notificationTemplateTypeInfoRecord, notificationUserCollectionReference, notificationUserConverter, notificationUserFirestoreCollection, notificationUserIdentity, notificationUsersFlaggedForNeedsSyncQuery, notificationWeekCollectionReference, notificationWeekCollectionReferenceFactory, notificationWeekConverter, notificationWeekFirestoreCollectionFactory, notificationWeekFirestoreCollectionGroup, notificationWeekIdentity, notificationsPastSendAtTimeQuery, notificationsReadyForCleanupQuery, offset, onCallCreateModelParams, onCallCreateModelResult, onCallCreateModelResultWithDocs, onCallDeleteModelParams, onCallDevelopmentParams, onCallReadModelParams, onCallTypedModelParams, onCallTypedModelParamsFunction, onCallUpdateModelParams, optionalFirestoreArray, optionalFirestoreBoolean, optionalFirestoreDate, optionalFirestoreEnum, optionalFirestoreField, optionalFirestoreNumber, optionalFirestoreString, optionalFirestoreUID, optionalFirestoreUnitedStatesAddress, orderBy, orderByDocumentId, readFirestoreModelKey, readFirestoreModelKeyFromDocumentSnapshot, replaceConstraints, selectFromFirebaseModelsService, separateConstraints, setIdAndKeyFromKeyIdRefOnDocumentData, setIdAndKeyFromSnapshotOnDocumentData, shouldSaveNotificationToNotificationWeek, shouldSendCreatedNotificationInput, snapshotConverterFunctions, snapshotStreamDataForAccessor, snapshotStreamForAccessor, sortNotificationItemsFunction, startAfter, startAt, startAtValue, storageListFilesResultFactory, storageListFilesResultHasNoNextError, storagePathFactory, streamFromOnSnapshot, systemStateCollectionReference, systemStateConverter, systemStateFirestoreCollection, systemStateIdentity, twoWayFlatFirestoreModelKey, unreadNotificationItems, unsupportedFirestoreDriverFunctionError, updateNotificationBoxRecipientTemplateConfigRecord, updateNotificationRecipient, updateNotificationUserDefaultNotificationBoxRecipientConfig, updateNotificationUserNotificationBoxRecipientConfigIfChanged, updateNotificationUserNotificationBoxRecipientConfigs, updateWithAccessorUpdateAndConverterFunction, useContextAuth, useContextAuthUid, useDocumentSnapshot, useDocumentSnapshotData, useFirebaseModelsService, 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": "12.2.1",
3
+ "version": "12.3.1",
4
4
  "exports": {
5
5
  ".": {
6
6
  "types": "./src/index.d.ts",
@@ -5,10 +5,12 @@ export * from './notification.api.util';
5
5
  export * from './notification.action';
6
6
  export * from './notification.config';
7
7
  export * from './notification.create';
8
+ export * from './notification.create.task';
8
9
  export * from './notification.details';
9
10
  export * from './notification.item';
10
11
  export * from './notification.id';
11
12
  export * from './notification.message';
12
13
  export * from './notification.query';
13
14
  export * from './notification.send';
15
+ export * from './notification.task';
14
16
  export * from './notification.util';
@@ -5,6 +5,7 @@ import { type NotificationTypes } from './notification';
5
5
  import { type NotificationUserDefaultNotificationBoxRecipientConfig, type NotificationBoxRecipientTemplateConfigArrayEntry, NotificationBoxRecipientFlag } from './notification.config';
6
6
  import { type NotificationBoxId, type NotificationSummaryId, type NotificationTemplateType } from './notification.id';
7
7
  import { type NotificationSendEmailMessagesResult, type NotificationSendTextMessagesResult, type NotificationSendNotificationSummaryMessagesResult } from './notification.send';
8
+ import { NotificationTaskServiceTaskHandlerCompletionType } from './notification.task';
8
9
  export declare const NOTIFICATION_RECIPIENT_NAME_MIN_LENGTH = 0;
9
10
  export declare const NOTIFICATION_RECIPIENT_NAME_MAX_LENGTH = 42;
10
11
  export declare const NOTIFICATION_SUBJECT_MIN_LENGTH = 2;
@@ -266,6 +267,10 @@ export interface SendNotificationResult {
266
267
  * Whether or not the notification was of a known type.
267
268
  */
268
269
  readonly isKnownTemplateType: Maybe<boolean>;
270
+ /**
271
+ * Whether or not the notification was of a task type.
272
+ */
273
+ readonly isNotificationTask: boolean;
269
274
  /**
270
275
  * Whether or not the notification was of a configured type.
271
276
  */
@@ -280,6 +285,10 @@ export interface SendNotificationResult {
280
285
  * In cases where the Notification is set to SEND_IF_BOX_EXISTS and the box does not exist, this will return true.
281
286
  */
282
287
  readonly success: boolean;
288
+ /**
289
+ * Completion type for the notification task, if applicable.
290
+ */
291
+ readonly notificationTaskCompletionType?: Maybe<NotificationTaskServiceTaskHandlerCompletionType>;
283
292
  /**
284
293
  * Whether or not the notification was marked as done.
285
294
  *
@@ -297,29 +306,38 @@ export interface SendNotificationResult {
297
306
  /**
298
307
  * Whether or not the notification was deleted.
299
308
  *
300
- * This typically only occurs when SEND_IF_BOX_EXISTS is set and the box does not exist.
309
+ * This typically only occurs when SEND_IF_BOX_EXISTS is set and the box does not exist, or the notification has reached the maximum number of send attempts.
301
310
  */
302
311
  readonly deletedNotification: boolean;
312
+ /**
313
+ * Whether or not the notification exists.
314
+ */
303
315
  readonly exists: boolean;
316
+ /**
317
+ * Whether or not the NotificationBox exists.
318
+ */
304
319
  readonly boxExists: boolean;
320
+ /**
321
+ * Whether or not the run was tried.
322
+ */
305
323
  readonly tryRun: boolean;
306
324
  /**
307
325
  * Send emails result.
308
326
  *
309
- * Undefined if not attempted.
327
+ * Undefined if not attempted or a task notification.
310
328
  */
311
329
  readonly sendEmailsResult: Maybe<NotificationSendEmailMessagesResult>;
312
330
  /**
313
331
  *
314
332
  * Send texts result.
315
333
  *
316
- * Undefined if not attempted.
334
+ * Undefined if not attempted or a task notification.
317
335
  */
318
336
  readonly sendTextsResult: Maybe<NotificationSendTextMessagesResult>;
319
337
  /**
320
338
  * Send notification summaries result.
321
339
  *
322
- * Undefined if not attempted.
340
+ * Undefined if not attempted or a task notification.
323
341
  */
324
342
  readonly sendNotificationSummaryResult: Maybe<NotificationSendNotificationSummaryMessagesResult>;
325
343
  /**
@@ -336,9 +354,10 @@ export interface SendNotificationResult {
336
354
  */
337
355
  export declare class SendQueuedNotificationsParams {
338
356
  }
339
- export interface SendQueuedNotificationsResult extends Omit<SendNotificationResult, 'throttled' | 'isConfiguredTemplateType' | 'isKnownTemplateType' | 'notificationTemplateType' | 'notificationMarkedDone' | 'deletedNotification' | 'createdBox' | 'success' | 'exists' | 'boxExists' | 'notificationBoxNeedsInitialization' | 'tryRun' | 'loadMessageFunctionFailure' | 'buildMessageFailure'> {
357
+ export interface SendQueuedNotificationsResult extends Omit<SendNotificationResult, 'throttled' | 'isNotificationTask' | 'isConfiguredTemplateType' | 'isKnownTemplateType' | 'notificationTemplateType' | 'notificationMarkedDone' | 'deletedNotification' | 'createdBox' | 'success' | 'exists' | 'boxExists' | 'notificationBoxNeedsInitialization' | 'tryRun' | 'loadMessageFunctionFailure' | 'buildMessageFailure'> {
340
358
  readonly notificationBoxesCreated: number;
341
359
  readonly notificationsVisited: number;
360
+ readonly notificationTasksVisited: number;
342
361
  readonly notificationsSucceeded: number;
343
362
  readonly notificationsDelayed: number;
344
363
  readonly notificationsFailed: number;
@@ -354,6 +373,7 @@ export interface CleanupSentNotificationsResult {
354
373
  * Number of total updates. May include the same notification box more than once.
355
374
  */
356
375
  readonly notificationBoxesUpdatesCount: number;
376
+ readonly notificationTasksDeletedCount: number;
357
377
  readonly notificationsDeleted: number;
358
378
  readonly notificationWeeksCreated: number;
359
379
  readonly notificationWeeksUpdated: number;
@@ -1,7 +1,7 @@
1
1
  import { type Maybe, type Milliseconds, type ModelKey } from '@dereekb/util';
2
2
  import { type Notification, type NotificationDocument, type NotificationFirestoreCollections, NotificationSendType } from './notification';
3
3
  import { type NotificationRecipientWithConfig } from './notification.config';
4
- import { type NotificationTemplateType } from './notification.id';
4
+ import { NotificationTaskType, NotificationTaskUniqueId, type NotificationTemplateType } from './notification.id';
5
5
  import { type FirebaseAuthUserId, type FirestoreDocumentAccessor, type ReadFirestoreModelKeyInput, type Transaction } from '../../common';
6
6
  import { type NotificationItem } from './notification.item';
7
7
  /**
@@ -11,7 +11,7 @@ export interface CreateNotificationTemplateItem extends Omit<NotificationItem, '
11
11
  /**
12
12
  * Custom created at date for the item.
13
13
  */
14
- cat?: Maybe<Date>;
14
+ readonly cat?: Maybe<Date>;
15
15
  }
16
16
  /**
17
17
  * Template use for creating a new Notification
@@ -20,11 +20,29 @@ export interface CreateNotificationTemplate extends Partial<Omit<Notification, '
20
20
  /**
21
21
  * Model key of the NotificationBox's target model (not the NotificationBox's key)
22
22
  */
23
- notificationModel: ModelKey;
23
+ readonly notificationModel: ModelKey;
24
24
  /**
25
25
  * Item template
26
26
  */
27
- n: CreateNotificationTemplateItem;
27
+ readonly n: CreateNotificationTemplateItem;
28
+ /**
29
+ * Whether or not this notification task is "unique".
30
+ *
31
+ * If true, the notification task will be created using a unique key based on the target model's id and the task type.
32
+ *
33
+ * If a string, the notification task will be created with the provided unique key.
34
+ *
35
+ * Only used for Notification Tasks.
36
+ */
37
+ readonly unique?: boolean | NotificationTaskUniqueId;
38
+ /**
39
+ * Whether or not to override an existing task with the same unique key when creating.
40
+ *
41
+ * Defaults to true.
42
+ *
43
+ * Only used for Notification Tasks.
44
+ */
45
+ readonly overrideExistingTask?: boolean;
28
46
  }
29
47
  export interface CreateNotificationTemplateInput extends Partial<Omit<CreateNotificationTemplate, 'notificationModel'>>, Partial<Omit<CreateNotificationTemplateItem, 't'>> {
30
48
  /**
@@ -34,7 +52,7 @@ export interface CreateNotificationTemplateInput extends Partial<Omit<CreateNoti
34
52
  /**
35
53
  * Template type
36
54
  */
37
- readonly type: NotificationTemplateType;
55
+ readonly type: NotificationTemplateType | NotificationTaskType;
38
56
  /**
39
57
  * Overrides st
40
58
  */
@@ -108,13 +126,17 @@ export interface CreateNotificationDocumentPairInput extends ShouldSendCreatedNo
108
126
  */
109
127
  readonly accessor?: FirestoreDocumentAccessor<Notification, NotificationDocument>;
110
128
  }
111
- export interface CreateNotificationDocumentPairResult {
129
+ export interface CreateNotificationDocumentPairResult extends Pick<CreateNotificationTemplate, 'overrideExistingTask'> {
112
130
  readonly notificationDocument: NotificationDocument;
113
131
  readonly notification: Notification;
114
132
  /**
115
133
  * Whether or not the notification was created.
116
134
  */
117
135
  readonly notificationCreated: boolean;
136
+ /**
137
+ * Whether or not the notification is considered a task notification.
138
+ */
139
+ readonly isNotificationTask: boolean;
118
140
  }
119
141
  /**
120
142
  * Creates a CreateNotificationDocumentPairResult from the input.
@@ -0,0 +1,22 @@
1
+ import { Maybe } from '@dereekb/util';
2
+ import { NotificationTaskCheckpointString } from './notification';
3
+ import { CreateNotificationTemplate, CreateNotificationTemplateInput } from './notification.create';
4
+ /**
5
+ * Template use for creating a new Notification task.
6
+ */
7
+ export type CreateNotificationTaskTemplate = CreateNotificationTemplate;
8
+ export interface CreateNotificationTaskTemplateInput extends Omit<CreateNotificationTemplateInput, 'st' | 'recipients' | 'r' | 'rf' | 'sendType' | 'st'> {
9
+ /**
10
+ * Corresponds with the tpr field in the Notification.
11
+ *
12
+ * Provide this if some checkpoints have already been completed.
13
+ */
14
+ readonly completedCheckpoints?: Maybe<NotificationTaskCheckpointString[]>;
15
+ }
16
+ /**
17
+ * Creates a notification template for a Notification with the task type.
18
+ *
19
+ * @param input
20
+ * @returns
21
+ */
22
+ export declare function createNotificationTaskTemplate(input: CreateNotificationTaskTemplateInput): CreateNotificationTaskTemplate;
@@ -223,7 +223,13 @@ export declare enum NotificationSendType {
223
223
  /**
224
224
  * Sends the notification even if the NotificationBox does not exist.
225
225
  */
226
- SEND_WITHOUT_CREATING_BOX = 2
226
+ SEND_WITHOUT_CREATING_BOX = 2,
227
+ /**
228
+ * A task notification.
229
+ *
230
+ * This is used with Task-type notifications.
231
+ */
232
+ TASK_NOTIFICATION = 3
227
233
  }
228
234
  export declare enum NotificationSendState {
229
235
  /**
@@ -235,7 +241,7 @@ export declare enum NotificationSendState {
235
241
  */
236
242
  QUEUED = 0,
237
243
  /**
238
- * Notification has been sent. Will still show as sent even if there were no messages/recipients to send for this medium.
244
+ * Notification has been sent/complete. Will still show as sent even if there were no messages/recipients to send for this medium.
239
245
  */
240
246
  SENT = 1,
241
247
  /**
@@ -263,16 +269,9 @@ export declare enum NotificationSendState {
263
269
  */
264
270
  CONFIG_ERROR = 7
265
271
  }
266
- export declare enum NotificationType {
267
- /**
268
- * Normal notification that is sent to everyone that is configured for the notification box.
269
- */
270
- NORMAL = 0,
271
- /**
272
- * Notification that goes to only the configured users.
273
- */
274
- AD_HOC = 1
275
- }
272
+ /**
273
+ * Notification recipient send flags.
274
+ */
276
275
  export declare enum NotificationRecipientSendFlag {
277
276
  /**
278
277
  * Will send to all recipients.
@@ -317,6 +316,10 @@ export interface NotificationSendFlags {
317
316
  */
318
317
  rf?: Maybe<NotificationRecipientSendFlag>;
319
318
  }
319
+ /**
320
+ * Arbitrary unique string that denotes checkpoint progress for a multi-step task.
321
+ */
322
+ export type NotificationTaskCheckpointString = string;
320
323
  /**
321
324
  * Contains information about which recipients were already sent their messages, etc.
322
325
  */
@@ -329,6 +332,12 @@ export interface NotificationSendCheckpoints {
329
332
  * Set of emails that the notification was set to via email.
330
333
  */
331
334
  esr: EmailAddress[];
335
+ /**
336
+ * Set of checkpoint strings that denote checkpoint progress for a task.
337
+ *
338
+ * Used for multi-step tasks.
339
+ */
340
+ tpr: NotificationTaskCheckpointString[];
332
341
  }
333
342
  export interface Notification extends NotificationSendFlags, NotificationSendCheckpoints {
334
343
  /**
@@ -373,10 +382,16 @@ export interface Notification extends NotificationSendFlags, NotificationSendChe
373
382
  sat: Date;
374
383
  /**
375
384
  * Sending attempts count.
385
+ *
386
+ * Only incremented when sending encounters an issue/error.
376
387
  */
377
388
  a: number;
378
389
  /**
379
- * Notification has been delivered or should be archived. This is now safe to sync to the NotificationWeek and then delete this.
390
+ * Notification has been delivered or should be archived.
391
+ *
392
+ * This is now safe to sync to the NotificationWeek (not applicable for task-type notifications) and then delete this.
393
+ *
394
+ * For Task-type notifications, this is always set to false, as when the task is completed it is deleted.
380
395
  */
381
396
  d: boolean;
382
397
  }
@@ -1,5 +1,5 @@
1
1
  import { type FactoryWithRequiredInput } from '@dereekb/util';
2
- import { type FirestoreModelId, type FirestoreModelKey, type FlatFirestoreModelKey, twoWayFlatFirestoreModelKey, inferKeyFromTwoWayFlatFirestoreModelKey, type FirebaseAuthUserId, type RootFirestoreModelIdentity } from '../../common';
2
+ import { type FirestoreModelId, type FirestoreModelKey, type FlatFirestoreModelKey, twoWayFlatFirestoreModelKey, inferKeyFromTwoWayFlatFirestoreModelKey, type FirebaseAuthUserId, type RootFirestoreModelIdentity, FirestoreModelIdInput } from '../../common';
3
3
  /**
4
4
  * The NotificationBox's id is the two way flat firestore model key of the object that it represents.
5
5
  */
@@ -44,6 +44,30 @@ export declare const DEFAULT_NOTIFICATION_TEMPLATE_TYPE = "D";
44
44
  *
45
45
  * Types are generally intended to be handled case-insensitively by notification services.
46
46
  *
47
- * Ideally type type values are shorter to reduce database size impact.
47
+ * Ideally type values are shorter to reduce database size impact.
48
48
  */
49
49
  export type NotificationTemplateType = string;
50
+ /**
51
+ * Task type identifier of the notification, which is used to pass this task to the appropriate handler.
52
+ *
53
+ * Ideally type values are shorter to reduce database size impact.
54
+ */
55
+ export type NotificationTaskType = string;
56
+ /**
57
+ * Unique key for a notification task.
58
+ *
59
+ * Used as the notification task's id, so it must follow Firestore model id rules.
60
+ *
61
+ * Using a unique key for a notification task ensures that only one of this type of task can exist at a single time.
62
+ *
63
+ * If a unique key is reused, the new task will replace the old task.
64
+ */
65
+ export type NotificationTaskUniqueId = FirestoreModelId;
66
+ /**
67
+ * Creates a NotificationTaskUniqueId from the input model id and task type.
68
+ *
69
+ * @param input model id input
70
+ * @param taskType task type
71
+ * @returns NotificationTaskUniqueId
72
+ */
73
+ export declare function notificationTaskUniqueId(input: FirestoreModelIdInput, taskType: NotificationTaskType): NotificationTaskUniqueId;
@@ -1,6 +1,6 @@
1
1
  import { type Maybe } from '@dereekb/util';
2
2
  import { type FirebaseAuthUserId, type FirestoreModelKey, type SavedToFirestoreIfTrue } from '../../common';
3
- import { type NotificationId, type NotificationTemplateType } from './notification.id';
3
+ import { NotificationTaskType, type NotificationId, type NotificationTemplateType } from './notification.id';
4
4
  /**
5
5
  * Arbitrary metadata for a job. Derived/managed by the concrete job type.
6
6
  */
@@ -26,9 +26,9 @@ export interface NotificationItem<D extends NotificationItemMetadata = {}> {
26
26
  */
27
27
  cat: Date;
28
28
  /**
29
- * Notification template type.
29
+ * Notification task/template type.
30
30
  */
31
- t: NotificationTemplateType;
31
+ t: NotificationTemplateType | NotificationTaskType;
32
32
  /**
33
33
  * User who created this notification, if applicable.
34
34
  */
@@ -0,0 +1,58 @@
1
+ import { NotificationItem, NotificationItemMetadata } from './notification.item';
2
+ import { NotificationTaskType } from './notification.id';
3
+ import { NotificationTaskCheckpointString } from './notification';
4
+ import { ArrayOrValue, Maybe, Milliseconds } from '@dereekb/util';
5
+ /**
6
+ * A NotificationTask is the final result of the expanded notification with a task type.
7
+ */
8
+ export interface NotificationTask<D extends NotificationItemMetadata = {}> {
9
+ /**
10
+ * Task type identifier of the notification, which is used to pass this task to the appropriate handler.
11
+ *
12
+ * Ideally type values are shorter to reduce database size impact.
13
+ */
14
+ readonly taskType: NotificationTaskType;
15
+ /**
16
+ * Notification item
17
+ */
18
+ readonly item: NotificationItem<D>;
19
+ /**
20
+ * Notification item data, if applicable.
21
+ */
22
+ readonly data?: Maybe<D>;
23
+ /**
24
+ * Current checkpoints for the notification task.
25
+ */
26
+ readonly checkpoints: NotificationTaskCheckpointString[];
27
+ }
28
+ /**
29
+ * Returns an empty array, which is used to signal that the task did not fail but has not complete the current checkpoint.
30
+ */
31
+ export declare function delayCompletion(): NotificationTaskServiceTaskHandlerCompletionType;
32
+ /**
33
+ * Result of a NotificationTaskServiceTaskHandler.handleNotificationTask() call.
34
+ *
35
+ * true: The task was completed successfully and can now be discarded.
36
+ * false: The task was not completed successfully and should be retried again in the future. Note there are a maximum number of retry attempts before the task is deleted. Use delayCompletion() to avoid increasing the attempt count.
37
+ * NotificationTaskCheckpointString(s): The task has successfully completed this/these particular checkpoint(s) but is not complete and should be continued again in the future. Return an empty array to signal that the task did not fail but has not reached the next checkpoint.
38
+ */
39
+ export type NotificationTaskServiceTaskHandlerCompletionType = true | false | ArrayOrValue<NotificationTaskCheckpointString>;
40
+ /**
41
+ * Result of a NotificationTaskServiceTaskHandler.handleNotificationTask() call.
42
+ */
43
+ export interface NotificationTaskServiceHandleNotificationTaskResult<D extends NotificationItemMetadata = {}> {
44
+ /**
45
+ * Completion type for the task result.
46
+ */
47
+ readonly completion: NotificationTaskServiceTaskHandlerCompletionType;
48
+ /**
49
+ * Updates the metadata for the notification item if the task is successful but not yet marked done.
50
+ *
51
+ * Does not update the metadata if the completion type is true or false.
52
+ */
53
+ readonly updateMetadata?: Partial<D>;
54
+ /**
55
+ * Delays the next run of the task by the specified amount of time or until the given date.
56
+ */
57
+ readonly delayUntil?: Maybe<Date | Milliseconds>;
58
+ }
package/test/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [12.3.1](https://github.com/dereekb/dbx-components/compare/v12.3.0-dev...v12.3.1) (2025-07-11)
6
+
7
+
8
+
9
+ # [12.3.0](https://github.com/dereekb/dbx-components/compare/v12.2.1-dev...v12.3.0) (2025-07-04)
10
+
11
+
12
+
5
13
  ## [12.2.1](https://github.com/dereekb/dbx-components/compare/v12.2.0-dev...v12.2.1) (2025-07-02)
6
14
 
7
15
 
package/test/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/firebase/test",
3
- "version": "12.2.1",
3
+ "version": "12.3.1",
4
4
  "type": "commonjs",
5
5
  "peerDependencies": {
6
6
  "@dereekb/util": "*",