@real-life/trust-protocol 0.4.0 → 0.5.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 +65 -0
- package/README.md +47 -25
- package/dist/adapters/vti-mediator.d.ts +18 -3
- package/dist/adapters/vti-mediator.d.ts.map +1 -1
- package/dist/adapters/vti-mediator.js +51 -13
- package/dist/adapters/vti-mediator.js.map +1 -1
- package/dist/codec.d.ts +9 -1
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +107 -23
- package/dist/codec.js.map +1 -1
- package/dist/engine.d.ts +15 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +130 -16
- package/dist/engine.js.map +1 -1
- package/dist/entropy.d.ts +1 -1
- package/dist/entropy.d.ts.map +1 -1
- package/dist/entropy.js +1 -1
- package/dist/entropy.js.map +1 -1
- package/dist/events.d.ts +21 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/holder-api.d.ts +29 -1
- package/dist/holder-api.d.ts.map +1 -1
- package/dist/holder-api.js +12 -2
- package/dist/holder-api.js.map +1 -1
- package/dist/holder-state-v2.d.ts +858 -0
- package/dist/holder-state-v2.d.ts.map +1 -0
- package/dist/holder-state-v2.js +2 -0
- package/dist/holder-state-v2.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +2 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/introduction/holder.d.ts.map +1 -1
- package/dist/introduction/holder.js +7 -0
- package/dist/introduction/holder.js.map +1 -1
- package/dist/invariants.d.ts.map +1 -1
- package/dist/invariants.js +70 -0
- package/dist/invariants.js.map +1 -1
- package/dist/membership/holder.d.ts +3 -5
- package/dist/membership/holder.d.ts.map +1 -1
- package/dist/membership/holder.js +165 -88
- package/dist/membership/holder.js.map +1 -1
- package/dist/membership.d.ts +31 -0
- package/dist/membership.d.ts.map +1 -1
- package/dist/membership.js +25 -2
- package/dist/membership.js.map +1 -1
- package/dist/message/holder.d.ts +49 -0
- package/dist/message/holder.d.ts.map +1 -0
- package/dist/message/holder.js +290 -0
- package/dist/message/holder.js.map +1 -0
- package/dist/message.d.ts +43 -0
- package/dist/message.d.ts.map +1 -0
- package/dist/message.js +51 -0
- package/dist/message.js.map +1 -0
- package/dist/receive.d.ts +4 -3
- package/dist/receive.d.ts.map +1 -1
- package/dist/receive.js +23 -4
- package/dist/receive.js.map +1 -1
- package/dist/results.d.ts +17 -2
- package/dist/results.d.ts.map +1 -1
- package/dist/results.js.map +1 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +9 -6
- package/dist/schemas.js.map +1 -1
- package/dist/state.d.ts +66 -5
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +2 -1
- package/dist/state.js.map +1 -1
- package/dist/trust/continuity.d.ts.map +1 -1
- package/dist/trust/continuity.js +7 -1
- package/dist/trust/continuity.js.map +1 -1
- package/dist/trust/entries.d.ts.map +1 -1
- package/dist/trust/entries.js +103 -2
- package/dist/trust/entries.js.map +1 -1
- package/dist/views.d.ts +34 -2
- package/dist/views.d.ts.map +1 -1
- package/dist/views.js +19 -1
- package/dist/views.js.map +1 -1
- package/dist/wire.d.ts +47 -6
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js.map +1 -1
- package/package.json +6 -2
- package/schemas/holder-state-v2.schema.json +4123 -0
package/dist/codec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,2EAA2E;AAC3E,wEAAwE;AACxE,sEAAsE;AACtE,2EAA2E;AAC3E,uEAAuE;AACvE,iEAAiE;AACjE,sEAAsE;AACtE,sCAAsC;AACtC,EAAE;AACF,0DAA0D;AAC1D,iFAAiF;AACjF,0EAA0E;AAC1E,2EAA2E;AAC3E,wEAAwE;AACxE,4EAA4E;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAI/B,qCAAqC;AACrC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAA;AAEtB;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAkD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAe1F,+EAA+E;AAC/E,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAqB;IAClC,oDAAoD;IAC3C,IAAI,CAAS;IACtB,YAAa,IAAyB,EAAE,OAAe,EAAE,IAAa;QACpE,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,IAAI,KAAK,OAAO,EAAE,CAAC,CAAA;QACpF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAC1C,CAAC;CACF;AAKD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,GAAW,EAAS,EAAE,GAAG,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC,CAAA;AACpG,MAAM,KAAK,GAAG,CAAC,CAAU,EAAgC,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAEpH,MAAM,GAAG,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,QAAQ;IAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA,CAAC,CAAC,CAAA;AAClF,MAAM,IAAI,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,SAAS;IAAE,IAAI,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAA,CAAC,CAAC,CAAA;AACrF,MAAM,IAAI,GAAM,GAAG,EAAE,GAAE,CAAC,CAAA,CAAqC,wCAAwC;AACrG,MAAM,GAAG,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,mCAAmC,CAAC,CAAA,CAAC,CAAC,CAAA;AACzI,MAAM,MAAM,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAK,CAAY,GAAG,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,4CAA4C,CAAC,CAAA,CAAC,CAAC,CAAA;AACxI,MAAM,OAAO,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAK,CAAY,GAAG,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAA,CAAC,CAAC,CAAA;AAC5H,MAAM,QAAQ,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAK,CAAY,GAAG,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAA,CAAC,CAAC,CAAA;AACzH,MAAM,GAAG,GAAG,CAAC,GAAG,IAAe,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAA,CAAC,CAAC,CAAA;AAC5J,MAAM,QAAQ,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI;IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,CAAA;AACnE,MAAM,GAAG,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAC/C;IAAC,CAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AACD,4CAA4C;AAC5C,MAAM,GAAG,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACZ,IAAI,IAAI,GAAG,CAAE,CAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAM,CAAe,CAAC,MAAM;QAAE,IAAI,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAA;AACrH,CAAC,CAAA;AACD,MAAM,GAAG,GAAG,CAAC,CAAI,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAA4B,CAAC;QAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACtF,CAAC,CAAA;AACD,sEAAsE;AACtE,MAAM,GAAG,GAAG,CAAC,GAAsB,EAAE,MAAyB,EAAE,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC/E,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,CAA4B,CAAA;IACtC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QACtD,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAAE,SAAQ;QACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,CAAA;QAC9D,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;AACH,CAAC,CAAA;AACD,6DAA6D;AAC7D,mCAAmC;AACnC,MAAM,MAAM,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA,CAAC,CAAC,CAAA;AACzE,MAAM,KAAK,GAAG,CAAC,CAAI,EAAE,OAAe,EAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACnD,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACZ,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAA4C,CAAC;QAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,EAAE,oBAAoB,CAAC,CAAA;AAC7J,CAAC,CAAA;AAED,0EAA0E;AAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAA;AAC1F,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;AAClG,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAA;AAC1E,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACtD,MAAM,WAAW,GAAG,CAAC,IAAO,EAAK,EAAE,CAAC,GAAG,CAAC;IACtC,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC;IACtG,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;CAC7F,CAAC,CAAA;AACF,uDAAuD;AACvD,MAAM,MAAM,GAAG,CAAC,IAAO,EAAK,EAAE;IAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAC/B,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACX,MAAM,CAAC,GAAG,CAAmD,CAAA;QAC7D,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,KAAK,IAAI,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAA;IACzH,CAAC,CAAA;AACH,CAAC,CAAA;AACD,MAAM,KAAK,GAAG,CAAC,QAAW,EAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AAChI,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;AAChD,MAAM,aAAa,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5G,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AACD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAChC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;AAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AACtG,MAAM,aAAa,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAChG,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AACD,MAAM,OAAO,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/F,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAClF,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,GAAG,CAAC;IAChB,YAAY,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,uBAAuB,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;IAChG,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChG,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW;IAC1C,QAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACnG,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzE,aAAa,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;IACnL,YAAY,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACvE,UAAU,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACrE,SAAS,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzE,UAAU,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC7B,SAAS,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAC1D,WAAW,EAAE,IAAI;CAClB,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,GAAG,CAAC;IACvB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC;IAC3F,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,EAAE,QAAQ,CAAC,GAAG,CAAC;IACtG,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAClH,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,GAAG,CAAC;CACzD,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG,GAAG,CAAC;IAClB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;IAC5G,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;IACzB,QAAQ,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACxH,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC;CAC5B,CAAC,CAAA;AAEF,MAAM,UAAU,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,CAA4B,CAAA;IACtC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAClF,KAAK,oBAAoB,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACtJ,KAAK,UAAU,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9D,KAAK,WAAW,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3E,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,sBAAsB;YACvD,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9K,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9G,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAA;IACvD,CAAC;AACH,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,GAAG,CAAC;IACtB,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC;CAC3F,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;AAC7B,2EAA2E;AAC3E,MAAM,UAAU,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC7B,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACjB,MAAM,CAAC,GAAG,CAAwE,CAAA;IAClF,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY;QAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAA;AACnH,CAAC,CAAA;AAED,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAC7B,yEAAyE;AACzE,MAAM,SAAS,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IAC5B,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACtK,MAAM,CAAC,GAAG,CAAwE,CAAA;IAClF,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY;QAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAA;AACnH,CAAC,CAAA;AAED,MAAM,YAAY,GAAuD;IACvE,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;IACvI,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,EAAE;IACvH,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE;IAC7G,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;IAC1K,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;IACnK,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;IAClI,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE;CACtF,CAAA;AAED,+FAA+F;AAC/F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAO,EAAkB,EAAE,CACrD,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,IAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAE5F,MAAM,IAAI,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACvB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,CAA4B,CAAA;IACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;IACtE,IAAI,WAAW,CAAC,CAAoB,CAAC;QAAE,YAAY,CAAC,CAAC,CAAC,IAAyB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC9F,CAAC,CAAA;AAED,MAAM,YAAY,GAAqE;IACrF,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACrC,kBAAkB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;IAC7D,iBAAiB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC7D,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IACxD,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;IACvE,kBAAkB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAClF,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACnC,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACtC,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClD,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAClC,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;IACpG,gBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;IACvI,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChI,iBAAiB,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACjD,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACvC,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC/B,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACjC,kBAAkB,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5D,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACrE,oBAAoB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC1E,iBAAiB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACrD,mBAAmB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACvD,oBAAoB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;IAClG,oBAAoB,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7E,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IACnC,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACjD,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;CACjD,CAAA;AACD,MAAM,KAAK,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACxB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACzC,MAAM,CAAC,GAAI,CAA6B,CAAC,IAAI,CAAA;IAC7C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAA;IACrG,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,YAAY,CAAC,CAAoB,CAAC,CAAA;IAC1D,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACxF,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;AAC/H,MAAM,cAAc,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;AAC9J,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;AAC1F,MAAM,UAAU,GAAG,GAAG,CAAC;IACrB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI;IACvF,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC;IAC7G,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9D,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAA;AACtF;8EAC8E;AAC9E,MAAM,KAAK,GAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACxB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAChB,MAAM,CAAC,GAAG,CAAoE,CAAA;IAC9E,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAA;IACpG,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAA;AAC9F,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;AAC/D,MAAM,eAAe,GAAG,GAAG,CAAC;IAC1B,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;IAC9H,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC;IAC9F,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI;CACxH,CAAC,CAAA;AAEF,MAAM,QAAQ,GAAG,GAAG,CAAC;IACnB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC;IAChE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC;IACpG,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC;IAC5G,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC/G,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI;IACzH,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC;CACpG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAA;AAErB,MAAM,MAAM,GAAG,GAAG,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACb,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,GAAG,CAAC;QACZ,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC;QACtC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IAClH,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;IAC9B,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC;IACxC,UAAU,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;IAC1B,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC3C,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC;QACnB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM;QACtF,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAC9D,CAAC,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;IAC7K,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;IACpI,SAAS,EAAE,GAAG,CAAC;QACb,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;QACtF,OAAO,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;QACtC,aAAa,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;QACrC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;QAChH,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC;QACrB,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;KACnG,CAAC;IACF,OAAO,EAAE,GAAG,CAAC;QACX,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACzG,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC;YACjB,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM;YACtI,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM;SAClE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,CAAC;KACzC,CAAC;CACH,CAAC,CAAA;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,UAAU,GAA6C,MAAM,CAAC,MAAM,CAAC;IAChF,CAAC,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;CACtC,CAAC,CAAA;AAEF,0EAA0E;AAE1E,6DAA6D;AAC7D,MAAM,SAAS,GAAG,CAAC,CAAU,EAAU,EAAE;IACvC,IAAI,CAAC;QAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;IAAC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,eAAe,CAAC,UAAU,EAAG,CAAW,CAAC,OAAO,CAAC,CAAA;IAAC,CAAC;AACjG,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,CAAS,EAAkB,EAAE;IACnE,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,0BAA0B,CAAC,EAAE,CAAC,CAAA;IACjF,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAE,GAAY,EAAE,KAAiB;IAC1D,IAAI,CAAC,GAAG,GAAG,CAAA;IACX,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC;YAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,eAAe,CAAC,UAAU,EAAG,CAAW,CAAC,OAAO,CAAC,CAAA;QAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAY,CAAA;IAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;IAC3C,MAAM,EAAE,GAAI,CAAyB,CAAC,KAAK,CAAA;IAC3C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,IAAK,EAAa,GAAG,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,sCAAsC,CAAC,CAAA;IACvI,IAAK,EAAa,GAAG,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,eAAe,CAAC,aAAa,EAAE,SAAS,EAAE,kBAAkB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IACtH,WAAW,CAAC,KAAK,EAAE,EAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,KAAK,IAAI,CAAC,GAAG,EAAY,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAA;QACnF,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjG,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,aAAa,GAAe,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA;AAElG;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAE,GAAY;IACvC,OAAO,WAAW,CAAC,GAAG,EAAE,aAAa,CAAgB,CAAA;AACvD,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAE,KAAkB;IAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC7B,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAc,EAAE,CAAc,EAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA","sourcesContent":["// codec — the HolderState storage format (lib Stage 2, note §2.2).\n//\n// decodeState is the one way in: JSON purity, then the codec version, then\n// the pure migration chain vN → vN+1, each step running between two states\n// validated by their codec's own validator (hand-written; no schema engine\n// in the published library). The validators check shape and a few local\n// consistency rules; referential and domain invariants (active heads,\n// register monotony, matching revisions) are the engine's (invariants.ts).\n// An unknown or higher codec is refused, never read best-effort. Store\n// adapters keep bytes or JSON and never migrate themselves. Wire\n// versions and the codec are independent; a migration never re-issues\n// stored documents, outbound or acks.\n//\n// Codec 1 is the format of 0.4.0: its golden fixtures are\n// lib/test/fixtures/*.json (deterministic runs, test/fixtures/gen-state-v1.mjs),\n// decoded and re-encoded byte-identically by test/codec-fixture.test.mjs.\n// The rule: codec 1 is read; a newer codec is codec-newer; a codec without\n// a validator is codec-unknown. Every later codec adds its validator, a\n// migration from the one before, and its own fixture with a migration test.\nimport { jcs } from './core.js'\nimport type { Duty, HolderState, KnownDuty } from './state.js'\nimport type { HolderEventType } from './events.js'\n\n/** The codec this library writes. */\nexport const CODEC = 1\n\n/**\n * Migrations keyed by the codec they read: MIGRATIONS[n] maps a valid\n * codec-n state to a codec-(n+1) state. Pure, never async, never keys.\n */\nexport const MIGRATIONS: Readonly<Record<number, (state: any) => any>> = Object.freeze({})\n\n/** A codec's structural validator: throws StateCodecError('shape') or returns. */\nexport type StateValidator = (raw: unknown) => void\n\n/** One codec chain: the target codec, its migrations and a validator for\n * every codec from the oldest readable one up to the target. */\nexport interface CodecChain {\n codec: number\n migrations: Readonly<Record<number, (state: any) => any>>\n validators: Readonly<Record<number, StateValidator>>\n}\n\nexport type StateCodecErrorCode = 'not-json' | 'codec-unknown' | 'codec-newer' | 'shape'\n\n/** A stored state the library will not load (or a state it will not write). */\nexport class StateCodecError extends Error {\n readonly code: StateCodecErrorCode\n /** JSON path of the offending value, for 'shape' */\n readonly path?: string\n constructor (code: StateCodecErrorCode, message: string, path?: string) {\n super(path === undefined ? `${code}: ${message}` : `${code} at ${path}: ${message}`)\n this.name = 'StateCodecError'\n this.code = code\n if (path !== undefined) this.path = path\n }\n}\n\n// ── the validator kit ──────────────────────────────────────────────────\ntype V = (x: unknown, path: string) => void\n\nconst fail = (path: string, msg: string): never => { throw new StateCodecError('shape', msg, path) }\nconst isObj = (x: unknown): x is Record<string, unknown> => x !== null && typeof x === 'object' && !Array.isArray(x)\n\nconst str: V = (x, p) => { if (typeof x !== 'string') fail(p, 'string expected') }\nconst bool: V = (x, p) => { if (typeof x !== 'boolean') fail(p, 'boolean expected') }\nconst json: V = () => {} // JSON purity is checked once, up front\nconst dec: V = (x, p) => { if (typeof x !== 'string' || !/^(0|[1-9][0-9]{0,17})$/.test(x)) fail(p, 'canonical decimal string expected') }\nconst millis: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 0) fail(p, 'non-negative integer milliseconds expected') }\nconst natural: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 0) fail(p, 'non-negative integer expected') }\nconst positive: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 1) fail(p, 'positive integer expected') }\nconst lit = (...vals: unknown[]): V => (x, p) => { if (!vals.includes(x)) fail(p, 'one of ' + vals.map((v) => JSON.stringify(v)).join(', ') + ' expected') }\nconst nullable = (v: V): V => (x, p) => { if (x !== null) v(x, p) }\nconst arr = (v: V): V => (x, p) => {\n if (!Array.isArray(x)) fail(p, 'array expected')\n ;(x as unknown[]).forEach((e, i) => v(e, `${p}[${i}]`))\n}\n/** an array used as a set: no duplicates */\nconst set = (v: V): V => (x, p) => {\n arr(v)(x, p)\n if (new Set((x as unknown[]).map((e) => jcs(e))).size !== (x as unknown[]).length) fail(p, 'duplicate set element')\n}\nconst rec = (v: V): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n for (const [k, e] of Object.entries(x as Record<string, unknown>)) v(e, `${p}.${k}`)\n}\n/** a closed object: required fields, optional fields, nothing else */\nconst obj = (req: Record<string, V>, opt: Record<string, V> = {}): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const o = x as Record<string, unknown>\n for (const k of Object.keys(req)) {\n if (!Object.hasOwn(o, k)) fail(`${p}.${k}`, 'missing')\n req[k](o[k], `${p}.${k}`)\n }\n for (const k of Object.keys(o)) {\n if (Object.hasOwn(req, k)) continue\n if (!Object.hasOwn(opt, k)) fail(`${p}.${k}`, 'unknown field')\n opt[k](o[k], `${p}.${k}`)\n }\n}\n/** a record whose values carry their own key in `idField` */\n/** a JSON object, contents open */\nconst anyObj: V = (x, p) => { if (!isObj(x)) fail(p, 'object expected') }\nconst keyed = (v: V, idField: string): V => (x, p) => {\n rec(v)(x, p)\n for (const [k, e] of Object.entries(x as Record<string, Record<string, unknown>>)) if (e[idField] !== k) fail(`${p}.${k}.${idField}`, 'must equal its key')\n}\n\n// ── the HolderState shape (state.ts) ───────────────────────────────────\nconst setting = lit('default', 'on', 'off')\nconst trustClass = lit('star', 'groupStar', 'anchorMapping', 'sealedGroupStar', 'profile')\nconst recipient = obj({ contactId: str, rkid: str, keyAgreement: str }, { anchor: str, via: str })\nconst envelope = obj({ rkid: str, epk: str, nonce: str, ciphertext: str })\nconst assembly = obj({ salt: dec, chunks: rec(json) })\nconst seqOutShape = (item: V): V => obj({\n lastSalt: dec, exhausted: bool, hwm: dec, snapshot: nullable(arr(item)), snapshotDigest: nullable(str),\n inflight: rec(obj({ view: arr(item), viewDigest: str, digests: arr(str), acked: arr(str) })),\n})\n/** the snapshot and its digest are present together */\nconst seqOut = (item: V): V => {\n const shape = seqOutShape(item)\n return (x, p) => {\n shape(x, p)\n const o = x as { snapshot: unknown, snapshotDigest: unknown }\n if ((o.snapshot === null) !== (o.snapshotDigest === null)) fail(`${p}.snapshotDigest`, 'null exactly when snapshot is')\n }\n}\nconst seqIn = (accepted: V): V => obj({ hwm: dec, lowerBound: dec, assembly: nullable(assembly), accepted: nullable(accepted) })\nconst starPair = obj({ member: str, head: str })\nconst groupStarItem: V = (x, p) => {\n if (isObj(x) && x.mode === 'sealed') return obj({ group: str, mode: str, member: str, memberOp: str })(x, p)\n obj({ group: str, mode: lit('digest') })(x, p)\n}\nconst starOut = seqOut(starPair)\nconst starIn = seqIn(obj({ salt: dec, blinded: arr(str), matches: arr(str) }))\nconst groupStarOut = seqOut(groupStarItem)\nconst groupStarIn = seqIn(obj({ salt: dec, entries: arr(obj({ d: str, c: str })), groups: arr(str) }))\nconst continuityDue: V = (x, p) => {\n if (isObj(x) && x.kind === 'choice') return obj({ kind: str, prior: str, alts: arr(str) })(x, p)\n obj({ kind: lit('report', 'align'), prior: str })(x, p)\n}\nconst logHead: V = (x, p) => {\n if (isObj(x) && Object.hasOwn(x, 'empty')) return obj({ genesis: str, empty: lit(true) })(x, p)\n obj({ genesis: str, entryId: str, gen: positive, next: str, commit: str })(x, p)\n}\n\nconst tuple = obj({\n ownPairLabel: str, counterpartAnchor: str, counterpartKeyAgreement: str, rkid: str, entryId: str,\n priorCandidates: arr(obj({ ownPairLabel: str, counterpartAnchor: str }, { replaces: arr(str) })),\n starOut, starIn, groupStarOut, groupStarIn,\n probeOut: obj({ seq: dec, inflight: rec(obj({ digests: arr(str), acked: arr(str) })), done: bool }),\n probeIn: obj({ hwm: dec, lowerBound: dec, assembly: nullable(assembly) }),\n continuityOut: obj({ rev: dec, body: json, proof: json, sent: arr(str), align: bool, chosen: nullable(str), reported: nullable(str), aligned: bool, due: nullable(continuityDue) }),\n continuityIn: obj({ rev: dec, body: json, recordPrior: nullable(str) }),\n mappingOut: obj({ rev: dec, body: json, underAnchor: nullable(str) }),\n mappingIn: obj({ rev: dec, body: json, self: nullable(str), card: json }),\n profileOut: obj({ rev: dec }),\n profileIn: obj({ rev: dec, body: json, verifiedSeq: dec }),\n deactivated: bool,\n})\n\nconst relationship = obj({\n id: str, contactId: str, tuples: arr(tuple), activeHead: str, earliestAnchor: nullable(str),\n links: arr(obj({ prev: str, next: str })), bindings: rec(set(str)), heldCounterpartHead: nullable(str),\n memory: rec(json), provenance: obj({ kind: lit('ceremony', 'introduced'), at: millis }, { via: str, viaPin: str }),\n chainedInto: nullable(str), firstVerified: nullable(dec),\n})\n\nconst contact = obj({\n id: str, pos: nullable(dec), status: lit('none', 'admitted', 'pending'), aliases: set(str), relIds: set(str),\n anchorHead: nullable(str),\n settings: obj({ star: setting, groupStar: setting, anchorMapping: setting, sealedGroupStar: setting, profile: setting }),\n groupSettings: rec(setting),\n})\n\nconst outboxStep: V = (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const s = x as Record<string, unknown>\n switch (s.status) {\n case 'submitted': return obj({ status: str, at: millis, attempt: positive })(x, p)\n case 'awaiting-transport': return obj({ status: str, at: millis, reason: lit('offline', 'transport-unreachable', 'carrier-refused-retriable') })(x, p)\n case 'accepted': return obj({ status: str, at: millis })(x, p)\n case 'delivered': return obj({ status: str, at: millis, late: bool })(x, p)\n case 'failed': return s.reason === 'rejected-by-receiver'\n ? obj({ status: str, at: millis, reason: str, code: lit('malformedRequest', 'unsupportedType', 'proofRequired', 'proofInvalid', 'wrongRecipient', 'identityMismatch') })(x, p)\n : obj({ status: str, at: millis, reason: lit('unroutable', 'oversize', 'expired-by-adapter-policy') })(x, p)\n default: fail(`${p}.status`, 'unknown outbox status')\n }\n}\n\nconst outboxShape = obj({\n type: str, threadId: str, recipient, envelope, attempt: positive, history: arr(outboxStep),\n}, { nextAttemptAt: millis })\n/** the envelope is sealed to the counterpart key, never to the own rkid */\nconst outboxItem: V = (x, p) => {\n outboxShape(x, p)\n const o = x as { recipient: { keyAgreement: string }, envelope: { rkid: string } }\n if (o.envelope.rkid !== o.recipient.keyAgreement) fail(`${p}.envelope.rkid`, 'must equal recipient.keyAgreement')\n}\n\nconst DUE = { dueAt: millis }\n/** a retained ack: sealed to the counterpart key, like an outbox item */\nconst storedAck: V = (x, p) => {\n obj({ digest: str, envelope, threadId: str, recipient, at: millis, attempt: positive, sent: bool }, { nextAttemptAt: millis, sentBy: lit('report', 'horizon') })(x, p)\n const a = x as { recipient: { keyAgreement: string }, envelope: { rkid: string } }\n if (a.envelope.rkid !== a.recipient.keyAgreement) fail(`${p}.envelope.rkid`, 'must equal recipient.keyAgreement')\n}\n\nconst KNOWN_DUTIES: Record<KnownDuty['kind'], { v: number, shape: V }> = {\n 'reissue-mapping': { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, awaitHead: nullable(str) }, DUE) },\n 'class-on': { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, cls: trustClass }, DUE) },\n profile: { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, rev: dec }, DUE) },\n continuity: { v: 1, shape: obj({ kind: str, v: positive, id: str, relId: str, tuple: str, step: lit('probe', 'mapping') }, { ...DUE, attempt: natural, lastAt: millis }) },\n merge: { v: 1, shape: obj({ kind: str, v: positive, id: str, entryIds: set(str), relId: str, witness: obj({ heads: rec(str), superseded: rec(set(str)) }) }, DUE) },\n rotation: { v: 1, shape: obj({ kind: str, v: positive, id: str, rotationId: str }, { ...DUE, attempt: natural, lastAt: millis }) },\n 'intro-ack': { v: 1, shape: obj({ kind: str, v: positive, id: str, act: str }, DUE) },\n}\n\n/** Is this a duty kind and version this library handles? Unknown ones are kept as they are. */\nexport const isKnownDuty = (d: Duty): d is KnownDuty =>\n Object.hasOwn(KNOWN_DUTIES, d.kind) && KNOWN_DUTIES[d.kind as KnownDuty['kind']].v === d.v\n\nconst duty: V = (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const d = x as Record<string, unknown>\n str(d.kind, `${p}.kind`); natural(d.v, `${p}.v`); str(d.id, `${p}.id`)\n if (isKnownDuty(d as unknown as Duty)) KNOWN_DUTIES[d.kind as KnownDuty['kind']].shape(x, p)\n}\n\nconst EVENT_FIELDS: Record<HolderEventType, [Record<string, V>, Record<string, V>?]> = {\n 'contact.added': [{ contactId: str }],\n 'contact.verified': [{ contactId: str, relationshipId: str }],\n 'contact.chained': [{ contactId: str, from: str, into: str }],\n 'contact.merged': [{ contactId: str, merged: arr(str) }],\n 'contact.split': [{ contactId: str, leaver: str, relationshipId: str }],\n 'contact.departed': [{ contactId: str, relationshipIds: arr(str), removed: bool }],\n 'trust.given': [{ contactId: str }],\n 'trust.received': [{ contactId: str }],\n 'trust.paused': [{ contactId: str, paused: bool }],\n 'group.joined': [{ groupId: str }],\n 'prompt.opened': [{ promptId: str, kind: lit('encounter-confirm', 'group-invite', 'introduction') }],\n 'prompt.decided': [{ promptId: str, kind: lit('encounter-confirm', 'group-invite', 'introduction'), choice: lit('accept', 'decline') }],\n 'delivery.status': [{ digest: str, threadId: str, status: lit('submitted', 'accepted', 'delivered', 'failed') }, { late: bool }],\n 'profile.updated': [{ contactId: nullable(str) }],\n 'anchor.rotated': [{ generation: dec }],\n 'device.added': [{ name: str }],\n 'device.revoked': [{ name: str }],\n 'duty.unsupported': [{ dutyId: str, kind: str, v: natural }],\n 'star.accepted': [{ contactId: str, relationshipId: str, salt: dec }],\n 'groupStar.accepted': [{ contactId: str, relationshipId: str, salt: dec }],\n 'encounter.shown': [{ challenge: str, card: anyObj }],\n 'encounter.scanned': [{ contactId: str, card: anyObj }],\n 'encounter.recorded': [{ contactId: str, relationshipId: str, role: lit('scanner', 'displayer') }],\n 'encounter.accepted': [{ contactId: str, relationshipId: str, mutual: bool }],\n 'group.founded': [{ groupId: str }],\n 'group.admitted': [{ groupId: str, member: str }],\n 'group.vouched': [{ groupId: str, member: str }],\n}\nconst event: V = (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const t = (x as Record<string, unknown>).type\n if (typeof t !== 'string' || !Object.hasOwn(EVENT_FIELDS, t)) fail(`${p}.type`, 'unknown event type')\n const [req, opt = {}] = EVENT_FIELDS[t as HolderEventType]\n obj({ type: str, eventId: str, commitSeq: dec, ...req }, { actId: str, ...opt })(x, p)\n}\n\nconst rosterEntry = obj({ anchor: str, op: str, keyAgreement: str, addedAt: millis }, { name: str, contactId: str, rkid: str })\nconst openInvitation = obj({ invitee: str, keyAgreement: str, contactId: str, rkid: str, threadId: str, credDigest: str, invite: anyObj, validUntil: millis })\nconst evidence = obj({ invite: anyObj, accept: anyObj, vouches: arr(anyObj), at: millis })\nconst groupShape = obj({\n id: str, name: str, memberLabel: str, rules: obj({ vouchThreshold: dec }), listed: bool,\n roster: keyed(rosterEntry, 'anchor'), invitations: keyed(openInvitation, 'threadId'), evidence: rec(evidence),\n preludes: rec(obj({ contactId: str, rkid: str, at: millis })),\n}, { did: str, genesis: anyObj, memberAnchor: str, memberOp: str, acceptDigest: str })\n/** a listed group carries its member anchor and memberOp: the group star\n * seals them (Trust 5400, 5430), and their absence is no filler condition */\nconst group: V = (x, p) => {\n groupShape(x, p)\n const g = x as { listed: boolean, memberAnchor?: unknown, memberOp?: unknown }\n if (g.listed && g.memberAnchor === undefined) fail(`${p}.memberAnchor`, 'missing on a listed group')\n if (g.listed && g.memberOp === undefined) fail(`${p}.memberOp`, 'missing on a listed group')\n}\n\nconst heldCredential = obj({ digest: str, credential: anyObj })\nconst enactmentRecord = obj({\n ceremony: str, own: str, tCh: millis, peer: str, counterpart: str, card: anyObj, bind: str, at: millis, label: str, relId: str,\n role: lit('scanner', 'displayer'), out: nullable(heldCredential), in: nullable(heldCredential),\n thread: nullable(str), bundleDigest: nullable(str), threads: rec(str), sentCard: nullable(anyObj), counterPending: bool,\n})\n\nconst introAct = obj({\n key: str, act: str, role: lit('requester', 'mediator', 'target'),\n status: lit('sent', 'acked', 'completed', 'failed', 'received', 'forwarded', 'consented', 'refused'),\n issuedAt: millis, request: anyObj, requestCard: anyObj, reply: nullable(anyObj), replyCard: nullable(anyObj),\n pins: obj({}, { requester: str, target: str, mediator: str }), threads: obj({ request: str }, { forward: str }),\n at: millis, ackDelayMs: natural, ownLabel: nullable(str), ack: nullable(anyObj), replyForwarded: bool, vouchersSent: bool,\n pendingVoucher: nullable(anyObj), voucher: nullable(anyObj), vouched: bool, promptId: nullable(str),\n}, { peerName: str })\n\nconst codec1 = obj({\n codec: lit(1),\n commitSeq: dec,\n lastWhen: millis,\n register: obj({\n labels: set(str), pairNonces: rec(str),\n carriers: rec(arr(obj({ nonce: str, generation: dec }))),\n devices: obj({ names: set(str), revoked: set(str) }),\n community: nullable(obj({ genesis: str, head: dec })),\n lineage: arr(anyObj),\n }),\n addresses: obj({ keys: rec(obj({ label: str, lastShown: millis }, { retiredAt: millis })), tombstones: set(str) }),\n contacts: keyed(contact, 'id'),\n relationships: keyed(relationship, 'id'),\n entryOrder: obj({ nextPos: dec, heads: set(str) }),\n groups: keyed(group, 'id'),\n profile: obj({ body: json, revision: dec }),\n effects: rec(obj({ ack: nullable(storedAck), expiresAt: millis })),\n outbox: rec(outboxItem),\n duties: keyed(duty, 'id'),\n rotations: keyed(obj({\n id: str, from: dec, to: dec, step: lit('register', 'log', 'duties'), startedAt: millis,\n entry: json, overHead: logHead, awaitHead: rec(nullable(str)),\n }), 'id'),\n prompts: keyed(obj({ id: str, kind: lit('encounter-confirm', 'group-invite', 'introduction'), openedAt: millis }, { contactId: str, groupId: str, expiresAt: millis }), 'id'),\n acts: keyed(obj({ actId: str, inputHash: str, commitSeq: dec, outboundDigests: arr(str), events: arr(event), at: millis }), 'actId'),\n encounter: obj({\n challenges: keyed(obj({ value: str, tCh: millis, label: str, card: anyObj }), 'value'),\n records: keyed(enactmentRecord, 'own'),\n introductions: keyed(introAct, 'key'),\n offers: keyed(obj({ id: str, mediatorContactId: str, pin: str, target: str, at: millis }, { label: str }), 'id'),\n designators: rec(str),\n declarations: rec(obj({ issuer: str, role: str, revision: dec, constants: rec(str), at: millis })),\n }),\n joining: obj({\n preludes: rec(obj({ group: str, inviter: str, contactId: str, rkid: str, memberLabel: str, at: millis })),\n invites: keyed(obj({\n credDigest: str, group: str, name: str, contactId: str, rkid: str, memberLabel: str, invite: anyObj, promptId: str, validUntil: millis,\n status: lit('open', 'accepted', 'declined', 'joined'), at: millis,\n }, { acceptDigest: str }), 'credDigest'),\n }),\n})\n\n/** Structural validators per codec version; every readable codec has one. */\nexport const VALIDATORS: Readonly<Record<number, StateValidator>> = Object.freeze({\n 1: (raw: unknown) => codec1(raw, '$'),\n})\n\n// ── the codec ──────────────────────────────────────────────────────────\n\n/** Canonical JSON text of a JSON-pure value, or not-json. */\nconst canonical = (x: unknown): string => {\n try { return jcs(x) } catch (e) { throw new StateCodecError('not-json', (e as Error).message) }\n}\n\nconst validatorOf = (chain: CodecChain, c: number): StateValidator => {\n const v = chain.validators[c]\n if (!v) throw new StateCodecError('codec-unknown', `no validator for codec ${c}`)\n return v\n}\n\n/**\n * Decode under an explicit chain: JSON purity, codec gate, then\n * validate(c) → migrate(c) → validate(c+1) … up to chain.codec. Returns\n * an independent copy. decodeState is this function over the library's\n * own chain; tests drive it with fake chains.\n */\nexport function decodeChain (raw: unknown, chain: CodecChain): unknown {\n let x = raw\n if (typeof raw === 'string') {\n try { x = JSON.parse(raw) } catch (e) { throw new StateCodecError('not-json', (e as Error).message) }\n }\n let s = JSON.parse(canonical(x)) as unknown\n if (!isObj(s)) fail('$', 'object expected')\n const at = (s as { codec?: unknown }).codec\n if (!Number.isSafeInteger(at) || (at as number) < 0) throw new StateCodecError('codec-unknown', 'codec must be a non-negative integer')\n if ((at as number) > chain.codec) throw new StateCodecError('codec-newer', `codec ${at} is newer than ${chain.codec}`)\n validatorOf(chain, at as number)(s)\n for (let c = at as number; c < chain.codec; c++) {\n const up = chain.migrations[c]\n if (!up) throw new StateCodecError('codec-unknown', `no migration from codec ${c}`)\n s = JSON.parse(canonical(up(JSON.parse(canonical(s)))))\n if (!isObj(s) || s.codec !== c + 1) fail('$.codec', `migration ${c} must produce codec ${c + 1}`)\n validatorOf(chain, c + 1)(s)\n }\n return s\n}\n\nconst LIBRARY_CHAIN: CodecChain = { codec: CODEC, migrations: MIGRATIONS, validators: VALIDATORS }\n\n/**\n * Load a stored state: a JSON string or an already parsed value. Returns\n * an independent copy at the current codec, or throws StateCodecError.\n */\nexport function decodeState (raw: unknown): HolderState {\n return decodeChain(raw, LIBRARY_CHAIN) as HolderState\n}\n\n/** Serialize a state for storage: canonical JSON, validated first. */\nexport function encodeState (state: HolderState): string {\n const text = canonical(state)\n validatorOf(LIBRARY_CHAIN, CODEC)(JSON.parse(text))\n return text\n}\n\n/** Deterministic equality of two states (their JCS forms). */\nexport const sameState = (a: HolderState, b: HolderState): boolean => jcs(a) === jcs(b)\n"]}
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"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","sourcesContent":["// codec — the HolderState storage format (lib Stage 2, note §2.2).\n//\n// decodeState is the one way in: JSON purity, then the codec version, then\n// the pure migration chain vN → vN+1, each step running between two states\n// validated by their codec's own validator (hand-written; no schema engine\n// in the published library). The validators check shape and a few local\n// consistency rules; referential and domain invariants (active heads,\n// register monotony, matching revisions) are the engine's (invariants.ts).\n// An unknown or higher codec is refused, never read best-effort. Store\n// adapters keep bytes or JSON and never migrate themselves. Wire\n// versions and the codec are independent; a migration never re-issues\n// stored documents, outbound or acks.\n//\n// Codec 1 is the format of 0.4.0: its golden fixtures are\n// lib/test/fixtures/state-v1*.json (runs of lib 0.4.0, frozen), decoded and\n// re-encoded byte-identically and migrated by test/codec-fixture.test.mjs.\n// Codec 2 is the format of 0.5.0 (Message Tasks 0.1, Membership 0.20): its\n// fixtures are lib/test/fixtures/state-v2*.json (deterministic runs,\n// test/fixtures/gen-state-v2.mjs, reproduced in npm test). The rule: codecs\n// 1 and 2 are read, 1 migrated to 2; a newer codec is codec-newer; a codec\n// without a validator is codec-unknown. Every later codec adds its\n// validator, a migration from the one before, and its own fixture with a\n// migration test.\nimport { jcs } from './core.js'\nimport type { Duty, HolderState, KnownDuty } from './state.js'\nimport type { HolderEventType } from './events.js'\n\n/** The codec this library writes. */\nexport const CODEC = 2\n\n/** The tuples of a codec-1 state on which a document of the counterpart\n * was accepted, as far as the state shows it (Message Tasks 5.1): a probe,\n * a star, a group star, a continuity or anchor mapping, or a profile\n * received; or the counterparty's step credential of its enactment record. */\nfunction readyOf1 (s: any): string[] {\n const out = new Set<string>()\n const inRec = new Set<string>(Object.values(s.encounter.records as Record<string, any>).filter((r) => r.in !== null).map((r) => r.label))\n for (const r of Object.values(s.relationships as Record<string, any>)) {\n for (const t of r.tuples) {\n if (t.probeIn.hwm !== '0' || t.starIn.hwm !== '0' || t.groupStarIn.hwm !== '0' || t.continuityIn.rev !== '0' ||\n t.mappingIn.rev !== '0' || t.profileIn.rev !== '0' || inRec.has(t.ownPairLabel)) out.add(t.ownPairLabel)\n }\n }\n return [...out].sort()\n}\n\n/**\n * Migrations keyed by the codec they read: MIGRATIONS[n] maps a valid\n * codec-n state to a codec-(n+1) state. Pure, never async, never keys.\n *\n * 1 → 2 (lib 0.5.0, Message Tasks 0.1, Membership 0.20): the message\n * state starts empty (no block, no rate, no record, no inbox) but for the\n * ready tuples, read from what the state shows a counterpart's document\n * did (readyOf1); every invitation a codec-1 holder received was\n * surfaced, so their credential digests seed the permanent record of\n * RLTP-MT-3130; the register of declined invitations starts empty (codec 1\n * knew no block).\n */\nexport const MIGRATIONS: Readonly<Record<number, (state: any) => any>> = Object.freeze({\n 1: (s: any) => ({\n ...s,\n codec: 2,\n joining: { ...s.joining, surfaced: Object.keys(s.joining.invites).sort(), declined: [] },\n messages: { blocked: [], rates: {}, ready: readyOf1(s), records: {}, inbox: {} },\n }),\n})\n\n/** A codec's structural validator: throws StateCodecError('shape') or returns. */\nexport type StateValidator = (raw: unknown) => void\n\n/** One codec chain: the target codec, its migrations and a validator for\n * every codec from the oldest readable one up to the target. */\nexport interface CodecChain {\n codec: number\n migrations: Readonly<Record<number, (state: any) => any>>\n validators: Readonly<Record<number, StateValidator>>\n}\n\nexport type StateCodecErrorCode = 'not-json' | 'codec-unknown' | 'codec-newer' | 'shape'\n\n/** A stored state the library will not load (or a state it will not write). */\nexport class StateCodecError extends Error {\n readonly code: StateCodecErrorCode\n /** JSON path of the offending value, for 'shape' */\n readonly path?: string\n constructor (code: StateCodecErrorCode, message: string, path?: string) {\n super(path === undefined ? `${code}: ${message}` : `${code} at ${path}: ${message}`)\n this.name = 'StateCodecError'\n this.code = code\n if (path !== undefined) this.path = path\n }\n}\n\n// ── the validator kit ──────────────────────────────────────────────────\ntype V = (x: unknown, path: string) => void\n\nconst fail = (path: string, msg: string): never => { throw new StateCodecError('shape', msg, path) }\nconst isObj = (x: unknown): x is Record<string, unknown> => x !== null && typeof x === 'object' && !Array.isArray(x)\n\nconst str: V = (x, p) => { if (typeof x !== 'string') fail(p, 'string expected') }\nconst bool: V = (x, p) => { if (typeof x !== 'boolean') fail(p, 'boolean expected') }\nconst json: V = () => {} // JSON purity is checked once, up front\nconst dec: V = (x, p) => { if (typeof x !== 'string' || !/^(0|[1-9][0-9]{0,17})$/.test(x)) fail(p, 'canonical decimal string expected') }\nconst millis: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 0) fail(p, 'non-negative integer milliseconds expected') }\nconst natural: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 0) fail(p, 'non-negative integer expected') }\nconst positive: V = (x, p) => { if (!Number.isSafeInteger(x) || (x as number) < 1) fail(p, 'positive integer expected') }\nconst lit = (...vals: unknown[]): V => (x, p) => { if (!vals.includes(x)) fail(p, 'one of ' + vals.map((v) => JSON.stringify(v)).join(', ') + ' expected') }\nconst nullable = (v: V): V => (x, p) => { if (x !== null) v(x, p) }\nconst arr = (v: V): V => (x, p) => {\n if (!Array.isArray(x)) fail(p, 'array expected')\n ;(x as unknown[]).forEach((e, i) => v(e, `${p}[${i}]`))\n}\n/** an array used as a set: no duplicates */\nconst set = (v: V): V => (x, p) => {\n arr(v)(x, p)\n if (new Set((x as unknown[]).map((e) => jcs(e))).size !== (x as unknown[]).length) fail(p, 'duplicate set element')\n}\nconst rec = (v: V): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n for (const [k, e] of Object.entries(x as Record<string, unknown>)) v(e, `${p}.${k}`)\n}\n/** a closed object: required fields, optional fields, nothing else */\nconst obj = (req: Record<string, V>, opt: Record<string, V> = {}): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const o = x as Record<string, unknown>\n for (const k of Object.keys(req)) {\n if (!Object.hasOwn(o, k)) fail(`${p}.${k}`, 'missing')\n req[k](o[k], `${p}.${k}`)\n }\n for (const k of Object.keys(o)) {\n if (Object.hasOwn(req, k)) continue\n if (!Object.hasOwn(opt, k)) fail(`${p}.${k}`, 'unknown field')\n opt[k](o[k], `${p}.${k}`)\n }\n}\n/** a record whose values carry their own key in `idField` */\n/** a JSON object, contents open */\nconst anyObj: V = (x, p) => { if (!isObj(x)) fail(p, 'object expected') }\nconst keyed = (v: V, idField: string): V => (x, p) => {\n rec(v)(x, p)\n for (const [k, e] of Object.entries(x as Record<string, Record<string, unknown>>)) if (e[idField] !== k) fail(`${p}.${k}.${idField}`, 'must equal its key')\n}\n\n// ── the HolderState shape (state.ts) ───────────────────────────────────\nconst setting = lit('default', 'on', 'off')\nconst trustClass = lit('star', 'groupStar', 'anchorMapping', 'sealedGroupStar', 'profile')\nconst recipient = obj({ contactId: str, rkid: str, keyAgreement: str }, { anchor: str, via: str })\nconst envelope = obj({ rkid: str, epk: str, nonce: str, ciphertext: str })\nconst assembly = obj({ salt: dec, chunks: rec(json) })\nconst seqOutShape = (item: V): V => obj({\n lastSalt: dec, exhausted: bool, hwm: dec, snapshot: nullable(arr(item)), snapshotDigest: nullable(str),\n inflight: rec(obj({ view: arr(item), viewDigest: str, digests: arr(str), acked: arr(str) })),\n})\n/** the snapshot and its digest are present together */\nconst seqOut = (item: V): V => {\n const shape = seqOutShape(item)\n return (x, p) => {\n shape(x, p)\n const o = x as { snapshot: unknown, snapshotDigest: unknown }\n if ((o.snapshot === null) !== (o.snapshotDigest === null)) fail(`${p}.snapshotDigest`, 'null exactly when snapshot is')\n }\n}\nconst seqIn = (accepted: V): V => obj({ hwm: dec, lowerBound: dec, assembly: nullable(assembly), accepted: nullable(accepted) })\nconst starPair = obj({ member: str, head: str })\nconst groupStarItem: V = (x, p) => {\n if (isObj(x) && x.mode === 'sealed') return obj({ group: str, mode: str, member: str, memberOp: str })(x, p)\n obj({ group: str, mode: lit('digest') })(x, p)\n}\nconst starOut = seqOut(starPair)\nconst starIn = seqIn(obj({ salt: dec, blinded: arr(str), matches: arr(str) }))\nconst groupStarOut = seqOut(groupStarItem)\nconst groupStarIn = seqIn(obj({ salt: dec, entries: arr(obj({ d: str, c: str })), groups: arr(str) }))\nconst continuityDue: V = (x, p) => {\n if (isObj(x) && x.kind === 'choice') return obj({ kind: str, prior: str, alts: arr(str) })(x, p)\n obj({ kind: lit('report', 'align'), prior: str })(x, p)\n}\nconst logHead: V = (x, p) => {\n if (isObj(x) && Object.hasOwn(x, 'empty')) return obj({ genesis: str, empty: lit(true) })(x, p)\n obj({ genesis: str, entryId: str, gen: positive, next: str, commit: str })(x, p)\n}\n\nconst tuple = obj({\n ownPairLabel: str, counterpartAnchor: str, counterpartKeyAgreement: str, rkid: str, entryId: str,\n priorCandidates: arr(obj({ ownPairLabel: str, counterpartAnchor: str }, { replaces: arr(str) })),\n starOut, starIn, groupStarOut, groupStarIn,\n probeOut: obj({ seq: dec, inflight: rec(obj({ digests: arr(str), acked: arr(str) })), done: bool }),\n probeIn: obj({ hwm: dec, lowerBound: dec, assembly: nullable(assembly) }),\n continuityOut: obj({ rev: dec, body: json, proof: json, sent: arr(str), align: bool, chosen: nullable(str), reported: nullable(str), aligned: bool, due: nullable(continuityDue) }),\n continuityIn: obj({ rev: dec, body: json, recordPrior: nullable(str) }),\n mappingOut: obj({ rev: dec, body: json, underAnchor: nullable(str) }),\n mappingIn: obj({ rev: dec, body: json, self: nullable(str), card: json }),\n profileOut: obj({ rev: dec }),\n profileIn: obj({ rev: dec, body: json, verifiedSeq: dec }),\n deactivated: bool,\n})\n\nconst relationship = obj({\n id: str, contactId: str, tuples: arr(tuple), activeHead: str, earliestAnchor: nullable(str),\n links: arr(obj({ prev: str, next: str })), bindings: rec(set(str)), heldCounterpartHead: nullable(str),\n memory: rec(json), provenance: obj({ kind: lit('ceremony', 'introduced'), at: millis }, { via: str, viaPin: str }),\n chainedInto: nullable(str), firstVerified: nullable(dec),\n})\n\nconst contact = obj({\n id: str, pos: nullable(dec), status: lit('none', 'admitted', 'pending'), aliases: set(str), relIds: set(str),\n anchorHead: nullable(str),\n settings: obj({ star: setting, groupStar: setting, anchorMapping: setting, sealedGroupStar: setting, profile: setting }),\n groupSettings: rec(setting),\n})\n\n/** an outbox step of codec n: codec 2 added the failure reason task-expired */\nconst outboxStepOf = (codec: number): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const s = x as Record<string, unknown>\n switch (s.status) {\n case 'submitted': return obj({ status: str, at: millis, attempt: positive })(x, p)\n case 'awaiting-transport': return obj({ status: str, at: millis, reason: lit('offline', 'transport-unreachable', 'carrier-refused-retriable') })(x, p)\n case 'accepted': return obj({ status: str, at: millis })(x, p)\n case 'delivered': return obj({ status: str, at: millis, late: bool })(x, p)\n case 'failed': return s.reason === 'rejected-by-receiver'\n ? obj({ status: str, at: millis, reason: str, code: lit('malformedRequest', 'unsupportedType', 'proofRequired', 'proofInvalid', 'wrongRecipient', 'identityMismatch') })(x, p)\n : obj({ status: str, at: millis, reason: codec < 2 ? lit('unroutable', 'oversize', 'expired-by-adapter-policy') : lit('unroutable', 'oversize', 'expired-by-adapter-policy', 'task-expired') })(x, p)\n default: fail(`${p}.status`, 'unknown outbox status')\n }\n}\n\n/** an outbox item of codec n: codec 2 added expiresAt (the sender lifetime);\n * the envelope is sealed to the counterpart key, never to the own rkid */\nconst outboxItemOf = (codec: number): V => {\n const shape = obj({\n type: str, threadId: str, recipient, envelope, attempt: positive, history: arr(outboxStepOf(codec)),\n }, codec < 2 ? { nextAttemptAt: millis } : { nextAttemptAt: millis, expiresAt: millis })\n return (x, p) => {\n shape(x, p)\n const o = x as { recipient: { keyAgreement: string }, envelope: { rkid: string } }\n if (o.envelope.rkid !== o.recipient.keyAgreement) fail(`${p}.envelope.rkid`, 'must equal recipient.keyAgreement')\n }\n}\n\nconst DUE = { dueAt: millis }\n/** a retained ack: sealed to the counterpart key, like an outbox item */\nconst storedAck: V = (x, p) => {\n obj({ digest: str, envelope, threadId: str, recipient, at: millis, attempt: positive, sent: bool }, { nextAttemptAt: millis, sentBy: lit('report', 'horizon') })(x, p)\n const a = x as { recipient: { keyAgreement: string }, envelope: { rkid: string } }\n if (a.envelope.rkid !== a.recipient.keyAgreement) fail(`${p}.envelope.rkid`, 'must equal recipient.keyAgreement')\n}\n\nconst KNOWN_DUTIES: Record<KnownDuty['kind'], { v: number, shape: V }> = {\n 'reissue-mapping': { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, awaitHead: nullable(str) }, DUE) },\n 'class-on': { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, cls: trustClass }, DUE) },\n profile: { v: 1, shape: obj({ kind: str, v: positive, id: str, contactId: str, relId: str, rev: dec }, DUE) },\n continuity: { v: 1, shape: obj({ kind: str, v: positive, id: str, relId: str, tuple: str, step: lit('probe', 'mapping') }, { ...DUE, attempt: natural, lastAt: millis }) },\n merge: { v: 1, shape: obj({ kind: str, v: positive, id: str, entryIds: set(str), relId: str, witness: obj({ heads: rec(str), superseded: rec(set(str)) }) }, DUE) },\n rotation: { v: 1, shape: obj({ kind: str, v: positive, id: str, rotationId: str }, { ...DUE, attempt: natural, lastAt: millis }) },\n 'intro-ack': { v: 1, shape: obj({ kind: str, v: positive, id: str, act: str }, DUE) },\n}\n\n/** Is this a duty kind and version this library handles? Unknown ones are kept as they are. */\nexport const isKnownDuty = (d: Duty): d is KnownDuty =>\n Object.hasOwn(KNOWN_DUTIES, d.kind) && KNOWN_DUTIES[d.kind as KnownDuty['kind']].v === d.v\n\nconst duty: V = (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const d = x as Record<string, unknown>\n str(d.kind, `${p}.kind`); natural(d.v, `${p}.v`); str(d.id, `${p}.id`)\n if (isKnownDuty(d as unknown as Duty)) KNOWN_DUTIES[d.kind as KnownDuty['kind']].shape(x, p)\n}\n\nconst EVENT_FIELDS: Record<HolderEventType, [Record<string, V>, Record<string, V>?]> = {\n 'contact.added': [{ contactId: str }],\n 'contact.verified': [{ contactId: str, relationshipId: str }],\n 'contact.chained': [{ contactId: str, from: str, into: str }],\n 'contact.merged': [{ contactId: str, merged: arr(str) }],\n 'contact.split': [{ contactId: str, leaver: str, relationshipId: str }],\n 'contact.departed': [{ contactId: str, relationshipIds: arr(str), removed: bool }],\n 'trust.given': [{ contactId: str }],\n 'trust.received': [{ contactId: str }],\n 'trust.paused': [{ contactId: str, paused: bool }],\n 'group.joined': [{ groupId: str }],\n 'prompt.opened': [{ promptId: str, kind: lit('encounter-confirm', 'group-invite', 'introduction') }],\n 'prompt.decided': [{ promptId: str, kind: lit('encounter-confirm', 'group-invite', 'introduction'), choice: lit('accept', 'decline') }],\n 'delivery.status': [{ digest: str, threadId: str, status: lit('submitted', 'accepted', 'delivered', 'failed') }, { late: bool }],\n 'profile.updated': [{ contactId: nullable(str) }],\n 'anchor.rotated': [{ generation: dec }],\n 'device.added': [{ name: str }],\n 'device.revoked': [{ name: str }],\n 'duty.unsupported': [{ dutyId: str, kind: str, v: natural }],\n 'star.accepted': [{ contactId: str, relationshipId: str, salt: dec }],\n 'groupStar.accepted': [{ contactId: str, relationshipId: str, salt: dec }],\n 'encounter.shown': [{ challenge: str, card: anyObj }],\n 'encounter.scanned': [{ contactId: str, card: anyObj }],\n 'encounter.recorded': [{ contactId: str, relationshipId: str, role: lit('scanner', 'displayer') }],\n 'encounter.accepted': [{ contactId: str, relationshipId: str, mutual: bool }],\n 'group.founded': [{ groupId: str }],\n 'group.admitted': [{ groupId: str, member: str }],\n 'group.vouched': [{ groupId: str, member: str }],\n 'contact.blocked': [{ contactId: str, blocked: bool }],\n 'message.sent': [{ contactId: str, mid: str, digest: str }],\n 'message.received': [{ contactId: str, inboxId: str }],\n}\n/** the event types codec 2 added: codec 1 does not know them */\nconst EVENTS_SINCE_2: ReadonlySet<string> = new Set(['contact.blocked', 'message.sent', 'message.received'])\nconst eventOf = (codec: number): V => (x, p) => {\n if (!isObj(x)) fail(p, 'object expected')\n const t = (x as Record<string, unknown>).type\n if (typeof t !== 'string' || !Object.hasOwn(EVENT_FIELDS, t) || (codec < 2 && EVENTS_SINCE_2.has(t))) fail(`${p}.type`, 'unknown event type')\n const [req, opt = {}] = EVENT_FIELDS[t as HolderEventType]\n obj({ type: str, eventId: str, commitSeq: dec, ...req }, { actId: str, ...opt })(x, p)\n}\n\nconst rosterEntry = obj({ anchor: str, op: str, keyAgreement: str, addedAt: millis }, { name: str, contactId: str, rkid: str })\nconst openInvitation = obj({ invitee: str, keyAgreement: str, contactId: str, rkid: str, threadId: str, credDigest: str, invite: anyObj, validUntil: millis })\nconst evidence = obj({ invite: anyObj, accept: anyObj, vouches: arr(anyObj), at: millis })\nconst groupShape = obj({\n id: str, name: str, memberLabel: str, rules: obj({ vouchThreshold: dec }), listed: bool,\n roster: keyed(rosterEntry, 'anchor'), invitations: keyed(openInvitation, 'threadId'), evidence: rec(evidence),\n preludes: rec(obj({ contactId: str, rkid: str, at: millis })),\n}, { did: str, genesis: anyObj, memberAnchor: str, memberOp: str, acceptDigest: str })\n/** a listed group carries its member anchor and memberOp: the group star\n * seals them (Trust 5400, 5430), and their absence is no filler condition */\nconst group: V = (x, p) => {\n groupShape(x, p)\n const g = x as { listed: boolean, memberAnchor?: unknown, memberOp?: unknown }\n if (g.listed && g.memberAnchor === undefined) fail(`${p}.memberAnchor`, 'missing on a listed group')\n if (g.listed && g.memberOp === undefined) fail(`${p}.memberOp`, 'missing on a listed group')\n}\n\nconst heldCredential = obj({ digest: str, credential: anyObj })\nconst enactmentRecord = obj({\n ceremony: str, own: str, tCh: millis, peer: str, counterpart: str, card: anyObj, bind: str, at: millis, label: str, relId: str,\n role: lit('scanner', 'displayer'), out: nullable(heldCredential), in: nullable(heldCredential),\n thread: nullable(str), bundleDigest: nullable(str), threads: rec(str), sentCard: nullable(anyObj), counterPending: bool,\n})\n\nconst introAct = obj({\n key: str, act: str, role: lit('requester', 'mediator', 'target'),\n status: lit('sent', 'acked', 'completed', 'failed', 'received', 'forwarded', 'consented', 'refused'),\n issuedAt: millis, request: anyObj, requestCard: anyObj, reply: nullable(anyObj), replyCard: nullable(anyObj),\n pins: obj({}, { requester: str, target: str, mediator: str }), threads: obj({ request: str }, { forward: str }),\n at: millis, ackDelayMs: natural, ownLabel: nullable(str), ack: nullable(anyObj), replyForwarded: bool, vouchersSent: bool,\n pendingVoucher: nullable(anyObj), voucher: nullable(anyObj), vouched: bool, promptId: nullable(str),\n}, { peerName: str })\n\nconst fields1: Record<string, V> = {\n codec: lit(1),\n commitSeq: dec,\n lastWhen: millis,\n register: obj({\n labels: set(str), pairNonces: rec(str),\n carriers: rec(arr(obj({ nonce: str, generation: dec }))),\n devices: obj({ names: set(str), revoked: set(str) }),\n community: nullable(obj({ genesis: str, head: dec })),\n lineage: arr(anyObj),\n }),\n addresses: obj({ keys: rec(obj({ label: str, lastShown: millis }, { retiredAt: millis })), tombstones: set(str) }),\n contacts: keyed(contact, 'id'),\n relationships: keyed(relationship, 'id'),\n entryOrder: obj({ nextPos: dec, heads: set(str) }),\n groups: keyed(group, 'id'),\n profile: obj({ body: json, revision: dec }),\n effects: rec(obj({ ack: nullable(storedAck), expiresAt: millis })),\n outbox: rec(outboxItemOf(1)),\n duties: keyed(duty, 'id'),\n rotations: keyed(obj({\n id: str, from: dec, to: dec, step: lit('register', 'log', 'duties'), startedAt: millis,\n entry: json, overHead: logHead, awaitHead: rec(nullable(str)),\n }), 'id'),\n prompts: keyed(obj({ id: str, kind: lit('encounter-confirm', 'group-invite', 'introduction'), openedAt: millis }, { contactId: str, groupId: str, expiresAt: millis }), 'id'),\n acts: keyed(obj({ actId: str, inputHash: str, commitSeq: dec, outboundDigests: arr(str), events: arr(eventOf(1)), at: millis }), 'actId'),\n encounter: obj({\n challenges: keyed(obj({ value: str, tCh: millis, label: str, card: anyObj }), 'value'),\n records: keyed(enactmentRecord, 'own'),\n introductions: keyed(introAct, 'key'),\n offers: keyed(obj({ id: str, mediatorContactId: str, pin: str, target: str, at: millis }, { label: str }), 'id'),\n designators: rec(str),\n declarations: rec(obj({ issuer: str, role: str, revision: dec, constants: rec(str), at: millis })),\n }),\n joining: obj({\n preludes: rec(obj({ group: str, inviter: str, contactId: str, rkid: str, memberLabel: str, at: millis })),\n invites: keyed(obj({\n credDigest: str, group: str, name: str, contactId: str, rkid: str, memberLabel: str, invite: anyObj, promptId: str, validUntil: millis,\n status: lit('open', 'accepted', 'declined', 'joined'), at: millis,\n }, { acceptDigest: str }), 'credDigest'),\n }),\n}\nconst codec1 = obj(fields1)\n\n/** a sorted set of strings */\nconst sortedSet: V = (x, p) => {\n set(str)(x, p)\n const a = x as string[]\n for (let i = 1; i < a.length; i++) if (!(a[i - 1] < a[i])) fail(`${p}[${i}]`, 'a sorted set expected')\n}\n\n/** an invitation received: attributed to a relationship (contactId and\n * rkid together) or to none (Membership RLTP-MT-3100) */\nconst receivedInvite2: V = (x, p) => {\n obj({\n credDigest: str, group: str, name: str, memberLabel: str, invite: anyObj, promptId: str, validUntil: millis,\n status: lit('open', 'accepted', 'declined', 'joined'), at: millis,\n }, { acceptDigest: str, contactId: str, rkid: str })(x, p)\n const i = x as { contactId?: unknown, rkid?: unknown }\n if ((i.contactId === undefined) !== (i.rkid === undefined)) fail(`${p}.rkid`, 'present exactly with contactId')\n}\n\nconst codec2 = obj({\n ...fields1,\n codec: lit(2),\n outbox: rec(outboxItemOf(2)),\n acts: keyed(obj({ actId: str, inputHash: str, commitSeq: dec, outboundDigests: arr(str), events: arr(eventOf(2)), at: millis }), 'actId'),\n joining: obj({\n preludes: rec(obj({ group: str, inviter: str, contactId: str, rkid: str, memberLabel: str, at: millis })),\n invites: keyed(receivedInvite2, 'credDigest'),\n surfaced: sortedSet,\n declined: sortedSet,\n }),\n messages: obj({\n blocked: sortedSet,\n rates: rec(obj({ invites: arr(millis), messages: arr(millis) })),\n ready: sortedSet,\n records: rec(rec(obj({ bodyDigest: str, sentAt: millis }))),\n inbox: keyed(obj({ id: str, tuple: str, mid: str, body: anyObj, receivedAt: millis, displayAt: millis }), 'id'),\n }),\n})\n\n/** Structural validators per codec version; every readable codec has one. */\nexport const VALIDATORS: Readonly<Record<number, StateValidator>> = Object.freeze({\n 1: (raw: unknown) => codec1(raw, '$'),\n 2: (raw: unknown) => codec2(raw, '$'),\n})\n\n// ── the codec ──────────────────────────────────────────────────────────\n\n/** Canonical JSON text of a JSON-pure value, or not-json. */\nconst canonical = (x: unknown): string => {\n try { return jcs(x) } catch (e) { throw new StateCodecError('not-json', (e as Error).message) }\n}\n\nconst validatorOf = (chain: CodecChain, c: number): StateValidator => {\n const v = chain.validators[c]\n if (!v) throw new StateCodecError('codec-unknown', `no validator for codec ${c}`)\n return v\n}\n\n/**\n * Decode under an explicit chain: JSON purity, codec gate, then\n * validate(c) → migrate(c) → validate(c+1) … up to chain.codec. Returns\n * an independent copy. decodeState is this function over the library's\n * own chain; tests drive it with fake chains.\n */\nexport function decodeChain (raw: unknown, chain: CodecChain): unknown {\n let x = raw\n if (typeof raw === 'string') {\n try { x = JSON.parse(raw) } catch (e) { throw new StateCodecError('not-json', (e as Error).message) }\n }\n let s = JSON.parse(canonical(x)) as unknown\n if (!isObj(s)) fail('$', 'object expected')\n const at = (s as { codec?: unknown }).codec\n if (!Number.isSafeInteger(at) || (at as number) < 0) throw new StateCodecError('codec-unknown', 'codec must be a non-negative integer')\n if ((at as number) > chain.codec) throw new StateCodecError('codec-newer', `codec ${at} is newer than ${chain.codec}`)\n validatorOf(chain, at as number)(s)\n for (let c = at as number; c < chain.codec; c++) {\n const up = chain.migrations[c]\n if (!up) throw new StateCodecError('codec-unknown', `no migration from codec ${c}`)\n s = JSON.parse(canonical(up(JSON.parse(canonical(s)))))\n if (!isObj(s) || s.codec !== c + 1) fail('$.codec', `migration ${c} must produce codec ${c + 1}`)\n validatorOf(chain, c + 1)(s)\n }\n return s\n}\n\nconst LIBRARY_CHAIN: CodecChain = { codec: CODEC, migrations: MIGRATIONS, validators: VALIDATORS }\n\n/**\n * Load a stored state: a JSON string or an already parsed value. Returns\n * an independent copy at the current codec, or throws StateCodecError.\n */\nexport function decodeState (raw: unknown): HolderState {\n return decodeChain(raw, LIBRARY_CHAIN) as HolderState\n}\n\n/** Serialize a state for storage: canonical JSON, validated first. */\nexport function encodeState (state: HolderState): string {\n const text = canonical(state)\n validatorOf(LIBRARY_CHAIN, CODEC)(JSON.parse(text))\n return text\n}\n\n/** Deterministic equality of two states (their JCS forms). */\nexport const sameState = (a: HolderState, b: HolderState): boolean => jcs(a) === jcs(b)\n"]}
|
package/dist/engine.d.ts
CHANGED
|
@@ -9,8 +9,13 @@ export type { Arrival, Channel, ReceivedDocument, TaskDiscarded, TaskFailure, Ta
|
|
|
9
9
|
type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
|
|
10
10
|
/** An event as a module emits it; the engine adds eventId, commitSeq, actId. */
|
|
11
11
|
export type EventDraft = DistributiveOmit<HolderEvent, 'eventId' | 'commitSeq' | 'actId'>;
|
|
12
|
-
/** A document as a module issues it; the engine sets attempt 1 and files
|
|
13
|
-
|
|
12
|
+
/** A document as a module issues it; the engine sets attempt 1 and files
|
|
13
|
+
* it in the outbox. `expiresAt`: the sender lifetime its type declares
|
|
14
|
+
* (Delivery RLTP-DEL-7020), after which resume moves it to
|
|
15
|
+
* failed(task-expired) and never hands it out again (6110, 6115). */
|
|
16
|
+
export type OutboundDraft = Omit<Outbound, 'attempt'> & {
|
|
17
|
+
expiresAt?: Millis;
|
|
18
|
+
};
|
|
14
19
|
/** What a WebCrypto handle must offer; resolved at construction. The
|
|
15
20
|
* default entropy also needs getRandomValues and randomUUID from it. */
|
|
16
21
|
export type CryptoHandle = {
|
|
@@ -205,7 +210,7 @@ export interface HolderModule {
|
|
|
205
210
|
/** own rkids the module still needs although no live tuple carries
|
|
206
211
|
* them: tick does not tombstone them. Trusted as registered, like
|
|
207
212
|
* ownRetries: no check that the module has any claim to the keys */
|
|
208
|
-
keepKeys?: (state: Readonly<HolderState
|
|
213
|
+
keepKeys?: (state: Readonly<HolderState>, when: Millis) => Iterable<string>;
|
|
209
214
|
/** the module's own retention, run by tick after the engine's: pure and
|
|
210
215
|
* synchronous, returning the same state object where nothing goes */
|
|
211
216
|
retain?: (state: Readonly<HolderState>, when: Millis) => HolderState;
|
|
@@ -215,6 +220,13 @@ export interface HolderModule {
|
|
|
215
220
|
/** at most one handler per prompt kind across all modules; collected by
|
|
216
221
|
* createHolder for the prompts module (prompts.ts) */
|
|
217
222
|
decisions?: Partial<Record<PromptKind, DecisionHandler>>;
|
|
223
|
+
/** run in the stage-9 transaction of every document disposed `unique`
|
|
224
|
+
* (through a task handler, after it; or a verified delivery-ack, after
|
|
225
|
+
* its ack handler), on the state it left: pure and
|
|
226
|
+
* synchronous, returning the same object where nothing changes; it must
|
|
227
|
+
* not write the effect cache (the readiness of a tuple, Message Tasks
|
|
228
|
+
* 5.1) */
|
|
229
|
+
accepted?: (state: Readonly<HolderState>, doc: ReceivedDocument, arrival: Arrival) => HolderState;
|
|
218
230
|
}
|
|
219
231
|
/** The ports of a holder (note §3); retry fields fall back to ENGINE_DEFAULTS. */
|
|
220
232
|
export interface EnginePorts {
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.js
CHANGED
|
@@ -37,19 +37,26 @@
|
|
|
37
37
|
// act whose apply returns the identical state object and nothing else
|
|
38
38
|
// commits nothing only when lastWhen stays too. A human act always
|
|
39
39
|
// commits, because its journal entry is the result. Refusals and
|
|
40
|
-
// journal replays commit nothing, lastWhen included
|
|
40
|
+
// journal replays commit nothing, lastWhen included — but for a replay
|
|
41
|
+
// that finds one of its documents past its lifetime or the horizon:
|
|
42
|
+
// that give-up runs first as an operation of its own on the one commit
|
|
43
|
+
// path (resume's CommitOp, its timer carried to the replay's answer)
|
|
41
44
|
// - outbound of an act starts at attempt 1 with nextAttemptAt =
|
|
42
45
|
// when + ceil(backoff(1)); resume() re-emits only items that are due
|
|
43
46
|
// and pauses re-emission while the last step is awaiting-transport
|
|
44
47
|
// (the adapter holds the item) and never re-emits an accepted one. It
|
|
45
48
|
// gives up every non-terminal item (submitted, held or accepted) at
|
|
46
49
|
// first submission + horizonMs, never by attempt
|
|
47
|
-
// count
|
|
48
|
-
//
|
|
50
|
+
// count, or earlier at the sender lifetime its type declared
|
|
51
|
+
// (expiresAt, Delivery 7020); nextDueAt is the earliest due
|
|
52
|
+
// re-emission, horizon or lifetime
|
|
53
|
+
// - the holder's give-up is failed(expired-by-adapter-policy), at a
|
|
54
|
+
// lifetime failed(task-expired) (Delivery 6110); a later
|
|
49
55
|
// delivered report is late by that history, whatever the adapter says
|
|
50
56
|
// - replay of a human act returns the journaled events and the outbound
|
|
51
|
-
// of its documents that are not terminal (delivered, failed)
|
|
52
|
-
// current attempt
|
|
57
|
+
// of its documents that are not terminal (delivered, failed) and not
|
|
58
|
+
// due for the give-up, at their current attempt; one due for it is
|
|
59
|
+
// given up in a commit of its own first (6115: never handed out again). Idempotency is bounded by the journal's retention:
|
|
53
60
|
// max(P90D, retry.horizonMs), the key-retention of Delivery §7 that
|
|
54
61
|
// bounds effects and their acks; after it the same actId is a new act
|
|
55
62
|
// - KeyProvider, Log and Access rejections inside a preparation become
|
|
@@ -388,6 +395,7 @@ class HolderEngine {
|
|
|
388
395
|
#ownRetries;
|
|
389
396
|
#keepKeys;
|
|
390
397
|
#retain;
|
|
398
|
+
#accepted;
|
|
391
399
|
#deadlines;
|
|
392
400
|
#builtins;
|
|
393
401
|
#check;
|
|
@@ -442,6 +450,7 @@ class HolderEngine {
|
|
|
442
450
|
const ownRetries = new Set();
|
|
443
451
|
const keepKeys = [];
|
|
444
452
|
const retain = [];
|
|
453
|
+
const accepted = [];
|
|
445
454
|
const deadlines = [];
|
|
446
455
|
const names = new Set();
|
|
447
456
|
for (const m of modules) {
|
|
@@ -530,6 +539,11 @@ class HolderEngine {
|
|
|
530
539
|
throw new TypeError(`deadlines (module ${m.name}) must be a function`);
|
|
531
540
|
deadlines.push(m.deadlines);
|
|
532
541
|
}
|
|
542
|
+
if (m.accepted !== undefined) {
|
|
543
|
+
if (typeof m.accepted !== 'function')
|
|
544
|
+
throw new TypeError(`accepted (module ${m.name}) must be a function`);
|
|
545
|
+
accepted.push(m.accepted);
|
|
546
|
+
}
|
|
533
547
|
}
|
|
534
548
|
this.#commands = commands;
|
|
535
549
|
this.#tasks = tasks;
|
|
@@ -541,6 +555,7 @@ class HolderEngine {
|
|
|
541
555
|
this.#keepKeys = Object.freeze(keepKeys);
|
|
542
556
|
this.#deadlines = Object.freeze(deadlines);
|
|
543
557
|
this.#retain = Object.freeze(retain);
|
|
558
|
+
this.#accepted = Object.freeze(accepted);
|
|
544
559
|
this.#builtins = Object.freeze({ tick: this.#tickDef(), resume: this.#resumeDef(), report: this.#reportDef(), receive: this.#receiveDef() });
|
|
545
560
|
this.registry = Object.freeze({
|
|
546
561
|
commands: Object.freeze([...commands.keys()]),
|
|
@@ -615,6 +630,11 @@ class HolderEngine {
|
|
|
615
630
|
// ── the four steps ───────────────────────────────────────────────────
|
|
616
631
|
/** `input` is already bound (bindInput); `inputHash` its journal hash for human acts. */
|
|
617
632
|
async #run(def, op, input, when, actId, inputHash) {
|
|
633
|
+
/** a replay's give-up work (below): its timer, carried to the replay's answer */
|
|
634
|
+
let replayWake;
|
|
635
|
+
/** give-ups a replay ran: each moves at least one of its finitely many
|
|
636
|
+
* journaled documents to failed, so they are bounded by that number */
|
|
637
|
+
let gaveUp = 0;
|
|
618
638
|
for (let attempt = 1; attempt <= this.#policy.commitAttempts; attempt++) {
|
|
619
639
|
// 1 — snapshot, when
|
|
620
640
|
const { state, version } = await this.#read();
|
|
@@ -623,9 +643,35 @@ class HolderEngine {
|
|
|
623
643
|
const rec = state.acts[actId];
|
|
624
644
|
if (rec.inputHash !== inputHash)
|
|
625
645
|
return { ok: false, code: 'actid-conflict' };
|
|
626
|
-
const live = rec.outboundDigests.filter((d) => { const t = triasOf(this.#itemOf(state, d)); return t !== 'delivered' && t !== 'failed'; });
|
|
627
646
|
const events = structuredClone(rec.events);
|
|
628
|
-
|
|
647
|
+
// the act's documents are handed out again only while live; one past
|
|
648
|
+
// its sender lifetime or the horizon is given up first, in an
|
|
649
|
+
// operation of its own on the engine's one commit path (as resume's
|
|
650
|
+
// give-up: Delivery 6110, 6115), and is never handed out — the
|
|
651
|
+
// journal's events are not announced again
|
|
652
|
+
const live = [];
|
|
653
|
+
const expired = [];
|
|
654
|
+
for (const d of rec.outboundDigests) {
|
|
655
|
+
const it = this.#itemOf(state, d);
|
|
656
|
+
const t = triasOf(it);
|
|
657
|
+
if (t === 'delivered' || t === 'failed')
|
|
658
|
+
continue;
|
|
659
|
+
if (this.#giveUp(it, at))
|
|
660
|
+
expired.push(d);
|
|
661
|
+
else
|
|
662
|
+
live.push(d);
|
|
663
|
+
}
|
|
664
|
+
if (expired.length) {
|
|
665
|
+
const g = await this.#run(this.#giveUpDef(), { kind: 'resume' }, expired, at);
|
|
666
|
+
if (!isHalt(g) && g.ok && g.nextDueAt !== undefined)
|
|
667
|
+
replayWake = replayWake === undefined ? g.nextDueAt : Math.min(replayWake, g.nextDueAt);
|
|
668
|
+
// re-read: the act's documents as the give-up left them, outside
|
|
669
|
+
// the CAS budget (no conflict happened); bounded by the act's documents
|
|
670
|
+
if (gaveUp++ <= rec.outboundDigests.length)
|
|
671
|
+
attempt--;
|
|
672
|
+
continue;
|
|
673
|
+
}
|
|
674
|
+
return { ok: true, outbound: live.map((d) => this.#outboundOf(state, d)), events: freezeDeep(events), ...(replayWake !== undefined ? { nextDueAt: replayWake } : {}) };
|
|
629
675
|
}
|
|
630
676
|
// 2 — prepare, bound to this snapshot
|
|
631
677
|
const ctx = Object.freeze({
|
|
@@ -679,12 +725,16 @@ class HolderEngine {
|
|
|
679
725
|
freezeDeep(events);
|
|
680
726
|
const outbound = drafts.map((o) => ({ digest: o.digest, envelope: o.envelope, type: o.type, threadId: o.threadId, recipient: o.recipient, attempt: 1 }));
|
|
681
727
|
const outbox = { ...r.state.outbox };
|
|
682
|
-
for (const o of outbound) {
|
|
728
|
+
for (const [i, o] of outbound.entries()) {
|
|
683
729
|
if (Object.hasOwn(outbox, o.digest))
|
|
684
730
|
throw new Error(`engine: outbound ${o.digest} is already in the outbox`);
|
|
731
|
+
const life = drafts[i].expiresAt;
|
|
732
|
+
if (life !== undefined && (!Number.isSafeInteger(life) || life <= at))
|
|
733
|
+
throw new Error(`engine: outbound ${o.digest} expires at ${life}, not after ${at}`);
|
|
685
734
|
outbox[o.digest] = {
|
|
686
735
|
type: o.type, threadId: o.threadId, recipient: o.recipient, envelope: o.envelope, attempt: 1,
|
|
687
736
|
history: [{ status: 'submitted', at, attempt: 1 }], nextAttemptAt: dueAt(at, this.#policy.backoff(1)),
|
|
737
|
+
...(life !== undefined ? { expiresAt: life } : {}),
|
|
688
738
|
};
|
|
689
739
|
}
|
|
690
740
|
const duties = { ...r.state.duties };
|
|
@@ -819,6 +869,50 @@ class HolderEngine {
|
|
|
819
869
|
}
|
|
820
870
|
return { state: cur, events };
|
|
821
871
|
}
|
|
872
|
+
/** The give-up of the outbox items named (a replay found them due, see
|
|
873
|
+
* #run): as resume's, the failed step, the status event, the failure
|
|
874
|
+
* handlers in the same transaction; items no longer due are left alone. */
|
|
875
|
+
#giveUpDef() {
|
|
876
|
+
const giveUp = (it, when) => this.#giveUp(it, when);
|
|
877
|
+
const failed = (st, digests, when) => this.#failed(st, digests, when);
|
|
878
|
+
return {
|
|
879
|
+
human: false,
|
|
880
|
+
apply(state, _p, digests, when) {
|
|
881
|
+
const outbox = { ...state.outbox };
|
|
882
|
+
const events = [];
|
|
883
|
+
const gave = [];
|
|
884
|
+
for (const d of digests) {
|
|
885
|
+
const it = state.outbox[d];
|
|
886
|
+
const t = triasOf(it);
|
|
887
|
+
if (t === 'delivered' || t === 'failed')
|
|
888
|
+
continue;
|
|
889
|
+
const why = giveUp(it, when);
|
|
890
|
+
if (!why)
|
|
891
|
+
continue;
|
|
892
|
+
const { nextAttemptAt: _, ...rest } = it;
|
|
893
|
+
outbox[d] = { ...rest, history: [...rest.history, { status: 'failed', at: when, reason: why }] };
|
|
894
|
+
events.push({ type: 'delivery.status', digest: d, threadId: it.threadId, status: 'failed' });
|
|
895
|
+
gave.push(d);
|
|
896
|
+
}
|
|
897
|
+
if (!gave.length)
|
|
898
|
+
return { state: state };
|
|
899
|
+
const f = failed({ ...state, outbox }, gave, when);
|
|
900
|
+
return { state: f.state, events: [...events, ...f.events] };
|
|
901
|
+
},
|
|
902
|
+
};
|
|
903
|
+
}
|
|
904
|
+
/** Why a non-terminal outbox item is given up at `when`, or null: its
|
|
905
|
+
* sender lifetime, where it ends no later than the horizon
|
|
906
|
+
* (failed(task-expired), Delivery 6110), else the horizon
|
|
907
|
+
* (failed(expired-by-adapter-policy)). */
|
|
908
|
+
#giveUp(it, when) {
|
|
909
|
+
const first = it.history.length ? it.history[0].at : when;
|
|
910
|
+
const expiry = Math.min(first + this.#policy.horizonMs, Number.MAX_SAFE_INTEGER);
|
|
911
|
+
const life = it.expiresAt;
|
|
912
|
+
if (life !== undefined && when >= life && life <= expiry)
|
|
913
|
+
return 'task-expired';
|
|
914
|
+
return when >= expiry ? 'expired-by-adapter-policy' : null;
|
|
915
|
+
}
|
|
822
916
|
#itemOf(state, digest) {
|
|
823
917
|
if (!Object.hasOwn(state.outbox, digest))
|
|
824
918
|
throw new Error(`engine: journaled outbound ${digest} is missing from the outbox`);
|
|
@@ -882,8 +976,9 @@ class HolderEngine {
|
|
|
882
976
|
if (!t.deactivated)
|
|
883
977
|
live.add(t.rkid);
|
|
884
978
|
// and the rkids a module still needs (a deactivated prior whose continuity flow is open)
|
|
979
|
+
// (at this tick's time: a claim that ends now ends in this tick)
|
|
885
980
|
for (const k of keepers())
|
|
886
|
-
for (const rkid of k(held))
|
|
981
|
+
for (const rkid of k(held, when))
|
|
887
982
|
live.add(rkid);
|
|
888
983
|
const tombstones = [...held.addresses.tombstones];
|
|
889
984
|
let gone = false;
|
|
@@ -935,6 +1030,7 @@ class HolderEngine {
|
|
|
935
1030
|
const sweeps = () => this.#sweeps;
|
|
936
1031
|
const failed = (st, digests, when) => this.#failed(st, digests, when);
|
|
937
1032
|
const ownRetries = () => this.#ownRetries;
|
|
1033
|
+
const giveUp = (it, when) => this.#giveUp(it, when);
|
|
938
1034
|
return {
|
|
939
1035
|
human: false,
|
|
940
1036
|
// the due duties' and the sweeps' preparations, against the snapshot apply will see
|
|
@@ -963,17 +1059,20 @@ class HolderEngine {
|
|
|
963
1059
|
const trias = triasOf(it);
|
|
964
1060
|
if (trias === 'delivered' || trias === 'failed')
|
|
965
1061
|
continue;
|
|
966
|
-
// the horizon applies to every non-terminal item: held, accepted or
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
1062
|
+
// the horizon applies to every non-terminal item: held, accepted or
|
|
1063
|
+
// not; a sender lifetime the type declares ends it earlier, as
|
|
1064
|
+
// failed(task-expired), never handed out again (Delivery 6110, 6115)
|
|
1065
|
+
const why = giveUp(it, when);
|
|
1066
|
+
if (why) {
|
|
970
1067
|
const { nextAttemptAt: _, ...rest } = it;
|
|
971
|
-
outbox[digest] = { ...rest, history: [...it.history, { status: 'failed', at: when, reason:
|
|
1068
|
+
outbox[digest] = { ...rest, history: [...it.history, { status: 'failed', at: when, reason: why }] };
|
|
972
1069
|
events.push({ type: 'delivery.status', digest, threadId: it.threadId, status: 'failed' });
|
|
973
1070
|
gaveUp.push(digest);
|
|
974
1071
|
continue;
|
|
975
1072
|
}
|
|
976
|
-
|
|
1073
|
+
const first = it.history.length ? it.history[0].at : when;
|
|
1074
|
+
const expiry = Math.min(first + p.horizonMs, Number.MAX_SAFE_INTEGER);
|
|
1075
|
+
due(it.expiresAt !== undefined ? Math.min(it.expiresAt, expiry) : expiry);
|
|
977
1076
|
// never re-emitted: an accepted item (the service has it) and one the
|
|
978
1077
|
// adapter holds (awaiting-transport, until it reports again)
|
|
979
1078
|
if (trias === 'accepted' || it.history[it.history.length - 1]?.status === 'awaiting-transport')
|
|
@@ -1199,6 +1298,7 @@ class HolderEngine {
|
|
|
1199
1298
|
#receiveDef() {
|
|
1200
1299
|
const tasks = () => this.#tasks;
|
|
1201
1300
|
const acks = () => this.#acks;
|
|
1301
|
+
const acceptedHooks = () => this.#accepted;
|
|
1202
1302
|
const policy = () => this.#policy;
|
|
1203
1303
|
return {
|
|
1204
1304
|
human: false,
|
|
@@ -1228,6 +1328,13 @@ class HolderEngine {
|
|
|
1228
1328
|
next = r.state;
|
|
1229
1329
|
events.push(...(r.events ?? []));
|
|
1230
1330
|
}
|
|
1331
|
+
// a verified ack is an accepted document of its issuer too: the
|
|
1332
|
+
// modules' accepted hooks, in the same transaction
|
|
1333
|
+
for (const hook of acceptedHooks()) {
|
|
1334
|
+
next = hook(next, plan.doc, plan.arrival);
|
|
1335
|
+
if (next.effects !== state.effects)
|
|
1336
|
+
throw new Error('engine: an accepted hook wrote the effect cache');
|
|
1337
|
+
}
|
|
1231
1338
|
return {
|
|
1232
1339
|
state: { ...next, effects: { ...next.effects, [plan.digest]: cached(null) } },
|
|
1233
1340
|
events,
|
|
@@ -1253,8 +1360,15 @@ class HolderEngine {
|
|
|
1253
1360
|
}
|
|
1254
1361
|
if (r.state.effects !== state.effects)
|
|
1255
1362
|
throw new Error(`engine: the handler of ${plan.type} wrote the effect cache; the core writes it`);
|
|
1363
|
+
// the modules' accepted hooks, in the same transaction
|
|
1364
|
+
let after = r.state;
|
|
1365
|
+
for (const hook of acceptedHooks()) {
|
|
1366
|
+
after = hook(after, plan.doc, plan.arrival);
|
|
1367
|
+
if (after.effects !== state.effects)
|
|
1368
|
+
throw new Error('engine: an accepted hook wrote the effect cache');
|
|
1369
|
+
}
|
|
1256
1370
|
return {
|
|
1257
|
-
state: { ...
|
|
1371
|
+
state: { ...after, effects: { ...state.effects, [plan.digest]: cached({ ...plan.ack, at: when, attempt: 1, nextAttemptAt: dueAt(when, policy().backoff(1)), sent: false }) } },
|
|
1258
1372
|
...(r.outbound ? { outbound: r.outbound } : {}),
|
|
1259
1373
|
...(r.events ? { events: r.events } : {}),
|
|
1260
1374
|
...(r.duties ? { duties: r.duties } : {}),
|