@ixo/decision-oracle 0.0.0-stage → 0.2.1
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/LICENSE +201 -0
- package/README.md +794 -2
- package/dist/act.d.ts +87 -0
- package/dist/act.d.ts.map +1 -0
- package/dist/act.js +20 -0
- package/dist/act.js.map +1 -0
- package/dist/app.d.ts +22 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +128 -0
- package/dist/app.js.map +1 -0
- package/dist/c2pa.wasm +0 -0
- package/dist/cli/commands/api.d.ts +50 -0
- package/dist/cli/commands/api.d.ts.map +1 -0
- package/dist/cli/commands/api.js +737 -0
- package/dist/cli/commands/api.js.map +1 -0
- package/dist/cli/commands/create-collection.d.ts +40 -0
- package/dist/cli/commands/create-collection.d.ts.map +1 -0
- package/dist/cli/commands/create-collection.js +318 -0
- package/dist/cli/commands/create-collection.js.map +1 -0
- package/dist/cli/commands/create-deed.d.ts +31 -0
- package/dist/cli/commands/create-deed.d.ts.map +1 -0
- package/dist/cli/commands/create-deed.js +208 -0
- package/dist/cli/commands/create-deed.js.map +1 -0
- package/dist/cli/commands/delegation.d.ts +26 -0
- package/dist/cli/commands/delegation.d.ts.map +1 -0
- package/dist/cli/commands/delegation.js +162 -0
- package/dist/cli/commands/delegation.js.map +1 -0
- package/dist/cli/commands/derive.d.ts +22 -0
- package/dist/cli/commands/derive.d.ts.map +1 -0
- package/dist/cli/commands/derive.js +53 -0
- package/dist/cli/commands/derive.js.map +1 -0
- package/dist/cli/commands/engine.d.ts +25 -0
- package/dist/cli/commands/engine.d.ts.map +1 -0
- package/dist/cli/commands/engine.js +107 -0
- package/dist/cli/commands/engine.js.map +1 -0
- package/dist/cli/commands/erase.d.ts +17 -0
- package/dist/cli/commands/erase.d.ts.map +1 -0
- package/dist/cli/commands/erase.js +117 -0
- package/dist/cli/commands/erase.js.map +1 -0
- package/dist/cli/commands/facts-run.d.ts +30 -0
- package/dist/cli/commands/facts-run.d.ts.map +1 -0
- package/dist/cli/commands/facts-run.js +409 -0
- package/dist/cli/commands/facts-run.js.map +1 -0
- package/dist/cli/commands/facts-scaffold.d.ts +22 -0
- package/dist/cli/commands/facts-scaffold.d.ts.map +1 -0
- package/dist/cli/commands/facts-scaffold.js +208 -0
- package/dist/cli/commands/facts-scaffold.js.map +1 -0
- package/dist/cli/commands/init.d.ts +18 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +34 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/login.d.ts +9 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +16 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/logout.d.ts +10 -0
- package/dist/cli/commands/logout.d.ts.map +1 -0
- package/dist/cli/commands/logout.js +28 -0
- package/dist/cli/commands/logout.js.map +1 -0
- package/dist/cli/commands/manifest.d.ts +12 -0
- package/dist/cli/commands/manifest.d.ts.map +1 -0
- package/dist/cli/commands/manifest.js +48 -0
- package/dist/cli/commands/manifest.js.map +1 -0
- package/dist/cli/commands/oracle-init.d.ts +48 -0
- package/dist/cli/commands/oracle-init.d.ts.map +1 -0
- package/dist/cli/commands/oracle-init.js +1122 -0
- package/dist/cli/commands/oracle-init.js.map +1 -0
- package/dist/cli/commands/org.d.ts +28 -0
- package/dist/cli/commands/org.d.ts.map +1 -0
- package/dist/cli/commands/org.js +309 -0
- package/dist/cli/commands/org.js.map +1 -0
- package/dist/cli/commands/protocol-review.d.ts +20 -0
- package/dist/cli/commands/protocol-review.d.ts.map +1 -0
- package/dist/cli/commands/protocol-review.js +162 -0
- package/dist/cli/commands/protocol-review.js.map +1 -0
- package/dist/cli/commands/publish-protocol.d.ts +43 -0
- package/dist/cli/commands/publish-protocol.d.ts.map +1 -0
- package/dist/cli/commands/publish-protocol.js +345 -0
- package/dist/cli/commands/publish-protocol.js.map +1 -0
- package/dist/cli/commands/register.d.ts +16 -0
- package/dist/cli/commands/register.d.ts.map +1 -0
- package/dist/cli/commands/register.js +54 -0
- package/dist/cli/commands/register.js.map +1 -0
- package/dist/cli/commands/relink.d.ts +11 -0
- package/dist/cli/commands/relink.d.ts.map +1 -0
- package/dist/cli/commands/relink.js +36 -0
- package/dist/cli/commands/relink.js.map +1 -0
- package/dist/cli/commands/rubric-fetch-form.d.ts +16 -0
- package/dist/cli/commands/rubric-fetch-form.d.ts.map +1 -0
- package/dist/cli/commands/rubric-fetch-form.js +83 -0
- package/dist/cli/commands/rubric-fetch-form.js.map +1 -0
- package/dist/cli/commands/rubric-validate.d.ts +72 -0
- package/dist/cli/commands/rubric-validate.d.ts.map +1 -0
- package/dist/cli/commands/rubric-validate.js +163 -0
- package/dist/cli/commands/rubric-validate.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +13 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +39 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/skills.d.ts +11 -0
- package/dist/cli/commands/skills.d.ts.map +1 -0
- package/dist/cli/commands/skills.js +19 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/commands/submit-claim.d.ts +25 -0
- package/dist/cli/commands/submit-claim.d.ts.map +1 -0
- package/dist/cli/commands/submit-claim.js +155 -0
- package/dist/cli/commands/submit-claim.js.map +1 -0
- package/dist/cli/index.d.ts +15 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +206 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/lib/agent-card-schema.d.ts +8 -0
- package/dist/cli/lib/agent-card-schema.d.ts.map +1 -0
- package/dist/cli/lib/agent-card-schema.js +169 -0
- package/dist/cli/lib/agent-card-schema.js.map +1 -0
- package/dist/cli/lib/ai-rest.d.ts +12 -0
- package/dist/cli/lib/ai-rest.d.ts.map +1 -0
- package/dist/cli/lib/ai-rest.js +36 -0
- package/dist/cli/lib/ai-rest.js.map +1 -0
- package/dist/cli/lib/args.d.ts +33 -0
- package/dist/cli/lib/args.d.ts.map +1 -0
- package/dist/cli/lib/args.js +24 -0
- package/dist/cli/lib/args.js.map +1 -0
- package/dist/cli/lib/authhub.d.ts +7 -0
- package/dist/cli/lib/authhub.d.ts.map +1 -0
- package/dist/cli/lib/authhub.js +210 -0
- package/dist/cli/lib/authhub.js.map +1 -0
- package/dist/cli/lib/chain.d.ts +264 -0
- package/dist/cli/lib/chain.d.ts.map +1 -0
- package/dist/cli/lib/chain.js +584 -0
- package/dist/cli/lib/chain.js.map +1 -0
- package/dist/cli/lib/devvars.d.ts +59 -0
- package/dist/cli/lib/devvars.d.ts.map +1 -0
- package/dist/cli/lib/devvars.js +206 -0
- package/dist/cli/lib/devvars.js.map +1 -0
- package/dist/cli/lib/engine.d.ts +54 -0
- package/dist/cli/lib/engine.d.ts.map +1 -0
- package/dist/cli/lib/engine.js +112 -0
- package/dist/cli/lib/engine.js.map +1 -0
- package/dist/cli/lib/identity-cards.d.ts +188 -0
- package/dist/cli/lib/identity-cards.d.ts.map +1 -0
- package/dist/cli/lib/identity-cards.js +261 -0
- package/dist/cli/lib/identity-cards.js.map +1 -0
- package/dist/cli/lib/matrix-account.d.ts +79 -0
- package/dist/cli/lib/matrix-account.d.ts.map +1 -0
- package/dist/cli/lib/matrix-account.js +228 -0
- package/dist/cli/lib/matrix-account.js.map +1 -0
- package/dist/cli/lib/oracle-account.d.ts +108 -0
- package/dist/cli/lib/oracle-account.d.ts.map +1 -0
- package/dist/cli/lib/oracle-account.js +207 -0
- package/dist/cli/lib/oracle-account.js.map +1 -0
- package/dist/cli/lib/project.d.ts +22 -0
- package/dist/cli/lib/project.d.ts.map +1 -0
- package/dist/cli/lib/project.js +62 -0
- package/dist/cli/lib/project.js.map +1 -0
- package/dist/cli/lib/session.d.ts +109 -0
- package/dist/cli/lib/session.d.ts.map +1 -0
- package/dist/cli/lib/session.js +354 -0
- package/dist/cli/lib/session.js.map +1 -0
- package/dist/cli/lib/workorder.d.ts +57 -0
- package/dist/cli/lib/workorder.d.ts.map +1 -0
- package/dist/cli/lib/workorder.js +101 -0
- package/dist/cli/lib/workorder.js.map +1 -0
- package/dist/config.d.ts +221 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +431 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +88 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +9 -0
- package/dist/context.js.map +1 -0
- package/dist/contracts/api.d.ts +3367 -0
- package/dist/contracts/api.d.ts.map +1 -0
- package/dist/contracts/api.js +1303 -0
- package/dist/contracts/api.js.map +1 -0
- package/dist/contracts/capabilities.d.ts +126 -0
- package/dist/contracts/capabilities.d.ts.map +1 -0
- package/dist/contracts/capabilities.js +164 -0
- package/dist/contracts/capabilities.js.map +1 -0
- package/dist/contracts/claim-source.d.ts +98 -0
- package/dist/contracts/claim-source.d.ts.map +1 -0
- package/dist/contracts/claim-source.js +17 -0
- package/dist/contracts/claim-source.js.map +1 -0
- package/dist/contracts/errors.d.ts +150 -0
- package/dist/contracts/errors.d.ts.map +1 -0
- package/dist/contracts/errors.js +121 -0
- package/dist/contracts/errors.js.map +1 -0
- package/dist/contracts/index.d.ts +15 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +11 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/payment-gate.d.ts +129 -0
- package/dist/contracts/payment-gate.d.ts.map +1 -0
- package/dist/contracts/payment-gate.js +24 -0
- package/dist/contracts/payment-gate.js.map +1 -0
- package/dist/contracts/start-api-claim.d.ts +90 -0
- package/dist/contracts/start-api-claim.d.ts.map +1 -0
- package/dist/contracts/start-api-claim.js +22 -0
- package/dist/contracts/start-api-claim.js.map +1 -0
- package/dist/contracts/webhooks.d.ts +1487 -0
- package/dist/contracts/webhooks.d.ts.map +1 -0
- package/dist/contracts/webhooks.js +71 -0
- package/dist/contracts/webhooks.js.map +1 -0
- package/dist/contracts/work-order.d.ts +29 -0
- package/dist/contracts/work-order.d.ts.map +1 -0
- package/dist/contracts/work-order.js +12 -0
- package/dist/contracts/work-order.js.map +1 -0
- package/dist/cron/ai-cost.d.ts +29 -0
- package/dist/cron/ai-cost.d.ts.map +1 -0
- package/dist/cron/ai-cost.js +80 -0
- package/dist/cron/ai-cost.js.map +1 -0
- package/dist/cron/api-lane.d.ts +39 -0
- package/dist/cron/api-lane.d.ts.map +1 -0
- package/dist/cron/api-lane.js +203 -0
- package/dist/cron/api-lane.js.map +1 -0
- package/dist/cron/backlog.d.ts +50 -0
- package/dist/cron/backlog.d.ts.map +1 -0
- package/dist/cron/backlog.js +115 -0
- package/dist/cron/backlog.js.map +1 -0
- package/dist/cron/billing.d.ts +11 -0
- package/dist/cron/billing.d.ts.map +1 -0
- package/dist/cron/billing.js +69 -0
- package/dist/cron/billing.js.map +1 -0
- package/dist/cron/collection.d.ts +50 -0
- package/dist/cron/collection.d.ts.map +1 -0
- package/dist/cron/collection.js +118 -0
- package/dist/cron/collection.js.map +1 -0
- package/dist/cron/funding.d.ts +16 -0
- package/dist/cron/funding.d.ts.map +1 -0
- package/dist/cron/funding.js +262 -0
- package/dist/cron/funding.js.map +1 -0
- package/dist/cron/payer-billing.d.ts +38 -0
- package/dist/cron/payer-billing.d.ts.map +1 -0
- package/dist/cron/payer-billing.js +119 -0
- package/dist/cron/payer-billing.js.map +1 -0
- package/dist/cron/scan.d.ts +43 -0
- package/dist/cron/scan.d.ts.map +1 -0
- package/dist/cron/scan.js +250 -0
- package/dist/cron/scan.js.map +1 -0
- package/dist/db/client.d.ts +14 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +14 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/index.d.ts +7 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +7 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +6738 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +1433 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/define-oracle.d.ts +32 -0
- package/dist/define-oracle.d.ts.map +1 -0
- package/dist/define-oracle.js +80 -0
- package/dist/define-oracle.js.map +1 -0
- package/dist/dev-oracle.d.ts +9 -0
- package/dist/dev-oracle.d.ts.map +1 -0
- package/dist/dev-oracle.js +19 -0
- package/dist/dev-oracle.js.map +1 -0
- package/dist/dev-worker.d.ts +10 -0
- package/dist/dev-worker.d.ts.map +1 -0
- package/dist/dev-worker.js +12 -0
- package/dist/dev-worker.js.map +1 -0
- package/dist/env.d.ts +146 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +10 -0
- package/dist/env.js.map +1 -0
- package/dist/facts/exif.d.ts +43 -0
- package/dist/facts/exif.d.ts.map +1 -0
- package/dist/facts/exif.js +224 -0
- package/dist/facts/exif.js.map +1 -0
- package/dist/facts/fact.d.ts +62 -0
- package/dist/facts/fact.d.ts.map +1 -0
- package/dist/facts/fact.js +105 -0
- package/dist/facts/fact.js.map +1 -0
- package/dist/facts/geo.d.ts +55 -0
- package/dist/facts/geo.d.ts.map +1 -0
- package/dist/facts/geo.js +267 -0
- package/dist/facts/geo.js.map +1 -0
- package/dist/facts/index.d.ts +31 -0
- package/dist/facts/index.d.ts.map +1 -0
- package/dist/facts/index.js +27 -0
- package/dist/facts/index.js.map +1 -0
- package/dist/facts/linked-doc.d.ts +60 -0
- package/dist/facts/linked-doc.d.ts.map +1 -0
- package/dist/facts/linked-doc.js +101 -0
- package/dist/facts/linked-doc.js.map +1 -0
- package/dist/facts/types.d.ts +278 -0
- package/dist/facts/types.d.ts.map +1 -0
- package/dist/facts/types.js +19 -0
- package/dist/facts/types.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-lane/accept.d.ts +29 -0
- package/dist/lib/api-lane/accept.d.ts.map +1 -0
- package/dist/lib/api-lane/accept.js +218 -0
- package/dist/lib/api-lane/accept.js.map +1 -0
- package/dist/lib/api-lane/claim-list.d.ts +44 -0
- package/dist/lib/api-lane/claim-list.d.ts.map +1 -0
- package/dist/lib/api-lane/claim-list.js +92 -0
- package/dist/lib/api-lane/claim-list.js.map +1 -0
- package/dist/lib/api-lane/company.d.ts +56 -0
- package/dist/lib/api-lane/company.d.ts.map +1 -0
- package/dist/lib/api-lane/company.js +103 -0
- package/dist/lib/api-lane/company.js.map +1 -0
- package/dist/lib/api-lane/events.d.ts +21 -0
- package/dist/lib/api-lane/events.d.ts.map +1 -0
- package/dist/lib/api-lane/events.js +111 -0
- package/dist/lib/api-lane/events.js.map +1 -0
- package/dist/lib/api-lane/ids.d.ts +39 -0
- package/dist/lib/api-lane/ids.d.ts.map +1 -0
- package/dist/lib/api-lane/ids.js +78 -0
- package/dist/lib/api-lane/ids.js.map +1 -0
- package/dist/lib/api-lane/index.d.ts +16 -0
- package/dist/lib/api-lane/index.d.ts.map +1 -0
- package/dist/lib/api-lane/index.js +16 -0
- package/dist/lib/api-lane/index.js.map +1 -0
- package/dist/lib/api-lane/linked.d.ts +264 -0
- package/dist/lib/api-lane/linked.d.ts.map +1 -0
- package/dist/lib/api-lane/linked.js +272 -0
- package/dist/lib/api-lane/linked.js.map +1 -0
- package/dist/lib/api-lane/media-type.d.ts +15 -0
- package/dist/lib/api-lane/media-type.d.ts.map +1 -0
- package/dist/lib/api-lane/media-type.js +73 -0
- package/dist/lib/api-lane/media-type.js.map +1 -0
- package/dist/lib/api-lane/member-emails.d.ts +83 -0
- package/dist/lib/api-lane/member-emails.d.ts.map +1 -0
- package/dist/lib/api-lane/member-emails.js +213 -0
- package/dist/lib/api-lane/member-emails.js.map +1 -0
- package/dist/lib/api-lane/members.d.ts +42 -0
- package/dist/lib/api-lane/members.d.ts.map +1 -0
- package/dist/lib/api-lane/members.js +75 -0
- package/dist/lib/api-lane/members.js.map +1 -0
- package/dist/lib/api-lane/notify.d.ts +47 -0
- package/dist/lib/api-lane/notify.d.ts.map +1 -0
- package/dist/lib/api-lane/notify.js +240 -0
- package/dist/lib/api-lane/notify.js.map +1 -0
- package/dist/lib/api-lane/pause.d.ts +41 -0
- package/dist/lib/api-lane/pause.d.ts.map +1 -0
- package/dist/lib/api-lane/pause.js +155 -0
- package/dist/lib/api-lane/pause.js.map +1 -0
- package/dist/lib/api-lane/record.d.ts +76 -0
- package/dist/lib/api-lane/record.d.ts.map +1 -0
- package/dist/lib/api-lane/record.js +337 -0
- package/dist/lib/api-lane/record.js.map +1 -0
- package/dist/lib/api-lane/retention.d.ts +43 -0
- package/dist/lib/api-lane/retention.d.ts.map +1 -0
- package/dist/lib/api-lane/retention.js +176 -0
- package/dist/lib/api-lane/retention.js.map +1 -0
- package/dist/lib/api-lane/review.d.ts +76 -0
- package/dist/lib/api-lane/review.d.ts.map +1 -0
- package/dist/lib/api-lane/review.js +355 -0
- package/dist/lib/api-lane/review.js.map +1 -0
- package/dist/lib/api-lane/reviewers.d.ts +109 -0
- package/dist/lib/api-lane/reviewers.d.ts.map +1 -0
- package/dist/lib/api-lane/reviewers.js +755 -0
- package/dist/lib/api-lane/reviewers.js.map +1 -0
- package/dist/lib/api-lane/source-delete.d.ts +16 -0
- package/dist/lib/api-lane/source-delete.d.ts.map +1 -0
- package/dist/lib/api-lane/source-delete.js +50 -0
- package/dist/lib/api-lane/source-delete.js.map +1 -0
- package/dist/lib/api-lane/source.d.ts +19 -0
- package/dist/lib/api-lane/source.d.ts.map +1 -0
- package/dist/lib/api-lane/source.js +226 -0
- package/dist/lib/api-lane/source.js.map +1 -0
- package/dist/lib/api-lane/submitter.d.ts +22 -0
- package/dist/lib/api-lane/submitter.d.ts.map +1 -0
- package/dist/lib/api-lane/submitter.js +34 -0
- package/dist/lib/api-lane/submitter.js.map +1 -0
- package/dist/lib/api-lane/timeline.d.ts +20 -0
- package/dist/lib/api-lane/timeline.d.ts.map +1 -0
- package/dist/lib/api-lane/timeline.js +23 -0
- package/dist/lib/api-lane/timeline.js.map +1 -0
- package/dist/lib/api-lane/webhook-crypto.d.ts +44 -0
- package/dist/lib/api-lane/webhook-crypto.d.ts.map +1 -0
- package/dist/lib/api-lane/webhook-crypto.js +103 -0
- package/dist/lib/api-lane/webhook-crypto.js.map +1 -0
- package/dist/lib/api-lane/webhooks.d.ts +117 -0
- package/dist/lib/api-lane/webhooks.d.ts.map +1 -0
- package/dist/lib/api-lane/webhooks.js +503 -0
- package/dist/lib/api-lane/webhooks.js.map +1 -0
- package/dist/lib/archive.d.ts +64 -0
- package/dist/lib/archive.d.ts.map +1 -0
- package/dist/lib/archive.js +305 -0
- package/dist/lib/archive.js.map +1 -0
- package/dist/lib/bech32.d.ts +8 -0
- package/dist/lib/bech32.d.ts.map +1 -0
- package/dist/lib/bech32.js +39 -0
- package/dist/lib/bech32.js.map +1 -0
- package/dist/lib/claim-erase.d.ts +22 -0
- package/dist/lib/claim-erase.d.ts.map +1 -0
- package/dist/lib/claim-erase.js +44 -0
- package/dist/lib/claim-erase.js.map +1 -0
- package/dist/lib/cursor.d.ts +11 -0
- package/dist/lib/cursor.d.ts.map +1 -0
- package/dist/lib/cursor.js +20 -0
- package/dist/lib/cursor.js.map +1 -0
- package/dist/lib/email/send.d.ts +43 -0
- package/dist/lib/email/send.d.ts.map +1 -0
- package/dist/lib/email/send.js +71 -0
- package/dist/lib/email/send.js.map +1 -0
- package/dist/lib/email/template.d.ts +217 -0
- package/dist/lib/email/template.d.ts.map +1 -0
- package/dist/lib/email/template.js +713 -0
- package/dist/lib/email/template.js.map +1 -0
- package/dist/lib/engine/adr36.d.ts +56 -0
- package/dist/lib/engine/adr36.d.ts.map +1 -0
- package/dist/lib/engine/adr36.js +76 -0
- package/dist/lib/engine/adr36.js.map +1 -0
- package/dist/lib/engine/client.d.ts +162 -0
- package/dist/lib/engine/client.d.ts.map +1 -0
- package/dist/lib/engine/client.js +473 -0
- package/dist/lib/engine/client.js.map +1 -0
- package/dist/lib/engine/types.d.ts +1356 -0
- package/dist/lib/engine/types.d.ts.map +1 -0
- package/dist/lib/engine/types.js +562 -0
- package/dist/lib/engine/types.js.map +1 -0
- package/dist/lib/errors.d.ts +73 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +96 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/facts/builder.d.ts +88 -0
- package/dist/lib/facts/builder.d.ts.map +1 -0
- package/dist/lib/facts/builder.js +239 -0
- package/dist/lib/facts/builder.js.map +1 -0
- package/dist/lib/facts/ctx.d.ts +34 -0
- package/dist/lib/facts/ctx.d.ts.map +1 -0
- package/dist/lib/facts/ctx.js +51 -0
- package/dist/lib/facts/ctx.js.map +1 -0
- package/dist/lib/facts/expected.d.ts +23 -0
- package/dist/lib/facts/expected.d.ts.map +1 -0
- package/dist/lib/facts/expected.js +16 -0
- package/dist/lib/facts/expected.js.map +1 -0
- package/dist/lib/facts/fact-cache.d.ts +469 -0
- package/dist/lib/facts/fact-cache.d.ts.map +1 -0
- package/dist/lib/facts/fact-cache.js +52 -0
- package/dist/lib/facts/fact-cache.js.map +1 -0
- package/dist/lib/facts/factset.d.ts +608 -0
- package/dist/lib/facts/factset.d.ts.map +1 -0
- package/dist/lib/facts/factset.js +226 -0
- package/dist/lib/facts/factset.js.map +1 -0
- package/dist/lib/facts/producer.d.ts +190 -0
- package/dist/lib/facts/producer.d.ts.map +1 -0
- package/dist/lib/facts/producer.js +15 -0
- package/dist/lib/facts/producer.js.map +1 -0
- package/dist/lib/facts/runner.d.ts +111 -0
- package/dist/lib/facts/runner.d.ts.map +1 -0
- package/dist/lib/facts/runner.js +438 -0
- package/dist/lib/facts/runner.js.map +1 -0
- package/dist/lib/facts/stock/ai-check.d.ts +100 -0
- package/dist/lib/facts/stock/ai-check.d.ts.map +1 -0
- package/dist/lib/facts/stock/ai-check.js +526 -0
- package/dist/lib/facts/stock/ai-check.js.map +1 -0
- package/dist/lib/facts/stock/ai-inputs.d.ts +104 -0
- package/dist/lib/facts/stock/ai-inputs.d.ts.map +1 -0
- package/dist/lib/facts/stock/ai-inputs.js +332 -0
- package/dist/lib/facts/stock/ai-inputs.js.map +1 -0
- package/dist/lib/facts/stock/ai-provider.d.ts +105 -0
- package/dist/lib/facts/stock/ai-provider.d.ts.map +1 -0
- package/dist/lib/facts/stock/ai-provider.js +250 -0
- package/dist/lib/facts/stock/ai-provider.js.map +1 -0
- package/dist/lib/facts/stock/ai-unique.d.ts +85 -0
- package/dist/lib/facts/stock/ai-unique.d.ts.map +1 -0
- package/dist/lib/facts/stock/ai-unique.js +208 -0
- package/dist/lib/facts/stock/ai-unique.js.map +1 -0
- package/dist/lib/facts/stock/archive.d.ts +63 -0
- package/dist/lib/facts/stock/archive.d.ts.map +1 -0
- package/dist/lib/facts/stock/archive.js +349 -0
- package/dist/lib/facts/stock/archive.js.map +1 -0
- package/dist/lib/facts/stock/c2pa-trust-list.d.ts +16 -0
- package/dist/lib/facts/stock/c2pa-trust-list.d.ts.map +1 -0
- package/dist/lib/facts/stock/c2pa-trust-list.js +637 -0
- package/dist/lib/facts/stock/c2pa-trust-list.js.map +1 -0
- package/dist/lib/facts/stock/c2pa.d.ts +56 -0
- package/dist/lib/facts/stock/c2pa.d.ts.map +1 -0
- package/dist/lib/facts/stock/c2pa.js +234 -0
- package/dist/lib/facts/stock/c2pa.js.map +1 -0
- package/dist/lib/facts/stock/call.d.ts +91 -0
- package/dist/lib/facts/stock/call.d.ts.map +1 -0
- package/dist/lib/facts/stock/call.js +281 -0
- package/dist/lib/facts/stock/call.js.map +1 -0
- package/dist/lib/facts/stock/capability.d.ts +39 -0
- package/dist/lib/facts/stock/capability.d.ts.map +1 -0
- package/dist/lib/facts/stock/capability.js +59 -0
- package/dist/lib/facts/stock/capability.js.map +1 -0
- package/dist/lib/facts/stock/ext-source.d.ts +51 -0
- package/dist/lib/facts/stock/ext-source.d.ts.map +1 -0
- package/dist/lib/facts/stock/ext-source.js +201 -0
- package/dist/lib/facts/stock/ext-source.js.map +1 -0
- package/dist/lib/facts/stock/frequency-fact.d.ts +59 -0
- package/dist/lib/facts/stock/frequency-fact.d.ts.map +1 -0
- package/dist/lib/facts/stock/frequency-fact.js +86 -0
- package/dist/lib/facts/stock/frequency-fact.js.map +1 -0
- package/dist/lib/facts/stock/frequency.d.ts +32 -0
- package/dist/lib/facts/stock/frequency.d.ts.map +1 -0
- package/dist/lib/facts/stock/frequency.js +48 -0
- package/dist/lib/facts/stock/frequency.js.map +1 -0
- package/dist/lib/facts/stock/index.d.ts +27 -0
- package/dist/lib/facts/stock/index.d.ts.map +1 -0
- package/dist/lib/facts/stock/index.js +28 -0
- package/dist/lib/facts/stock/index.js.map +1 -0
- package/dist/lib/facts/stock/normalize.d.ts +45 -0
- package/dist/lib/facts/stock/normalize.d.ts.map +1 -0
- package/dist/lib/facts/stock/normalize.js +135 -0
- package/dist/lib/facts/stock/normalize.js.map +1 -0
- package/dist/lib/facts/stock/phash.d.ts +55 -0
- package/dist/lib/facts/stock/phash.d.ts.map +1 -0
- package/dist/lib/facts/stock/phash.js +256 -0
- package/dist/lib/facts/stock/phash.js.map +1 -0
- package/dist/lib/facts/stock/rule-defaults.d.ts +72 -0
- package/dist/lib/facts/stock/rule-defaults.d.ts.map +1 -0
- package/dist/lib/facts/stock/rule-defaults.js +55 -0
- package/dist/lib/facts/stock/rule-defaults.js.map +1 -0
- package/dist/lib/facts/stock/send.d.ts +52 -0
- package/dist/lib/facts/stock/send.d.ts.map +1 -0
- package/dist/lib/facts/stock/send.js +148 -0
- package/dist/lib/facts/stock/send.js.map +1 -0
- package/dist/lib/facts/stock/unique-score.d.ts +138 -0
- package/dist/lib/facts/stock/unique-score.d.ts.map +1 -0
- package/dist/lib/facts/stock/unique-score.js +257 -0
- package/dist/lib/facts/stock/unique-score.js.map +1 -0
- package/dist/lib/facts/stock/unique-store.d.ts +420 -0
- package/dist/lib/facts/stock/unique-store.d.ts.map +1 -0
- package/dist/lib/facts/stock/unique-store.js +328 -0
- package/dist/lib/facts/stock/unique-store.js.map +1 -0
- package/dist/lib/facts/stock/unique.d.ts +35 -0
- package/dist/lib/facts/stock/unique.d.ts.map +1 -0
- package/dist/lib/facts/stock/unique.js +327 -0
- package/dist/lib/facts/stock/unique.js.map +1 -0
- package/dist/lib/facts/tools.d.ts +57 -0
- package/dist/lib/facts/tools.d.ts.map +1 -0
- package/dist/lib/facts/tools.js +325 -0
- package/dist/lib/facts/tools.js.map +1 -0
- package/dist/lib/facts/validate.d.ts +33 -0
- package/dist/lib/facts/validate.d.ts.map +1 -0
- package/dist/lib/facts/validate.js +137 -0
- package/dist/lib/facts/validate.js.map +1 -0
- package/dist/lib/hash.d.ts +44 -0
- package/dist/lib/hash.d.ts.map +1 -0
- package/dist/lib/hash.js +80 -0
- package/dist/lib/hash.js.map +1 -0
- package/dist/lib/http/client.d.ts +113 -0
- package/dist/lib/http/client.d.ts.map +1 -0
- package/dist/lib/http/client.js +330 -0
- package/dist/lib/http/client.js.map +1 -0
- package/dist/lib/ids.d.ts +17 -0
- package/dist/lib/ids.d.ts.map +1 -0
- package/dist/lib/ids.js +26 -0
- package/dist/lib/ids.js.map +1 -0
- package/dist/lib/ixo/attachments.d.ts +116 -0
- package/dist/lib/ixo/attachments.d.ts.map +1 -0
- package/dist/lib/ixo/attachments.js +290 -0
- package/dist/lib/ixo/attachments.js.map +1 -0
- package/dist/lib/ixo/authz.d.ts +40 -0
- package/dist/lib/ixo/authz.d.ts.map +1 -0
- package/dist/lib/ixo/authz.js +113 -0
- package/dist/lib/ixo/authz.js.map +1 -0
- package/dist/lib/ixo/blocksync/index.d.ts +90 -0
- package/dist/lib/ixo/blocksync/index.d.ts.map +1 -0
- package/dist/lib/ixo/blocksync/index.js +251 -0
- package/dist/lib/ixo/blocksync/index.js.map +1 -0
- package/dist/lib/ixo/blocksync/queries.d.ts +15 -0
- package/dist/lib/ixo/blocksync/queries.d.ts.map +1 -0
- package/dist/lib/ixo/blocksync/queries.js +144 -0
- package/dist/lib/ixo/blocksync/queries.js.map +1 -0
- package/dist/lib/ixo/blocksync/types.d.ts +184 -0
- package/dist/lib/ixo/blocksync/types.d.ts.map +1 -0
- package/dist/lib/ixo/blocksync/types.js +108 -0
- package/dist/lib/ixo/blocksync/types.js.map +1 -0
- package/dist/lib/ixo/cellnode.d.ts +35 -0
- package/dist/lib/ixo/cellnode.d.ts.map +1 -0
- package/dist/lib/ixo/cellnode.js +43 -0
- package/dist/lib/ixo/cellnode.js.map +1 -0
- package/dist/lib/ixo/chain-write.d.ts +130 -0
- package/dist/lib/ixo/chain-write.d.ts.map +1 -0
- package/dist/lib/ixo/chain-write.js +460 -0
- package/dist/lib/ixo/chain-write.js.map +1 -0
- package/dist/lib/ixo/chain.d.ts +1046 -0
- package/dist/lib/ixo/chain.d.ts.map +1 -0
- package/dist/lib/ixo/chain.js +279 -0
- package/dist/lib/ixo/chain.js.map +1 -0
- package/dist/lib/ixo/claim-bot.d.ts +49 -0
- package/dist/lib/ixo/claim-bot.d.ts.map +1 -0
- package/dist/lib/ixo/claim-bot.js +141 -0
- package/dist/lib/ixo/claim-bot.js.map +1 -0
- package/dist/lib/ixo/delegation-verify.d.ts +44 -0
- package/dist/lib/ixo/delegation-verify.d.ts.map +1 -0
- package/dist/lib/ixo/delegation-verify.js +101 -0
- package/dist/lib/ixo/delegation-verify.js.map +1 -0
- package/dist/lib/ixo/did.d.ts +13 -0
- package/dist/lib/ixo/did.d.ts.map +1 -0
- package/dist/lib/ixo/did.js +85 -0
- package/dist/lib/ixo/did.js.map +1 -0
- package/dist/lib/ixo/grant-chain.d.ts +55 -0
- package/dist/lib/ixo/grant-chain.d.ts.map +1 -0
- package/dist/lib/ixo/grant-chain.js +185 -0
- package/dist/lib/ixo/grant-chain.js.map +1 -0
- package/dist/lib/ixo/identity.d.ts +32 -0
- package/dist/lib/ixo/identity.d.ts.map +1 -0
- package/dist/lib/ixo/identity.js +104 -0
- package/dist/lib/ixo/identity.js.map +1 -0
- package/dist/lib/ixo/index.d.ts +118 -0
- package/dist/lib/ixo/index.d.ts.map +1 -0
- package/dist/lib/ixo/index.js +395 -0
- package/dist/lib/ixo/index.js.map +1 -0
- package/dist/lib/ixo/payment.d.ts +104 -0
- package/dist/lib/ixo/payment.d.ts.map +1 -0
- package/dist/lib/ixo/payment.js +136 -0
- package/dist/lib/ixo/payment.js.map +1 -0
- package/dist/lib/ixo/ucan-store.d.ts +30 -0
- package/dist/lib/ixo/ucan-store.d.ts.map +1 -0
- package/dist/lib/ixo/ucan-store.js +134 -0
- package/dist/lib/ixo/ucan-store.js.map +1 -0
- package/dist/lib/ixo/ucan.d.ts +96 -0
- package/dist/lib/ixo/ucan.d.ts.map +1 -0
- package/dist/lib/ixo/ucan.js +216 -0
- package/dist/lib/ixo/ucan.js.map +1 -0
- package/dist/lib/ixo/verified-read.d.ts +43 -0
- package/dist/lib/ixo/verified-read.d.ts.map +1 -0
- package/dist/lib/ixo/verified-read.js +73 -0
- package/dist/lib/ixo/verified-read.js.map +1 -0
- package/dist/lib/ixo/vfs.d.ts +27 -0
- package/dist/lib/ixo/vfs.d.ts.map +1 -0
- package/dist/lib/ixo/vfs.js +42 -0
- package/dist/lib/ixo/vfs.js.map +1 -0
- package/dist/lib/ixo/web-did.d.ts +7 -0
- package/dist/lib/ixo/web-did.d.ts.map +1 -0
- package/dist/lib/ixo/web-did.js +9 -0
- package/dist/lib/ixo/web-did.js.map +1 -0
- package/dist/lib/logger.d.ts +34 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +126 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/matrix/api.d.ts +57 -0
- package/dist/lib/matrix/api.d.ts.map +1 -0
- package/dist/lib/matrix/api.js +58 -0
- package/dist/lib/matrix/api.js.map +1 -0
- package/dist/lib/matrix/client.d.ts +41 -0
- package/dist/lib/matrix/client.d.ts.map +1 -0
- package/dist/lib/matrix/client.js +104 -0
- package/dist/lib/matrix/client.js.map +1 -0
- package/dist/lib/matrix/deliver.d.ts +224 -0
- package/dist/lib/matrix/deliver.d.ts.map +1 -0
- package/dist/lib/matrix/deliver.js +788 -0
- package/dist/lib/matrix/deliver.js.map +1 -0
- package/dist/lib/matrix/events.d.ts +114 -0
- package/dist/lib/matrix/events.d.ts.map +1 -0
- package/dist/lib/matrix/events.js +143 -0
- package/dist/lib/matrix/events.js.map +1 -0
- package/dist/lib/matrix/mxid.d.ts +24 -0
- package/dist/lib/matrix/mxid.d.ts.map +1 -0
- package/dist/lib/matrix/mxid.js +47 -0
- package/dist/lib/matrix/mxid.js.map +1 -0
- package/dist/lib/metrics.d.ts +105 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/metrics.js +204 -0
- package/dist/lib/metrics.js.map +1 -0
- package/dist/lib/oauth/approvals.d.ts +160 -0
- package/dist/lib/oauth/approvals.d.ts.map +1 -0
- package/dist/lib/oauth/approvals.js +273 -0
- package/dist/lib/oauth/approvals.js.map +1 -0
- package/dist/lib/oauth/standing.d.ts +152 -0
- package/dist/lib/oauth/standing.d.ts.map +1 -0
- package/dist/lib/oauth/standing.js +299 -0
- package/dist/lib/oauth/standing.js.map +1 -0
- package/dist/lib/oauth/token.d.ts +60 -0
- package/dist/lib/oauth/token.d.ts.map +1 -0
- package/dist/lib/oauth/token.js +129 -0
- package/dist/lib/oauth/token.js.map +1 -0
- package/dist/lib/payments/extend.d.ts +42 -0
- package/dist/lib/payments/extend.d.ts.map +1 -0
- package/dist/lib/payments/extend.js +98 -0
- package/dist/lib/payments/extend.js.map +1 -0
- package/dist/lib/payments/facilitator.d.ts +220 -0
- package/dist/lib/payments/facilitator.d.ts.map +1 -0
- package/dist/lib/payments/facilitator.js +451 -0
- package/dist/lib/payments/facilitator.js.map +1 -0
- package/dist/lib/payments/gate.d.ts +207 -0
- package/dist/lib/payments/gate.d.ts.map +1 -0
- package/dist/lib/payments/gate.js +481 -0
- package/dist/lib/payments/gate.js.map +1 -0
- package/dist/lib/payments/header-seal.d.ts +33 -0
- package/dist/lib/payments/header-seal.d.ts.map +1 -0
- package/dist/lib/payments/header-seal.js +76 -0
- package/dist/lib/payments/header-seal.js.map +1 -0
- package/dist/lib/payments/index.d.ts +12 -0
- package/dist/lib/payments/index.d.ts.map +1 -0
- package/dist/lib/payments/index.js +11 -0
- package/dist/lib/payments/index.js.map +1 -0
- package/dist/lib/payments/price.d.ts +25 -0
- package/dist/lib/payments/price.d.ts.map +1 -0
- package/dist/lib/payments/price.js +43 -0
- package/dist/lib/payments/price.js.map +1 -0
- package/dist/lib/payments/reconcile.d.ts +77 -0
- package/dist/lib/payments/reconcile.d.ts.map +1 -0
- package/dist/lib/payments/reconcile.js +317 -0
- package/dist/lib/payments/reconcile.js.map +1 -0
- package/dist/lib/payments/refund.d.ts +34 -0
- package/dist/lib/payments/refund.d.ts.map +1 -0
- package/dist/lib/payments/refund.js +123 -0
- package/dist/lib/payments/refund.js.map +1 -0
- package/dist/lib/payments/review-billing.d.ts +222 -0
- package/dist/lib/payments/review-billing.d.ts.map +1 -0
- package/dist/lib/payments/review-billing.js +609 -0
- package/dist/lib/payments/review-billing.js.map +1 -0
- package/dist/lib/payments/settle.d.ts +44 -0
- package/dist/lib/payments/settle.d.ts.map +1 -0
- package/dist/lib/payments/settle.js +306 -0
- package/dist/lib/payments/settle.js.map +1 -0
- package/dist/lib/payments/terms.d.ts +27 -0
- package/dist/lib/payments/terms.d.ts.map +1 -0
- package/dist/lib/payments/terms.js +21 -0
- package/dist/lib/payments/terms.js.map +1 -0
- package/dist/lib/payouts.d.ts +20 -0
- package/dist/lib/payouts.d.ts.map +1 -0
- package/dist/lib/payouts.js +30 -0
- package/dist/lib/payouts.js.map +1 -0
- package/dist/lib/readiness.d.ts +42 -0
- package/dist/lib/readiness.d.ts.map +1 -0
- package/dist/lib/readiness.js +130 -0
- package/dist/lib/readiness.js.map +1 -0
- package/dist/lib/redact.d.ts +23 -0
- package/dist/lib/redact.d.ts.map +1 -0
- package/dist/lib/redact.js +67 -0
- package/dist/lib/redact.js.map +1 -0
- package/dist/lib/register.d.ts +85 -0
- package/dist/lib/register.d.ts.map +1 -0
- package/dist/lib/register.js +390 -0
- package/dist/lib/register.js.map +1 -0
- package/dist/lib/review/attestation.d.ts +92 -0
- package/dist/lib/review/attestation.d.ts.map +1 -0
- package/dist/lib/review/attestation.js +264 -0
- package/dist/lib/review/attestation.js.map +1 -0
- package/dist/lib/review/reviewer-grant.d.ts +146 -0
- package/dist/lib/review/reviewer-grant.d.ts.map +1 -0
- package/dist/lib/review/reviewer-grant.js +359 -0
- package/dist/lib/review/reviewer-grant.js.map +1 -0
- package/dist/lib/review/tasks.d.ts +18 -0
- package/dist/lib/review/tasks.d.ts.map +1 -0
- package/dist/lib/review/tasks.js +36 -0
- package/dist/lib/review/tasks.js.map +1 -0
- package/dist/lib/sentry.d.ts +89 -0
- package/dist/lib/sentry.d.ts.map +1 -0
- package/dist/lib/sentry.js +284 -0
- package/dist/lib/sentry.js.map +1 -0
- package/dist/lib/spans.d.ts +14 -0
- package/dist/lib/spans.d.ts.map +1 -0
- package/dist/lib/spans.js +28 -0
- package/dist/lib/spans.js.map +1 -0
- package/dist/lib/tracing.d.ts +31 -0
- package/dist/lib/tracing.d.ts.map +1 -0
- package/dist/lib/tracing.js +66 -0
- package/dist/lib/tracing.js.map +1 -0
- package/dist/lib/ttl-cache.d.ts +26 -0
- package/dist/lib/ttl-cache.d.ts.map +1 -0
- package/dist/lib/ttl-cache.js +61 -0
- package/dist/lib/ttl-cache.js.map +1 -0
- package/dist/lib/validator.d.ts +19 -0
- package/dist/lib/validator.d.ts.map +1 -0
- package/dist/lib/validator.js +32 -0
- package/dist/lib/validator.js.map +1 -0
- package/dist/lib/work-order/form.d.ts +40 -0
- package/dist/lib/work-order/form.d.ts.map +1 -0
- package/dist/lib/work-order/form.js +316 -0
- package/dist/lib/work-order/form.js.map +1 -0
- package/dist/lib/work-order/index.d.ts +20 -0
- package/dist/lib/work-order/index.d.ts.map +1 -0
- package/dist/lib/work-order/index.js +66 -0
- package/dist/lib/work-order/index.js.map +1 -0
- package/dist/middleware/api/audit.d.ts +9 -0
- package/dist/middleware/api/audit.d.ts.map +1 -0
- package/dist/middleware/api/audit.js +38 -0
- package/dist/middleware/api/audit.js.map +1 -0
- package/dist/middleware/api/auth.d.ts +29 -0
- package/dist/middleware/api/auth.d.ts.map +1 -0
- package/dist/middleware/api/auth.js +105 -0
- package/dist/middleware/api/auth.js.map +1 -0
- package/dist/middleware/api/console.d.ts +92 -0
- package/dist/middleware/api/console.d.ts.map +1 -0
- package/dist/middleware/api/console.js +446 -0
- package/dist/middleware/api/console.js.map +1 -0
- package/dist/middleware/api/errors.d.ts +48 -0
- package/dist/middleware/api/errors.d.ts.map +1 -0
- package/dist/middleware/api/errors.js +133 -0
- package/dist/middleware/api/errors.js.map +1 -0
- package/dist/middleware/api/idempotency.d.ts +23 -0
- package/dist/middleware/api/idempotency.d.ts.map +1 -0
- package/dist/middleware/api/idempotency.js +158 -0
- package/dist/middleware/api/idempotency.js.map +1 -0
- package/dist/middleware/api/keys.d.ts +14 -0
- package/dist/middleware/api/keys.d.ts.map +1 -0
- package/dist/middleware/api/keys.js +66 -0
- package/dist/middleware/api/keys.js.map +1 -0
- package/dist/middleware/api/membership.d.ts +32 -0
- package/dist/middleware/api/membership.d.ts.map +1 -0
- package/dist/middleware/api/membership.js +48 -0
- package/dist/middleware/api/membership.js.map +1 -0
- package/dist/middleware/api/oauth.d.ts +28 -0
- package/dist/middleware/api/oauth.d.ts.map +1 -0
- package/dist/middleware/api/oauth.js +109 -0
- package/dist/middleware/api/oauth.js.map +1 -0
- package/dist/middleware/api/rate-limit.d.ts +23 -0
- package/dist/middleware/api/rate-limit.d.ts.map +1 -0
- package/dist/middleware/api/rate-limit.js +70 -0
- package/dist/middleware/api/rate-limit.js.map +1 -0
- package/dist/middleware/api/types.d.ts +92 -0
- package/dist/middleware/api/types.d.ts.map +1 -0
- package/dist/middleware/api/types.js +7 -0
- package/dist/middleware/api/types.js.map +1 -0
- package/dist/middleware/api/wait.d.ts +21 -0
- package/dist/middleware/api/wait.d.ts.map +1 -0
- package/dist/middleware/api/wait.js +85 -0
- package/dist/middleware/api/wait.js.map +1 -0
- package/dist/middleware/capability.d.ts +32 -0
- package/dist/middleware/capability.d.ts.map +1 -0
- package/dist/middleware/capability.js +113 -0
- package/dist/middleware/capability.js.map +1 -0
- package/dist/middleware/database.d.ts +14 -0
- package/dist/middleware/database.d.ts.map +1 -0
- package/dist/middleware/database.js +18 -0
- package/dist/middleware/database.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +13 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +127 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/observability.d.ts +32 -0
- package/dist/middleware/observability.d.ts.map +1 -0
- package/dist/middleware/observability.js +134 -0
- package/dist/middleware/observability.js.map +1 -0
- package/dist/middleware/rate-limit.d.ts +16 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -0
- package/dist/middleware/rate-limit.js +56 -0
- package/dist/middleware/rate-limit.js.map +1 -0
- package/dist/middleware/ucan-auth.d.ts +39 -0
- package/dist/middleware/ucan-auth.d.ts.map +1 -0
- package/dist/middleware/ucan-auth.js +278 -0
- package/dist/middleware/ucan-auth.js.map +1 -0
- package/dist/networks.d.ts +34 -0
- package/dist/networks.d.ts.map +1 -0
- package/dist/networks.js +49 -0
- package/dist/networks.js.map +1 -0
- package/dist/oracle.d.ts +193 -0
- package/dist/oracle.d.ts.map +1 -0
- package/dist/oracle.js +245 -0
- package/dist/oracle.js.map +1 -0
- package/dist/routes/health.d.ts +16 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +29 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/v1/admin.d.ts +18 -0
- package/dist/routes/v1/admin.d.ts.map +1 -0
- package/dist/routes/v1/admin.js +101 -0
- package/dist/routes/v1/admin.js.map +1 -0
- package/dist/routes/v1/api/admin-claims.d.ts +14 -0
- package/dist/routes/v1/api/admin-claims.d.ts.map +1 -0
- package/dist/routes/v1/api/admin-claims.js +82 -0
- package/dist/routes/v1/api/admin-claims.js.map +1 -0
- package/dist/routes/v1/api/admin-facilitator.d.ts +20 -0
- package/dist/routes/v1/api/admin-facilitator.d.ts.map +1 -0
- package/dist/routes/v1/api/admin-facilitator.js +64 -0
- package/dist/routes/v1/api/admin-facilitator.js.map +1 -0
- package/dist/routes/v1/api/admin.d.ts +9 -0
- package/dist/routes/v1/api/admin.d.ts.map +1 -0
- package/dist/routes/v1/api/admin.js +110 -0
- package/dist/routes/v1/api/admin.js.map +1 -0
- package/dist/routes/v1/api/audit.d.ts +8 -0
- package/dist/routes/v1/api/audit.d.ts.map +1 -0
- package/dist/routes/v1/api/audit.js +56 -0
- package/dist/routes/v1/api/audit.js.map +1 -0
- package/dist/routes/v1/api/batch.d.ts +17 -0
- package/dist/routes/v1/api/batch.d.ts.map +1 -0
- package/dist/routes/v1/api/batch.js +192 -0
- package/dist/routes/v1/api/batch.js.map +1 -0
- package/dist/routes/v1/api/claims-read.d.ts +43 -0
- package/dist/routes/v1/api/claims-read.d.ts.map +1 -0
- package/dist/routes/v1/api/claims-read.js +123 -0
- package/dist/routes/v1/api/claims-read.js.map +1 -0
- package/dist/routes/v1/api/claims.d.ts +131 -0
- package/dist/routes/v1/api/claims.d.ts.map +1 -0
- package/dist/routes/v1/api/claims.js +407 -0
- package/dist/routes/v1/api/claims.js.map +1 -0
- package/dist/routes/v1/api/collections-link.d.ts +14 -0
- package/dist/routes/v1/api/collections-link.d.ts.map +1 -0
- package/dist/routes/v1/api/collections-link.js +97 -0
- package/dist/routes/v1/api/collections-link.js.map +1 -0
- package/dist/routes/v1/api/export.d.ts +48 -0
- package/dist/routes/v1/api/export.d.ts.map +1 -0
- package/dist/routes/v1/api/export.js +251 -0
- package/dist/routes/v1/api/export.js.map +1 -0
- package/dist/routes/v1/api/index.d.ts +16 -0
- package/dist/routes/v1/api/index.d.ts.map +1 -0
- package/dist/routes/v1/api/index.js +68 -0
- package/dist/routes/v1/api/index.js.map +1 -0
- package/dist/routes/v1/api/keys.d.ts +9 -0
- package/dist/routes/v1/api/keys.d.ts.map +1 -0
- package/dist/routes/v1/api/keys.js +95 -0
- package/dist/routes/v1/api/keys.js.map +1 -0
- package/dist/routes/v1/api/me.d.ts +21 -0
- package/dist/routes/v1/api/me.d.ts.map +1 -0
- package/dist/routes/v1/api/me.js +122 -0
- package/dist/routes/v1/api/me.js.map +1 -0
- package/dist/routes/v1/api/members.d.ts +17 -0
- package/dist/routes/v1/api/members.d.ts.map +1 -0
- package/dist/routes/v1/api/members.js +406 -0
- package/dist/routes/v1/api/members.js.map +1 -0
- package/dist/routes/v1/api/meta.d.ts +12 -0
- package/dist/routes/v1/api/meta.d.ts.map +1 -0
- package/dist/routes/v1/api/meta.js +59 -0
- package/dist/routes/v1/api/meta.js.map +1 -0
- package/dist/routes/v1/api/openapi.gen.d.ts +2 -0
- package/dist/routes/v1/api/openapi.gen.d.ts.map +1 -0
- package/dist/routes/v1/api/openapi.gen.js +7 -0
- package/dist/routes/v1/api/openapi.gen.js.map +1 -0
- package/dist/routes/v1/api/protocols.d.ts +22 -0
- package/dist/routes/v1/api/protocols.d.ts.map +1 -0
- package/dist/routes/v1/api/protocols.js +153 -0
- package/dist/routes/v1/api/protocols.js.map +1 -0
- package/dist/routes/v1/api/review-billing.d.ts +18 -0
- package/dist/routes/v1/api/review-billing.d.ts.map +1 -0
- package/dist/routes/v1/api/review-billing.js +196 -0
- package/dist/routes/v1/api/review-billing.js.map +1 -0
- package/dist/routes/v1/api/review.d.ts +30 -0
- package/dist/routes/v1/api/review.d.ts.map +1 -0
- package/dist/routes/v1/api/review.js +302 -0
- package/dist/routes/v1/api/review.js.map +1 -0
- package/dist/routes/v1/api/sources.d.ts +10 -0
- package/dist/routes/v1/api/sources.d.ts.map +1 -0
- package/dist/routes/v1/api/sources.js +293 -0
- package/dist/routes/v1/api/sources.js.map +1 -0
- package/dist/routes/v1/api/uploads.d.ts +37 -0
- package/dist/routes/v1/api/uploads.d.ts.map +1 -0
- package/dist/routes/v1/api/uploads.js +414 -0
- package/dist/routes/v1/api/uploads.js.map +1 -0
- package/dist/routes/v1/api/views.d.ts +18 -0
- package/dist/routes/v1/api/views.d.ts.map +1 -0
- package/dist/routes/v1/api/views.js +95 -0
- package/dist/routes/v1/api/views.js.map +1 -0
- package/dist/routes/v1/api/webhooks.d.ts +14 -0
- package/dist/routes/v1/api/webhooks.d.ts.map +1 -0
- package/dist/routes/v1/api/webhooks.js +282 -0
- package/dist/routes/v1/api/webhooks.js.map +1 -0
- package/dist/routes/v1/api/work-orders.d.ts +45 -0
- package/dist/routes/v1/api/work-orders.d.ts.map +1 -0
- package/dist/routes/v1/api/work-orders.js +171 -0
- package/dist/routes/v1/api/work-orders.js.map +1 -0
- package/dist/routes/v1/claims.d.ts +21 -0
- package/dist/routes/v1/claims.d.ts.map +1 -0
- package/dist/routes/v1/claims.js +153 -0
- package/dist/routes/v1/claims.js.map +1 -0
- package/dist/routes/v1/collections.d.ts +45 -0
- package/dist/routes/v1/collections.d.ts.map +1 -0
- package/dist/routes/v1/collections.js +201 -0
- package/dist/routes/v1/collections.js.map +1 -0
- package/dist/routes/v1/index.d.ts +13 -0
- package/dist/routes/v1/index.d.ts.map +1 -0
- package/dist/routes/v1/index.js +41 -0
- package/dist/routes/v1/index.js.map +1 -0
- package/dist/routes/v1/info.d.ts +14 -0
- package/dist/routes/v1/info.d.ts.map +1 -0
- package/dist/routes/v1/info.js +75 -0
- package/dist/routes/v1/info.js.map +1 -0
- package/dist/routes/v1/mcp/index.d.ts +33 -0
- package/dist/routes/v1/mcp/index.d.ts.map +1 -0
- package/dist/routes/v1/mcp/index.js +252 -0
- package/dist/routes/v1/mcp/index.js.map +1 -0
- package/dist/routes/v1/mcp/oauth.d.ts +27 -0
- package/dist/routes/v1/mcp/oauth.d.ts.map +1 -0
- package/dist/routes/v1/mcp/oauth.js +500 -0
- package/dist/routes/v1/mcp/oauth.js.map +1 -0
- package/dist/routes/v1/mcp/tools.d.ts +71 -0
- package/dist/routes/v1/mcp/tools.d.ts.map +1 -0
- package/dist/routes/v1/mcp/tools.js +432 -0
- package/dist/routes/v1/mcp/tools.js.map +1 -0
- package/dist/routes/v1/mcp/ui.d.ts +45 -0
- package/dist/routes/v1/mcp/ui.d.ts.map +1 -0
- package/dist/routes/v1/mcp/ui.js +454 -0
- package/dist/routes/v1/mcp/ui.js.map +1 -0
- package/dist/routes/v1/oauth.d.ts +29 -0
- package/dist/routes/v1/oauth.d.ts.map +1 -0
- package/dist/routes/v1/oauth.js +256 -0
- package/dist/routes/v1/oauth.js.map +1 -0
- package/dist/routes/v1/reviewers.d.ts +22 -0
- package/dist/routes/v1/reviewers.d.ts.map +1 -0
- package/dist/routes/v1/reviewers.js +165 -0
- package/dist/routes/v1/reviewers.js.map +1 -0
- package/dist/routes/v1/reviews.d.ts +38 -0
- package/dist/routes/v1/reviews.d.ts.map +1 -0
- package/dist/routes/v1/reviews.js +234 -0
- package/dist/routes/v1/reviews.js.map +1 -0
- package/dist/routes/v1/shared.d.ts +586 -0
- package/dist/routes/v1/shared.d.ts.map +1 -0
- package/dist/routes/v1/shared.js +229 -0
- package/dist/routes/v1/shared.js.map +1 -0
- package/dist/routes/well-known.d.ts +15 -0
- package/dist/routes/well-known.d.ts.map +1 -0
- package/dist/routes/well-known.js +35 -0
- package/dist/routes/well-known.js.map +1 -0
- package/dist/runtime.d.ts +100 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +144 -0
- package/dist/runtime.js.map +1 -0
- package/dist/testing/fake-tools.d.ts +104 -0
- package/dist/testing/fake-tools.d.ts.map +1 -0
- package/dist/testing/fake-tools.js +213 -0
- package/dist/testing/fake-tools.js.map +1 -0
- package/dist/testing/index.d.ts +54 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +104 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/samples.d.ts +70 -0
- package/dist/testing/samples.d.ts.map +1 -0
- package/dist/testing/samples.js +92 -0
- package/dist/testing/samples.js.map +1 -0
- package/dist/workflows/claim-ingest.d.ts +250 -0
- package/dist/workflows/claim-ingest.d.ts.map +1 -0
- package/dist/workflows/claim-ingest.js +1020 -0
- package/dist/workflows/claim-ingest.js.map +1 -0
- package/dist/workflows/claim-source.d.ts +25 -0
- package/dist/workflows/claim-source.d.ts.map +1 -0
- package/dist/workflows/claim-source.js +107 -0
- package/dist/workflows/claim-source.js.map +1 -0
- package/dist/workflows/review-complete.d.ts +82 -0
- package/dist/workflows/review-complete.d.ts.map +1 -0
- package/dist/workflows/review-complete.js +455 -0
- package/dist/workflows/review-complete.js.map +1 -0
- package/dist/workflows/steps.d.ts +125 -0
- package/dist/workflows/steps.d.ts.map +1 -0
- package/dist/workflows/steps.js +325 -0
- package/dist/workflows/steps.js.map +1 -0
- package/docs/api.md +2595 -0
- package/docs/guide.md +1525 -0
- package/migrations/0000_init.sql +108 -0
- package/migrations/0001_review_attestation.sql +1 -0
- package/migrations/0002_decisions_facts.sql +1 -0
- package/migrations/0003_api_lane.sql +171 -0
- package/migrations/0004_api_v1_1.sql +19 -0
- package/migrations/0005_member_notify.sql +3 -0
- package/migrations/0006_source_collections.sql +16 -0
- package/migrations/0007_api_settlement.sql +27 -0
- package/migrations/0008_review_extend.sql +1 -0
- package/migrations/0009_card_refunds.sql +4 -0
- package/migrations/0010_even_scorpion.sql +16 -0
- package/migrations/0011_mcp_oauth.sql +27 -0
- package/migrations/0012_mcp_standing.sql +21 -0
- package/migrations/0013_unknown_krista_starr.sql +2 -0
- package/migrations/0014_last_carnage.sql +14 -0
- package/migrations/0015_company_authority.sql +26 -0
- package/migrations/0016_owner_only_links.sql +6 -0
- package/migrations/0017_organisations.sql +35 -0
- package/migrations/0018_remove_app_signed.sql +4 -0
- package/migrations/0019_submitted_via.sql +2 -0
- package/migrations/0020_drop_decision_to_pay.sql +4 -0
- package/migrations/0021_manual_erase.sql +25 -0
- package/migrations/0022_errored_facts.sql +1 -0
- package/migrations/0023_review_billing.sql +20 -0
- package/migrations/0024_pending_task_details.sql +1 -0
- package/migrations/meta/0000_snapshot.json +707 -0
- package/migrations/meta/0001_snapshot.json +714 -0
- package/migrations/meta/0002_snapshot.json +721 -0
- package/migrations/meta/0003_snapshot.json +1845 -0
- package/migrations/meta/0004_snapshot.json +1969 -0
- package/migrations/meta/0005_snapshot.json +1991 -0
- package/migrations/meta/0006_snapshot.json +2097 -0
- package/migrations/meta/0007_snapshot.json +2128 -0
- package/migrations/meta/0008_snapshot.json +2133 -0
- package/migrations/meta/0009_snapshot.json +2161 -0
- package/migrations/meta/0010_snapshot.json +2265 -0
- package/migrations/meta/0011_snapshot.json +2448 -0
- package/migrations/meta/0012_snapshot.json +2577 -0
- package/migrations/meta/0013_snapshot.json +2594 -0
- package/migrations/meta/0014_snapshot.json +2602 -0
- package/migrations/meta/0015_snapshot.json +2778 -0
- package/migrations/meta/0016_snapshot.json +2778 -0
- package/migrations/meta/0017_snapshot.json +2792 -0
- package/migrations/meta/0018_snapshot.json +2778 -0
- package/migrations/meta/0019_snapshot.json +2792 -0
- package/migrations/meta/0020_snapshot.json +2785 -0
- package/migrations/meta/0021_snapshot.json +2762 -0
- package/migrations/meta/0022_snapshot.json +2769 -0
- package/migrations/meta/0023_snapshot.json +2900 -0
- package/migrations/meta/0024_snapshot.json +2907 -0
- package/migrations/meta/_journal.json +181 -0
- package/openapi/decision-api.yaml +12204 -0
- package/package.json +123 -4
- package/skills/README.md +19 -0
- package/skills/add-openhands-support/SKILL.md +113 -0
- package/skills/create-collection/SKILL.md +199 -0
- package/skills/create-collection/reference/claims-stack.md +106 -0
- package/skills/create-collection/reference/collection.md +111 -0
- package/skills/create-oracle/SKILL.md +400 -0
- package/skills/create-rubric/SKILL.md +130 -0
- package/skills/create-rubric/reference/format-cheatsheet.md +186 -0
- package/skills/create-rubric/templates/claim-form.example.json +60 -0
- package/skills/decision-api-client/SKILL.md +236 -0
- package/skills/decision-api-oracle/SKILL.md +336 -0
- package/skills/publish-protocol/SKILL.md +151 -0
- package/skills/publish-protocol/reference/publishing.md +116 -0
- package/skills/reference/engine-contract.md +222 -0
- package/skills/write-facts/SKILL.md +221 -0
- package/skills/write-facts/reference/examples/http-vendor.ts +88 -0
- package/skills/write-facts/reference/examples/price-matches-agreement.ts +67 -0
- package/skills/write-facts/reference/facts-api.md +232 -0
- package/templates/project/.dev.vars.example +93 -0
- package/templates/project/.editorconfig +9 -0
- package/templates/project/CLAUDE.md +45 -0
- package/templates/project/README.md +199 -0
- package/templates/project/biome.json +37 -0
- package/templates/project/gitignore +29 -0
- package/templates/project/package.json +32 -0
- package/templates/project/src/facts/index.ts +19 -0
- package/templates/project/src/index.ts +25 -0
- package/templates/project/test/api-lane.test.ts +57 -0
- package/templates/project/test/facts.test.ts +14 -0
- package/templates/project/tsconfig.json +25 -0
- package/templates/project/vitest.config.ts +13 -0
- package/templates/project/wrangler.jsonc +446 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Answering an API claim's review (Go Prod §10, `POST /v1/api/claims/:claimId/review`): the lane
|
|
3
|
+
* half of the route S3 serves. The chain lane's twin is routes/v1/reviews.ts, and the checks are
|
|
4
|
+
* the same, in the same fail-closed order — required attestation, pending, coverage, not yet
|
|
5
|
+
* folded, then the signature — with ONE difference in who the reviewer is. A MEMBER's issuer is
|
|
6
|
+
* a `did:key` they registered on THIS source as their reviewer key (`api_members.reviewerDid`),
|
|
7
|
+
* and that member must hold `claims/review` over the claim's protocol right now (§3.4 — see
|
|
8
|
+
* `mayReview`); the key is the document, so the signature check needs no network
|
|
9
|
+
* (lib/review/attestation.ts). Its `reviewerGrant` is two links — its stored access from a
|
|
10
|
+
* controller, then its own grant to that key (`parseMemberReviewGrant`). A ROOT — a current controller of the source's organisation,
|
|
11
|
+
* invoking as itself (owner 2026-10-10) — has no member row: its issuer is its own `did:ixo`, the
|
|
12
|
+
* `kid` a key on that DID's document, and it carries a `reviewerGrant` to itself
|
|
13
|
+
* (`parseSelfReviewGrant`) that the fold forwards; the engine records it as `rootKind:
|
|
14
|
+
* company-controller` and re-checks the controller live. The engine re-verifies both, and
|
|
15
|
+
* refuses a company decision's fold without a grant, so every answer carries one.
|
|
16
|
+
*
|
|
17
|
+
* A paid claim's review closes at its `answerBy` (record.ts `answerByOf`: the reservation's expiry
|
|
18
|
+
* less a margin): past it an answer is refused `REVIEW_EXPIRED` before anything is verified or
|
|
19
|
+
* written, since a fold would produce a receipt nothing can be settled against any more — except
|
|
20
|
+
* the SAME signed answer again when it first landed in time (a client retrying a 503). This is
|
|
21
|
+
* the one door to an API-lane fold (the chain route 404s an API claim: it is no watched
|
|
22
|
+
* collection), so the check lives here and nowhere else.
|
|
23
|
+
*
|
|
24
|
+
* Every check passes or NOTHING is written. Then the answers land (a re-answer before the fold
|
|
25
|
+
* replaces them and clears a `foldError` — the "try again" path), the timeline says so, and
|
|
26
|
+
* `ReviewComplete` is spawned — or an errored instance restarted — to fold them.
|
|
27
|
+
*
|
|
28
|
+
* Refusals come back as values with an App. A code (`API_ERROR_STATUS` gives the status), never
|
|
29
|
+
* thrown: the route owns the envelope. Only transient trouble (D1, the Workflows API) throws.
|
|
30
|
+
*/
|
|
31
|
+
import type { Config } from "../../config.js";
|
|
32
|
+
import { type ApiErrorCode, type ReviewRequest, type ReviewRow } from "../../contracts/index.js";
|
|
33
|
+
import { type Database } from "../../db/client.js";
|
|
34
|
+
import type { OracleEnv } from "../../env.js";
|
|
35
|
+
import type { BlocksyncDeps } from "../ixo/blocksync/types.js";
|
|
36
|
+
export type AnswerReviewResult = {
|
|
37
|
+
ok: true;
|
|
38
|
+
review: ReviewRow;
|
|
39
|
+
} | {
|
|
40
|
+
ok: false;
|
|
41
|
+
code: ApiErrorCode;
|
|
42
|
+
message: string;
|
|
43
|
+
details?: unknown;
|
|
44
|
+
};
|
|
45
|
+
export declare function answerApiReview(env: OracleEnv, input: {
|
|
46
|
+
sourceId: string;
|
|
47
|
+
claimId: string;
|
|
48
|
+
request: ReviewRequest;
|
|
49
|
+
/** The invoker's did:ixo when it is a ROOT of the source (the console's live controller check:
|
|
50
|
+
* `MemberCaller.controller`); absent for a member, a key or an AI app. */
|
|
51
|
+
controllerDid?: string;
|
|
52
|
+
}): Promise<AnswerReviewResult>;
|
|
53
|
+
/**
|
|
54
|
+
* The fold's re-check of an API answer's reviewer (workflows/review-complete.ts), the API twin of
|
|
55
|
+
* the chain lane's fold-time gate. The answer was verified whole at the door; only what can change
|
|
56
|
+
* since is read again, with no signature or DID work: a ROOT (a `did:ixo` reviewer — a member's is
|
|
57
|
+
* always its `did:key`) is still a controller of the source's organisation; a MEMBER still holds
|
|
58
|
+
* its reviewer key, still reviews this protocol now (`mayReview`: revoked, expired, removed or
|
|
59
|
+
* re-granted narrower), its row still names the role grant the answer's first link is (a re-grant
|
|
60
|
+
* replaced it), and that link's issuer is still a controller (one roots read for both paths). Neither
|
|
61
|
+
* may be the oracle's owner (`assertNotOracle`: an owner set or changed since the answer). Revocation is the
|
|
62
|
+
* oracle's alone — the engine keeps none — so this is where a revoke between answer and fold is
|
|
63
|
+
* seen. Answers the stored grant the fold forwards; throws `REVIEWER_GRANT_INVALID` /
|
|
64
|
+
* `REVIEWER_NOT_AUTHORIZED` (`details.reason`), Blocksync trouble a 503.
|
|
65
|
+
*/
|
|
66
|
+
export declare function recheckApiReviewer(deps: {
|
|
67
|
+
db: Database;
|
|
68
|
+
chain: BlocksyncDeps & {
|
|
69
|
+
config: Config;
|
|
70
|
+
};
|
|
71
|
+
}, review: {
|
|
72
|
+
scopeId: string;
|
|
73
|
+
reviewerDid: string;
|
|
74
|
+
reviewerGrant: string | null;
|
|
75
|
+
}): Promise<string>;
|
|
76
|
+
//# sourceMappingURL=review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/lib/api-lane/review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,YAAY,EAAU,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAChG,OAAO,EAAE,KAAK,QAAQ,EAAS,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAK3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAiB5D,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAC/B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAS1E,wBAAsB,eAAe,CACnC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE;IACL,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,aAAa,CAAC;IACvB;+EAC2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GACA,OAAO,CAAC,kBAAkB,CAAC,CAmP7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,aAAa,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EACjE,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7E,OAAO,CAAC,MAAM,CAAC,CA6DjB"}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Answering an API claim's review (Go Prod §10, `POST /v1/api/claims/:claimId/review`): the lane
|
|
3
|
+
* half of the route S3 serves. The chain lane's twin is routes/v1/reviews.ts, and the checks are
|
|
4
|
+
* the same, in the same fail-closed order — required attestation, pending, coverage, not yet
|
|
5
|
+
* folded, then the signature — with ONE difference in who the reviewer is. A MEMBER's issuer is
|
|
6
|
+
* a `did:key` they registered on THIS source as their reviewer key (`api_members.reviewerDid`),
|
|
7
|
+
* and that member must hold `claims/review` over the claim's protocol right now (§3.4 — see
|
|
8
|
+
* `mayReview`); the key is the document, so the signature check needs no network
|
|
9
|
+
* (lib/review/attestation.ts). Its `reviewerGrant` is two links — its stored access from a
|
|
10
|
+
* controller, then its own grant to that key (`parseMemberReviewGrant`). A ROOT — a current controller of the source's organisation,
|
|
11
|
+
* invoking as itself (owner 2026-10-10) — has no member row: its issuer is its own `did:ixo`, the
|
|
12
|
+
* `kid` a key on that DID's document, and it carries a `reviewerGrant` to itself
|
|
13
|
+
* (`parseSelfReviewGrant`) that the fold forwards; the engine records it as `rootKind:
|
|
14
|
+
* company-controller` and re-checks the controller live. The engine re-verifies both, and
|
|
15
|
+
* refuses a company decision's fold without a grant, so every answer carries one.
|
|
16
|
+
*
|
|
17
|
+
* A paid claim's review closes at its `answerBy` (record.ts `answerByOf`: the reservation's expiry
|
|
18
|
+
* less a margin): past it an answer is refused `REVIEW_EXPIRED` before anything is verified or
|
|
19
|
+
* written, since a fold would produce a receipt nothing can be settled against any more — except
|
|
20
|
+
* the SAME signed answer again when it first landed in time (a client retrying a 503). This is
|
|
21
|
+
* the one door to an API-lane fold (the chain route 404s an API claim: it is no watched
|
|
22
|
+
* collection), so the check lives here and nowhere else.
|
|
23
|
+
*
|
|
24
|
+
* Every check passes or NOTHING is written. Then the answers land (a re-answer before the fold
|
|
25
|
+
* replaces them and clears a `foldError` — the "try again" path), the timeline says so, and
|
|
26
|
+
* `ReviewComplete` is spawned — or an errored instance restarted — to fold them.
|
|
27
|
+
*
|
|
28
|
+
* Refusals come back as values with an App. A code (`API_ERROR_STATUS` gives the status), never
|
|
29
|
+
* thrown: the route owns the envelope. Only transient trouble (D1, the Workflows API) throws.
|
|
30
|
+
*/
|
|
31
|
+
import { and, eq, isNotNull, isNull } from "drizzle-orm";
|
|
32
|
+
import { covers } from "../../contracts/index.js";
|
|
33
|
+
import { getDb } from "../../db/client.js";
|
|
34
|
+
import { apiCharges, apiMembers, apiSources, claimReviews } from "../../db/schema.js";
|
|
35
|
+
import { fmtTime } from "../email/template.js";
|
|
36
|
+
import { AppError } from "../errors.js";
|
|
37
|
+
import { reviewInstanceIdFor } from "../ids.js";
|
|
38
|
+
import { depsFromEnv } from "../ixo/index.js";
|
|
39
|
+
import { decode, Invalid, proofsOf, Refused, summarize } from "../ixo/grant-chain.js";
|
|
40
|
+
import { getDIDWeb } from "../ixo/identity.js";
|
|
41
|
+
import { verifyReviewAttestation } from "../review/attestation.js";
|
|
42
|
+
import { assertNotOracle, invalid, notAuthorized, parseMemberReviewGrant, parseSelfReviewGrant, } from "../review/reviewer-grant.js";
|
|
43
|
+
import { sourceRoots } from "./company.js";
|
|
44
|
+
import { parseApiScopeId } from "./ids.js";
|
|
45
|
+
import { liveGrant, reachesProtocol } from "./members.js";
|
|
46
|
+
import { answerByOf } from "./record.js";
|
|
47
|
+
import { recordEvents } from "./timeline.js";
|
|
48
|
+
const refuse = (code, message, details) => ({
|
|
49
|
+
ok: false,
|
|
50
|
+
code,
|
|
51
|
+
message,
|
|
52
|
+
...(details === undefined ? {} : { details }),
|
|
53
|
+
});
|
|
54
|
+
export async function answerApiReview(env, input) {
|
|
55
|
+
const { sourceId, claimId, request, controllerDid } = input;
|
|
56
|
+
const { answers, attestation, reviewerGrant } = request;
|
|
57
|
+
if (!attestation) {
|
|
58
|
+
return refuse("ATTESTATION_REQUIRED", "Review answers must be signed by the reviewer. Answer from the Decision Console, which signs them for you.");
|
|
59
|
+
}
|
|
60
|
+
// Who signed? Read unverified only to pick the path — the verification below is what proves it.
|
|
61
|
+
const issuer = issuerOf(attestation);
|
|
62
|
+
// A root answers in its own name with its grant to itself; a member with the two-link grant to
|
|
63
|
+
// its reviewer key. No grant, no review — the engine refuses a company decision's fold without
|
|
64
|
+
// one — so a missing one is the request's shape, refused before any read (as the chain route).
|
|
65
|
+
const root = !!controllerDid && issuer === controllerDid;
|
|
66
|
+
if (!reviewerGrant) {
|
|
67
|
+
return refuse("REVIEWER_GRANT_INVALID", root
|
|
68
|
+
? "An organisation controller's review must carry reviewerGrant: a claims/review grant from your account to itself on this source, signed with the key that signed the answers. Answer from the Decision Console, which signs it for you."
|
|
69
|
+
: "A review must carry reviewerGrant: your access to this source from the organisation, then your claims/review grant to your reviewer key (at most 30 days each). Answer from the Decision Console, which signs it for you.", { reason: "absent" });
|
|
70
|
+
}
|
|
71
|
+
const { config, logger, trace } = depsFromEnv(env);
|
|
72
|
+
const db = getDb(env);
|
|
73
|
+
const decision = await db.query.decisions.findFirst({
|
|
74
|
+
where: (t, { eq: eqOp }) => eqOp(t.claimId, claimId),
|
|
75
|
+
});
|
|
76
|
+
const scope = decision && parseApiScopeId(decision.collectionId);
|
|
77
|
+
// Another source's claim does not exist (§14: 404, never 403).
|
|
78
|
+
if (!decision || !scope || scope.sourceId !== sourceId) {
|
|
79
|
+
return refuse("NOT_FOUND", `Claim ${claimId} was not found for this source.`);
|
|
80
|
+
}
|
|
81
|
+
// Erased answers (the organisation's erase — nothing else deletes them) can no longer be folded:
|
|
82
|
+
// the engine needs the body back, so an answer now would be accepted and then fail forever.
|
|
83
|
+
const claim = await db.query.apiClaims.findFirst({
|
|
84
|
+
columns: { bodyErasedAt: true },
|
|
85
|
+
where: (t, { eq: eqOp }) => eqOp(t.claimId, claimId),
|
|
86
|
+
});
|
|
87
|
+
if (claim?.bodyErasedAt) {
|
|
88
|
+
return refuse("NOT_PENDING_REVIEW", "This claim's answers were erased, so it can no longer be reviewed.");
|
|
89
|
+
}
|
|
90
|
+
const pendingTasks = decision.decision?.pendingTasks ?? [];
|
|
91
|
+
if (decision.status !== "pending_review" || pendingTasks.length === 0) {
|
|
92
|
+
return refuse("NOT_PENDING_REVIEW", "This claim isn't waiting for review answers; it may already be decided. Reload it to see its current status.");
|
|
93
|
+
}
|
|
94
|
+
// A `pending_review` row always has a digest (written together): one without is OUR broken row,
|
|
95
|
+
// never the reviewer's mismatch.
|
|
96
|
+
if (!decision.resultDigest) {
|
|
97
|
+
throw AppError.internal(`Decision ${claimId} is pending review with no resultDigest`);
|
|
98
|
+
}
|
|
99
|
+
// Past the paid claim's deadline its reservation is (nearly) gone: answering now could never be
|
|
100
|
+
// paid. The one pass: the identical signed answer that already landed before it (a retried 503).
|
|
101
|
+
const [charge, existing] = await Promise.all([
|
|
102
|
+
db.query.apiCharges.findFirst({
|
|
103
|
+
columns: { createdAt: true, reservationExpiresAt: true },
|
|
104
|
+
where: eq(apiCharges.claimId, claimId),
|
|
105
|
+
}),
|
|
106
|
+
db.query.claimReviews.findFirst({ where: (t, { eq: eqOp }) => eqOp(t.claimId, claimId) }),
|
|
107
|
+
]);
|
|
108
|
+
const answerBy = charge && answerByOf(charge);
|
|
109
|
+
const retry = !!answerBy && existing?.attestationJws === attestation && existing.answeredAt < answerBy;
|
|
110
|
+
if (answerBy && Date.now() >= answerBy.getTime() && !retry) {
|
|
111
|
+
return refuse("REVIEW_EXPIRED", `This review closed on ${fmtTime(answerBy)}: its payment reservation expired, so answering now can't be paid. Nothing was changed.`, { answerBy: answerBy.toISOString() });
|
|
112
|
+
}
|
|
113
|
+
if (request.answeredAgainst && request.answeredAgainst !== decision.resultDigest) {
|
|
114
|
+
return refuse("NOT_PENDING_REVIEW", "This claim's decision changed while you were reviewing it. Reload the claim and review it again.");
|
|
115
|
+
}
|
|
116
|
+
const extra = Object.keys(answers).filter((id) => !pendingTasks.includes(id));
|
|
117
|
+
const missing = pendingTasks.filter((id) => !Object.hasOwn(answers, id));
|
|
118
|
+
if (extra.length > 0 || missing.length > 0) {
|
|
119
|
+
return refuse("VALIDATION", "Answer every open review task, and only those — details lists the missing and the extra ones.", {
|
|
120
|
+
missing,
|
|
121
|
+
extra,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
if (existing?.foldedAt)
|
|
125
|
+
return refuse("NOT_PENDING_REVIEW", "This claim has already been reviewed.");
|
|
126
|
+
if (issuer === undefined) {
|
|
127
|
+
return refuse("ATTESTATION_INVALID", "The review answers' signature could not be read. Answer again from the Decision Console.");
|
|
128
|
+
}
|
|
129
|
+
// A member's key must be one a member registered on this source — and whose member may review
|
|
130
|
+
// this claim — refused before any crypto. A root's standing is the console's live controller
|
|
131
|
+
// check; its key is proved on its DID document by the verification below.
|
|
132
|
+
let member = null;
|
|
133
|
+
if (!root) {
|
|
134
|
+
const reviewer = issuer.startsWith("did:key:") &&
|
|
135
|
+
(await db.query.apiMembers.findFirst({
|
|
136
|
+
where: and(eq(apiMembers.sourceId, sourceId), eq(apiMembers.reviewerDid, issuer), isNotNull(apiMembers.acceptedAt)),
|
|
137
|
+
}));
|
|
138
|
+
const chain = { config, trace };
|
|
139
|
+
if (!reviewer || !(await mayReview({ db, chain }, reviewer, scope.protocolDid))) {
|
|
140
|
+
return refuse("ATTESTATION_KEY_UNKNOWN", "These answers are not signed with the reviewer key of a member allowed to review this claim. Register your reviewer key in the console (your member settings), or ask the source's owner for a role that can review.");
|
|
141
|
+
}
|
|
142
|
+
// `mayReview` passed (so `did` is set). A controller with a member row but no stored grant has
|
|
143
|
+
// no first link to send: it answers as root, in its own did:ixo.
|
|
144
|
+
const source = await db.query.apiSources.findFirst({
|
|
145
|
+
columns: { companyEntityDid: true },
|
|
146
|
+
where: eq(apiSources.sourceId, sourceId),
|
|
147
|
+
});
|
|
148
|
+
member = {
|
|
149
|
+
did: reviewer.did,
|
|
150
|
+
delegationCid: reviewer.delegationCid ?? "",
|
|
151
|
+
roots: source ? await sourceRoots(chain, source) : [],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if (!config.SERVICE_ED25519_MNEMONIC) {
|
|
155
|
+
throw AppError.internal("SERVICE_ED25519_MNEMONIC not configured");
|
|
156
|
+
}
|
|
157
|
+
// The oracle the reviewer answered — the same did:web the chain lane's attestation names.
|
|
158
|
+
const { serviceDid } = await getDIDWeb(config.SERVICE_ED25519_MNEMONIC, config.ORACLE_HOSTNAME);
|
|
159
|
+
const verified = await verifyReviewAttestation({ config }, attestation, {
|
|
160
|
+
issuer,
|
|
161
|
+
oracleDid: serviceDid,
|
|
162
|
+
claimId,
|
|
163
|
+
answeredAgainst: decision.resultDigest,
|
|
164
|
+
answers,
|
|
165
|
+
});
|
|
166
|
+
if (!verified.ok) {
|
|
167
|
+
return refuse(verified.code, verified.code === "ATTESTATION_UNRESOLVABLE"
|
|
168
|
+
? "The reviewer's identity couldn't be checked right now. Nothing was recorded — retry in a moment."
|
|
169
|
+
: "The review answers' signature was rejected (details.failures says why). Answer again from the Decision Console.", {
|
|
170
|
+
failures: verified.failures,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
// The grant: a root's to itself, signed by the very key the answers were (now proved on its
|
|
174
|
+
// IID); a member's two links, its stored access then its grant to the key that signed.
|
|
175
|
+
let grant;
|
|
176
|
+
try {
|
|
177
|
+
grant = (member
|
|
178
|
+
? await parseMemberReviewGrant(config, reviewerGrant, {
|
|
179
|
+
sourceId,
|
|
180
|
+
memberDid: member.did,
|
|
181
|
+
reviewerKey: issuer,
|
|
182
|
+
delegationCid: member.delegationCid,
|
|
183
|
+
roots: member.roots,
|
|
184
|
+
})
|
|
185
|
+
: await parseSelfReviewGrant(config, reviewerGrant, {
|
|
186
|
+
sourceId,
|
|
187
|
+
controllerDid: issuer,
|
|
188
|
+
keyDid: verified.kid,
|
|
189
|
+
})).delegation;
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
if (err instanceof AppError &&
|
|
193
|
+
(err.code === "REVIEWER_GRANT_INVALID" || err.code === "REVIEWER_NOT_AUTHORIZED")) {
|
|
194
|
+
return refuse(err.code, err.message, err.details);
|
|
195
|
+
}
|
|
196
|
+
throw err;
|
|
197
|
+
}
|
|
198
|
+
// The same signed answer again (a client retrying a 503) keeps its first moment, so its timeline
|
|
199
|
+
// row is the same row.
|
|
200
|
+
const answeredAt = existing?.attestationJws === attestation ? existing.answeredAt : new Date();
|
|
201
|
+
const fields = {
|
|
202
|
+
answers,
|
|
203
|
+
reviewerDid: issuer,
|
|
204
|
+
attestationJws: attestation,
|
|
205
|
+
// Forwarded verbatim by the fold (workflows/review-complete.ts).
|
|
206
|
+
reviewerGrant: grant,
|
|
207
|
+
answeredAt,
|
|
208
|
+
foldedAt: null,
|
|
209
|
+
foldError: null,
|
|
210
|
+
};
|
|
211
|
+
// Never over a fold that landed since the read above: the folded row is final.
|
|
212
|
+
const [row] = await db
|
|
213
|
+
.insert(claimReviews)
|
|
214
|
+
.values({ claimId, ...fields })
|
|
215
|
+
.onConflictDoUpdate({
|
|
216
|
+
target: claimReviews.claimId,
|
|
217
|
+
set: fields,
|
|
218
|
+
setWhere: isNull(claimReviews.foldedAt),
|
|
219
|
+
})
|
|
220
|
+
.returning();
|
|
221
|
+
if (!row)
|
|
222
|
+
return refuse("NOT_PENDING_REVIEW", "This claim has already been reviewed.");
|
|
223
|
+
await recordEvents(db, [
|
|
224
|
+
{
|
|
225
|
+
key: `${claimId}:review_answered:${verified.cid}`,
|
|
226
|
+
at: answeredAt,
|
|
227
|
+
sourceId,
|
|
228
|
+
claimId,
|
|
229
|
+
type: "review_answered",
|
|
230
|
+
data: { reviewerDid: issuer, tasks: pendingTasks, attestationCid: verified.cid },
|
|
231
|
+
},
|
|
232
|
+
]);
|
|
233
|
+
await spawnReviewComplete(env, claimId);
|
|
234
|
+
logger.info("api.review.received", {
|
|
235
|
+
claimId,
|
|
236
|
+
sourceId,
|
|
237
|
+
reviewerDid: issuer,
|
|
238
|
+
attestationCid: verified.cid,
|
|
239
|
+
resend: !!existing,
|
|
240
|
+
});
|
|
241
|
+
return {
|
|
242
|
+
ok: true,
|
|
243
|
+
review: {
|
|
244
|
+
claimId,
|
|
245
|
+
answers: row.answers,
|
|
246
|
+
reviewerDid: row.reviewerDid,
|
|
247
|
+
answeredAt: row.answeredAt.toISOString(),
|
|
248
|
+
foldedAt: null,
|
|
249
|
+
foldError: null,
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* The fold's re-check of an API answer's reviewer (workflows/review-complete.ts), the API twin of
|
|
255
|
+
* the chain lane's fold-time gate. The answer was verified whole at the door; only what can change
|
|
256
|
+
* since is read again, with no signature or DID work: a ROOT (a `did:ixo` reviewer — a member's is
|
|
257
|
+
* always its `did:key`) is still a controller of the source's organisation; a MEMBER still holds
|
|
258
|
+
* its reviewer key, still reviews this protocol now (`mayReview`: revoked, expired, removed or
|
|
259
|
+
* re-granted narrower), its row still names the role grant the answer's first link is (a re-grant
|
|
260
|
+
* replaced it), and that link's issuer is still a controller (one roots read for both paths). Neither
|
|
261
|
+
* may be the oracle's owner (`assertNotOracle`: an owner set or changed since the answer). Revocation is the
|
|
262
|
+
* oracle's alone — the engine keeps none — so this is where a revoke between answer and fold is
|
|
263
|
+
* seen. Answers the stored grant the fold forwards; throws `REVIEWER_GRANT_INVALID` /
|
|
264
|
+
* `REVIEWER_NOT_AUTHORIZED` (`details.reason`), Blocksync trouble a 503.
|
|
265
|
+
*/
|
|
266
|
+
export async function recheckApiReviewer(deps, review) {
|
|
267
|
+
const { db, chain } = deps;
|
|
268
|
+
const scope = parseApiScopeId(review.scopeId);
|
|
269
|
+
if (!scope)
|
|
270
|
+
throw AppError.internal(`Not an API scope id: ${review.scopeId}`);
|
|
271
|
+
const grant = review.reviewerGrant;
|
|
272
|
+
if (!grant)
|
|
273
|
+
throw invalid("absent", "the answer carries no reviewer grant — answer again");
|
|
274
|
+
const source = await db.query.apiSources.findFirst({
|
|
275
|
+
columns: { companyEntityDid: true },
|
|
276
|
+
where: eq(apiSources.sourceId, scope.sourceId),
|
|
277
|
+
});
|
|
278
|
+
const roots = source ? await sourceRoots(chain, source) : [];
|
|
279
|
+
if (review.reviewerDid.startsWith("did:ixo:")) {
|
|
280
|
+
await assertNotOracle(chain.config, [review.reviewerDid]);
|
|
281
|
+
if (!roots.includes(review.reviewerDid)) {
|
|
282
|
+
throw notAuthorized("root-not-controller", `${review.reviewerDid} is no longer a controller of this source's organisation`);
|
|
283
|
+
}
|
|
284
|
+
return grant;
|
|
285
|
+
}
|
|
286
|
+
const member = await db.query.apiMembers.findFirst({
|
|
287
|
+
where: and(eq(apiMembers.sourceId, scope.sourceId), eq(apiMembers.reviewerDid, review.reviewerDid), isNotNull(apiMembers.acceptedAt)),
|
|
288
|
+
});
|
|
289
|
+
if (!member) {
|
|
290
|
+
throw notAuthorized("revoked", "your reviewer key changed (or you were removed) since you answered — answer again");
|
|
291
|
+
}
|
|
292
|
+
if (!(await mayReview({ db, chain }, member, scope.protocolDid))) {
|
|
293
|
+
throw notAuthorized("revoked", "the reviewer no longer holds claims/review on this source for this claim's protocol");
|
|
294
|
+
}
|
|
295
|
+
let access;
|
|
296
|
+
try {
|
|
297
|
+
const [root] = await proofsOf(await decode(grant), { max: 1, message: "two links" });
|
|
298
|
+
access = root ? await summarize(root) : undefined;
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
if (!(err instanceof Invalid || err instanceof Refused))
|
|
302
|
+
throw err;
|
|
303
|
+
}
|
|
304
|
+
if (!access || access.cid !== member.delegationCid) {
|
|
305
|
+
throw notAuthorized("revoked", "the reviewer's access to this source changed since they answered — they answer again");
|
|
306
|
+
}
|
|
307
|
+
await assertNotOracle(chain.config, [access.issuer, member.did ?? "", review.reviewerDid]);
|
|
308
|
+
if (!roots.includes(access.issuer)) {
|
|
309
|
+
throw notAuthorized("root-not-controller", `${access.issuer}, who granted the reviewer's access, is no longer a controller of this source's organisation`);
|
|
310
|
+
}
|
|
311
|
+
return grant;
|
|
312
|
+
}
|
|
313
|
+
/** Does this member hold `claims/review` over `protocolDid` NOW (§3.4)? See `liveGrant`. */
|
|
314
|
+
async function mayReview(deps, member, protocolDid) {
|
|
315
|
+
if (!member.did)
|
|
316
|
+
return false;
|
|
317
|
+
const grant = await liveGrant(deps, member.sourceId, member.did);
|
|
318
|
+
return (grant !== null &&
|
|
319
|
+
covers(grant.capabilities, "claims/review") &&
|
|
320
|
+
reachesProtocol(grant, protocolDid));
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* The payload's `issuer` (a member's `did:key`, a root's `did:ixo`, or anything — the checks
|
|
324
|
+
* decide); undefined when the attestation is not a JWS with a readable string issuer at all.
|
|
325
|
+
*/
|
|
326
|
+
function issuerOf(jws) {
|
|
327
|
+
try {
|
|
328
|
+
const payload = jws.split(".")[1] ?? "";
|
|
329
|
+
const json = atob(payload.replaceAll("-", "+").replaceAll("_", "/"));
|
|
330
|
+
const issuer = JSON.parse(json).issuer;
|
|
331
|
+
return typeof issuer === "string" ? issuer : undefined;
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
return undefined;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Spawn (or revive) the fold, as the chain route does: the id is deterministic, so a duplicate
|
|
339
|
+
* throws "exists" — a running or complete instance is already folding, an errored one restarts.
|
|
340
|
+
*/
|
|
341
|
+
async function spawnReviewComplete(env, claimId) {
|
|
342
|
+
const id = await reviewInstanceIdFor(claimId);
|
|
343
|
+
try {
|
|
344
|
+
await env.REVIEW_WORKFLOW.create({ id, params: { claimId } });
|
|
345
|
+
}
|
|
346
|
+
catch (err) {
|
|
347
|
+
const instance = await env.REVIEW_WORKFLOW.get(id).catch(() => null);
|
|
348
|
+
if (!instance)
|
|
349
|
+
throw AppError.unavailable("Review workflow unavailable", err);
|
|
350
|
+
const { status } = await instance.status();
|
|
351
|
+
if (status === "errored" || status === "terminated")
|
|
352
|
+
await instance.restart();
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/lib/api-lane/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telling the people (Go Prod §10.1, §10.4; copy in the member-emails spec §5–§7): when an API
|
|
3
|
+
* claim goes `pending_review`, every member who can answer it hears about it — by email, and in
|
|
4
|
+
* the source's review room on Matrix — and the ones nobody answers are reminded at 3 and 14 days.
|
|
5
|
+
*
|
|
6
|
+
* Who: an accepted member whose grant is live right now (`liveMembers` — `liveGrant` for a whole
|
|
7
|
+
* source in one query: unrevoked, unexpired, the source's owner the root) and carries
|
|
8
|
+
* `claims/review`. Email also needs the grant to reach the claim's protocol (`nb.protocols`), an
|
|
9
|
+
* address on the row (a member invited by DID has none: Matrix only) and `notifyReviews` on. Every
|
|
10
|
+
* email — §5, §6 and the reminders — also goes to the source's `contactEmail` (`recipientsOf`): an
|
|
11
|
+
* org admin has no member row, and would otherwise never hear of a claim until it was 3 days old —
|
|
12
|
+
* unless a member with that same address is already sent every claim the contact would be. The
|
|
13
|
+
* room takes every review-capable member: one room per source cannot be narrowed per protocol, so
|
|
14
|
+
* its notices reach a protocol-narrowed member too — accepted, since a notice carries no answers.
|
|
15
|
+
*
|
|
16
|
+
* The 15-minute window (§10.1): `api_members.reviewEmailAt` is when the member was last emailed
|
|
17
|
+
* about this source (the contact's, with no member row, is its `rvw:<sourceId>` marker's
|
|
18
|
+
* `updatedAt`). A claim arriving with the window closed claims it (one conditional UPDATE — the
|
|
19
|
+
* mutex, so two racing notify steps never both send) and goes out at once — as §5, or as §6 with
|
|
20
|
+
* whatever was still held for the member folded in; one arriving while it is open is HELD — its
|
|
21
|
+
* `rv:` row written `pending` — and the minute tick sends everything held for the member as ONE
|
|
22
|
+
* email once the window has run out (§6; a lone held claim reads better as §5). Every send opens
|
|
23
|
+
* the next window, so it is never more than one email per 15 minutes.
|
|
24
|
+
*
|
|
25
|
+
* Membership of the room follows the grants: each person is invited from their own `rvi:` row
|
|
26
|
+
* (keyed by MXID, so a member removed and re-added is the same row, never kicked by their old one),
|
|
27
|
+
* and one whose grant is gone (revoked, expired, removed) is kicked on the next notify for that
|
|
28
|
+
* source AND on the hourly pass — whichever comes first.
|
|
29
|
+
*
|
|
30
|
+
* Idempotent and fail-soft like every side-effect lane (lib/matrix/deliver.ts): each email and
|
|
31
|
+
* notice is a `matrix_deliveries` row keyed by what it is about (schema header). An email's row is
|
|
32
|
+
* CLAIMED before the send (`claimRows`: inserted `sending`, or a `failed` one taken over), so two
|
|
33
|
+
* racing callers never both send, and a row once `sent` is never moved off it. A crash between
|
|
34
|
+
* the send and its mark leaves the row `sending` — never re-sent: at most once, like every notice.
|
|
35
|
+
* A `failed` email is NOT re-driven by anything but the path that wrote it running again (a
|
|
36
|
+
* notify-step replay; a reminder claim stays due until one of its sends lands) — at most
|
|
37
|
+
* `MAX_ATTEMPTS`. Nothing here throws for an email or Matrix failure, and no `EMAIL` binding,
|
|
38
|
+
* sender, `CONSOLE_URL` (every link) or Matrix token ⇒ skipped with one log line. The timeline
|
|
39
|
+
* gets `review_notified` with COUNTS only — never an address.
|
|
40
|
+
*
|
|
41
|
+
* D1 allows 1000 queries per invocation, so every cron pass is bounded: a flush serves at most
|
|
42
|
+
* `FLUSH_MEMBERS` members (oldest held first), the room pass `ROOMS_PER_PASS` rooms (least
|
|
43
|
+
* recently synced first), and a source's reviewer set is one query.
|
|
44
|
+
*/
|
|
45
|
+
import type { Config } from "../../config.js";
|
|
46
|
+
import type { Database } from "../../db/client.js";
|
|
47
|
+
import { type ReviewEmailClaim } from "../email/template.js";
|
|
48
|
+
import type { Logger } from "../logger.js";
|
|
49
|
+
import type { Metrics } from "../metrics.js";
|
|
50
|
+
import type { TraceContext } from "../tracing.js";
|
|
51
|
+
export interface ReviewerDeps {
|
|
52
|
+
db: Database;
|
|
53
|
+
config: Config;
|
|
54
|
+
logger: Logger;
|
|
55
|
+
metrics: Metrics;
|
|
56
|
+
trace: TraceContext;
|
|
57
|
+
cache: KVNamespace;
|
|
58
|
+
/** `env.EMAIL`; absent ⇒ no emails (one log line). */
|
|
59
|
+
email?: SendEmail;
|
|
60
|
+
}
|
|
61
|
+
/** §10.1: at most one review email per member per source per window. */
|
|
62
|
+
export declare const REVIEW_EMAIL_WINDOW_MS: number;
|
|
63
|
+
/** Members emailed per minute tick: each is a few queries, and the tick shares D1's budget. */
|
|
64
|
+
export declare const FLUSH_MEMBERS = 50;
|
|
65
|
+
/** Review rooms re-synced per hourly pass (one query for its people, one for its invites). */
|
|
66
|
+
export declare const ROOMS_PER_PASS = 20;
|
|
67
|
+
/** A claim still waiting for an answer, as the emails show it plus what the recipients need. */
|
|
68
|
+
export interface AwaitingClaim extends ReviewEmailClaim {
|
|
69
|
+
sourceId: string;
|
|
70
|
+
protocolDid: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Tell the claim's reviewers it is waiting (the notify step, after `review_required` is on the
|
|
74
|
+
* timeline). Never throws: a failure here is one log line, never the claim's.
|
|
75
|
+
*/
|
|
76
|
+
export declare function notifyReviewers(deps: ReviewerDeps, claimId: string, now?: Date): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Send what was held for every recipient whose window has run out: §6 over the claims still waiting
|
|
79
|
+
* (§5 for a lone one). A claim answered meanwhile, or a member who lost access, opted out, has no
|
|
80
|
+
* address any more or was removed (a contact whose address was cleared), is dropped (`skipped`).
|
|
81
|
+
* Only closed-window recipients are read (the joins), oldest held first, at most `FLUSH_MEMBERS` a
|
|
82
|
+
* tick — a backlog drains over ticks and nobody starves behind recipients whose window is still
|
|
83
|
+
* open. The count of emails sent.
|
|
84
|
+
*/
|
|
85
|
+
export declare function flushReviewBatches(deps: ReviewerDeps, now?: Date): Promise<number>;
|
|
86
|
+
/**
|
|
87
|
+
* §10.4: every API claim still waiting 3 (and 14) days after it was decided `review` gets its
|
|
88
|
+
* reminder — batched per recipient and source like §6: one email listing all their due claims.
|
|
89
|
+
* The recipients are §5's (`recipientsOf`: the members and the source's contact). Each claim is marked done
|
|
90
|
+
* (`notice_review_reminder:<claimId>:<days>`) once its pass ran, so the pass never reads it again —
|
|
91
|
+
* except one whose every send this pass failed: it stays due and the next hour retries it (the
|
|
92
|
+
* `rv3:`/`rv14:` rows' attempts bound that, and keep a re-run from re-sending the ones that landed).
|
|
93
|
+
* A paid claim's reminder states its `answerBy` (template.ts); one already past it is not sent.
|
|
94
|
+
*/
|
|
95
|
+
export declare function remindReviewers(deps: ReviewerDeps, now?: Date): Promise<number>;
|
|
96
|
+
/**
|
|
97
|
+
* The hourly pass over the review rooms: kick whoever lost access since (and retry a failed
|
|
98
|
+
* invite). `ROOMS_PER_PASS` rooms a pass, least recently synced first — the room marker's
|
|
99
|
+
* `updatedAt` is the rotation's cursor, touched after each sync.
|
|
100
|
+
*/
|
|
101
|
+
export declare function syncReviewRooms(deps: ReviewerDeps, now?: Date): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* The paid claims whose review closed unanswered (§10: `review_expired`) and are not yet announced
|
|
104
|
+
* — no `notice_review_expired:` marker — oldest deadline first, bounded like every pass. The SQL
|
|
105
|
+
* is `answerByOf`'s twin (the extended expiry, else the charge's `createdAt` + 24 h, less the
|
|
106
|
+
* margin), re-checked with the function itself so the two can never disagree about a claim.
|
|
107
|
+
*/
|
|
108
|
+
export declare function expiredReviews(db: Database, now: Date): Promise<AwaitingClaim[]>;
|
|
109
|
+
//# sourceMappingURL=reviewers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewers.d.ts","sourceRoot":"","sources":["../../../src/lib/api-lane/reviewers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAgBhD,OAAO,EAGL,KAAK,gBAAgB,EAKtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAcxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,QAAQ,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,QAAc,CAAC;AAKlD,+FAA+F;AAC/F,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,8FAA8F;AAC9F,eAAO,MAAM,cAAc,KAAK,CAAC;AA0BjC,gGAAgG;AAChG,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAaD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,IAAiB,GACrB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AA+ID;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,YAAY,EAClB,GAAG,GAAE,IAAiB,GACrB,OAAO,CAAC,MAAM,CAAC,CA0FjB;AAID;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6EjG;AAuLD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B/F;AAiDD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAatF"}
|