@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,407 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Submit and read one claim (go-prod spec §4.2–§4.6; payments spec §4). The submit order is the
|
|
3
|
+
* `startApiClaim` seam's, and every step before `recordApiClaims` is free for the caller:
|
|
4
|
+
*
|
|
5
|
+
* repeat? → paused? → protocol allowed? → work order + answers (§4.3) → pay (402 / verify,
|
|
6
|
+
* which reserves) → recordApiClaims → startApiClaims → wait → 200 record | 202
|
|
7
|
+
*
|
|
8
|
+
* The money moves on the engine's receipt (contracts v1.3): the workflow settles after the decision
|
|
9
|
+
* row, and a `200` carrying a decision carries that settle answer as `PAYMENT-RESPONSE`.
|
|
10
|
+
*
|
|
11
|
+
* **Idempotency is the claim's own id** (§4.6): with an `Idempotency-Key` the claimId is
|
|
12
|
+
* `apc_` + 40 hex of sha256(sourceId|key), so a repeat finds the claim and answers its CURRENT
|
|
13
|
+
* state — never a second charge, never a second run; the same key over a different body is
|
|
14
|
+
* `409 IDEMPOTENCY_MISMATCH`. Without a key, a paid retry takes its claimId from the offer its
|
|
15
|
+
* nonce names, so a (402, paid retry) pair is one claim either way. The check runs before the
|
|
16
|
+
* gate (payments spec §0 rule 6).
|
|
17
|
+
*
|
|
18
|
+
* **Who pays** (§3.2): a source in billing mode `none` never meets the gate — no 402, no charge
|
|
19
|
+
* row. An `x402` source pays through S4's `PaymentGate`; with `API_PAYMENTS` off it is
|
|
20
|
+
* `503 SOURCE_PAUSED { reason: payments-disabled }`, as when the facilitator is down.
|
|
21
|
+
*/
|
|
22
|
+
import { eq } from "drizzle-orm";
|
|
23
|
+
import { Hono } from "hono";
|
|
24
|
+
import { z } from "zod";
|
|
25
|
+
import { MAX_WAIT_SECONDS, SubmitClaimRequest, } from "../../../contracts/index.js";
|
|
26
|
+
import { apiClaims } from "../../../db/schema.js";
|
|
27
|
+
import { claimContent, claimRecord, recordApiClaims, startApiClaims } from "../../../lib/api-lane/index.js";
|
|
28
|
+
import { newId } from "../../../lib/api-lane/ids.js";
|
|
29
|
+
import { submitterFor } from "../../../lib/api-lane/submitter.js";
|
|
30
|
+
import { AppError } from "../../../lib/errors.js";
|
|
31
|
+
import { canonicalJson, sha256Hex } from "../../../lib/hash.js";
|
|
32
|
+
import { GRANT_CAP_CENTS_PER_DAY, overGrantCap, priceDisplay } from "../../../lib/oauth/approvals.js";
|
|
33
|
+
import { createPaymentGate, encodeHeader, paymentResponse, refreshRefund, } from "../../../lib/payments/index.js";
|
|
34
|
+
import { validate } from "../../../lib/validator.js";
|
|
35
|
+
import { access, sourceOf } from "../../../middleware/api/auth.js";
|
|
36
|
+
import { ApiError, count402 } from "../../../middleware/api/errors.js";
|
|
37
|
+
import { noteReserving } from "../../../middleware/api/oauth.js";
|
|
38
|
+
import { awaitLanding, preferredWait } from "../../../middleware/api/wait.js";
|
|
39
|
+
import { ClaimParam, claimOf, readableClaimOf } from "./claims-read.js";
|
|
40
|
+
import { checkSubmission, workOrderFor } from "./work-orders.js";
|
|
41
|
+
export const claims = new Hono();
|
|
42
|
+
/** How long a 202 tells the client to wait before polling (§4.6). */
|
|
43
|
+
const RETRY_AFTER_SEC = 5;
|
|
44
|
+
/** A facilitator outage is a pause of the payment lane, not of the claim: retry soon. */
|
|
45
|
+
const PAYMENTS_RETRY_SEC = 30;
|
|
46
|
+
claims.post("/claims", access({ op: "submitClaim", scope: "claims:write", capability: "claims/submit" }), validate("json", SubmitClaimRequest), async (c) => {
|
|
47
|
+
const caller = sourceOf(c);
|
|
48
|
+
const body = c.req.valid("json");
|
|
49
|
+
const db = await c.var.db();
|
|
50
|
+
const idempotencyKey = idempotencyKeyOf(c);
|
|
51
|
+
const requestDigest = idempotencyKey ? await sha256Hex(canonicalJson(body)) : null;
|
|
52
|
+
const paymentHeader = c.req.header("PAYMENT-SIGNATURE") ?? null;
|
|
53
|
+
const wait = preferredWait(c.req.header("Prefer"));
|
|
54
|
+
let claimId = idempotencyKey
|
|
55
|
+
? await keyedClaimId(caller.source.sourceId, idempotencyKey)
|
|
56
|
+
: null;
|
|
57
|
+
if (claimId) {
|
|
58
|
+
const existing = await findClaim(db, claimId);
|
|
59
|
+
if (existing)
|
|
60
|
+
return answerRepeat(c, caller, existing, requestDigest, wait);
|
|
61
|
+
}
|
|
62
|
+
const { source } = caller;
|
|
63
|
+
if (source.status === "paused") {
|
|
64
|
+
throw sourcePaused(source.pausedReason);
|
|
65
|
+
}
|
|
66
|
+
const protocolDid = protocolOf(body.protocolDid, source.allowedProtocols);
|
|
67
|
+
// `claims/submit` is never narrowed itself, but a grant's `nb.protocols` is the grant's word.
|
|
68
|
+
if (caller.kind !== "key" && caller.protocols && !caller.protocols.includes(protocolDid)) {
|
|
69
|
+
throw new ApiError("FORBIDDEN", protocolOutOfReach(protocolDid));
|
|
70
|
+
}
|
|
71
|
+
checkOAuthSubmitter(caller, body.submitter);
|
|
72
|
+
const work = await workOrderFor(c.env, protocolDid);
|
|
73
|
+
// Who the claim is about: the caller's own word, else the company's `payeeField` answer.
|
|
74
|
+
const submitter = submitterFor(body, source.payeeField);
|
|
75
|
+
// The payment first names the claim when no key did; the work-order check needs the id to
|
|
76
|
+
// tell this claim's own uploads from another claim's.
|
|
77
|
+
const pay = source.billingMode === "x402" ? await gateFor(c) : null;
|
|
78
|
+
let charge = null;
|
|
79
|
+
if (pay) {
|
|
80
|
+
if (!paymentHeader) {
|
|
81
|
+
const offered = claimId ?? newId("apc");
|
|
82
|
+
await checkSubmission(db, work, submission(body, source, [offered], submitter));
|
|
83
|
+
const body402 = await pay.run((g) => g.offer(offerFor(caller, offered, protocolDid)));
|
|
84
|
+
return paymentRequired(c, body402);
|
|
85
|
+
}
|
|
86
|
+
// Every check that can refuse runs BEFORE `verify` reserves: the gate's own (offer, payer,
|
|
87
|
+
// key cap), then this request's against the offer's items, the repeat and the submission.
|
|
88
|
+
const checked = await preflightOrNone(pay, paymentHeader, caller);
|
|
89
|
+
if (checked && !checked.ok)
|
|
90
|
+
return paymentRequired(c, checked.paymentRequired);
|
|
91
|
+
const [item] = checked?.items ?? [];
|
|
92
|
+
if (checked?.items.length !== 1 || !item || (claimId && item.claimId !== claimId)) {
|
|
93
|
+
// A header for no offer of this request (expired, another claim's, a batch's): nothing it
|
|
94
|
+
// names can be paid here, so answer what CAN be — a fresh 402 for this claim.
|
|
95
|
+
const offered = claimId ?? newId("apc");
|
|
96
|
+
await checkSubmission(db, work, submission(body, source, [offered], submitter));
|
|
97
|
+
return paymentRequired(c, await pay.run((g) => g.offer(offerFor(caller, offered, protocolDid))));
|
|
98
|
+
}
|
|
99
|
+
if (item.protocolDid !== protocolDid) {
|
|
100
|
+
throw new ApiError("VALIDATION", "The payment in the PAYMENT-SIGNATURE header is for a different protocol than this claim. Resend without it to get an offer for this claim.", {
|
|
101
|
+
issues: [{ path: "protocolDid", message: `the offer was for ${item.protocolDid}` }],
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
if (!claimId) {
|
|
105
|
+
// A paid retry without a key: the offer's claim may already be recorded (a repeat).
|
|
106
|
+
claimId = item.claimId;
|
|
107
|
+
const existing = await findClaim(db, claimId);
|
|
108
|
+
if (existing)
|
|
109
|
+
return answerRepeat(c, caller, existing, null, wait);
|
|
110
|
+
}
|
|
111
|
+
await checkSubmission(db, work, submission(body, source, [claimId], submitter));
|
|
112
|
+
// An AI app over OAuth (S7): its grant's daily cap, whatever its approvals said — except the
|
|
113
|
+
// resume of a confirmed 3-D Secure payment, whose offer was already within the cap (N5).
|
|
114
|
+
if (caller.kind === "oauth" &&
|
|
115
|
+
c.get("oauth")?.resume?.offerId !== checked?.offerId &&
|
|
116
|
+
(await overGrantCap(db, caller.grantId, item.amountCents))) {
|
|
117
|
+
throw grantCapReached();
|
|
118
|
+
}
|
|
119
|
+
const wasReserving = noteReserving(c, true);
|
|
120
|
+
const verified = await reserve(pay, paymentHeader, caller);
|
|
121
|
+
if (!verified.ok) {
|
|
122
|
+
// `/verify` refused: THIS attempt reserved nothing — but an earlier one may have (N4).
|
|
123
|
+
if (!wasReserving)
|
|
124
|
+
noteReserving(c, false);
|
|
125
|
+
return paymentRequired(c, verified.paymentRequired);
|
|
126
|
+
}
|
|
127
|
+
charge = {
|
|
128
|
+
amount: item.amount,
|
|
129
|
+
amountCents: item.amountCents,
|
|
130
|
+
offerId: verified.offerId,
|
|
131
|
+
payerDid: verified.payer,
|
|
132
|
+
paymentHeader,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
claimId ??= newId("apc");
|
|
137
|
+
await checkSubmission(db, work, submission(body, source, [claimId], submitter));
|
|
138
|
+
}
|
|
139
|
+
claimId ??= newId("apc");
|
|
140
|
+
const [recorded] = await recordApiClaims(c.env, [
|
|
141
|
+
{
|
|
142
|
+
claimId,
|
|
143
|
+
sourceId: source.sourceId,
|
|
144
|
+
protocolDid,
|
|
145
|
+
answers: body.answers,
|
|
146
|
+
attachments: body.attachments ?? [],
|
|
147
|
+
submitter,
|
|
148
|
+
metadata: body.metadata ?? null,
|
|
149
|
+
webhookUrl: body.webhookUrl ?? null,
|
|
150
|
+
idempotencyKey,
|
|
151
|
+
requestDigest,
|
|
152
|
+
content: claimContent(body, protocolDid),
|
|
153
|
+
keyPrefix: keyPrefixOf(caller),
|
|
154
|
+
submittedBy: submittedByOf(caller),
|
|
155
|
+
submittedVia: submittedViaOf(caller),
|
|
156
|
+
...(caller.kind === "oauth"
|
|
157
|
+
? { oauth: { clientId: caller.clientId, grantId: caller.grantId } }
|
|
158
|
+
: {}),
|
|
159
|
+
charge,
|
|
160
|
+
},
|
|
161
|
+
]);
|
|
162
|
+
// Lost a race to the same key: the winner starts; this caller answers its state.
|
|
163
|
+
if (recorded?.status === "exists") {
|
|
164
|
+
const existing = await findClaim(db, claimId);
|
|
165
|
+
if (!existing)
|
|
166
|
+
throw AppError.internal(`recorded as existing but not found: ${claimId}`);
|
|
167
|
+
return answerRepeat(c, caller, existing, requestDigest, wait);
|
|
168
|
+
}
|
|
169
|
+
// Counted before the start: a claim taken is a submit even if its start fails (the reconcile
|
|
170
|
+
// starts it). `wait=0` asks nothing, so it is async.
|
|
171
|
+
c.get("metrics").count("api.submit", 1, { op: wait ? "sync" : "async" });
|
|
172
|
+
await startApiClaims(c.env, [claimId]);
|
|
173
|
+
return answerState(c, caller, claimId, wait);
|
|
174
|
+
});
|
|
175
|
+
claims.get("/claims/:claimId", access({ op: "getClaim", scope: "claims:read", capability: "claims/read" }), validate("param", ClaimParam), validate("query", z.object({ wait: z.coerce.number().int().min(0).optional() })), async (c) => {
|
|
176
|
+
const caller = sourceOf(c);
|
|
177
|
+
const claim = await readableClaimOf(c, c.req.valid("param").claimId);
|
|
178
|
+
// `?wait=N` or `Prefer: wait=N`, capped at 90 like the submit's (§4.1).
|
|
179
|
+
const asked = c.req.valid("query").wait ?? preferredWait(c.req.header("Prefer"));
|
|
180
|
+
const wait = asked === null ? null : Math.min(asked, MAX_WAIT_SECONDS);
|
|
181
|
+
const db = await c.var.db();
|
|
182
|
+
if (wait) {
|
|
183
|
+
const landed = await awaitLanding(db, caller.source.sourceId, claim.claimId, wait);
|
|
184
|
+
c.get("metrics").count("api.wait", 1, { op: "get", outcome: landed ? "hit" : "miss" });
|
|
185
|
+
if (landed)
|
|
186
|
+
c.header("Preference-Applied", `wait=${wait}`);
|
|
187
|
+
}
|
|
188
|
+
// A linked collection's chain claim carries the reading source (record.ts).
|
|
189
|
+
return c.json(await recordOf(db, claim.claimId, caller.source.sourceId));
|
|
190
|
+
});
|
|
191
|
+
/**
|
|
192
|
+
* Ask the facilitator now whether this claim's card payment was refunded, record it, and answer
|
|
193
|
+
* the record (v1.4.3). The reconcile picks refunds up on its own; this is the console's "after I
|
|
194
|
+
* refunded" read. The facilitator's word is the only one written — never the caller's. Idempotent
|
|
195
|
+
* by nature, so no `Idempotency-Key`; a claim with no card payment answers its record unchanged.
|
|
196
|
+
*/
|
|
197
|
+
claims.post("/claims/:claimId/payment/refresh", access({ op: "refreshClaimPayment", scope: "claims:read", capability: "claims/read" }), validate("param", ClaimParam), async (c) => {
|
|
198
|
+
const caller = sourceOf(c);
|
|
199
|
+
// API claims only: a linked chain claim was paid on chain, never by card here (§14: 404).
|
|
200
|
+
const claim = await claimOf(c, c.req.valid("param").claimId);
|
|
201
|
+
const db = await c.var.db();
|
|
202
|
+
await refreshRefund({
|
|
203
|
+
db,
|
|
204
|
+
config: c.get("config"),
|
|
205
|
+
logger: c.get("logger"),
|
|
206
|
+
trace: c.get("trace"),
|
|
207
|
+
cache: c.env.CACHE_KV,
|
|
208
|
+
}, claim.claimId);
|
|
209
|
+
return c.json(await recordOf(db, claim.claimId, caller.source.sourceId));
|
|
210
|
+
});
|
|
211
|
+
// --- the repeat and the answer --------------------------------------------------------------------
|
|
212
|
+
/**
|
|
213
|
+
* A claim this key already named (§4.6): its current state, never a second charge — the claim was
|
|
214
|
+
* recorded only after `/verify` reserved its price, so there is nothing left to pay.
|
|
215
|
+
*/
|
|
216
|
+
async function answerRepeat(c, caller, claim, requestDigest, wait) {
|
|
217
|
+
if (requestDigest !== null &&
|
|
218
|
+
claim.requestDigest !== null &&
|
|
219
|
+
claim.requestDigest !== requestDigest) {
|
|
220
|
+
throw new ApiError("IDEMPOTENCY_MISMATCH", "This Idempotency-Key was already used for a different request. Use a new key for a new request, or resend the original request unchanged.");
|
|
221
|
+
}
|
|
222
|
+
c.get("metrics").count("api.idempotent_replay", 1, { op: "submit" });
|
|
223
|
+
// A crash between record and start leaves a reserved, queued claim: starting again is free.
|
|
224
|
+
await startApiClaims(c.env, [claim.claimId]);
|
|
225
|
+
return answerState(c, caller, claim.claimId, wait);
|
|
226
|
+
}
|
|
227
|
+
/** `200` + the record when the decision has landed (within `wait`, if asked), else `202`. */
|
|
228
|
+
async function answerState(c, caller, claimId, wait) {
|
|
229
|
+
const db = await c.var.db();
|
|
230
|
+
const landed = await awaitLanding(db, caller.source.sourceId, claimId, wait ?? 0);
|
|
231
|
+
if (wait) {
|
|
232
|
+
c.get("metrics").count("api.wait", 1, { op: "submit", outcome: landed ? "hit" : "miss" });
|
|
233
|
+
}
|
|
234
|
+
if (landed) {
|
|
235
|
+
if (wait !== null)
|
|
236
|
+
c.header("Preference-Applied", `wait=${wait}`);
|
|
237
|
+
// Payments spec §4 step 8: the decision's settle answer (for PAY usually `settlement_pending`).
|
|
238
|
+
const settled = c.get("config").X402_FACILITATOR_URL
|
|
239
|
+
? await paymentResponse({
|
|
240
|
+
config: c.get("config"),
|
|
241
|
+
logger: c.get("logger"),
|
|
242
|
+
trace: c.get("trace"),
|
|
243
|
+
cache: c.env.CACHE_KV,
|
|
244
|
+
db,
|
|
245
|
+
}, claimId)
|
|
246
|
+
: null;
|
|
247
|
+
if (settled)
|
|
248
|
+
c.header("PAYMENT-RESPONSE", encodeHeader(settled));
|
|
249
|
+
return c.json(await recordOf(db, claimId), 200);
|
|
250
|
+
}
|
|
251
|
+
const record = await recordOf(db, claimId);
|
|
252
|
+
const pollUrl = `https://${c.get("config").ORACLE_HOSTNAME}/v1/api/claims/${claimId}`;
|
|
253
|
+
c.header("Location", pollUrl);
|
|
254
|
+
c.header("Retry-After", String(RETRY_AFTER_SEC));
|
|
255
|
+
return c.json({ claimId, status: record.status, pollUrl }, 202);
|
|
256
|
+
}
|
|
257
|
+
async function recordOf(db, claimId, sourceId) {
|
|
258
|
+
const record = await claimRecord(db, claimId, { sourceId });
|
|
259
|
+
if (!record)
|
|
260
|
+
throw AppError.internal(`api_claims row vanished: ${claimId}`);
|
|
261
|
+
return record;
|
|
262
|
+
}
|
|
263
|
+
/** The gate, or null for a free source; `API_PAYMENTS` off ⇒ `503 payments-disabled`. `run`
|
|
264
|
+
* turns a facilitator outage into the same 503 — the payment lane is paused, not the claim. */
|
|
265
|
+
export async function gateFor(c) {
|
|
266
|
+
const config = c.get("config");
|
|
267
|
+
if (!config.API_PAYMENTS)
|
|
268
|
+
throw paymentsDisabled(c);
|
|
269
|
+
const gate = createPaymentGate({
|
|
270
|
+
config,
|
|
271
|
+
logger: c.get("logger"),
|
|
272
|
+
trace: c.get("trace"),
|
|
273
|
+
cache: c.env.CACHE_KV,
|
|
274
|
+
db: await c.var.db(),
|
|
275
|
+
requestId: c.get("requestId"),
|
|
276
|
+
});
|
|
277
|
+
return {
|
|
278
|
+
gate,
|
|
279
|
+
run: async (f) => {
|
|
280
|
+
try {
|
|
281
|
+
return await f(gate);
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
if (err instanceof AppError && err.code === "UNAVAILABLE")
|
|
285
|
+
throw paymentsDisabled(c, err);
|
|
286
|
+
throw err;
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
function paymentsDisabled(c, cause) {
|
|
292
|
+
c.header("Retry-After", String(PAYMENTS_RETRY_SEC));
|
|
293
|
+
if (cause)
|
|
294
|
+
c.get("logger").warn("api.payments-unavailable", { detail: String(cause) });
|
|
295
|
+
return new ApiError("SOURCE_PAUSED", "Payments are unavailable on this oracle right now, so it can't take paid claims. Retry in a few minutes (the Retry-After header says when); if it keeps happening, contact the oracle's operator.", {
|
|
296
|
+
reason: "payments-disabled",
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
/** The gate's `preflight` (nothing reserved), with "no offer of yours" (`nonce_unknown`) as null —
|
|
300
|
+
* the caller answers a fresh 402 instead of one with nothing to pay. */
|
|
301
|
+
export async function preflightOrNone(pay, header, caller) {
|
|
302
|
+
try {
|
|
303
|
+
return await pay.run((g) => g.preflight(header, { sourceId: caller.source.sourceId, keyPrefix: keyPrefixOf(caller) }));
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
const reason = err instanceof AppError && err.details?.reason;
|
|
307
|
+
if (reason === "nonce_unknown")
|
|
308
|
+
return null;
|
|
309
|
+
throw err;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/** The gate's `verify` — it RESERVES; call it only once every check that can refuse has passed. */
|
|
313
|
+
export const reserve = (pay, header, caller) => pay.run((g) => g.verify(header, { sourceId: caller.source.sourceId, keyPrefix: keyPrefixOf(caller) }));
|
|
314
|
+
/** The gate's 402 as it built it (the §4.1 envelope, `docsUrl` included), and the authoritative
|
|
315
|
+
* `PAYMENT-REQUIRED` header when there is something to pay (board D30). */
|
|
316
|
+
export function paymentRequired(c, body) {
|
|
317
|
+
const offered = body.error.details.paymentRequired;
|
|
318
|
+
if (offered)
|
|
319
|
+
c.header("PAYMENT-REQUIRED", encodeHeader(offered));
|
|
320
|
+
count402(c.get("metrics"), c.req.header("PAYMENT-SIGNATURE"), body.error.code);
|
|
321
|
+
return c.json(body, 402);
|
|
322
|
+
}
|
|
323
|
+
const offerFor = (caller, claimId, protocolDid) => ({
|
|
324
|
+
sourceId: caller.source.sourceId,
|
|
325
|
+
keyPrefix: keyPrefixOf(caller),
|
|
326
|
+
items: [{ claimId, protocolDid }],
|
|
327
|
+
});
|
|
328
|
+
// --- small readers -----------------------------------------------------------------------------------
|
|
329
|
+
/** A console submit has no key: only the payment delegation caps it (§4.1 `SPEND_CAP`). */
|
|
330
|
+
export const keyPrefixOf = (caller) => caller.kind === "key" ? caller.key.prefix : null;
|
|
331
|
+
export const submission = (body, source, ownClaims,
|
|
332
|
+
/** The resolved submitter (`submitterFor`): the caller's, else the `payeeField` answer. */
|
|
333
|
+
submitter) => ({
|
|
334
|
+
sourceId: source.sourceId,
|
|
335
|
+
ownClaims,
|
|
336
|
+
answers: body.answers,
|
|
337
|
+
attachments: body.attachments ?? [],
|
|
338
|
+
submitter,
|
|
339
|
+
payeeField: source.payeeField,
|
|
340
|
+
});
|
|
341
|
+
/**
|
|
342
|
+
* An AI app over OAuth acts for ONE person, so the claim can only be about them: an explicit
|
|
343
|
+
* `submitter` that is not the signed-in user's DID is refused (owner, 2026-10-10). A key or the
|
|
344
|
+
* console submits for its people and names whom it likes.
|
|
345
|
+
*/
|
|
346
|
+
export function checkOAuthSubmitter(caller, submitter, path = "submitter") {
|
|
347
|
+
if (caller.kind !== "oauth" || submitter === undefined || submitter === caller.did)
|
|
348
|
+
return;
|
|
349
|
+
throw new ApiError("VALIDATION", "Signed in through an AI app, you can only submit claims about yourself: leave `submitter` out, or send your own DID.", { issues: [{ path, message: `must be ${caller.did}` }] });
|
|
350
|
+
}
|
|
351
|
+
/** Who sent the claim, server-side: the OAuth user (a person); a key or the console names no one
|
|
352
|
+
* here — the key prefix and the audit log say which integration or member it was. */
|
|
353
|
+
export const submittedByOf = (caller) => caller.kind === "oauth" ? caller.did : null;
|
|
354
|
+
/** Which AI app sent it. The name is the app's pick at dynamic registration, so untrusted text —
|
|
355
|
+
* trimmed and capped at 100 characters, otherwise verbatim (a blank one falls back to the client
|
|
356
|
+
* id) — and a display hint only, never an authorisation input; `verified` is AuthHub's. */
|
|
357
|
+
export const submittedViaOf = (caller) => caller.kind === "oauth"
|
|
358
|
+
? {
|
|
359
|
+
name: capName(caller.clientName.trim() || caller.clientId),
|
|
360
|
+
verified: caller.clientVerified,
|
|
361
|
+
}
|
|
362
|
+
: null;
|
|
363
|
+
/** ≤ 100 UTF-16 code units (the contract's `max(100)` counts them), never ending in half a
|
|
364
|
+
* surrogate pair or in whitespace the cut exposed. */
|
|
365
|
+
function capName(name) {
|
|
366
|
+
const cut = name.slice(0, 100);
|
|
367
|
+
return (/[\uD800-\uDBFF]$/.test(cut) ? cut.slice(0, -1) : cut).trimEnd();
|
|
368
|
+
}
|
|
369
|
+
export function idempotencyKeyOf(c) {
|
|
370
|
+
const key = c.req.header("Idempotency-Key");
|
|
371
|
+
if (key === undefined)
|
|
372
|
+
return null;
|
|
373
|
+
if (key.length < 1 || key.length > 255) {
|
|
374
|
+
throw new ApiError("VALIDATION", "The Idempotency-Key header must be 1 to 255 characters long.");
|
|
375
|
+
}
|
|
376
|
+
return key;
|
|
377
|
+
}
|
|
378
|
+
/** `apc_` + 40 hex of sha256(sourceId|key) — the ledger's primary key IS the duplicate guard. */
|
|
379
|
+
export async function keyedClaimId(sourceId, key) {
|
|
380
|
+
return `apc_${(await sha256Hex(`${sourceId}|${key}`)).slice(0, 40)}`;
|
|
381
|
+
}
|
|
382
|
+
export const findClaim = (db, claimId) => db.query.apiClaims.findFirst({ where: eq(apiClaims.claimId, claimId) });
|
|
383
|
+
/** S3 review §8: one OAuth grant's charges over 24 h stop at `GRANT_CAP_CENTS_PER_DAY`. */
|
|
384
|
+
export const grantCapReached = () => new ApiError("SPEND_CAP", `This AI app has reached its spending limit for today (${priceDisplay(GRANT_CAP_CENTS_PER_DAY)}). Wait until tomorrow, or submit from the console or with an API key.`, { reason: "grant_daily_cap" });
|
|
385
|
+
/** A paused source takes no new claim; the reason stays in `details` as before. */
|
|
386
|
+
export const sourcePaused = (reason) => new ApiError("SOURCE_PAUSED", `This source is paused (${reason ?? "operator"}), so it isn't taking new claims. Claims already submitted are safe; its owner can see why in the console.`, { reason: reason ?? "operator" });
|
|
387
|
+
/** A member whose role is narrowed to some protocols submits under another. */
|
|
388
|
+
export const protocolOutOfReach = (protocolDid) => `Your role on this source doesn't cover protocol ${protocolDid}. Ask the source's owner for access to it.`;
|
|
389
|
+
/** The named protocol, which must be on the allow-list; unnamed ⇒ the source's only one (§4.3). */
|
|
390
|
+
export function protocolOf(named, allowed) {
|
|
391
|
+
if (allowed.length === 0) {
|
|
392
|
+
throw new ApiError("PROTOCOL_NOT_ALLOWED", "This source has no protocol enabled yet, so it can't take claims. Ask this oracle's operator to enable one for it.");
|
|
393
|
+
}
|
|
394
|
+
if (named === undefined) {
|
|
395
|
+
const [only] = allowed;
|
|
396
|
+
if (allowed.length === 1 && only)
|
|
397
|
+
return only;
|
|
398
|
+
throw new ApiError("VALIDATION", "This source accepts several protocols, so say which one this claim is for in protocolDid.", {
|
|
399
|
+
issues: [{ path: "protocolDid", message: "required" }],
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
if (!allowed.includes(named)) {
|
|
403
|
+
throw new ApiError("PROTOCOL_NOT_ALLOWED", `Protocol ${named} is not enabled for this source. Use one of its protocols, or ask this oracle's operator to enable it.`);
|
|
404
|
+
}
|
|
405
|
+
return named;
|
|
406
|
+
}
|
|
407
|
+
//# sourceMappingURL=claims.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claims.js","sourceRoot":"","sources":["../../../../src/routes/v1/api/claims.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linked on-chain collections (Go Prod S3 M6): an organisation links a claim collection its
|
|
3
|
+
* signed-in member OWNS on chain (company authority D9), and the source's claim reads then include that
|
|
4
|
+
* collection's chain claims. Billing for those stays the collection owner's on-chain evaluation
|
|
5
|
+
* payment — nothing here charges, never a 402.
|
|
6
|
+
*
|
|
7
|
+
* Linking is console-only (`settings/manage`, keys cannot): the chain check is about the INVOKING
|
|
8
|
+
* member's `did:ixo`, which an API key does not have. Listing is a claims read (`claims:read` /
|
|
9
|
+
* `claims/read`). The standing check and the hourly re-check live in `lib/api-lane/linked.ts`.
|
|
10
|
+
*/
|
|
11
|
+
import { Hono } from "hono";
|
|
12
|
+
import type { ApiEnv } from "../../../middleware/api/types.js";
|
|
13
|
+
export declare const collectionsLink: Hono<ApiEnv, import("hono/types").BlankSchema, "/">;
|
|
14
|
+
//# sourceMappingURL=collections-link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections-link.d.ts","sourceRoot":"","sources":["../../../../src/routes/v1/api/collections-link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAU5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAE5D,eAAO,MAAM,eAAe,qDAAqB,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linked on-chain collections (Go Prod S3 M6): an organisation links a claim collection its
|
|
3
|
+
* signed-in member OWNS on chain (company authority D9), and the source's claim reads then include that
|
|
4
|
+
* collection's chain claims. Billing for those stays the collection owner's on-chain evaluation
|
|
5
|
+
* payment — nothing here charges, never a 402.
|
|
6
|
+
*
|
|
7
|
+
* Linking is console-only (`settings/manage`, keys cannot): the chain check is about the INVOKING
|
|
8
|
+
* member's `did:ixo`, which an API key does not have. Listing is a claims read (`claims:read` /
|
|
9
|
+
* `claims/read`). The standing check and the hourly re-check live in `lib/api-lane/linked.ts`.
|
|
10
|
+
*/
|
|
11
|
+
import { desc, eq } from "drizzle-orm";
|
|
12
|
+
import { Hono } from "hono";
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
import { CollectionId, LinkCollectionRequest } from "../../../contracts/index.js";
|
|
15
|
+
import { apiSourceCollections } from "../../../db/schema.js";
|
|
16
|
+
import { collectionStanding, linkWhere } from "../../../lib/api-lane/linked.js";
|
|
17
|
+
import { validate } from "../../../lib/validator.js";
|
|
18
|
+
import { audit } from "../../../middleware/api/audit.js";
|
|
19
|
+
import { access, sourceOf } from "../../../middleware/api/auth.js";
|
|
20
|
+
import { ApiError } from "../../../middleware/api/errors.js";
|
|
21
|
+
import { idempotent } from "../../../middleware/api/idempotency.js";
|
|
22
|
+
export const collectionsLink = new Hono();
|
|
23
|
+
const MANAGE = { scope: "none", capability: "settings/manage" };
|
|
24
|
+
const CollectionParam = z.object({ collectionId: CollectionId });
|
|
25
|
+
const linkView = (row) => ({
|
|
26
|
+
collectionId: row.collectionId,
|
|
27
|
+
protocolDid: row.protocolDid,
|
|
28
|
+
linkedBy: row.linkedBy,
|
|
29
|
+
linkedAt: row.linkedAt.toISOString(),
|
|
30
|
+
});
|
|
31
|
+
const alreadyLinked = () => new ApiError("CONFLICT", "This collection is already linked to this source; there is nothing to do.", {
|
|
32
|
+
reason: "already_linked",
|
|
33
|
+
});
|
|
34
|
+
collectionsLink.get("/source/collections", access({ op: "listLinkedCollections", scope: "claims:read", capability: "claims/read" }), async (c) => {
|
|
35
|
+
const caller = sourceOf(c);
|
|
36
|
+
const db = await c.var.db();
|
|
37
|
+
const rows = await db
|
|
38
|
+
.select()
|
|
39
|
+
.from(apiSourceCollections)
|
|
40
|
+
.where(eq(apiSourceCollections.sourceId, caller.source.sourceId))
|
|
41
|
+
.orderBy(desc(apiSourceCollections.linkedAt), desc(apiSourceCollections.collectionId));
|
|
42
|
+
// `claims/read` narrowed by `nb.protocols` sees only the collections of its protocols.
|
|
43
|
+
const protocols = caller.kind === "key" ? null : caller.protocols;
|
|
44
|
+
const items = rows.filter((r) => protocols === null || protocols.includes(r.protocolDid));
|
|
45
|
+
return c.json({ items: items.map(linkView) });
|
|
46
|
+
});
|
|
47
|
+
collectionsLink.post("/source/collections", access({ op: "linkCollection", ...MANAGE }), idempotent(), validate("json", LinkCollectionRequest), async (c) => {
|
|
48
|
+
const caller = sourceOf(c);
|
|
49
|
+
// `scope: "none"` keeps keys out; the standing checked is the invoking member's own.
|
|
50
|
+
if (caller.kind !== "member") {
|
|
51
|
+
throw new ApiError("FORBIDDEN", "Collections are linked from the Decision Console, signed in as a member of the source.");
|
|
52
|
+
}
|
|
53
|
+
const { sourceId } = caller.source;
|
|
54
|
+
const { collectionId } = c.req.valid("json");
|
|
55
|
+
const db = await c.var.db();
|
|
56
|
+
// Before the chain reads: a repeat costs no Blocksync round trip.
|
|
57
|
+
const existing = await db.query.apiSourceCollections.findFirst({
|
|
58
|
+
where: linkWhere(sourceId, collectionId),
|
|
59
|
+
});
|
|
60
|
+
if (existing)
|
|
61
|
+
throw alreadyLinked();
|
|
62
|
+
const standing = await collectionStanding({ config: c.get("config"), trace: c.get("trace") }, collectionId, caller.did);
|
|
63
|
+
if (!standing)
|
|
64
|
+
throw new ApiError("NOT_FOUND", `Collection ${collectionId} was not found on chain. Check the collection id and the network.`);
|
|
65
|
+
if (!standing.owner) {
|
|
66
|
+
throw new ApiError("FORBIDDEN", `Only the owner of collection ${collectionId} on chain can link it. Sign in with the account that owns it.`, { reason: "not_owner" });
|
|
67
|
+
}
|
|
68
|
+
const [row] = await db
|
|
69
|
+
.insert(apiSourceCollections)
|
|
70
|
+
.values({
|
|
71
|
+
sourceId,
|
|
72
|
+
collectionId,
|
|
73
|
+
protocolDid: standing.protocolDid,
|
|
74
|
+
linkedBy: caller.did,
|
|
75
|
+
})
|
|
76
|
+
.onConflictDoNothing()
|
|
77
|
+
.returning();
|
|
78
|
+
// A concurrent link landed between the read and the insert.
|
|
79
|
+
if (!row)
|
|
80
|
+
throw alreadyLinked();
|
|
81
|
+
await audit(c, "source.collection_linked", collectionId, { protocolDid: row.protocolDid });
|
|
82
|
+
return c.json(linkView(row), 201);
|
|
83
|
+
});
|
|
84
|
+
collectionsLink.delete("/source/collections/:collectionId", access({ op: "unlinkCollection", ...MANAGE }), idempotent(), validate("param", CollectionParam), async (c) => {
|
|
85
|
+
const { sourceId } = sourceOf(c).source;
|
|
86
|
+
const { collectionId } = c.req.valid("param");
|
|
87
|
+
const db = await c.var.db();
|
|
88
|
+
const [row] = await db
|
|
89
|
+
.delete(apiSourceCollections)
|
|
90
|
+
.where(linkWhere(sourceId, collectionId))
|
|
91
|
+
.returning({ collectionId: apiSourceCollections.collectionId });
|
|
92
|
+
// Idempotent: a link already gone is the answer asked for, audited only when one went.
|
|
93
|
+
if (row)
|
|
94
|
+
await audit(c, "source.collection_unlinked", collectionId, { reason: "member" });
|
|
95
|
+
return c.body(null, 204);
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=collections-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections-link.js","sourceRoot":"","sources":["../../../../src/routes/v1/api/collections-link.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `GET /v1/api/export` (go-prod spec §6.3): the source's personal data as ONE JSON document — its
|
|
3
|
+
* settings, members (emails, DIDs), webhook endpoints (URLs, never secrets), every stored claim
|
|
4
|
+
* (body, metadata, submitter, attachment descriptors), its uploaded files (listed — a signed URL
|
|
5
|
+
* would expire long before anyone reads the archive), the webhook delivery log (targets, never
|
|
6
|
+
* payloads) and the review answers given on its claims — written to `API_UPLOADS` as an
|
|
7
|
+
* `api_uploads` row under `exports/` and handed back behind the same short-lived signed URL an
|
|
8
|
+
* upload gets. The file route serves it as an `attachment`; the row's one-day `deleteAt` lets the
|
|
9
|
+
* housekeeping sweep take it (a copy the organisation asked for, not its data). The `exports/` key
|
|
10
|
+
* is what keeps the archive from ever being named as a claim's attachment (`checkSubmission`,
|
|
11
|
+
* `acceptClaim` bind `uploads/` keys only).
|
|
12
|
+
*
|
|
13
|
+
* - **Memory stays bounded.** A source holds every body it has not erased, each up to the 1 MiB
|
|
14
|
+
* request cap — more than a Worker can buffer. So every array is paged (claims a few at a time)
|
|
15
|
+
* and the document streams into an R2 multipart upload in fixed parts (R2: every part but the
|
|
16
|
+
* last the same size, ≥ 5 MiB); a part's leftover is copied out so the part's buffer can go.
|
|
17
|
+
* - **The `cid` is real.** The bytes are hashed incrementally as they stream — workerd's native
|
|
18
|
+
* `crypto.DigestStream` (standard WebCrypto has no incremental digest; this Workers extension
|
|
19
|
+
* does, off the JS heap) — so the row carries the same `raw` sha2-256 CID `cidForBytes` would
|
|
20
|
+
* give the whole file — no placeholder, no etag standing in for one.
|
|
21
|
+
* - **The row lands before the object**, as an upload's does: the object exists only once the
|
|
22
|
+
* multipart upload completes, and the row is written just before that. A failure before it
|
|
23
|
+
* aborts the upload (R2 aborts a forgotten one after 7 days anyway); a failed `complete` leaves a
|
|
24
|
+
* row the sweep removes harmlessly.
|
|
25
|
+
* - **Erased stays erased.** A body the erase route nulled exports as null;
|
|
26
|
+
* nothing is re-derived from digests or webhook payloads.
|
|
27
|
+
*/
|
|
28
|
+
import { Hono } from "hono";
|
|
29
|
+
import type { ApiEnv } from "../../../middleware/api/types.js";
|
|
30
|
+
export declare const dataExport: Hono<ApiEnv, import("hono/types").BlankSchema, "/">;
|
|
31
|
+
/** Text in, fixed-size multipart parts out, hashed as it goes. Exported for its test. */
|
|
32
|
+
export declare class PartWriter {
|
|
33
|
+
private readonly upload;
|
|
34
|
+
private readonly hash;
|
|
35
|
+
private readonly hasher;
|
|
36
|
+
size: number;
|
|
37
|
+
private buffered;
|
|
38
|
+
private bufferedBytes;
|
|
39
|
+
private readonly parts;
|
|
40
|
+
constructor(upload: R2MultipartUpload);
|
|
41
|
+
write(text: string): Promise<void>;
|
|
42
|
+
/** The sha2-256 of everything written — once, after the last write. */
|
|
43
|
+
digest(): Promise<Uint8Array>;
|
|
44
|
+
/** The last (short) part; every part before it was exactly `PART_BYTES`. */
|
|
45
|
+
flushAll(): Promise<R2UploadedPart[]>;
|
|
46
|
+
private uploadPart;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../src/routes/v1/api/export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAoB5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAI5D,eAAO,MAAM,UAAU,qDAAqB,CAAC;AA8O7C,yFAAyF;AACzF,qBAAa,UAAU;IAQT,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,IAAI,SAAK;IACT,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;IAE9C,YAA6B,MAAM,EAAE,iBAAiB,EAAI;IAEpD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvC;IAED,uEAAuE;IACjE,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,CAGlC;IAED,4EAA4E;IACtE,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAG1C;YAEa,UAAU;CAazB"}
|