@chipmobilesdk/rn-notification 0.5.0 → 0.7.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.
- package/CHANGELOG.md +184 -0
- package/README.md +108 -16
- package/lib/commonjs/advanced.js +139 -0
- package/lib/commonjs/advanced.js.map +1 -0
- package/lib/commonjs/channel/migrate.js +246 -0
- package/lib/commonjs/channel/migrate.js.map +1 -0
- package/lib/commonjs/channel/tone-map.js +120 -0
- package/lib/commonjs/channel/tone-map.js.map +1 -0
- package/lib/commonjs/channel/validate-tone.js +61 -0
- package/lib/commonjs/channel/validate-tone.js.map +1 -0
- package/lib/commonjs/contract/channel.js +52 -0
- package/lib/commonjs/contract/channel.js.map +1 -0
- package/lib/commonjs/contract/diagnostics.js +25 -0
- package/lib/commonjs/contract/diagnostics.js.map +1 -0
- package/lib/commonjs/contract/errors.js +126 -0
- package/lib/commonjs/contract/errors.js.map +1 -0
- package/lib/commonjs/contract/hash.js +35 -0
- package/lib/commonjs/contract/hash.js.map +1 -0
- package/lib/commonjs/contract/index.js +94 -0
- package/lib/commonjs/contract/index.js.map +1 -0
- package/lib/commonjs/contract/interaction.js +37 -0
- package/lib/commonjs/contract/interaction.js.map +1 -0
- package/lib/commonjs/contract/notification.js +42 -0
- package/lib/commonjs/contract/notification.js.map +1 -0
- package/lib/commonjs/contract/permission.js +2 -0
- package/lib/commonjs/contract/permission.js.map +1 -0
- package/lib/commonjs/contract/reconcile.js +6 -0
- package/lib/commonjs/contract/reconcile.js.map +1 -0
- package/lib/commonjs/contract/recurrence.js +53 -0
- package/lib/commonjs/contract/recurrence.js.map +1 -0
- package/lib/commonjs/diagnostics/burst.js +89 -0
- package/lib/commonjs/diagnostics/burst.js.map +1 -0
- package/lib/commonjs/diagnostics/events.js +63 -0
- package/lib/commonjs/diagnostics/events.js.map +1 -0
- package/lib/commonjs/diagnostics/redact.js +48 -0
- package/lib/commonjs/diagnostics/redact.js.map +1 -0
- package/lib/commonjs/diagnostics/snapshot.js +68 -0
- package/lib/commonjs/diagnostics/snapshot.js.map +1 -0
- package/lib/commonjs/engine/adapter.js +6 -0
- package/lib/commonjs/engine/adapter.js.map +1 -0
- package/lib/commonjs/engine/codec.js +84 -0
- package/lib/commonjs/engine/codec.js.map +1 -0
- package/lib/commonjs/engine/notify-kit/events.js +148 -0
- package/lib/commonjs/engine/notify-kit/events.js.map +1 -0
- package/lib/commonjs/engine/notify-kit/module.js +119 -0
- package/lib/commonjs/engine/notify-kit/module.js.map +1 -0
- package/lib/commonjs/engine/notify-kit/platform/android.js +159 -0
- package/lib/commonjs/engine/notify-kit/platform/android.js.map +1 -0
- package/lib/commonjs/engine/notify-kit/platform/index.js +57 -0
- package/lib/commonjs/engine/notify-kit/platform/index.js.map +1 -0
- package/lib/commonjs/engine/notify-kit/platform/ios.js +54 -0
- package/lib/commonjs/engine/notify-kit/platform/ios.js.map +1 -0
- package/lib/commonjs/engine/notify-kit/platform/types.js +6 -0
- package/lib/commonjs/engine/notify-kit/platform/types.js.map +1 -0
- package/lib/commonjs/engine/notify-kit-engine.js +260 -0
- package/lib/commonjs/engine/notify-kit-engine.js.map +1 -0
- package/lib/commonjs/index.js +367 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/initialize.js +187 -0
- package/lib/commonjs/initialize.js.map +1 -0
- package/lib/commonjs/interaction/index.js +120 -0
- package/lib/commonjs/interaction/index.js.map +1 -0
- package/lib/commonjs/maintenance/cycle.js +108 -0
- package/lib/commonjs/maintenance/cycle.js.map +1 -0
- package/lib/commonjs/maintenance/permission-refresh.js +39 -0
- package/lib/commonjs/maintenance/permission-refresh.js.map +1 -0
- package/lib/commonjs/maintenance/reanchor.js +99 -0
- package/lib/commonjs/maintenance/reanchor.js.map +1 -0
- package/lib/commonjs/maintenance/toggle.js +50 -0
- package/lib/commonjs/maintenance/toggle.js.map +1 -0
- package/lib/commonjs/maintenance/verify.js +70 -0
- package/lib/commonjs/maintenance/verify.js.map +1 -0
- package/lib/commonjs/maintenance/window-refresh.js +53 -0
- package/lib/commonjs/maintenance/window-refresh.js.map +1 -0
- package/lib/commonjs/notifications.js +161 -0
- package/lib/commonjs/notifications.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/permission/index.js +182 -0
- package/lib/commonjs/permission/index.js.map +1 -0
- package/lib/commonjs/permission/state.js +92 -0
- package/lib/commonjs/permission/state.js.map +1 -0
- package/lib/commonjs/push/envelope.js +141 -0
- package/lib/commonjs/push/envelope.js.map +1 -0
- package/lib/commonjs/push/fcm-provider.js +122 -0
- package/lib/commonjs/push/fcm-provider.js.map +1 -0
- package/lib/commonjs/push/gate.js +162 -0
- package/lib/commonjs/push/gate.js.map +1 -0
- package/lib/commonjs/push/index.js +47 -0
- package/lib/commonjs/push/index.js.map +1 -0
- package/lib/commonjs/push/instructions.js +101 -0
- package/lib/commonjs/push/instructions.js.map +1 -0
- package/lib/commonjs/push/provider-adapter.js +6 -0
- package/lib/commonjs/push/provider-adapter.js.map +1 -0
- package/lib/commonjs/push/signout.js +55 -0
- package/lib/commonjs/push/signout.js.map +1 -0
- package/lib/commonjs/reconcile/chunk.js +49 -0
- package/lib/commonjs/reconcile/chunk.js.map +1 -0
- package/lib/commonjs/reconcile/diff.js +105 -0
- package/lib/commonjs/reconcile/diff.js.map +1 -0
- package/lib/commonjs/reconcile/duplicates.js +60 -0
- package/lib/commonjs/reconcile/duplicates.js.map +1 -0
- package/lib/commonjs/reconcile/index.js +164 -0
- package/lib/commonjs/reconcile/index.js.map +1 -0
- package/lib/commonjs/reconcile/truncate.js +50 -0
- package/lib/commonjs/reconcile/truncate.js.map +1 -0
- package/lib/commonjs/recurrence/clock-guard.js +65 -0
- package/lib/commonjs/recurrence/clock-guard.js.map +1 -0
- package/lib/commonjs/recurrence/expand.js +254 -0
- package/lib/commonjs/recurrence/expand.js.map +1 -0
- package/lib/commonjs/recurrence/index.js +212 -0
- package/lib/commonjs/recurrence/index.js.map +1 -0
- package/lib/commonjs/repeat/expiry.js +41 -0
- package/lib/commonjs/repeat/expiry.js.map +1 -0
- package/lib/commonjs/repeat/index.js +100 -0
- package/lib/commonjs/repeat/index.js.map +1 -0
- package/lib/commonjs/repeat/marker.js +58 -0
- package/lib/commonjs/repeat/marker.js.map +1 -0
- package/lib/commonjs/repeat/place.js +83 -0
- package/lib/commonjs/repeat/place.js.map +1 -0
- package/lib/commonjs/schedule/anchor.js +243 -0
- package/lib/commonjs/schedule/anchor.js.map +1 -0
- package/lib/commonjs/schedule/index.js +142 -0
- package/lib/commonjs/schedule/index.js.map +1 -0
- package/lib/commonjs/schedule/partition.js +59 -0
- package/lib/commonjs/schedule/partition.js.map +1 -0
- package/lib/commonjs/schedule/resolve-moment.js +72 -0
- package/lib/commonjs/schedule/resolve-moment.js.map +1 -0
- package/lib/commonjs/schedule/validate-content.js +101 -0
- package/lib/commonjs/schedule/validate-content.js.map +1 -0
- package/lib/commonjs/schedule/validate-identifier.js +126 -0
- package/lib/commonjs/schedule/validate-identifier.js.map +1 -0
- package/lib/commonjs/schedule/writer.js +44 -0
- package/lib/commonjs/schedule/writer.js.map +1 -0
- package/lib/commonjs/state/caps.js +101 -0
- package/lib/commonjs/state/caps.js.map +1 -0
- package/lib/commonjs/state/dedup-ledger.js +39 -0
- package/lib/commonjs/state/dedup-ledger.js.map +1 -0
- package/lib/commonjs/state/interaction-buffer.js +98 -0
- package/lib/commonjs/state/interaction-buffer.js.map +1 -0
- package/lib/commonjs/state/mmkv-store.js +75 -0
- package/lib/commonjs/state/mmkv-store.js.map +1 -0
- package/lib/commonjs/state/permission-history.js +64 -0
- package/lib/commonjs/state/permission-history.js.map +1 -0
- package/lib/commonjs/state/record.js +269 -0
- package/lib/commonjs/state/record.js.map +1 -0
- package/lib/commonjs/state/reset.js +37 -0
- package/lib/commonjs/state/reset.js.map +1 -0
- package/lib/commonjs/state/series-ledger.js +71 -0
- package/lib/commonjs/state/series-ledger.js.map +1 -0
- package/lib/commonjs/state/store.js +39 -0
- package/lib/commonjs/state/store.js.map +1 -0
- package/lib/commonjs/testing/conformance/index.js +218 -0
- package/lib/commonjs/testing/conformance/index.js.map +1 -0
- package/lib/commonjs/testing/fake-engine.js +338 -0
- package/lib/commonjs/testing/fake-engine.js.map +1 -0
- package/lib/commonjs/testing/fake-provider.js +93 -0
- package/lib/commonjs/testing/fake-provider.js.map +1 -0
- package/lib/commonjs/testing/faults.js +59 -0
- package/lib/commonjs/testing/faults.js.map +1 -0
- package/lib/commonjs/testing/index.js +54 -0
- package/lib/commonjs/testing/index.js.map +1 -0
- package/lib/commonjs/testing/measure.js +298 -0
- package/lib/commonjs/testing/measure.js.map +1 -0
- package/lib/module/advanced.js +29 -0
- package/lib/module/advanced.js.map +1 -0
- package/lib/module/channel/migrate.js +242 -0
- package/lib/module/channel/migrate.js.map +1 -0
- package/lib/module/channel/tone-map.js +112 -0
- package/lib/module/channel/tone-map.js.map +1 -0
- package/lib/module/channel/validate-tone.js +57 -0
- package/lib/module/channel/validate-tone.js.map +1 -0
- package/lib/module/contract/channel.js +48 -0
- package/lib/module/contract/channel.js.map +1 -0
- package/lib/module/contract/diagnostics.js +21 -0
- package/lib/module/contract/diagnostics.js.map +1 -0
- package/lib/module/contract/errors.js +119 -0
- package/lib/module/contract/errors.js.map +1 -0
- package/lib/module/contract/hash.js +29 -0
- package/lib/module/contract/hash.js.map +1 -0
- package/lib/module/contract/index.js +13 -0
- package/lib/module/contract/index.js.map +1 -0
- package/lib/module/contract/interaction.js +33 -0
- package/lib/module/contract/interaction.js.map +1 -0
- package/lib/module/contract/notification.js +38 -0
- package/lib/module/contract/notification.js.map +1 -0
- package/lib/module/contract/permission.js +2 -0
- package/lib/module/contract/permission.js.map +1 -0
- package/lib/module/contract/reconcile.js +4 -0
- package/lib/module/contract/reconcile.js.map +1 -0
- package/lib/module/contract/recurrence.js +49 -0
- package/lib/module/contract/recurrence.js.map +1 -0
- package/lib/module/diagnostics/burst.js +85 -0
- package/lib/module/diagnostics/burst.js.map +1 -0
- package/lib/module/diagnostics/events.js +58 -0
- package/lib/module/diagnostics/events.js.map +1 -0
- package/lib/module/diagnostics/redact.js +44 -0
- package/lib/module/diagnostics/redact.js.map +1 -0
- package/lib/module/diagnostics/snapshot.js +64 -0
- package/lib/module/diagnostics/snapshot.js.map +1 -0
- package/lib/module/engine/adapter.js +4 -0
- package/lib/module/engine/adapter.js.map +1 -0
- package/lib/module/engine/codec.js +79 -0
- package/lib/module/engine/codec.js.map +1 -0
- package/lib/module/engine/notify-kit/events.js +139 -0
- package/lib/module/engine/notify-kit/events.js.map +1 -0
- package/lib/module/engine/notify-kit/module.js +113 -0
- package/lib/module/engine/notify-kit/module.js.map +1 -0
- package/lib/module/engine/notify-kit/platform/android.js +155 -0
- package/lib/module/engine/notify-kit/platform/android.js.map +1 -0
- package/lib/module/engine/notify-kit/platform/index.js +51 -0
- package/lib/module/engine/notify-kit/platform/index.js.map +1 -0
- package/lib/module/engine/notify-kit/platform/ios.js +49 -0
- package/lib/module/engine/notify-kit/platform/ios.js.map +1 -0
- package/lib/module/engine/notify-kit/platform/types.js +4 -0
- package/lib/module/engine/notify-kit/platform/types.js.map +1 -0
- package/lib/module/engine/notify-kit-engine.js +257 -0
- package/lib/module/engine/notify-kit-engine.js.map +1 -0
- package/lib/module/index.js +98 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/initialize.js +182 -0
- package/lib/module/initialize.js.map +1 -0
- package/lib/module/interaction/index.js +116 -0
- package/lib/module/interaction/index.js.map +1 -0
- package/lib/module/maintenance/cycle.js +102 -0
- package/lib/module/maintenance/cycle.js.map +1 -0
- package/lib/module/maintenance/permission-refresh.js +34 -0
- package/lib/module/maintenance/permission-refresh.js.map +1 -0
- package/lib/module/maintenance/reanchor.js +94 -0
- package/lib/module/maintenance/reanchor.js.map +1 -0
- package/lib/module/maintenance/toggle.js +45 -0
- package/lib/module/maintenance/toggle.js.map +1 -0
- package/lib/module/maintenance/verify.js +65 -0
- package/lib/module/maintenance/verify.js.map +1 -0
- package/lib/module/maintenance/window-refresh.js +48 -0
- package/lib/module/maintenance/window-refresh.js.map +1 -0
- package/lib/module/notifications.js +157 -0
- package/lib/module/notifications.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/permission/index.js +178 -0
- package/lib/module/permission/index.js.map +1 -0
- package/lib/module/permission/state.js +83 -0
- package/lib/module/permission/state.js.map +1 -0
- package/lib/module/push/envelope.js +137 -0
- package/lib/module/push/envelope.js.map +1 -0
- package/lib/module/push/fcm-provider.js +119 -0
- package/lib/module/push/fcm-provider.js.map +1 -0
- package/lib/module/push/gate.js +158 -0
- package/lib/module/push/gate.js.map +1 -0
- package/lib/module/push/index.js +16 -0
- package/lib/module/push/index.js.map +1 -0
- package/lib/module/push/instructions.js +97 -0
- package/lib/module/push/instructions.js.map +1 -0
- package/lib/module/push/provider-adapter.js +4 -0
- package/lib/module/push/provider-adapter.js.map +1 -0
- package/lib/module/push/signout.js +51 -0
- package/lib/module/push/signout.js.map +1 -0
- package/lib/module/reconcile/chunk.js +43 -0
- package/lib/module/reconcile/chunk.js.map +1 -0
- package/lib/module/reconcile/diff.js +101 -0
- package/lib/module/reconcile/diff.js.map +1 -0
- package/lib/module/reconcile/duplicates.js +56 -0
- package/lib/module/reconcile/duplicates.js.map +1 -0
- package/lib/module/reconcile/index.js +161 -0
- package/lib/module/reconcile/index.js.map +1 -0
- package/lib/module/reconcile/truncate.js +46 -0
- package/lib/module/reconcile/truncate.js.map +1 -0
- package/lib/module/recurrence/clock-guard.js +60 -0
- package/lib/module/recurrence/clock-guard.js.map +1 -0
- package/lib/module/recurrence/expand.js +248 -0
- package/lib/module/recurrence/expand.js.map +1 -0
- package/lib/module/recurrence/index.js +208 -0
- package/lib/module/recurrence/index.js.map +1 -0
- package/lib/module/repeat/expiry.js +37 -0
- package/lib/module/repeat/expiry.js.map +1 -0
- package/lib/module/repeat/index.js +67 -0
- package/lib/module/repeat/index.js.map +1 -0
- package/lib/module/repeat/marker.js +51 -0
- package/lib/module/repeat/marker.js.map +1 -0
- package/lib/module/repeat/place.js +79 -0
- package/lib/module/repeat/place.js.map +1 -0
- package/lib/module/schedule/anchor.js +234 -0
- package/lib/module/schedule/anchor.js.map +1 -0
- package/lib/module/schedule/index.js +137 -0
- package/lib/module/schedule/index.js.map +1 -0
- package/lib/module/schedule/partition.js +53 -0
- package/lib/module/schedule/partition.js.map +1 -0
- package/lib/module/schedule/resolve-moment.js +66 -0
- package/lib/module/schedule/resolve-moment.js.map +1 -0
- package/lib/module/schedule/validate-content.js +95 -0
- package/lib/module/schedule/validate-content.js.map +1 -0
- package/lib/module/schedule/validate-identifier.js +119 -0
- package/lib/module/schedule/validate-identifier.js.map +1 -0
- package/lib/module/schedule/writer.js +40 -0
- package/lib/module/schedule/writer.js.map +1 -0
- package/lib/module/state/caps.js +96 -0
- package/lib/module/state/caps.js.map +1 -0
- package/lib/module/state/dedup-ledger.js +34 -0
- package/lib/module/state/dedup-ledger.js.map +1 -0
- package/lib/module/state/interaction-buffer.js +92 -0
- package/lib/module/state/interaction-buffer.js.map +1 -0
- package/lib/module/state/mmkv-store.js +71 -0
- package/lib/module/state/mmkv-store.js.map +1 -0
- package/lib/module/state/permission-history.js +56 -0
- package/lib/module/state/permission-history.js.map +1 -0
- package/lib/module/state/record.js +264 -0
- package/lib/module/state/record.js.map +1 -0
- package/lib/module/state/reset.js +32 -0
- package/lib/module/state/reset.js.map +1 -0
- package/lib/module/state/series-ledger.js +62 -0
- package/lib/module/state/series-ledger.js.map +1 -0
- package/lib/module/state/store.js +35 -0
- package/lib/module/state/store.js.map +1 -0
- package/lib/module/testing/conformance/index.js +214 -0
- package/lib/module/testing/conformance/index.js.map +1 -0
- package/lib/module/testing/fake-engine.js +335 -0
- package/lib/module/testing/fake-engine.js.map +1 -0
- package/lib/module/testing/fake-provider.js +89 -0
- package/lib/module/testing/fake-provider.js.map +1 -0
- package/lib/module/testing/faults.js +55 -0
- package/lib/module/testing/faults.js.map +1 -0
- package/lib/module/testing/index.js +19 -0
- package/lib/module/testing/index.js.map +1 -0
- package/lib/module/testing/measure.js +294 -0
- package/lib/module/testing/measure.js.map +1 -0
- package/lib/typescript/commonjs/advanced.d.ts +36 -0
- package/lib/typescript/commonjs/advanced.d.ts.map +1 -0
- package/lib/typescript/commonjs/channel/migrate.d.ts +38 -0
- package/lib/typescript/commonjs/channel/migrate.d.ts.map +1 -0
- package/lib/typescript/commonjs/channel/tone-map.d.ts +34 -0
- package/lib/typescript/commonjs/channel/tone-map.d.ts.map +1 -0
- package/lib/typescript/commonjs/channel/validate-tone.d.ts +23 -0
- package/lib/typescript/commonjs/channel/validate-tone.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/channel.d.ts +185 -0
- package/lib/typescript/commonjs/contract/channel.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/diagnostics.d.ts +92 -0
- package/lib/typescript/commonjs/contract/diagnostics.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/errors.d.ts +91 -0
- package/lib/typescript/commonjs/contract/errors.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/hash.d.ts +14 -0
- package/lib/typescript/commonjs/contract/hash.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/index.d.ts +10 -0
- package/lib/typescript/commonjs/contract/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/interaction.d.ts +53 -0
- package/lib/typescript/commonjs/contract/interaction.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/notification.d.ts +110 -0
- package/lib/typescript/commonjs/contract/notification.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/permission.d.ts +49 -0
- package/lib/typescript/commonjs/contract/permission.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/reconcile.d.ts +82 -0
- package/lib/typescript/commonjs/contract/reconcile.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/recurrence.d.ts +118 -0
- package/lib/typescript/commonjs/contract/recurrence.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/burst.d.ts +39 -0
- package/lib/typescript/commonjs/diagnostics/burst.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/events.d.ts +28 -0
- package/lib/typescript/commonjs/diagnostics/events.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/redact.d.ts +22 -0
- package/lib/typescript/commonjs/diagnostics/redact.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/snapshot.d.ts +40 -0
- package/lib/typescript/commonjs/diagnostics/snapshot.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/adapter.d.ts +172 -0
- package/lib/typescript/commonjs/engine/adapter.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/codec.d.ts +20 -0
- package/lib/typescript/commonjs/engine/codec.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/notify-kit/events.d.ts +37 -0
- package/lib/typescript/commonjs/engine/notify-kit/events.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/notify-kit/module.d.ts +103 -0
- package/lib/typescript/commonjs/engine/notify-kit/module.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/notify-kit/platform/android.d.ts +3 -0
- package/lib/typescript/commonjs/engine/notify-kit/platform/android.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/notify-kit/platform/index.d.ts +12 -0
- package/lib/typescript/commonjs/engine/notify-kit/platform/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/notify-kit/platform/ios.d.ts +3 -0
- package/lib/typescript/commonjs/engine/notify-kit/platform/ios.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/notify-kit/platform/types.d.ts +33 -0
- package/lib/typescript/commonjs/engine/notify-kit/platform/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/notify-kit-engine.d.ts +25 -0
- package/lib/typescript/commonjs/engine/notify-kit-engine.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +106 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/initialize.d.ts +74 -0
- package/lib/typescript/commonjs/initialize.d.ts.map +1 -0
- package/lib/typescript/commonjs/interaction/index.d.ts +53 -0
- package/lib/typescript/commonjs/interaction/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/maintenance/cycle.d.ts +77 -0
- package/lib/typescript/commonjs/maintenance/cycle.d.ts.map +1 -0
- package/lib/typescript/commonjs/maintenance/permission-refresh.d.ts +19 -0
- package/lib/typescript/commonjs/maintenance/permission-refresh.d.ts.map +1 -0
- package/lib/typescript/commonjs/maintenance/reanchor.d.ts +26 -0
- package/lib/typescript/commonjs/maintenance/reanchor.d.ts.map +1 -0
- package/lib/typescript/commonjs/maintenance/toggle.d.ts +35 -0
- package/lib/typescript/commonjs/maintenance/toggle.d.ts.map +1 -0
- package/lib/typescript/commonjs/maintenance/verify.d.ts +32 -0
- package/lib/typescript/commonjs/maintenance/verify.d.ts.map +1 -0
- package/lib/typescript/commonjs/maintenance/window-refresh.d.ts +29 -0
- package/lib/typescript/commonjs/maintenance/window-refresh.d.ts.map +1 -0
- package/lib/typescript/commonjs/notifications.d.ts +78 -0
- package/lib/typescript/commonjs/notifications.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/permission/index.d.ts +57 -0
- package/lib/typescript/commonjs/permission/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/permission/state.d.ts +41 -0
- package/lib/typescript/commonjs/permission/state.d.ts.map +1 -0
- package/lib/typescript/commonjs/push/envelope.d.ts +33 -0
- package/lib/typescript/commonjs/push/envelope.d.ts.map +1 -0
- package/lib/typescript/commonjs/push/fcm-provider.d.ts +43 -0
- package/lib/typescript/commonjs/push/fcm-provider.d.ts.map +1 -0
- package/lib/typescript/commonjs/push/gate.d.ts +57 -0
- package/lib/typescript/commonjs/push/gate.d.ts.map +1 -0
- package/lib/typescript/commonjs/push/index.d.ts +19 -0
- package/lib/typescript/commonjs/push/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/push/instructions.d.ts +45 -0
- package/lib/typescript/commonjs/push/instructions.d.ts.map +1 -0
- package/lib/typescript/commonjs/push/provider-adapter.d.ts +50 -0
- package/lib/typescript/commonjs/push/provider-adapter.d.ts.map +1 -0
- package/lib/typescript/commonjs/push/signout.d.ts +33 -0
- package/lib/typescript/commonjs/push/signout.d.ts.map +1 -0
- package/lib/typescript/commonjs/reconcile/chunk.d.ts +24 -0
- package/lib/typescript/commonjs/reconcile/chunk.d.ts.map +1 -0
- package/lib/typescript/commonjs/reconcile/diff.d.ts +54 -0
- package/lib/typescript/commonjs/reconcile/diff.d.ts.map +1 -0
- package/lib/typescript/commonjs/reconcile/duplicates.d.ts +32 -0
- package/lib/typescript/commonjs/reconcile/duplicates.d.ts.map +1 -0
- package/lib/typescript/commonjs/reconcile/index.d.ts +35 -0
- package/lib/typescript/commonjs/reconcile/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/reconcile/truncate.d.ts +26 -0
- package/lib/typescript/commonjs/reconcile/truncate.d.ts.map +1 -0
- package/lib/typescript/commonjs/recurrence/clock-guard.d.ts +37 -0
- package/lib/typescript/commonjs/recurrence/clock-guard.d.ts.map +1 -0
- package/lib/typescript/commonjs/recurrence/expand.d.ts +75 -0
- package/lib/typescript/commonjs/recurrence/expand.d.ts.map +1 -0
- package/lib/typescript/commonjs/recurrence/index.d.ts +40 -0
- package/lib/typescript/commonjs/recurrence/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/repeat/expiry.d.ts +23 -0
- package/lib/typescript/commonjs/repeat/expiry.d.ts.map +1 -0
- package/lib/typescript/commonjs/repeat/index.d.ts +49 -0
- package/lib/typescript/commonjs/repeat/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/repeat/marker.d.ts +36 -0
- package/lib/typescript/commonjs/repeat/marker.d.ts.map +1 -0
- package/lib/typescript/commonjs/repeat/place.d.ts +39 -0
- package/lib/typescript/commonjs/repeat/place.d.ts.map +1 -0
- package/lib/typescript/commonjs/schedule/anchor.d.ts +118 -0
- package/lib/typescript/commonjs/schedule/anchor.d.ts.map +1 -0
- package/lib/typescript/commonjs/schedule/index.d.ts +40 -0
- package/lib/typescript/commonjs/schedule/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/schedule/partition.d.ts +29 -0
- package/lib/typescript/commonjs/schedule/partition.d.ts.map +1 -0
- package/lib/typescript/commonjs/schedule/resolve-moment.d.ts +35 -0
- package/lib/typescript/commonjs/schedule/resolve-moment.d.ts.map +1 -0
- package/lib/typescript/commonjs/schedule/validate-content.d.ts +42 -0
- package/lib/typescript/commonjs/schedule/validate-content.d.ts.map +1 -0
- package/lib/typescript/commonjs/schedule/validate-identifier.d.ts +30 -0
- package/lib/typescript/commonjs/schedule/validate-identifier.d.ts.map +1 -0
- package/lib/typescript/commonjs/schedule/writer.d.ts +36 -0
- package/lib/typescript/commonjs/schedule/writer.d.ts.map +1 -0
- package/lib/typescript/commonjs/state/caps.d.ts +51 -0
- package/lib/typescript/commonjs/state/caps.d.ts.map +1 -0
- package/lib/typescript/commonjs/state/dedup-ledger.d.ts +21 -0
- package/lib/typescript/commonjs/state/dedup-ledger.d.ts.map +1 -0
- package/lib/typescript/commonjs/state/interaction-buffer.d.ts +30 -0
- package/lib/typescript/commonjs/state/interaction-buffer.d.ts.map +1 -0
- package/lib/typescript/commonjs/state/mmkv-store.d.ts +33 -0
- package/lib/typescript/commonjs/state/mmkv-store.d.ts.map +1 -0
- package/lib/typescript/commonjs/state/permission-history.d.ts +20 -0
- package/lib/typescript/commonjs/state/permission-history.d.ts.map +1 -0
- package/lib/typescript/commonjs/state/record.d.ts +134 -0
- package/lib/typescript/commonjs/state/record.d.ts.map +1 -0
- package/lib/typescript/commonjs/state/reset.d.ts +22 -0
- package/lib/typescript/commonjs/state/reset.d.ts.map +1 -0
- package/lib/typescript/commonjs/state/series-ledger.d.ts +47 -0
- package/lib/typescript/commonjs/state/series-ledger.d.ts.map +1 -0
- package/lib/typescript/commonjs/state/store.d.ts +20 -0
- package/lib/typescript/commonjs/state/store.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance/index.d.ts +32 -0
- package/lib/typescript/commonjs/testing/conformance/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/fake-engine.d.ts +91 -0
- package/lib/typescript/commonjs/testing/fake-engine.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/fake-provider.d.ts +35 -0
- package/lib/typescript/commonjs/testing/fake-provider.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/faults.d.ts +38 -0
- package/lib/typescript/commonjs/testing/faults.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/index.d.ts +22 -0
- package/lib/typescript/commonjs/testing/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/measure.d.ts +59 -0
- package/lib/typescript/commonjs/testing/measure.d.ts.map +1 -0
- package/lib/typescript/module/advanced.d.ts +36 -0
- package/lib/typescript/module/advanced.d.ts.map +1 -0
- package/lib/typescript/module/channel/migrate.d.ts +38 -0
- package/lib/typescript/module/channel/migrate.d.ts.map +1 -0
- package/lib/typescript/module/channel/tone-map.d.ts +34 -0
- package/lib/typescript/module/channel/tone-map.d.ts.map +1 -0
- package/lib/typescript/module/channel/validate-tone.d.ts +23 -0
- package/lib/typescript/module/channel/validate-tone.d.ts.map +1 -0
- package/lib/typescript/module/contract/channel.d.ts +185 -0
- package/lib/typescript/module/contract/channel.d.ts.map +1 -0
- package/lib/typescript/module/contract/diagnostics.d.ts +92 -0
- package/lib/typescript/module/contract/diagnostics.d.ts.map +1 -0
- package/lib/typescript/module/contract/errors.d.ts +91 -0
- package/lib/typescript/module/contract/errors.d.ts.map +1 -0
- package/lib/typescript/module/contract/hash.d.ts +14 -0
- package/lib/typescript/module/contract/hash.d.ts.map +1 -0
- package/lib/typescript/module/contract/index.d.ts +10 -0
- package/lib/typescript/module/contract/index.d.ts.map +1 -0
- package/lib/typescript/module/contract/interaction.d.ts +53 -0
- package/lib/typescript/module/contract/interaction.d.ts.map +1 -0
- package/lib/typescript/module/contract/notification.d.ts +110 -0
- package/lib/typescript/module/contract/notification.d.ts.map +1 -0
- package/lib/typescript/module/contract/permission.d.ts +49 -0
- package/lib/typescript/module/contract/permission.d.ts.map +1 -0
- package/lib/typescript/module/contract/reconcile.d.ts +82 -0
- package/lib/typescript/module/contract/reconcile.d.ts.map +1 -0
- package/lib/typescript/module/contract/recurrence.d.ts +118 -0
- package/lib/typescript/module/contract/recurrence.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/burst.d.ts +39 -0
- package/lib/typescript/module/diagnostics/burst.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/events.d.ts +28 -0
- package/lib/typescript/module/diagnostics/events.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/redact.d.ts +22 -0
- package/lib/typescript/module/diagnostics/redact.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/snapshot.d.ts +40 -0
- package/lib/typescript/module/diagnostics/snapshot.d.ts.map +1 -0
- package/lib/typescript/module/engine/adapter.d.ts +172 -0
- package/lib/typescript/module/engine/adapter.d.ts.map +1 -0
- package/lib/typescript/module/engine/codec.d.ts +20 -0
- package/lib/typescript/module/engine/codec.d.ts.map +1 -0
- package/lib/typescript/module/engine/notify-kit/events.d.ts +37 -0
- package/lib/typescript/module/engine/notify-kit/events.d.ts.map +1 -0
- package/lib/typescript/module/engine/notify-kit/module.d.ts +103 -0
- package/lib/typescript/module/engine/notify-kit/module.d.ts.map +1 -0
- package/lib/typescript/module/engine/notify-kit/platform/android.d.ts +3 -0
- package/lib/typescript/module/engine/notify-kit/platform/android.d.ts.map +1 -0
- package/lib/typescript/module/engine/notify-kit/platform/index.d.ts +12 -0
- package/lib/typescript/module/engine/notify-kit/platform/index.d.ts.map +1 -0
- package/lib/typescript/module/engine/notify-kit/platform/ios.d.ts +3 -0
- package/lib/typescript/module/engine/notify-kit/platform/ios.d.ts.map +1 -0
- package/lib/typescript/module/engine/notify-kit/platform/types.d.ts +33 -0
- package/lib/typescript/module/engine/notify-kit/platform/types.d.ts.map +1 -0
- package/lib/typescript/module/engine/notify-kit-engine.d.ts +25 -0
- package/lib/typescript/module/engine/notify-kit-engine.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +106 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/initialize.d.ts +74 -0
- package/lib/typescript/module/initialize.d.ts.map +1 -0
- package/lib/typescript/module/interaction/index.d.ts +53 -0
- package/lib/typescript/module/interaction/index.d.ts.map +1 -0
- package/lib/typescript/module/maintenance/cycle.d.ts +77 -0
- package/lib/typescript/module/maintenance/cycle.d.ts.map +1 -0
- package/lib/typescript/module/maintenance/permission-refresh.d.ts +19 -0
- package/lib/typescript/module/maintenance/permission-refresh.d.ts.map +1 -0
- package/lib/typescript/module/maintenance/reanchor.d.ts +26 -0
- package/lib/typescript/module/maintenance/reanchor.d.ts.map +1 -0
- package/lib/typescript/module/maintenance/toggle.d.ts +35 -0
- package/lib/typescript/module/maintenance/toggle.d.ts.map +1 -0
- package/lib/typescript/module/maintenance/verify.d.ts +32 -0
- package/lib/typescript/module/maintenance/verify.d.ts.map +1 -0
- package/lib/typescript/module/maintenance/window-refresh.d.ts +29 -0
- package/lib/typescript/module/maintenance/window-refresh.d.ts.map +1 -0
- package/lib/typescript/module/notifications.d.ts +78 -0
- package/lib/typescript/module/notifications.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/permission/index.d.ts +57 -0
- package/lib/typescript/module/permission/index.d.ts.map +1 -0
- package/lib/typescript/module/permission/state.d.ts +41 -0
- package/lib/typescript/module/permission/state.d.ts.map +1 -0
- package/lib/typescript/module/push/envelope.d.ts +33 -0
- package/lib/typescript/module/push/envelope.d.ts.map +1 -0
- package/lib/typescript/module/push/fcm-provider.d.ts +43 -0
- package/lib/typescript/module/push/fcm-provider.d.ts.map +1 -0
- package/lib/typescript/module/push/gate.d.ts +57 -0
- package/lib/typescript/module/push/gate.d.ts.map +1 -0
- package/lib/typescript/module/push/index.d.ts +19 -0
- package/lib/typescript/module/push/index.d.ts.map +1 -0
- package/lib/typescript/module/push/instructions.d.ts +45 -0
- package/lib/typescript/module/push/instructions.d.ts.map +1 -0
- package/lib/typescript/module/push/provider-adapter.d.ts +50 -0
- package/lib/typescript/module/push/provider-adapter.d.ts.map +1 -0
- package/lib/typescript/module/push/signout.d.ts +33 -0
- package/lib/typescript/module/push/signout.d.ts.map +1 -0
- package/lib/typescript/module/reconcile/chunk.d.ts +24 -0
- package/lib/typescript/module/reconcile/chunk.d.ts.map +1 -0
- package/lib/typescript/module/reconcile/diff.d.ts +54 -0
- package/lib/typescript/module/reconcile/diff.d.ts.map +1 -0
- package/lib/typescript/module/reconcile/duplicates.d.ts +32 -0
- package/lib/typescript/module/reconcile/duplicates.d.ts.map +1 -0
- package/lib/typescript/module/reconcile/index.d.ts +35 -0
- package/lib/typescript/module/reconcile/index.d.ts.map +1 -0
- package/lib/typescript/module/reconcile/truncate.d.ts +26 -0
- package/lib/typescript/module/reconcile/truncate.d.ts.map +1 -0
- package/lib/typescript/module/recurrence/clock-guard.d.ts +37 -0
- package/lib/typescript/module/recurrence/clock-guard.d.ts.map +1 -0
- package/lib/typescript/module/recurrence/expand.d.ts +75 -0
- package/lib/typescript/module/recurrence/expand.d.ts.map +1 -0
- package/lib/typescript/module/recurrence/index.d.ts +40 -0
- package/lib/typescript/module/recurrence/index.d.ts.map +1 -0
- package/lib/typescript/module/repeat/expiry.d.ts +23 -0
- package/lib/typescript/module/repeat/expiry.d.ts.map +1 -0
- package/lib/typescript/module/repeat/index.d.ts +49 -0
- package/lib/typescript/module/repeat/index.d.ts.map +1 -0
- package/lib/typescript/module/repeat/marker.d.ts +36 -0
- package/lib/typescript/module/repeat/marker.d.ts.map +1 -0
- package/lib/typescript/module/repeat/place.d.ts +39 -0
- package/lib/typescript/module/repeat/place.d.ts.map +1 -0
- package/lib/typescript/module/schedule/anchor.d.ts +118 -0
- package/lib/typescript/module/schedule/anchor.d.ts.map +1 -0
- package/lib/typescript/module/schedule/index.d.ts +40 -0
- package/lib/typescript/module/schedule/index.d.ts.map +1 -0
- package/lib/typescript/module/schedule/partition.d.ts +29 -0
- package/lib/typescript/module/schedule/partition.d.ts.map +1 -0
- package/lib/typescript/module/schedule/resolve-moment.d.ts +35 -0
- package/lib/typescript/module/schedule/resolve-moment.d.ts.map +1 -0
- package/lib/typescript/module/schedule/validate-content.d.ts +42 -0
- package/lib/typescript/module/schedule/validate-content.d.ts.map +1 -0
- package/lib/typescript/module/schedule/validate-identifier.d.ts +30 -0
- package/lib/typescript/module/schedule/validate-identifier.d.ts.map +1 -0
- package/lib/typescript/module/schedule/writer.d.ts +36 -0
- package/lib/typescript/module/schedule/writer.d.ts.map +1 -0
- package/lib/typescript/module/state/caps.d.ts +51 -0
- package/lib/typescript/module/state/caps.d.ts.map +1 -0
- package/lib/typescript/module/state/dedup-ledger.d.ts +21 -0
- package/lib/typescript/module/state/dedup-ledger.d.ts.map +1 -0
- package/lib/typescript/module/state/interaction-buffer.d.ts +30 -0
- package/lib/typescript/module/state/interaction-buffer.d.ts.map +1 -0
- package/lib/typescript/module/state/mmkv-store.d.ts +33 -0
- package/lib/typescript/module/state/mmkv-store.d.ts.map +1 -0
- package/lib/typescript/module/state/permission-history.d.ts +20 -0
- package/lib/typescript/module/state/permission-history.d.ts.map +1 -0
- package/lib/typescript/module/state/record.d.ts +134 -0
- package/lib/typescript/module/state/record.d.ts.map +1 -0
- package/lib/typescript/module/state/reset.d.ts +22 -0
- package/lib/typescript/module/state/reset.d.ts.map +1 -0
- package/lib/typescript/module/state/series-ledger.d.ts +47 -0
- package/lib/typescript/module/state/series-ledger.d.ts.map +1 -0
- package/lib/typescript/module/state/store.d.ts +20 -0
- package/lib/typescript/module/state/store.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance/index.d.ts +32 -0
- package/lib/typescript/module/testing/conformance/index.d.ts.map +1 -0
- package/lib/typescript/module/testing/fake-engine.d.ts +91 -0
- package/lib/typescript/module/testing/fake-engine.d.ts.map +1 -0
- package/lib/typescript/module/testing/fake-provider.d.ts +35 -0
- package/lib/typescript/module/testing/fake-provider.d.ts.map +1 -0
- package/lib/typescript/module/testing/faults.d.ts +38 -0
- package/lib/typescript/module/testing/faults.d.ts.map +1 -0
- package/lib/typescript/module/testing/index.d.ts +22 -0
- package/lib/typescript/module/testing/index.d.ts.map +1 -0
- package/lib/typescript/module/testing/measure.d.ts +59 -0
- package/lib/typescript/module/testing/measure.d.ts.map +1 -0
- package/package.json +74 -23
- package/skills/sdk-rn-notification/SKILL.md +6 -5
- package/src/advanced.ts +35 -0
- package/src/channel/migrate.ts +176 -158
- package/src/channel/tone-map.ts +2 -10
- package/src/contract/errors.ts +7 -0
- package/src/contract/hash.ts +26 -0
- package/src/engine/adapter.ts +21 -1
- package/src/engine/notify-kit/events.ts +155 -0
- package/src/engine/notify-kit/module.ts +148 -0
- package/src/engine/notify-kit/platform/android.ts +172 -0
- package/src/engine/notify-kit/platform/index.ts +55 -0
- package/src/engine/notify-kit/platform/ios.ts +54 -0
- package/src/engine/notify-kit/platform/types.ts +40 -0
- package/src/engine/notify-kit-engine.ts +96 -477
- package/src/index.ts +9 -0
- package/src/notifications.ts +195 -0
- package/src/permission/index.ts +65 -4
- package/src/push/fcm-provider.ts +14 -4
- package/src/push/gate.ts +27 -5
- package/src/reconcile/diff.ts +38 -27
- package/src/reconcile/index.ts +13 -4
- package/src/recurrence/index.ts +2 -1
- package/src/repeat/expiry.ts +2 -6
- package/src/repeat/index.ts +45 -1
- package/src/repeat/marker.ts +1 -22
- package/src/repeat/place.ts +74 -35
- package/src/schedule/index.ts +10 -4
- package/src/schedule/partition.ts +0 -19
- package/src/schedule/validate-identifier.ts +8 -6
- package/src/schedule/writer.ts +13 -4
- package/src/state/caps.ts +28 -3
- package/src/state/permission-history.ts +25 -0
- package/src/state/record.ts +110 -20
- package/src/testing/fake-engine.ts +17 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createReconciler = createReconciler;
|
|
7
|
+
var _errors = require("../contract/errors.js");
|
|
8
|
+
var _anchor = require("../schedule/anchor.js");
|
|
9
|
+
var _resolveMoment = require("../schedule/resolve-moment.js");
|
|
10
|
+
var _index = require("../schedule/index.js");
|
|
11
|
+
var _duplicates = require("./duplicates.js");
|
|
12
|
+
var _truncate = require("./truncate.js");
|
|
13
|
+
var _writer = require("../schedule/writer.js");
|
|
14
|
+
var _diff = require("./diff.js");
|
|
15
|
+
var _chunk = require("./chunk.js");
|
|
16
|
+
/**
|
|
17
|
+
* The reconciliation operation.
|
|
18
|
+
*
|
|
19
|
+
* A caller hands over the complete set its data implies; the package works out
|
|
20
|
+
* what to add, replace, and remove. This is **never** run automatically — only
|
|
21
|
+
* the caller knows what its data implies, and a package that guessed a desired
|
|
22
|
+
* set would cancel notifications it does not understand.
|
|
23
|
+
*
|
|
24
|
+
* Overlapping calls are serialized rather than run concurrently, because two
|
|
25
|
+
* passes interleaving their cancels and creates is exactly how duplicates
|
|
26
|
+
* appear.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Narrows the device set to the caller's declared domain.
|
|
31
|
+
*
|
|
32
|
+
* Everything outside it is invisible to this pass, which is what makes it safe
|
|
33
|
+
* to cancel strays: a notification from another domain or another library is
|
|
34
|
+
* never a stray, it simply is not ours.
|
|
35
|
+
*/
|
|
36
|
+
function inDomain(entry, input) {
|
|
37
|
+
if (entry.pushCreated && input.includePushCreated !== true) return false;
|
|
38
|
+
return entry.groupTag === input.domain;
|
|
39
|
+
}
|
|
40
|
+
function createReconciler(deps) {
|
|
41
|
+
const emit = deps.emit ?? (() => {});
|
|
42
|
+
const writer = (0, _writer.createScheduleWriter)(deps.engine);
|
|
43
|
+
let inFlight = Promise.resolve();
|
|
44
|
+
const run = async input => {
|
|
45
|
+
const startedAt = deps.now();
|
|
46
|
+
const zone = deps.timeZone();
|
|
47
|
+
const everything = await deps.engine.getPending();
|
|
48
|
+
const device = everything.filter(entry => inDomain(entry, input));
|
|
49
|
+
// The ceiling is the platform's, shared with every other domain, every
|
|
50
|
+
// recurring series and every directly scheduled notification. Budgeting a
|
|
51
|
+
// domain against the whole of it let two domains and a series overflow iOS's
|
|
52
|
+
// 64 together while each reported "nothing truncated" (NOT-11).
|
|
53
|
+
const heldElsewhere = everything.length - device.length;
|
|
54
|
+
const existingIds = new Set(device.map(entry => entry.id));
|
|
55
|
+
|
|
56
|
+
// Duplicates first: a repeated identifier is refused before anything else
|
|
57
|
+
// looks at it, so no later stage has to decide which copy it meant.
|
|
58
|
+
const {
|
|
59
|
+
unique,
|
|
60
|
+
rejected: duplicateRejections
|
|
61
|
+
} = (0, _duplicates.splitDuplicates)(input.desired, existingIds);
|
|
62
|
+
const rejected = [...duplicateRejections];
|
|
63
|
+
|
|
64
|
+
// Validate and anchor. A rejection here removes one entry; it never fails
|
|
65
|
+
// the pass, because 499 valid entries should not be lost to one bad one.
|
|
66
|
+
const valid = [];
|
|
67
|
+
const resolvedAt = new Map();
|
|
68
|
+
for (const request of unique) {
|
|
69
|
+
try {
|
|
70
|
+
(0, _index.validateRequest)(request, deps.resolveTone);
|
|
71
|
+
const anchored = (0, _anchor.anchorMoment)(request.moment, zone);
|
|
72
|
+
const resolution = (0, _resolveMoment.resolveMoment)(anchored.resolvedAt, deps.now());
|
|
73
|
+
resolvedAt.set(request.id, resolution.at);
|
|
74
|
+
valid.push(request);
|
|
75
|
+
} catch (error) {
|
|
76
|
+
rejected.push({
|
|
77
|
+
id: request.id,
|
|
78
|
+
code: (0, _errors.isNotificationError)(error) ? error.code : 'UNKNOWN',
|
|
79
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
80
|
+
occurrences: 1,
|
|
81
|
+
existingLeftInPlace: existingIds.has(request.id)
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Stop markers occupy real platform capacity, so the ceiling a consumer's
|
|
87
|
+
// notifications can actually use is smaller than the platform's own.
|
|
88
|
+
// Hiding that would let the package quietly reduce how many notifications
|
|
89
|
+
// fit and report a full set as registered when it was not.
|
|
90
|
+
// One pass: the outstanding stop markers are read once for the capacity and
|
|
91
|
+
// every operation below, not once per operation (NOT-08).
|
|
92
|
+
const pass = writer.pass();
|
|
93
|
+
const {
|
|
94
|
+
kept,
|
|
95
|
+
report: truncation
|
|
96
|
+
} = (0, _truncate.truncateToCeiling)(valid, resolvedAt, Math.max(0, (await pass.capacity()) - heldElsewhere));
|
|
97
|
+
if (truncation !== undefined) {
|
|
98
|
+
emit(_errors.DIAGNOSTIC_CODES.TRUNCATED_OVER_CEILING, `Desired set exceeded the platform ceiling of ${truncation.ceiling}; ${truncation.droppedCount} furthest-out entries were not registered. They are re-evaluated at the next window refresh.`, {
|
|
99
|
+
ceiling: truncation.ceiling,
|
|
100
|
+
dropped: truncation.droppedCount
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Every rejected identifier is protected from cancellation. A rejection
|
|
105
|
+
// means the package could not tell what the caller intended, and
|
|
106
|
+
// destroying the existing notification on that basis would be the worst
|
|
107
|
+
// available answer (FR-028c).
|
|
108
|
+
const {
|
|
109
|
+
operations,
|
|
110
|
+
unchanged
|
|
111
|
+
} = (0, _diff.diff)({
|
|
112
|
+
desired: kept,
|
|
113
|
+
resolvedAt,
|
|
114
|
+
device,
|
|
115
|
+
protectedIds: new Set(rejected.map(entry => entry.id))
|
|
116
|
+
});
|
|
117
|
+
const created = [];
|
|
118
|
+
const replaced = [];
|
|
119
|
+
const cancelled = [];
|
|
120
|
+
const approximate = !deps.canScheduleExactly();
|
|
121
|
+
await (0, _chunk.applyInChunks)(operations, async operation => {
|
|
122
|
+
if (operation.kind === 'cancel') {
|
|
123
|
+
await pass.cancel(operation.id);
|
|
124
|
+
cancelled.push(operation.id);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const request = operation.request;
|
|
128
|
+
const tone = deps.resolveTone(request.tone);
|
|
129
|
+
await pass.write({
|
|
130
|
+
request,
|
|
131
|
+
resolvedAt: operation.resolvedAt,
|
|
132
|
+
tone,
|
|
133
|
+
anchoringGeneration: (request.moment.anchoring ?? 'wallClock') === 'absolute' ? undefined : zone,
|
|
134
|
+
approximate
|
|
135
|
+
});
|
|
136
|
+
(operation.kind === 'create' ? created : replaced).push(operation.id);
|
|
137
|
+
}, {
|
|
138
|
+
size: deps.chunkSize
|
|
139
|
+
});
|
|
140
|
+
return {
|
|
141
|
+
domain: input.domain,
|
|
142
|
+
created,
|
|
143
|
+
replaced,
|
|
144
|
+
cancelled,
|
|
145
|
+
unchanged,
|
|
146
|
+
rejected,
|
|
147
|
+
truncated: truncation,
|
|
148
|
+
operationCount: operations.length,
|
|
149
|
+
durationMs: deps.now() - startedAt
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
return {
|
|
153
|
+
/**
|
|
154
|
+
* Serialized against itself: a second call waits for the first rather than
|
|
155
|
+
* interleaving with it.
|
|
156
|
+
*/
|
|
157
|
+
async reconcile(input) {
|
|
158
|
+
const next = inFlight.then(() => run(input), () => run(input));
|
|
159
|
+
inFlight = next.catch(() => undefined);
|
|
160
|
+
return next;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_errors","require","_anchor","_resolveMoment","_index","_duplicates","_truncate","_writer","_diff","_chunk","inDomain","entry","input","pushCreated","includePushCreated","groupTag","domain","createReconciler","deps","emit","writer","createScheduleWriter","engine","inFlight","Promise","resolve","run","startedAt","now","zone","timeZone","everything","getPending","device","filter","heldElsewhere","length","existingIds","Set","map","id","unique","rejected","duplicateRejections","splitDuplicates","desired","valid","resolvedAt","Map","request","validateRequest","resolveTone","anchored","anchorMoment","moment","resolution","resolveMoment","set","at","push","error","code","isNotificationError","reason","Error","message","String","occurrences","existingLeftInPlace","has","pass","kept","report","truncation","truncateToCeiling","Math","max","capacity","undefined","DIAGNOSTIC_CODES","TRUNCATED_OVER_CEILING","ceiling","droppedCount","dropped","operations","unchanged","diff","protectedIds","created","replaced","cancelled","approximate","canScheduleExactly","applyInChunks","operation","kind","cancel","tone","write","anchoringGeneration","anchoring","size","chunkSize","truncated","operationCount","durationMs","reconcile","next","then","catch"],"sourceRoot":"../../../src","sources":["reconcile/index.ts"],"mappings":";;;;;;AAiBA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAGA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,SAAA,GAAAL,OAAA;AACA,IAAAM,OAAA,GAAAN,OAAA;AACA,IAAAO,KAAA,GAAAP,OAAA;AACA,IAAAQ,MAAA,GAAAR,OAAA;AA3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASS,QAAQA,CAACC,KAAmB,EAAEC,KAAqB,EAAW;EACtE,IAAID,KAAK,CAACE,WAAW,IAAID,KAAK,CAACE,kBAAkB,KAAK,IAAI,EAAE,OAAO,KAAK;EACxE,OAAOH,KAAK,CAACI,QAAQ,KAAKH,KAAK,CAACI,MAAM;AACvC;AAEO,SAASC,gBAAgBA,CAACC,IAA2B,EAAE;EAC7D,MAAMC,IAAI,GAAGD,IAAI,CAACC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC;EACpC,MAAMC,MAAM,GAAG,IAAAC,4BAAoB,EAACH,IAAI,CAACI,MAAM,CAAC;EAChD,IAAIC,QAAkC,GAAGC,OAAO,CAACC,OAAO,CAAC,CAAwC;EAEjG,MAAMC,GAAG,GAAG,MAAOd,KAAqB,IAA+B;IACtE,MAAMe,SAAS,GAAGT,IAAI,CAACU,GAAG,CAAC,CAAC;IAC5B,MAAMC,IAAI,GAAGX,IAAI,CAACY,QAAQ,CAAC,CAAC;IAE5B,MAAMC,UAAU,GAAG,MAAMb,IAAI,CAACI,MAAM,CAACU,UAAU,CAAC,CAAC;IACjD,MAAMC,MAAM,GAAGF,UAAU,CAACG,MAAM,CAACvB,KAAK,IAAID,QAAQ,CAACC,KAAK,EAAEC,KAAK,CAAC,CAAC;IACjE;IACA;IACA;IACA;IACA,MAAMuB,aAAa,GAAGJ,UAAU,CAACK,MAAM,GAAGH,MAAM,CAACG,MAAM;IACvD,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACL,MAAM,CAACM,GAAG,CAAC5B,KAAK,IAAIA,KAAK,CAAC6B,EAAE,CAAC,CAAC;;IAE1D;IACA;IACA,MAAM;MAAEC,MAAM;MAAEC,QAAQ,EAAEC;IAAoB,CAAC,GAAG,IAAAC,2BAAe,EAAChC,KAAK,CAACiC,OAAO,EAAER,WAAW,CAAC;IAC7F,MAAMK,QAAyB,GAAG,CAAC,GAAGC,mBAAmB,CAAC;;IAE1D;IACA;IACA,MAAMG,KAA4B,GAAG,EAAE;IACvC,MAAMC,UAAU,GAAG,IAAIC,GAAG,CAAiB,CAAC;IAE5C,KAAK,MAAMC,OAAO,IAAIR,MAAM,EAAE;MAC7B,IAAI;QACH,IAAAS,sBAAe,EAACD,OAAO,EAAE/B,IAAI,CAACiC,WAAW,CAAC;QAC1C,MAAMC,QAAQ,GAAG,IAAAC,oBAAY,EAACJ,OAAO,CAACK,MAAM,EAAEzB,IAAI,CAAC;QACnD,MAAM0B,UAAU,GAAG,IAAAC,4BAAa,EAACJ,QAAQ,CAACL,UAAU,EAAE7B,IAAI,CAACU,GAAG,CAAC,CAAC,CAAC;QACjEmB,UAAU,CAACU,GAAG,CAACR,OAAO,CAACT,EAAE,EAAEe,UAAU,CAACG,EAAE,CAAC;QACzCZ,KAAK,CAACa,IAAI,CAACV,OAAO,CAAC;MACpB,CAAC,CAAC,OAAOW,KAAK,EAAE;QACflB,QAAQ,CAACiB,IAAI,CAAC;UACbnB,EAAE,EAAES,OAAO,CAACT,EAAE;UACdqB,IAAI,EAAE,IAAAC,2BAAmB,EAACF,KAAK,CAAC,GAAGA,KAAK,CAACC,IAAI,GAAG,SAAS;UACzDE,MAAM,EAAEH,KAAK,YAAYI,KAAK,GAAGJ,KAAK,CAACK,OAAO,GAAGC,MAAM,CAACN,KAAK,CAAC;UAC9DO,WAAW,EAAE,CAAC;UACdC,mBAAmB,EAAE/B,WAAW,CAACgC,GAAG,CAACpB,OAAO,CAACT,EAAE;QAChD,CAAC,CAAC;MACH;IACD;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM8B,IAAI,GAAGlD,MAAM,CAACkD,IAAI,CAAC,CAAC;IAC1B,MAAM;MAAEC,IAAI;MAAEC,MAAM,EAAEC;IAAW,CAAC,GAAG,IAAAC,2BAAiB,EACrD5B,KAAK,EACLC,UAAU,EACV4B,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAMN,IAAI,CAACO,QAAQ,CAAC,CAAC,IAAI1C,aAAa,CACpD,CAAC;IAED,IAAIsC,UAAU,KAAKK,SAAS,EAAE;MAC7B3D,IAAI,CACH4D,wBAAgB,CAACC,sBAAsB,EACvC,gDAAgDP,UAAU,CAACQ,OAAO,KAAKR,UAAU,CAACS,YAAY,8FAA8F,EAC5L;QAAED,OAAO,EAAER,UAAU,CAACQ,OAAO;QAAEE,OAAO,EAAEV,UAAU,CAACS;MAAa,CACjE,CAAC;IACF;;IAEA;IACA;IACA;IACA;IACA,MAAM;MAAEE,UAAU;MAAEC;IAAU,CAAC,GAAG,IAAAC,UAAI,EAAC;MACtCzC,OAAO,EAAE0B,IAAI;MACbxB,UAAU;MACVd,MAAM;MACNsD,YAAY,EAAE,IAAIjD,GAAG,CAACI,QAAQ,CAACH,GAAG,CAAC5B,KAAK,IAAIA,KAAK,CAAC6B,EAAE,CAAC;IACtD,CAAC,CAAC;IAEF,MAAMgD,OAAiB,GAAG,EAAE;IAC5B,MAAMC,QAAkB,GAAG,EAAE;IAC7B,MAAMC,SAAmB,GAAG,EAAE;IAC9B,MAAMC,WAAW,GAAG,CAACzE,IAAI,CAAC0E,kBAAkB,CAAC,CAAC;IAE9C,MAAM,IAAAC,oBAAa,EAClBT,UAAU,EACV,MAAMU,SAAS,IAAI;MAClB,IAAIA,SAAS,CAACC,IAAI,KAAK,QAAQ,EAAE;QAChC,MAAMzB,IAAI,CAAC0B,MAAM,CAACF,SAAS,CAACtD,EAAE,CAAC;QAC/BkD,SAAS,CAAC/B,IAAI,CAACmC,SAAS,CAACtD,EAAE,CAAC;QAC5B;MACD;MAEA,MAAMS,OAAO,GAAG6C,SAAS,CAAC7C,OAAQ;MAClC,MAAMgD,IAAI,GAAG/E,IAAI,CAACiC,WAAW,CAACF,OAAO,CAACgD,IAAI,CAAE;MAC5C,MAAM3B,IAAI,CAAC4B,KAAK,CAAC;QAChBjD,OAAO;QACPF,UAAU,EAAE+C,SAAS,CAAC/C,UAAW;QACjCkD,IAAI;QACJE,mBAAmB,EAClB,CAAClD,OAAO,CAACK,MAAM,CAAC8C,SAAS,IAAI,WAAW,MAAM,UAAU,GAAGtB,SAAS,GAAGjD,IAAI;QAC5E8D;MACD,CAAC,CAAC;MACF,CAACG,SAAS,CAACC,IAAI,KAAK,QAAQ,GAAGP,OAAO,GAAGC,QAAQ,EAAE9B,IAAI,CAACmC,SAAS,CAACtD,EAAE,CAAC;IACtE,CAAC,EACD;MAAE6D,IAAI,EAAEnF,IAAI,CAACoF;IAAU,CACxB,CAAC;IAED,OAAO;MACNtF,MAAM,EAAEJ,KAAK,CAACI,MAAM;MACpBwE,OAAO;MACPC,QAAQ;MACRC,SAAS;MACTL,SAAS;MACT3C,QAAQ;MACR6D,SAAS,EAAE9B,UAAU;MACrB+B,cAAc,EAAEpB,UAAU,CAAChD,MAAM;MACjCqE,UAAU,EAAEvF,IAAI,CAACU,GAAG,CAAC,CAAC,GAAGD;IAC1B,CAAC;EACF,CAAC;EAED,OAAO;IACN;AACF;AACA;AACA;IACE,MAAM+E,SAASA,CAAC9F,KAAqB,EAA4B;MAChE,MAAM+F,IAAI,GAAGpF,QAAQ,CAACqF,IAAI,CACzB,MAAMlF,GAAG,CAACd,KAAK,CAAC,EAChB,MAAMc,GAAG,CAACd,KAAK,CAChB,CAAC;MACDW,QAAQ,GAAGoF,IAAI,CAACE,KAAK,CAAC,MAAM/B,SAAS,CAA6B;MAClE,OAAO6B,IAAI;IACZ;EACD,CAAC;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.truncateToCeiling = truncateToCeiling;
|
|
7
|
+
/**
|
|
8
|
+
* Platform-ceiling truncation.
|
|
9
|
+
*
|
|
10
|
+
* iOS keeps only the 64 soonest pending notifications and silently discards the
|
|
11
|
+
* rest. The package computes the same cut deliberately, so the outcome is
|
|
12
|
+
* reported rather than discovered as missing notifications.
|
|
13
|
+
*
|
|
14
|
+
* Soonest-first is the only rule that degrades gracefully: dropped entries are
|
|
15
|
+
* not lost, they are simply not yet registered, and each window refresh
|
|
16
|
+
* registers those that have moved into range.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Keeps the `ceiling` soonest entries.
|
|
21
|
+
*
|
|
22
|
+
* Ties on the delivery instant are broken by identifier so the cut is
|
|
23
|
+
* deterministic — otherwise two runs over the same data could drop different
|
|
24
|
+
* entries and the idempotence guarantee would not hold.
|
|
25
|
+
*/
|
|
26
|
+
function truncateToCeiling(desired, resolvedAt, ceiling) {
|
|
27
|
+
if (desired.length <= ceiling) {
|
|
28
|
+
return {
|
|
29
|
+
kept: desired
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const ordered = [...desired].sort((a, b) => {
|
|
33
|
+
const aAt = resolvedAt.get(a.id) ?? a.moment.at;
|
|
34
|
+
const bAt = resolvedAt.get(b.id) ?? b.moment.at;
|
|
35
|
+
if (aAt !== bAt) return aAt - bAt;
|
|
36
|
+
return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
|
|
37
|
+
});
|
|
38
|
+
const kept = ordered.slice(0, ceiling);
|
|
39
|
+
const dropped = ordered.slice(ceiling);
|
|
40
|
+
return {
|
|
41
|
+
kept,
|
|
42
|
+
report: {
|
|
43
|
+
ceiling,
|
|
44
|
+
droppedCount: dropped.length,
|
|
45
|
+
droppedIds: dropped.map(entry => entry.id),
|
|
46
|
+
reEvaluatedOnNextRefresh: true
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=truncate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["truncateToCeiling","desired","resolvedAt","ceiling","length","kept","ordered","sort","a","b","aAt","get","id","moment","at","bAt","slice","dropped","report","droppedCount","droppedIds","map","entry","reEvaluatedOnNextRefresh"],"sourceRoot":"../../../src","sources":["reconcile/truncate.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,iBAAiBA,CAChCC,OAAuC,EACvCC,UAAuC,EACvCC,OAAe,EACK;EACpB,IAAIF,OAAO,CAACG,MAAM,IAAID,OAAO,EAAE;IAC9B,OAAO;MAAEE,IAAI,EAAEJ;IAAQ,CAAC;EACzB;EAEA,MAAMK,OAAO,GAAG,CAAC,GAAGL,OAAO,CAAC,CAACM,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;IAC3C,MAAMC,GAAG,GAAGR,UAAU,CAACS,GAAG,CAACH,CAAC,CAACI,EAAE,CAAC,IAAIJ,CAAC,CAACK,MAAM,CAACC,EAAE;IAC/C,MAAMC,GAAG,GAAGb,UAAU,CAACS,GAAG,CAACF,CAAC,CAACG,EAAE,CAAC,IAAIH,CAAC,CAACI,MAAM,CAACC,EAAE;IAC/C,IAAIJ,GAAG,KAAKK,GAAG,EAAE,OAAOL,GAAG,GAAGK,GAAG;IACjC,OAAOP,CAAC,CAACI,EAAE,GAAGH,CAAC,CAACG,EAAE,GAAG,CAAC,CAAC,GAAGJ,CAAC,CAACI,EAAE,GAAGH,CAAC,CAACG,EAAE,GAAG,CAAC,GAAG,CAAC;EAC9C,CAAC,CAAC;EAEF,MAAMP,IAAI,GAAGC,OAAO,CAACU,KAAK,CAAC,CAAC,EAAEb,OAAO,CAAC;EACtC,MAAMc,OAAO,GAAGX,OAAO,CAACU,KAAK,CAACb,OAAO,CAAC;EAEtC,OAAO;IACNE,IAAI;IACJa,MAAM,EAAE;MACPf,OAAO;MACPgB,YAAY,EAAEF,OAAO,CAACb,MAAM;MAC5BgB,UAAU,EAAEH,OAAO,CAACI,GAAG,CAACC,KAAK,IAAIA,KAAK,CAACV,EAAE,CAAC;MAC1CW,wBAAwB,EAAE;IAC3B;EACD,CAAC;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CLOCK_DISCONTINUITY_THRESHOLD_MS = void 0;
|
|
7
|
+
exports.guardAgainstClockChange = guardAgainstClockChange;
|
|
8
|
+
/**
|
|
9
|
+
* Clock-discontinuity bounding.
|
|
10
|
+
*
|
|
11
|
+
* A device clock moved backwards makes past occurrences look future again. Left
|
|
12
|
+
* alone, the next expansion would re-register every occurrence the user already
|
|
13
|
+
* received, and moving the clock forward again would fire them all at once.
|
|
14
|
+
*
|
|
15
|
+
* The guard is deliberately blunt: occurrences at or before the last horizon the
|
|
16
|
+
* series already expanded through are never re-emitted. The package would
|
|
17
|
+
* rather lose an occurrence after a manual clock change than deliver a burst of
|
|
18
|
+
* notifications for events that already happened.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/** A jump larger than this is treated as a clock change rather than ordinary drift. */
|
|
22
|
+
const CLOCK_DISCONTINUITY_THRESHOLD_MS = exports.CLOCK_DISCONTINUITY_THRESHOLD_MS = 60 * 60 * 1000;
|
|
23
|
+
/**
|
|
24
|
+
* Drops occurrences that a clock discontinuity would otherwise resurrect.
|
|
25
|
+
*
|
|
26
|
+
* Forward jumps are detected and reported but not filtered: an occurrence that
|
|
27
|
+
* became due because time genuinely passed is legitimate, and the platform's
|
|
28
|
+
* own delivery is the right place for it to be resolved.
|
|
29
|
+
*/
|
|
30
|
+
function guardAgainstClockChange(input) {
|
|
31
|
+
const {
|
|
32
|
+
occurrences,
|
|
33
|
+
previousHorizon,
|
|
34
|
+
now,
|
|
35
|
+
previousNow
|
|
36
|
+
} = input;
|
|
37
|
+
let discontinuity = 'none';
|
|
38
|
+
if (previousNow !== undefined) {
|
|
39
|
+
const delta = now - previousNow;
|
|
40
|
+
if (delta < -CLOCK_DISCONTINUITY_THRESHOLD_MS) {
|
|
41
|
+
discontinuity = 'backwards';
|
|
42
|
+
} else if (delta > CLOCK_DISCONTINUITY_THRESHOLD_MS * 24) {
|
|
43
|
+
discontinuity = 'forwards';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (previousHorizon === undefined) {
|
|
47
|
+
return {
|
|
48
|
+
occurrences,
|
|
49
|
+
suppressed: 0,
|
|
50
|
+
discontinuity
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Anything at or before the previously-expanded horizon was already handled
|
|
55
|
+
// once. Re-emitting it would mean delivering a notification for an event the
|
|
56
|
+
// user has already seen.
|
|
57
|
+
const kept = occurrences.filter(occurrence => occurrence.at > previousHorizon || occurrence.at > now);
|
|
58
|
+
const alreadyHandled = occurrences.filter(occurrence => occurrence.at <= previousHorizon && occurrence.at <= now);
|
|
59
|
+
return {
|
|
60
|
+
occurrences: kept,
|
|
61
|
+
suppressed: alreadyHandled.length,
|
|
62
|
+
discontinuity
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=clock-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CLOCK_DISCONTINUITY_THRESHOLD_MS","exports","guardAgainstClockChange","input","occurrences","previousHorizon","now","previousNow","discontinuity","undefined","delta","suppressed","kept","filter","occurrence","at","alreadyHandled","length"],"sourceRoot":"../../../src","sources":["recurrence/clock-guard.ts"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACO,MAAMA,gCAAgC,GAAAC,OAAA,CAAAD,gCAAA,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAiB9D;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,uBAAuBA,CAACC,KAAsB,EAAoB;EACjF,MAAM;IAAEC,WAAW;IAAEC,eAAe;IAAEC,GAAG;IAAEC;EAAY,CAAC,GAAGJ,KAAK;EAEhE,IAAIK,aAAgD,GAAG,MAAM;EAC7D,IAAID,WAAW,KAAKE,SAAS,EAAE;IAC9B,MAAMC,KAAK,GAAGJ,GAAG,GAAGC,WAAW;IAC/B,IAAIG,KAAK,GAAG,CAACV,gCAAgC,EAAE;MAC9CQ,aAAa,GAAG,WAAW;IAC5B,CAAC,MAAM,IAAIE,KAAK,GAAGV,gCAAgC,GAAG,EAAE,EAAE;MACzDQ,aAAa,GAAG,UAAU;IAC3B;EACD;EAEA,IAAIH,eAAe,KAAKI,SAAS,EAAE;IAClC,OAAO;MAAEL,WAAW;MAAEO,UAAU,EAAE,CAAC;MAAEH;IAAc,CAAC;EACrD;;EAEA;EACA;EACA;EACA,MAAMI,IAAI,GAAGR,WAAW,CAACS,MAAM,CAC9BC,UAAU,IAAIA,UAAU,CAACC,EAAE,GAAGV,eAAe,IAAIS,UAAU,CAACC,EAAE,GAAGT,GAClE,CAAC;EACD,MAAMU,cAAc,GAAGZ,WAAW,CAACS,MAAM,CACxCC,UAAU,IAAIA,UAAU,CAACC,EAAE,IAAIV,eAAe,IAAIS,UAAU,CAACC,EAAE,IAAIT,GACpE,CAAC;EAED,OAAO;IACNF,WAAW,EAAEQ,IAAI;IACjBD,UAAU,EAAEK,cAAc,CAACC,MAAM;IACjCT;EACD,CAAC;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.expand = expand;
|
|
7
|
+
exports.occurrenceId = occurrenceId;
|
|
8
|
+
exports.occurrenceKey = occurrenceKey;
|
|
9
|
+
var _errors = require("../contract/errors.js");
|
|
10
|
+
var _anchor = require("../schedule/anchor.js");
|
|
11
|
+
/**
|
|
12
|
+
* Recurrence expansion.
|
|
13
|
+
*
|
|
14
|
+
* Written first-party rather than delegated to an RFC 5545 library, because the
|
|
15
|
+
* daylight-saving rules here are specified behaviour (FR-008) rather than a
|
|
16
|
+
* dependency's opinion, and because expansion must be provable with no device.
|
|
17
|
+
*
|
|
18
|
+
* Determinism is the hard requirement: the same rule, anchoring mode, zone, and
|
|
19
|
+
* evaluation moment must produce exactly the same occurrences in the same order
|
|
20
|
+
* on every run and on both platforms. Without that, reconciliation could not be
|
|
21
|
+
* idempotent over a recurring series.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
const pad = (value, width) => String(value).padStart(width, '0');
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The calendar slot of an occurrence: the date and clock time the rule asked
|
|
28
|
+
* for, in the frame the series is anchored in. Fixed-width, so comparing two
|
|
29
|
+
* keys as strings compares them in time.
|
|
30
|
+
*/
|
|
31
|
+
function occurrenceKey(parts) {
|
|
32
|
+
return `${pad(parts.year, 4)}${pad(parts.month, 2)}${pad(parts.day, 2)}T${pad(parts.hour, 2)}${pad(parts.minute, 2)}`;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Occurrence identity.
|
|
37
|
+
*
|
|
38
|
+
* Derived from the series and the calendar slot, not the instant. Re-expanding
|
|
39
|
+
* the same series produces the same identifiers, which is what lets a refresh
|
|
40
|
+
* recognize an occurrence it already scheduled. Until 0.4.0 the instant was
|
|
41
|
+
* used, so after a time-zone change re-anchoring kept the old identifier while
|
|
42
|
+
* the window refresh derived a new one, and the occurrence was scheduled twice.
|
|
43
|
+
*/
|
|
44
|
+
function occurrenceId(seriesId, slot) {
|
|
45
|
+
return `${seriesId}#${typeof slot === 'string' ? slot : occurrenceKey(slot)}`;
|
|
46
|
+
}
|
|
47
|
+
const MS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
48
|
+
function validatePattern(pattern) {
|
|
49
|
+
const {
|
|
50
|
+
hour,
|
|
51
|
+
minute
|
|
52
|
+
} = pattern;
|
|
53
|
+
if (!Number.isInteger(hour) || hour < 0 || hour > 23) {
|
|
54
|
+
throw new _errors.NotificationError(_errors.DIAGNOSTIC_CODES.INVALID_RECURRENCE, 'Recurrence hour must be an integer from 0 to 23.', {
|
|
55
|
+
hour
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
if (!Number.isInteger(minute) || minute < 0 || minute > 59) {
|
|
59
|
+
throw new _errors.NotificationError(_errors.DIAGNOSTIC_CODES.INVALID_RECURRENCE, 'Recurrence minute must be an integer from 0 to 59.', {
|
|
60
|
+
minute
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const interval = pattern.interval ?? 1;
|
|
64
|
+
if (!Number.isInteger(interval) || interval < 1) {
|
|
65
|
+
throw new _errors.NotificationError(_errors.DIAGNOSTIC_CODES.INVALID_RECURRENCE, 'Recurrence interval must be a positive integer.', {
|
|
66
|
+
interval
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if (pattern.kind === 'weekly') {
|
|
70
|
+
if (pattern.weekdays.length === 0) {
|
|
71
|
+
throw new _errors.NotificationError(_errors.DIAGNOSTIC_CODES.INVALID_RECURRENCE, 'A weekly recurrence must name at least one weekday.');
|
|
72
|
+
}
|
|
73
|
+
for (const day of pattern.weekdays) {
|
|
74
|
+
if (!Number.isInteger(day) || day < 0 || day > 6) {
|
|
75
|
+
throw new _errors.NotificationError(_errors.DIAGNOSTIC_CODES.INVALID_RECURRENCE, 'Weekdays must be integers from 0 (Sunday) to 6 (Saturday).', {
|
|
76
|
+
day
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (pattern.kind === 'monthlyByDay') {
|
|
82
|
+
if (!Number.isInteger(pattern.dayOfMonth) || pattern.dayOfMonth < 1 || pattern.dayOfMonth > 31) {
|
|
83
|
+
throw new _errors.NotificationError(_errors.DIAGNOSTIC_CODES.INVALID_RECURRENCE, 'Day of month must be an integer from 1 to 31.', {
|
|
84
|
+
dayOfMonth: pattern.dayOfMonth
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Calendar date in the anchoring zone, carrying the pattern's clock time. */
|
|
91
|
+
function partsFor(date, pattern) {
|
|
92
|
+
return {
|
|
93
|
+
year: date.year,
|
|
94
|
+
month: date.month,
|
|
95
|
+
day: date.day,
|
|
96
|
+
hour: pattern.hour,
|
|
97
|
+
minute: pattern.minute,
|
|
98
|
+
second: 0
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function addDays(parts, days) {
|
|
102
|
+
const shifted = new Date(Date.UTC(parts.year, parts.month - 1, parts.day) + days * MS_PER_DAY);
|
|
103
|
+
return {
|
|
104
|
+
year: shifted.getUTCFullYear(),
|
|
105
|
+
month: shifted.getUTCMonth() + 1,
|
|
106
|
+
day: shifted.getUTCDate(),
|
|
107
|
+
hour: parts.hour,
|
|
108
|
+
minute: parts.minute,
|
|
109
|
+
second: 0
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function weekdayOf(parts) {
|
|
113
|
+
return new Date(Date.UTC(parts.year, parts.month - 1, parts.day)).getUTCDay();
|
|
114
|
+
}
|
|
115
|
+
function daysInMonth(year, month) {
|
|
116
|
+
return new Date(Date.UTC(year, month, 0)).getUTCDate();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Expands a rule inside the lookahead window.
|
|
120
|
+
*
|
|
121
|
+
* Bounded by both a duration and a count, because either alone fails: a
|
|
122
|
+
* duration alone lets a frequent series exhaust the platform ceiling, and a
|
|
123
|
+
* count alone leaves an annual series scheduled a decade out.
|
|
124
|
+
*/
|
|
125
|
+
function expand(input) {
|
|
126
|
+
const {
|
|
127
|
+
rule,
|
|
128
|
+
from,
|
|
129
|
+
lookahead,
|
|
130
|
+
timeZone
|
|
131
|
+
} = input;
|
|
132
|
+
validatePattern(rule.pattern);
|
|
133
|
+
const anchoring = rule.anchoring ?? 'wallClock';
|
|
134
|
+
const horizon = from + lookahead.days * MS_PER_DAY;
|
|
135
|
+
const start = Math.max(rule.startAt ?? from, from);
|
|
136
|
+
const {
|
|
137
|
+
lastEmittedKey
|
|
138
|
+
} = input;
|
|
139
|
+
const occurrences = [];
|
|
140
|
+
let cursor = partsFor((0, _anchor.partsInZone)(start, timeZone), rule.pattern);
|
|
141
|
+
// Position of the next not-yet-counted occurrence, for count-limited rules.
|
|
142
|
+
let index = input.alreadyEmitted ?? 0;
|
|
143
|
+
let exhausted = false;
|
|
144
|
+
|
|
145
|
+
// Bounded independently of the emit conditions so a pattern that matches
|
|
146
|
+
// nothing (e.g. day 31 in February) can never spin forever.
|
|
147
|
+
const maxIterations = lookahead.days * 2 + 400;
|
|
148
|
+
for (let iteration = 0; iteration < maxIterations; iteration += 1) {
|
|
149
|
+
if (occurrences.length >= lookahead.occurrencesPerSeries) break;
|
|
150
|
+
const candidate = nextCandidate(cursor, rule.pattern, iteration === 0);
|
|
151
|
+
if (candidate === undefined) break;
|
|
152
|
+
cursor = candidate;
|
|
153
|
+
const at = anchoring === 'absolute' ? Date.UTC(cursor.year, cursor.month - 1, cursor.day, cursor.hour, cursor.minute, 0) : (0, _anchor.instantForParts)(cursor, timeZone);
|
|
154
|
+
if (at > horizon) break;
|
|
155
|
+
if (at > start) {
|
|
156
|
+
if (rule.end.kind === 'untilDate' && at > rule.end.until) {
|
|
157
|
+
exhausted = true;
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
const key = occurrenceKey(cursor);
|
|
161
|
+
const previouslyEmitted = lastEmittedKey !== undefined && key <= lastEmittedKey;
|
|
162
|
+
if (!previouslyEmitted && rule.end.kind === 'count' && index >= rule.end.count) {
|
|
163
|
+
exhausted = true;
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
occurrences.push({
|
|
167
|
+
id: occurrenceId(rule.id, key),
|
|
168
|
+
key,
|
|
169
|
+
seriesId: rule.id,
|
|
170
|
+
at,
|
|
171
|
+
anchoring,
|
|
172
|
+
previouslyEmitted
|
|
173
|
+
});
|
|
174
|
+
if (!previouslyEmitted) index += 1;
|
|
175
|
+
}
|
|
176
|
+
cursor = advance(cursor, rule.pattern);
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
occurrences,
|
|
180
|
+
expandedThrough: horizon,
|
|
181
|
+
exhausted
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** Moves the cursor onto the first date the pattern actually matches. */
|
|
186
|
+
function nextCandidate(cursor, pattern, isFirst) {
|
|
187
|
+
if (pattern.kind === 'daily') return cursor;
|
|
188
|
+
if (pattern.kind === 'weekly') {
|
|
189
|
+
const wanted = new Set(pattern.weekdays);
|
|
190
|
+
let candidate = cursor;
|
|
191
|
+
for (let step = 0; step < 14; step += 1) {
|
|
192
|
+
if (wanted.has(weekdayOf(candidate))) return candidate;
|
|
193
|
+
candidate = addDays(candidate, 1);
|
|
194
|
+
}
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
const monthly = pattern;
|
|
198
|
+
let candidate = cursor;
|
|
199
|
+
// Months shorter than the requested day are skipped rather than clamped: a
|
|
200
|
+
// caller asking for the 31st means the 31st, and inventing the 28th would be
|
|
201
|
+
// the package deciding something it was not asked to decide.
|
|
202
|
+
for (let step = 0; step < 48; step += 1) {
|
|
203
|
+
if (daysInMonth(candidate.year, candidate.month) >= monthly.dayOfMonth) {
|
|
204
|
+
const onDay = {
|
|
205
|
+
...candidate,
|
|
206
|
+
day: monthly.dayOfMonth
|
|
207
|
+
};
|
|
208
|
+
if (isFirst || onDay.day >= candidate.day || step > 0) return onDay;
|
|
209
|
+
}
|
|
210
|
+
candidate = firstOfNextMonth(candidate);
|
|
211
|
+
}
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
function firstOfNextMonth(parts) {
|
|
215
|
+
const month = parts.month === 12 ? 1 : parts.month + 1;
|
|
216
|
+
const year = parts.month === 12 ? parts.year + 1 : parts.year;
|
|
217
|
+
return {
|
|
218
|
+
...parts,
|
|
219
|
+
year,
|
|
220
|
+
month,
|
|
221
|
+
day: 1
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/** Steps the cursor past the occurrence just produced. */
|
|
226
|
+
function advance(cursor, pattern) {
|
|
227
|
+
const interval = pattern.interval ?? 1;
|
|
228
|
+
if (pattern.kind === 'daily') {
|
|
229
|
+
return addDays(cursor, pattern.interval ?? 1);
|
|
230
|
+
}
|
|
231
|
+
if (pattern.kind === 'weekly') {
|
|
232
|
+
const wanted = [...new Set(pattern.weekdays)].sort((a, b) => a - b);
|
|
233
|
+
const current = weekdayOf(cursor);
|
|
234
|
+
const next = wanted.find(day => day > current);
|
|
235
|
+
|
|
236
|
+
// Wrapping into a new week is where the interval applies — stepping day by
|
|
237
|
+
// day within the week would multiply the interval by the weekday count.
|
|
238
|
+
return next === undefined ? addDays(cursor, 7 * interval - current + wanted[0]) : addDays(cursor, next - current);
|
|
239
|
+
}
|
|
240
|
+
const monthly = pattern;
|
|
241
|
+
let year = cursor.year;
|
|
242
|
+
let month = cursor.month + interval;
|
|
243
|
+
while (month > 12) {
|
|
244
|
+
month -= 12;
|
|
245
|
+
year += 1;
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
...cursor,
|
|
249
|
+
year,
|
|
250
|
+
month,
|
|
251
|
+
day: Math.min(monthly.dayOfMonth, daysInMonth(year, month))
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=expand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_errors","require","_anchor","pad","value","width","String","padStart","occurrenceKey","parts","year","month","day","hour","minute","occurrenceId","seriesId","slot","MS_PER_DAY","validatePattern","pattern","Number","isInteger","NotificationError","DIAGNOSTIC_CODES","INVALID_RECURRENCE","interval","kind","weekdays","length","dayOfMonth","partsFor","date","second","addDays","days","shifted","Date","UTC","getUTCFullYear","getUTCMonth","getUTCDate","weekdayOf","getUTCDay","daysInMonth","expand","input","rule","from","lookahead","timeZone","anchoring","horizon","start","Math","max","startAt","lastEmittedKey","occurrences","cursor","partsInZone","index","alreadyEmitted","exhausted","maxIterations","iteration","occurrencesPerSeries","candidate","nextCandidate","undefined","at","instantForParts","end","until","key","previouslyEmitted","count","push","id","advance","expandedThrough","isFirst","wanted","Set","step","has","monthly","onDay","firstOfNextMonth","sort","a","b","current","next","find","min"],"sourceRoot":"../../../src","sources":["recurrence/expand.ts"],"mappings":"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","ignoreList":[]}
|