@indigoai-us/hq-cloud 6.15.95 → 6.15.97
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/dist/bin/sync-runner-watch-loop.d.ts +7 -2
- package/dist/bin/sync-runner-watch-loop.d.ts.map +1 -1
- package/dist/bin/sync-runner-watch-loop.js +104 -34
- package/dist/bin/sync-runner-watch-loop.js.map +1 -1
- package/dist/bin/sync-runner.d.ts.map +1 -1
- package/dist/bin/sync-runner.js +3 -4
- package/dist/bin/sync-runner.js.map +1 -1
- package/dist/bin/sync-runner.test.js +9 -0
- package/dist/bin/sync-runner.test.js.map +1 -1
- package/dist/cli/share.d.ts.map +1 -1
- package/dist/cli/share.js +30 -7
- package/dist/cli/share.js.map +1 -1
- package/dist/cli/share.test.js +47 -1
- package/dist/cli/share.test.js.map +1 -1
- package/dist/cli/sync.d.ts +4 -1
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/outposts/self-deploy.d.ts.map +1 -1
- package/dist/outposts/self-deploy.js +7 -5
- package/dist/outposts/self-deploy.js.map +1 -1
- package/dist/outposts/self-deploy.test.js +3 -2
- package/dist/outposts/self-deploy.test.js.map +1 -1
- package/dist/sync/area-ledger-auto-migration.d.ts +55 -0
- package/dist/sync/area-ledger-auto-migration.d.ts.map +1 -0
- package/dist/sync/area-ledger-auto-migration.js +167 -0
- package/dist/sync/area-ledger-auto-migration.js.map +1 -0
- package/dist/sync/area-ledger-auto-migration.test.d.ts +2 -0
- package/dist/sync/area-ledger-auto-migration.test.d.ts.map +1 -0
- package/dist/sync/area-ledger-auto-migration.test.js +229 -0
- package/dist/sync/area-ledger-auto-migration.test.js.map +1 -0
- package/dist/sync/event-sync.d.ts +11 -3
- package/dist/sync/event-sync.d.ts.map +1 -1
- package/dist/sync/event-sync.js +189 -101
- package/dist/sync/event-sync.js.map +1 -1
- package/dist/sync/event-sync.test.js +140 -0
- package/dist/sync/event-sync.test.js.map +1 -1
- package/dist/sync/feature-flags.d.ts +68 -15
- package/dist/sync/feature-flags.d.ts.map +1 -1
- package/dist/sync/feature-flags.js +98 -21
- package/dist/sync/feature-flags.js.map +1 -1
- package/dist/sync/feature-flags.test.js +145 -4
- package/dist/sync/feature-flags.test.js.map +1 -1
- package/dist/sync/index.d.ts +2 -2
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +1 -1
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/push-transport.d.ts +18 -0
- package/dist/sync/push-transport.d.ts.map +1 -1
- package/dist/sync/push-transport.js +40 -0
- package/dist/sync/push-transport.js.map +1 -1
- package/dist/sync/state-store.d.ts +2 -2
- package/dist/sync/state-store.d.ts.map +1 -1
- package/dist/sync/state-store.js +186 -68
- package/dist/sync/state-store.js.map +1 -1
- package/dist/sync/state-store.test.js +72 -1
- package/dist/sync/state-store.test.js.map +1 -1
- package/dist/sync/sync-work.d.ts +1 -1
- package/dist/sync/sync-work.d.ts.map +1 -1
- package/dist/watcher.d.ts +4 -0
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +31 -6
- package/dist/watcher.js.map +1 -1
- package/dist/watcher.test.js +53 -0
- package/dist/watcher.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -155,7 +155,7 @@ describe("hq outposts self-deploy", () => {
|
|
|
155
155
|
call.args[1] === "/usr/local/bin/outpost-sync.sh");
|
|
156
156
|
const scriptContents = String(scriptWrite?.options?.input);
|
|
157
157
|
expect(scriptContents).toContain("hq auth refresh");
|
|
158
|
-
expect(scriptContents).toContain(`npx -y --package=@indigoai-us/hq-cloud@6.15.
|
|
158
|
+
expect(scriptContents).toContain(`npx -y --package=@indigoai-us/hq-cloud@6.15.97 hq-sync-runner \\
|
|
159
159
|
--companies \\
|
|
160
160
|
--direction both \\
|
|
161
161
|
--on-conflict keep \\
|
|
@@ -166,7 +166,8 @@ describe("hq outposts self-deploy", () => {
|
|
|
166
166
|
expect(scriptContents).not.toContain("@latest");
|
|
167
167
|
expect(scriptContents).toContain("hq-layout-compatibility");
|
|
168
168
|
expect(scriptContents).toContain("--pin dual-layout");
|
|
169
|
-
expect(scriptContents).toContain('HQ_SYNC_PARALLEL_COORDINATOR="${HQ_SYNC_PARALLEL_COORDINATOR:-
|
|
169
|
+
expect(scriptContents).toContain('HQ_SYNC_PARALLEL_COORDINATOR="${HQ_SYNC_PARALLEL_COORDINATOR:-auto}"');
|
|
170
|
+
expect(scriptContents).toContain('HQ_SYNC_AREA_STORAGE="${HQ_SYNC_AREA_STORAGE:-auto}"');
|
|
170
171
|
// An Outpost cannot opt itself into V2. Eligibility is fail-closed at the
|
|
171
172
|
// server; this launcher must not introduce a local realtime bypass.
|
|
172
173
|
expect(scriptContents).not.toMatch(/--(?:enable-)?realtime(?:-sync)?\b/);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-deploy.test.js","sourceRoot":"","sources":["../../src/outposts/self-deploy.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,EAAE,EACF,EAAE,GAEH,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAGvD,gFAAgF;AAChF,iFAAiF;AACjF,+EAA+E;AAC/E,6EAA6E;AAC7E,mBAAmB;AACnB,SAAS,oBAAoB,CAAC,IAAqC;IACjE,OAAO;QACL,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC1D,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,YAAY;QAClC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QACrD,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU;QAC9C,iBAAiB,EAAE,4BAA4B;QAC/C,IAAI;KACL,CAAC;AACJ,CAAC;AAQD,MAAM,MAAM,GAAG,gCAAgC,CAAC;AAChD,MAAM,MAAM,GAAG,0CAA0C,CAAC;AAE1D,SAAS,eAAe,CAAC,MAAM,GAAG,EAAE;IAClC,OAAO;QACL,MAAM,EAAE,CAAC;QACT,MAAM;QACN,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,SAAS;KACkC,CAAC;AACvD,CAAC;AAED,SAAS,sBAAsB,CAAC,QAQ5B,EAAE;IACJ,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAoC;QAC5C,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM;QAC7C,gBAAgB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE;QACjE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI;QAC/B,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI;QACxC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;QACzB,aAAa,EAAE,GAAG,EAAE,CAAC,mBAAmB;QACxC,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU;QAC9B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YACrC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACvC,IAAI,OAAO,KAAK,OAAO;gBAAE,OAAO,eAAe,CAAC,KAAK,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC;YAC3E,IAAI,OAAO,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;gBACvD,OAAO,KAAK,CAAC,OAAO,KAAK,KAAK;oBAC5B,CAAC,CAAC,EAAE,GAAG,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;oBACrC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;YACxF,CAAC;YACD,OAAO,eAAe,EAAE,CAAC;QAC3B,CAAC,CAAwC;KAC1C,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,YAAY,CAAC,IAAqC;IACzD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;IAClC,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,GAAG,CAChB,IAAqC,EACrC,IAAc;IAEd,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,IAAI,OAA0C,CAAC;AAC/C,IAAI,MAAwC,CAAC;AAC7C,IAAI,QAA4C,CAAC;AACjD,IAAI,QAAoC,CAAC;AAEzC,UAAU,CAAC,GAAG,EAAE;IACd,OAAO,GAAG,EAAE;SACT,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;SACtB,kBAAkB,CAAC,CAAC,IAA6B,EAAE,EAAE;QACpD,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAiD,CAAC;IACrD,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC/D,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnE,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,EAAE,CAAC,eAAe,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,SAAS,OAAO;IACd,OAAO;QACL,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9D,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAkB;IAC3C,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,OAAO,KAAK,IAAI;QACrB,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM;YACtB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAChE,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,sBAAsB,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,UAAU,CAAC,CAAC;QAEnF,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAEjE,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAC1B,MAAM,CAAC,gBAAgB,CAAC;YACtB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,CAAC;SAC5D,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,sBAAsB,CAAC;YAC7C,SAAS,EAAE,mCAAmC;SAC/C,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC3E,iBAAiB,CAClB,CAAC;QACF,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACxD,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,sBAAsB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEnE,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC3E,iBAAiB,CAClB,CAAC;QACF,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACnD,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,sBAAsB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;QAExC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC3E,iBAAiB,CAClB,CAAC;QACF,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,OAAO,GAAG,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC;QACzH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,sBAAsB,CAAC;YAC7C,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE;SAC3C,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAClE,iBAAiB,CAClB,CAAC;QACF,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACzC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,sBAAsB,EAAE,CAAC;QAEjD,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;QAEtD,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAC1B,MAAM,CAAC,gBAAgB,CAAC;YACtB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,CAAC;SAC5D,CAAC,CACH,CAAC;QACF,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAC7B,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,OAAO,KAAK,MAAM;YACvB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK;YACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,0CAA0C,CAC9D,CAAC;QACF,MAAM,eAAe,GAAG,MAAM,CAC3B,YAAY,EAAE,OAA2C,EAAE,KAAK,CAClE,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACnD,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QAC5E,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;QAC9E,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAEpD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAC5B,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,OAAO,KAAK,MAAM;YACvB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK;YACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,gCAAgC,CACpD,CAAC;QACF,MAAM,cAAc,GAAG,MAAM,CAC1B,WAAW,EAAE,OAA2C,EAAE,KAAK,CACjE,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACpD,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC;;;;;;;2BAOV,CAAC,CAAC;QACzB,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QAC5D,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACtD,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"self-deploy.test.js","sourceRoot":"","sources":["../../src/outposts/self-deploy.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch-mode auto-migration from the personal v3 journal to AreaLedger.
|
|
3
|
+
*
|
|
4
|
+
* Manual conversion remains `src/bin/area-ledger-migration.ts`. This scheduler
|
|
5
|
+
* is the background path for a box that already has an authorized realtime
|
|
6
|
+
* event-sync session: copy/catch-up runs as a low-priority chore, and cutover
|
|
7
|
+
* happens only after clean parity under the exclusive operation lock.
|
|
8
|
+
*
|
|
9
|
+
* Failures never propagate to the caller. Abandoned or composed-back manifests
|
|
10
|
+
* are left to {@link AreaLedgerMigration}'s state machine — this module does
|
|
11
|
+
* not force a cutover from an unready phase.
|
|
12
|
+
*/
|
|
13
|
+
import { AreaLedgerMigration, type LayoutPhase, type LayoutState } from "./area-ledger-migration.js";
|
|
14
|
+
import type { FeatureSwitch } from "./feature-flags.js";
|
|
15
|
+
import type { SyncJournal } from "../types.js";
|
|
16
|
+
export declare const AREA_AUTO_MIGRATION_STARTED_EVENT = "area_migration_started";
|
|
17
|
+
export declare const AREA_AUTO_MIGRATION_COMPLETED_EVENT = "area_migration_completed";
|
|
18
|
+
export declare const AREA_AUTO_MIGRATION_SOURCE = "sync-runner";
|
|
19
|
+
export declare const AREA_AUTO_MIGRATION_RETRY_MIN_MS = 1000;
|
|
20
|
+
export declare const AREA_AUTO_MIGRATION_RETRY_MAX_MS: number;
|
|
21
|
+
export type AreaAutoMigrationPassStatus = "skipped" | "copied" | "cut-over" | "parity-mismatch" | "lock-busy" | "error";
|
|
22
|
+
export interface AreaAutoMigrationBridge {
|
|
23
|
+
copyAndCatchUp(): {
|
|
24
|
+
state: Pick<LayoutState, "phase">;
|
|
25
|
+
};
|
|
26
|
+
verifyParity(legacy: SyncJournal): unknown;
|
|
27
|
+
cutOver(): Pick<LayoutState, "phase">;
|
|
28
|
+
readLegacyJournal(): SyncJournal;
|
|
29
|
+
}
|
|
30
|
+
export interface AreaAutoMigrationDeps {
|
|
31
|
+
now(): number;
|
|
32
|
+
hasActiveRealtimeSession(): boolean;
|
|
33
|
+
areaStorageSwitch(): FeatureSwitch;
|
|
34
|
+
readPhase(): LayoutPhase | undefined;
|
|
35
|
+
/** True once a personal-vault v3 journal exists to copy. */
|
|
36
|
+
hasLegacyJournal(): boolean;
|
|
37
|
+
createMigration(): AreaAutoMigrationBridge;
|
|
38
|
+
withExclusiveLock<T>(fn: () => T): T;
|
|
39
|
+
enqueueChore(run: () => void): void;
|
|
40
|
+
log(message: string): void;
|
|
41
|
+
emitTelemetry(eventName: typeof AREA_AUTO_MIGRATION_STARTED_EVENT | typeof AREA_AUTO_MIGRATION_COMPLETED_EVENT): void;
|
|
42
|
+
/** Fired after a durable area-authoritative cutover. */
|
|
43
|
+
onCutOver?: () => void;
|
|
44
|
+
}
|
|
45
|
+
export interface AreaAutoMigrationScheduler {
|
|
46
|
+
/** Called once per watch-loop tick. Never throws. */
|
|
47
|
+
onTick(): void;
|
|
48
|
+
}
|
|
49
|
+
export declare function openPersonalVaultAreaMigration(hqRoot: string, stateDir: string, journalSlug: string): {
|
|
50
|
+
migration: AreaLedgerMigration;
|
|
51
|
+
readLegacyJournal: () => SyncJournal;
|
|
52
|
+
};
|
|
53
|
+
export declare function readPersonalVaultLayoutPhase(stateDir: string, journalSlug: string): LayoutPhase | undefined;
|
|
54
|
+
export declare function createAreaAutoMigrationScheduler(deps: AreaAutoMigrationDeps): AreaAutoMigrationScheduler;
|
|
55
|
+
//# sourceMappingURL=area-ledger-auto-migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"area-ledger-auto-migration.d.ts","sourceRoot":"","sources":["../../src/sync/area-ledger-auto-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,mBAAmB,EAEnB,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,4BAA4B,CAAC;AAKpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,eAAO,MAAM,iCAAiC,2BAA2B,CAAC;AAC1E,eAAO,MAAM,mCAAmC,6BAA6B,CAAC;AAC9E,eAAO,MAAM,0BAA0B,gBAAgB,CAAC;AAExD,eAAO,MAAM,gCAAgC,OAAQ,CAAC;AACtD,eAAO,MAAM,gCAAgC,QAAa,CAAC;AAO3D,MAAM,MAAM,2BAA2B,GACnC,SAAS,GACT,QAAQ,GACR,UAAU,GACV,iBAAiB,GACjB,WAAW,GACX,OAAO,CAAC;AAEZ,MAAM,WAAW,uBAAuB;IACtC,cAAc,IAAI;QAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACxD,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;IAC3C,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACtC,iBAAiB,IAAI,WAAW,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,IAAI,MAAM,CAAC;IACd,wBAAwB,IAAI,OAAO,CAAC;IACpC,iBAAiB,IAAI,aAAa,CAAC;IACnC,SAAS,IAAI,WAAW,GAAG,SAAS,CAAC;IACrC,4DAA4D;IAC5D,gBAAgB,IAAI,OAAO,CAAC;IAC5B,eAAe,IAAI,uBAAuB,CAAC;IAC3C,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACrC,YAAY,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACpC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CACX,SAAS,EACL,OAAO,iCAAiC,GACxC,OAAO,mCAAmC,GAC7C,IAAI,CAAC;IACR,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,qDAAqD;IACrD,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB;IAAE,SAAS,EAAE,mBAAmB,CAAC;IAAC,iBAAiB,EAAE,MAAM,WAAW,CAAA;CAAE,CAe1E;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,WAAW,GAAG,SAAS,CAEzB;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,qBAAqB,GAC1B,0BAA0B,CAwH5B"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch-mode auto-migration from the personal v3 journal to AreaLedger.
|
|
3
|
+
*
|
|
4
|
+
* Manual conversion remains `src/bin/area-ledger-migration.ts`. This scheduler
|
|
5
|
+
* is the background path for a box that already has an authorized realtime
|
|
6
|
+
* event-sync session: copy/catch-up runs as a low-priority chore, and cutover
|
|
7
|
+
* happens only after clean parity under the exclusive operation lock.
|
|
8
|
+
*
|
|
9
|
+
* Failures never propagate to the caller. Abandoned or composed-back manifests
|
|
10
|
+
* are left to {@link AreaLedgerMigration}'s state machine — this module does
|
|
11
|
+
* not force a cutover from an unready phase.
|
|
12
|
+
*/
|
|
13
|
+
import { AreaLedgerMigration, readAreaLayoutState, } from "./area-ledger-migration.js";
|
|
14
|
+
import { AreaResolver, inspectPersonalVaultAreaScope, } from "./area-resolver.js";
|
|
15
|
+
import { openJournalStateStoreForMigration } from "../journal.js";
|
|
16
|
+
export const AREA_AUTO_MIGRATION_STARTED_EVENT = "area_migration_started";
|
|
17
|
+
export const AREA_AUTO_MIGRATION_COMPLETED_EVENT = "area_migration_completed";
|
|
18
|
+
export const AREA_AUTO_MIGRATION_SOURCE = "sync-runner";
|
|
19
|
+
export const AREA_AUTO_MIGRATION_RETRY_MIN_MS = 1_000;
|
|
20
|
+
export const AREA_AUTO_MIGRATION_RETRY_MAX_MS = 5 * 60_000;
|
|
21
|
+
const CUTOVER_PHASES = new Set([
|
|
22
|
+
"catching-up",
|
|
23
|
+
"cutover-ready",
|
|
24
|
+
]);
|
|
25
|
+
export function openPersonalVaultAreaMigration(hqRoot, stateDir, journalSlug) {
|
|
26
|
+
const resolver = AreaResolver.forPersonalVault(inspectPersonalVaultAreaScope(hqRoot));
|
|
27
|
+
const legacyStore = openJournalStateStoreForMigration(journalSlug);
|
|
28
|
+
const migration = new AreaLedgerMigration({
|
|
29
|
+
rootDir: stateDir,
|
|
30
|
+
journalSlug,
|
|
31
|
+
resolver,
|
|
32
|
+
legacyStore,
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
migration,
|
|
36
|
+
readLegacyJournal: () => legacyStore.getState().journal,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function readPersonalVaultLayoutPhase(stateDir, journalSlug) {
|
|
40
|
+
return readAreaLayoutState(stateDir, journalSlug)?.phase;
|
|
41
|
+
}
|
|
42
|
+
export function createAreaAutoMigrationScheduler(deps) {
|
|
43
|
+
let executing = false;
|
|
44
|
+
let done = false;
|
|
45
|
+
let started = false;
|
|
46
|
+
let nextAttemptAt = 0;
|
|
47
|
+
let failureStreak = 0;
|
|
48
|
+
const backoffMs = () => {
|
|
49
|
+
const shift = Math.min(failureStreak, 8);
|
|
50
|
+
return Math.min(AREA_AUTO_MIGRATION_RETRY_MAX_MS, AREA_AUTO_MIGRATION_RETRY_MIN_MS * 2 ** shift);
|
|
51
|
+
};
|
|
52
|
+
const scheduleRetry = (failed) => {
|
|
53
|
+
if (failed)
|
|
54
|
+
failureStreak += 1;
|
|
55
|
+
else
|
|
56
|
+
failureStreak = 0;
|
|
57
|
+
nextAttemptAt = deps.now() + (failed ? backoffMs() : AREA_AUTO_MIGRATION_RETRY_MIN_MS);
|
|
58
|
+
};
|
|
59
|
+
const executePass = () => {
|
|
60
|
+
if (executing)
|
|
61
|
+
return "skipped";
|
|
62
|
+
executing = true;
|
|
63
|
+
try {
|
|
64
|
+
if (!started) {
|
|
65
|
+
started = true;
|
|
66
|
+
try {
|
|
67
|
+
deps.emitTelemetry(AREA_AUTO_MIGRATION_STARTED_EVENT);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
deps.log(`area-ledger auto-migration start telemetry failed: ${describe(error)}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const bridge = deps.createMigration();
|
|
74
|
+
const copied = bridge.copyAndCatchUp();
|
|
75
|
+
const phase = copied.state.phase;
|
|
76
|
+
if (phase === "area-authoritative") {
|
|
77
|
+
done = true;
|
|
78
|
+
return "cut-over";
|
|
79
|
+
}
|
|
80
|
+
if (!CUTOVER_PHASES.has(phase)) {
|
|
81
|
+
scheduleRetry(false);
|
|
82
|
+
return "copied";
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
bridge.verifyParity(bridge.readLegacyJournal());
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
deps.log(`area-ledger auto-migration parity mismatch; deferring cutover: ${describe(error)}`);
|
|
89
|
+
scheduleRetry(true);
|
|
90
|
+
return "parity-mismatch";
|
|
91
|
+
}
|
|
92
|
+
let cutOver;
|
|
93
|
+
try {
|
|
94
|
+
cutOver = deps.withExclusiveLock(() => bridge.cutOver());
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
deps.log(`area-ledger auto-migration cutover failed: ${describe(error)}`);
|
|
98
|
+
scheduleRetry(true);
|
|
99
|
+
return "lock-busy";
|
|
100
|
+
}
|
|
101
|
+
if (cutOver.phase === "area-authoritative") {
|
|
102
|
+
done = true;
|
|
103
|
+
try {
|
|
104
|
+
deps.emitTelemetry(AREA_AUTO_MIGRATION_COMPLETED_EVENT);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
deps.log(`area-ledger auto-migration completion telemetry failed: ${describe(error)}`);
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
deps.onCutOver?.();
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
deps.log(`area-ledger auto-migration post-cutover hook failed: ${describe(error)}`);
|
|
114
|
+
}
|
|
115
|
+
return "cut-over";
|
|
116
|
+
}
|
|
117
|
+
scheduleRetry(false);
|
|
118
|
+
return "copied";
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
executing = false;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
const shouldRun = () => {
|
|
125
|
+
if (done || executing)
|
|
126
|
+
return false;
|
|
127
|
+
if (deps.areaStorageSwitch() === "off")
|
|
128
|
+
return false;
|
|
129
|
+
if (!deps.hasActiveRealtimeSession())
|
|
130
|
+
return false;
|
|
131
|
+
if (deps.readPhase() === "area-authoritative") {
|
|
132
|
+
done = true;
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
if (deps.readPhase() === undefined && !deps.hasLegacyJournal())
|
|
136
|
+
return false;
|
|
137
|
+
if (deps.now() < nextAttemptAt)
|
|
138
|
+
return false;
|
|
139
|
+
return true;
|
|
140
|
+
};
|
|
141
|
+
return {
|
|
142
|
+
onTick() {
|
|
143
|
+
try {
|
|
144
|
+
if (!shouldRun())
|
|
145
|
+
return;
|
|
146
|
+
nextAttemptAt = deps.now() + AREA_AUTO_MIGRATION_RETRY_MIN_MS;
|
|
147
|
+
deps.enqueueChore(() => {
|
|
148
|
+
try {
|
|
149
|
+
executePass();
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
deps.log(`area-ledger auto-migration failed: ${describe(error)}`);
|
|
153
|
+
scheduleRetry(true);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
deps.log(`area-ledger auto-migration schedule failed: ${describe(error)}`);
|
|
159
|
+
scheduleRetry(true);
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function describe(error) {
|
|
165
|
+
return error instanceof Error ? error.message : String(error);
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=area-ledger-auto-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"area-ledger-auto-migration.js","sourceRoot":"","sources":["../../src/sync/area-ledger-auto-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"area-ledger-auto-migration.test.d.ts","sourceRoot":"","sources":["../../src/sync/area-ledger-auto-migration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { AREA_AUTO_MIGRATION_COMPLETED_EVENT, AREA_AUTO_MIGRATION_RETRY_MAX_MS, AREA_AUTO_MIGRATION_STARTED_EVENT, createAreaAutoMigrationScheduler, } from "./area-ledger-auto-migration.js";
|
|
3
|
+
function emptyJournal() {
|
|
4
|
+
return { version: "2", lastSync: "", files: {}, pulls: [] };
|
|
5
|
+
}
|
|
6
|
+
function makeBridge(overrides = {}) {
|
|
7
|
+
return {
|
|
8
|
+
copyAndCatchUp: () => ({ state: { phase: "catching-up" } }),
|
|
9
|
+
verifyParity: () => ({ rowCount: 0 }),
|
|
10
|
+
cutOver: () => ({ phase: "area-authoritative" }),
|
|
11
|
+
readLegacyJournal: () => emptyJournal(),
|
|
12
|
+
...overrides,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function makeDeps(overrides = {}) {
|
|
16
|
+
const chores = overrides.chores ?? [];
|
|
17
|
+
const realtime = overrides.realtime ?? { value: true };
|
|
18
|
+
const phase = overrides.phase ?? { value: undefined };
|
|
19
|
+
const areaStorage = overrides.areaStorage ?? { value: "auto" };
|
|
20
|
+
return {
|
|
21
|
+
now: () => 0,
|
|
22
|
+
hasActiveRealtimeSession: () => realtime.value,
|
|
23
|
+
areaStorageSwitch: () => areaStorage.value,
|
|
24
|
+
readPhase: () => phase.value,
|
|
25
|
+
hasLegacyJournal: () => true,
|
|
26
|
+
createMigration: () => makeBridge(),
|
|
27
|
+
withExclusiveLock: (fn) => fn(),
|
|
28
|
+
enqueueChore: (run) => {
|
|
29
|
+
chores.push(run);
|
|
30
|
+
},
|
|
31
|
+
log: () => undefined,
|
|
32
|
+
emitTelemetry: () => undefined,
|
|
33
|
+
...overrides,
|
|
34
|
+
chores,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function drain(chores) {
|
|
38
|
+
while (chores.length > 0)
|
|
39
|
+
chores.shift()();
|
|
40
|
+
}
|
|
41
|
+
describe("area-ledger auto-migration scheduler", () => {
|
|
42
|
+
it("does not start migration without an active realtime session", () => {
|
|
43
|
+
const createMigration = vi.fn(() => makeBridge());
|
|
44
|
+
const enqueueChore = vi.fn();
|
|
45
|
+
const deps = makeDeps({
|
|
46
|
+
hasActiveRealtimeSession: () => false,
|
|
47
|
+
createMigration,
|
|
48
|
+
enqueueChore,
|
|
49
|
+
});
|
|
50
|
+
const scheduler = createAreaAutoMigrationScheduler(deps);
|
|
51
|
+
scheduler.onTick();
|
|
52
|
+
expect(enqueueChore).not.toHaveBeenCalled();
|
|
53
|
+
expect(createMigration).not.toHaveBeenCalled();
|
|
54
|
+
});
|
|
55
|
+
it("enqueues a catch-up chore when realtime is live and the layout is still legacy", () => {
|
|
56
|
+
const copyAndCatchUp = vi.fn(() => ({ state: { phase: "catching-up" } }));
|
|
57
|
+
const chores = [];
|
|
58
|
+
const scheduler = createAreaAutoMigrationScheduler(makeDeps({
|
|
59
|
+
chores,
|
|
60
|
+
readPhase: () => "legacy-authoritative",
|
|
61
|
+
createMigration: () => makeBridge({
|
|
62
|
+
copyAndCatchUp,
|
|
63
|
+
verifyParity: () => {
|
|
64
|
+
throw new Error("not yet");
|
|
65
|
+
},
|
|
66
|
+
}),
|
|
67
|
+
}));
|
|
68
|
+
scheduler.onTick();
|
|
69
|
+
expect(chores).toHaveLength(1);
|
|
70
|
+
drain(chores);
|
|
71
|
+
expect(copyAndCatchUp).toHaveBeenCalledTimes(1);
|
|
72
|
+
});
|
|
73
|
+
it("cuts over only after clean parity and only under the exclusive lock", () => {
|
|
74
|
+
let insideLock = false;
|
|
75
|
+
const lockCalls = [];
|
|
76
|
+
const cutOver = vi.fn(() => {
|
|
77
|
+
expect(insideLock).toBe(true);
|
|
78
|
+
return { phase: "area-authoritative" };
|
|
79
|
+
});
|
|
80
|
+
const verifyParity = vi.fn(() => ({ rowCount: 0 }));
|
|
81
|
+
const chores = [];
|
|
82
|
+
const emitTelemetry = vi.fn();
|
|
83
|
+
const scheduler = createAreaAutoMigrationScheduler(makeDeps({
|
|
84
|
+
chores,
|
|
85
|
+
emitTelemetry,
|
|
86
|
+
createMigration: () => makeBridge({ verifyParity, cutOver }),
|
|
87
|
+
withExclusiveLock: (fn) => {
|
|
88
|
+
lockCalls.push(true);
|
|
89
|
+
insideLock = true;
|
|
90
|
+
try {
|
|
91
|
+
return fn();
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
insideLock = false;
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
}));
|
|
98
|
+
scheduler.onTick();
|
|
99
|
+
drain(chores);
|
|
100
|
+
expect(verifyParity).toHaveBeenCalledTimes(1);
|
|
101
|
+
expect(lockCalls).toEqual([true]);
|
|
102
|
+
expect(cutOver).toHaveBeenCalledTimes(1);
|
|
103
|
+
expect(emitTelemetry.mock.calls.map((call) => call[0])).toEqual([
|
|
104
|
+
AREA_AUTO_MIGRATION_STARTED_EVENT,
|
|
105
|
+
AREA_AUTO_MIGRATION_COMPLETED_EVENT,
|
|
106
|
+
]);
|
|
107
|
+
scheduler.onTick();
|
|
108
|
+
expect(chores).toHaveLength(0);
|
|
109
|
+
});
|
|
110
|
+
it("does not cut over on a parity mismatch and retries catch-up later", () => {
|
|
111
|
+
const cutOver = vi.fn();
|
|
112
|
+
let lockCalls = 0;
|
|
113
|
+
const copyAndCatchUp = vi.fn(() => ({ state: { phase: "catching-up" } }));
|
|
114
|
+
const chores = [];
|
|
115
|
+
let now = 0;
|
|
116
|
+
const scheduler = createAreaAutoMigrationScheduler(makeDeps({
|
|
117
|
+
chores,
|
|
118
|
+
now: () => now,
|
|
119
|
+
createMigration: () => makeBridge({
|
|
120
|
+
copyAndCatchUp,
|
|
121
|
+
cutOver,
|
|
122
|
+
verifyParity: () => {
|
|
123
|
+
throw new Error("area-ledger migration: row-set parity failed");
|
|
124
|
+
},
|
|
125
|
+
}),
|
|
126
|
+
withExclusiveLock: (fn) => {
|
|
127
|
+
lockCalls += 1;
|
|
128
|
+
return fn();
|
|
129
|
+
},
|
|
130
|
+
}));
|
|
131
|
+
scheduler.onTick();
|
|
132
|
+
drain(chores);
|
|
133
|
+
expect(copyAndCatchUp).toHaveBeenCalledTimes(1);
|
|
134
|
+
expect(lockCalls).toBe(0);
|
|
135
|
+
expect(cutOver).not.toHaveBeenCalled();
|
|
136
|
+
scheduler.onTick();
|
|
137
|
+
expect(chores).toHaveLength(0);
|
|
138
|
+
now += AREA_AUTO_MIGRATION_RETRY_MAX_MS;
|
|
139
|
+
scheduler.onTick();
|
|
140
|
+
expect(chores).toHaveLength(1);
|
|
141
|
+
drain(chores);
|
|
142
|
+
expect(copyAndCatchUp).toHaveBeenCalledTimes(2);
|
|
143
|
+
expect(cutOver).not.toHaveBeenCalled();
|
|
144
|
+
});
|
|
145
|
+
it("contains chore errors so they never propagate to the caller", () => {
|
|
146
|
+
const log = vi.fn();
|
|
147
|
+
const chores = [];
|
|
148
|
+
const scheduler = createAreaAutoMigrationScheduler(makeDeps({
|
|
149
|
+
chores,
|
|
150
|
+
log,
|
|
151
|
+
createMigration: () => {
|
|
152
|
+
throw new Error("store locked");
|
|
153
|
+
},
|
|
154
|
+
}));
|
|
155
|
+
expect(() => scheduler.onTick()).not.toThrow();
|
|
156
|
+
expect(() => drain(chores)).not.toThrow();
|
|
157
|
+
expect(log).toHaveBeenCalledWith(expect.stringContaining("area-ledger auto-migration failed"));
|
|
158
|
+
});
|
|
159
|
+
it("respects an already area-authoritative (composed-back) manifest", () => {
|
|
160
|
+
const enqueueChore = vi.fn();
|
|
161
|
+
const createMigration = vi.fn(() => makeBridge());
|
|
162
|
+
const scheduler = createAreaAutoMigrationScheduler(makeDeps({
|
|
163
|
+
enqueueChore,
|
|
164
|
+
createMigration,
|
|
165
|
+
readPhase: () => "area-authoritative",
|
|
166
|
+
}));
|
|
167
|
+
scheduler.onTick();
|
|
168
|
+
expect(enqueueChore).not.toHaveBeenCalled();
|
|
169
|
+
expect(createMigration).not.toHaveBeenCalled();
|
|
170
|
+
});
|
|
171
|
+
it("does not force cutover from an abandoned legacy-authoritative phase", () => {
|
|
172
|
+
const cutOver = vi.fn();
|
|
173
|
+
let lockCalls = 0;
|
|
174
|
+
const copyAndCatchUp = vi.fn(() => ({
|
|
175
|
+
state: { phase: "legacy-authoritative" },
|
|
176
|
+
}));
|
|
177
|
+
const chores = [];
|
|
178
|
+
const scheduler = createAreaAutoMigrationScheduler(makeDeps({
|
|
179
|
+
chores,
|
|
180
|
+
readPhase: () => "legacy-authoritative",
|
|
181
|
+
createMigration: () => makeBridge({ copyAndCatchUp, cutOver }),
|
|
182
|
+
withExclusiveLock: (fn) => {
|
|
183
|
+
lockCalls += 1;
|
|
184
|
+
return fn();
|
|
185
|
+
},
|
|
186
|
+
}));
|
|
187
|
+
scheduler.onTick();
|
|
188
|
+
drain(chores);
|
|
189
|
+
expect(copyAndCatchUp).toHaveBeenCalledTimes(1);
|
|
190
|
+
expect(lockCalls).toBe(0);
|
|
191
|
+
expect(cutOver).not.toHaveBeenCalled();
|
|
192
|
+
});
|
|
193
|
+
it("does not mint an area layout before a personal-vault journal exists", () => {
|
|
194
|
+
const enqueueChore = vi.fn();
|
|
195
|
+
const scheduler = createAreaAutoMigrationScheduler(makeDeps({
|
|
196
|
+
enqueueChore,
|
|
197
|
+
readPhase: () => undefined,
|
|
198
|
+
hasLegacyJournal: () => false,
|
|
199
|
+
}));
|
|
200
|
+
scheduler.onTick();
|
|
201
|
+
expect(enqueueChore).not.toHaveBeenCalled();
|
|
202
|
+
});
|
|
203
|
+
it("honors the area-storage kill switch", () => {
|
|
204
|
+
const enqueueChore = vi.fn();
|
|
205
|
+
const scheduler = createAreaAutoMigrationScheduler(makeDeps({
|
|
206
|
+
enqueueChore,
|
|
207
|
+
areaStorageSwitch: () => "off",
|
|
208
|
+
hasActiveRealtimeSession: () => true,
|
|
209
|
+
readPhase: () => "legacy-authoritative",
|
|
210
|
+
}));
|
|
211
|
+
scheduler.onTick();
|
|
212
|
+
expect(enqueueChore).not.toHaveBeenCalled();
|
|
213
|
+
});
|
|
214
|
+
it("does not call cutOver when the exclusive lock is not acquired", () => {
|
|
215
|
+
const cutOver = vi.fn();
|
|
216
|
+
const chores = [];
|
|
217
|
+
const scheduler = createAreaAutoMigrationScheduler(makeDeps({
|
|
218
|
+
chores,
|
|
219
|
+
createMigration: () => makeBridge({ cutOver }),
|
|
220
|
+
withExclusiveLock: () => {
|
|
221
|
+
throw new Error("Refusing to start area-ledger-migration");
|
|
222
|
+
},
|
|
223
|
+
}));
|
|
224
|
+
scheduler.onTick();
|
|
225
|
+
drain(chores);
|
|
226
|
+
expect(cutOver).not.toHaveBeenCalled();
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
//# sourceMappingURL=area-ledger-auto-migration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"area-ledger-auto-migration.test.js","sourceRoot":"","sources":["../../src/sync/area-ledger-auto-migration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
* every path here; event delivery is best-effort by design.
|
|
31
31
|
*/
|
|
32
32
|
import { SQSClient } from "@aws-sdk/client-sqs";
|
|
33
|
-
import { HttpPushTransport, type AuthTokenSource } from "./push-transport.js";
|
|
33
|
+
import { HttpPushTransport, RealtimeUnavailableError, type AuthTokenSource } from "./push-transport.js";
|
|
34
34
|
import { type PushReceiver, type RealtimeWakeSource, type SqsClientLike, type SyncBatchEngineFn, type SyncEngineFn } from "./push-receiver.js";
|
|
35
35
|
import { type Clock, type TreeChangeBatch } from "../watcher.js";
|
|
36
36
|
import { type CloudTelemetryClient, type TelemetryClaims } from "../telemetry-events.js";
|
|
@@ -103,6 +103,8 @@ export interface RefreshingSqsClientOptions {
|
|
|
103
103
|
buildSqs?: (resp: SubscribeSyncResponse) => SqsClientLike;
|
|
104
104
|
/** Clock seam (tests). Default `Date.now`. */
|
|
105
105
|
now?: () => number;
|
|
106
|
+
/** Receives a deliberate server denial before it reaches the receiver loop. */
|
|
107
|
+
onRealtimeUnavailable?: (error: RealtimeUnavailableError) => void;
|
|
106
108
|
}
|
|
107
109
|
/**
|
|
108
110
|
* An {@link SqsClientLike} that owns the vended-credential lifecycle:
|
|
@@ -156,6 +158,8 @@ export interface StartEventSyncOptions {
|
|
|
156
158
|
retryMaxMs?: number;
|
|
157
159
|
/** Test seam for full-jitter event-sync startup retries. */
|
|
158
160
|
retryRandom?: () => number;
|
|
161
|
+
/** Test seam for the poll-only realtime-eligibility recheck interval. */
|
|
162
|
+
realtimeUnavailableRecheckMs?: number;
|
|
159
163
|
/** Override the per-path trailing-publish interval. */
|
|
160
164
|
publishMinIntervalMs?: number;
|
|
161
165
|
/** Existing runner state directory for restart-durable publish suppression. */
|
|
@@ -191,6 +195,8 @@ export interface EventSyncHandles {
|
|
|
191
195
|
/** Startup retry defaults: full jitter over a 30s → 10min exponential cap. */
|
|
192
196
|
export declare const DEFAULT_EVENT_SYNC_RETRY_INITIAL_MS = 30000;
|
|
193
197
|
export declare const DEFAULT_EVENT_SYNC_RETRY_MAX_MS: number;
|
|
198
|
+
/** Poll-only accounts recheck server realtime eligibility at this interval. */
|
|
199
|
+
export declare const DEFAULT_EVENT_SYNC_REALTIME_UNAVAILABLE_RECHECK_MS: number;
|
|
194
200
|
/** Every v2 signal has identical correctness semantics: schedule one drain. */
|
|
195
201
|
export type RealtimeDrainSignal = "watcher" | "wake" | "high-water" | "reconnect" | "retry";
|
|
196
202
|
export interface UnifiedRealtimeSchedulerOptions {
|
|
@@ -226,8 +232,10 @@ export declare function createUnifiedRealtimeScheduler(options: UnifiedRealtimeS
|
|
|
226
232
|
/**
|
|
227
233
|
* Bring up the publish + receive legs. A failed initial subscribe deliberately
|
|
228
234
|
* keeps the watch runner poll-only, but returns an offline handle that retries
|
|
229
|
-
* the complete startup sequence
|
|
230
|
-
*
|
|
235
|
+
* the complete startup sequence. A coded realtime-unavailable denial instead
|
|
236
|
+
* stays poll-only and only rechecks eligibility on a long cadence. Once a
|
|
237
|
+
* retry succeeds, the same handle forwards publishes and disposes the live
|
|
238
|
+
* legs just like an immediate start.
|
|
231
239
|
*/
|
|
232
240
|
export declare function startEventSync(opts: StartEventSyncOptions): Promise<EventSyncHandles>;
|
|
233
241
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-sync.d.ts","sourceRoot":"","sources":["../../src/sync/event-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EACL,SAAS,EAIV,MAAM,qBAAqB,CAAC;AAE7B,OAAO,
|
|
1
|
+
{"version":3,"file":"event-sync.d.ts","sourceRoot":"","sources":["../../src/sync/event-sync.ts"],"names":[],"mappings":"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"}
|