@fatagnus/dink-sync 1.0.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/README.md +312 -0
- package/dist/client/attachment.d.ts +225 -0
- package/dist/client/attachment.d.ts.map +1 -0
- package/dist/client/attachment.js +402 -0
- package/dist/client/attachment.js.map +1 -0
- package/dist/client/binary-encoding.d.ts +45 -0
- package/dist/client/binary-encoding.d.ts.map +1 -0
- package/dist/client/binary-encoding.js +90 -0
- package/dist/client/binary-encoding.js.map +1 -0
- package/dist/client/collection.d.ts +10 -0
- package/dist/client/collection.d.ts.map +1 -0
- package/dist/client/collection.js +924 -0
- package/dist/client/collection.js.map +1 -0
- package/dist/client/compression.d.ts +56 -0
- package/dist/client/compression.d.ts.map +1 -0
- package/dist/client/compression.js +173 -0
- package/dist/client/compression.js.map +1 -0
- package/dist/client/crdt/index.d.ts +2 -0
- package/dist/client/crdt/index.d.ts.map +1 -0
- package/dist/client/crdt/index.js +2 -0
- package/dist/client/crdt/index.js.map +1 -0
- package/dist/client/crdt/yjs-doc.d.ts +88 -0
- package/dist/client/crdt/yjs-doc.d.ts.map +1 -0
- package/dist/client/crdt/yjs-doc.js +123 -0
- package/dist/client/crdt/yjs-doc.js.map +1 -0
- package/dist/client/index.d.ts +66 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +233 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/mock-transport.d.ts +155 -0
- package/dist/client/mock-transport.d.ts.map +1 -0
- package/dist/client/mock-transport.js +292 -0
- package/dist/client/mock-transport.js.map +1 -0
- package/dist/client/network-detector.d.ts +65 -0
- package/dist/client/network-detector.d.ts.map +1 -0
- package/dist/client/network-detector.js +147 -0
- package/dist/client/network-detector.js.map +1 -0
- package/dist/client/provisioning.d.ts +126 -0
- package/dist/client/provisioning.d.ts.map +1 -0
- package/dist/client/provisioning.js +125 -0
- package/dist/client/provisioning.js.map +1 -0
- package/dist/client/signal.d.ts +13 -0
- package/dist/client/signal.d.ts.map +1 -0
- package/dist/client/signal.js +27 -0
- package/dist/client/signal.js.map +1 -0
- package/dist/client/sync-engine.d.ts +298 -0
- package/dist/client/sync-engine.d.ts.map +1 -0
- package/dist/client/sync-engine.js +904 -0
- package/dist/client/sync-engine.js.map +1 -0
- package/dist/client/synced-edge.d.ts +109 -0
- package/dist/client/synced-edge.d.ts.map +1 -0
- package/dist/client/synced-edge.js +179 -0
- package/dist/client/synced-edge.js.map +1 -0
- package/dist/client/synced-offline-edge-types.d.ts +540 -0
- package/dist/client/synced-offline-edge-types.d.ts.map +1 -0
- package/dist/client/synced-offline-edge-types.js +10 -0
- package/dist/client/synced-offline-edge-types.js.map +1 -0
- package/dist/client/synced-offline-edge.d.ts +54 -0
- package/dist/client/synced-offline-edge.d.ts.map +1 -0
- package/dist/client/synced-offline-edge.js +731 -0
- package/dist/client/synced-offline-edge.js.map +1 -0
- package/dist/client/transport.d.ts +202 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/transport.js +409 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/client/types.d.ts +622 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +60 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/validation.d.ts +61 -0
- package/dist/client/validation.d.ts.map +1 -0
- package/dist/client/validation.js +57 -0
- package/dist/client/validation.js.map +1 -0
- package/dist/client/versioning.d.ts +134 -0
- package/dist/client/versioning.d.ts.map +1 -0
- package/dist/client/versioning.js +304 -0
- package/dist/client/versioning.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/persistence/encryption.d.ts +114 -0
- package/dist/persistence/encryption.d.ts.map +1 -0
- package/dist/persistence/encryption.js +286 -0
- package/dist/persistence/encryption.js.map +1 -0
- package/dist/persistence/index.d.ts +21 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +20 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/memory.d.ts +32 -0
- package/dist/persistence/memory.d.ts.map +1 -0
- package/dist/persistence/memory.js +57 -0
- package/dist/persistence/memory.js.map +1 -0
- package/dist/persistence/migrations.d.ts +106 -0
- package/dist/persistence/migrations.d.ts.map +1 -0
- package/dist/persistence/migrations.js +176 -0
- package/dist/persistence/migrations.js.map +1 -0
- package/dist/persistence/pending-queue.d.ts +109 -0
- package/dist/persistence/pending-queue.d.ts.map +1 -0
- package/dist/persistence/pending-queue.js +249 -0
- package/dist/persistence/pending-queue.js.map +1 -0
- package/dist/persistence/pglite.d.ts +72 -0
- package/dist/persistence/pglite.d.ts.map +1 -0
- package/dist/persistence/pglite.js +126 -0
- package/dist/persistence/pglite.js.map +1 -0
- package/dist/persistence/quota-manager.d.ts +134 -0
- package/dist/persistence/quota-manager.d.ts.map +1 -0
- package/dist/persistence/quota-manager.js +242 -0
- package/dist/persistence/quota-manager.js.map +1 -0
- package/dist/persistence/types.d.ts +54 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +2 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/react/OfflineEdgeProvider.d.ts +91 -0
- package/dist/react/OfflineEdgeProvider.d.ts.map +1 -0
- package/dist/react/OfflineEdgeProvider.js +127 -0
- package/dist/react/OfflineEdgeProvider.js.map +1 -0
- package/dist/react/SyncedOfflineEdgeProvider.d.ts +105 -0
- package/dist/react/SyncedOfflineEdgeProvider.d.ts.map +1 -0
- package/dist/react/SyncedOfflineEdgeProvider.js +138 -0
- package/dist/react/SyncedOfflineEdgeProvider.js.map +1 -0
- package/dist/react/index.d.ts +50 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +51 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/useCollection.d.ts +77 -0
- package/dist/react/useCollection.d.ts.map +1 -0
- package/dist/react/useCollection.js +113 -0
- package/dist/react/useCollection.js.map +1 -0
- package/dist/react/useCollectionSyncMode.d.ts +61 -0
- package/dist/react/useCollectionSyncMode.d.ts.map +1 -0
- package/dist/react/useCollectionSyncMode.js +93 -0
- package/dist/react/useCollectionSyncMode.js.map +1 -0
- package/dist/react/useConnectionState.d.ts +44 -0
- package/dist/react/useConnectionState.d.ts.map +1 -0
- package/dist/react/useConnectionState.js +46 -0
- package/dist/react/useConnectionState.js.map +1 -0
- package/dist/react/useDocumentSyncStatus.d.ts +72 -0
- package/dist/react/useDocumentSyncStatus.d.ts.map +1 -0
- package/dist/react/useDocumentSyncStatus.js +110 -0
- package/dist/react/useDocumentSyncStatus.js.map +1 -0
- package/dist/react/useOfflineEdge.d.ts +58 -0
- package/dist/react/useOfflineEdge.d.ts.map +1 -0
- package/dist/react/useOfflineEdge.js +54 -0
- package/dist/react/useOfflineEdge.js.map +1 -0
- package/dist/react/usePendingChanges.d.ts +67 -0
- package/dist/react/usePendingChanges.d.ts.map +1 -0
- package/dist/react/usePendingChanges.js +90 -0
- package/dist/react/usePendingChanges.js.map +1 -0
- package/dist/react/useRejectedDocuments.d.ts +112 -0
- package/dist/react/useRejectedDocuments.d.ts.map +1 -0
- package/dist/react/useRejectedDocuments.js +213 -0
- package/dist/react/useRejectedDocuments.js.map +1 -0
- package/dist/react/useSyncControls.d.ts +96 -0
- package/dist/react/useSyncControls.d.ts.map +1 -0
- package/dist/react/useSyncControls.js +112 -0
- package/dist/react/useSyncControls.js.map +1 -0
- package/dist/react/useSyncProgress.d.ts +78 -0
- package/dist/react/useSyncProgress.d.ts.map +1 -0
- package/dist/react/useSyncProgress.js +90 -0
- package/dist/react/useSyncProgress.js.map +1 -0
- package/dist/react/useSyncRejected.d.ts +47 -0
- package/dist/react/useSyncRejected.d.ts.map +1 -0
- package/dist/react/useSyncRejected.js +55 -0
- package/dist/react/useSyncRejected.js.map +1 -0
- package/dist/react/useSyncStatus.d.ts +56 -0
- package/dist/react/useSyncStatus.d.ts.map +1 -0
- package/dist/react/useSyncStatus.js +59 -0
- package/dist/react/useSyncStatus.js.map +1 -0
- package/dist/react/useSyncedOfflineEdge.d.ts +69 -0
- package/dist/react/useSyncedOfflineEdge.d.ts.map +1 -0
- package/dist/react/useSyncedOfflineEdge.js +65 -0
- package/dist/react/useSyncedOfflineEdge.js.map +1 -0
- package/dist/service-worker/index.d.ts +7 -0
- package/dist/service-worker/index.d.ts.map +1 -0
- package/dist/service-worker/index.js +7 -0
- package/dist/service-worker/index.js.map +1 -0
- package/dist/service-worker/sync-worker.d.ts +230 -0
- package/dist/service-worker/sync-worker.d.ts.map +1 -0
- package/dist/service-worker/sync-worker.js +471 -0
- package/dist/service-worker/sync-worker.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synced-offline-edge.js","sourceRoot":"","sources":["../../src/client/synced-offline-edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0BH,OAAO,EAAE,YAAY,EAAuB,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAA6D,MAAM,kBAAkB,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAyChD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAuC;IAEvC,MAAM,EACJ,WAAW,EACX,MAAM,EACN,UAAU,GAAG,EAAE,EACf,KAAK,GAAG,EAAE,EACV,SAAS,EACT,UAAU,GAAG,GAAG,EAChB,UAAU,GAAG,CAAC,GACf,GAAG,OAAO,CAAC;IAEZ,sDAAsD;IACtD,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAoB,CAAC;IAExD,6BAA6B;IAC7B,KAAK,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,6BAA6B;IAC7B,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAgD,CAAC;IAQxF,MAAM,mBAAmB,GAAyB,EAAE,CAAC;IACrD,MAAM,kBAAkB,GAAwB,EAAE,CAAC;IACnD,MAAM,kBAAkB,GAAwB,EAAE,CAAC;IACnD,MAAM,qBAAqB,GAA2B,EAAE,CAAC;IAEzD,gCAAgC;IAChC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,WAAY,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAClH,CAAC;IACD,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,qBAAqB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACrC,kEAAkE;YAClE,MAAM,SAAS,GAAG;gBAChB,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAW;gBAC/B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;gBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;aAC3B,CAAC;YACF,OAAO,KAAK,CAAC,cAAe,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,SAAgB,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;IACvD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAC;IAExD,uDAAuD;IACvD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAuB,CAAC,CAAC,2BAA2B;IAElF,uFAAuF;IACvF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAqC,CAAC,CAAC,qCAAqC;IAE7G,cAAc;IACd,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,mDAAmD;IACnD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEhD,mCAAmC;IACnC,KAAK,UAAU,mBAAmB,CAAC,OAA0B;QAC3D,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;oBACrB,OAAO,KAAK,CAAC,CAAC,cAAc;gBAC9B,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;gBAClD,mCAAmC;YACrC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,oBAAoB;IACnC,CAAC;IAED,kCAAkC;IAClC,KAAK,UAAU,kBAAkB,CAAC,OAAyB;QACzD,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,KAAK,UAAU,kBAAkB,CAAC,OAAyB;QACzD,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,KAAK,UAAU,qBAAqB,CAAC,OAA4B;QAC/D,KAAK,MAAM,QAAQ,IAAI,qBAAqB,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE9C,iFAAiF;IACjF,MAAM,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvF,SAAS,0BAA0B,CAAC,aAAwB;QAC1D,OAAO;YACL,GAAG,aAAa;YAChB,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE;YACxC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE;YACxC,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE;YAC1C,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;YACtD,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE;YACtC,UAAU,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE;YAC5C,OAAO,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC;YAC5E,mBAAmB,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC;YAC1H,eAAe,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC;YACxF,SAAS,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC;YAExH,KAAK,CAAC,SAAS,CAAC,UAAkB,EAAE,OAAqB;gBACvD,wDAAwD;gBACxD,MAAM,eAAe,GAAiB,EAAE,CAAC;gBACzC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;gBAE1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC;wBAC9C,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,UAAU,EAAE,MAAM,CAAC,KAAK;wBACxB,OAAO,EAAE,MAAM,CAAC,IAAI;qBACrB,CAAC,CAAC;oBAEH,IAAI,aAAa,EAAE,CAAC;wBAClB,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC/B,CAAC;yBAAM,CAAC;wBACN,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAClC,mDAAmD;wBACnD,mBAAmB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC;gBAED,gEAAgE;gBAChE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvB,OAAO,EAAE,IAAI;wBACb,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,UAAU,EAAE,CAAC,CAAC,UAAU;qBACzB,CAAC,CAAC,CAAC;gBACN,CAAC;gBAED,sCAAsC;gBACtC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;gBAE7E,uCAAuC;gBACvC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAwB,CAAC;gBACpD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;oBAC7B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACf,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBACrB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;wBACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;oBACrE,CAAC;oBACD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;gBACjG,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,MAAM,UAAU,GAAG,gBAAgB,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU;QACV,UAAU;QACV,WAAW;QACX,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IAEH,0DAA0D;IAC1D,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;QAE1C,MAAM,kBAAkB,CAAC;YACvB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU;YACV,SAAS;SACV,CAAC,CAAC;QAEH,uBAAuB;QACvB,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,qBAAqB,CAAC;YAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,KAAK,EAAE;gBACL,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;gBACtB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;aACzB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAEtD,4DAA4D;QAC5D,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,iCAAiC;QACjC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE1B,MAAM,kBAAkB,CAAC;YACvB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;IAE3B,4EAA4E;IAC5E,MAAM,qBAAqB,GAAoC,YAAY,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE7G,+DAA+D;IAC/D,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE;QACjC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,sFAAsF;IACtF,sEAAsE;IACtE,MAAM,aAAa,GAAsB;QACvC,UAAU,CAA2B,IAAY;YAC/C,sCAAsC;YACtC,IAAI,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAA8B,CAAC;YAC7D,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG,gBAAgB,CAAI,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC7C,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,eAAe,EAAE,qBAAwE;QACzF,SAAS,CAAC,KAAa;YACrB,uDAAuD;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,cAAc,CAAC,KAAa;YAC1B,yCAAyC;QAC3C,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,KAAa;YAClC,4CAA4C;QAC9C,CAAC;QACD,oBAAoB;YAClB,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,uBAAuB,CAAC,SAAyD;YAC/E,qEAAqE;YACrE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAClB,CAAC;KACF,CAAC;IAEF;;;OAGG;IACH,SAAS,WAAW,CAAC,UAAkB;QACrC,OAAO,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC;IACvD,CAAC;IAED;;;OAGG;IACH,SAAS,WAAW,CAAC,UAAkB,EAAE,IAAc;QACrD,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,CAAC,8BAA8B;QACxC,CAAC;QAED,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAE1C,oBAAoB;QACpB,KAAK,MAAM,QAAQ,IAAI,uBAAuB,EAAE,CAAC;YAC/C,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,4EAA4E;QAC5E,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC5D,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACpD,wEAAwE;gBACxE,CAAC,KAAK,IAAI,EAAE;oBACV,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,iBAAiB,EAAE,CAAC;wBACjD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;wBACxD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;4BAC7B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;wBAC5B,CAAC;oBACH,CAAC;oBACD,iBAAiB,CAAC,KAAK,EAAE,CAAC;gBAC5B,CAAC,CAAC,EAAE,CAAC;YACP,CAAC;YACD,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,gBAAgB,CAAC,QAAsD;QAC9E,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO,GAAG,EAAE;YACV,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,gBAAgB,CAAC,cAAsB,EAAE,KAAa;QACnE,MAAM,GAAG,GAAG,GAAG,cAAc,IAAI,KAAK,EAAE,CAAC;QACzC,IAAI,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACjE,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,UAAU,kBAAkB,CAC/B,cAAsB,EACtB,KAAa,EACb,MAAkB;QAElB,MAAM,IAAI,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;QAEzC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,6CAA6C;YAC7C,kDAAkD;YAClD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,6EAA6E;YAC7E,kEAAkE;YAClE,IAAI,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;gBACpB,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEnB,6EAA6E;YAC7E,8DAA8D;YAC9D,4DAA4D;YAC5D,iEAAiE;YACjE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC3C,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;YACjE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnC,CAAC;YACD,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAC5D,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,IAAI,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;gBACpB,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAC5D,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,cAAc,CAAC,cAAsB;QAClD,MAAM,IAAI,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;QAEzC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,iEAAiE;YACjE,OAAO;QACT,CAAC;QAED,4DAA4D;QAC5D,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAChE,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACpD,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,iBAAiB,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;gBAC5D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YACD,0CAA0C;YAC1C,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,uDAAuD;QACvD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;YAC1C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;oBAC9B,8CAA8C;oBAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChC,UAAU,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,YAAY,CAAC,cAAsB,EAAE,KAAa;QAC/D,MAAM,IAAI,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;QAEzC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,cAAc,IAAI,KAAK,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,KAAK,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;YACvC,UAAU,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;QAED,sBAAsB;QACtB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,OAAO;QACpB,iDAAiD;QACjD,KAAK,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,IAAI,iBAAiB,EAAE,CAAC;YACpE,MAAM,IAAI,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;YACzC,IAAI,IAAI,KAAK,UAAU,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACtD,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,iBAAiB,EAAE,CAAC;oBACjD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;oBAC5D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;wBAC7B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBACD,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;YAC1C,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;YAErC,IAAI,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;gBACrD,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,cAAc,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,SAAS,6BAA6B,CAA2B,IAAY;QAC3E,oCAAoC;QACpC,IAAI,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAA8B,CAAC;QACxE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,gBAAgB,CAAI,IAAI,EAAE,WAAW,CAAC,CAAC;YACxD,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,gBAAgB,GAA+B;YACnD,IAAI;YAEJ,KAAK,CAAC,MAAM,CAAC,IAAmB,EAAE,aAA6B;gBAC7D,MAAM,GAAG,GAAG,MAAM,cAAe,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBAE9D,+BAA+B;gBAC/B,MAAM,MAAM,GAAG,MAAM,cAAe,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC1D,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACjD,CAAC;gBAED,OAAO,GAAG,CAAC;YACb,CAAC;YAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAA4B,EAAE,aAA6B;gBAClF,MAAM,GAAG,GAAG,MAAM,cAAe,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;gBAElE,+BAA+B;gBAC/B,MAAM,MAAM,GAAG,MAAM,cAAe,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBACtD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC7C,CAAC;gBAED,OAAO,GAAG,CAAC;YACb,CAAC;YAED,KAAK,CAAC,MAAM,CAAC,EAAU;gBACrB,gCAAgC;gBAChC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAE/C,iBAAiB;gBACjB,MAAM,cAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAEjC,mCAAmC;gBACnC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;oBACxB,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;oBACzC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;oBACtC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAC/B,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBACnC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC3C,MAAM,eAAe,GAAG,YAAY,CAAC,mBAAmB,EAAE,CAAC;oBAC3D,YAAY,CAAC,OAAO,EAAE,CAAC;oBAEvB,MAAM,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAED,KAAK,CAAC,GAAG,CAAC,EAAU;gBAClB,OAAO,cAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;YAED,KAAK,CAAC,IAAI;gBACR,OAAO,cAAe,CAAC,IAAI,EAAE,CAAC;YAChC,CAAC;YAED,KAAK,CAAC,KAAK,CAAC,YAA6B;gBACvC,OAAO,cAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC7C,CAAC;YAED,SAAS,CAAC,QAA6C;gBACrD,OAAO,cAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7C,CAAC;YAED,cAAc,CAAC,QAA+C;gBAC5D,OAAO,cAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAClD,CAAC;YAED,KAAK,CAAC,aAAa,CAAC,EAAU;gBAC5B,OAAO,cAAe,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;YAED,KAAK,CAAC,SAAS,CAAC,EAAU;gBACxB,OAAO,cAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC;YAED,KAAK,CAAC,mBAAmB;gBACvB,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;oBAC1C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;wBAC5D,KAAK,EAAE,CAAC;oBACV,CAAC;gBACH,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;SACF,CAAC;QAEF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,kDAAkD;IAClD,MAAM,IAAI,GAAsB;QAC9B,oBAAoB;QACpB,UAAU,CAA2B,IAAY;YAC/C,OAAO,6BAA6B,CAAI,IAAI,CAAC,CAAC;QAChD,CAAC;QAED,oBAAoB;QACpB,gBAAgB;YACd,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,aAAa;YACX,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,0BAA0B;QAC1B,eAAe,EAAE,qBAAqB;QAEtC,2BAA2B;QAC3B,kBAAkB;YAChB,OAAO,UAAU,CAAC,kBAAkB,EAAE,CAAC;QACzC,CAAC;QAED,WAAW;YACT,OAAO,UAAU,CAAC,kBAAkB,EAAE,KAAK,QAAQ,CAAC;QACtD,CAAC;QAED,kBAAkB,CAAC,QAA0C;YAC3D,OAAO,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,0BAA0B;QAC1B,WAAW;QACX,WAAW;QACX,gBAAgB;QAEhB,kBAAkB;QAClB,eAAe,CAAC,QAA4B;YAC1C,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,kBAAkB,CAAC,QAA4B;YAC7C,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,cAAc,CAAC,QAA2B;YACxC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,iBAAiB,CAAC,QAA2B;YAC3C,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,cAAc,CAAC,QAA2B;YACxC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,iBAAiB,CAAC,QAA2B;YAC3C,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,iBAAiB,CAAC,QAA8B;YAC9C,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,oBAAoB,CAAC,QAA8B;YACjD,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,KAAK,CAAC,KAAK,CAAC,UAAmB;YAC7B,4EAA4E;YAC5E,MAAM,SAAS,GAAG,UAAU,CAAC;YAC7B,IAAI,SAAS,EAAE,CAAC;gBACd,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,MAAM,OAAO,EAAE,CAAC;gBAClB,CAAC;gBAED,yCAAyC;gBACzC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;oBAAS,CAAC;gBACT,wCAAwC;gBACxC,IAAI,SAAS,EAAE,CAAC;oBACd,UAAU,CAAC,SAAS,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO;QACP,cAAc;QACd,YAAY;QAEZ,oBAAoB;QACpB,KAAK;YACH,UAAU,GAAG,IAAI,CAAC;YAClB,UAAU,CAAC,SAAS,EAAE,CAAC;QACzB,CAAC;QAED,MAAM;YACJ,UAAU,GAAG,KAAK,CAAC;YACnB,UAAU,CAAC,QAAQ,EAAE,CAAC;YAEtB,8BAA8B;YAC9B,KAAK,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,cAAc,EAAE,CAAC;gBACvD,MAAM,IAAI,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;gBACzC,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBACxC,cAAc,CAAC,cAAc,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QAED,QAAQ;YACN,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,+CAA+C;QAC/C,SAAS;YACP,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;QAED,UAAU;YACR,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;QAED,YAAY;YACV,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC;QAED,mDAAmD;QACnD,SAAS;YACP,UAAU,CAAC,SAAS,EAAE,CAAC;QACzB,CAAC;QAED,QAAQ;YACN,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;QAED,kBAAkB;QAClB,iBAAiB;YACf,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC5C,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;oBAC9B,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,cAAuB;YAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC1C,IAAI,cAAc,EAAE,CAAC;oBACnB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,CAAC,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;wBACtE,KAAK,EAAE,CAAC;oBACV,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;wBAC9B,KAAK,EAAE,CAAC;oBACV,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,YAAY;QACZ,KAAK,CAAC,OAAO;YACX,iCAAiC;YACjC,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3C,MAAM,UAAU,CAAC,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC;YACD,cAAc,CAAC,KAAK,EAAE,CAAC;YACvB,WAAW,CAAC,KAAK,EAAE,CAAC;YACpB,mBAAmB,CAAC,KAAK,EAAE,CAAC;YAC5B,uBAAuB,CAAC,KAAK,EAAE,CAAC;YAChC,cAAc,CAAC,KAAK,EAAE,CAAC;YACvB,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC1B,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/B,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9B,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9B,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC;YACjC,mBAAmB,CAAC,KAAK,EAAE,CAAC;YAC5B,aAAa,CAAC,KAAK,EAAE,CAAC;YAEtB,sBAAsB;YACtB,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;YAE3B,6CAA6C;YAC7C,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;KACF,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NatsTransport - NATS connection wrapper for sync operations
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - Connection lifecycle (connect, disconnect, reconnect)
|
|
6
|
+
* - Publishing sync deltas to center
|
|
7
|
+
* - Subscribing to sync updates from center
|
|
8
|
+
* - Request-reply for state vector exchange
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Connection state for the transport
|
|
12
|
+
*/
|
|
13
|
+
export type TransportState = 'disconnected' | 'connecting' | 'connected' | 'reconnecting';
|
|
14
|
+
/**
|
|
15
|
+
* Configuration for NatsTransport
|
|
16
|
+
*/
|
|
17
|
+
export interface NatsTransportConfig {
|
|
18
|
+
/** NATS server URL (e.g., 'nats://localhost:4222') */
|
|
19
|
+
readonly serverUrl: string;
|
|
20
|
+
/** API key for authentication */
|
|
21
|
+
readonly apiKey: string;
|
|
22
|
+
/** Application ID (extracted from API key or provided) */
|
|
23
|
+
readonly appId?: string;
|
|
24
|
+
/** Edge ID (extracted from API key or provided) */
|
|
25
|
+
readonly edgeId?: string;
|
|
26
|
+
/** Reconnect wait time in ms (default: 2000) */
|
|
27
|
+
readonly reconnectWait?: number;
|
|
28
|
+
/** Max reconnect attempts (-1 for unlimited, default: -1) */
|
|
29
|
+
readonly maxReconnects?: number;
|
|
30
|
+
/** Request timeout in ms (default: 10000) */
|
|
31
|
+
readonly requestTimeout?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Sync batch to send to center
|
|
35
|
+
*/
|
|
36
|
+
export interface SyncBatch {
|
|
37
|
+
readonly edgeId: string;
|
|
38
|
+
readonly changes: SyncChange[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Individual sync change
|
|
42
|
+
*/
|
|
43
|
+
export interface SyncChange {
|
|
44
|
+
readonly collection: string;
|
|
45
|
+
readonly docId: string;
|
|
46
|
+
readonly data: Uint8Array;
|
|
47
|
+
readonly timestamp: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Sync update received from center
|
|
51
|
+
*/
|
|
52
|
+
export interface SyncUpdate {
|
|
53
|
+
readonly collection: string;
|
|
54
|
+
readonly docId: string;
|
|
55
|
+
readonly data: Uint8Array;
|
|
56
|
+
readonly timestamp?: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Sync response from center (for request-reply)
|
|
60
|
+
*/
|
|
61
|
+
export interface SyncResponse {
|
|
62
|
+
readonly success: boolean;
|
|
63
|
+
readonly docId?: string;
|
|
64
|
+
readonly collection?: string;
|
|
65
|
+
readonly error?: {
|
|
66
|
+
readonly code: string;
|
|
67
|
+
readonly field?: string;
|
|
68
|
+
readonly message: string;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* State vector request/response
|
|
73
|
+
*/
|
|
74
|
+
export interface StateVectorExchange {
|
|
75
|
+
readonly collection: string;
|
|
76
|
+
readonly docId: string;
|
|
77
|
+
readonly vector?: Uint8Array;
|
|
78
|
+
readonly delta?: Uint8Array;
|
|
79
|
+
readonly error?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Callback types
|
|
83
|
+
*/
|
|
84
|
+
export type StateChangeCallback = (state: TransportState) => void;
|
|
85
|
+
export type UpdateCallback = (update: SyncUpdate) => void;
|
|
86
|
+
export type ErrorCallback = (error: Error) => void;
|
|
87
|
+
/**
|
|
88
|
+
* NatsTransport handles NATS connection and messaging for sync operations
|
|
89
|
+
*/
|
|
90
|
+
export declare class NatsTransport {
|
|
91
|
+
private readonly config;
|
|
92
|
+
private nc;
|
|
93
|
+
private updateSub;
|
|
94
|
+
private state;
|
|
95
|
+
private stateCallbacks;
|
|
96
|
+
private updateCallbacks;
|
|
97
|
+
private errorCallbacks;
|
|
98
|
+
constructor(config: NatsTransportConfig);
|
|
99
|
+
/**
|
|
100
|
+
* Get current transport state
|
|
101
|
+
*/
|
|
102
|
+
getState(): TransportState;
|
|
103
|
+
/**
|
|
104
|
+
* Get app ID
|
|
105
|
+
*/
|
|
106
|
+
getAppId(): string;
|
|
107
|
+
/**
|
|
108
|
+
* Get edge ID
|
|
109
|
+
*/
|
|
110
|
+
getEdgeId(): string;
|
|
111
|
+
/**
|
|
112
|
+
* Subscribe to state changes
|
|
113
|
+
*/
|
|
114
|
+
onStateChange(callback: StateChangeCallback): () => void;
|
|
115
|
+
/**
|
|
116
|
+
* Subscribe to sync updates from center
|
|
117
|
+
*/
|
|
118
|
+
onUpdate(callback: UpdateCallback): () => void;
|
|
119
|
+
/**
|
|
120
|
+
* Subscribe to transport errors
|
|
121
|
+
*/
|
|
122
|
+
onError(callback: ErrorCallback): () => void;
|
|
123
|
+
/**
|
|
124
|
+
* Connect to NATS server
|
|
125
|
+
*/
|
|
126
|
+
connect(): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Disconnect from NATS server
|
|
129
|
+
*/
|
|
130
|
+
disconnect(): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Send a batch of sync changes to center
|
|
133
|
+
* Returns responses for each change (success or rejection)
|
|
134
|
+
*/
|
|
135
|
+
sendBatch(collection: string, changes: SyncChange[]): Promise<SyncResponse[]>;
|
|
136
|
+
/**
|
|
137
|
+
* Publish changes without waiting for response (fire-and-forget)
|
|
138
|
+
* Use this for lower latency when rejection handling is done separately
|
|
139
|
+
*/
|
|
140
|
+
publish(collection: string, changes: SyncChange[]): void;
|
|
141
|
+
/**
|
|
142
|
+
* Exchange state vectors with center for a document
|
|
143
|
+
*/
|
|
144
|
+
exchangeStateVector(collection: string, docId: string, localVector?: Uint8Array): Promise<StateVectorExchange>;
|
|
145
|
+
/**
|
|
146
|
+
* Request a snapshot for a document
|
|
147
|
+
*/
|
|
148
|
+
requestSnapshot(collection: string, docId: string): Promise<Uint8Array | null>;
|
|
149
|
+
/**
|
|
150
|
+
* Force push local state to server, overriding server state entirely.
|
|
151
|
+
* This sends the full document state with a force flag.
|
|
152
|
+
*/
|
|
153
|
+
forcePush(collection: string, docId: string, stateVector: Uint8Array, changes: Uint8Array[]): Promise<ForcePushResponse>;
|
|
154
|
+
private setState;
|
|
155
|
+
private emitError;
|
|
156
|
+
private emitUpdate;
|
|
157
|
+
private setupConnectionHandlers;
|
|
158
|
+
private subscribeToUpdates;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Force push request structure
|
|
162
|
+
*/
|
|
163
|
+
export interface ForcePushRequest {
|
|
164
|
+
readonly collection: string;
|
|
165
|
+
readonly docId: string;
|
|
166
|
+
readonly stateVector: Uint8Array;
|
|
167
|
+
readonly changes: Uint8Array[];
|
|
168
|
+
readonly force: true;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Force push response structure
|
|
172
|
+
*/
|
|
173
|
+
export interface ForcePushResponse {
|
|
174
|
+
readonly success: boolean;
|
|
175
|
+
readonly error?: {
|
|
176
|
+
readonly code: string;
|
|
177
|
+
readonly message: string;
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Transport interface for dependency injection (allows mocking in tests)
|
|
182
|
+
*/
|
|
183
|
+
export interface Transport {
|
|
184
|
+
getState(): TransportState;
|
|
185
|
+
getAppId(): string;
|
|
186
|
+
getEdgeId(): string;
|
|
187
|
+
onStateChange(callback: StateChangeCallback): () => void;
|
|
188
|
+
onUpdate(callback: UpdateCallback): () => void;
|
|
189
|
+
onError(callback: ErrorCallback): () => void;
|
|
190
|
+
connect(): Promise<void>;
|
|
191
|
+
disconnect(): Promise<void>;
|
|
192
|
+
sendBatch(collection: string, changes: SyncChange[]): Promise<SyncResponse[]>;
|
|
193
|
+
publish(collection: string, changes: SyncChange[]): void;
|
|
194
|
+
exchangeStateVector(collection: string, docId: string, localVector?: Uint8Array): Promise<StateVectorExchange>;
|
|
195
|
+
requestSnapshot(collection: string, docId: string): Promise<Uint8Array | null>;
|
|
196
|
+
forcePush(collection: string, docId: string, stateVector: Uint8Array, changes: Uint8Array[]): Promise<ForcePushResponse>;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Create a NatsTransport instance
|
|
200
|
+
*/
|
|
201
|
+
export declare function createNatsTransport(config: NatsTransportConfig): Transport;
|
|
202
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NatsTransport - NATS connection wrapper for sync operations
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - Connection lifecycle (connect, disconnect, reconnect)
|
|
6
|
+
* - Publishing sync deltas to center
|
|
7
|
+
* - Subscribing to sync updates from center
|
|
8
|
+
* - Request-reply for state vector exchange
|
|
9
|
+
*/
|
|
10
|
+
import { connect, StringCodec, NatsError, ErrorCode } from 'nats';
|
|
11
|
+
import { encodeBinaryForTransport, decodeBinaryFromTransport } from './binary-encoding.js';
|
|
12
|
+
const sc = StringCodec();
|
|
13
|
+
/**
|
|
14
|
+
* Extract app_id and edge_id from an edge API key.
|
|
15
|
+
* Format: dk_<env>_ed_<appID>_<edgeID>_<random>
|
|
16
|
+
*/
|
|
17
|
+
function extractKeyInfo(key) {
|
|
18
|
+
if (!key || !key.includes('_ed_')) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const parts = key.split('_');
|
|
22
|
+
if (parts.length < 6) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
appId: parts[3],
|
|
27
|
+
edgeId: parts[4],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* NatsTransport handles NATS connection and messaging for sync operations
|
|
32
|
+
*/
|
|
33
|
+
export class NatsTransport {
|
|
34
|
+
config;
|
|
35
|
+
nc = null;
|
|
36
|
+
updateSub = null;
|
|
37
|
+
state = 'disconnected';
|
|
38
|
+
stateCallbacks = new Set();
|
|
39
|
+
updateCallbacks = new Set();
|
|
40
|
+
errorCallbacks = new Set();
|
|
41
|
+
constructor(config) {
|
|
42
|
+
// Extract app_id and edge_id from API key if not provided
|
|
43
|
+
const keyInfo = extractKeyInfo(config.apiKey);
|
|
44
|
+
const appId = config.appId ?? keyInfo?.appId;
|
|
45
|
+
const edgeId = config.edgeId ?? keyInfo?.edgeId;
|
|
46
|
+
if (!appId) {
|
|
47
|
+
throw new Error('appId is required (provide it directly or use an edge API key)');
|
|
48
|
+
}
|
|
49
|
+
if (!edgeId) {
|
|
50
|
+
throw new Error('edgeId is required (provide it directly or use an edge API key)');
|
|
51
|
+
}
|
|
52
|
+
this.config = {
|
|
53
|
+
serverUrl: config.serverUrl,
|
|
54
|
+
apiKey: config.apiKey,
|
|
55
|
+
appId,
|
|
56
|
+
edgeId,
|
|
57
|
+
reconnectWait: config.reconnectWait ?? 2000,
|
|
58
|
+
maxReconnects: config.maxReconnects ?? -1,
|
|
59
|
+
requestTimeout: config.requestTimeout ?? 10000,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get current transport state
|
|
64
|
+
*/
|
|
65
|
+
getState() {
|
|
66
|
+
return this.state;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get app ID
|
|
70
|
+
*/
|
|
71
|
+
getAppId() {
|
|
72
|
+
return this.config.appId;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get edge ID
|
|
76
|
+
*/
|
|
77
|
+
getEdgeId() {
|
|
78
|
+
return this.config.edgeId;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Subscribe to state changes
|
|
82
|
+
*/
|
|
83
|
+
onStateChange(callback) {
|
|
84
|
+
this.stateCallbacks.add(callback);
|
|
85
|
+
callback(this.state);
|
|
86
|
+
return () => this.stateCallbacks.delete(callback);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Subscribe to sync updates from center
|
|
90
|
+
*/
|
|
91
|
+
onUpdate(callback) {
|
|
92
|
+
this.updateCallbacks.add(callback);
|
|
93
|
+
return () => this.updateCallbacks.delete(callback);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Subscribe to transport errors
|
|
97
|
+
*/
|
|
98
|
+
onError(callback) {
|
|
99
|
+
this.errorCallbacks.add(callback);
|
|
100
|
+
return () => this.errorCallbacks.delete(callback);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Connect to NATS server
|
|
104
|
+
*/
|
|
105
|
+
async connect() {
|
|
106
|
+
if (this.state === 'connected') {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this.setState('connecting');
|
|
110
|
+
try {
|
|
111
|
+
this.nc = await connect({
|
|
112
|
+
servers: this.config.serverUrl,
|
|
113
|
+
name: `sync-${this.config.edgeId}`,
|
|
114
|
+
token: this.config.apiKey,
|
|
115
|
+
reconnectTimeWait: this.config.reconnectWait,
|
|
116
|
+
maxReconnectAttempts: this.config.maxReconnects,
|
|
117
|
+
});
|
|
118
|
+
// Handle connection events
|
|
119
|
+
this.setupConnectionHandlers();
|
|
120
|
+
// Subscribe to sync updates
|
|
121
|
+
await this.subscribeToUpdates();
|
|
122
|
+
this.setState('connected');
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
this.setState('disconnected');
|
|
126
|
+
throw err;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Disconnect from NATS server
|
|
131
|
+
*/
|
|
132
|
+
async disconnect() {
|
|
133
|
+
if (!this.nc) {
|
|
134
|
+
this.setState('disconnected');
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
// Unsubscribe from updates
|
|
138
|
+
if (this.updateSub) {
|
|
139
|
+
this.updateSub.unsubscribe();
|
|
140
|
+
this.updateSub = null;
|
|
141
|
+
}
|
|
142
|
+
// Drain and close connection
|
|
143
|
+
try {
|
|
144
|
+
await this.nc.drain();
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Ignore drain errors
|
|
148
|
+
}
|
|
149
|
+
this.nc = null;
|
|
150
|
+
this.setState('disconnected');
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Send a batch of sync changes to center
|
|
154
|
+
* Returns responses for each change (success or rejection)
|
|
155
|
+
*/
|
|
156
|
+
async sendBatch(collection, changes) {
|
|
157
|
+
if (!this.nc || this.state !== 'connected') {
|
|
158
|
+
throw new Error('Not connected to NATS');
|
|
159
|
+
}
|
|
160
|
+
const batch = {
|
|
161
|
+
edgeId: this.config.edgeId,
|
|
162
|
+
changes,
|
|
163
|
+
};
|
|
164
|
+
const subject = `$SYNC.${this.config.appId}.${collection}.delta`;
|
|
165
|
+
// Encode binary data fields as base64 for transport while keeping metadata as JSON
|
|
166
|
+
const batchWithEncodedData = {
|
|
167
|
+
edgeId: batch.edgeId,
|
|
168
|
+
changes: batch.changes.map(change => ({
|
|
169
|
+
collection: change.collection,
|
|
170
|
+
docId: change.docId,
|
|
171
|
+
data: encodeBinaryForTransport(change.data), // Binary -> base64
|
|
172
|
+
timestamp: change.timestamp,
|
|
173
|
+
})),
|
|
174
|
+
};
|
|
175
|
+
const data = sc.encode(JSON.stringify(batchWithEncodedData));
|
|
176
|
+
try {
|
|
177
|
+
// Use request-reply to get acknowledgment/rejection
|
|
178
|
+
const response = await this.nc.request(subject, data, {
|
|
179
|
+
timeout: this.config.requestTimeout,
|
|
180
|
+
});
|
|
181
|
+
const respData = JSON.parse(sc.decode(response.data));
|
|
182
|
+
// Handle batch response
|
|
183
|
+
if (Array.isArray(respData.results)) {
|
|
184
|
+
return respData.results;
|
|
185
|
+
}
|
|
186
|
+
// Single response for entire batch
|
|
187
|
+
if (respData.error) {
|
|
188
|
+
return changes.map(c => ({
|
|
189
|
+
success: false,
|
|
190
|
+
docId: c.docId,
|
|
191
|
+
collection: c.collection,
|
|
192
|
+
error: respData.error,
|
|
193
|
+
}));
|
|
194
|
+
}
|
|
195
|
+
return changes.map(c => ({
|
|
196
|
+
success: true,
|
|
197
|
+
docId: c.docId,
|
|
198
|
+
collection: c.collection,
|
|
199
|
+
}));
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
// Check if it's a timeout - changes might still be applied
|
|
203
|
+
if (err instanceof NatsError && err.code === ErrorCode.Timeout) {
|
|
204
|
+
// For timeout, we return unknown status - caller should retry
|
|
205
|
+
throw new Error('Sync request timed out');
|
|
206
|
+
}
|
|
207
|
+
throw err;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Publish changes without waiting for response (fire-and-forget)
|
|
212
|
+
* Use this for lower latency when rejection handling is done separately
|
|
213
|
+
*/
|
|
214
|
+
publish(collection, changes) {
|
|
215
|
+
if (!this.nc || this.state !== 'connected') {
|
|
216
|
+
throw new Error('Not connected to NATS');
|
|
217
|
+
}
|
|
218
|
+
const batch = {
|
|
219
|
+
edgeId: this.config.edgeId,
|
|
220
|
+
changes,
|
|
221
|
+
};
|
|
222
|
+
const subject = `$SYNC.${this.config.appId}.${collection}.delta`;
|
|
223
|
+
// Encode binary data fields as base64 for transport while keeping metadata as JSON
|
|
224
|
+
const batchWithEncodedData = {
|
|
225
|
+
edgeId: batch.edgeId,
|
|
226
|
+
changes: batch.changes.map(change => ({
|
|
227
|
+
collection: change.collection,
|
|
228
|
+
docId: change.docId,
|
|
229
|
+
data: encodeBinaryForTransport(change.data), // Binary -> base64
|
|
230
|
+
timestamp: change.timestamp,
|
|
231
|
+
})),
|
|
232
|
+
};
|
|
233
|
+
const data = sc.encode(JSON.stringify(batchWithEncodedData));
|
|
234
|
+
this.nc.publish(subject, data);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Exchange state vectors with center for a document
|
|
238
|
+
*/
|
|
239
|
+
async exchangeStateVector(collection, docId, localVector) {
|
|
240
|
+
if (!this.nc || this.state !== 'connected') {
|
|
241
|
+
throw new Error('Not connected to NATS');
|
|
242
|
+
}
|
|
243
|
+
const subject = `$SYNC.${this.config.appId}.${collection}.vector`;
|
|
244
|
+
const request = {
|
|
245
|
+
doc_id: docId,
|
|
246
|
+
collection,
|
|
247
|
+
client_id: this.config.edgeId,
|
|
248
|
+
vector: localVector ? encodeBinaryForTransport(localVector) : undefined,
|
|
249
|
+
};
|
|
250
|
+
const response = await this.nc.request(subject, sc.encode(JSON.stringify(request)), { timeout: this.config.requestTimeout });
|
|
251
|
+
const respData = JSON.parse(sc.decode(response.data));
|
|
252
|
+
return {
|
|
253
|
+
collection: respData.collection ?? collection,
|
|
254
|
+
docId: respData.doc_id ?? docId,
|
|
255
|
+
vector: respData.vector ? decodeBinaryFromTransport(respData.vector) : undefined,
|
|
256
|
+
delta: respData.delta ? decodeBinaryFromTransport(respData.delta) : undefined,
|
|
257
|
+
error: respData.error,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Request a snapshot for a document
|
|
262
|
+
*/
|
|
263
|
+
async requestSnapshot(collection, docId) {
|
|
264
|
+
if (!this.nc || this.state !== 'connected') {
|
|
265
|
+
throw new Error('Not connected to NATS');
|
|
266
|
+
}
|
|
267
|
+
const subject = `$SYNC.${this.config.appId}.${collection}.snapshot`;
|
|
268
|
+
const request = { doc_id: docId, collection };
|
|
269
|
+
const response = await this.nc.request(subject, sc.encode(JSON.stringify(request)), { timeout: this.config.requestTimeout });
|
|
270
|
+
const respData = JSON.parse(sc.decode(response.data));
|
|
271
|
+
if (respData.error) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
if (respData.data) {
|
|
275
|
+
// Decode base64 binary data from response
|
|
276
|
+
return decodeBinaryFromTransport(respData.data);
|
|
277
|
+
}
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Force push local state to server, overriding server state entirely.
|
|
282
|
+
* This sends the full document state with a force flag.
|
|
283
|
+
*/
|
|
284
|
+
async forcePush(collection, docId, stateVector, changes) {
|
|
285
|
+
if (!this.nc || this.state !== 'connected') {
|
|
286
|
+
throw new Error('Not connected to NATS');
|
|
287
|
+
}
|
|
288
|
+
const subject = `$SYNC.${this.config.appId}.${collection}.force`;
|
|
289
|
+
const request = {
|
|
290
|
+
doc_id: docId,
|
|
291
|
+
collection,
|
|
292
|
+
edge_id: this.config.edgeId,
|
|
293
|
+
state_vector: encodeBinaryForTransport(stateVector),
|
|
294
|
+
changes: changes.map(c => encodeBinaryForTransport(c)),
|
|
295
|
+
force: true,
|
|
296
|
+
};
|
|
297
|
+
try {
|
|
298
|
+
const response = await this.nc.request(subject, sc.encode(JSON.stringify(request)), { timeout: this.config.requestTimeout });
|
|
299
|
+
const respData = JSON.parse(sc.decode(response.data));
|
|
300
|
+
if (respData.error) {
|
|
301
|
+
return {
|
|
302
|
+
success: false,
|
|
303
|
+
error: {
|
|
304
|
+
code: respData.error.code ?? 'UNKNOWN',
|
|
305
|
+
message: respData.error.message ?? 'Force push failed',
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
return { success: true };
|
|
310
|
+
}
|
|
311
|
+
catch (err) {
|
|
312
|
+
return {
|
|
313
|
+
success: false,
|
|
314
|
+
error: {
|
|
315
|
+
code: 'TRANSPORT_ERROR',
|
|
316
|
+
message: err instanceof Error ? err.message : String(err),
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
setState(state) {
|
|
322
|
+
if (this.state !== state) {
|
|
323
|
+
this.state = state;
|
|
324
|
+
for (const callback of this.stateCallbacks) {
|
|
325
|
+
callback(state);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
emitError(error) {
|
|
330
|
+
for (const callback of this.errorCallbacks) {
|
|
331
|
+
callback(error);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
emitUpdate(update) {
|
|
335
|
+
for (const callback of this.updateCallbacks) {
|
|
336
|
+
callback(update);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
setupConnectionHandlers() {
|
|
340
|
+
if (!this.nc)
|
|
341
|
+
return;
|
|
342
|
+
// Handle disconnection
|
|
343
|
+
(async () => {
|
|
344
|
+
for await (const status of this.nc.status()) {
|
|
345
|
+
switch (status.type) {
|
|
346
|
+
case 'disconnect':
|
|
347
|
+
this.setState('reconnecting');
|
|
348
|
+
break;
|
|
349
|
+
case 'reconnect':
|
|
350
|
+
this.setState('connected');
|
|
351
|
+
// Re-subscribe to updates after reconnect
|
|
352
|
+
this.subscribeToUpdates().catch(err => this.emitError(err));
|
|
353
|
+
break;
|
|
354
|
+
case 'error':
|
|
355
|
+
this.emitError(status.data instanceof Error ? status.data : new Error(String(status.data)));
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
})().catch(() => {
|
|
360
|
+
// Status iterator ended - connection closed
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
async subscribeToUpdates() {
|
|
364
|
+
if (!this.nc)
|
|
365
|
+
return;
|
|
366
|
+
// Unsubscribe from previous subscription if any
|
|
367
|
+
if (this.updateSub) {
|
|
368
|
+
this.updateSub.unsubscribe();
|
|
369
|
+
}
|
|
370
|
+
// Subscribe to sync updates: $SYNC.{appId}.*.updates
|
|
371
|
+
const subject = `$SYNC.${this.config.appId}.*.updates`;
|
|
372
|
+
this.updateSub = this.nc.subscribe(subject, {
|
|
373
|
+
callback: (err, msg) => {
|
|
374
|
+
if (err) {
|
|
375
|
+
this.emitError(err);
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
try {
|
|
379
|
+
const data = JSON.parse(sc.decode(msg.data));
|
|
380
|
+
// Extract collection from subject: $SYNC.{appId}.{collection}.updates
|
|
381
|
+
const parts = msg.subject.split('.');
|
|
382
|
+
const collection = parts.length >= 3 ? parts[2] : '';
|
|
383
|
+
const update = {
|
|
384
|
+
collection: data.collection ?? collection,
|
|
385
|
+
docId: data.docId ?? data.doc_id,
|
|
386
|
+
// Decode binary data from base64 if it's a string, otherwise handle array format
|
|
387
|
+
data: data.data
|
|
388
|
+
? (typeof data.data === 'string'
|
|
389
|
+
? decodeBinaryFromTransport(data.data)
|
|
390
|
+
: new Uint8Array(data.data))
|
|
391
|
+
: new Uint8Array(0),
|
|
392
|
+
timestamp: data.timestamp,
|
|
393
|
+
};
|
|
394
|
+
this.emitUpdate(update);
|
|
395
|
+
}
|
|
396
|
+
catch (parseErr) {
|
|
397
|
+
this.emitError(parseErr instanceof Error ? parseErr : new Error(String(parseErr)));
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Create a NatsTransport instance
|
|
405
|
+
*/
|
|
406
|
+
export function createNatsTransport(config) {
|
|
407
|
+
return new NatsTransport(config);
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=transport.js.map
|