@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,113 @@
|
|
|
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 { createMiddleware } from "hono/factory";
|
|
13
|
+
import { AppError } from "../lib/errors.js";
|
|
14
|
+
/** Until the strict step: an invocation still minting `{ can: "*" }` keeps working. */
|
|
15
|
+
export const ACCEPT_WILDCARD = true;
|
|
16
|
+
/** [method, path pattern (`:param` = one segment), the one action it accepts]. */
|
|
17
|
+
export const ROUTE_ACTIONS = [
|
|
18
|
+
["POST", "/v1/collections/register", "collections/register"],
|
|
19
|
+
["GET", "/v1/collections", "collections/read"],
|
|
20
|
+
["POST", "/v1/collections/:collectionId/pause", "collections/pause"],
|
|
21
|
+
["POST", "/v1/collections/:collectionId/resume", "collections/resume"],
|
|
22
|
+
["POST", "/v1/collections/:collectionId/scan", "collections/scan"],
|
|
23
|
+
// The owner's settings (company authority D7) — strict from day one, below.
|
|
24
|
+
["PATCH", "/v1/collections/:collectionId/settings", "collections/settings"],
|
|
25
|
+
["GET", "/v1/collections/:collectionId/settings", "collections/settings-read"],
|
|
26
|
+
// The company's reviewers (company authority D2) — strict from day one, below.
|
|
27
|
+
["POST", "/v1/collections/:collectionId/reviewers", "collections/reviewers-grant"],
|
|
28
|
+
["GET", "/v1/collections/:collectionId/reviewers", "collections/reviewers-read"],
|
|
29
|
+
[
|
|
30
|
+
"POST",
|
|
31
|
+
"/v1/collections/:collectionId/reviewers/:delegationCid/revoke",
|
|
32
|
+
"collections/reviewers-revoke",
|
|
33
|
+
],
|
|
34
|
+
["GET", "/v1/claims", "claims/read"],
|
|
35
|
+
["GET", "/v1/claims/:claimId", "claims/read"],
|
|
36
|
+
// The owner's erase (company authority F14) — strict from day one, below.
|
|
37
|
+
["DELETE", "/v1/claims/:claimId/body", "claims/erase"],
|
|
38
|
+
["GET", "/v1/reviews/:claimId", "reviews/read"],
|
|
39
|
+
["POST", "/v1/reviews/:claimId", "reviews/submit"],
|
|
40
|
+
["GET", "/v1/admin/status", "admin/status"],
|
|
41
|
+
// The operator's company-link backfill (lib/register.ts) — strict from day one, below.
|
|
42
|
+
["POST", "/v1/admin/collections/relink", "admin/collections-relink"],
|
|
43
|
+
// AuthHub's approvals back-channel (MCP over OAuth, S7) — strict from day one, below.
|
|
44
|
+
["GET", "/v1/oauth/approvals/:approvalId", "oauth/approval/read"],
|
|
45
|
+
["POST", "/v1/oauth/approvals/:approvalId", "oauth/approval/approve"],
|
|
46
|
+
// …and its auto-approve ("don't ask again") standing authority, per grant.
|
|
47
|
+
["GET", "/v1/oauth/standing/:grantId", "oauth/standing/read"],
|
|
48
|
+
["PUT", "/v1/oauth/standing/:grantId", "oauth/standing/set"],
|
|
49
|
+
["DELETE", "/v1/oauth/standing/:grantId", "oauth/standing/revoke"],
|
|
50
|
+
];
|
|
51
|
+
/** Actions the legacy `*` NEVER stands in for, whatever `ACCEPT_WILDCARD` says (S3 review §3). */
|
|
52
|
+
export const STRICT_ACTIONS = new Set([
|
|
53
|
+
"collections/settings",
|
|
54
|
+
"collections/settings-read",
|
|
55
|
+
"collections/reviewers-grant",
|
|
56
|
+
"collections/reviewers-read",
|
|
57
|
+
"collections/reviewers-revoke",
|
|
58
|
+
// An erase cannot be undone: only a token minted for it.
|
|
59
|
+
"claims/erase",
|
|
60
|
+
// A review answer settles a verdict (the fold acts on it): a token that can do anything may not.
|
|
61
|
+
"reviews/submit",
|
|
62
|
+
"admin/collections-relink",
|
|
63
|
+
"oauth/approval/read",
|
|
64
|
+
"oauth/approval/approve",
|
|
65
|
+
"oauth/standing/read",
|
|
66
|
+
"oauth/standing/set",
|
|
67
|
+
"oauth/standing/revoke",
|
|
68
|
+
]);
|
|
69
|
+
/** Every `can` `ucanAuth` will validate at all: the table's actions, plus `*` while it is accepted. */
|
|
70
|
+
export const ACCEPTED_CANS = [
|
|
71
|
+
...new Set([
|
|
72
|
+
...ROUTE_ACTIONS.map(([, , action]) => action),
|
|
73
|
+
...(ACCEPT_WILDCARD ? ["*"] : []),
|
|
74
|
+
]),
|
|
75
|
+
];
|
|
76
|
+
const MATCHERS = ROUTE_ACTIONS.map(([method, pattern, action]) => ({
|
|
77
|
+
method,
|
|
78
|
+
pattern,
|
|
79
|
+
action,
|
|
80
|
+
// `:param` is one path segment; a trailing slash is the same route (Hono's non-strict routing).
|
|
81
|
+
re: new RegExp(`^${pattern.replace(/:[A-Za-z]+/g, "[^/]+")}/?$`),
|
|
82
|
+
}));
|
|
83
|
+
/** The route a request hits and the action it needs, or null for a route with no entry. HEAD is
|
|
84
|
+
* its GET (Hono answers HEAD with the GET handler), so it takes the GET's action. */
|
|
85
|
+
export function actionFor(method, path) {
|
|
86
|
+
const verb = method.toUpperCase() === "HEAD" ? "GET" : method.toUpperCase();
|
|
87
|
+
const m = MATCHERS.find((m) => m.method === verb && m.re.test(path));
|
|
88
|
+
return m ? { pattern: m.pattern, action: m.action } : null;
|
|
89
|
+
}
|
|
90
|
+
/** After `ucanAuth`: the invocation's one `can` must be this route's action (or, while
|
|
91
|
+
* `ACCEPT_WILDCARD`, `*` — never on a `STRICT_ACTIONS` route). A `*` on a route with no entry
|
|
92
|
+
* falls through to its 404. */
|
|
93
|
+
export const requireAction = createMiddleware(async (c, next) => {
|
|
94
|
+
const principal = c.get("principal");
|
|
95
|
+
const route = actionFor(c.req.method, c.req.path);
|
|
96
|
+
if (ACCEPT_WILDCARD && principal.can === "*" && !(route && STRICT_ACTIONS.has(route.action))) {
|
|
97
|
+
if (route) {
|
|
98
|
+
const pattern = `${c.req.method} ${route.pattern}`;
|
|
99
|
+
c.get("logger").info("ucan.wildcard", { route: pattern, invoker: principal.invokerDid });
|
|
100
|
+
// The pattern, never the path or a DID: one series per table row.
|
|
101
|
+
c.get("metrics").count("ucan.wildcard", 1, { route: pattern });
|
|
102
|
+
}
|
|
103
|
+
return next();
|
|
104
|
+
}
|
|
105
|
+
if (!route) {
|
|
106
|
+
throw AppError.forbidden(`No capability opens ${c.req.method} ${c.req.path} on this oracle (got "${principal.can}")`);
|
|
107
|
+
}
|
|
108
|
+
if (principal.can !== route.action) {
|
|
109
|
+
throw AppError.forbidden(`This route accepts only the "${route.action}" capability on ixo:eval-oracle (got "${principal.can}")`);
|
|
110
|
+
}
|
|
111
|
+
return next();
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../src/middleware/capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-request database access.
|
|
3
|
+
*
|
|
4
|
+
* Installs `c.var.db()` on the request context. With D1 there is nothing to open or close — the
|
|
5
|
+
* getter just wraps the `DB` binding in Drizzle — but it stays a function so handlers read the
|
|
6
|
+
* same way they do in the eval engine and the call site never cares which database is behind it.
|
|
7
|
+
*
|
|
8
|
+
* Usage in a handler:
|
|
9
|
+
* const db = await c.var.db();
|
|
10
|
+
* const rows = await db.select().from(watchedCollections);
|
|
11
|
+
*/
|
|
12
|
+
import type { AppEnv } from "../context.js";
|
|
13
|
+
export declare const database: import("hono").MiddlewareHandler<AppEnv, string, {}, Response>;
|
|
14
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/middleware/database.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,eAAO,MAAM,QAAQ,gEAGnB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-request database access.
|
|
3
|
+
*
|
|
4
|
+
* Installs `c.var.db()` on the request context. With D1 there is nothing to open or close — the
|
|
5
|
+
* getter just wraps the `DB` binding in Drizzle — but it stays a function so handlers read the
|
|
6
|
+
* same way they do in the eval engine and the call site never cares which database is behind it.
|
|
7
|
+
*
|
|
8
|
+
* Usage in a handler:
|
|
9
|
+
* const db = await c.var.db();
|
|
10
|
+
* const rows = await db.select().from(watchedCollections);
|
|
11
|
+
*/
|
|
12
|
+
import { createMiddleware } from "hono/factory";
|
|
13
|
+
import { getDb } from "../db/client.js";
|
|
14
|
+
export const database = createMiddleware(async (c, next) => {
|
|
15
|
+
c.set("db", async () => getDb(c.env));
|
|
16
|
+
await next();
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/middleware/database.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,MAAM,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CAAS,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;IACjE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,IAAI,EAAE,CAAC;AACf,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global error handling + 404.
|
|
3
|
+
*
|
|
4
|
+
* Every throw in the app funnels through `onError`: it normalizes the error to an
|
|
5
|
+
* `AppError`, logs it once with full context (stack, requestId, traceId), records
|
|
6
|
+
* an error metric, and returns the stable JSON envelope. Internal (5xx) details
|
|
7
|
+
* are never leaked to clients — they live only in Workers Logs.
|
|
8
|
+
*/
|
|
9
|
+
import type { ErrorHandler, NotFoundHandler } from "hono";
|
|
10
|
+
import type { AppEnv } from "../context.js";
|
|
11
|
+
export declare const onError: ErrorHandler<AppEnv>;
|
|
12
|
+
export declare const notFound: NotFoundHandler<AppEnv>;
|
|
13
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/middleware/error-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAI1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAmDzC,eAAO,MAAM,OAAO,EAAE,YAAY,CAAC,MAAM,CAmExC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,eAAe,CAAC,MAAM,CAW5C,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global error handling + 404.
|
|
3
|
+
*
|
|
4
|
+
* Every throw in the app funnels through `onError`: it normalizes the error to an
|
|
5
|
+
* `AppError`, logs it once with full context (stack, requestId, traceId), records
|
|
6
|
+
* an error metric, and returns the stable JSON envelope. Internal (5xx) details
|
|
7
|
+
* are never leaked to clients — they live only in Workers Logs.
|
|
8
|
+
*/
|
|
9
|
+
import { HTTPException } from "hono/http-exception";
|
|
10
|
+
import { routePath } from "hono/route";
|
|
11
|
+
import { ZodError } from "zod";
|
|
12
|
+
import { AppError, toErrorBody, VALIDATION_FAILED } from "../lib/errors.js";
|
|
13
|
+
import { createLogger } from "../lib/logger.js";
|
|
14
|
+
import { reportError } from "../lib/sentry.js";
|
|
15
|
+
import { endpointOf, loggedPath } from "./observability.js";
|
|
16
|
+
/** Coerce anything thrown into a typed AppError. */
|
|
17
|
+
function normalize(err) {
|
|
18
|
+
if (err instanceof AppError)
|
|
19
|
+
return err;
|
|
20
|
+
if (err instanceof ZodError) {
|
|
21
|
+
return AppError.validation(VALIDATION_FAILED, {
|
|
22
|
+
issues: err.issues.map((i) => ({
|
|
23
|
+
path: i.path.join("."),
|
|
24
|
+
message: i.message,
|
|
25
|
+
})),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (err instanceof HTTPException) {
|
|
29
|
+
const expose = err.status < 500;
|
|
30
|
+
return new AppError(err.message || "Request failed", {
|
|
31
|
+
code: err.status === 401 ? "UNAUTHORIZED" : err.status === 403 ? "FORBIDDEN" : "BAD_REQUEST",
|
|
32
|
+
status: err.status,
|
|
33
|
+
expose,
|
|
34
|
+
cause: err,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return AppError.internal("Unhandled error", err);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The `cause` chain's messages, outermost first. Bounded at 4 links so a self-referential or deeply
|
|
41
|
+
* wrapped error can't turn one log line into a wall — and `seen` because a cause cycle would
|
|
42
|
+
* otherwise loop forever inside the error handler, turning a 500 into a hang.
|
|
43
|
+
*/
|
|
44
|
+
function causeChain(err) {
|
|
45
|
+
const messages = [];
|
|
46
|
+
const seen = new Set();
|
|
47
|
+
let current = err;
|
|
48
|
+
while (current && messages.length < 4 && !seen.has(current)) {
|
|
49
|
+
seen.add(current);
|
|
50
|
+
const next = current.cause;
|
|
51
|
+
if (!next)
|
|
52
|
+
break;
|
|
53
|
+
messages.push(next instanceof Error ? next.message : String(next));
|
|
54
|
+
current = next;
|
|
55
|
+
}
|
|
56
|
+
return messages;
|
|
57
|
+
}
|
|
58
|
+
export const onError = (err, c) => {
|
|
59
|
+
const appError = normalize(err);
|
|
60
|
+
const requestId = c.get("requestId") ?? "unknown";
|
|
61
|
+
// Logger should always be set by the observability middleware; fall back so we
|
|
62
|
+
// never lose an error to a missing logger.
|
|
63
|
+
// Fallback fires only if the observability middleware never set a logger
|
|
64
|
+
// (e.g. config parse threw), so read the raw env var — don't re-run loadConfig.
|
|
65
|
+
const logger = c.get("logger") ??
|
|
66
|
+
createLogger({
|
|
67
|
+
level: "error",
|
|
68
|
+
pretty: c.env.LOG_PRETTY === "true",
|
|
69
|
+
base: { requestId },
|
|
70
|
+
});
|
|
71
|
+
const logFields = {
|
|
72
|
+
code: appError.code,
|
|
73
|
+
status: appError.status,
|
|
74
|
+
err: appError.expose ? appError : (appError.cause ?? appError),
|
|
75
|
+
// The REASON, not just the throw site. Drizzle reports `Failed query: select …` and hides the
|
|
76
|
+
// actual database message (`no such column: x`) one level down in `cause`; the same is
|
|
77
|
+
// true of most wrapped I/O errors. Without this a schema drift reads as an anonymous 500 and
|
|
78
|
+
// costs a debugging session to identify — it cost two today.
|
|
79
|
+
causedBy: causeChain(appError),
|
|
80
|
+
path: loggedPath(c),
|
|
81
|
+
method: c.req.method,
|
|
82
|
+
};
|
|
83
|
+
// An EXPECTED 5xx is a decision, not a failure (the API lane's `503 SOURCE_PAUSED`): no Sentry.
|
|
84
|
+
if (appError.status >= 500 && !appError.expected) {
|
|
85
|
+
logger.error("request_failed", logFields);
|
|
86
|
+
c.get("metrics")?.count("errors", 1, { route: endpointOf(c), status: appError.code });
|
|
87
|
+
// 5xx ONLY. Every 4xx here is a negative this service decided on purpose (a bad body, a missing
|
|
88
|
+
// capability, a claim the dashboard polled too early) — routing those to Sentry would bury the
|
|
89
|
+
// one class of event nobody chose. Report the ORIGINAL throw, not the normalized envelope: the
|
|
90
|
+
// envelope's stack ends in this handler, the cause's ends where it broke.
|
|
91
|
+
reportError(appError.cause ?? err, {
|
|
92
|
+
lane: "http",
|
|
93
|
+
context: {
|
|
94
|
+
code: appError.code,
|
|
95
|
+
status: appError.status,
|
|
96
|
+
method: c.req.method,
|
|
97
|
+
// BOTH: the matched pattern is what makes two failures the same failure, and the concrete
|
|
98
|
+
// path is what names the claim/collection that hit it (`/v1/claims/bafy…`) — never under
|
|
99
|
+
// `/v1/api`, where it can name a pending source (`loggedPath`).
|
|
100
|
+
route: routePath(c),
|
|
101
|
+
path: loggedPath(c),
|
|
102
|
+
// The join back to Workers Logs — the request's own log line carries the same id.
|
|
103
|
+
requestId,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
else if (appError.expected) {
|
|
108
|
+
// An expected negative (dashboard polling a not-yet-ingested claim): SILENT in deployed envs.
|
|
109
|
+
// Debug, not nothing — local dev runs LOG_LEVEL=debug and keeps the breadcrumb.
|
|
110
|
+
logger.debug("request_rejected", logFields);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
logger.warn("request_rejected", logFields);
|
|
114
|
+
}
|
|
115
|
+
// The readiness contract holds even when the route never ran (a config that fails to load): a
|
|
116
|
+
// monitor reads `{ ok }`, and the envelope would name what broke to an unauthenticated caller.
|
|
117
|
+
// A 429 keeps its standard envelope.
|
|
118
|
+
if (c.req.path === "/health/ready" && appError.status >= 500) {
|
|
119
|
+
return c.json({ ok: false }, 503);
|
|
120
|
+
}
|
|
121
|
+
return c.json(toErrorBody(appError, requestId), appError.status);
|
|
122
|
+
};
|
|
123
|
+
export const notFound = (c) => {
|
|
124
|
+
const requestId = c.get("requestId") ?? "unknown";
|
|
125
|
+
return c.json(toErrorBody(AppError.notFound(`There is no ${c.req.method} ${c.req.path} on this oracle. Check the method and path.`), requestId), 404);
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/middleware/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one middleware that wires observability into every request:
|
|
3
|
+
* - request id (generated or taken from an inbound `x-request-id`)
|
|
4
|
+
* - W3C trace context (continued from `traceparent` or freshly rooted)
|
|
5
|
+
* - a request-scoped structured logger, pre-bound with correlation fields
|
|
6
|
+
* - a metrics sink (log line + the optional Analytics Engine dataset), ambient for the request
|
|
7
|
+
* (`withMetrics`) so the fetch client and cache reads record into it
|
|
8
|
+
* and, after the response is produced, emits the access log and the `http.request` timing.
|
|
9
|
+
*
|
|
10
|
+
* Registered first so `onError` (which runs within the same composed context)
|
|
11
|
+
* can read `c.get("logger")`, `c.get("requestId")`, etc.
|
|
12
|
+
*/
|
|
13
|
+
import { matchedRoutes } from "hono/route";
|
|
14
|
+
import type { AppEnv } from "../context.js";
|
|
15
|
+
/**
|
|
16
|
+
* The endpoint pattern (e.g. `/v1/claims/:claimId`) the request matched — the FIRST matched route
|
|
17
|
+
* that is not an `app.use` middleware (those register as method ALL; the first one is the handler
|
|
18
|
+
* that answers — a later param route matching the same path never ran) — or `"unmatched"`. Read off
|
|
19
|
+
* the whole match list, not `routePath`, so a request a middleware rejected before its handler ran
|
|
20
|
+
* (ucanAuth's 401, a limiter's 429, bodyLimit's 413) is still labelled with its endpoint. Never the
|
|
21
|
+
* raw path: it carries claim ids and DIDs — unbounded cardinality, and ids a metric must not hold.
|
|
22
|
+
*/
|
|
23
|
+
export declare function endpointOf(c: Parameters<typeof matchedRoutes>[0]): string;
|
|
24
|
+
/**
|
|
25
|
+
* The request path a log line may carry. Under `/v1/api` the concrete path can name a pending
|
|
26
|
+
* source (D10: its id never leaves the oracle), so it is the matched route pattern there — its ids
|
|
27
|
+
* masked when nothing matched. Read before the route runs too (the rate limiter): the router has
|
|
28
|
+
* matched every handler by then.
|
|
29
|
+
*/
|
|
30
|
+
export declare function loggedPath(c: Parameters<typeof matchedRoutes>[0]): string;
|
|
31
|
+
export declare const observability: import("hono").MiddlewareHandler<AppEnv, string, {}, Response>;
|
|
32
|
+
//# sourceMappingURL=observability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../src/middleware/observability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAmCzC;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAEzE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAKzE;AASD,eAAO,MAAM,aAAa,gEAyExB,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one middleware that wires observability into every request:
|
|
3
|
+
* - request id (generated or taken from an inbound `x-request-id`)
|
|
4
|
+
* - W3C trace context (continued from `traceparent` or freshly rooted)
|
|
5
|
+
* - a request-scoped structured logger, pre-bound with correlation fields
|
|
6
|
+
* - a metrics sink (log line + the optional Analytics Engine dataset), ambient for the request
|
|
7
|
+
* (`withMetrics`) so the fetch client and cache reads record into it
|
|
8
|
+
* and, after the response is produced, emits the access log and the `http.request` timing.
|
|
9
|
+
*
|
|
10
|
+
* Registered first so `onError` (which runs within the same composed context)
|
|
11
|
+
* can read `c.get("logger")`, `c.get("requestId")`, etc.
|
|
12
|
+
*/
|
|
13
|
+
import { createMiddleware } from "hono/factory";
|
|
14
|
+
import { matchedRoutes } from "hono/route";
|
|
15
|
+
import { loadConfig } from "../config.js";
|
|
16
|
+
import { maskIds } from "../lib/api-lane/ids.js";
|
|
17
|
+
import { createLogger } from "../lib/logger.js";
|
|
18
|
+
import { createMetrics, withMetrics } from "../lib/metrics.js";
|
|
19
|
+
import { toTraceparent, traceContextFromRequest } from "../lib/tracing.js";
|
|
20
|
+
const REQUEST_ID = /^[\w.:-]{1,128}$/;
|
|
21
|
+
function metricFields(metric) {
|
|
22
|
+
return {
|
|
23
|
+
method: metric.method,
|
|
24
|
+
route: metric.route,
|
|
25
|
+
status: metric.status,
|
|
26
|
+
durationMs: metric.durationMs,
|
|
27
|
+
outcome: metric.outcome,
|
|
28
|
+
...(metric.colo ? { colo: metric.colo } : {}),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function outcomeFor(status) {
|
|
32
|
+
if (status >= 500)
|
|
33
|
+
return "server_error";
|
|
34
|
+
if (status >= 400)
|
|
35
|
+
return "client_error";
|
|
36
|
+
return "ok";
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The endpoint pattern (e.g. `/v1/claims/:claimId`) the request matched — the FIRST matched route
|
|
40
|
+
* that is not an `app.use` middleware (those register as method ALL; the first one is the handler
|
|
41
|
+
* that answers — a later param route matching the same path never ran) — or `"unmatched"`. Read off
|
|
42
|
+
* the whole match list, not `routePath`, so a request a middleware rejected before its handler ran
|
|
43
|
+
* (ucanAuth's 401, a limiter's 429, bodyLimit's 413) is still labelled with its endpoint. Never the
|
|
44
|
+
* raw path: it carries claim ids and DIDs — unbounded cardinality, and ids a metric must not hold.
|
|
45
|
+
*/
|
|
46
|
+
export function endpointOf(c) {
|
|
47
|
+
return matchedRoutes(c).find((r) => r.method !== "ALL")?.path ?? "unmatched";
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The request path a log line may carry. Under `/v1/api` the concrete path can name a pending
|
|
51
|
+
* source (D10: its id never leaves the oracle), so it is the matched route pattern there — its ids
|
|
52
|
+
* masked when nothing matched. Read before the route runs too (the rate limiter): the router has
|
|
53
|
+
* matched every handler by then.
|
|
54
|
+
*/
|
|
55
|
+
export function loggedPath(c) {
|
|
56
|
+
const { path } = c.req;
|
|
57
|
+
if (!path.startsWith("/v1/api"))
|
|
58
|
+
return path;
|
|
59
|
+
const route = endpointOf(c);
|
|
60
|
+
return route === "unmatched" ? maskIds(path) : route;
|
|
61
|
+
}
|
|
62
|
+
/** The log line's route: the pattern that ran last if more specific than the catch-all, else the
|
|
63
|
+
* endpoint (`endpointOf`). */
|
|
64
|
+
function routeOf(c, endpoint) {
|
|
65
|
+
const rp = c.req.routePath;
|
|
66
|
+
return rp && rp !== "/*" ? rp : endpoint;
|
|
67
|
+
}
|
|
68
|
+
export const observability = createMiddleware(async (c, next) => {
|
|
69
|
+
const start = Date.now();
|
|
70
|
+
const config = loadConfig(c.env);
|
|
71
|
+
// A client's id is echoed and forwarded into workflow params and every log base, so only a
|
|
72
|
+
// bounded, plain one is taken; anything else gets a fresh id.
|
|
73
|
+
const inbound = c.req.header("x-request-id");
|
|
74
|
+
const requestId = inbound && REQUEST_ID.test(inbound) ? inbound : crypto.randomUUID();
|
|
75
|
+
const trace = traceContextFromRequest(c.req.raw);
|
|
76
|
+
const logger = createLogger({
|
|
77
|
+
level: config.LOG_LEVEL,
|
|
78
|
+
pretty: config.LOG_PRETTY,
|
|
79
|
+
base: {
|
|
80
|
+
service: config.SERVICE_NAME,
|
|
81
|
+
version: config.SERVICE_VERSION,
|
|
82
|
+
env: config.ENVIRONMENT,
|
|
83
|
+
requestId,
|
|
84
|
+
traceId: trace.traceId,
|
|
85
|
+
spanId: trace.spanId,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
const metrics = createMetrics(logger, { dataset: c.env.METRICS, network: config.IXO_NETWORK });
|
|
89
|
+
c.set("requestId", requestId);
|
|
90
|
+
c.set("trace", trace);
|
|
91
|
+
c.set("logger", logger);
|
|
92
|
+
c.set("config", config);
|
|
93
|
+
c.set("metrics", metrics);
|
|
94
|
+
c.set("startTime", start);
|
|
95
|
+
// Correlation headers on the way out (applied to the final response, including
|
|
96
|
+
// error responses produced by onError).
|
|
97
|
+
c.header("x-request-id", requestId);
|
|
98
|
+
c.header("traceparent", toTraceparent(trace));
|
|
99
|
+
// Because Hono's onError resolves the composed chain (rather than rejecting),
|
|
100
|
+
// code after `next()` runs for both success and handled-error responses with
|
|
101
|
+
// `c.res` already set to the final response.
|
|
102
|
+
// The correlation rides the same scope, so a seam that starts a workflow (`startApiClaims`)
|
|
103
|
+
// hands the request's trace on without taking it as a parameter.
|
|
104
|
+
await withMetrics({ metrics, logger, traceparent: toTraceparent(trace), requestId }, next);
|
|
105
|
+
const durationMs = Date.now() - start;
|
|
106
|
+
const status = c.res.status;
|
|
107
|
+
const endpoint = endpointOf(c);
|
|
108
|
+
const metric = {
|
|
109
|
+
method: c.req.method,
|
|
110
|
+
route: routeOf(c, endpoint),
|
|
111
|
+
status,
|
|
112
|
+
durationMs,
|
|
113
|
+
outcome: outcomeFor(status),
|
|
114
|
+
colo: c.req.raw.cf?.colo ?? undefined,
|
|
115
|
+
};
|
|
116
|
+
c.header("server-timing", `total;dur=${durationMs}`);
|
|
117
|
+
metrics.timing("http.request", durationMs, {
|
|
118
|
+
op: metric.method,
|
|
119
|
+
route: endpoint,
|
|
120
|
+
status: String(status),
|
|
121
|
+
outcome: metric.outcome,
|
|
122
|
+
});
|
|
123
|
+
const fields = metricFields(metric);
|
|
124
|
+
if (metric.outcome === "server_error") {
|
|
125
|
+
logger.error("request_completed", fields);
|
|
126
|
+
}
|
|
127
|
+
else if (metric.outcome === "client_error") {
|
|
128
|
+
logger.warn("request_completed", fields);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
logger.info("request_completed", fields);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=observability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../../src/middleware/observability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coarse per-IP rate limit on the whole API — a blunt anti-abuse guard, not precise accounting.
|
|
3
|
+
*
|
|
4
|
+
* Backed by Cloudflare's native `ratelimit` binding (GA): the limit/period are declared on
|
|
5
|
+
* `API_RATE_LIMITER` in wrangler.jsonc, so this code only picks a key and asks. The binding is
|
|
6
|
+
* per-colo, eventually consistent, and a no-op in local dev/tests (always allows).
|
|
7
|
+
*
|
|
8
|
+
* Sits after `cors` so a 429 carries CORS headers, and before `bodyLimit` so a limited request is
|
|
9
|
+
* shed without reading its body. Runs GLOBALLY, before `ucanAuth` resolves a principal — so the key
|
|
10
|
+
* is the client IP (the only universal signal here), not the caller DID. `/health` and
|
|
11
|
+
* `/.well-known/*` are exempt: uptime probes and cross-service did:web resolution hit them from a
|
|
12
|
+
* few IPs at high frequency and must never be throttled.
|
|
13
|
+
*/
|
|
14
|
+
import type { AppEnv } from "../context.js";
|
|
15
|
+
export declare const rateLimit: import("hono").MiddlewareHandler<AppEnv, string, {}, Response>;
|
|
16
|
+
//# sourceMappingURL=rate-limit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAsBzC,eAAO,MAAM,SAAS,gEAwBpB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coarse per-IP rate limit on the whole API — a blunt anti-abuse guard, not precise accounting.
|
|
3
|
+
*
|
|
4
|
+
* Backed by Cloudflare's native `ratelimit` binding (GA): the limit/period are declared on
|
|
5
|
+
* `API_RATE_LIMITER` in wrangler.jsonc, so this code only picks a key and asks. The binding is
|
|
6
|
+
* per-colo, eventually consistent, and a no-op in local dev/tests (always allows).
|
|
7
|
+
*
|
|
8
|
+
* Sits after `cors` so a 429 carries CORS headers, and before `bodyLimit` so a limited request is
|
|
9
|
+
* shed without reading its body. Runs GLOBALLY, before `ucanAuth` resolves a principal — so the key
|
|
10
|
+
* is the client IP (the only universal signal here), not the caller DID. `/health` and
|
|
11
|
+
* `/.well-known/*` are exempt: uptime probes and cross-service did:web resolution hit them from a
|
|
12
|
+
* few IPs at high frequency and must never be throttled.
|
|
13
|
+
*/
|
|
14
|
+
import { createMiddleware } from "hono/factory";
|
|
15
|
+
import { AppError } from "../lib/errors.js";
|
|
16
|
+
import { loggedPath } from "./observability.js";
|
|
17
|
+
/**
|
|
18
|
+
* Requests to these prefixes are never rate limited (infra/probes + did:web resolution).
|
|
19
|
+
* Deliberately `/health` EXACTLY, not a `/health/` prefix: `/health/ready` probes D1, KV and the
|
|
20
|
+
* engine, so an unauthenticated, unthrottled path there would be a lever on resources every
|
|
21
|
+
* authenticated route shares (SEC-07). It, and any future sub-route, stays limited.
|
|
22
|
+
*/
|
|
23
|
+
function isExempt(path) {
|
|
24
|
+
return path === "/health" || path.startsWith("/.well-known/");
|
|
25
|
+
}
|
|
26
|
+
/** First 16 hex of SHA-256(ip): enough to group one client's lines, not enough to name the client. */
|
|
27
|
+
async function ipHash(ip) {
|
|
28
|
+
const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(ip));
|
|
29
|
+
return [...new Uint8Array(digest).slice(0, 8)]
|
|
30
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
31
|
+
.join("");
|
|
32
|
+
}
|
|
33
|
+
export const rateLimit = createMiddleware(async (c, next) => {
|
|
34
|
+
if (isExempt(c.req.path))
|
|
35
|
+
return next();
|
|
36
|
+
// Cloudflare sets CF-Connecting-IP at the edge (not client-spoofable). Absent locally/in tests —
|
|
37
|
+
// fall back to a constant so the limiter still functions (and, being a local no-op, always allows).
|
|
38
|
+
const key = c.req.header("CF-Connecting-IP") ?? "unknown";
|
|
39
|
+
let allowed = true;
|
|
40
|
+
try {
|
|
41
|
+
const { success } = await c.env.API_RATE_LIMITER.limit({ key });
|
|
42
|
+
allowed = success;
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
// Fail OPEN: a limiter glitch must never take down the API. Log and let the request through.
|
|
46
|
+
c.get("logger").warn("ratelimit.errored", { detail: String(err) });
|
|
47
|
+
}
|
|
48
|
+
if (!allowed) {
|
|
49
|
+
c.get("metrics").count("rate_limited");
|
|
50
|
+
// A hash, never the IP (observability spec §3): still groups one abuser's lines together.
|
|
51
|
+
c.get("logger").warn("ratelimit.exceeded", { ipHash: await ipHash(key), path: loggedPath(c) });
|
|
52
|
+
throw AppError.rateLimited("Too many requests from this address. Wait a minute and retry.");
|
|
53
|
+
}
|
|
54
|
+
await next();
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=rate-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAChE,CAAC;AAED,sGAAsG;AACtG,KAAK,UAAU,MAAM,CAAC,EAAU;IAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAS,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;IAClE,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,EAAE,CAAC;IAExC,iGAAiG;IACjG,oGAAoG;IACpG,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,SAAS,CAAC;IAE1D,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAChE,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6FAA6F;QAC7F,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACvC,0FAA0F;QAC1F,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/F,MAAM,QAAQ,CAAC,WAAW,CAAC,+DAA+D,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,IAAI,EAAE,CAAC;AACf,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Our own API auth — UCAN only, from day zero. The oracle is a did:web service; every chain-lane
|
|
3
|
+
* `/v1/*` call must be a UCAN invocation carrying exactly ONE capability
|
|
4
|
+
* `{ with:'ixo:eval-oracle', can:<the route's action> }` addressed to our DID (CLAUDE.md
|
|
5
|
+
* "Capabilities: one action per route, never `*`"). Which `can` a route takes is
|
|
6
|
+
* `middleware/capability.ts`'s call, after this; here the token is validated against a capability
|
|
7
|
+
* defined for ITS OWN `can` — `@ucanto/validator` compares `can` by exact string — and the `can` is
|
|
8
|
+
* recorded on the principal.
|
|
9
|
+
*
|
|
10
|
+
* AUTHENTICATION, not authorization — this proves the caller holds the key its DID names, the
|
|
11
|
+
* invocation was addressed to US (audience = our pinned did:web), and names one action on our
|
|
12
|
+
* resource. `rootIssuers:['*']` is a decision, not an oversight: anyone with a portal wallet must
|
|
13
|
+
* be able to call the API, so any freshly generated keypair authenticates.
|
|
14
|
+
*
|
|
15
|
+
* The invoker must BE the identity it acts as: a delegated chain (root ≠ invoker) is refused (owner,
|
|
16
|
+
* 2026-09-30 — the engine's rule). Every chain-lane caller signs for itself — a portal wallet, the
|
|
17
|
+
* CLI's AuthHub session, the engine's status board — and every gate keys on the acting DID, so a
|
|
18
|
+
* token some root signed for a third party must never let that party act AS the root here. Member
|
|
19
|
+
* grants belong to the Decision API lane's console auth (`middleware/api/console.ts`), not here.
|
|
20
|
+
*
|
|
21
|
+
* So: EVERY `/v1` route MUST still enforce its own identity-based authorization — watched-collection
|
|
22
|
+
* ownership / on-chain grant (`lib/ixo/authz.ts`), `ORACLE_ADMIN_DIDS`. A route that checks nothing is
|
|
23
|
+
* open to the internet.
|
|
24
|
+
*
|
|
25
|
+
* Mirrors subscriptions-api's middleware but fixes its two gaps:
|
|
26
|
+
* 1. the validator (service DID + resolvers, static per deploy) is built ONCE per isolate;
|
|
27
|
+
* 2. the audience is pinned to ORACLE_HOSTNAME — THIS worker's own did:web host, not the engine we
|
|
28
|
+
* call — never the attacker-controllable request Host.
|
|
29
|
+
* Plus a two-tier token cache (L1 bounded in-isolate TtlCache, L2 KV) keyed by sha256(token), and a clean split
|
|
30
|
+
* between invalid (401, briefly negative-cached) and unavailable (503, never cached).
|
|
31
|
+
*
|
|
32
|
+
* Short-lived tokens (as the console lane, `middleware/api/console.ts`): an invocation must expire,
|
|
33
|
+
* at most MAX_LIFETIME_SEC (600 s) out — every caller signs 60–300 s. Replay protection stays off,
|
|
34
|
+
* so a token may be presented again within that window (callers do reuse one across a page's
|
|
35
|
+
* calls); the window, not a nonce store, is what bounds a leaked token.
|
|
36
|
+
*/
|
|
37
|
+
import type { AppEnv } from "../context.js";
|
|
38
|
+
export declare const ucanAuth: import("hono").MiddlewareHandler<AppEnv, string, {}, Response>;
|
|
39
|
+
//# sourceMappingURL=ucan-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ucan-auth.d.ts","sourceRoot":"","sources":["../../src/middleware/ucan-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAa,MAAM,YAAY,CAAC;AAyJpD,eAAO,MAAM,QAAQ,gEAwInB,CAAC"}
|