@superbee/core 0.2.0-pre.4 → 0.2.0-pre.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1209 -0
- package/dist/artifact-contract.d.ts +90 -0
- package/dist/artifact-contract.d.ts.map +1 -0
- package/dist/artifact-contract.js +205 -0
- package/dist/artifact-contract.js.map +1 -0
- package/dist/backend.d.ts +22 -2
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +153 -38
- package/dist/backend.js.map +1 -1
- package/dist/blob-contract.d.ts +82 -0
- package/dist/blob-contract.d.ts.map +1 -0
- package/dist/blob-contract.js +134 -0
- package/dist/blob-contract.js.map +1 -0
- package/dist/blob-journal.d.ts +303 -0
- package/dist/blob-journal.d.ts.map +1 -0
- package/dist/blob-journal.js +541 -0
- package/dist/blob-journal.js.map +1 -0
- package/dist/body-replace-guards.d.ts +52 -0
- package/dist/body-replace-guards.d.ts.map +1 -0
- package/dist/body-replace-guards.js +176 -0
- package/dist/body-replace-guards.js.map +1 -0
- package/dist/builtin-recipes/content.d.ts +93 -0
- package/dist/builtin-recipes/content.d.ts.map +1 -0
- package/dist/builtin-recipes/content.js +288 -0
- package/dist/builtin-recipes/content.js.map +1 -0
- package/dist/builtin-recipes.d.ts +10 -0
- package/dist/builtin-recipes.d.ts.map +1 -0
- package/dist/builtin-recipes.js +97 -0
- package/dist/builtin-recipes.js.map +1 -0
- package/dist/bundle-health/index.d.ts +14 -0
- package/dist/bundle-health/index.d.ts.map +1 -0
- package/dist/bundle-health/index.js +12 -0
- package/dist/bundle-health/index.js.map +1 -0
- package/dist/bundle-health/kind-findings.d.ts +44 -0
- package/dist/bundle-health/kind-findings.d.ts.map +1 -0
- package/dist/bundle-health/kind-findings.js +68 -0
- package/dist/bundle-health/kind-findings.js.map +1 -0
- package/dist/bundle-health/legacy-page.d.ts +39 -0
- package/dist/bundle-health/legacy-page.d.ts.map +1 -0
- package/dist/bundle-health/legacy-page.js +50 -0
- package/dist/bundle-health/legacy-page.js.map +1 -0
- package/dist/bundle-health/report.d.ts +207 -0
- package/dist/bundle-health/report.d.ts.map +1 -0
- package/dist/bundle-health/report.js +454 -0
- package/dist/bundle-health/report.js.map +1 -0
- package/dist/bundle-ops.d.ts +3 -2
- package/dist/bundle-ops.d.ts.map +1 -1
- package/dist/bundle-ops.js +4 -4
- package/dist/bundle-ops.js.map +1 -1
- package/dist/bundle.d.ts +3 -4
- package/dist/bundle.d.ts.map +1 -1
- package/dist/bundle.js +5 -14
- package/dist/bundle.js.map +1 -1
- package/dist/code-point-order.d.ts +8 -0
- package/dist/code-point-order.d.ts.map +1 -0
- package/dist/code-point-order.js +20 -0
- package/dist/code-point-order.js.map +1 -0
- package/dist/code-unit-order.d.ts +15 -0
- package/dist/code-unit-order.d.ts.map +1 -0
- package/dist/code-unit-order.js +17 -0
- package/dist/code-unit-order.js.map +1 -0
- package/dist/connector-request.d.ts +112 -0
- package/dist/connector-request.d.ts.map +1 -0
- package/dist/connector-request.js +495 -0
- package/dist/connector-request.js.map +1 -0
- package/dist/connectors.d.ts +297 -0
- package/dist/connectors.d.ts.map +1 -0
- package/dist/connectors.js +1233 -0
- package/dist/connectors.js.map +1 -0
- package/dist/cross-bundle.d.ts +135 -0
- package/dist/cross-bundle.d.ts.map +1 -0
- package/dist/cross-bundle.js +191 -0
- package/dist/cross-bundle.js.map +1 -0
- package/dist/dependencies.d.ts +94 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js +180 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/document-codec.d.ts +7 -2
- package/dist/document-codec.d.ts.map +1 -1
- package/dist/document-codec.js +8 -5
- package/dist/document-codec.js.map +1 -1
- package/dist/document-field-actions.d.ts +31 -1
- package/dist/document-field-actions.d.ts.map +1 -1
- package/dist/document-field-actions.js +137 -34
- package/dist/document-field-actions.js.map +1 -1
- package/dist/document-mutation.d.ts +35 -13
- package/dist/document-mutation.d.ts.map +1 -1
- package/dist/document-mutation.js +124 -60
- package/dist/document-mutation.js.map +1 -1
- package/dist/document-transfer.d.ts +208 -0
- package/dist/document-transfer.d.ts.map +1 -0
- package/dist/document-transfer.js +928 -0
- package/dist/document-transfer.js.map +1 -0
- package/dist/document-write-policy.d.ts.map +1 -1
- package/dist/document-write-policy.js +4 -2
- package/dist/document-write-policy.js.map +1 -1
- package/dist/domain-model.d.ts +73 -0
- package/dist/domain-model.d.ts.map +1 -0
- package/dist/domain-model.js +169 -0
- package/dist/domain-model.js.map +1 -0
- package/dist/engine.d.ts +21 -9
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +72 -14
- package/dist/engine.js.map +1 -1
- package/dist/file-journaled-backend-internal.d.ts +21 -0
- package/dist/file-journaled-backend-internal.d.ts.map +1 -0
- package/dist/file-journaled-backend-internal.js +12 -0
- package/dist/file-journaled-backend-internal.js.map +1 -0
- package/dist/file-journaled-backend.d.ts +160 -0
- package/dist/file-journaled-backend.d.ts.map +1 -0
- package/dist/file-journaled-backend.js +1345 -0
- package/dist/file-journaled-backend.js.map +1 -0
- package/dist/filesystem-host.d.ts +15 -0
- package/dist/filesystem-host.d.ts.map +1 -0
- package/dist/filesystem-host.js +20 -0
- package/dist/filesystem-host.js.map +1 -0
- package/dist/filesystem-identity.d.ts +97 -21
- package/dist/filesystem-identity.d.ts.map +1 -1
- package/dist/filesystem-identity.js +398 -119
- package/dist/filesystem-identity.js.map +1 -1
- package/dist/filesystem-lock.d.ts +16 -3
- package/dist/filesystem-lock.d.ts.map +1 -1
- package/dist/filesystem-lock.js +323 -77
- package/dist/filesystem-lock.js.map +1 -1
- package/dist/filesystem-push-role.d.ts +77 -0
- package/dist/filesystem-push-role.d.ts.map +1 -0
- package/dist/filesystem-push-role.js +165 -0
- package/dist/filesystem-push-role.js.map +1 -0
- package/dist/filesystem.d.ts +17 -0
- package/dist/filesystem.d.ts.map +1 -0
- package/dist/filesystem.js +18 -0
- package/dist/filesystem.js.map +1 -0
- package/dist/frontmatter.d.ts +8 -6
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +5 -4
- package/dist/frontmatter.js.map +1 -1
- package/dist/governed-body-write.d.ts +8 -1
- package/dist/governed-body-write.d.ts.map +1 -1
- package/dist/governed-body-write.js +9 -2
- package/dist/governed-body-write.js.map +1 -1
- package/dist/heads-digest.d.ts.map +1 -1
- package/dist/heads-digest.js +2 -1
- package/dist/heads-digest.js.map +1 -1
- package/dist/host-policy-snapshot.d.ts +9 -0
- package/dist/host-policy-snapshot.d.ts.map +1 -0
- package/dist/host-policy-snapshot.js +33 -0
- package/dist/host-policy-snapshot.js.map +1 -0
- package/dist/host-text.d.ts +31 -0
- package/dist/host-text.d.ts.map +1 -0
- package/dist/host-text.js +77 -0
- package/dist/host-text.js.map +1 -0
- package/dist/hosted-client/binding.d.ts +7 -0
- package/dist/hosted-client/binding.d.ts.map +1 -0
- package/dist/hosted-client/binding.js +10 -0
- package/dist/hosted-client/binding.js.map +1 -0
- package/dist/hosted-client/blob-delivery.d.ts +68 -0
- package/dist/hosted-client/blob-delivery.d.ts.map +1 -0
- package/dist/hosted-client/blob-delivery.js +170 -0
- package/dist/hosted-client/blob-delivery.js.map +1 -0
- package/dist/hosted-client/blob-write.d.ts +387 -0
- package/dist/hosted-client/blob-write.d.ts.map +1 -0
- package/dist/hosted-client/blob-write.js +770 -0
- package/dist/hosted-client/blob-write.js.map +1 -0
- package/dist/hosted-client/bundle-listing.d.ts +46 -0
- package/dist/hosted-client/bundle-listing.d.ts.map +1 -0
- package/dist/hosted-client/bundle-listing.js +36 -0
- package/dist/hosted-client/bundle-listing.js.map +1 -0
- package/dist/hosted-client/client.d.ts +219 -0
- package/dist/hosted-client/client.d.ts.map +1 -0
- package/dist/hosted-client/client.js +309 -0
- package/dist/hosted-client/client.js.map +1 -0
- package/dist/hosted-client/directory.d.ts +46 -0
- package/dist/hosted-client/directory.d.ts.map +1 -0
- package/dist/hosted-client/directory.js +74 -0
- package/dist/hosted-client/directory.js.map +1 -0
- package/dist/hosted-client/errors.d.ts +26 -0
- package/dist/hosted-client/errors.d.ts.map +1 -0
- package/dist/hosted-client/errors.js +35 -0
- package/dist/hosted-client/errors.js.map +1 -0
- package/dist/hosted-client/inbox.d.ts +320 -0
- package/dist/hosted-client/inbox.d.ts.map +1 -0
- package/dist/hosted-client/inbox.js +379 -0
- package/dist/hosted-client/inbox.js.map +1 -0
- package/dist/hosted-client/index.d.ts +30 -0
- package/dist/hosted-client/index.d.ts.map +1 -0
- package/dist/hosted-client/index.js +32 -0
- package/dist/hosted-client/index.js.map +1 -0
- package/dist/hosted-client/journal.d.ts +103 -0
- package/dist/hosted-client/journal.d.ts.map +1 -0
- package/dist/hosted-client/journal.js +464 -0
- package/dist/hosted-client/journal.js.map +1 -0
- package/dist/hosted-client/node.d.ts +74 -0
- package/dist/hosted-client/node.d.ts.map +1 -0
- package/dist/hosted-client/node.js +219 -0
- package/dist/hosted-client/node.js.map +1 -0
- package/dist/hosted-client/reference.d.ts +12 -0
- package/dist/hosted-client/reference.d.ts.map +1 -0
- package/dist/hosted-client/reference.js +29 -0
- package/dist/hosted-client/reference.js.map +1 -0
- package/dist/hosted-client/write.d.ts +217 -0
- package/dist/hosted-client/write.d.ts.map +1 -0
- package/dist/hosted-client/write.js +418 -0
- package/dist/hosted-client/write.js.map +1 -0
- package/dist/hosted-transport/answer-rows.d.ts +243 -0
- package/dist/hosted-transport/answer-rows.d.ts.map +1 -0
- package/dist/hosted-transport/answer-rows.js +457 -0
- package/dist/hosted-transport/answer-rows.js.map +1 -0
- package/dist/hosted-transport/blob-reads.d.ts +35 -0
- package/dist/hosted-transport/blob-reads.d.ts.map +1 -0
- package/dist/hosted-transport/blob-reads.js +179 -0
- package/dist/hosted-transport/blob-reads.js.map +1 -0
- package/dist/hosted-transport/blob-write.d.ts +34 -0
- package/dist/hosted-transport/blob-write.d.ts.map +1 -0
- package/dist/hosted-transport/blob-write.js +115 -0
- package/dist/hosted-transport/blob-write.js.map +1 -0
- package/dist/hosted-transport/carrier.d.ts +151 -0
- package/dist/hosted-transport/carrier.d.ts.map +1 -0
- package/dist/hosted-transport/carrier.js +260 -0
- package/dist/hosted-transport/carrier.js.map +1 -0
- package/dist/hosted-transport/history-pages.d.ts +55 -0
- package/dist/hosted-transport/history-pages.d.ts.map +1 -0
- package/dist/hosted-transport/history-pages.js +69 -0
- package/dist/hosted-transport/history-pages.js.map +1 -0
- package/dist/hosted-transport/index.d.ts +18 -0
- package/dist/hosted-transport/index.d.ts.map +1 -0
- package/dist/hosted-transport/index.js +18 -0
- package/dist/hosted-transport/index.js.map +1 -0
- package/dist/hosted-transport/operations.d.ts +85 -0
- package/dist/hosted-transport/operations.d.ts.map +1 -0
- package/dist/hosted-transport/operations.js +128 -0
- package/dist/hosted-transport/operations.js.map +1 -0
- package/dist/hosted-transport/paged-reads.d.ts +87 -0
- package/dist/hosted-transport/paged-reads.d.ts.map +1 -0
- package/dist/hosted-transport/paged-reads.js +238 -0
- package/dist/hosted-transport/paged-reads.js.map +1 -0
- package/dist/hosted-transport/read-adapter.d.ts +256 -0
- package/dist/hosted-transport/read-adapter.d.ts.map +1 -0
- package/dist/hosted-transport/read-adapter.js +568 -0
- package/dist/hosted-transport/read-adapter.js.map +1 -0
- package/dist/hosted-transport/root-write.d.ts +114 -0
- package/dist/hosted-transport/root-write.d.ts.map +1 -0
- package/dist/hosted-transport/root-write.js +171 -0
- package/dist/hosted-transport/root-write.js.map +1 -0
- package/dist/hosted-transport/whole-document-transport.d.ts +204 -0
- package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -0
- package/dist/hosted-transport/whole-document-transport.js +447 -0
- package/dist/hosted-transport/whole-document-transport.js.map +1 -0
- package/dist/identity-fold.d.ts +18 -0
- package/dist/identity-fold.d.ts.map +1 -0
- package/dist/identity-fold.js +22 -0
- package/dist/identity-fold.js.map +1 -0
- package/dist/index.d.ts +41 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -9
- package/dist/index.js.map +1 -1
- package/dist/indexeddb-backend.d.ts +25 -33
- package/dist/indexeddb-backend.d.ts.map +1 -1
- package/dist/indexeddb-backend.js +264 -8
- package/dist/indexeddb-backend.js.map +1 -1
- package/dist/inventory-guard.d.ts +58 -0
- package/dist/inventory-guard.d.ts.map +1 -0
- package/dist/inventory-guard.js +169 -0
- package/dist/inventory-guard.js.map +1 -0
- package/dist/journaled-backend.d.ts +149 -9
- package/dist/journaled-backend.d.ts.map +1 -1
- package/dist/journaled-backend.js +64 -58
- package/dist/journaled-backend.js.map +1 -1
- package/dist/kind-authoring.d.ts +170 -0
- package/dist/kind-authoring.d.ts.map +1 -0
- package/dist/kind-authoring.js +452 -0
- package/dist/kind-authoring.js.map +1 -0
- package/dist/kind-changes.d.ts +45 -0
- package/dist/kind-changes.d.ts.map +1 -0
- package/dist/kind-changes.js +96 -0
- package/dist/kind-changes.js.map +1 -0
- package/dist/kind-conformance-error.d.ts +15 -0
- package/dist/kind-conformance-error.d.ts.map +1 -0
- package/dist/kind-conformance-error.js +20 -0
- package/dist/kind-conformance-error.js.map +1 -0
- package/dist/kind-coverage.d.ts +99 -0
- package/dist/kind-coverage.d.ts.map +1 -0
- package/dist/kind-coverage.js +186 -0
- package/dist/kind-coverage.js.map +1 -0
- package/dist/kind-deprecation.d.ts +32 -0
- package/dist/kind-deprecation.d.ts.map +1 -0
- package/dist/kind-deprecation.js +141 -0
- package/dist/kind-deprecation.js.map +1 -0
- package/dist/kind-field-mutation.d.ts +4 -0
- package/dist/kind-field-mutation.d.ts.map +1 -1
- package/dist/kind-field-mutation.js +28 -3
- package/dist/kind-field-mutation.js.map +1 -1
- package/dist/kinds-load.js +4 -4
- package/dist/kinds-load.js.map +1 -1
- package/dist/kinds.d.ts +111 -2
- package/dist/kinds.d.ts.map +1 -1
- package/dist/kinds.js +386 -20
- package/dist/kinds.js.map +1 -1
- package/dist/link-emit.d.ts +29 -0
- package/dist/link-emit.d.ts.map +1 -0
- package/dist/link-emit.js +39 -0
- package/dist/link-emit.js.map +1 -0
- package/dist/link-types.d.ts +27 -0
- package/dist/link-types.d.ts.map +1 -0
- package/dist/link-types.js +60 -0
- package/dist/link-types.js.map +1 -0
- package/dist/links.d.ts +52 -3
- package/dist/links.d.ts.map +1 -1
- package/dist/links.js +259 -18
- package/dist/links.js.map +1 -1
- package/dist/managed-document-metadata.d.ts +2 -0
- package/dist/managed-document-metadata.d.ts.map +1 -0
- package/dist/managed-document-metadata.js +9 -0
- package/dist/managed-document-metadata.js.map +1 -0
- package/dist/memory-backend.d.ts +3 -0
- package/dist/memory-backend.d.ts.map +1 -1
- package/dist/memory-backend.js +44 -2
- package/dist/memory-backend.js.map +1 -1
- package/dist/okf-actor.d.ts +1 -0
- package/dist/okf-actor.d.ts.map +1 -1
- package/dist/okf-actor.js +1 -0
- package/dist/okf-actor.js.map +1 -1
- package/dist/okf-authoring.d.ts +4 -0
- package/dist/okf-authoring.d.ts.map +1 -0
- package/dist/okf-authoring.js +12 -0
- package/dist/okf-authoring.js.map +1 -0
- package/dist/okf-standard-fields.d.ts +3 -0
- package/dist/okf-standard-fields.d.ts.map +1 -1
- package/dist/okf-standard-fields.js +3 -0
- package/dist/okf-standard-fields.js.map +1 -1
- package/dist/path-fold.d.ts +39 -0
- package/dist/path-fold.d.ts.map +1 -0
- package/dist/path-fold.js +41 -0
- package/dist/path-fold.js.map +1 -0
- package/dist/paths.d.ts +18 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +32 -0
- package/dist/paths.js.map +1 -1
- package/dist/platform.d.ts +13 -2
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +16 -0
- package/dist/platform.js.map +1 -1
- package/dist/portable-export.d.ts +119 -0
- package/dist/portable-export.d.ts.map +1 -0
- package/dist/portable-export.js +501 -0
- package/dist/portable-export.js.map +1 -0
- package/dist/publication-filesystem.d.ts +1 -1
- package/dist/publication-filesystem.d.ts.map +1 -1
- package/dist/publication-filesystem.js +1 -1
- package/dist/publication-filesystem.js.map +1 -1
- package/dist/qualified-links.d.ts +67 -0
- package/dist/qualified-links.d.ts.map +1 -0
- package/dist/qualified-links.js +117 -0
- package/dist/qualified-links.js.map +1 -0
- package/dist/query-filter.d.ts +16 -2
- package/dist/query-filter.d.ts.map +1 -1
- package/dist/query-filter.js +40 -1
- package/dist/query-filter.js.map +1 -1
- package/dist/query-order.d.ts +22 -0
- package/dist/query-order.d.ts.map +1 -0
- package/dist/query-order.js +43 -0
- package/dist/query-order.js.map +1 -0
- package/dist/recipe-lifecycle/errors.d.ts +96 -0
- package/dist/recipe-lifecycle/errors.d.ts.map +1 -0
- package/dist/recipe-lifecycle/errors.js +122 -0
- package/dist/recipe-lifecycle/errors.js.map +1 -0
- package/dist/recipe-lifecycle/evolution.d.ts +124 -0
- package/dist/recipe-lifecycle/evolution.d.ts.map +1 -0
- package/dist/recipe-lifecycle/evolution.js +993 -0
- package/dist/recipe-lifecycle/evolution.js.map +1 -0
- package/dist/recipe-lifecycle/index.d.ts +34 -0
- package/dist/recipe-lifecycle/index.d.ts.map +1 -0
- package/dist/recipe-lifecycle/index.js +28 -0
- package/dist/recipe-lifecycle/index.js.map +1 -0
- package/dist/recipe-lifecycle/install.d.ts +155 -0
- package/dist/recipe-lifecycle/install.d.ts.map +1 -0
- package/dist/recipe-lifecycle/install.js +604 -0
- package/dist/recipe-lifecycle/install.js.map +1 -0
- package/dist/recipe-lifecycle/legacy-aliases.d.ts +16 -0
- package/dist/recipe-lifecycle/legacy-aliases.d.ts.map +1 -0
- package/dist/recipe-lifecycle/legacy-aliases.js +51 -0
- package/dist/recipe-lifecycle/legacy-aliases.js.map +1 -0
- package/dist/recipe-lifecycle/retirement-apply.d.ts +59 -0
- package/dist/recipe-lifecycle/retirement-apply.d.ts.map +1 -0
- package/dist/recipe-lifecycle/retirement-apply.js +165 -0
- package/dist/recipe-lifecycle/retirement-apply.js.map +1 -0
- package/dist/recipe-lifecycle/retirement.d.ts +89 -0
- package/dist/recipe-lifecycle/retirement.d.ts.map +1 -0
- package/dist/recipe-lifecycle/retirement.js +347 -0
- package/dist/recipe-lifecycle/retirement.js.map +1 -0
- package/dist/recipe-lifecycle/stamp.d.ts +151 -0
- package/dist/recipe-lifecycle/stamp.d.ts.map +1 -0
- package/dist/recipe-lifecycle/stamp.js +364 -0
- package/dist/recipe-lifecycle/stamp.js.map +1 -0
- package/dist/recipe-set-preflight.d.ts +139 -0
- package/dist/recipe-set-preflight.d.ts.map +1 -0
- package/dist/recipe-set-preflight.js +536 -0
- package/dist/recipe-set-preflight.js.map +1 -0
- package/dist/recipes.d.ts +29 -1
- package/dist/recipes.d.ts.map +1 -1
- package/dist/recipes.js +137 -1
- package/dist/recipes.js.map +1 -1
- package/dist/record-overlay/apply.d.ts +43 -0
- package/dist/record-overlay/apply.d.ts.map +1 -0
- package/dist/record-overlay/apply.js +527 -0
- package/dist/record-overlay/apply.js.map +1 -0
- package/dist/record-overlay/canonical.d.ts +22 -0
- package/dist/record-overlay/canonical.d.ts.map +1 -0
- package/dist/record-overlay/canonical.js +47 -0
- package/dist/record-overlay/canonical.js.map +1 -0
- package/dist/record-overlay/digest.d.ts +4 -0
- package/dist/record-overlay/digest.d.ts.map +1 -0
- package/dist/record-overlay/digest.js +11 -0
- package/dist/record-overlay/digest.js.map +1 -0
- package/dist/record-overlay/errors.d.ts +44 -0
- package/dist/record-overlay/errors.d.ts.map +1 -0
- package/dist/record-overlay/errors.js +55 -0
- package/dist/record-overlay/errors.js.map +1 -0
- package/dist/record-overlay/findings.d.ts +5 -0
- package/dist/record-overlay/findings.d.ts.map +1 -0
- package/dist/record-overlay/findings.js +83 -0
- package/dist/record-overlay/findings.js.map +1 -0
- package/dist/record-overlay/index.d.ts +23 -0
- package/dist/record-overlay/index.d.ts.map +1 -0
- package/dist/record-overlay/index.js +21 -0
- package/dist/record-overlay/index.js.map +1 -0
- package/dist/record-overlay/plan.d.ts +12 -0
- package/dist/record-overlay/plan.d.ts.map +1 -0
- package/dist/record-overlay/plan.js +285 -0
- package/dist/record-overlay/plan.js.map +1 -0
- package/dist/record-overlay/policy.d.ts +74 -0
- package/dist/record-overlay/policy.d.ts.map +1 -0
- package/dist/record-overlay/policy.js +235 -0
- package/dist/record-overlay/policy.js.map +1 -0
- package/dist/record-overlay/redact.d.ts +3 -0
- package/dist/record-overlay/redact.d.ts.map +1 -0
- package/dist/record-overlay/redact.js +27 -0
- package/dist/record-overlay/redact.js.map +1 -0
- package/dist/record-overlay/signal-kind.d.ts +30 -0
- package/dist/record-overlay/signal-kind.d.ts.map +1 -0
- package/dist/record-overlay/signal-kind.js +38 -0
- package/dist/record-overlay/signal-kind.js.map +1 -0
- package/dist/record-overlay/signal-text.d.ts +45 -0
- package/dist/record-overlay/signal-text.d.ts.map +1 -0
- package/dist/record-overlay/signal-text.js +116 -0
- package/dist/record-overlay/signal-text.js.map +1 -0
- package/dist/record-overlay/source-index.d.ts +19 -0
- package/dist/record-overlay/source-index.d.ts.map +1 -0
- package/dist/record-overlay/source-index.js +102 -0
- package/dist/record-overlay/source-index.js.map +1 -0
- package/dist/record-overlay/types.d.ts +291 -0
- package/dist/record-overlay/types.d.ts.map +1 -0
- package/dist/record-overlay/types.js +2 -0
- package/dist/record-overlay/types.js.map +1 -0
- package/dist/remote-backend.d.ts +58 -13
- package/dist/remote-backend.d.ts.map +1 -1
- package/dist/remote-backend.js +156 -36
- package/dist/remote-backend.js.map +1 -1
- package/dist/remote-document-codec.d.ts +2 -1
- package/dist/remote-document-codec.d.ts.map +1 -1
- package/dist/remote-document-codec.js +3 -2
- package/dist/remote-document-codec.js.map +1 -1
- package/dist/remote-error.d.ts +17 -1
- package/dist/remote-error.d.ts.map +1 -1
- package/dist/remote-error.js +32 -2
- package/dist/remote-error.js.map +1 -1
- package/dist/remote-operations.d.ts +0 -40
- package/dist/remote-operations.d.ts.map +1 -1
- package/dist/remote-operations.js +26 -6
- package/dist/remote-operations.js.map +1 -1
- package/dist/remote-parsers.d.ts +1 -1
- package/dist/remote-parsers.js +1 -1
- package/dist/search/backend-source.d.ts +6 -0
- package/dist/search/backend-source.d.ts.map +1 -0
- package/dist/search/backend-source.js +33 -0
- package/dist/search/backend-source.js.map +1 -0
- package/dist/search/contract.d.ts +151 -0
- package/dist/search/contract.d.ts.map +1 -0
- package/dist/search/contract.js +78 -0
- package/dist/search/contract.js.map +1 -0
- package/dist/search/errors.d.ts +30 -0
- package/dist/search/errors.d.ts.map +1 -0
- package/dist/search/errors.js +50 -0
- package/dist/search/errors.js.map +1 -0
- package/dist/search/identity.d.ts +12 -0
- package/dist/search/identity.d.ts.map +1 -0
- package/dist/search/identity.js +90 -0
- package/dist/search/identity.js.map +1 -0
- package/dist/search/index.d.ts +16 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +15 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/memory-source.d.ts +36 -0
- package/dist/search/memory-source.d.ts.map +1 -0
- package/dist/search/memory-source.js +235 -0
- package/dist/search/memory-source.js.map +1 -0
- package/dist/search/rank.d.ts +34 -0
- package/dist/search/rank.d.ts.map +1 -0
- package/dist/search/rank.js +129 -0
- package/dist/search/rank.js.map +1 -0
- package/dist/search/row-text.d.ts +38 -0
- package/dist/search/row-text.d.ts.map +1 -0
- package/dist/search/row-text.js +88 -0
- package/dist/search/row-text.js.map +1 -0
- package/dist/search/search.d.ts +28 -0
- package/dist/search/search.d.ts.map +1 -0
- package/dist/search/search.js +257 -0
- package/dist/search/search.js.map +1 -0
- package/dist/search/source.d.ts +67 -0
- package/dist/search/source.d.ts.map +1 -0
- package/dist/search/source.js +2 -0
- package/dist/search/source.js.map +1 -0
- package/dist/search/text.d.ts +47 -0
- package/dist/search/text.d.ts.map +1 -0
- package/dist/search/text.js +150 -0
- package/dist/search/text.js.map +1 -0
- package/dist/site-capabilities.d.ts +345 -0
- package/dist/site-capabilities.d.ts.map +1 -0
- package/dist/site-capabilities.js +724 -0
- package/dist/site-capabilities.js.map +1 -0
- package/dist/source-engine/driver.d.ts +40 -0
- package/dist/source-engine/driver.d.ts.map +1 -0
- package/dist/source-engine/driver.js +392 -0
- package/dist/source-engine/driver.js.map +1 -0
- package/dist/source-engine/evidence.d.ts +39 -0
- package/dist/source-engine/evidence.d.ts.map +1 -0
- package/dist/source-engine/evidence.js +54 -0
- package/dist/source-engine/evidence.js.map +1 -0
- package/dist/source-engine/guard.d.ts +87 -0
- package/dist/source-engine/guard.d.ts.map +1 -0
- package/dist/source-engine/guard.js +427 -0
- package/dist/source-engine/guard.js.map +1 -0
- package/dist/source-engine/index.d.ts +33 -0
- package/dist/source-engine/index.d.ts.map +1 -0
- package/dist/source-engine/index.js +26 -0
- package/dist/source-engine/index.js.map +1 -0
- package/dist/source-engine/machine-state.d.ts +74 -0
- package/dist/source-engine/machine-state.d.ts.map +1 -0
- package/dist/source-engine/machine-state.js +48 -0
- package/dist/source-engine/machine-state.js.map +1 -0
- package/dist/source-engine/observe.d.ts +10 -0
- package/dist/source-engine/observe.d.ts.map +1 -0
- package/dist/source-engine/observe.js +270 -0
- package/dist/source-engine/observe.js.map +1 -0
- package/dist/source-engine/overlay.d.ts +50 -0
- package/dist/source-engine/overlay.d.ts.map +1 -0
- package/dist/source-engine/overlay.js +114 -0
- package/dist/source-engine/overlay.js.map +1 -0
- package/dist/source-engine/robots.d.ts +53 -0
- package/dist/source-engine/robots.d.ts.map +1 -0
- package/dist/source-engine/robots.js +158 -0
- package/dist/source-engine/robots.js.map +1 -0
- package/dist/source-engine/snapshot.d.ts +104 -0
- package/dist/source-engine/snapshot.d.ts.map +1 -0
- package/dist/source-engine/snapshot.js +240 -0
- package/dist/source-engine/snapshot.js.map +1 -0
- package/dist/source-engine/types.d.ts +292 -0
- package/dist/source-engine/types.d.ts.map +1 -0
- package/dist/source-engine/types.js +2 -0
- package/dist/source-engine/types.js.map +1 -0
- package/dist/source-harness/conformance.d.ts +16 -0
- package/dist/source-harness/conformance.d.ts.map +1 -0
- package/dist/source-harness/conformance.js +266 -0
- package/dist/source-harness/conformance.js.map +1 -0
- package/dist/source-harness/fixture.d.ts +97 -0
- package/dist/source-harness/fixture.d.ts.map +1 -0
- package/dist/source-harness/fixture.js +276 -0
- package/dist/source-harness/fixture.js.map +1 -0
- package/dist/source-harness/index.d.ts +22 -0
- package/dist/source-harness/index.d.ts.map +1 -0
- package/dist/source-harness/index.js +19 -0
- package/dist/source-harness/index.js.map +1 -0
- package/dist/source-harness/peer.d.ts +74 -0
- package/dist/source-harness/peer.d.ts.map +1 -0
- package/dist/source-harness/peer.js +106 -0
- package/dist/source-harness/peer.js.map +1 -0
- package/dist/source-profiles/index.d.ts +31 -0
- package/dist/source-profiles/index.d.ts.map +1 -0
- package/dist/source-profiles/index.js +206 -0
- package/dist/source-profiles/index.js.map +1 -0
- package/dist/source-profiles/link-header.d.ts +6 -0
- package/dist/source-profiles/link-header.d.ts.map +1 -0
- package/dist/source-profiles/link-header.js +131 -0
- package/dist/source-profiles/link-header.js.map +1 -0
- package/dist/storage.d.ts +9 -2
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +6 -1
- package/dist/storage.js.map +1 -1
- package/dist/string-identity-agreement.d.ts +35 -0
- package/dist/string-identity-agreement.d.ts.map +1 -0
- package/dist/string-identity-agreement.js +72 -0
- package/dist/string-identity-agreement.js.map +1 -0
- package/dist/types.d.ts +41 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +1 -1
- package/dist/uncertain-write.d.ts +157 -17
- package/dist/uncertain-write.d.ts.map +1 -1
- package/dist/uncertain-write.js +86 -30
- package/dist/uncertain-write.js.map +1 -1
- package/dist/versioning.d.ts +9 -4
- package/dist/versioning.d.ts.map +1 -1
- package/dist/versioning.js +9 -4
- package/dist/versioning.js.map +1 -1
- package/dist/view-launch-contract.d.ts +14 -0
- package/dist/view-launch-contract.d.ts.map +1 -0
- package/dist/view-launch-contract.js +23 -0
- package/dist/view-launch-contract.js.map +1 -0
- package/dist/write-identity.d.ts +5 -0
- package/dist/write-identity.d.ts.map +1 -0
- package/dist/write-identity.js +9 -0
- package/dist/write-identity.js.map +1 -0
- package/package.json +140 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../src/source-engine/overlay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The robots.txt and address rules of the source engine, storage-neutral and transport-free: a
|
|
3
|
+
* declared fetch identity, RFC 9309 parsing, matching and decision, the bot-challenge test, and
|
|
4
|
+
* the lexical address refusal applied to every hop. The robots read loop that uses them lives in
|
|
5
|
+
* the guarded transport, so every robots.txt request passes the same host guard as a page.
|
|
6
|
+
*/
|
|
7
|
+
export interface FetchIdentity {
|
|
8
|
+
/** The exact User-Agent sent on every request, robots.txt included. */
|
|
9
|
+
userAgent: string;
|
|
10
|
+
/** The robots.txt product token (RFC 9309 2.2.1: letters, `_` and `-`). */
|
|
11
|
+
productToken: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The identity for a declared User-Agent, or undefined when it does not name a product, a version
|
|
15
|
+
* and an https contact page.
|
|
16
|
+
*/
|
|
17
|
+
export declare function fetchIdentity(userAgent: string): FetchIdentity | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* RFC 9309 2.2.2: percent-encoded unreserved characters decoded, other non-ASCII percent-encoded,
|
|
20
|
+
* escapes in upper case, so a rule and a path compare in one canonical form.
|
|
21
|
+
*/
|
|
22
|
+
export declare function canonicalRobotsPath(path: string): string;
|
|
23
|
+
export interface RobotsGroup {
|
|
24
|
+
agents: string[];
|
|
25
|
+
rules: Array<{
|
|
26
|
+
allow: boolean;
|
|
27
|
+
path: string;
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
/** Robots groups: product tokens (lowercase) and their canonical Allow and Disallow rules. */
|
|
31
|
+
export declare function parseRobots(text: string): RobotsGroup[];
|
|
32
|
+
/**
|
|
33
|
+
* Whether a robots rule matches a canonical path from its start: `*` is any run, a trailing `$`
|
|
34
|
+
* anchors the end. Linear, with no backtracking regex: both sides are untrusted.
|
|
35
|
+
*/
|
|
36
|
+
export declare function robotsRuleMatches(rule: string, path: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* RFC 9309 matching: the groups naming the product token exactly, else `*`; the longest matching
|
|
39
|
+
* rule wins, Allow on a tie. The path includes the query.
|
|
40
|
+
*/
|
|
41
|
+
export declare function robotsDecision(robotsText: string, pathAndQuery: string, productToken: string): {
|
|
42
|
+
allow: boolean;
|
|
43
|
+
rule?: string;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Why `url` may not be fetched at all, or undefined: a scheme other than http(s), userinfo, a
|
|
47
|
+
* non-default port, an IP literal or a local name. Lexical only; a transport that resolves names
|
|
48
|
+
* also refuses private addresses after resolution.
|
|
49
|
+
*/
|
|
50
|
+
export declare function refusedAddress(url: URL): string | undefined;
|
|
51
|
+
/** A bot-mitigation interstitial rather than the content: stop, never retry around it. */
|
|
52
|
+
export declare function challenged(status: number, headers: Readonly<Record<string, string>>, text: string): boolean;
|
|
53
|
+
//# sourceMappingURL=robots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../src/source-engine/robots.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAS1E;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAexD;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CA+BvD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAcrE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAahI;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAS3D;AAED,0FAA0F;AAC1F,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3G"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The robots.txt and address rules of the source engine, storage-neutral and transport-free: a
|
|
3
|
+
* declared fetch identity, RFC 9309 parsing, matching and decision, the bot-challenge test, and
|
|
4
|
+
* the lexical address refusal applied to every hop. The robots read loop that uses them lives in
|
|
5
|
+
* the guarded transport, so every robots.txt request passes the same host guard as a page.
|
|
6
|
+
*/
|
|
7
|
+
/** A declared fetch identity: `Product/version (+https://contact; optional@email)`. */
|
|
8
|
+
const IDENTITY = /^([A-Za-z][A-Za-z_-]{0,63})\/([0-9A-Za-z][0-9A-Za-z.-]{0,31}) \(\+(https:\/\/[^\s;()]+)(; [^\s;()@]+@[^\s;()]+)?\)$/;
|
|
9
|
+
/**
|
|
10
|
+
* The identity for a declared User-Agent, or undefined when it does not name a product, a version
|
|
11
|
+
* and an https contact page.
|
|
12
|
+
*/
|
|
13
|
+
export function fetchIdentity(userAgent) {
|
|
14
|
+
const match = IDENTITY.exec(userAgent);
|
|
15
|
+
if (!match)
|
|
16
|
+
return undefined;
|
|
17
|
+
try {
|
|
18
|
+
new URL(match[3]);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
return { userAgent, productToken: match[1] };
|
|
24
|
+
}
|
|
25
|
+
const UNRESERVED = /[A-Za-z0-9\-._~]/;
|
|
26
|
+
/**
|
|
27
|
+
* RFC 9309 2.2.2: percent-encoded unreserved characters decoded, other non-ASCII percent-encoded,
|
|
28
|
+
* escapes in upper case, so a rule and a path compare in one canonical form.
|
|
29
|
+
*/
|
|
30
|
+
export function canonicalRobotsPath(path) {
|
|
31
|
+
const chars = Array.from(path);
|
|
32
|
+
let out = "";
|
|
33
|
+
for (let i = 0; i < chars.length; i++) {
|
|
34
|
+
const char = chars[i];
|
|
35
|
+
const escape = chars.slice(i + 1, i + 3).join("");
|
|
36
|
+
if (char === "%" && /^[0-9A-Fa-f]{2}$/.test(escape)) {
|
|
37
|
+
const decoded = String.fromCharCode(parseInt(escape, 16));
|
|
38
|
+
out += UNRESERVED.test(decoded) ? decoded : "%" + escape.toUpperCase();
|
|
39
|
+
i += 2;
|
|
40
|
+
}
|
|
41
|
+
else if (char.codePointAt(0) > 0x7e || char.codePointAt(0) < 0x21) {
|
|
42
|
+
for (const byte of new TextEncoder().encode(char))
|
|
43
|
+
out += "%" + byte.toString(16).toUpperCase().padStart(2, "0");
|
|
44
|
+
}
|
|
45
|
+
else
|
|
46
|
+
out += char;
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
/** Robots groups: product tokens (lowercase) and their canonical Allow and Disallow rules. */
|
|
51
|
+
export function parseRobots(text) {
|
|
52
|
+
const groups = [];
|
|
53
|
+
let current;
|
|
54
|
+
let lastWasAgent = false;
|
|
55
|
+
// RFC 9309 2.2: a line ends in CR LF, LF or a CR alone.
|
|
56
|
+
for (const raw of text.split(/\r\n|\r|\n/)) {
|
|
57
|
+
// Split on the first colon by index: a regular expression here backtracks on long runs of
|
|
58
|
+
// whitespace, and the body is provider text.
|
|
59
|
+
const line = raw.replace(/#.*/, "").trim();
|
|
60
|
+
const colon = line.indexOf(":");
|
|
61
|
+
if (colon <= 0)
|
|
62
|
+
continue;
|
|
63
|
+
// The key is tested before lowercasing, where U+212A would become `k`; a value holding U+2028
|
|
64
|
+
// or U+2029 is skipped, as the line pattern this replaced never matched one.
|
|
65
|
+
const rawKey = line.slice(0, colon).trim();
|
|
66
|
+
if (!/^[A-Za-z-]+$/.test(rawKey))
|
|
67
|
+
continue;
|
|
68
|
+
const key = rawKey.toLowerCase();
|
|
69
|
+
const value = line.slice(colon + 1).trim();
|
|
70
|
+
if (/[\u2028\u2029]/.test(value))
|
|
71
|
+
continue;
|
|
72
|
+
if (key === "user-agent") {
|
|
73
|
+
if (!lastWasAgent)
|
|
74
|
+
groups.push((current = { agents: [], rules: [] }));
|
|
75
|
+
// The product token ends at the first character outside letters, `_` and `-`.
|
|
76
|
+
current.agents.push(value === "*" ? "*" : (/^[A-Za-z_-]*/.exec(value)[0] ?? "").toLowerCase());
|
|
77
|
+
lastWasAgent = true;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
lastWasAgent = false;
|
|
81
|
+
if (current && (key === "allow" || key === "disallow") && value !== "") {
|
|
82
|
+
current.rules.push({ allow: key === "allow", path: canonicalRobotsPath(value) });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return groups;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Whether a robots rule matches a canonical path from its start: `*` is any run, a trailing `$`
|
|
90
|
+
* anchors the end. Linear, with no backtracking regex: both sides are untrusted.
|
|
91
|
+
*/
|
|
92
|
+
export function robotsRuleMatches(rule, path) {
|
|
93
|
+
const anchored = rule.endsWith("$");
|
|
94
|
+
const parts = (anchored ? rule.slice(0, -1) : rule).split("*");
|
|
95
|
+
if (!path.startsWith(parts[0]))
|
|
96
|
+
return false;
|
|
97
|
+
let at = parts[0].length;
|
|
98
|
+
if (parts.length === 1)
|
|
99
|
+
return !anchored || at === path.length;
|
|
100
|
+
for (let i = 1; i < parts.length - 1; i++) {
|
|
101
|
+
const found = path.indexOf(parts[i], at);
|
|
102
|
+
if (found === -1)
|
|
103
|
+
return false;
|
|
104
|
+
at = found + parts[i].length;
|
|
105
|
+
}
|
|
106
|
+
const last = parts.at(-1);
|
|
107
|
+
if (anchored)
|
|
108
|
+
return path.length - last.length >= at && path.endsWith(last);
|
|
109
|
+
return path.indexOf(last, at) !== -1;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* RFC 9309 matching: the groups naming the product token exactly, else `*`; the longest matching
|
|
113
|
+
* rule wins, Allow on a tie. The path includes the query.
|
|
114
|
+
*/
|
|
115
|
+
export function robotsDecision(robotsText, pathAndQuery, productToken) {
|
|
116
|
+
const groups = parseRobots(robotsText);
|
|
117
|
+
const token = productToken.toLowerCase();
|
|
118
|
+
const path = canonicalRobotsPath(pathAndQuery);
|
|
119
|
+
const mine = groups.filter((group) => group.agents.includes(token));
|
|
120
|
+
const rules = (mine.length ? mine : groups.filter((group) => group.agents.includes("*"))).flatMap((group) => group.rules);
|
|
121
|
+
let best;
|
|
122
|
+
for (const rule of rules) {
|
|
123
|
+
if (robotsRuleMatches(rule.path, path) && (!best || rule.path.length > best.path.length || (rule.path.length === best.path.length && rule.allow))) {
|
|
124
|
+
best = rule;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return best ? { allow: best.allow, rule: `${best.allow ? "Allow" : "Disallow"}: ${best.path}` } : { allow: true };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Why `url` may not be fetched at all, or undefined: a scheme other than http(s), userinfo, a
|
|
131
|
+
* non-default port, an IP literal or a local name. Lexical only; a transport that resolves names
|
|
132
|
+
* also refuses private addresses after resolution.
|
|
133
|
+
*/
|
|
134
|
+
export function refusedAddress(url) {
|
|
135
|
+
if (url.protocol !== "https:" && url.protocol !== "http:")
|
|
136
|
+
return "scheme";
|
|
137
|
+
if (url.username || url.password)
|
|
138
|
+
return "credentials";
|
|
139
|
+
if (url.port !== "")
|
|
140
|
+
return "port";
|
|
141
|
+
const host = url.hostname.toLowerCase().replace(/\.$/, "");
|
|
142
|
+
if (host.startsWith("[") || /^[0-9.]+$/.test(host) || /^0x/i.test(host))
|
|
143
|
+
return "ip_literal";
|
|
144
|
+
if (!host.includes("."))
|
|
145
|
+
return "local_name";
|
|
146
|
+
if (/(^|\.)(localhost|local|internal|intranet|home|lan|arpa|test|invalid|example)$/.test(host))
|
|
147
|
+
return "local_name";
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
/** A bot-mitigation interstitial rather than the content: stop, never retry around it. */
|
|
151
|
+
export function challenged(status, headers, text) {
|
|
152
|
+
if (headers["cf-mitigated"]?.toLowerCase() === "challenge")
|
|
153
|
+
return true;
|
|
154
|
+
if (![403, 429, 503].includes(status))
|
|
155
|
+
return false;
|
|
156
|
+
return /just a moment\.\.\.|challenge-platform|cf-chl-|captcha|are you a robot|verify you are human/i.test(text);
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=robots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/source-engine/robots.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/** Finite, data-only acquisition over the existing observation and overlay owners. */
|
|
2
|
+
import { type BoundFeed } from "../connectors.js";
|
|
3
|
+
import type { KindRegistry } from "../kinds.js";
|
|
4
|
+
import type { SourceIndex } from "../record-overlay/source-index.js";
|
|
5
|
+
import type { ConceptId, Frontmatter } from "../types.js";
|
|
6
|
+
import { type SnapshotEvidence } from "./evidence.js";
|
|
7
|
+
import { type MachineState, type SourceState } from "./machine-state.js";
|
|
8
|
+
import { type SourceOverlaySnapshot } from "./overlay.js";
|
|
9
|
+
import type { CommitResult, PageCommit, ProfileDiagnostic, SourceRunReceipt } from "./types.js";
|
|
10
|
+
export declare const SNAPSHOT_MAX_BYTES: number;
|
|
11
|
+
export declare const SNAPSHOT_MAX_RECORDS = 10000;
|
|
12
|
+
export declare const SNAPSHOT_PROFILE: Readonly<{
|
|
13
|
+
id: "local-snapshot";
|
|
14
|
+
version: 1;
|
|
15
|
+
}>;
|
|
16
|
+
export declare const SNAPSHOT_REFUSAL_CODES: readonly ["SNAPSHOT_DECLARATION_INVALID", "SNAPSHOT_INPUT_INVALID", "SNAPSHOT_TOO_LARGE", "SNAPSHOT_RESOURCE_MISMATCH", "SNAPSHOT_SCOPE_MISMATCH", "SNAPSHOT_IDENTITY_INVALID", "SNAPSHOT_IDENTITY_DUPLICATE", "SNAPSHOT_STATE_INVALID", "SNAPSHOT_BINDING_CHANGED", "SNAPSHOT_GENERATION_ROLLBACK", "SNAPSHOT_GENERATION_COLLISION", "SNAPSHOT_CAPACITY_EXCEEDED", "SNAPSHOT_CAPACITY_INVALID"];
|
|
17
|
+
export type SnapshotRefusalCode = typeof SNAPSHOT_REFUSAL_CODES[number];
|
|
18
|
+
export declare class SnapshotRefusal extends Error {
|
|
19
|
+
readonly code: SnapshotRefusalCode;
|
|
20
|
+
constructor(code: SnapshotRefusalCode);
|
|
21
|
+
}
|
|
22
|
+
export interface BoundSnapshotSource extends BoundFeed {
|
|
23
|
+
acquisition: "local-snapshot";
|
|
24
|
+
bindingDigest: string;
|
|
25
|
+
scope?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface SnapshotDocument {
|
|
28
|
+
v: 1;
|
|
29
|
+
resource: string;
|
|
30
|
+
generation: number;
|
|
31
|
+
complete: boolean;
|
|
32
|
+
scope?: string;
|
|
33
|
+
records: Record<string, unknown>[];
|
|
34
|
+
diagnostics?: ProfileDiagnostic[];
|
|
35
|
+
evidence?: SnapshotEvidence;
|
|
36
|
+
}
|
|
37
|
+
export interface DecodedSnapshot {
|
|
38
|
+
/** Copied exact input. Admission re-decodes these bytes, never trusting mutable derived fields. */
|
|
39
|
+
bytes: Uint8Array;
|
|
40
|
+
sha256: string;
|
|
41
|
+
byteLength: number;
|
|
42
|
+
data: SnapshotDocument;
|
|
43
|
+
}
|
|
44
|
+
/** Ordinary document policy; no Kind, executable profile or Connector registration is installed. */
|
|
45
|
+
export declare function bindSnapshotSource(doc: {
|
|
46
|
+
id: ConceptId;
|
|
47
|
+
frontmatter: Frontmatter;
|
|
48
|
+
}, kinds: KindRegistry, options?: {
|
|
49
|
+
okfVersion?: "0.1" | "0.2";
|
|
50
|
+
}): BoundSnapshotSource;
|
|
51
|
+
/** Closed JSON v1, exact-byte identity, UTF-8/depth/finite/count bounds; never accesses a path. */
|
|
52
|
+
export declare function decodeSnapshot(input: Uint8Array): DecodedSnapshot;
|
|
53
|
+
export interface SnapshotCapacityInput {
|
|
54
|
+
/** Capture before reconciliation and retain unchanged through observation admission. */
|
|
55
|
+
accepted: SourceOverlaySnapshot;
|
|
56
|
+
/** One fresh index, also supplied unchanged to the overlay adapter for this run. */
|
|
57
|
+
overlays: SourceIndex;
|
|
58
|
+
/** CLI-owned ceiling for all envelope/binding/summary punctuation and version overhead. */
|
|
59
|
+
envelopeOverheadBytes: number;
|
|
60
|
+
maxEnvelopeBytes: number;
|
|
61
|
+
}
|
|
62
|
+
export interface SnapshotCapacityFacts {
|
|
63
|
+
retainedIds: number;
|
|
64
|
+
acceptedTuples: number;
|
|
65
|
+
upperBoundBytes: number;
|
|
66
|
+
maxEnvelopeBytes: number;
|
|
67
|
+
}
|
|
68
|
+
export interface SnapshotAdmissionOptions {
|
|
69
|
+
bound: BoundSnapshotSource;
|
|
70
|
+
snapshot: DecodedSnapshot;
|
|
71
|
+
state: SourceState | null;
|
|
72
|
+
/** Existing envelope binding, or null before binding. A history can never be silently rebound. */
|
|
73
|
+
previousBindingDigest: string | null;
|
|
74
|
+
capacity: SnapshotCapacityInput;
|
|
75
|
+
}
|
|
76
|
+
export interface SnapshotAdmission {
|
|
77
|
+
observation: "new" | "replay";
|
|
78
|
+
generation: number;
|
|
79
|
+
currentGeneration: number | null;
|
|
80
|
+
sha256: string;
|
|
81
|
+
records: number;
|
|
82
|
+
capacity: SnapshotCapacityFacts;
|
|
83
|
+
}
|
|
84
|
+
/** All refusal checks are pure and precede reconciliation, pending retries, Findings and writes. */
|
|
85
|
+
export declare function admitSnapshot(options: SnapshotAdmissionOptions): SnapshotAdmission;
|
|
86
|
+
export interface ObserveSnapshotOptions {
|
|
87
|
+
bound: BoundSnapshotSource;
|
|
88
|
+
snapshot: DecodedSnapshot;
|
|
89
|
+
previousBindingDigest: string | null;
|
|
90
|
+
state: MachineState;
|
|
91
|
+
capacity: SnapshotCapacityInput;
|
|
92
|
+
now?: () => Date;
|
|
93
|
+
signal?: AbortSignal;
|
|
94
|
+
commit(page: PageCommit): Promise<CommitResult | void>;
|
|
95
|
+
}
|
|
96
|
+
export interface SnapshotRunReceipt extends SourceRunReceipt {
|
|
97
|
+
observation: "new" | "replay";
|
|
98
|
+
generation: number;
|
|
99
|
+
sha256: string;
|
|
100
|
+
capacity: SnapshotCapacityFacts;
|
|
101
|
+
}
|
|
102
|
+
/** One finite acquisition. Admission refusals throw; runtime commit/store failures use the receipt. */
|
|
103
|
+
export declare function observeSnapshot(options: ObserveSnapshotOptions): Promise<SnapshotRunReceipt>;
|
|
104
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/source-engine/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/** Finite, data-only acquisition over the existing observation and overlay owners. */
|
|
2
|
+
import { findingsFor, isPrototypeKey, mapRecord, parseRecordSourceDeclaration, renderIdentity } from "../connectors.js";
|
|
3
|
+
import { readOverlayPolicyForResource } from "../record-overlay/policy.js";
|
|
4
|
+
import { blobVersion, sha256Hex } from "../versioning.js";
|
|
5
|
+
import { definitionCanonicalJson } from "../recipe-lifecycle/stamp.js";
|
|
6
|
+
import { driveObservation, isJsonData } from "./driver.js";
|
|
7
|
+
import { parseSnapshotEvidence, SNAPSHOT_SHA256 } from "./evidence.js";
|
|
8
|
+
import { isSourceState } from "./machine-state.js";
|
|
9
|
+
import { isSourceOverlaySnapshot } from "./overlay.js";
|
|
10
|
+
export const SNAPSHOT_MAX_BYTES = 2 * 1024 * 1024;
|
|
11
|
+
export const SNAPSHOT_MAX_RECORDS = 10_000;
|
|
12
|
+
export const SNAPSHOT_PROFILE = Object.freeze({ id: "local-snapshot", version: 1 });
|
|
13
|
+
export const SNAPSHOT_REFUSAL_CODES = ["SNAPSHOT_DECLARATION_INVALID", "SNAPSHOT_INPUT_INVALID", "SNAPSHOT_TOO_LARGE", "SNAPSHOT_RESOURCE_MISMATCH",
|
|
14
|
+
"SNAPSHOT_SCOPE_MISMATCH", "SNAPSHOT_IDENTITY_INVALID", "SNAPSHOT_IDENTITY_DUPLICATE", "SNAPSHOT_STATE_INVALID", "SNAPSHOT_BINDING_CHANGED",
|
|
15
|
+
"SNAPSHOT_GENERATION_ROLLBACK", "SNAPSHOT_GENERATION_COLLISION", "SNAPSHOT_CAPACITY_EXCEEDED", "SNAPSHOT_CAPACITY_INVALID"];
|
|
16
|
+
export class SnapshotRefusal extends Error {
|
|
17
|
+
code;
|
|
18
|
+
constructor(code) { super(code); this.code = code; this.name = "SnapshotRefusal"; }
|
|
19
|
+
}
|
|
20
|
+
const refuse = (code) => { throw new SnapshotRefusal(code); };
|
|
21
|
+
const object = (v) => v !== null && typeof v === "object" && !Array.isArray(v);
|
|
22
|
+
const closed = (v, keys) => Object.keys(v).every(k => keys.includes(k));
|
|
23
|
+
const resourceValid = (v) => typeof v === "string" && v.length <= 2048 && /^urn:[a-z0-9][a-z0-9-]{0,31}:[A-Za-z0-9][A-Za-z0-9._~:%-]*$/.test(v);
|
|
24
|
+
const scopeValid = (v) => typeof v === "string" && /^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$/.test(v);
|
|
25
|
+
const bytes = (v) => new TextEncoder().encode(JSON.stringify(v)).byteLength;
|
|
26
|
+
/** Ordinary document policy; no Kind, executable profile or Connector registration is installed. */
|
|
27
|
+
export function bindSnapshotSource(doc, kinds, options = {}) {
|
|
28
|
+
const fm = (doc.frontmatter ?? {});
|
|
29
|
+
if (!resourceValid(fm.resource) || typeof fm.target_kind !== "string" || !object(fm.identity)
|
|
30
|
+
|| !closed(fm.identity, ["id"]) || ["url", "connector", "source", "profile", "request", "auth", "domains", "credential"].some(k => Object.hasOwn(fm, k))
|
|
31
|
+
|| fm.scope !== undefined && !scopeValid(fm.scope) || fm.completeness === "complete" && !scopeValid(fm.scope))
|
|
32
|
+
return refuse("SNAPSHOT_DECLARATION_INVALID");
|
|
33
|
+
const kind = kinds.kinds.get(fm.target_kind);
|
|
34
|
+
if (!kind)
|
|
35
|
+
return refuse("SNAPSHOT_DECLARATION_INVALID");
|
|
36
|
+
const parsed = parseRecordSourceDeclaration({ name: "snapshot", profile: SNAPSHOT_PROFILE.id, target_kind: fm.target_kind,
|
|
37
|
+
identity: { resource: fm.resource, id: fm.identity.id }, fields: fm.fields, completeness: fm.completeness }, kind, fm.resource);
|
|
38
|
+
if (!parsed.ok)
|
|
39
|
+
return refuse("SNAPSHOT_DECLARATION_INVALID");
|
|
40
|
+
for (const key of ["owned_fields", "auto_apply", "needs_review"]) {
|
|
41
|
+
const value = fm[key];
|
|
42
|
+
if (value !== undefined && value !== null && typeof value !== "string" && !(Array.isArray(value) && value.every(item => typeof item === "string")))
|
|
43
|
+
return refuse("SNAPSHOT_DECLARATION_INVALID");
|
|
44
|
+
}
|
|
45
|
+
for (const key of ["missing_threshold", "exclude_pattern", "wall_time_zone"]) {
|
|
46
|
+
const value = fm[key];
|
|
47
|
+
if (value !== undefined && value !== null && typeof value !== "string" && typeof value !== "number")
|
|
48
|
+
return refuse("SNAPSHOT_DECLARATION_INVALID");
|
|
49
|
+
}
|
|
50
|
+
let policy;
|
|
51
|
+
try {
|
|
52
|
+
policy = readOverlayPolicyForResource(doc, fm.resource, { targetKind: kind });
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return refuse("SNAPSHOT_DECLARATION_INVALID");
|
|
56
|
+
}
|
|
57
|
+
if (policy.owned_fields.some(field => !Object.hasOwn(parsed.source.fields, field))
|
|
58
|
+
|| (options.okfVersion ?? "0.1") !== "0.2" && policy.owned_fields.some(field => policy.list_fields?.includes(field)))
|
|
59
|
+
return refuse("SNAPSHOT_DECLARATION_INVALID");
|
|
60
|
+
const bound = { acquisition: "local-snapshot", policy: { ...policy, target_kind: fm.target_kind, completeness: parsed.source.completeness },
|
|
61
|
+
source: parsed.source, kind, parameters: {}, resource: fm.resource, ...(fm.scope !== undefined ? { scope: fm.scope } : {}) };
|
|
62
|
+
// The accepted binding includes Kind shape and edition as well as mapping and policy.
|
|
63
|
+
const bindingDigest = `sha256:${sha256Hex(definitionCanonicalJson({ ...bound, policy: { ...bound.policy, exclude: bound.policy.exclude?.source ?? null }, okfVersion: options.okfVersion ?? "0.1" }))}`;
|
|
64
|
+
return structuredClone({ ...bound, bindingDigest });
|
|
65
|
+
}
|
|
66
|
+
/** Closed JSON v1, exact-byte identity, UTF-8/depth/finite/count bounds; never accesses a path. */
|
|
67
|
+
export function decodeSnapshot(input) {
|
|
68
|
+
if (!(input instanceof Uint8Array))
|
|
69
|
+
return refuse("SNAPSHOT_INPUT_INVALID");
|
|
70
|
+
if (input.byteLength > SNAPSHOT_MAX_BYTES)
|
|
71
|
+
return refuse("SNAPSHOT_TOO_LARGE");
|
|
72
|
+
const copy = new Uint8Array(input);
|
|
73
|
+
let value;
|
|
74
|
+
try {
|
|
75
|
+
value = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(copy));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return refuse("SNAPSHOT_INPUT_INVALID");
|
|
79
|
+
}
|
|
80
|
+
if (!isJsonData(value) || !object(value) || !closed(value, ["v", "resource", "generation", "complete", "scope", "records", "diagnostics", "evidence"])
|
|
81
|
+
|| value.v !== 1 || !resourceValid(value.resource) || !Number.isSafeInteger(value.generation) || value.generation < 1
|
|
82
|
+
|| typeof value.complete !== "boolean" || !Array.isArray(value.records) || value.records.length > SNAPSHOT_MAX_RECORDS
|
|
83
|
+
|| !value.records.every(object) || value.scope !== undefined && !scopeValid(value.scope))
|
|
84
|
+
return refuse("SNAPSHOT_INPUT_INVALID");
|
|
85
|
+
if (value.diagnostics !== undefined && (!Array.isArray(value.diagnostics) || value.diagnostics.length > 100
|
|
86
|
+
|| !value.diagnostics.every(d => object(d) && closed(d, ["code", "message", "count"])
|
|
87
|
+
&& typeof d.code === "string" && /^[A-Z][A-Z0-9_]{0,63}$/.test(d.code) && typeof d.message === "string" && d.message.length <= 512
|
|
88
|
+
&& (d.count === undefined || Number.isSafeInteger(d.count) && d.count >= 0))))
|
|
89
|
+
return refuse("SNAPSHOT_INPUT_INVALID");
|
|
90
|
+
if (value.evidence !== undefined)
|
|
91
|
+
value.evidence = parseSnapshotEvidence(value.evidence);
|
|
92
|
+
return { bytes: copy, sha256: blobVersion(copy), byteLength: copy.byteLength, data: value };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Conservative upper bound over every possible stage, without simulating overlay decisions.
|
|
96
|
+
* Each ID can retain an after plus a pending before/after/entry; each indexed tuple can retain
|
|
97
|
+
* another after. A per-field maximum over old, mapped and accepted values bounds carrying and
|
|
98
|
+
* clearing. Four copies of the original state cover retained extensions and metadata copied
|
|
99
|
+
* from an old entry into a record, pending entry and change during retry/missing transitions.
|
|
100
|
+
*/
|
|
101
|
+
function capacityFacts(bound, snapshot, state, input) {
|
|
102
|
+
if (!isSourceOverlaySnapshot(input.accepted) || !isJsonData(input.accepted)
|
|
103
|
+
|| !Number.isSafeInteger(input.envelopeOverheadBytes) || input.envelopeOverheadBytes < 0
|
|
104
|
+
|| !Number.isSafeInteger(input.maxEnvelopeBytes) || input.maxEnvelopeBytes < 1 || !input.overlays || typeof input.overlays.lookup !== "function")
|
|
105
|
+
return refuse("SNAPSHOT_CAPACITY_INVALID");
|
|
106
|
+
const bags = new Map();
|
|
107
|
+
const add = (id, values) => {
|
|
108
|
+
const bag = bags.get(id) ?? Object.create(null);
|
|
109
|
+
bags.set(id, bag);
|
|
110
|
+
for (const [field, value] of Object.entries(values ?? {}))
|
|
111
|
+
if (!Object.hasOwn(bag, field) || bytes(value) > bytes(bag[field]))
|
|
112
|
+
bag[field] = value;
|
|
113
|
+
};
|
|
114
|
+
for (const [id, entry] of Object.entries(state?.records ?? {}))
|
|
115
|
+
add(id, entry.after);
|
|
116
|
+
for (const [id, pending] of Object.entries(state?.pending ?? {})) {
|
|
117
|
+
add(id, pending.entry.after);
|
|
118
|
+
add(id, pending.change.before);
|
|
119
|
+
add(id, pending.change.after);
|
|
120
|
+
}
|
|
121
|
+
for (const entry of input.accepted.entries)
|
|
122
|
+
add(entry.external_id, entry.after);
|
|
123
|
+
for (const raw of snapshot.data.records) {
|
|
124
|
+
const mapped = mapRecord(bound.source, raw, bound.kind);
|
|
125
|
+
if (mapped.external_id !== null)
|
|
126
|
+
add(mapped.external_id, mapped.kind === "mapped" ? mapped.fields : undefined);
|
|
127
|
+
}
|
|
128
|
+
const tupleKeys = new Set(input.accepted.entries.map(e => JSON.stringify([e.feed, e.resource, e.external_id, e.target])));
|
|
129
|
+
const candidates = [];
|
|
130
|
+
for (const [id, after] of bags) {
|
|
131
|
+
const matches = input.overlays.lookup(bound.resource, id, { type: bound.source.target_kind });
|
|
132
|
+
if (matches.length !== 1)
|
|
133
|
+
continue;
|
|
134
|
+
const tuple = { feed: bound.policy.feed, resource: bound.resource, external_id: id, target: matches[0].id, after };
|
|
135
|
+
tupleKeys.add(JSON.stringify([tuple.feed, tuple.resource, id, tuple.target]));
|
|
136
|
+
candidates.push(tuple);
|
|
137
|
+
}
|
|
138
|
+
const time = "x".repeat(32), digest = `sha256:${"f".repeat(64)}`;
|
|
139
|
+
const records = Object.create(null), pending = Object.create(null);
|
|
140
|
+
for (const [id, after] of bags) {
|
|
141
|
+
const entry = { after, digest, missing: Number.MAX_SAFE_INTEGER, first_missing_at: time, gone: true, seen_at: time };
|
|
142
|
+
records[id] = entry;
|
|
143
|
+
pending[id] = { change: { external_id: id, change_kind: "disappeared", changed_fields: Object.keys(after), before: after, after,
|
|
144
|
+
content_digest: digest, missing_count: Number.MAX_SAFE_INTEGER, first_missing_at: time }, entry, held_at: time, replay_failures: Number.MAX_SAFE_INTEGER };
|
|
145
|
+
}
|
|
146
|
+
const upperBoundBytes = input.envelopeOverheadBytes + 4 * bytes(state) + bytes(input.accepted)
|
|
147
|
+
+ bytes({ v: 1, profile: SNAPSHOT_PROFILE, cursor: { v: 1, generation: Number.MAX_SAFE_INTEGER, sha256: snapshot.sha256 }, open: false,
|
|
148
|
+
records, pending, complete_observations: Number.MAX_SAFE_INTEGER, last_complete_at: time }) + bytes({ v: 1, entries: candidates });
|
|
149
|
+
const facts = { retainedIds: bags.size, acceptedTuples: tupleKeys.size, upperBoundBytes, maxEnvelopeBytes: input.maxEnvelopeBytes };
|
|
150
|
+
if (facts.retainedIds > SNAPSHOT_MAX_RECORDS || facts.acceptedTuples > SNAPSHOT_MAX_RECORDS || facts.upperBoundBytes > facts.maxEnvelopeBytes)
|
|
151
|
+
return refuse("SNAPSHOT_CAPACITY_EXCEEDED");
|
|
152
|
+
return facts;
|
|
153
|
+
}
|
|
154
|
+
/** Snapshot history has one fixed state format; malformed retry data cannot reach a commit. */
|
|
155
|
+
function snapshotStateValid(value) {
|
|
156
|
+
if (!isSourceState(value) || !isJsonData(value))
|
|
157
|
+
return false;
|
|
158
|
+
const count = (v) => Number.isSafeInteger(v) && v >= 0;
|
|
159
|
+
const idValid = (id) => id.length > 0 && id.length <= 2048 && !isPrototypeKey(id) && !/[\x00-\x1f\x7f]/.test(id);
|
|
160
|
+
const entryValid = (entry) => object(entry) && object(entry.after) && typeof entry.digest === "string" && SNAPSHOT_SHA256.test(entry.digest)
|
|
161
|
+
&& count(entry.missing) && typeof entry.seen_at === "string" && (entry.gone === undefined || entry.gone === true)
|
|
162
|
+
&& (entry.first_missing_at === undefined || typeof entry.first_missing_at === "string");
|
|
163
|
+
if (!count(value.complete_observations) || value.last_complete_at !== undefined && typeof value.last_complete_at !== "string"
|
|
164
|
+
|| !Object.entries(value.records).every(([id, entry]) => idValid(id) && entryValid(entry)))
|
|
165
|
+
return false;
|
|
166
|
+
return Object.entries(value.pending ?? {}).every(([id, pending]) => {
|
|
167
|
+
const change = pending.change;
|
|
168
|
+
return idValid(id) && entryValid(pending.entry) && typeof pending.held_at === "string" && (pending.replay_failures === undefined || count(pending.replay_failures))
|
|
169
|
+
&& ["new", "changed", "disappeared"].includes(change.change_kind) && Array.isArray(change.changed_fields) && change.changed_fields.every(f => typeof f === "string")
|
|
170
|
+
&& (change.before === null || object(change.before)) && (change.after === null || object(change.after))
|
|
171
|
+
&& typeof change.content_digest === "string" && SNAPSHOT_SHA256.test(change.content_digest)
|
|
172
|
+
&& (change.missing_count === undefined || count(change.missing_count)) && (change.first_missing_at === undefined || typeof change.first_missing_at === "string");
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/** All refusal checks are pure and precede reconciliation, pending retries, Findings and writes. */
|
|
176
|
+
export function admitSnapshot(options) {
|
|
177
|
+
const { bound, state } = options;
|
|
178
|
+
const snapshot = decodeSnapshot(options.snapshot.bytes);
|
|
179
|
+
if (bound.acquisition !== "local-snapshot" || bound.source.profile !== SNAPSHOT_PROFILE.id || !resourceValid(bound.resource)
|
|
180
|
+
|| bound.policy.provider !== bound.resource || bound.source.identity.resource !== bound.resource)
|
|
181
|
+
return refuse("SNAPSHOT_DECLARATION_INVALID");
|
|
182
|
+
if (snapshot.data.resource !== bound.resource)
|
|
183
|
+
return refuse("SNAPSHOT_RESOURCE_MISMATCH");
|
|
184
|
+
if (snapshot.data.complete && (bound.source.completeness !== "complete" || bound.scope === undefined || snapshot.data.scope !== bound.scope)
|
|
185
|
+
|| snapshot.data.scope !== undefined && snapshot.data.scope !== bound.scope)
|
|
186
|
+
return refuse("SNAPSHOT_SCOPE_MISMATCH");
|
|
187
|
+
let currentGeneration = null;
|
|
188
|
+
let observation = "new";
|
|
189
|
+
if (state !== null) {
|
|
190
|
+
if (!snapshotStateValid(state) || state.profile.id !== SNAPSHOT_PROFILE.id || state.profile.version !== SNAPSHOT_PROFILE.version
|
|
191
|
+
|| !closed(state.profile, ["id", "version"]) || state.open !== false || state.validators !== undefined || !object(state.cursor)
|
|
192
|
+
|| !closed(state.cursor, ["v", "generation", "sha256"]) || state.cursor.v !== 1 || !Number.isSafeInteger(state.cursor.generation)
|
|
193
|
+
|| state.cursor.generation < 1 || typeof state.cursor.sha256 !== "string" || !SNAPSHOT_SHA256.test(state.cursor.sha256))
|
|
194
|
+
return refuse("SNAPSHOT_STATE_INVALID");
|
|
195
|
+
if (options.previousBindingDigest !== bound.bindingDigest)
|
|
196
|
+
return refuse("SNAPSHOT_BINDING_CHANGED");
|
|
197
|
+
currentGeneration = state.cursor.generation;
|
|
198
|
+
if (snapshot.data.generation < currentGeneration)
|
|
199
|
+
return refuse("SNAPSHOT_GENERATION_ROLLBACK");
|
|
200
|
+
if (snapshot.data.generation === currentGeneration) {
|
|
201
|
+
if (snapshot.sha256 !== state.cursor.sha256)
|
|
202
|
+
return refuse("SNAPSHOT_GENERATION_COLLISION");
|
|
203
|
+
observation = "replay";
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
const ids = new Set();
|
|
207
|
+
for (const raw of snapshot.data.records) {
|
|
208
|
+
const identity = renderIdentity(bound.source, bound, raw);
|
|
209
|
+
if (!identity.ok || isPrototypeKey(identity.id) || /[\x00-\x1f\x7f]/.test(identity.id))
|
|
210
|
+
return refuse("SNAPSHOT_IDENTITY_INVALID");
|
|
211
|
+
if (ids.has(identity.id))
|
|
212
|
+
return refuse("SNAPSHOT_IDENTITY_DUPLICATE");
|
|
213
|
+
ids.add(identity.id);
|
|
214
|
+
}
|
|
215
|
+
return { observation, generation: snapshot.data.generation, currentGeneration, sha256: snapshot.sha256, records: ids.size,
|
|
216
|
+
capacity: capacityFacts(bound, snapshot, state, options.capacity) };
|
|
217
|
+
}
|
|
218
|
+
/** One finite acquisition. Admission refusals throw; runtime commit/store failures use the receipt. */
|
|
219
|
+
export async function observeSnapshot(options) {
|
|
220
|
+
const bound = structuredClone(options.bound), snapshot = decodeSnapshot(options.snapshot.bytes);
|
|
221
|
+
const stored = await options.state.read(bound.policy.feed);
|
|
222
|
+
const admission = admitSnapshot({ bound, snapshot, state: stored?.state ?? null, previousBindingDigest: options.previousBindingDigest, capacity: options.capacity });
|
|
223
|
+
const observedAt = (options.now ?? (() => new Date()))().toISOString();
|
|
224
|
+
const receipt = { feed: bound.policy.feed, provider: bound.resource, source: bound.source.name, profile: { ...SNAPSHOT_PROFILE },
|
|
225
|
+
mode: "complete", observed_at: observedAt, outcome: "observed", retry: true, pages: 0, held: 0, pending: Object.keys(stored?.state.pending ?? {}).length,
|
|
226
|
+
requests: [], pass: { resumed: false, ended: false, complete: false }, changes: { new: 0, changed: 0, disappeared: 0 }, cursor: stored?.state.cursor ?? null,
|
|
227
|
+
diagnostics: [], profile_diagnostics: [], findings: [], observation: admission.observation, generation: admission.generation, sha256: admission.sha256, capacity: admission.capacity };
|
|
228
|
+
const extraFindings = [];
|
|
229
|
+
await driveObservation({ bound, state: options.state, initial: stored?.state ?? { v: 1, profile: { ...SNAPSHOT_PROFILE }, cursor: null, open: false, records: {}, complete_observations: 0 },
|
|
230
|
+
version: stored?.version ?? null, receipt, observedAt, mode: "complete", resumed: false, signal: options.signal ?? new AbortController().signal,
|
|
231
|
+
pages: 1, replayOnly: admission.observation === "replay", extraFindings, commit: options.commit,
|
|
232
|
+
acquire: async () => ({ records: snapshot.data.records, more: false, complete: snapshot.data.complete,
|
|
233
|
+
nextCursor: { v: 1, generation: snapshot.data.generation, sha256: snapshot.sha256 }, diagnostics: snapshot.data.diagnostics }),
|
|
234
|
+
stop: stop => { receipt.outcome = stop.outcome; receipt.retry = stop.retry; if (stop.reason !== undefined)
|
|
235
|
+
receipt.reason = stop.reason; },
|
|
236
|
+
});
|
|
237
|
+
receipt.findings = [...extraFindings, ...findingsFor(receipt.diagnostics, { source: bound.source.name })];
|
|
238
|
+
return receipt;
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=snapshot.js.map
|