@ixo/decision-oracle 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +121 -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,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `oauth` caller (S7, spec 2026-10-06; S3 review §1): a user acting through an AI app on
|
|
3
|
+
* `/v1/mcp`. The MCP handler verifies the token, then calls this app's own `/v1/api` routes
|
|
4
|
+
* in-process; THIS is how the route learns who it is serving. The mark is a `WeakMap` entry on the
|
|
5
|
+
* very `Request` object the handler builds, lifted into the `oauth` Hono var by `inProcessOAuth`
|
|
6
|
+
* before any middleware can replace `c.req.raw` — no header carries it, so nothing a remote client
|
|
7
|
+
* sends can make a request an OAuth one. `access()` builds the caller from that var alone.
|
|
8
|
+
*
|
|
9
|
+
* Rights: the user's standing on the source RIGHT NOW (`storedGrant` — a current controller of its
|
|
10
|
+
* organisation as root, or a live member, read on every request) intersected with the token's scopes. A route a key may not call
|
|
11
|
+
* (`scope: "none"`) or needing a scope the token lacks is `SCOPE`; the role's capability
|
|
12
|
+
* `FORBIDDEN` — so an OAuth token never reaches keys, members, webhooks, settings or caps.
|
|
13
|
+
*/
|
|
14
|
+
import type { AppEnv, OAuthSeam } from "../../context.js";
|
|
15
|
+
import type { Access, AnonymousCaller, ApiContext, OAuthCaller } from "./types.js";
|
|
16
|
+
/** Mark a request the MCP handler is about to send in-process as made for this OAuth caller. */
|
|
17
|
+
export declare function markOAuth(req: Request, seam: OAuthSeam): Request;
|
|
18
|
+
/** App middleware: the mark, as the `oauth` var. Runs before anything can swap `c.req.raw`. */
|
|
19
|
+
export declare const inProcessOAuth: import("hono").MiddlewareHandler<AppEnv, string, {}, Response>;
|
|
20
|
+
/**
|
|
21
|
+
* The submit route around `/verify` (S3 review F3): on before it, off only when the gate's answer
|
|
22
|
+
* proves nothing was reserved. A throw (an outage mid-verify) or a reservation leaves it on, so
|
|
23
|
+
* the MCP handler never gives that approval back. Returns what it was: once an earlier attempt
|
|
24
|
+
* (the SDK's resend after a 5xx) left it on, a later refusal must not clear it (S3 review N4).
|
|
25
|
+
*/
|
|
26
|
+
export declare function noteReserving(c: ApiContext, on: boolean): boolean;
|
|
27
|
+
export declare function oauthCaller(c: ApiContext, spec: Access, seam: OAuthSeam): Promise<OAuthCaller | AnonymousCaller>;
|
|
28
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/middleware/api/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAQvD,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAgBhF,gGAAgG;AAChG,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAGhE;AAED,+FAA+F;AAC/F,eAAO,MAAM,cAAc,gEAIzB,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAKjE;AAED,wBAAsB,WAAW,CAC/B,CAAC,EAAE,UAAU,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,WAAW,GAAG,eAAe,CAAC,CAmExC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `oauth` caller (S7, spec 2026-10-06; S3 review §1): a user acting through an AI app on
|
|
3
|
+
* `/v1/mcp`. The MCP handler verifies the token, then calls this app's own `/v1/api` routes
|
|
4
|
+
* in-process; THIS is how the route learns who it is serving. The mark is a `WeakMap` entry on the
|
|
5
|
+
* very `Request` object the handler builds, lifted into the `oauth` Hono var by `inProcessOAuth`
|
|
6
|
+
* before any middleware can replace `c.req.raw` — no header carries it, so nothing a remote client
|
|
7
|
+
* sends can make a request an OAuth one. `access()` builds the caller from that var alone.
|
|
8
|
+
*
|
|
9
|
+
* Rights: the user's standing on the source RIGHT NOW (`storedGrant` — a current controller of its
|
|
10
|
+
* organisation as root, or a live member, read on every request) intersected with the token's scopes. A route a key may not call
|
|
11
|
+
* (`scope: "none"`) or needing a scope the token lacks is `SCOPE`; the role's capability
|
|
12
|
+
* `FORBIDDEN` — so an OAuth token never reaches keys, members, webhooks, settings or caps.
|
|
13
|
+
*/
|
|
14
|
+
import { eq } from "drizzle-orm";
|
|
15
|
+
import { createMiddleware } from "hono/factory";
|
|
16
|
+
import { Capability, covers } from "../../contracts/index.js";
|
|
17
|
+
import { apiSources } from "../../db/schema.js";
|
|
18
|
+
import { sourceRoots } from "../../lib/api-lane/company.js";
|
|
19
|
+
import { oracleWebDid } from "../../lib/ixo/ucan.js";
|
|
20
|
+
import { chainOf, storedGrant } from "./console.js";
|
|
21
|
+
import { ApiError, assertLinkedFor } from "./errors.js";
|
|
22
|
+
import { limitCaller } from "./rate-limit.js";
|
|
23
|
+
const marked = new WeakMap();
|
|
24
|
+
/** The routes `routes/v1/mcp/tools.ts` calls for an OAuth caller, and no others. */
|
|
25
|
+
const OAUTH_OPS = new Set([
|
|
26
|
+
"submitClaim",
|
|
27
|
+
"getClaim",
|
|
28
|
+
"getClaimReceipt",
|
|
29
|
+
"listProtocols",
|
|
30
|
+
"getProtocol",
|
|
31
|
+
// `upload_file`'s link and `submit_claim`'s cid read — never the raw `PUT /uploads`.
|
|
32
|
+
"createUploadLink",
|
|
33
|
+
"getUpload",
|
|
34
|
+
]);
|
|
35
|
+
/** Mark a request the MCP handler is about to send in-process as made for this OAuth caller. */
|
|
36
|
+
export function markOAuth(req, seam) {
|
|
37
|
+
marked.set(req, seam);
|
|
38
|
+
return req;
|
|
39
|
+
}
|
|
40
|
+
/** App middleware: the mark, as the `oauth` var. Runs before anything can swap `c.req.raw`. */
|
|
41
|
+
export const inProcessOAuth = createMiddleware(async (c, next) => {
|
|
42
|
+
const seam = marked.get(c.req.raw);
|
|
43
|
+
if (seam)
|
|
44
|
+
c.set("oauth", seam);
|
|
45
|
+
await next();
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* The submit route around `/verify` (S3 review F3): on before it, off only when the gate's answer
|
|
49
|
+
* proves nothing was reserved. A throw (an outage mid-verify) or a reservation leaves it on, so
|
|
50
|
+
* the MCP handler never gives that approval back. Returns what it was: once an earlier attempt
|
|
51
|
+
* (the SDK's resend after a 5xx) left it on, a later refusal must not clear it (S3 review N4).
|
|
52
|
+
*/
|
|
53
|
+
export function noteReserving(c, on) {
|
|
54
|
+
const seam = c.get("oauth");
|
|
55
|
+
const was = seam?.reserving === true;
|
|
56
|
+
if (seam)
|
|
57
|
+
seam.reserving = on;
|
|
58
|
+
return was;
|
|
59
|
+
}
|
|
60
|
+
export async function oauthCaller(c, spec, seam) {
|
|
61
|
+
const { identity, sourceId } = seam;
|
|
62
|
+
// Exactly what the MCP tools call (S3 review F2): an app over OAuth reaches nothing else,
|
|
63
|
+
// whatever the user's role — no erasure, review, raw upload, batch, settings or console route.
|
|
64
|
+
if (!OAUTH_OPS.has(spec.op)) {
|
|
65
|
+
throw new ApiError("SCOPE", "An AI app connected with OAuth can't do this. Sign in to the Decision Console to do it.");
|
|
66
|
+
}
|
|
67
|
+
if (sourceId === null) {
|
|
68
|
+
if (spec.capability === "public")
|
|
69
|
+
return { kind: "anonymous" };
|
|
70
|
+
throw new ApiError("NOT_FOUND", "Say which source this is for.");
|
|
71
|
+
}
|
|
72
|
+
const db = await c.var.db();
|
|
73
|
+
const source = await db.query.apiSources.findFirst({ where: eq(apiSources.sourceId, sourceId) });
|
|
74
|
+
const grant = source
|
|
75
|
+
? await storedGrant(db, await sourceRoots(chainOf(c), source), oracleWebDid(c.get("config")), source, identity.did)
|
|
76
|
+
: null;
|
|
77
|
+
if (!source || !grant) {
|
|
78
|
+
// The id is not echoed: the message is logged, and a pending source's id never is.
|
|
79
|
+
throw new ApiError("NOT_FOUND", "This source was not found, or you are not a member of it.");
|
|
80
|
+
}
|
|
81
|
+
// D10, as for a console member: an unlinked source answers only what `assertLinkedFor` allows.
|
|
82
|
+
assertLinkedFor(source, spec.op);
|
|
83
|
+
const caller = {
|
|
84
|
+
kind: "oauth",
|
|
85
|
+
source,
|
|
86
|
+
did: identity.did,
|
|
87
|
+
clientId: identity.clientId,
|
|
88
|
+
clientName: identity.clientName,
|
|
89
|
+
clientVerified: identity.clientVerified,
|
|
90
|
+
grantId: identity.grantId,
|
|
91
|
+
scopes: identity.scopes,
|
|
92
|
+
...grant,
|
|
93
|
+
};
|
|
94
|
+
// As every source caller: counted once identified, before the route's own check.
|
|
95
|
+
await limitCaller(c, caller);
|
|
96
|
+
const { scope, capability } = spec;
|
|
97
|
+
if (scope === "none" || (scope !== null && !caller.scopes.includes(scope))) {
|
|
98
|
+
throw new ApiError("SCOPE", scope === "none"
|
|
99
|
+
? "An AI app connected with OAuth can't do this. Sign in to the Decision Console to do it."
|
|
100
|
+
: `This AI app's connection doesn't have the ${scope} permission. Reconnect it and allow ${scope}.`, scope === "none" ? undefined : { required: scope });
|
|
101
|
+
}
|
|
102
|
+
if (capability !== null &&
|
|
103
|
+
Capability.safeParse(capability).success &&
|
|
104
|
+
!covers(caller.capabilities, capability)) {
|
|
105
|
+
throw new ApiError("FORBIDDEN", `Your role on this source doesn't allow this (it needs the ${capability} permission). Ask the source's owner for a role that includes it.`, { required: capability });
|
|
106
|
+
}
|
|
107
|
+
return caller;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/middleware/api/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-key and per-source limits (go-prod spec §4.1): `RateLimit-Limit`, `RateLimit-Remaining`,
|
|
3
|
+
* `RateLimit-Reset` on every answer; `429 RATE_LIMITED` + `Retry-After` past either.
|
|
4
|
+
*
|
|
5
|
+
* Cloudflare's `ratelimit` binding (`API_KEY_RATE_LIMITER`) DECIDES — it is the platform's way,
|
|
6
|
+
* per-colo and eventually consistent, and a no-op in local dev and tests. It reports only
|
|
7
|
+
* allow/deny, so the headers' `Remaining` is this isolate's own count within the same window: an
|
|
8
|
+
* honest hint that never promises more than the binding will allow. `API_KEY_LIMIT` must match the
|
|
9
|
+
* binding's `simple` block in wrangler.jsonc (the package's and the template's).
|
|
10
|
+
*
|
|
11
|
+
* Runs after `access()` has named the caller: a key is limited by its prefix and by its source, a
|
|
12
|
+
* console member by its DID and by its source, an AI app over OAuth by its grant and by its source — one busy integration never starves its source's
|
|
13
|
+
* console, and no source can starve the oracle.
|
|
14
|
+
*/
|
|
15
|
+
import type { Context } from "hono";
|
|
16
|
+
import type { ApiEnv, SourceCaller } from "./types.js";
|
|
17
|
+
/** Mirrors `API_KEY_RATE_LIMITER`'s `simple: { limit: 600, period: 60 }`. */
|
|
18
|
+
export declare const API_KEY_LIMIT: {
|
|
19
|
+
readonly limit: 600;
|
|
20
|
+
readonly periodSec: 60;
|
|
21
|
+
};
|
|
22
|
+
export declare function limitCaller(c: Context<ApiEnv>, caller: SourceCaller): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=rate-limit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/middleware/api/rate-limit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGpC,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEpD,6EAA6E;AAC7E,eAAO,MAAM,aAAa;aAAK,KAAK,EAAE,GAAG;aAAE,SAAS,EAAE,EAAE;CAAW,CAAC;AAKpE,wBAAsB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCzF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-key and per-source limits (go-prod spec §4.1): `RateLimit-Limit`, `RateLimit-Remaining`,
|
|
3
|
+
* `RateLimit-Reset` on every answer; `429 RATE_LIMITED` + `Retry-After` past either.
|
|
4
|
+
*
|
|
5
|
+
* Cloudflare's `ratelimit` binding (`API_KEY_RATE_LIMITER`) DECIDES — it is the platform's way,
|
|
6
|
+
* per-colo and eventually consistent, and a no-op in local dev and tests. It reports only
|
|
7
|
+
* allow/deny, so the headers' `Remaining` is this isolate's own count within the same window: an
|
|
8
|
+
* honest hint that never promises more than the binding will allow. `API_KEY_LIMIT` must match the
|
|
9
|
+
* binding's `simple` block in wrangler.jsonc (the package's and the template's).
|
|
10
|
+
*
|
|
11
|
+
* Runs after `access()` has named the caller: a key is limited by its prefix and by its source, a
|
|
12
|
+
* console member by its DID and by its source, an AI app over OAuth by its grant and by its source — one busy integration never starves its source's
|
|
13
|
+
* console, and no source can starve the oracle.
|
|
14
|
+
*/
|
|
15
|
+
import { endpointOf } from "../observability.js";
|
|
16
|
+
import { ApiError } from "./errors.js";
|
|
17
|
+
/** Mirrors `API_KEY_RATE_LIMITER`'s `simple: { limit: 600, period: 60 }`. */
|
|
18
|
+
export const API_KEY_LIMIT = { limit: 600, periodSec: 60 };
|
|
19
|
+
/** window-start → count, per limiter key; old windows are dropped as they are passed. */
|
|
20
|
+
const counts = new Map();
|
|
21
|
+
export async function limitCaller(c, caller) {
|
|
22
|
+
const limiter = c.env.API_KEY_RATE_LIMITER;
|
|
23
|
+
if (!limiter)
|
|
24
|
+
return; // optional binding: an oracle that set none limits per IP only
|
|
25
|
+
const who = caller.kind === "key"
|
|
26
|
+
? `key:${caller.key.prefix}`
|
|
27
|
+
: caller.kind === "oauth"
|
|
28
|
+
? `oauth:${caller.grantId}`
|
|
29
|
+
: `member:${caller.did}`;
|
|
30
|
+
const keys = [who, `source:${caller.source.sourceId}`];
|
|
31
|
+
const now = Date.now();
|
|
32
|
+
const periodMs = API_KEY_LIMIT.periodSec * 1000;
|
|
33
|
+
const window = Math.floor(now / periodMs) * periodMs;
|
|
34
|
+
const reset = Math.ceil((window + periodMs - now) / 1000);
|
|
35
|
+
let allowed = true;
|
|
36
|
+
try {
|
|
37
|
+
for (const key of keys) {
|
|
38
|
+
if (!(await limiter.limit({ key })).success)
|
|
39
|
+
allowed = false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
// Fail OPEN, as the per-IP guard does: a limiter glitch must never take the API down.
|
|
44
|
+
c.get("logger").warn("api.ratelimit.errored", { detail: String(err) });
|
|
45
|
+
}
|
|
46
|
+
const used = Math.max(...keys.map((key) => bump(key, window)));
|
|
47
|
+
c.header("RateLimit-Limit", String(API_KEY_LIMIT.limit));
|
|
48
|
+
c.header("RateLimit-Remaining", String(allowed ? Math.max(0, API_KEY_LIMIT.limit - used) : 0));
|
|
49
|
+
c.header("RateLimit-Reset", String(reset));
|
|
50
|
+
if (!allowed) {
|
|
51
|
+
c.header("Retry-After", String(reset));
|
|
52
|
+
c.get("metrics").count("api.rate_limited", 1, { route: endpointOf(c) });
|
|
53
|
+
throw new ApiError("RATE_LIMITED", `Rate limit reached for this ${caller.kind === "key" ? "API key" : caller.kind === "oauth" ? "AI app connection" : "account"} or its source (${API_KEY_LIMIT.limit} requests a minute). Wait and retry; the Retry-After header says how many seconds.`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function bump(key, window) {
|
|
57
|
+
const entry = counts.get(key);
|
|
58
|
+
if (!entry || entry.window !== window) {
|
|
59
|
+
counts.set(key, { window, n: 1 });
|
|
60
|
+
if (counts.size > 10_000) {
|
|
61
|
+
for (const [k, v] of counts)
|
|
62
|
+
if (v.window !== window)
|
|
63
|
+
counts.delete(k);
|
|
64
|
+
}
|
|
65
|
+
return 1;
|
|
66
|
+
}
|
|
67
|
+
entry.n += 1;
|
|
68
|
+
return entry.n;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=rate-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../../src/middleware/api/rate-limit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/v1/api` router's Hono environment (go-prod spec §3.1): the app's variables plus the
|
|
3
|
+
* resolved CALLER — who is asking, for which source, allowed to do what. Set once by `access()`
|
|
4
|
+
* (`auth.ts`) on every guarded route; a route never re-derives it.
|
|
5
|
+
*/
|
|
6
|
+
import type { Context } from "hono";
|
|
7
|
+
import type { AppEnv, Variables } from "../../context.js";
|
|
8
|
+
import type { ApiOp, Capability, MemberRole, Scope } from "../../contracts/index.js";
|
|
9
|
+
import type { ApiKey as ApiKeyRow, ApiSource } from "../../db/schema.js";
|
|
10
|
+
/** An integration: an API key of a source, gated by its scopes (§3.2). */
|
|
11
|
+
export interface KeyCaller {
|
|
12
|
+
kind: "key";
|
|
13
|
+
source: ApiSource;
|
|
14
|
+
key: ApiKeyRow;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A console member (§3.4): a UCAN invocation whose proof chain roots at a current controller of the
|
|
18
|
+
* source's organisation (D10). `capabilities`/`protocols` are the chain's EFFECTIVE grant
|
|
19
|
+
* (intersection along the chain); a controller invoking directly is root — `source/*`, no
|
|
20
|
+
* narrowing, `controller: true`, whether or not it also has a member row.
|
|
21
|
+
*/
|
|
22
|
+
export interface MemberCaller {
|
|
23
|
+
kind: "member";
|
|
24
|
+
source: ApiSource;
|
|
25
|
+
/** The signed-in account that invoked (the chain's leaf audience). */
|
|
26
|
+
did: string;
|
|
27
|
+
/** Root: a current controller of `source.companyEntityDid`, invoking with no proof. */
|
|
28
|
+
controller: boolean;
|
|
29
|
+
/** Null for a controller with no member row. */
|
|
30
|
+
memberId: string | null;
|
|
31
|
+
role: MemberRole;
|
|
32
|
+
capabilities: readonly Capability[];
|
|
33
|
+
/** `nb.protocols`: the protocols `claims/*` are narrowed to; null = all. */
|
|
34
|
+
protocols: readonly string[] | null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A user acting through an AI app connected to `/v1/mcp` over OAuth (S7, spec 2026-10-06). Built
|
|
38
|
+
* ONLY from the MCP handler's in-process mark (`oauth.ts`), never from anything a remote request
|
|
39
|
+
* carries: an OAuth token sent to `/v1/api` is a 401 like any other non-key. Its rights are the
|
|
40
|
+
* user's live standing on the source (`storedGrant`) intersected with the token's scopes.
|
|
41
|
+
*/
|
|
42
|
+
export interface OAuthCaller {
|
|
43
|
+
kind: "oauth";
|
|
44
|
+
source: ApiSource;
|
|
45
|
+
/** The user (`sub`). */
|
|
46
|
+
did: string;
|
|
47
|
+
clientId: string;
|
|
48
|
+
clientName: string;
|
|
49
|
+
/** AuthHub vouches the app is Claude or ChatGPT (`OAuthIdentity.clientVerified`). */
|
|
50
|
+
clientVerified: boolean;
|
|
51
|
+
/** AuthHub's grant: the rate-limit and spend-cap key. */
|
|
52
|
+
grantId: string;
|
|
53
|
+
scopes: readonly Scope[];
|
|
54
|
+
role: MemberRole;
|
|
55
|
+
capabilities: readonly Capability[];
|
|
56
|
+
protocols: readonly string[] | null;
|
|
57
|
+
}
|
|
58
|
+
/** A request with no credential on a `public` route (the protocols catalogue). */
|
|
59
|
+
export interface AnonymousCaller {
|
|
60
|
+
kind: "anonymous";
|
|
61
|
+
}
|
|
62
|
+
/** A signed-in IXO account on an `account` route (sign-up, my sources, accept) — no source yet. */
|
|
63
|
+
export interface AccountCaller {
|
|
64
|
+
kind: "account";
|
|
65
|
+
did: string;
|
|
66
|
+
}
|
|
67
|
+
/** An `ORACLE_ADMIN_DIDS` invoker on `/v1/api/admin/*`. */
|
|
68
|
+
export interface OperatorCaller {
|
|
69
|
+
kind: "operator";
|
|
70
|
+
did: string;
|
|
71
|
+
}
|
|
72
|
+
export type SourceCaller = KeyCaller | MemberCaller | OAuthCaller;
|
|
73
|
+
export type ApiCaller = SourceCaller | AnonymousCaller | AccountCaller | OperatorCaller;
|
|
74
|
+
export interface ApiVariables extends Variables {
|
|
75
|
+
caller: ApiCaller;
|
|
76
|
+
}
|
|
77
|
+
export interface ApiEnv {
|
|
78
|
+
Bindings: AppEnv["Bindings"];
|
|
79
|
+
Variables: ApiVariables;
|
|
80
|
+
}
|
|
81
|
+
export type ApiContext = Context<ApiEnv>;
|
|
82
|
+
/** What a route is: its OpenAPI `operationId`, and who may call it (`x-required-scope`,
|
|
83
|
+
* `x-capability`). The snapshot test holds these to the OpenAPI file. `op` is an `API_ACTIONS`
|
|
84
|
+
* key, so a new route does not compile until it has its console action. */
|
|
85
|
+
export interface Access {
|
|
86
|
+
op: ApiOp;
|
|
87
|
+
/** What an API key needs; null = any key; `none` = keys may not call it (console/operator only). */
|
|
88
|
+
scope: Scope | null | "none";
|
|
89
|
+
/** What a console grant needs; null = any grant on the source. */
|
|
90
|
+
capability: Capability | null | "public" | "account" | "operator";
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/middleware/api/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,IAAI,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEtE,0EAA0E;AAC1E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,SAAS,CAAC;IAClB,GAAG,EAAE,SAAS,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,uFAAuF;IACvF,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,SAAS,UAAU,EAAE,CAAC;IACpC,4EAA4E;IAC5E,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;IAClB,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,cAAc,EAAE,OAAO,CAAC;IACxB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,SAAS,UAAU,EAAE,CAAC;IACpC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CACrC;AAED,kFAAkF;AAClF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,mGAAmG;AACnG,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,CAAC;AAClE,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,eAAe,GAAG,aAAa,GAAG,cAAc,CAAC;AAExF,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7B,SAAS,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAEzC;;4EAE4E;AAC5E,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,KAAK,CAAC;IACV,oGAAoG;IACpG,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;IAC7B,kEAAkE;IAClE,UAAU,EAAE,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;CACnE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/v1/api` router's Hono environment (go-prod spec §3.1): the app's variables plus the
|
|
3
|
+
* resolved CALLER — who is asking, for which source, allowed to do what. Set once by `access()`
|
|
4
|
+
* (`auth.ts`) on every guarded route; a route never re-derives it.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/middleware/api/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync and async are one path (go-prod spec §4.6): every submission starts a `ClaimIngest`
|
|
3
|
+
* instance, and a caller that asked to wait (`Prefer: wait=N` on submit, `?wait=N` on GET) polls
|
|
4
|
+
* the ledger — 500 ms rising to 2 s — until the decision lands or the budget runs out. The workflow
|
|
5
|
+
* never knows anyone is waiting, so a client that hangs up orphans nothing.
|
|
6
|
+
*
|
|
7
|
+
* At most 20 waiters per source in this isolate; past that the answer is an immediate `202`. The
|
|
8
|
+
* cap protects what a waiter holds — this isolate's open requests and D1 reads — so it is counted
|
|
9
|
+
* where that cost is paid, not globally.
|
|
10
|
+
*/
|
|
11
|
+
import type { Database } from "../../db/client.js";
|
|
12
|
+
export declare const MAX_WAITERS_PER_SOURCE = 20;
|
|
13
|
+
/** `Prefer: wait=N` (RFC 7240, one of possibly several comma-separated preferences) → seconds,
|
|
14
|
+
* capped at 90; absent or malformed ⇒ null (no wait). */
|
|
15
|
+
export declare function preferredWait(prefer: string | undefined): number | null;
|
|
16
|
+
/**
|
|
17
|
+
* Wait up to `seconds` for the claim to land. `true` once it has (answer 200 + the record, with
|
|
18
|
+
* `Preference-Applied`), `false` when the budget ran out or no waiter slot was free (answer 202).
|
|
19
|
+
*/
|
|
20
|
+
export declare function awaitLanding(db: Database, sourceId: string, claimId: string, seconds: number): Promise<boolean>;
|
|
21
|
+
//# sourceMappingURL=wait.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/middleware/api/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAUzC;0DAC0D;AAC1D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGvE;AAsBD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CA8BlB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync and async are one path (go-prod spec §4.6): every submission starts a `ClaimIngest`
|
|
3
|
+
* instance, and a caller that asked to wait (`Prefer: wait=N` on submit, `?wait=N` on GET) polls
|
|
4
|
+
* the ledger — 500 ms rising to 2 s — until the decision lands or the budget runs out. The workflow
|
|
5
|
+
* never knows anyone is waiting, so a client that hangs up orphans nothing.
|
|
6
|
+
*
|
|
7
|
+
* At most 20 waiters per source in this isolate; past that the answer is an immediate `202`. The
|
|
8
|
+
* cap protects what a waiter holds — this isolate's open requests and D1 reads — so it is counted
|
|
9
|
+
* where that cost is paid, not globally.
|
|
10
|
+
*/
|
|
11
|
+
import * as Sentry from "@sentry/cloudflare";
|
|
12
|
+
import { eq } from "drizzle-orm";
|
|
13
|
+
import { MAX_WAIT_SECONDS } from "../../contracts/index.js";
|
|
14
|
+
import { claimIngests, decisions } from "../../db/schema.js";
|
|
15
|
+
export const MAX_WAITERS_PER_SOURCE = 20;
|
|
16
|
+
const FIRST_POLL_MS = 500;
|
|
17
|
+
const MAX_POLL_MS = 2000;
|
|
18
|
+
/** After the decision row lands, how long the ledger gets to catch up (the workflow's notify and
|
|
19
|
+
* mark-processed steps) before the answer goes out anyway — so a sync 200 reads `processed`
|
|
20
|
+
* beside its decision, not a stale `processing` (S7, 2026-09-30). `decision` stays the truth. */
|
|
21
|
+
const SETTLE_GRACE_MS = 3000;
|
|
22
|
+
const waiters = new Map();
|
|
23
|
+
/** `Prefer: wait=N` (RFC 7240, one of possibly several comma-separated preferences) → seconds,
|
|
24
|
+
* capped at 90; absent or malformed ⇒ null (no wait). */
|
|
25
|
+
export function preferredWait(prefer) {
|
|
26
|
+
const m = prefer && /(?:^|[,;\s])wait\s*=\s*(\d+)/i.exec(prefer);
|
|
27
|
+
return m ? Math.min(Number(m[1]), MAX_WAIT_SECONDS) : null;
|
|
28
|
+
}
|
|
29
|
+
/** Where the claim is: `stopped` once the ledger is `processed` / `failed`; `decided` once a
|
|
30
|
+
* decision row exists (any status, a pending review included). Untraced: a waiter repeats this one
|
|
31
|
+
* read every 0.5–2 s by design, which Sentry's N+1 detector would flag on every sync submit. */
|
|
32
|
+
async function progress(db, claimId) {
|
|
33
|
+
const [row] = await Sentry.suppressTracing(() => db
|
|
34
|
+
.select({ status: claimIngests.status, decided: decisions.claimId })
|
|
35
|
+
.from(claimIngests)
|
|
36
|
+
.leftJoin(decisions, eq(decisions.claimId, claimIngests.claimId))
|
|
37
|
+
.where(eq(claimIngests.claimId, claimId)));
|
|
38
|
+
return {
|
|
39
|
+
decided: !!row && row.decided !== null,
|
|
40
|
+
stopped: !!row && (row.status === "processed" || row.status === "failed"),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Wait up to `seconds` for the claim to land. `true` once it has (answer 200 + the record, with
|
|
45
|
+
* `Preference-Applied`), `false` when the budget ran out or no waiter slot was free (answer 202).
|
|
46
|
+
*/
|
|
47
|
+
export async function awaitLanding(db, sourceId, claimId, seconds) {
|
|
48
|
+
const first = await progress(db, claimId);
|
|
49
|
+
if (first.stopped)
|
|
50
|
+
return true;
|
|
51
|
+
if (seconds <= 0)
|
|
52
|
+
return first.decided;
|
|
53
|
+
const inFlight = waiters.get(sourceId) ?? 0;
|
|
54
|
+
if (inFlight >= MAX_WAITERS_PER_SOURCE)
|
|
55
|
+
return false;
|
|
56
|
+
waiters.set(sourceId, inFlight + 1);
|
|
57
|
+
try {
|
|
58
|
+
let deadline = Date.now() + seconds * 1000;
|
|
59
|
+
let decided = first.decided;
|
|
60
|
+
// Decided already: only the ledger's catch-up is left, so the grace (not the full budget) bounds it.
|
|
61
|
+
if (decided)
|
|
62
|
+
deadline = Math.min(deadline, Date.now() + SETTLE_GRACE_MS);
|
|
63
|
+
let delay = FIRST_POLL_MS;
|
|
64
|
+
for (let left = deadline - Date.now(); left > 0; left = deadline - Date.now()) {
|
|
65
|
+
await new Promise((r) => setTimeout(r, Math.min(delay, left)));
|
|
66
|
+
const now = await progress(db, claimId);
|
|
67
|
+
if (now.stopped)
|
|
68
|
+
return true;
|
|
69
|
+
if (now.decided && !decided) {
|
|
70
|
+
decided = true;
|
|
71
|
+
deadline = Math.min(deadline, Date.now() + SETTLE_GRACE_MS);
|
|
72
|
+
}
|
|
73
|
+
delay = Math.min(delay * 1.5, MAX_POLL_MS);
|
|
74
|
+
}
|
|
75
|
+
return decided;
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
const n = (waiters.get(sourceId) ?? 1) - 1;
|
|
79
|
+
if (n > 0)
|
|
80
|
+
waiters.set(sourceId, n);
|
|
81
|
+
else
|
|
82
|
+
waiters.delete(sourceId);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=wait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/middleware/api/wait.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One capability per route on the chain lane (owner, 2026-09-30 — CLAUDE.md "Capabilities: one
|
|
3
|
+
* action per route, never `*`"). Every UCAN-guarded chain-lane route accepts exactly ONE `can` on
|
|
4
|
+
* `ixo:eval-oracle`, listed here: the single source of truth a caller (a portal, the CLI, the
|
|
5
|
+
* engine's status board) maps its calls against. The Decision API lane (`/v1/api/*`) has its own
|
|
6
|
+
* auth and is not in this table; the public routes (`/v1/info`, `/health`, did.json) never reach it.
|
|
7
|
+
*
|
|
8
|
+
* Transitional: the legacy `*` still passes while portals, consoles and the engine switch, and is
|
|
9
|
+
* logged (`ucan.wildcard`, route + invoker only) so the strict step knows who still sends it — and
|
|
10
|
+
* counted (`ucan.wildcard`, the route only) so that step can rest on Analytics Engine data.
|
|
11
|
+
*/
|
|
12
|
+
import type { AppEnv } from "../context.js";
|
|
13
|
+
/** Until the strict step: an invocation still minting `{ can: "*" }` keeps working. */
|
|
14
|
+
export declare const ACCEPT_WILDCARD = true;
|
|
15
|
+
/** [method, path pattern (`:param` = one segment), the one action it accepts]. */
|
|
16
|
+
export declare const ROUTE_ACTIONS: readonly [readonly ["POST", "/v1/collections/register", "collections/register"], readonly ["GET", "/v1/collections", "collections/read"], readonly ["POST", "/v1/collections/:collectionId/pause", "collections/pause"], readonly ["POST", "/v1/collections/:collectionId/resume", "collections/resume"], readonly ["POST", "/v1/collections/:collectionId/scan", "collections/scan"], readonly ["PATCH", "/v1/collections/:collectionId/settings", "collections/settings"], readonly ["GET", "/v1/collections/:collectionId/settings", "collections/settings-read"], readonly ["POST", "/v1/collections/:collectionId/reviewers", "collections/reviewers-grant"], readonly ["GET", "/v1/collections/:collectionId/reviewers", "collections/reviewers-read"], readonly ["POST", "/v1/collections/:collectionId/reviewers/:delegationCid/revoke", "collections/reviewers-revoke"], readonly ["GET", "/v1/claims", "claims/read"], readonly ["GET", "/v1/claims/:claimId", "claims/read"], readonly ["DELETE", "/v1/claims/:claimId/body", "claims/erase"], readonly ["GET", "/v1/reviews/:claimId", "reviews/read"], readonly ["POST", "/v1/reviews/:claimId", "reviews/submit"], readonly ["GET", "/v1/admin/status", "admin/status"], readonly ["POST", "/v1/admin/collections/relink", "admin/collections-relink"], readonly ["GET", "/v1/oauth/approvals/:approvalId", "oauth/approval/read"], readonly ["POST", "/v1/oauth/approvals/:approvalId", "oauth/approval/approve"], readonly ["GET", "/v1/oauth/standing/:grantId", "oauth/standing/read"], readonly ["PUT", "/v1/oauth/standing/:grantId", "oauth/standing/set"], readonly ["DELETE", "/v1/oauth/standing/:grantId", "oauth/standing/revoke"]];
|
|
17
|
+
export type OracleAction = (typeof ROUTE_ACTIONS)[number][2];
|
|
18
|
+
/** Actions the legacy `*` NEVER stands in for, whatever `ACCEPT_WILDCARD` says (S3 review §3). */
|
|
19
|
+
export declare const STRICT_ACTIONS: ReadonlySet<OracleAction>;
|
|
20
|
+
/** Every `can` `ucanAuth` will validate at all: the table's actions, plus `*` while it is accepted. */
|
|
21
|
+
export declare const ACCEPTED_CANS: readonly string[];
|
|
22
|
+
/** The route a request hits and the action it needs, or null for a route with no entry. HEAD is
|
|
23
|
+
* its GET (Hono answers HEAD with the GET handler), so it takes the GET's action. */
|
|
24
|
+
export declare function actionFor(method: string, path: string): {
|
|
25
|
+
pattern: string;
|
|
26
|
+
action: OracleAction;
|
|
27
|
+
} | null;
|
|
28
|
+
/** After `ucanAuth`: the invocation's one `can` must be this route's action (or, while
|
|
29
|
+
* `ACCEPT_WILDCARD`, `*` — never on a `STRICT_ACTIONS` route). A `*` on a route with no entry
|
|
30
|
+
* falls through to its 404. */
|
|
31
|
+
export declare const requireAction: import("hono").MiddlewareHandler<AppEnv, string, {}, Response>;
|
|
32
|
+
//# sourceMappingURL=capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/middleware/capability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,uFAAuF;AACvF,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,kFAAkF;AAClF,eAAO,MAAM,aAAa,sBACvB,MAAM,EAAE,0BAA0B,EAAE,sBAAsB,aAC1D,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,aAC5C,MAAM,EAAE,qCAAqC,EAAE,mBAAmB,aAClE,MAAM,EAAE,sCAAsC,EAAE,oBAAoB,aACpE,MAAM,EAAE,oCAAoC,EAAE,kBAAkB,aAEhE,OAAO,EAAE,wCAAwC,EAAE,sBAAsB,aACzE,KAAK,EAAE,wCAAwC,EAAE,2BAA2B,aAE5E,MAAM,EAAE,yCAAyC,EAAE,6BAA6B,aAChF,KAAK,EAAE,yCAAyC,EAAE,4BAA4B,aAE7E,MAAM,EACN,+DAA+D,EAC/D,8BAA8B,aAE/B,KAAK,EAAE,YAAY,EAAE,aAAa,aAClC,KAAK,EAAE,qBAAqB,EAAE,aAAa,aAE3C,QAAQ,EAAE,0BAA0B,EAAE,cAAc,aACpD,KAAK,EAAE,sBAAsB,EAAE,cAAc,aAC7C,MAAM,EAAE,sBAAsB,EAAE,gBAAgB,aAChD,KAAK,EAAE,kBAAkB,EAAE,cAAc,aAEzC,MAAM,EAAE,8BAA8B,EAAE,0BAA0B,aAElE,KAAK,EAAE,iCAAiC,EAAE,qBAAqB,aAC/D,MAAM,EAAE,iCAAiC,EAAE,wBAAwB,aAEnE,KAAK,EAAE,6BAA6B,EAAE,qBAAqB,aAC3D,KAAK,EAAE,6BAA6B,EAAE,oBAAoB,aAC1D,QAAQ,EAAE,6BAA6B,EAAE,uBAAuB,EACzD,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7D,kGAAkG;AAClG,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,YAAY,CAgBnD,CAAC;AAEH,uGAAuG;AACvG,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAK1C,CAAC;AAUF;sFACsF;AACtF,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,IAAI,CAIlD;AAED;;gCAEgC;AAChC,eAAO,MAAM,aAAa,gEAuBxB,CAAC"}
|