@powerhousedao/shared 6.2.3-dev.6 → 6.2.3-dev.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analytics/index.d.ts +4 -4
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +25 -24
- package/dist/analytics/index.js.map +1 -1
- package/dist/clis/args/{access-token-To5LaIfL.mjs → access-token-3Hqv_U8I.mjs} +2 -2
- package/dist/clis/args/{access-token-To5LaIfL.mjs.map → access-token-3Hqv_U8I.mjs.map} +1 -1
- package/dist/clis/args/access-token-C5sKsH2O.d.mts +16 -0
- package/dist/clis/args/access-token-C5sKsH2O.d.mts.map +1 -0
- package/dist/clis/args/access-token.d.mts +3 -2
- package/dist/clis/args/access-token.mjs +1 -1
- package/dist/clis/args/{common-CcYbXrBx.mjs → common-BXabdhiO.mjs} +30 -7
- package/dist/clis/args/common-BXabdhiO.mjs.map +1 -0
- package/dist/clis/args/common-Bnm859xU.d.mts +186 -0
- package/dist/clis/args/common-Bnm859xU.d.mts.map +1 -0
- package/dist/clis/args/common.d.mts +3 -2
- package/dist/clis/args/common.mjs +1 -1
- package/dist/clis/args/{connect-BVVvCmL9.mjs → connect-BG3HkYBk.mjs} +8 -3
- package/dist/clis/args/connect-BG3HkYBk.mjs.map +1 -0
- package/dist/clis/args/connect-DjeiqXus.d.mts +450 -0
- package/dist/clis/args/connect-DjeiqXus.d.mts.map +1 -0
- package/dist/clis/args/connect.d.mts +3 -2
- package/dist/clis/args/connect.mjs +1 -1
- package/dist/clis/args/dist-CorQTQL-.mjs +1533 -0
- package/dist/clis/args/dist-CorQTQL-.mjs.map +1 -0
- package/dist/clis/args/{generate-CA916Fvj.mjs → generate-BOItUNvP.mjs} +40 -2
- package/dist/clis/args/generate-BOItUNvP.mjs.map +1 -0
- package/dist/clis/args/generate-BPBBLeUD.d.mts +103 -0
- package/dist/clis/args/generate-BPBBLeUD.d.mts.map +1 -0
- package/dist/clis/args/generate.d.mts +3 -2
- package/dist/clis/args/generate.mjs +1 -1
- package/dist/clis/args/{help-Bqbgbalu.mjs → help-BfAqpYvC.mjs} +43 -16
- package/dist/clis/args/help-BfAqpYvC.mjs.map +1 -0
- package/dist/clis/args/help-KuqI-EEG.d.mts +203 -0
- package/dist/clis/args/help-KuqI-EEG.d.mts.map +1 -0
- package/dist/clis/args/help.d.mts +3 -2
- package/dist/clis/args/help.mjs +1 -1
- package/dist/clis/args/index.d.mts +20 -19
- package/dist/clis/args/index.mjs +18 -18
- package/dist/clis/args/init-CTaK80wE.d.mts +55 -0
- package/dist/clis/args/init-CTaK80wE.d.mts.map +1 -0
- package/dist/clis/args/{init-rz9Ei7nq.mjs → init-xlCNZ8Oe.mjs} +7 -2
- package/dist/clis/args/{init-rz9Ei7nq.mjs.map → init-xlCNZ8Oe.mjs.map} +1 -1
- package/dist/clis/args/init.d.mts +3 -2
- package/dist/clis/args/init.mjs +1 -1
- package/dist/clis/args/inspect-BjRmtB86.d.mts +13 -0
- package/dist/clis/args/inspect-BjRmtB86.d.mts.map +1 -0
- package/dist/clis/args/{inspect-tckH8mSw.mjs → inspect-UNQgtuR0.mjs} +2 -2
- package/dist/clis/args/{inspect-tckH8mSw.mjs.map → inspect-UNQgtuR0.mjs.map} +1 -1
- package/dist/clis/args/inspect.d.mts +3 -2
- package/dist/clis/args/inspect.mjs +1 -1
- package/dist/clis/args/install-B0tMyUMw.d.mts +37 -0
- package/dist/clis/args/install-B0tMyUMw.d.mts.map +1 -0
- package/dist/clis/args/{install-Sz2DlCHh.mjs → install-F-27kF6m.mjs} +2 -2
- package/dist/clis/args/{install-Sz2DlCHh.mjs.map → install-F-27kF6m.mjs.map} +1 -1
- package/dist/clis/args/install.d.mts +3 -2
- package/dist/clis/args/install.mjs +1 -1
- package/dist/clis/args/{list-DM2d6f1m.mjs → list-Bkfn8Yuo.mjs} +2 -2
- package/dist/clis/args/{list-DM2d6f1m.mjs.map → list-Bkfn8Yuo.mjs.map} +1 -1
- package/dist/clis/args/list-DrbxA7JJ.d.mts +10 -0
- package/dist/clis/args/list-DrbxA7JJ.d.mts.map +1 -0
- package/dist/clis/args/list.d.mts +3 -2
- package/dist/clis/args/list.mjs +1 -1
- package/dist/clis/args/{login-DiKT5Jfu.mjs → login-CIFkQExi.mjs} +2 -2
- package/dist/clis/args/{login-DiKT5Jfu.mjs.map → login-CIFkQExi.mjs.map} +1 -1
- package/dist/clis/args/login-CXRJXg71.d.mts +25 -0
- package/dist/clis/args/login-CXRJXg71.d.mts.map +1 -0
- package/dist/clis/args/login.d.mts +3 -2
- package/dist/clis/args/login.mjs +1 -1
- package/dist/clis/args/migrate-DkCQRL2D.d.mts +19 -0
- package/dist/clis/args/migrate-DkCQRL2D.d.mts.map +1 -0
- package/dist/clis/args/{migrate-CG_gWc4k.mjs → migrate-DwJGhc2d.mjs} +2 -2
- package/dist/clis/args/{migrate-CG_gWc4k.mjs.map → migrate-DwJGhc2d.mjs.map} +1 -1
- package/dist/clis/args/migrate.d.mts +3 -2
- package/dist/clis/args/migrate.mjs +1 -1
- package/dist/clis/args/publish-CeW4bOrl.d.mts +16 -0
- package/dist/clis/args/publish-CeW4bOrl.d.mts.map +1 -0
- package/dist/clis/args/{publish-DDZYsUfV.mjs → publish-DHqlGWmL.mjs} +2 -2
- package/dist/clis/args/{publish-DDZYsUfV.mjs.map → publish-DHqlGWmL.mjs.map} +1 -1
- package/dist/clis/args/publish.d.mts +3 -2
- package/dist/clis/args/publish.mjs +1 -1
- package/dist/clis/args/{registry-C_OVFQmI.mjs → registry-DIwES3l2.mjs} +2 -2
- package/dist/clis/args/{registry-C_OVFQmI.mjs.map → registry-DIwES3l2.mjs.map} +1 -1
- package/dist/clis/args/registry-DNH8xuaE.d.mts +17 -0
- package/dist/clis/args/registry-DNH8xuaE.d.mts.map +1 -0
- package/dist/clis/args/registry.d.mts +3 -2
- package/dist/clis/args/registry.mjs +1 -1
- package/dist/clis/args/run-CYp5t1xU.mjs +28 -0
- package/dist/clis/args/run-CYp5t1xU.mjs.map +1 -0
- package/dist/clis/args/run.d.mts +18 -0
- package/dist/clis/args/run.d.mts.map +1 -0
- package/dist/clis/args/run.mjs +2 -0
- package/dist/clis/args/service-CHjY5epu.d.mts +27 -0
- package/dist/clis/args/service-CHjY5epu.d.mts.map +1 -0
- package/dist/clis/args/{service-CHOOr0Gg.mjs → service-Cpjlyeu5.mjs} +2 -2
- package/dist/clis/args/{service-CHOOr0Gg.mjs.map → service-Cpjlyeu5.mjs.map} +1 -1
- package/dist/clis/args/service.d.mts +3 -2
- package/dist/clis/args/service.mjs +1 -1
- package/dist/clis/args/{switchboard-Dsp7nosi.mjs → switchboard-CCaAtU56.mjs} +2 -2
- package/dist/clis/args/{switchboard-Dsp7nosi.mjs.map → switchboard-CCaAtU56.mjs.map} +1 -1
- package/dist/clis/args/switchboard-RrNb1fUH.d.mts +70 -0
- package/dist/clis/args/switchboard-RrNb1fUH.d.mts.map +1 -0
- package/dist/clis/args/switchboard.d.mts +3 -2
- package/dist/clis/args/switchboard.mjs +1 -1
- package/dist/clis/args/{uninstall-CTwTX0u_.mjs → uninstall-3U0B8g5c.mjs} +2 -2
- package/dist/clis/args/{uninstall-CTwTX0u_.mjs.map → uninstall-3U0B8g5c.mjs.map} +1 -1
- package/dist/clis/args/uninstall-CDx7lwxn.d.mts +28 -0
- package/dist/clis/args/uninstall-CDx7lwxn.d.mts.map +1 -0
- package/dist/clis/args/uninstall.d.mts +3 -2
- package/dist/clis/args/uninstall.mjs +1 -1
- package/dist/clis/args/unpublish-CEDsk6uv.d.mts +22 -0
- package/dist/clis/args/unpublish-CEDsk6uv.d.mts.map +1 -0
- package/dist/clis/args/{unpublish-BPMkGEg5.mjs → unpublish-s9zUh6Gw.mjs} +2 -2
- package/dist/clis/args/{unpublish-BPMkGEg5.mjs.map → unpublish-s9zUh6Gw.mjs.map} +1 -1
- package/dist/clis/args/unpublish.d.mts +3 -2
- package/dist/clis/args/unpublish.mjs +1 -1
- package/dist/clis/args/{vetra-b4KUu1Ax.mjs → vetra-BUNlAAPp.mjs} +2 -2
- package/dist/clis/args/{vetra-b4KUu1Ax.mjs.map → vetra-BUNlAAPp.mjs.map} +1 -1
- package/dist/clis/args/vetra-DkDaWFPi.d.mts +111 -0
- package/dist/clis/args/vetra-DkDaWFPi.d.mts.map +1 -0
- package/dist/clis/args/vetra-ports.test.d.mts +2 -1
- package/dist/clis/args/vetra-ports.test.mjs +7366 -5728
- package/dist/clis/args/vetra-ports.test.mjs.map +1 -1
- package/dist/clis/args/vetra.d.mts +3 -2
- package/dist/clis/args/vetra.mjs +1 -1
- package/dist/clis/build-config-HbYUSZS1.mjs +252 -0
- package/dist/clis/build-config-HbYUSZS1.mjs.map +1 -0
- package/dist/clis/build-config.d.mts +52 -10616
- package/dist/clis/build-config.d.mts.map +1 -1
- package/dist/clis/build-config.mjs +2 -88
- package/dist/clis/build-pieces.d.mts +160 -0
- package/dist/clis/build-pieces.d.mts.map +1 -0
- package/dist/clis/build-pieces.mjs +549 -0
- package/dist/clis/build-pieces.mjs.map +1 -0
- package/dist/clis/command-names.d.mts +2 -2
- package/dist/clis/command-names.d.mts.map +1 -1
- package/dist/clis/command-names.mjs +1 -0
- package/dist/clis/command-names.mjs.map +1 -1
- package/dist/clis/constants.d.mts +3 -462
- package/dist/clis/constants.mjs +43 -12
- package/dist/clis/constants.mjs.map +1 -1
- package/dist/clis/feature-flags.d.mts +17 -0
- package/dist/clis/feature-flags.d.mts.map +1 -0
- package/dist/clis/feature-flags.mjs +21 -0
- package/dist/clis/feature-flags.mjs.map +1 -0
- package/dist/clis/index-6CZwrmQi.d.mts +11154 -0
- package/dist/clis/index-6CZwrmQi.d.mts.map +1 -0
- package/dist/clis/index.d.mts +1448 -1225
- package/dist/clis/index.d.mts.map +1 -1
- package/dist/clis/index.mjs +665 -352
- package/dist/clis/index.mjs.map +1 -1
- package/dist/clis/project-env.d.mts +4 -4
- package/dist/clis/project-env.d.mts.map +1 -1
- package/dist/clis/project-env.mjs.map +1 -1
- package/dist/clis/project-ports.d.mts +5 -5
- package/dist/clis/project-ports.d.mts.map +1 -1
- package/dist/clis/project-ports.mjs +1 -1
- package/dist/clis/project-ports.mjs.map +1 -1
- package/dist/clis/services/telemetry.d.mts +7 -7
- package/dist/clis/services/telemetry.d.mts.map +1 -1
- package/dist/clis/services/telemetry.mjs.map +1 -1
- package/dist/clis/types-DvsXtkR2.d.mts +582 -0
- package/dist/clis/types-DvsXtkR2.d.mts.map +1 -0
- package/dist/clis/utils.d.mts +4 -4
- package/dist/clis/utils.d.mts.map +1 -1
- package/dist/clis/utils.mjs.map +1 -1
- package/dist/{config-loader-B845Hidf.js → config-loader-DBJolZd0.js} +43 -9
- package/dist/config-loader-DBJolZd0.js.map +1 -0
- package/dist/connect/config-loader.d.ts +21 -8
- package/dist/connect/config-loader.d.ts.map +1 -1
- package/dist/connect/config-loader.js +2 -2
- package/dist/connect/index.d.ts +203 -57
- package/dist/connect/index.d.ts.map +1 -1
- package/dist/connect/index.js +318 -31
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/json-adapter.d.ts +3 -4
- package/dist/connect/json-adapter.d.ts.map +1 -1
- package/dist/connect/json-adapter.js.map +1 -1
- package/dist/constants-DVJon33y.d.ts +9 -0
- package/dist/constants-DVJon33y.d.ts.map +1 -0
- package/dist/constants.d.ts +3 -2
- package/dist/constants.js +14 -5
- package/dist/constants.js.map +1 -1
- package/dist/document-drive/index.d.ts +131 -105
- package/dist/document-drive/index.d.ts.map +1 -1
- package/dist/document-drive/index.js +116 -54
- package/dist/document-drive/index.js.map +1 -1
- package/dist/document-model/errors.d.ts +3 -0
- package/dist/document-model/errors.js +152 -0
- package/dist/document-model/errors.js.map +1 -0
- package/dist/document-model/index.d.ts +5 -4
- package/dist/document-model/index.js +296 -390
- package/dist/document-model/index.js.map +1 -1
- package/dist/document-model/mock.d.ts +2 -3
- package/dist/document-model/mock.d.ts.map +1 -1
- package/dist/document-model/mock.js +2 -1
- package/dist/document-model/mock.js.map +1 -1
- package/dist/document-model/utils.d.ts +3 -2
- package/dist/document-model/utils.js +1 -1
- package/dist/document-model/version.d.ts +3 -0
- package/dist/document-model/version.js +8 -0
- package/dist/document-model/version.js.map +1 -0
- package/dist/index-bx0vYtFw.d.ts +36 -0
- package/dist/index-bx0vYtFw.d.ts.map +1 -0
- package/dist/index.d.ts +7 -6
- package/dist/index.js.map +1 -1
- package/dist/processors/index.d.ts +3 -2
- package/dist/processors/index.js +63 -4
- package/dist/processors/index.js.map +1 -1
- package/dist/purge-v06m_oGz.js +381 -0
- package/dist/purge-v06m_oGz.js.map +1 -0
- package/dist/registry/index.d.ts +15 -15
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +24 -6
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/manifest-slim.d.ts +4 -3
- package/dist/registry/manifest-slim.d.ts.map +1 -1
- package/dist/registry/manifest-slim.js +21 -0
- package/dist/registry/manifest-slim.js.map +1 -1
- package/dist/registry/updates.d.ts +3 -3
- package/dist/registry/updates.d.ts.map +1 -1
- package/dist/registry/updates.js.map +1 -1
- package/dist/registry/urls.d.ts +2 -2
- package/dist/registry/urls.d.ts.map +1 -1
- package/dist/registry/urls.js.map +1 -1
- package/dist/{types-C1in4fl3.d.ts → types-Bsp8VL2y.d.ts} +2 -2
- package/dist/types-Bsp8VL2y.d.ts.map +1 -0
- package/dist/{types-YqLqb0Zb.d.ts → types-CfU91XFU.d.ts} +39 -43
- package/dist/types-CfU91XFU.d.ts.map +1 -0
- package/dist/{types-CpnWmiFY.d.ts → types-DzleLgA8.d.ts} +2038 -822
- package/dist/types-DzleLgA8.d.ts.map +1 -0
- package/dist/{utils-DP122OSS.d.ts → utils-BrKxCmKx.d.ts} +2 -2
- package/dist/utils-BrKxCmKx.d.ts.map +1 -0
- package/dist/{utils-aaTmfxFW.js → utils-CSF716ux.js} +10 -3
- package/dist/utils-CSF716ux.js.map +1 -0
- package/dist/version-BxLITo9P.d.ts +6 -0
- package/dist/version-BxLITo9P.d.ts.map +1 -0
- package/package.json +15 -6
- package/dist/clis/args/access-token--9H57y8J.d.mts +0 -18
- package/dist/clis/args/access-token--9H57y8J.d.mts.map +0 -1
- package/dist/clis/args/common-CcYbXrBx.mjs.map +0 -1
- package/dist/clis/args/common-Dsf1vpHV.d.mts +0 -183
- package/dist/clis/args/common-Dsf1vpHV.d.mts.map +0 -1
- package/dist/clis/args/connect-BVVvCmL9.mjs.map +0 -1
- package/dist/clis/args/connect-DetTnI8g.d.mts +0 -443
- package/dist/clis/args/connect-DetTnI8g.d.mts.map +0 -1
- package/dist/clis/args/generate-CA916Fvj.mjs.map +0 -1
- package/dist/clis/args/generate-DnV-bfXt.d.mts +0 -87
- package/dist/clis/args/generate-DnV-bfXt.d.mts.map +0 -1
- package/dist/clis/args/help-Bqbgbalu.mjs.map +0 -1
- package/dist/clis/args/help-CjAsudUn.d.mts +0 -193
- package/dist/clis/args/help-CjAsudUn.d.mts.map +0 -1
- package/dist/clis/args/init-CUXyfquF.d.mts +0 -55
- package/dist/clis/args/init-CUXyfquF.d.mts.map +0 -1
- package/dist/clis/args/inspect-DtZeoA5c.d.mts +0 -15
- package/dist/clis/args/inspect-DtZeoA5c.d.mts.map +0 -1
- package/dist/clis/args/install-CkP8zcHb.d.mts +0 -40
- package/dist/clis/args/install-CkP8zcHb.d.mts.map +0 -1
- package/dist/clis/args/list-BGf8s_gj.d.mts +0 -12
- package/dist/clis/args/list-BGf8s_gj.d.mts.map +0 -1
- package/dist/clis/args/login-DNsHwvqk.d.mts +0 -27
- package/dist/clis/args/login-DNsHwvqk.d.mts.map +0 -1
- package/dist/clis/args/magic-string.es-h_0HDQBQ.mjs +0 -1013
- package/dist/clis/args/magic-string.es-h_0HDQBQ.mjs.map +0 -1
- package/dist/clis/args/migrate-sixkWhxm.d.mts +0 -21
- package/dist/clis/args/migrate-sixkWhxm.d.mts.map +0 -1
- package/dist/clis/args/publish-Dqe5DUst.d.mts +0 -18
- package/dist/clis/args/publish-Dqe5DUst.d.mts.map +0 -1
- package/dist/clis/args/registry-C_RfTsKB.d.mts +0 -19
- package/dist/clis/args/registry-C_RfTsKB.d.mts.map +0 -1
- package/dist/clis/args/service-DhIkf8-O.d.mts +0 -22
- package/dist/clis/args/service-DhIkf8-O.d.mts.map +0 -1
- package/dist/clis/args/switchboard-BlPaq2at.d.mts +0 -72
- package/dist/clis/args/switchboard-BlPaq2at.d.mts.map +0 -1
- package/dist/clis/args/uninstall-BpA3YYbw.d.mts +0 -31
- package/dist/clis/args/uninstall-BpA3YYbw.d.mts.map +0 -1
- package/dist/clis/args/unpublish-CvwaIimG.d.mts +0 -24
- package/dist/clis/args/unpublish-CvwaIimG.d.mts.map +0 -1
- package/dist/clis/args/vetra-DLQ6lhLl.d.mts +0 -113
- package/dist/clis/args/vetra-DLQ6lhLl.d.mts.map +0 -1
- package/dist/clis/build-config.mjs.map +0 -1
- package/dist/clis/constants.d.mts.map +0 -1
- package/dist/config-loader-B845Hidf.js.map +0 -1
- package/dist/constants-BP_gjn8g.d.ts +0 -8
- package/dist/constants-BP_gjn8g.d.ts.map +0 -1
- package/dist/index-C_iVZe7f.d.ts +0 -7
- package/dist/index-C_iVZe7f.d.ts.map +0 -1
- package/dist/index-DyYIJtVy.d.ts +0 -836
- package/dist/index-DyYIJtVy.d.ts.map +0 -1
- package/dist/types-C1in4fl3.d.ts.map +0 -1
- package/dist/types-CpnWmiFY.d.ts.map +0 -1
- package/dist/types-YqLqb0Zb.d.ts.map +0 -1
- package/dist/utils-DP122OSS.d.ts.map +0 -1
- package/dist/utils-aaTmfxFW.js.map +0 -1
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import { a as base58Decode, c as buildOperationSignatureParams, d as hex2ab, i as ab2hex, l as
|
|
1
|
+
import { a as base58Decode, c as buildOperationSignatureParams, d as hashBrowser, f as hex2ab, i as ab2hex, l as bytesToBase64Url, n as generateId, o as base64UrlToBytes, r as generateMock, s as buildOperationSignatureMessage, t as deriveOperationId, u as getUnixTimestamp } from "../utils-CSF716ux.js";
|
|
2
|
+
import { A as signActionV2, C as DOCUMENT_SCOPE_ACTION_TYPES, D as canonicalJson, E as actionSigningTarget, M as v2TupleProblem, O as hashActionV2, S as CanonicalJsonError, T as actionSignerIdentity, _ as mergePeerCapabilities, a as purgedProtocolVersions, b as selectProtocolVersions, c as PEER_CAPABILITIES, d as holdReason, f as isOlderManifest, g as manifestRevision, h as localSupports, i as purgeMarkerOperation, j as targetDocumentId, k as isV2ActionHash, l as PEER_MANIFEST_FORMAT, m as localPeerManifest, n as isPurgeMarker, o as DOCUMENT_PURGE_PROTOCOL, p as legacySupports, r as purgeDocumentAction, s as MARKER_REFUSAL_FEATURE, t as PURGE_DOCUMENT, u as coversLocal, v as peerSupports, w as actionPreimageV2, x as ACTION_SIGNATURE_V2_PREFIX, y as readPeerManifest } from "../purge-v06m_oGz.js";
|
|
3
|
+
import { AuthActionNotAllowedError, AuthAlreadyInitializedError, AuthInitializerNotCreatorError, AuthPolicyNotPreservedError, DowngradeNotSupportedError, FileSystemError, GrantNotFoundError, HashMismatchError, InvalidActionInputError, InvalidActionInputZodError, InvalidAuthVersionError, UnsupportedDocumentModelVersionError } from "./errors.js";
|
|
4
|
+
import { normalizeDocumentModelVersion } from "./version.js";
|
|
2
5
|
import { ZodError, z } from "zod";
|
|
3
6
|
import { stringify } from "safe-stable-stringify";
|
|
7
|
+
import { sha256 } from "@noble/hashes/sha2.js";
|
|
4
8
|
import { strFromU8, strToU8, unzip, zip } from "fflate";
|
|
5
|
-
import { castDraft, create, unsafe } from "mutative";
|
|
9
|
+
import { castDraft, create, isDraft, original, unsafe } from "mutative";
|
|
6
10
|
import { constantCase, pascalCase } from "change-case";
|
|
7
11
|
//#region document-model/signatures.ts
|
|
8
12
|
/**
|
|
@@ -105,160 +109,9 @@ function toTransportSignerApp(app) {
|
|
|
105
109
|
};
|
|
106
110
|
}
|
|
107
111
|
//#endregion
|
|
108
|
-
//#region document-model/errors.ts
|
|
109
|
-
const FileSystemError = /* @__PURE__ */ new Error("File system not available.");
|
|
110
|
-
var InvalidActionInputError = class extends Error {
|
|
111
|
-
data;
|
|
112
|
-
constructor(data) {
|
|
113
|
-
super();
|
|
114
|
-
this.name = "InvalidActionInputError";
|
|
115
|
-
this.data = data;
|
|
116
|
-
this.message = this.message || `Invalid action input: ${JSON.stringify(data, null, 2)}`;
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
var InvalidActionInputZodError = class extends InvalidActionInputError {
|
|
120
|
-
issues;
|
|
121
|
-
constructor(issues) {
|
|
122
|
-
super(issues);
|
|
123
|
-
this.issues = issues;
|
|
124
|
-
this.name = "InvalidActionInputZodError";
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
/**
|
|
128
|
-
* Error thrown when attempting to downgrade a document version.
|
|
129
|
-
*/
|
|
130
|
-
var DowngradeNotSupportedError = class extends Error {
|
|
131
|
-
documentType;
|
|
132
|
-
fromVersion;
|
|
133
|
-
toVersion;
|
|
134
|
-
constructor(documentType, fromVersion, toVersion) {
|
|
135
|
-
super(`Downgrade not supported for ${documentType}: cannot upgrade from version ${fromVersion} to ${toVersion}`);
|
|
136
|
-
this.name = "DowngradeNotSupportedError";
|
|
137
|
-
this.documentType = documentType;
|
|
138
|
-
this.fromVersion = fromVersion;
|
|
139
|
-
this.toVersion = toVersion;
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
/**
|
|
143
|
-
* Thrown when INITIALIZE_AUTH is applied to an already-initialized auth scope.
|
|
144
|
-
* The genesis action is valid only at auth revision zero.
|
|
145
|
-
*/
|
|
146
|
-
var AuthAlreadyInitializedError = class extends Error {
|
|
147
|
-
documentId;
|
|
148
|
-
constructor(documentId) {
|
|
149
|
-
super(`Auth scope already initialized for document ${documentId}: INITIALIZE_AUTH is valid only at auth revision zero`);
|
|
150
|
-
this.name = "AuthAlreadyInitializedError";
|
|
151
|
-
this.documentId = documentId;
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
/**
|
|
155
|
-
* Thrown when INITIALIZE_AUTH is not signed by the document creator (its signer
|
|
156
|
-
* does not match `header.sig.publicKey`), so it cannot set the auth policy.
|
|
157
|
-
*/
|
|
158
|
-
var AuthInitializerNotCreatorError = class extends Error {
|
|
159
|
-
documentId;
|
|
160
|
-
constructor(documentId) {
|
|
161
|
-
super(`INITIALIZE_AUTH for document ${documentId} must be signed by the document creator`);
|
|
162
|
-
this.name = "AuthInitializerNotCreatorError";
|
|
163
|
-
this.documentId = documentId;
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
/**
|
|
167
|
-
* Thrown when INITIALIZE_AUTH carries a version below 1. Version 0 is reserved
|
|
168
|
-
* for the uninitialized auth scope.
|
|
169
|
-
*/
|
|
170
|
-
var InvalidAuthVersionError = class extends Error {
|
|
171
|
-
documentId;
|
|
172
|
-
version;
|
|
173
|
-
constructor(documentId, version) {
|
|
174
|
-
super(`Invalid auth policy version ${version} for document ${documentId}: INITIALIZE_AUTH requires an integer version >= 1`);
|
|
175
|
-
this.name = "InvalidAuthVersionError";
|
|
176
|
-
this.documentId = documentId;
|
|
177
|
-
this.version = version;
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
/** Thrown when a duplicate would lose the source policy's version or creator binding. */
|
|
181
|
-
var AuthPolicyNotPreservedError = class extends Error {
|
|
182
|
-
documentId;
|
|
183
|
-
constructor(documentId) {
|
|
184
|
-
super(`Duplicating document ${documentId} would not preserve its auth policy: the copy loses the policy version or its creator binding`);
|
|
185
|
-
this.name = "AuthPolicyNotPreservedError";
|
|
186
|
-
this.documentId = documentId;
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
/**
|
|
190
|
-
* Thrown when a grant referenced by REMOVE_GRANT or MOVE_GRANT does not exist.
|
|
191
|
-
*/
|
|
192
|
-
var GrantNotFoundError = class extends Error {
|
|
193
|
-
grantId;
|
|
194
|
-
constructor(grantId) {
|
|
195
|
-
super(`Grant not found in auth scope: ${grantId}`);
|
|
196
|
-
this.name = "GrantNotFoundError";
|
|
197
|
-
this.grantId = grantId;
|
|
198
|
-
}
|
|
199
|
-
};
|
|
200
|
-
/**
|
|
201
|
-
* Thrown when a disallowed action (UNDO, REDO, PRUNE) targets the auth scope.
|
|
202
|
-
*/
|
|
203
|
-
var AuthActionNotAllowedError = class extends Error {
|
|
204
|
-
actionType;
|
|
205
|
-
constructor(actionType) {
|
|
206
|
-
super(`${actionType} is not permitted on the auth scope`);
|
|
207
|
-
this.name = "AuthActionNotAllowedError";
|
|
208
|
-
this.actionType = actionType;
|
|
209
|
-
}
|
|
210
|
-
};
|
|
211
|
-
var HashMismatchError = class extends Error {
|
|
212
|
-
_scope;
|
|
213
|
-
_document;
|
|
214
|
-
_operation;
|
|
215
|
-
constructor(scope, document, operation) {
|
|
216
|
-
super();
|
|
217
|
-
this.name = "HashMismatchError";
|
|
218
|
-
this._document = document;
|
|
219
|
-
this._scope = scope;
|
|
220
|
-
this._operation = operation;
|
|
221
|
-
this.message = JSON.stringify({
|
|
222
|
-
error: `Hash mismatch on document ${document.header.id}, scope ${scope}, index ${operation.index}`,
|
|
223
|
-
document,
|
|
224
|
-
operation
|
|
225
|
-
}, null, 1);
|
|
226
|
-
}
|
|
227
|
-
get document() {
|
|
228
|
-
return this._document;
|
|
229
|
-
}
|
|
230
|
-
get scope() {
|
|
231
|
-
return this._scope;
|
|
232
|
-
}
|
|
233
|
-
get operation() {
|
|
234
|
-
return this._operation;
|
|
235
|
-
}
|
|
236
|
-
};
|
|
237
|
-
/**
|
|
238
|
-
* Thrown when replay or import requires a document model version that is not
|
|
239
|
-
* registered. Carries the data the UI needs to explain the mismatch.
|
|
240
|
-
*/
|
|
241
|
-
var UnsupportedDocumentModelVersionError = class extends Error {
|
|
242
|
-
documentType;
|
|
243
|
-
requiredVersion;
|
|
244
|
-
availableVersions;
|
|
245
|
-
constructor(documentType, requiredVersion, availableVersions) {
|
|
246
|
-
super(`No reducer registered for document version ${requiredVersion}. Available versions: ${availableVersions.join(", ")}`);
|
|
247
|
-
this.name = "UnsupportedDocumentModelVersionError";
|
|
248
|
-
this.documentType = documentType;
|
|
249
|
-
this.requiredVersion = requiredVersion;
|
|
250
|
-
this.availableVersions = availableVersions;
|
|
251
|
-
}
|
|
252
|
-
static isError(error) {
|
|
253
|
-
return Error.isError(error) && error.name === "UnsupportedDocumentModelVersionError";
|
|
254
|
-
}
|
|
255
|
-
};
|
|
256
|
-
//#endregion
|
|
257
112
|
//#region document-model/schemas.ts
|
|
258
113
|
const isDefinedNonNullAny = (v) => v !== void 0 && v !== null;
|
|
259
114
|
const definedNonNullAnySchema = z.any().refine((v) => isDefinedNonNullAny(v));
|
|
260
|
-
const Load_StateSchema = z.enum(["LOAD_STATE"]);
|
|
261
|
-
const PruneSchema = z.enum(["PRUNE"]);
|
|
262
115
|
const RedoSchema = z.enum(["REDO"]);
|
|
263
116
|
const Set_NameSchema = z.enum(["SET_NAME"]);
|
|
264
117
|
const Set_PreferredEditorSchema = z.enum(["SET_PREFERRED_EDITOR"]);
|
|
@@ -268,50 +121,12 @@ function OperationScopeSchema() {
|
|
|
268
121
|
}
|
|
269
122
|
function DocumentActionSchema() {
|
|
270
123
|
return z.union([
|
|
271
|
-
LoadStateActionSchema(),
|
|
272
|
-
PruneActionSchema(),
|
|
273
124
|
RedoActionSchema(),
|
|
274
125
|
SetNameActionSchema(),
|
|
275
126
|
SetPreferredEditorActionSchema(),
|
|
276
127
|
UndoActionSchema()
|
|
277
128
|
]);
|
|
278
129
|
}
|
|
279
|
-
function LoadStateActionSchema() {
|
|
280
|
-
return z.object({
|
|
281
|
-
id: z.string(),
|
|
282
|
-
timestampUtcMs: z.string(),
|
|
283
|
-
input: z.lazy(() => LoadStateActionInputSchema()),
|
|
284
|
-
type: Load_StateSchema,
|
|
285
|
-
scope: OperationScopeSchema()
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
function LoadStateActionInputSchema() {
|
|
289
|
-
return z.object({
|
|
290
|
-
operations: z.number(),
|
|
291
|
-
state: z.lazy(() => LoadStateActionStateInputSchema())
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
function LoadStateActionStateInputSchema() {
|
|
295
|
-
return z.object({
|
|
296
|
-
data: z.unknown().nullish(),
|
|
297
|
-
name: z.string()
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
function PruneActionSchema() {
|
|
301
|
-
return z.object({
|
|
302
|
-
id: z.string(),
|
|
303
|
-
timestampUtcMs: z.string(),
|
|
304
|
-
input: z.lazy(() => PruneActionInputSchema()),
|
|
305
|
-
type: PruneSchema,
|
|
306
|
-
scope: OperationScopeSchema()
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
function PruneActionInputSchema() {
|
|
310
|
-
return z.object({
|
|
311
|
-
end: z.number().nullish(),
|
|
312
|
-
start: z.number().nullish()
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
130
|
function RedoActionInputSchema() {
|
|
316
131
|
return z.object({ count: z.number() });
|
|
317
132
|
}
|
|
@@ -729,6 +544,13 @@ const PowerhouseModuleSchema = z.object({
|
|
|
729
544
|
documentTypes: z.array(z.string()).optional()
|
|
730
545
|
});
|
|
731
546
|
const PowerhouseModulesSchema = z.array(PowerhouseModuleSchema).optional();
|
|
547
|
+
const PieceModuleSchema = PowerhouseModuleSchema.extend({
|
|
548
|
+
version: z.string().optional(),
|
|
549
|
+
description: z.string().optional(),
|
|
550
|
+
bundle: z.string().optional(),
|
|
551
|
+
descriptor: z.string().optional()
|
|
552
|
+
});
|
|
553
|
+
const PieceModulesSchema = z.array(PieceModuleSchema).optional();
|
|
732
554
|
const PublisherSchema = z.object({
|
|
733
555
|
name: z.string().optional(),
|
|
734
556
|
url: z.string().optional()
|
|
@@ -739,7 +561,7 @@ const ConfigEntrySchema = z.object({
|
|
|
739
561
|
type: ConfigEntryTypeSchema,
|
|
740
562
|
description: z.string().optional(),
|
|
741
563
|
required: z.boolean().optional(),
|
|
742
|
-
default: z.
|
|
564
|
+
default: z.string().optional()
|
|
743
565
|
});
|
|
744
566
|
const PwaUrlPatternSchema = z.union([z.string(), z.strictObject({
|
|
745
567
|
source: z.string(),
|
|
@@ -835,6 +657,8 @@ const ManifestSchema = z.object({
|
|
|
835
657
|
editors: PowerhouseModulesSchema,
|
|
836
658
|
processors: PowerhouseModulesSchema,
|
|
837
659
|
subgraphs: PowerhouseModulesSchema,
|
|
660
|
+
pieces: PieceModulesSchema,
|
|
661
|
+
externalDependencies: z.record(z.string(), z.string()).optional(),
|
|
838
662
|
config: z.array(ConfigEntrySchema).optional(),
|
|
839
663
|
pwa: PwaConfigSchema.optional()
|
|
840
664
|
});
|
|
@@ -854,35 +678,6 @@ const undo = (count = 1, scope = "global") => createAction("UNDO", { count }, vo
|
|
|
854
678
|
* @category Actions
|
|
855
679
|
*/
|
|
856
680
|
const redo = (count = 1, scope = "global") => createAction("REDO", { count }, void 0, RedoActionInputSchema, scope);
|
|
857
|
-
/**
|
|
858
|
-
* Joins multiple operations into a single {@link loadState | LOAD_STATE} operation.
|
|
859
|
-
*
|
|
860
|
-
* @remarks
|
|
861
|
-
* Useful to keep operations history smaller. Operations to prune are selected by index,
|
|
862
|
-
* similar to the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | slice} method in Arrays.
|
|
863
|
-
*
|
|
864
|
-
* @param start - Index of the first operation to prune
|
|
865
|
-
* @param end - Index of the last operation to prune
|
|
866
|
-
* @category Actions
|
|
867
|
-
*/
|
|
868
|
-
const prune = (start, end, scope = "global") => createAction("PRUNE", {
|
|
869
|
-
start,
|
|
870
|
-
end
|
|
871
|
-
}, void 0, PruneActionInputSchema, scope);
|
|
872
|
-
/**
|
|
873
|
-
* Replaces the state of the document.
|
|
874
|
-
*
|
|
875
|
-
* @remarks
|
|
876
|
-
* This action shouldn't be used directly. It is dispatched by the {@link prune} action.
|
|
877
|
-
*
|
|
878
|
-
* @param state - State to be set in the document.
|
|
879
|
-
* @param operations - Number of operations that were removed from the previous state.
|
|
880
|
-
* @category Actions
|
|
881
|
-
*/
|
|
882
|
-
const loadState = (state, operations) => createAction("LOAD_STATE", {
|
|
883
|
-
state,
|
|
884
|
-
operations
|
|
885
|
-
}, void 0, LoadStateActionInputSchema);
|
|
886
681
|
const noop = (scope = "global") => createAction("NOOP", {}, void 0, void 0, scope);
|
|
887
682
|
/**
|
|
888
683
|
* Helper function to be used by action creators.
|
|
@@ -980,6 +775,7 @@ async function buildOperationSignature(context, signMethod) {
|
|
|
980
775
|
const signature = await signMethod(buildOperationSignatureMessage(params));
|
|
981
776
|
return [...params, `0x${ab2hex(signature)}`];
|
|
982
777
|
}
|
|
778
|
+
/** @deprecated Emits a legacy SHA-1 tuple; sign through `ISigner.signAction`. */
|
|
983
779
|
async function buildSignedAction(action, reducer, document, signer, signHandler) {
|
|
984
780
|
const scopeOperations = reducer(document, action, void 0, { reuseOperationResultingState: true }).operations[action.scope];
|
|
985
781
|
if (!scopeOperations) throw new Error(`No operations found for scope: ${action.scope}`);
|
|
@@ -992,8 +788,10 @@ async function buildSignedAction(action, reducer, document, signer, signHandler)
|
|
|
992
788
|
action,
|
|
993
789
|
previousStateHash
|
|
994
790
|
}, signHandler);
|
|
995
|
-
|
|
791
|
+
const actionContext = { signer: actionSigner(signer.user, signer.app, [...signer.signatures, signature]) };
|
|
792
|
+
return operationWithContext(operation, actionContext);
|
|
996
793
|
}
|
|
794
|
+
/** @deprecated Use `verifyActionSignature` from `@powerhousedao/reactor`. */
|
|
997
795
|
async function verifyOperationSignature(signature, signer, verifyHandler) {
|
|
998
796
|
const publicKey = signer.app.key;
|
|
999
797
|
const params = signature.slice(0, 4);
|
|
@@ -1068,8 +866,6 @@ const baseActions = {
|
|
|
1068
866
|
setPreferredEditor,
|
|
1069
867
|
undo,
|
|
1070
868
|
redo,
|
|
1071
|
-
prune,
|
|
1072
|
-
loadState,
|
|
1073
869
|
noop
|
|
1074
870
|
};
|
|
1075
871
|
const documentModelActions = {
|
|
@@ -1187,7 +983,7 @@ var AuthAdministrationMissingError = class extends Error {
|
|
|
1187
983
|
this.name = "AuthAdministrationMissingError";
|
|
1188
984
|
}
|
|
1189
985
|
};
|
|
1190
|
-
const GRANT_KEYS = new Set([
|
|
986
|
+
const GRANT_KEYS = /* @__PURE__ */ new Set([
|
|
1191
987
|
"id",
|
|
1192
988
|
"description",
|
|
1193
989
|
"effect",
|
|
@@ -1195,13 +991,13 @@ const GRANT_KEYS = new Set([
|
|
|
1195
991
|
"capability",
|
|
1196
992
|
"where"
|
|
1197
993
|
]);
|
|
1198
|
-
const PRINCIPAL_KINDS = new Set([
|
|
994
|
+
const PRINCIPAL_KINDS = /* @__PURE__ */ new Set([
|
|
1199
995
|
"anyone",
|
|
1200
996
|
"address",
|
|
1201
997
|
"group",
|
|
1202
998
|
"match"
|
|
1203
999
|
]);
|
|
1204
|
-
const COMPARISON_CONDITION_KINDS = new Set([
|
|
1000
|
+
const COMPARISON_CONDITION_KINDS = /* @__PURE__ */ new Set([
|
|
1205
1001
|
"eq",
|
|
1206
1002
|
"ne",
|
|
1207
1003
|
"lt",
|
|
@@ -2530,12 +2326,12 @@ function assertAuthPreservedOnDuplicate(documentId, source, duplicated) {
|
|
|
2530
2326
|
* The auth scope a state snapshot may install, given the policy already there.
|
|
2531
2327
|
*
|
|
2532
2328
|
* `applyAuthAction` is the validated door onto `state.auth`, but a whole-state
|
|
2533
|
-
* snapshot (UPGRADE_DOCUMENT's `initialState
|
|
2534
|
-
*
|
|
2535
|
-
*
|
|
2536
|
-
*
|
|
2537
|
-
*
|
|
2538
|
-
*
|
|
2329
|
+
* snapshot (UPGRADE_DOCUMENT's `initialState`) replaces the scope wholesale and
|
|
2330
|
+
* is authorized as a `document`-scope write. Without this, a subject holding
|
|
2331
|
+
* `execute` on `document` and no auth grant at all can install a policy of its
|
|
2332
|
+
* choosing, name itself `creator` (which exempts the policy from the retention
|
|
2333
|
+
* rule for good), or wipe an existing policy by carrying the default
|
|
2334
|
+
* uninitialized one.
|
|
2539
2335
|
*
|
|
2540
2336
|
* Three cases:
|
|
2541
2337
|
*
|
|
@@ -2562,13 +2358,9 @@ function resolveSnapshotAuth(documentId, documentType, current, incoming) {
|
|
|
2562
2358
|
assertValidInitialGrants(incoming.grants, documentType, incoming.creator);
|
|
2563
2359
|
return incoming;
|
|
2564
2360
|
}
|
|
2565
|
-
/** UNDO
|
|
2361
|
+
/** UNDO and REDO are rejected on the auth scope. */
|
|
2566
2362
|
function assertAuthScopeActionAllowed(action) {
|
|
2567
|
-
if (action.scope === "auth" && [
|
|
2568
|
-
"UNDO",
|
|
2569
|
-
"REDO",
|
|
2570
|
-
"PRUNE"
|
|
2571
|
-
].includes(action.type)) throw new AuthActionNotAllowedError(action.type);
|
|
2363
|
+
if (action.scope === "auth" && ["UNDO", "REDO"].includes(action.type)) throw new AuthActionNotAllowedError(action.type);
|
|
2572
2364
|
}
|
|
2573
2365
|
/**
|
|
2574
2366
|
* Evaluates the auth policy for a single request and reports why it refused.
|
|
@@ -2674,6 +2466,63 @@ function assertIsDocumentModelDocument(document) {
|
|
|
2674
2466
|
DocumentModelSchema.parse(document);
|
|
2675
2467
|
}
|
|
2676
2468
|
//#endregion
|
|
2469
|
+
//#region document-model/signature-policy.ts
|
|
2470
|
+
/** The `protocolVersions` key that fixes a document's signature requirement. */
|
|
2471
|
+
const SIGNATURE_PROTOCOL = "signature";
|
|
2472
|
+
/** `protocolVersions.signature` of a document that requires v2 tuples. */
|
|
2473
|
+
const SIGNATURE_PROTOCOL_V2 = 2;
|
|
2474
|
+
/** What a new document is created as unless the caller or host says otherwise. */
|
|
2475
|
+
const DEFAULT_SIGNATURE_POLICY = "v2-required";
|
|
2476
|
+
function isSignaturePolicy(value) {
|
|
2477
|
+
return value === "legacy" || value === "v2-required";
|
|
2478
|
+
}
|
|
2479
|
+
const DERIVED_ID = /^[A-Za-z0-9_-]{42}[AEIMQUYcgkosw048]$/;
|
|
2480
|
+
/** Read from a header, a CREATE_DOCUMENT input or a bare map. */
|
|
2481
|
+
function signaturePolicyOf(source) {
|
|
2482
|
+
const version = (source && "protocolVersions" in source ? source.protocolVersions : source)?.[SIGNATURE_PROTOCOL];
|
|
2483
|
+
return typeof version === "number" && version >= 2 ? "v2-required" : "legacy";
|
|
2484
|
+
}
|
|
2485
|
+
/** `protocolVersions` for a new v2-required document. */
|
|
2486
|
+
function v2RequiredProtocolVersions(base = {}) {
|
|
2487
|
+
return {
|
|
2488
|
+
"base-reducer": 2,
|
|
2489
|
+
...base,
|
|
2490
|
+
[SIGNATURE_PROTOCOL]: 2
|
|
2491
|
+
};
|
|
2492
|
+
}
|
|
2493
|
+
/**
|
|
2494
|
+
* The policy a create call asks for: `signaturePolicy`, else the `signature`
|
|
2495
|
+
* key of its `protocolVersions`, else `fallback`, the host's default.
|
|
2496
|
+
*/
|
|
2497
|
+
function requestedSignaturePolicy(request, fallback) {
|
|
2498
|
+
if (request?.signaturePolicy) return request.signaturePolicy;
|
|
2499
|
+
if (request?.protocolVersions?.["signature"] !== void 0) return signaturePolicyOf(request.protocolVersions);
|
|
2500
|
+
return fallback;
|
|
2501
|
+
}
|
|
2502
|
+
/** `protocolVersions` for a new document under `policy`, over `base`. */
|
|
2503
|
+
function protocolVersionsFor(policy, base = {}) {
|
|
2504
|
+
if (policy === "v2-required") return v2RequiredProtocolVersions(base);
|
|
2505
|
+
const { [SIGNATURE_PROTOCOL]: _signature, ...rest } = base;
|
|
2506
|
+
return {
|
|
2507
|
+
"base-reducer": 2,
|
|
2508
|
+
...rest
|
|
2509
|
+
};
|
|
2510
|
+
}
|
|
2511
|
+
/** `base64url(sha256(canonicalJson(params)))`, unpadded. */
|
|
2512
|
+
function deriveDocumentId(params) {
|
|
2513
|
+
const preimage = canonicalJson({
|
|
2514
|
+
documentType: params.documentType,
|
|
2515
|
+
createdAtUtcIso: params.createdAtUtcIso,
|
|
2516
|
+
nonce: params.nonce,
|
|
2517
|
+
protocolVersions: params.protocolVersions
|
|
2518
|
+
}, "document id");
|
|
2519
|
+
return bytesToBase64Url(sha256(new TextEncoder().encode(preimage)));
|
|
2520
|
+
}
|
|
2521
|
+
/** Whether `id` has the shape `deriveDocumentId` produces. */
|
|
2522
|
+
function isDerivedDocumentId(id) {
|
|
2523
|
+
return DERIVED_ID.test(id);
|
|
2524
|
+
}
|
|
2525
|
+
//#endregion
|
|
2677
2526
|
//#region document-model/header.ts
|
|
2678
2527
|
/**
|
|
2679
2528
|
* Generates a deterministic payload from signing parameters
|
|
@@ -2693,11 +2542,11 @@ async function createVerificationSigner(pubKey) {
|
|
|
2693
2542
|
}, true, ["verify"]);
|
|
2694
2543
|
return {
|
|
2695
2544
|
publicKey: cryptoKey,
|
|
2696
|
-
|
|
2697
|
-
|
|
2545
|
+
sign(_data) {
|
|
2546
|
+
return Promise.reject(/* @__PURE__ */ new Error("verification-only signer cannot sign data"));
|
|
2698
2547
|
},
|
|
2699
|
-
|
|
2700
|
-
|
|
2548
|
+
signAction(_action, _target, _abortSignal) {
|
|
2549
|
+
return Promise.reject(/* @__PURE__ */ new Error("verification-only signer cannot sign actions"));
|
|
2701
2550
|
},
|
|
2702
2551
|
async verify(data, signature) {
|
|
2703
2552
|
let isValid;
|
|
@@ -2767,26 +2616,68 @@ const validateHeader = async (header) => {
|
|
|
2767
2616
|
* Creates a header that has yet to be signed. This header is not valid, but
|
|
2768
2617
|
* can be input into {@link createSignedHeader} to create a signed header.
|
|
2769
2618
|
*
|
|
2619
|
+
* With `protocolVersions` requiring v2 signatures the header takes a random
|
|
2620
|
+
* nonce and the id {@link deriveDocumentId} gives, so `id` must be omitted.
|
|
2621
|
+
*
|
|
2770
2622
|
* @returns An unsigned header for a document.
|
|
2771
2623
|
*/
|
|
2772
|
-
const createPresignedHeader = (id
|
|
2773
|
-
|
|
2774
|
-
|
|
2624
|
+
const createPresignedHeader = (id, documentType = "", protocolVersions) => {
|
|
2625
|
+
const createdAtUtcIso = (/* @__PURE__ */ new Date()).toISOString();
|
|
2626
|
+
const header = {
|
|
2627
|
+
id: id ?? generateId(),
|
|
2775
2628
|
sig: {
|
|
2776
2629
|
publicKey: {},
|
|
2777
2630
|
nonce: ""
|
|
2778
2631
|
},
|
|
2779
2632
|
documentType,
|
|
2780
|
-
createdAtUtcIso
|
|
2633
|
+
createdAtUtcIso,
|
|
2781
2634
|
slug: "",
|
|
2782
2635
|
name: "",
|
|
2783
2636
|
branch: "main",
|
|
2784
2637
|
revision: { document: 0 },
|
|
2785
|
-
lastModifiedAtUtcIso:
|
|
2638
|
+
lastModifiedAtUtcIso: createdAtUtcIso,
|
|
2786
2639
|
meta: {}
|
|
2787
2640
|
};
|
|
2641
|
+
if (protocolVersions === void 0) return header;
|
|
2642
|
+
header.protocolVersions = { ...protocolVersions };
|
|
2643
|
+
if (signaturePolicyOf(header) === "legacy") return header;
|
|
2644
|
+
if (id !== void 0) throw new Error(`A v2-required document's id is derived from its header; cannot use ${id}`);
|
|
2645
|
+
header.sig.nonce = generateId();
|
|
2646
|
+
header.id = deriveDocumentId({
|
|
2647
|
+
documentType,
|
|
2648
|
+
createdAtUtcIso,
|
|
2649
|
+
nonce: header.sig.nonce,
|
|
2650
|
+
protocolVersions: header.protocolVersions
|
|
2651
|
+
});
|
|
2652
|
+
return header;
|
|
2788
2653
|
};
|
|
2789
2654
|
/**
|
|
2655
|
+
* A header for a copy of a document headed `source`. A copy is v2-required
|
|
2656
|
+
* when its source is or when `policy` asks for it, and then takes a derived id;
|
|
2657
|
+
* otherwise it takes `id`. It keeps the source's other protocol versions.
|
|
2658
|
+
*/
|
|
2659
|
+
function createCopyHeader(source, id, policy = DEFAULT_SIGNATURE_POLICY) {
|
|
2660
|
+
const base = source.protocolVersions ?? {};
|
|
2661
|
+
if (signaturePolicyOf(source) === "v2-required" || policy === "v2-required") return createPresignedHeader(void 0, source.documentType, protocolVersionsFor("v2-required", base));
|
|
2662
|
+
const header = createPresignedHeader(id, source.documentType);
|
|
2663
|
+
if (source.protocolVersions) header.protocolVersions = { ...source.protocolVersions };
|
|
2664
|
+
return header;
|
|
2665
|
+
}
|
|
2666
|
+
/** Whether a v2-required `header` carries the id its params derive. */
|
|
2667
|
+
function hasDerivedDocumentId(header) {
|
|
2668
|
+
if (signaturePolicyOf(header) === "legacy" || !header.protocolVersions) return false;
|
|
2669
|
+
try {
|
|
2670
|
+
return deriveDocumentId({
|
|
2671
|
+
documentType: header.documentType,
|
|
2672
|
+
createdAtUtcIso: header.createdAtUtcIso,
|
|
2673
|
+
nonce: header.sig.nonce,
|
|
2674
|
+
protocolVersions: header.protocolVersions
|
|
2675
|
+
}) === header.id;
|
|
2676
|
+
} catch {
|
|
2677
|
+
return false;
|
|
2678
|
+
}
|
|
2679
|
+
}
|
|
2680
|
+
/**
|
|
2790
2681
|
* Creates a new, signed header for a document. This will replace the id of the
|
|
2791
2682
|
* document.
|
|
2792
2683
|
*
|
|
@@ -2829,7 +2720,8 @@ const createSignedHeader = async (unsignedHeader, documentType, signer) => {
|
|
|
2829
2720
|
* some are not. See the PHDocumentHeader type for more information.
|
|
2830
2721
|
*/
|
|
2831
2722
|
const createSignedHeaderForSigner = async (documentType, signer) => {
|
|
2832
|
-
|
|
2723
|
+
const unsignedHeader = createPresignedHeader();
|
|
2724
|
+
return await createSignedHeader(unsignedHeader, documentType, signer);
|
|
2833
2725
|
};
|
|
2834
2726
|
//#endregion
|
|
2835
2727
|
//#region document-model/documents.ts
|
|
@@ -2847,9 +2739,7 @@ function isDocumentAction(action) {
|
|
|
2847
2739
|
"SET_NAME",
|
|
2848
2740
|
"SET_PREFERRED_EDITOR",
|
|
2849
2741
|
"UNDO",
|
|
2850
|
-
"REDO"
|
|
2851
|
-
"PRUNE",
|
|
2852
|
-
"LOAD_STATE"
|
|
2742
|
+
"REDO"
|
|
2853
2743
|
].includes(action.type);
|
|
2854
2744
|
}
|
|
2855
2745
|
/**
|
|
@@ -2905,12 +2795,16 @@ function createDocumentScopeOperations(header, state) {
|
|
|
2905
2795
|
}
|
|
2906
2796
|
/**
|
|
2907
2797
|
* Creates a new document. When `documentType` is given the header is stamped
|
|
2908
|
-
* with it and the document-scope operations are seeded.
|
|
2798
|
+
* with it and the document-scope operations are seeded. Without
|
|
2799
|
+
* `protocolVersions` the document is v2-required and takes a derived id; with
|
|
2800
|
+
* them it is v2-required only if they say so (see {@link protocolVersionsFor}).
|
|
2909
2801
|
*/
|
|
2910
|
-
function baseCreateDocument(createState, initialState, documentType = "") {
|
|
2802
|
+
function baseCreateDocument(createState, initialState, documentType = "", protocolVersions) {
|
|
2911
2803
|
const state = createState(initialState);
|
|
2912
|
-
const header = createPresignedHeader(
|
|
2913
|
-
|
|
2804
|
+
const header = createPresignedHeader(void 0, documentType, protocolVersions === void 0 ? protocolVersionsFor("v2-required") : {
|
|
2805
|
+
"base-reducer": 2,
|
|
2806
|
+
...protocolVersions
|
|
2807
|
+
});
|
|
2914
2808
|
return {
|
|
2915
2809
|
header,
|
|
2916
2810
|
state,
|
|
@@ -2926,8 +2820,39 @@ function baseCreateDocument(createState, initialState, documentType = "") {
|
|
|
2926
2820
|
clipboard: []
|
|
2927
2821
|
};
|
|
2928
2822
|
}
|
|
2823
|
+
/**
|
|
2824
|
+
* `document`, not yet created, under a fresh header for `policy`. A legacy
|
|
2825
|
+
* header takes `id` when given; a v2-required one ignores `id` and derives its
|
|
2826
|
+
* own, so a caller that needs a fixed id must ask for legacy.
|
|
2827
|
+
* `protocolVersions` are merged over the document's. Name, slug, branch and
|
|
2828
|
+
* meta carry over. A document already under `policy` is returned as is unless
|
|
2829
|
+
* a legacy `id` or `protocolVersions` are given.
|
|
2830
|
+
*/
|
|
2831
|
+
function withSignaturePolicy(document, policy, options = {}) {
|
|
2832
|
+
const id = policy === "legacy" ? options.id : void 0;
|
|
2833
|
+
if (id === void 0 && options.protocolVersions === void 0 && signaturePolicyOf(document.header) === policy) return document;
|
|
2834
|
+
const source = document.header;
|
|
2835
|
+
const header = createPresignedHeader(id, source.documentType, protocolVersionsFor(policy, {
|
|
2836
|
+
...source.protocolVersions,
|
|
2837
|
+
...options.protocolVersions
|
|
2838
|
+
}));
|
|
2839
|
+
header.name = source.name;
|
|
2840
|
+
header.slug = source.slug;
|
|
2841
|
+
header.branch = source.branch;
|
|
2842
|
+
header.meta = source.meta;
|
|
2843
|
+
const operations = document.operations.document ? {
|
|
2844
|
+
...document.operations,
|
|
2845
|
+
document: createDocumentScopeOperations(header, document.state)
|
|
2846
|
+
} : document.operations;
|
|
2847
|
+
return {
|
|
2848
|
+
...document,
|
|
2849
|
+
header,
|
|
2850
|
+
operations
|
|
2851
|
+
};
|
|
2852
|
+
}
|
|
2929
2853
|
function hashDocumentStateForScope(document, scope = "global") {
|
|
2930
|
-
|
|
2854
|
+
const stateString = stringify(document.state[scope] || "");
|
|
2855
|
+
return hashBrowser(stateString);
|
|
2931
2856
|
}
|
|
2932
2857
|
function readOnly(value) {
|
|
2933
2858
|
return Object.freeze(value);
|
|
@@ -3058,7 +2983,7 @@ function replayDocument(initialState, operations, reducer, header, dispatch, ski
|
|
|
3058
2983
|
const backfilledInitialState = backfillAuthState(initialState);
|
|
3059
2984
|
let documentState = backfilledInitialState;
|
|
3060
2985
|
const operationsToReplay = [];
|
|
3061
|
-
const allScopes = new Set([
|
|
2986
|
+
const allScopes = /* @__PURE__ */ new Set([
|
|
3062
2987
|
...Object.keys(operations),
|
|
3063
2988
|
"global",
|
|
3064
2989
|
"local"
|
|
@@ -3116,7 +3041,7 @@ function replayDocument(initialState, operations, reducer, header, dispatch, ski
|
|
|
3116
3041
|
if (operation.hash !== hashDocumentStateForScope(result, scope)) throw new HashMismatchError(scope, result, operation);
|
|
3117
3042
|
else break;
|
|
3118
3043
|
}
|
|
3119
|
-
const allResultScopes = new Set([
|
|
3044
|
+
const allResultScopes = /* @__PURE__ */ new Set([
|
|
3120
3045
|
...Object.keys(result.operations),
|
|
3121
3046
|
...Object.keys(operations),
|
|
3122
3047
|
"global",
|
|
@@ -3179,8 +3104,8 @@ function checkCleanedOperationsIntegrity(sortedOperations) {
|
|
|
3179
3104
|
index: nextOperation.index,
|
|
3180
3105
|
skip: nextOperation.skip
|
|
3181
3106
|
},
|
|
3182
|
-
issue:
|
|
3183
|
-
category: nextIndex > currentIndex + 1 ?
|
|
3107
|
+
issue: "UNEXPECTED_INDEX",
|
|
3108
|
+
category: nextIndex > currentIndex + 1 ? "MISSING_INDEX" : "DUPLICATED_INDEX",
|
|
3184
3109
|
message: `Expected index ${currentIndex + 1} with skip 0 or equivalent, got index ${nextOperation.index} with skip ${nextOperation.skip}`
|
|
3185
3110
|
});
|
|
3186
3111
|
currentIndex = nextOperation.index;
|
|
@@ -3290,12 +3215,14 @@ function attachBranch(trunk, newBranch) {
|
|
|
3290
3215
|
nextTrunkOperation = trunkCopy.shift();
|
|
3291
3216
|
}
|
|
3292
3217
|
if (!nextTrunkOperation) enteredBranch = true;
|
|
3293
|
-
else if (!enteredBranch)
|
|
3294
|
-
|
|
3295
|
-
|
|
3296
|
-
|
|
3297
|
-
|
|
3298
|
-
|
|
3218
|
+
else if (!enteredBranch) {
|
|
3219
|
+
if (operationsAreEqual(nextTrunkOperation, newOperationCandidate)) {
|
|
3220
|
+
newOperations.shift();
|
|
3221
|
+
result.push(nextTrunkOperation);
|
|
3222
|
+
} else {
|
|
3223
|
+
trunkCopy.unshift(nextTrunkOperation);
|
|
3224
|
+
enteredBranch = true;
|
|
3225
|
+
}
|
|
3299
3226
|
}
|
|
3300
3227
|
if (enteredBranch) {
|
|
3301
3228
|
let nextAppend = newOperations.shift();
|
|
@@ -3326,13 +3253,14 @@ function split(sortedTargetOperations, sortedMergeOperations) {
|
|
|
3326
3253
|
for (let i = 0; i < maxLength; i++) {
|
|
3327
3254
|
const targetOperation = sortedTargetOperations[i];
|
|
3328
3255
|
const mergeOperation = sortedMergeOperations[i];
|
|
3329
|
-
if (targetOperation && mergeOperation)
|
|
3330
|
-
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
|
|
3334
|
-
|
|
3335
|
-
|
|
3256
|
+
if (targetOperation && mergeOperation) {
|
|
3257
|
+
if (!splitHappened && operationsAreEqual(targetOperation, mergeOperation)) commonOperations.push(targetOperation);
|
|
3258
|
+
else {
|
|
3259
|
+
splitHappened = true;
|
|
3260
|
+
targetDiffOperations.push(targetOperation);
|
|
3261
|
+
mergeDiffOperations.push(mergeOperation);
|
|
3262
|
+
}
|
|
3263
|
+
} else if (targetOperation) targetDiffOperations.push(targetOperation);
|
|
3336
3264
|
else if (mergeOperation) mergeDiffOperations.push(mergeOperation);
|
|
3337
3265
|
}
|
|
3338
3266
|
return [
|
|
@@ -3384,14 +3312,14 @@ function prepareOperations(operationsHistory, newOperations) {
|
|
|
3384
3312
|
const sortedOperationsHistory = sortOperations(operationsHistory);
|
|
3385
3313
|
const sortedOperations = sortOperations(newOperations);
|
|
3386
3314
|
const integrityErrors = checkCleanedOperationsIntegrity([...sortedOperationsHistory, ...sortedOperations]);
|
|
3387
|
-
const firstMissingIndexOperation = [...integrityErrors.filter((integrityIssue) => integrityIssue.category ===
|
|
3315
|
+
const firstMissingIndexOperation = [...integrityErrors.filter((integrityIssue) => integrityIssue.category === "MISSING_INDEX")].sort((a, b) => b.operation.index - a.operation.index).pop()?.operation;
|
|
3388
3316
|
for (const newOperation of sortedOperations) {
|
|
3389
3317
|
if (firstMissingIndexOperation && newOperation.index >= firstMissingIndexOperation.index) {
|
|
3390
3318
|
result.invalidOperations.push(newOperation);
|
|
3391
3319
|
continue;
|
|
3392
3320
|
}
|
|
3393
3321
|
if (integrityErrors.some((integrityError) => {
|
|
3394
|
-
return integrityError.operation.index === newOperation.index && integrityError.operation.skip === newOperation.skip && integrityError.category ===
|
|
3322
|
+
return integrityError.operation.index === newOperation.index && integrityError.operation.skip === newOperation.skip && integrityError.category === "DUPLICATED_INDEX";
|
|
3395
3323
|
})) {
|
|
3396
3324
|
result.duplicatedOperations.push(newOperation);
|
|
3397
3325
|
continue;
|
|
@@ -3620,18 +3548,6 @@ function redoOperation(document, action, skip) {
|
|
|
3620
3548
|
});
|
|
3621
3549
|
});
|
|
3622
3550
|
}
|
|
3623
|
-
function loadStateOperation(document, action) {
|
|
3624
|
-
const loaded = backfillAuthState(action.state.data);
|
|
3625
|
-
loaded.auth = resolveSnapshotAuth(document.header.id, document.header.documentType, backfillAuthState({ ...document.state }).auth, loaded.auth);
|
|
3626
|
-
return {
|
|
3627
|
-
...document,
|
|
3628
|
-
header: {
|
|
3629
|
-
...document.header,
|
|
3630
|
-
name: action.state.name
|
|
3631
|
-
},
|
|
3632
|
-
state: loaded
|
|
3633
|
-
};
|
|
3634
|
-
}
|
|
3635
3551
|
/**
|
|
3636
3552
|
* Reads an operation's outcome. A denial takes precedence over a reducer
|
|
3637
3553
|
* error, since a denied operation never reaches its reducer.
|
|
@@ -3664,15 +3580,12 @@ function replayOperations(initialState, clearedOperations, stateReducer, header,
|
|
|
3664
3580
|
* @returns The updated document state.
|
|
3665
3581
|
*/
|
|
3666
3582
|
function updateOperationsForAction(document, action, reuseLastOperationIndex, skip, context) {
|
|
3667
|
-
if ([
|
|
3668
|
-
"UNDO",
|
|
3669
|
-
"REDO",
|
|
3670
|
-
"PRUNE"
|
|
3671
|
-
].includes(action.type)) return document;
|
|
3583
|
+
if (["UNDO", "REDO"].includes(action.type)) return document;
|
|
3672
3584
|
const scope = action.scope;
|
|
3673
3585
|
const existing = document.operations[scope];
|
|
3674
3586
|
const lastOperationIndex = existing?.at(-1)?.index ?? -1;
|
|
3675
|
-
const
|
|
3587
|
+
const index = reuseLastOperationIndex ? lastOperationIndex : lastOperationIndex + 1;
|
|
3588
|
+
const newOperation = operationFromAction(action, index, skip, context);
|
|
3676
3589
|
const operations = [...existing ?? [], newOperation];
|
|
3677
3590
|
return {
|
|
3678
3591
|
...document,
|
|
@@ -3716,20 +3629,17 @@ function updateDocument(document, action, reuseLastOperationIndex, skip, context
|
|
|
3716
3629
|
return newDocument;
|
|
3717
3630
|
}
|
|
3718
3631
|
/**
|
|
3719
|
-
* The base document reducer function
|
|
3632
|
+
* The base document reducer function.
|
|
3720
3633
|
*
|
|
3721
3634
|
* @param state The current state of the document.
|
|
3722
3635
|
* @param action The action being applied to the document.
|
|
3723
|
-
* @param wrappedReducer The custom reducer function being wrapped by the base reducer.
|
|
3724
3636
|
* @returns The updated document state.
|
|
3725
3637
|
*/
|
|
3726
|
-
function _baseReducer(document, action
|
|
3638
|
+
function _baseReducer(document, action) {
|
|
3727
3639
|
const parsedAction = DocumentActionSchema().parse(action);
|
|
3728
3640
|
switch (parsedAction.type) {
|
|
3729
3641
|
case "SET_NAME": return setNameOperation(document, parsedAction.input);
|
|
3730
3642
|
case "SET_PREFERRED_EDITOR": return setPreferredEditorOperation(document, parsedAction.input);
|
|
3731
|
-
case "PRUNE": return pruneOperation(document, parsedAction.input, wrappedReducer);
|
|
3732
|
-
case "LOAD_STATE": return loadStateOperation(document, parsedAction.input);
|
|
3733
3643
|
default: return document;
|
|
3734
3644
|
}
|
|
3735
3645
|
}
|
|
@@ -3807,7 +3717,7 @@ function processUndoOperation(document, scope, customReducer, reuseOperationResu
|
|
|
3807
3717
|
}
|
|
3808
3718
|
/**
|
|
3809
3719
|
* Base document reducer that wraps a custom document reducer and handles
|
|
3810
|
-
* document-level actions such as undo, redo,
|
|
3720
|
+
* document-level actions such as undo, redo, and set name.
|
|
3811
3721
|
*
|
|
3812
3722
|
* @template TGlobalState - The type of the state of the custom reducer.
|
|
3813
3723
|
* @template TAction - The type of the actions of the custom reducer.
|
|
@@ -3835,7 +3745,7 @@ function baseReducer(document, action, customReducer, dispatch, options = {}) {
|
|
|
3835
3745
|
...newDocument,
|
|
3836
3746
|
clipboard: []
|
|
3837
3747
|
};
|
|
3838
|
-
if (isDocumentAction(_action)) newDocument = _baseReducer(newDocument, _action
|
|
3748
|
+
if (isDocumentAction(_action)) newDocument = _baseReducer(newDocument, _action);
|
|
3839
3749
|
const operationContext = {
|
|
3840
3750
|
documentId: document.header.id,
|
|
3841
3751
|
scope: _action.scope,
|
|
@@ -3898,11 +3808,7 @@ function baseReducer(document, action, customReducer, dispatch, options = {}) {
|
|
|
3898
3808
|
}
|
|
3899
3809
|
}
|
|
3900
3810
|
});
|
|
3901
|
-
if ([
|
|
3902
|
-
"UNDO",
|
|
3903
|
-
"REDO",
|
|
3904
|
-
"PRUNE"
|
|
3905
|
-
].includes(_action.type)) return newDocument;
|
|
3811
|
+
if (["UNDO", "REDO"].includes(_action.type)) return newDocument;
|
|
3906
3812
|
const scope = _action.scope || "global";
|
|
3907
3813
|
const replayHash = options.replayOptions?.operation.hash;
|
|
3908
3814
|
const hash = replayHash ? replayHash : hashDocumentStateForScope(newDocument, scope);
|
|
@@ -3922,7 +3828,6 @@ function baseReducer(document, action, customReducer, dispatch, options = {}) {
|
|
|
3922
3828
|
* - `SET_NAME`
|
|
3923
3829
|
* - `UNDO`
|
|
3924
3830
|
* - `REDO`
|
|
3925
|
-
* - `PRUNE`
|
|
3926
3831
|
*
|
|
3927
3832
|
* It also updates the document-related attributes on every operation.
|
|
3928
3833
|
*
|
|
@@ -3937,46 +3842,6 @@ function createReducer(stateReducer, documentReducer = baseReducer) {
|
|
|
3937
3842
|
};
|
|
3938
3843
|
return reducer;
|
|
3939
3844
|
}
|
|
3940
|
-
function pruneOperation(document, input, wrappedReducer) {
|
|
3941
|
-
const operations = document.operations.global;
|
|
3942
|
-
if (!operations) throw new Error("No global operations found");
|
|
3943
|
-
let { start, end } = input;
|
|
3944
|
-
start = start || 0;
|
|
3945
|
-
end = end || operations.length;
|
|
3946
|
-
const actionsToPrune = operations.slice(start, end);
|
|
3947
|
-
const actionsToKeepStart = operations.slice(0, start);
|
|
3948
|
-
const actionsToKeepEnd = operations.slice(end);
|
|
3949
|
-
const newDocument = replayOperations(document.initialState, {
|
|
3950
|
-
...document.operations,
|
|
3951
|
-
global: actionsToKeepStart.concat(actionsToPrune)
|
|
3952
|
-
}, wrappedReducer, document.header);
|
|
3953
|
-
const newState = newDocument.state;
|
|
3954
|
-
const name = newDocument.header.name;
|
|
3955
|
-
const loadStateIndex = actionsToKeepStart.length;
|
|
3956
|
-
const loadStateTimestamp = actionsToKeepStart.length ? actionsToKeepStart[actionsToKeepStart.length - 1].timestampUtcMs : actionsToKeepEnd.length ? actionsToKeepEnd[0].timestampUtcMs : (/* @__PURE__ */ new Date()).toISOString();
|
|
3957
|
-
const action = loadState({
|
|
3958
|
-
name,
|
|
3959
|
-
...newState
|
|
3960
|
-
}, actionsToPrune.length);
|
|
3961
|
-
return replayOperations(document.initialState, {
|
|
3962
|
-
...document.operations,
|
|
3963
|
-
global: [
|
|
3964
|
-
...actionsToKeepStart,
|
|
3965
|
-
{
|
|
3966
|
-
skip: 0,
|
|
3967
|
-
...action,
|
|
3968
|
-
action,
|
|
3969
|
-
timestampUtcMs: loadStateTimestamp,
|
|
3970
|
-
index: loadStateIndex,
|
|
3971
|
-
hash: hashDocumentStateForScope({ state: newState }, "global")
|
|
3972
|
-
},
|
|
3973
|
-
...actionsToKeepEnd.map((action, index) => ({
|
|
3974
|
-
...action,
|
|
3975
|
-
index: loadStateIndex + index + 1
|
|
3976
|
-
}))
|
|
3977
|
-
]
|
|
3978
|
-
}, wrappedReducer, document.header);
|
|
3979
|
-
}
|
|
3980
3845
|
//#endregion
|
|
3981
3846
|
//#region document-model/validation.ts
|
|
3982
3847
|
/**
|
|
@@ -3986,11 +3851,10 @@ function pruneOperation(document, input, wrappedReducer) {
|
|
|
3986
3851
|
const RESERVED_OPERATION_NAMES = [
|
|
3987
3852
|
"UNDO",
|
|
3988
3853
|
"REDO",
|
|
3989
|
-
"PRUNE",
|
|
3990
|
-
"LOAD_STATE",
|
|
3991
3854
|
"SET_NAME",
|
|
3992
3855
|
"SET_PREFERRED_EDITOR",
|
|
3993
|
-
"NOOP"
|
|
3856
|
+
"NOOP",
|
|
3857
|
+
"PURGE_DOCUMENT"
|
|
3994
3858
|
];
|
|
3995
3859
|
/**
|
|
3996
3860
|
* Operation names become the literal action `type` string at runtime and the
|
|
@@ -4226,6 +4090,15 @@ function orderBy(items, order) {
|
|
|
4226
4090
|
return (rank.get(a.item.id) ?? Number.MAX_SAFE_INTEGER) - (rank.get(b.item.id) ?? Number.MAX_SAFE_INTEGER) || a.index - b.index;
|
|
4227
4091
|
}).map(({ item }) => item);
|
|
4228
4092
|
}
|
|
4093
|
+
/**
|
|
4094
|
+
* The untouched base of a mutative draft, or the value itself when it is not a
|
|
4095
|
+
* draft. Build replacement lists from it and freeze them before assigning, as
|
|
4096
|
+
* the drive node reducer does, so finalize skips the walk over the assigned
|
|
4097
|
+
* list. Read before writing: the base does not see this action's mutations.
|
|
4098
|
+
*/
|
|
4099
|
+
function readBase(value) {
|
|
4100
|
+
return isDraft(value) ? original(value) : value;
|
|
4101
|
+
}
|
|
4229
4102
|
const documentModelHeaderReducer = {
|
|
4230
4103
|
setModelNameOperation(state, action) {
|
|
4231
4104
|
state.name = action.input.name;
|
|
@@ -4275,7 +4148,8 @@ const documentModelModuleReducer = {
|
|
|
4275
4148
|
deleteModuleOperation(state, action) {
|
|
4276
4149
|
findModuleOrThrow(state, action.input.id);
|
|
4277
4150
|
const latestSpec = state.specifications[state.specifications.length - 1];
|
|
4278
|
-
|
|
4151
|
+
const modules = readBase(latestSpec).modules.filter((m) => m.id != action.input.id);
|
|
4152
|
+
latestSpec.modules = Object.freeze(modules);
|
|
4279
4153
|
},
|
|
4280
4154
|
reorderModulesOperation(state, action) {
|
|
4281
4155
|
const latestSpec = state.specifications[state.specifications.length - 1];
|
|
@@ -4393,14 +4267,20 @@ const documentModelOperationReducer = {
|
|
|
4393
4267
|
const matches = latestSpec.modules.flatMap((mod) => mod.operations.filter((op) => op.id === action.input.operationId));
|
|
4394
4268
|
if (matches.length === 0) throw new Error(`Operation "${action.input.operationId}" not found in the latest specification`);
|
|
4395
4269
|
if (matches.length > 1) throw new Error(`Operation "${action.input.operationId}" is duplicated in the latest specification`);
|
|
4396
|
-
const moved = matches[0];
|
|
4397
|
-
for (const mod of latestSpec.modules)
|
|
4398
|
-
|
|
4270
|
+
const moved = readBase(matches[0]);
|
|
4271
|
+
for (const mod of latestSpec.modules) {
|
|
4272
|
+
const operations = readBase(mod).operations.filter((op) => op.id !== action.input.operationId);
|
|
4273
|
+
if (mod === targetModule) operations.push(moved);
|
|
4274
|
+
mod.operations = Object.freeze(operations);
|
|
4275
|
+
}
|
|
4399
4276
|
},
|
|
4400
4277
|
deleteOperationOperation(state, action) {
|
|
4401
4278
|
findOperationOrThrow(state, action.input.id);
|
|
4402
4279
|
const latestSpec = state.specifications[state.specifications.length - 1];
|
|
4403
|
-
for (const mod of latestSpec.modules)
|
|
4280
|
+
for (const mod of latestSpec.modules) {
|
|
4281
|
+
const operations = readBase(mod).operations.filter((operation) => operation.id != action.input.id);
|
|
4282
|
+
mod.operations = Object.freeze(operations);
|
|
4283
|
+
}
|
|
4404
4284
|
},
|
|
4405
4285
|
reorderModuleOperationsOperation(state, action) {
|
|
4406
4286
|
const targetModule = findModuleOrThrow(state, action.input.moduleId);
|
|
@@ -4438,7 +4318,8 @@ const documentModelStateSchemaReducer = {
|
|
|
4438
4318
|
if (!Object.keys(latestSpec.state).includes(action.input.scope)) throw new Error(`Invalid scope: ${action.input.scope}`);
|
|
4439
4319
|
const scopeState = latestSpec.state[action.input.scope];
|
|
4440
4320
|
if (!scopeState.examples.some((e) => e.id == action.input.id)) throw new Error(`State example "${action.input.id}" not found in scope "${action.input.scope}"`);
|
|
4441
|
-
|
|
4321
|
+
const examples = readBase(scopeState).examples.filter((e) => e.id != action.input.id);
|
|
4322
|
+
scopeState.examples = Object.freeze(examples);
|
|
4442
4323
|
},
|
|
4443
4324
|
reorderStateExamplesOperation(state, action) {
|
|
4444
4325
|
const latestSpec = state.specifications[state.specifications.length - 1];
|
|
@@ -4670,17 +4551,6 @@ const documentModelStateReducer = (state, action) => {
|
|
|
4670
4551
|
const documentModelReducer = createReducer(documentModelStateReducer);
|
|
4671
4552
|
//#endregion
|
|
4672
4553
|
//#region document-model/upgrades.ts
|
|
4673
|
-
/**
|
|
4674
|
-
* Canonical document-model version normalization: documents stamped with 0
|
|
4675
|
-
* or nothing at all predate versioning and are treated as version 1, the
|
|
4676
|
-
* same version the registry assigns unversioned modules. Every consumer
|
|
4677
|
-
* that resolves a module or compares versions must use this rule; resolving
|
|
4678
|
-
* 0 to "latest" instead re-pins a legacy document's history to whichever
|
|
4679
|
-
* module happens to be newest.
|
|
4680
|
-
*/
|
|
4681
|
-
function normalizeDocumentModelVersion(version) {
|
|
4682
|
-
return version && version > 0 ? version : 1;
|
|
4683
|
-
}
|
|
4684
4554
|
function applyInitialState(document, action) {
|
|
4685
4555
|
const input = action.input;
|
|
4686
4556
|
const newState = input.initialState || input.state;
|
|
@@ -4708,7 +4578,11 @@ function applyUpgradeDocumentAction(document, action, upgradePath) {
|
|
|
4708
4578
|
const toVersion = action.input.toVersion;
|
|
4709
4579
|
if (fromVersion === toVersion && fromVersion > 0) return document;
|
|
4710
4580
|
if (fromVersion > toVersion) throw new DowngradeNotSupportedError(document.header.documentType, fromVersion, toVersion);
|
|
4711
|
-
if (upgradePath)
|
|
4581
|
+
if (upgradePath) {
|
|
4582
|
+
const protocolVersions = document.header.protocolVersions;
|
|
4583
|
+
for (const transition of upgradePath) document = transition.upgradeReducer(document, action);
|
|
4584
|
+
document = withProtocolVersions(document, protocolVersions);
|
|
4585
|
+
}
|
|
4712
4586
|
applyInitialState(document, action);
|
|
4713
4587
|
document.state.document = {
|
|
4714
4588
|
...document.state.document,
|
|
@@ -4716,12 +4590,22 @@ function applyUpgradeDocumentAction(document, action, upgradePath) {
|
|
|
4716
4590
|
};
|
|
4717
4591
|
return document;
|
|
4718
4592
|
}
|
|
4593
|
+
/** CREATE_DOCUMENT fixes `protocolVersions`; this puts them back after a reducer. */
|
|
4594
|
+
function withProtocolVersions(document, protocolVersions) {
|
|
4595
|
+
const header = { ...document.header };
|
|
4596
|
+
if (protocolVersions === void 0) delete header.protocolVersions;
|
|
4597
|
+
else header.protocolVersions = { ...protocolVersions };
|
|
4598
|
+
return {
|
|
4599
|
+
...document,
|
|
4600
|
+
header
|
|
4601
|
+
};
|
|
4602
|
+
}
|
|
4719
4603
|
/**
|
|
4720
|
-
* Applies a DELETE_DOCUMENT action to a document.
|
|
4604
|
+
* Applies a DELETE_DOCUMENT action, or a PURGE_DOCUMENT marker, to a document.
|
|
4721
4605
|
* Marks the document as deleted in the document scope state.
|
|
4722
4606
|
*/
|
|
4723
4607
|
function applyDeleteDocumentAction(document, action) {
|
|
4724
|
-
const deletedAt = action.timestampUtcMs || (/* @__PURE__ */ new Date()).toISOString();
|
|
4608
|
+
const deletedAt = isPurgeMarker(action) ? action.input.purgedAtUtcIso : action.timestampUtcMs || (/* @__PURE__ */ new Date()).toISOString();
|
|
4725
4609
|
document.state = {
|
|
4726
4610
|
...document.state,
|
|
4727
4611
|
document: {
|
|
@@ -4841,7 +4725,7 @@ function replayDocumentVersioned(initialState, operations, config, header, dispa
|
|
|
4841
4725
|
const curr = boundaries[i]?.[s] ?? 0;
|
|
4842
4726
|
if (boundaries[i]) boundaries[i][s] = Math.max(prev, curr);
|
|
4843
4727
|
}
|
|
4844
|
-
const allScopes = new Set([
|
|
4728
|
+
const allScopes = /* @__PURE__ */ new Set([
|
|
4845
4729
|
...Object.keys(operations),
|
|
4846
4730
|
"global",
|
|
4847
4731
|
"local"
|
|
@@ -4886,7 +4770,7 @@ function replayDocumentVersioned(initialState, operations, config, header, dispa
|
|
|
4886
4770
|
const spineActionType = spineOp.action.type;
|
|
4887
4771
|
if (spineActionType === "CREATE_DOCUMENT" || spineActionType === "UPGRADE_DOCUMENT") continue;
|
|
4888
4772
|
if (isDenied(spineOp)) continue;
|
|
4889
|
-
if (spineActionType === "DELETE_DOCUMENT") document = applyDeleteDocumentAction(document, spineOp.action);
|
|
4773
|
+
if (spineActionType === "DELETE_DOCUMENT" || spineActionType === "PURGE_DOCUMENT") document = applyDeleteDocumentAction(document, spineOp.action);
|
|
4890
4774
|
else document = reducer(document, spineOp.action, dispatch, {
|
|
4891
4775
|
ignoreSkipOperations: true,
|
|
4892
4776
|
checkHashes,
|
|
@@ -4928,7 +4812,7 @@ function replayDocumentVersioned(initialState, operations, config, header, dispa
|
|
|
4928
4812
|
}
|
|
4929
4813
|
}
|
|
4930
4814
|
}
|
|
4931
|
-
const allResultScopes = new Set([
|
|
4815
|
+
const allResultScopes = /* @__PURE__ */ new Set([
|
|
4932
4816
|
...Object.keys(document.operations),
|
|
4933
4817
|
...Object.keys(operations),
|
|
4934
4818
|
"global",
|
|
@@ -5012,22 +4896,22 @@ async function createZip(document) {
|
|
|
5012
4896
|
*/
|
|
5013
4897
|
async function createMinimalZip(data) {
|
|
5014
4898
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
5015
|
-
const header = {
|
|
5016
|
-
id: data.documentId,
|
|
5017
|
-
sig: {
|
|
5018
|
-
publicKey: {},
|
|
5019
|
-
nonce: ""
|
|
5020
|
-
},
|
|
5021
|
-
documentType: data.documentType,
|
|
5022
|
-
createdAtUtcIso: now,
|
|
5023
|
-
slug: data.name,
|
|
5024
|
-
name: data.name,
|
|
5025
|
-
branch: data.branch,
|
|
5026
|
-
revision: {},
|
|
5027
|
-
lastModifiedAtUtcIso: now
|
|
5028
|
-
};
|
|
5029
4899
|
return zipAsync({
|
|
5030
|
-
"header.json": jsonEntry(
|
|
4900
|
+
"header.json": jsonEntry({
|
|
4901
|
+
id: data.documentId,
|
|
4902
|
+
sig: {
|
|
4903
|
+
publicKey: {},
|
|
4904
|
+
nonce: ""
|
|
4905
|
+
},
|
|
4906
|
+
documentType: data.documentType,
|
|
4907
|
+
createdAtUtcIso: now,
|
|
4908
|
+
slug: data.name,
|
|
4909
|
+
name: data.name,
|
|
4910
|
+
branch: data.branch,
|
|
4911
|
+
revision: {},
|
|
4912
|
+
lastModifiedAtUtcIso: now,
|
|
4913
|
+
...data.protocolVersions && { protocolVersions: data.protocolVersions }
|
|
4914
|
+
}),
|
|
5031
4915
|
"state.json": jsonEntry(data.state),
|
|
5032
4916
|
"current-state.json": jsonEntry(data.state),
|
|
5033
4917
|
"operations.json": jsonEntry({})
|
|
@@ -5051,7 +4935,10 @@ async function parseZipData(data) {
|
|
|
5051
4935
|
if (!files["header.json"]) throw new Error("Document header not found - file format may be outdated");
|
|
5052
4936
|
const header = JSON.parse(readEntry(files, "header.json"));
|
|
5053
4937
|
if (!files["operations.json"]) throw new Error("Operations history not found");
|
|
5054
|
-
const
|
|
4938
|
+
const operations = JSON.parse(readEntry(files, "operations.json"));
|
|
4939
|
+
const clearedOperations = garbageCollectDocumentOperations(operations);
|
|
4940
|
+
pinProtocolVersionsToCreate(header, operations);
|
|
4941
|
+
backfillBaseReducerVersion(header);
|
|
5055
4942
|
const operationsError = validateOperations(clearedOperations);
|
|
5056
4943
|
if (operationsError.length) {
|
|
5057
4944
|
const errorMessages = operationsError.map((err) => err.message);
|
|
@@ -5063,6 +4950,25 @@ async function parseZipData(data) {
|
|
|
5063
4950
|
clearedOperations
|
|
5064
4951
|
};
|
|
5065
4952
|
}
|
|
4953
|
+
/** header.json is a snapshot; the stored CREATE_DOCUMENT input wins. */
|
|
4954
|
+
function pinProtocolVersionsToCreate(header, operations) {
|
|
4955
|
+
const create = operations.document?.find((operation) => operation.action.type === "CREATE_DOCUMENT");
|
|
4956
|
+
if (!create) return;
|
|
4957
|
+
const input = create.action.input;
|
|
4958
|
+
if (input?.protocolVersions) header.protocolVersions = { ...input.protocolVersions };
|
|
4959
|
+
else if (header.protocolVersions) {
|
|
4960
|
+
const { [SIGNATURE_PROTOCOL]: _dropped, ...rest } = header.protocolVersions;
|
|
4961
|
+
header.protocolVersions = rest;
|
|
4962
|
+
}
|
|
4963
|
+
}
|
|
4964
|
+
/** A zip with no recorded base-reducer version predates it: replay as v1. */
|
|
4965
|
+
function backfillBaseReducerVersion(header) {
|
|
4966
|
+
if (typeof header.protocolVersions?.["base-reducer"] === "number") return;
|
|
4967
|
+
header.protocolVersions = {
|
|
4968
|
+
...header.protocolVersions,
|
|
4969
|
+
"base-reducer": 1
|
|
4970
|
+
};
|
|
4971
|
+
}
|
|
5066
4972
|
async function loadFromZipData(data, reducer, options) {
|
|
5067
4973
|
const { initialState, header, clearedOperations } = await parseZipData(data);
|
|
5068
4974
|
return {
|
|
@@ -5138,6 +5044,6 @@ const getFileBrowser = (file) => {
|
|
|
5138
5044
|
return Promise.resolve().then(() => readFileBrowser(file));
|
|
5139
5045
|
};
|
|
5140
5046
|
//#endregion
|
|
5141
|
-
export { AUTH_ACTION_TYPES, AUTH_DENIED_BY_GRANT_REASON, AUTH_NO_GRANT_REASON, AUTH_VERSION_UNSUPPORTED_REASON, AddChangeLogItemInputSchema, AddModuleInputSchema, AddOperationErrorInputSchema, AddOperationExampleInputSchema, AddOperationInputSchema, AddStateExampleInputSchema, AuthActionNotAllowedError, AuthAdministrationLockoutError, AuthAdministrationMissingError, AuthAlreadyInitializedError, AuthInitializerNotCreatorError, AuthPolicyNotPreservedError, AuthorSchema, BaseDocumentHeaderSchema, BaseDocumentStateSchema, CodeExampleSchema, ConfigEntrySchema, ConfigEntryTypeSchema, DOCUMENT_DELETED_REASON, DeleteChangeLogItemInputSchema, DeleteModuleInputSchema, DeleteOperationErrorInputSchema, DeleteOperationExampleInputSchema, DeleteOperationInputSchema, DeleteStateExampleInputSchema, DocumentActionSchema, DocumentModelGlobalStateSchema, DocumentModelHeaderSchema, DocumentModelInputSchema, DocumentModelPHStateSchema, DocumentModelSchema, DocumentSpecificationSchema, DowngradeNotSupportedError, FileSystemError, GrantNotFoundError, GrantSchema, GroupPrincipalNotAllowedError, HASH_ALGORITHM_SHA1, HASH_ALGORITHM_SHA256, HASH_ALGORITHM_SHA512, HASH_ENCODING_BASE64, HASH_ENCODING_HEX, HashMismatchError, InitializeAuthActionInputSchema, IntegrityIssueSubType, IntegrityIssueType, InvalidActionInputError, InvalidActionInputZodError, InvalidAuthVersionError, InvalidGrantError,
|
|
5047
|
+
export { ACTION_SIGNATURE_V2_PREFIX, AUTH_ACTION_TYPES, AUTH_DENIED_BY_GRANT_REASON, AUTH_NO_GRANT_REASON, AUTH_VERSION_UNSUPPORTED_REASON, AddChangeLogItemInputSchema, AddModuleInputSchema, AddOperationErrorInputSchema, AddOperationExampleInputSchema, AddOperationInputSchema, AddStateExampleInputSchema, AuthActionNotAllowedError, AuthAdministrationLockoutError, AuthAdministrationMissingError, AuthAlreadyInitializedError, AuthInitializerNotCreatorError, AuthPolicyNotPreservedError, AuthorSchema, BaseDocumentHeaderSchema, BaseDocumentStateSchema, CanonicalJsonError, CodeExampleSchema, ConfigEntrySchema, ConfigEntryTypeSchema, DEFAULT_SIGNATURE_POLICY, DOCUMENT_DELETED_REASON, DOCUMENT_PURGE_PROTOCOL, DOCUMENT_SCOPE_ACTION_TYPES, DeleteChangeLogItemInputSchema, DeleteModuleInputSchema, DeleteOperationErrorInputSchema, DeleteOperationExampleInputSchema, DeleteOperationInputSchema, DeleteStateExampleInputSchema, DocumentActionSchema, DocumentModelGlobalStateSchema, DocumentModelHeaderSchema, DocumentModelInputSchema, DocumentModelPHStateSchema, DocumentModelSchema, DocumentSpecificationSchema, DowngradeNotSupportedError, FileSystemError, GrantNotFoundError, GrantSchema, GroupPrincipalNotAllowedError, HASH_ALGORITHM_SHA1, HASH_ALGORITHM_SHA256, HASH_ALGORITHM_SHA512, HASH_ENCODING_BASE64, HASH_ENCODING_HEX, HashMismatchError, InitializeAuthActionInputSchema, IntegrityIssueSubType, IntegrityIssueType, InvalidActionInputError, InvalidActionInputZodError, InvalidAuthVersionError, InvalidGrantError, MARKER_REFUSAL_FEATURE, MAX_AUTH_GRANTS, MAX_CAPABILITY_OPERATIONS, MAX_CONDITION_DEPTH, MAX_CONDITION_NODES, MAX_SUPPORTED_AUTH_VERSION, ManifestSchema, ModuleSchema, MoveGrantActionInputSchema, MoveOperationInputSchema, OPERATION_NAME_PATTERN, OperationErrorSchema, OperationScopeSchema, OperationSpecificationSchema, PEER_CAPABILITIES, PEER_MANIFEST_FORMAT, PURGE_DOCUMENT, PieceModuleSchema, PieceModulesSchema, PowerhouseModuleSchema, PowerhouseModulesSchema, PublisherSchema, PwaConfigSchema, RESERVED_OPERATION_NAMES, RedoActionInputSchema, RedoActionSchema, RedoSchema, RemoveGrantActionInputSchema, ReorderChangeLogItemsInputSchema, ReorderModuleOperationsInputSchema, ReorderModulesInputSchema, ReorderOperationErrorsInputSchema, ReorderOperationExamplesInputSchema, ReorderStateExamplesInputSchema, SIGNATURE_PROTOCOL, SIGNATURE_PROTOCOL_V2, ScopeStateSchema, SetAuthorNameInputSchema, SetAuthorWebsiteInputSchema, SetGrantActionInputSchema, SetInitialStateInputSchema, SetModelDescriptionInputSchema, SetModelExtensionInputSchema, SetModelIdInputSchema, SetModelNameInputSchema, SetModuleDescriptionInputSchema, SetModuleNameInputSchema, SetNameActionInputSchema, SetNameActionSchema, SetOperationDescriptionInputSchema, SetOperationErrorCodeInputSchema, SetOperationErrorDescriptionInputSchema, SetOperationErrorNameInputSchema, SetOperationErrorTemplateInputSchema, SetOperationNameInputSchema, SetOperationReducerInputSchema, SetOperationSchemaInputSchema, SetOperationScopeInputSchema, SetOperationTemplateInputSchema, SetPreferredEditorActionInputSchema, SetPreferredEditorActionSchema, SetStateSchemaInputSchema, Set_NameSchema, Set_PreferredEditorSchema, StateSchema, UndoActionInputSchema, UndoActionSchema, UndoSchema, UnsupportedDocumentModelVersionError, UpdateChangeLogItemInputSchema, UpdateOperationExampleInputSchema, UpdateStateExampleInputSchema, ab2hex, actionContext, actionFromAction, actionPreimageV2, actionSigner, actionSignerIdentity, actionSigningTarget, actions, addChangeLogItem, addModule, addOperation, addOperationError, addOperationExample, addStateExample, addUndo, appendWithoutApplying, applyAuthAction, applyDeleteDocumentAction, applyInitializeAuthAction, applyMoveGrantAction, applyRemoveGrantAction, applySetGrantAction, applyUpgradeDocumentAction, assertAuthAdministrationRetained, assertAuthPreservedOnDuplicate, assertAuthScopeActionAllowed, assertIsDocumentModelDocument, assertIsDocumentModelState, assertModuleIdUnique, assertOperationErrorIdUnique, assertOperationExampleIdUnique, assertOperationIdUnique, assertValidGrant, assertValidGrantUpsert, assertValidInitialGrants, attachBranch, backfillAuthState, base58Decode, base64UrlToBytes, baseActions, baseCreateDocument, baseLoadFromInput, baseLoadFromInputVersioned, baseReducer, baseReducerVersion, baseSaveToFileHandle, buildOperationSignature, buildOperationSignatureMessage, buildOperationSignatureParams, buildSignedAction, bytesToBase64Url, canonicalJson, checkCleanedOperationsIntegrity, checkOperationsIntegrity, computeUpgradeTransitions, coversLocal, createAction, createAuthState, createBaseState, createCopyHeader, createDocumentState, createGlobalState, createLocalState, createMinimalZip, createPresignedHeader, createReducer, createSignedHeader, createSignedHeaderForSigner, createState, createVerificationSigner, createZip, decide, defaultAuthState, defaultBaseState, defaultDocumentState, defaultGlobalState, defaultLocalState, defaultPHState, definedNonNullAnySchema, deleteChangeLogItem, deleteModule, deleteOperation, deleteOperationError, deleteOperationExample, deleteStateExample, deriveDocumentId, deriveOperationId, deserializeSignature, diffOperations, documentModelActions, documentModelDocumentType, documentModelFileExtension, documentModelGlobalState, documentModelHeaderReducer, documentModelInitialGlobalState, documentModelInitialLocalState, documentModelLoadFromInput, documentModelModuleReducer, documentModelOperationErrorReducer, documentModelOperationExampleReducer, documentModelOperationReducer, documentModelReducer, documentModelSaveToFileHandle, documentModelStateReducer, documentModelStateSchemaReducer, documentModelVersioningReducer, evaluate, evaluateCondition, evaluateGrantStack, evaluateGrants, fetchFileBrowser, filterDocumentOperationsResultingState, filterDuplicatedOperations, findModuleOrThrow, findOperationErrorOrThrow, findOperationExampleOrThrow, findOperationOrThrow, garbageCollect, garbageCollectDocumentOperations, garbageCollectV2, generateId, generateMock, getAllOperationNames, getDocumentLastModified, getFileBrowser, getUnixTimestamp, grantProblem, groupDocumentType, groupMembershipActionTypes, groupOperationsByScope, hasDerivedDocumentId, hashActionV2, hashBrowser, hashDocumentStateForScope, hex2ab, holdReason, initializeAuth, isAuthAction, isDefinedNonNullAny, isDenied, isDerivedDocumentId, isDocumentAction, isDocumentCreator, isDocumentModelDocument, isDocumentModelState, isDocumentZip, isNoopOperation, isOlderManifest, isPlainValue, isPurgeMarker, isReservedOperationName, isSignaturePolicy, isUndo, isUndoRedo, isV2ActionHash, isValidOperationNameFormat, legacySupports, localPeerManifest, localSupports, manifestRevision, mapSkippedOperations, mapSkippedOperationsV2, mentionedGroupIds, merge, mergePeerCapabilities, moveGrant, moveOperation, nextSkipNumber, noop, normalizeDocumentModelVersion, operationExampleCreators, operationFromAction, operationFromOperation, operationOutcome, operationWithContext, operationsAreEqual, parseBulkArchive, parseResultingState, peerSupports, precedes, prepareOperations, processUndoRedo, protocolVersionsFor, purgeDocumentAction, purgeMarkerOperation, purgedProtocolVersions, readFileBrowser, readOnly, readPeerManifest, redo, redoOperation, referencedGroupIds, releaseNewVersion, removeExistingOperations, removeGrant, reorderChangeLogItems, reorderModuleOperations, reorderModules, reorderOperationErrors, reorderOperationExamples, reorderStateExamples, replayDocument, replayDocumentVersioned, replayOperations, requestedSignaturePolicy, reshuffleByTimestamp, reshuffleByTimestampAndIndex, resolveSnapshotAuth, selectProtocolVersions, serializeSignature, setAuthorName, setAuthorWebsite, setGrant, setInitialState, setModelDescription, setModelExtension, setModelId, setModelName, setModuleDescription, setModuleName, setName, setNameOperation, setOperationDescription, setOperationErrorCode, setOperationErrorDescription, setOperationErrorName, setOperationErrorTemplate, setOperationName, setOperationReducer, setOperationSchema, setOperationScope, setOperationTemplate, setPreferredEditor, setPreferredEditorOperation, setStateSchema, sign, signActionV2, signaturePolicyOf, skipHeaderOperations, sortMappedOperations, sortOperations, split, targetDocumentId, toTransportAction, undo, undoOperation, undoOperationV2, updateChangeLogItem, updateDocument, updateHeaderRevision, updateOperationExample, updateStateExample, v2RequiredProtocolVersions, v2TupleProblem, validateHeader, validateInitialState, validateModule, validateModuleOperation, validateModules, validateOperationName, validateOperations, validateStateSchemaName, verify, verifyOperationSignature, withProtocolVersions, withSignaturePolicy, writeFileBrowser, zipEntries };
|
|
5142
5048
|
|
|
5143
5049
|
//# sourceMappingURL=index.js.map
|