@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,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The stock producer's read of a `send` map (§A.14.2 / §A.15): keyed refs resolved to the values
|
|
3
|
+
* a source or a model is shown, literals passed through. Plain path reads over the claim body and
|
|
4
|
+
* the kit's ctx — no binder, no field kinds: the ENGINE binds the rubric to the live form; the
|
|
5
|
+
* stock producer only has to put the named answer in the payload.
|
|
6
|
+
*
|
|
7
|
+
* `~derived` refs are NOT resolved here: derived values are the
|
|
8
|
+
* engine's to compute, and this package carries no expression evaluator to compute them
|
|
9
|
+
* for a payload. A source that needs one is answered `status: "error"` by the stock lanes
|
|
10
|
+
* (../tools.ts) — a custom handler may compute it from the expression the manifest exposes
|
|
11
|
+
* (`derived[].expression`, expected.ts).
|
|
12
|
+
*
|
|
13
|
+
* NODE-SAFE, and it must stay that way: the facts runner imports this module, and the runner is
|
|
14
|
+
* what `@ixo/decision-oracle/facts` pulls into a provider's plain-node test suite. Types only.
|
|
15
|
+
*/
|
|
16
|
+
import type { AiSendEntry } from "../../../facts/types.js";
|
|
17
|
+
import type { PulledClaim } from "../../ixo/index.js";
|
|
18
|
+
import type { ExpectedAi, SendMap } from "../expected.js";
|
|
19
|
+
import type { CtxFacts } from "../factset.js";
|
|
20
|
+
/**
|
|
21
|
+
* ctx token → value, the `send`-map read shape. Lives HERE, not in ctx.ts, because this module has
|
|
22
|
+
* to stay node-safe (the facts runner imports it) and ctx.ts reaches Blocksync; ctx.ts re-exports
|
|
23
|
+
* it so the resolver and its flattener still read as one thing.
|
|
24
|
+
*/
|
|
25
|
+
export declare function flattenCtx(ctx: CtxFacts): Record<string, string | null>;
|
|
26
|
+
/**
|
|
27
|
+
* The top-level question name of a `$ref` (namespace prefix included), or undefined. The single
|
|
28
|
+
* shared extractor for attachment attribution (`attachment.question` matching) — an inline
|
|
29
|
+
* `[A-Za-z0-9_-]` regex here would silently TRUNCATE `$ixo:hiveId` to `ixo` and misattribute.
|
|
30
|
+
*/
|
|
31
|
+
export declare function rootQuestionName(ref: string): string | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Resolve a `$field` path against the claim answers. `.seg` steps into objects, `[*]` fans out over
|
|
34
|
+
* an array — a ref containing `[*]` therefore resolves to an ARRAY of cell values (missing cells
|
|
35
|
+
* stay undefined inside it; a missing/non-array target fans to `[]`). A path that walks off the
|
|
36
|
+
* data resolves to undefined.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveFieldPath(answers: Record<string, unknown>, ref: string): unknown;
|
|
39
|
+
/** The `~derived` refs a `send` map names — what the stock producer cannot answer (header). */
|
|
40
|
+
export declare function derivedSendRefs(send: SendMap): string[];
|
|
41
|
+
/** Resolve a `send` map's declared refs against the claim body and the kit's ctx ($ / ctx only). */
|
|
42
|
+
export declare function resolveSendPayload(send: SendMap, answers: Record<string, unknown>, ctx: CtxFacts): Record<string, unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* AI send entries keep their declared order: scalars ride the text lane; a `$ref` whose root
|
|
45
|
+
* question carries attachments rides the attachment lane ("AI checks the delivery photo") and is
|
|
46
|
+
* resolved to an image/document input by the connector — EVERY file on the question, not just the
|
|
47
|
+
* first: one `$deliverables` legitimately holds a source ZIP *and* a screenshot *and* a signed PDF,
|
|
48
|
+
* and a dropped one is a rule judged against evidence that was actually delivered (§6.1). Nothing
|
|
49
|
+
* attached ⇒ the answer itself (null when absent — absence is judged).
|
|
50
|
+
*/
|
|
51
|
+
export declare function aiEntries(claim: PulledClaim, check: ExpectedAi, payload: Record<string, unknown>): AiSendEntry[];
|
|
52
|
+
//# sourceMappingURL=send.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../../src/lib/facts/stock/send.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CASvE;AAqBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAmBvF;AAcD,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAEvD;AAED,oGAAoG;AACpG,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,EAAE,QAAQ,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,WAAW,EAAE,CAef"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The stock producer's read of a `send` map (§A.14.2 / §A.15): keyed refs resolved to the values
|
|
3
|
+
* a source or a model is shown, literals passed through. Plain path reads over the claim body and
|
|
4
|
+
* the kit's ctx — no binder, no field kinds: the ENGINE binds the rubric to the live form; the
|
|
5
|
+
* stock producer only has to put the named answer in the payload.
|
|
6
|
+
*
|
|
7
|
+
* `~derived` refs are NOT resolved here: derived values are the
|
|
8
|
+
* engine's to compute, and this package carries no expression evaluator to compute them
|
|
9
|
+
* for a payload. A source that needs one is answered `status: "error"` by the stock lanes
|
|
10
|
+
* (../tools.ts) — a custom handler may compute it from the expression the manifest exposes
|
|
11
|
+
* (`derived[].expression`, expected.ts).
|
|
12
|
+
*
|
|
13
|
+
* NODE-SAFE, and it must stay that way: the facts runner imports this module, and the runner is
|
|
14
|
+
* what `@ixo/decision-oracle/facts` pulls into a provider's plain-node test suite. Types only.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* ctx token → value, the `send`-map read shape. Lives HERE, not in ctx.ts, because this module has
|
|
18
|
+
* to stay node-safe (the facts runner imports it) and ctx.ts reaches Blocksync; ctx.ts re-exports
|
|
19
|
+
* it so the resolver and its flattener still read as one thing.
|
|
20
|
+
*/
|
|
21
|
+
export function flattenCtx(ctx) {
|
|
22
|
+
return {
|
|
23
|
+
"ctx.now": ctx.now,
|
|
24
|
+
"ctx.collection.startDate": ctx.collection.startDate,
|
|
25
|
+
"ctx.collection.endDate": ctx.collection.endDate,
|
|
26
|
+
"ctx.claim.submitter": ctx.claim.submitter,
|
|
27
|
+
"ctx.claim.submitterAddress": ctx.claim.submitterAddress,
|
|
28
|
+
"ctx.claim.submissionDate": ctx.claim.submissionDate,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Form path segment (rubric-spec §A.3), copied verbatim from the engine's `schema.ts` — the kit
|
|
33
|
+
* carries no rubric schema (T8). A segment may carry ONE JSON-LD namespace prefix (`ixo:hiveId`,
|
|
34
|
+
* `schema:legalName`): IXO claim forms name their SurveyJS questions that way, and claim answers
|
|
35
|
+
* store those names verbatim. Colons appear nowhere else in the ref grammar, so it is unambiguous.
|
|
36
|
+
*/
|
|
37
|
+
const NAME = "[A-Za-z0-9_-]+";
|
|
38
|
+
const FORM_SEGMENT = `${NAME}(?::${NAME})?`;
|
|
39
|
+
/**
|
|
40
|
+
* `$root(.seg|[*])*` with the root name captured (group 1) and the step tail (group 2). MUST stay
|
|
41
|
+
* the engine's FieldRef grammar — a `send` ref the engine's binder accepted but that fails to
|
|
42
|
+
* match here resolves to `undefined`, which reads as "missing" and fails closed. That silent
|
|
43
|
+
* divergence is exactly what the verbatim copy above prevents.
|
|
44
|
+
*/
|
|
45
|
+
const FIELD_PATH_RE = new RegExp(`^\\$(${FORM_SEGMENT})((?:\\.${FORM_SEGMENT}|\\[\\*\\])*)$`);
|
|
46
|
+
const ROOT_QUESTION_RE = new RegExp(`^\\$(${FORM_SEGMENT})`);
|
|
47
|
+
/**
|
|
48
|
+
* The top-level question name of a `$ref` (namespace prefix included), or undefined. The single
|
|
49
|
+
* shared extractor for attachment attribution (`attachment.question` matching) — an inline
|
|
50
|
+
* `[A-Za-z0-9_-]` regex here would silently TRUNCATE `$ixo:hiveId` to `ixo` and misattribute.
|
|
51
|
+
*/
|
|
52
|
+
export function rootQuestionName(ref) {
|
|
53
|
+
return ROOT_QUESTION_RE.exec(ref)?.[1];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve a `$field` path against the claim answers. `.seg` steps into objects, `[*]` fans out over
|
|
57
|
+
* an array — a ref containing `[*]` therefore resolves to an ARRAY of cell values (missing cells
|
|
58
|
+
* stay undefined inside it; a missing/non-array target fans to `[]`). A path that walks off the
|
|
59
|
+
* data resolves to undefined.
|
|
60
|
+
*/
|
|
61
|
+
export function resolveFieldPath(answers, ref) {
|
|
62
|
+
const m = FIELD_PATH_RE.exec(ref);
|
|
63
|
+
if (!m)
|
|
64
|
+
return undefined;
|
|
65
|
+
const steps = [];
|
|
66
|
+
const tail = m[2] ?? "";
|
|
67
|
+
const stepRe = new RegExp(`\\.(${FORM_SEGMENT})|(\\[\\*\\])`, "g");
|
|
68
|
+
for (let sm = stepRe.exec(tail); sm; sm = stepRe.exec(tail))
|
|
69
|
+
steps.push(sm[1] ?? "*");
|
|
70
|
+
const walk = (value, from) => {
|
|
71
|
+
if (from >= steps.length)
|
|
72
|
+
return value;
|
|
73
|
+
const step = steps[from];
|
|
74
|
+
if (step === "*") {
|
|
75
|
+
if (!Array.isArray(value))
|
|
76
|
+
return [];
|
|
77
|
+
return value.map((item) => walk(item, from + 1));
|
|
78
|
+
}
|
|
79
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
80
|
+
return undefined;
|
|
81
|
+
return walk(own(value, step), from + 1);
|
|
82
|
+
};
|
|
83
|
+
return walk(own(answers, m[1]), 0);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* An OWN property, or undefined. The segment grammar admits `constructor` and `__proto__` like any
|
|
87
|
+
* other name, and a bare `obj[name]` answers those from the prototype chain — so a ref to a field
|
|
88
|
+
* the claim never carried resolved to `Object.prototype` (frozen into a `send` payload as `{}`) or
|
|
89
|
+
* a function, instead of to "missing". An answer is what the claim body holds, nothing it inherits.
|
|
90
|
+
*/
|
|
91
|
+
function own(value, key) {
|
|
92
|
+
return value !== null && typeof value === "object" && Object.hasOwn(value, key)
|
|
93
|
+
? value[key]
|
|
94
|
+
: undefined;
|
|
95
|
+
}
|
|
96
|
+
/** The `~derived` refs a `send` map names — what the stock producer cannot answer (header). */
|
|
97
|
+
export function derivedSendRefs(send) {
|
|
98
|
+
return Object.values(send).filter((v) => typeof v === "string" && v[0] === "~");
|
|
99
|
+
}
|
|
100
|
+
/** Resolve a `send` map's declared refs against the claim body and the kit's ctx ($ / ctx only). */
|
|
101
|
+
export function resolveSendPayload(send, answers, ctx) {
|
|
102
|
+
const ctxFlat = flattenCtx(ctx);
|
|
103
|
+
const out = {};
|
|
104
|
+
for (const [key, declared] of Object.entries(send)) {
|
|
105
|
+
if (typeof declared !== "string") {
|
|
106
|
+
out[key] = declared;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (declared.startsWith("$")) {
|
|
110
|
+
out[key] = resolveFieldPath(answers, declared) ?? null;
|
|
111
|
+
}
|
|
112
|
+
else if (declared.startsWith("~")) {
|
|
113
|
+
out[key] = null; // unsupported (header) — the producer refuses the source before it gets here
|
|
114
|
+
}
|
|
115
|
+
else if (declared.startsWith("ctx.")) {
|
|
116
|
+
out[key] = ctxFlat[declared] ?? null;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
out[key] = declared; // a plain string literal
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* AI send entries keep their declared order: scalars ride the text lane; a `$ref` whose root
|
|
126
|
+
* question carries attachments rides the attachment lane ("AI checks the delivery photo") and is
|
|
127
|
+
* resolved to an image/document input by the connector — EVERY file on the question, not just the
|
|
128
|
+
* first: one `$deliverables` legitimately holds a source ZIP *and* a screenshot *and* a signed PDF,
|
|
129
|
+
* and a dropped one is a rule judged against evidence that was actually delivered (§6.1). Nothing
|
|
130
|
+
* attached ⇒ the answer itself (null when absent — absence is judged).
|
|
131
|
+
*/
|
|
132
|
+
export function aiEntries(claim, check, payload) {
|
|
133
|
+
const entries = [];
|
|
134
|
+
for (const [key, declared] of Object.entries(check.send)) {
|
|
135
|
+
const root = typeof declared === "string" && declared.startsWith("$")
|
|
136
|
+
? rootQuestionName(declared)
|
|
137
|
+
: undefined;
|
|
138
|
+
const attached = root ? claim.attachments.filter((a) => a.question === root) : [];
|
|
139
|
+
if (attached.length > 0) {
|
|
140
|
+
for (const attachment of attached)
|
|
141
|
+
entries.push({ kind: "attachment", key, attachment });
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
entries.push({ kind: "text", key, value: payload[key] });
|
|
145
|
+
}
|
|
146
|
+
return entries;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../../src/lib/facts/stock/send.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure duplicate scoring — spec §5 component table (numbers normative), §4 L3 asymmetry
|
|
3
|
+
* quadrant, §6 bands. `scoreUnique` turns the store's sibling rows + the resolve phase's
|
|
4
|
+
* similarity/AI inputs into the `UniqueFact` that freezes into the FactSet (`facts.unique`) —
|
|
5
|
+
* unique.ts resolves, the ENGINE's `decide()` reads only the band (its `uniqueFlagOf`; the rest
|
|
6
|
+
* rides its trace as the audit trail). PURE like a decide step: no I/O, no clock, no randomness;
|
|
7
|
+
* every scoreBps an integer (Math.round only). Duplicate detection is oracle-side, so this table
|
|
8
|
+
* (and the engine's reading of the band it produces) is the whole contract.
|
|
9
|
+
*
|
|
10
|
+
* Final score = MAX component across all candidates (explainable: `winner` names the component
|
|
11
|
+
* and candidate that carried it). With default thresholds only an exact same-claimant copy
|
|
12
|
+
* reaches the reject band — every cross-claimant and probabilistic signal lands in review,
|
|
13
|
+
* which is what defuses the front-run attack (spec §5).
|
|
14
|
+
*
|
|
15
|
+
* The table's one subtraction is §15.2's **bounded judge exoneration**: a confident "different
|
|
16
|
+
* events" judgement drops that pair's text-similarity component out of the MAX (still listed in
|
|
17
|
+
* `components` for audit). Bounded because a judge that can un-flag is a bypass surface — only
|
|
18
|
+
* `identity_fuzzy`, only below `rejectAtBps`, only for the candidate it actually examined.
|
|
19
|
+
*/
|
|
20
|
+
import type { UniqueSiblings } from "./unique-store.js";
|
|
21
|
+
export type { CidHit, SiblingClaim, TrigramHit, UniqueSiblings } from "./unique-store.js";
|
|
22
|
+
export type UniqueBand = "pass" | "review" | "reject";
|
|
23
|
+
export type UniqueComponentKind = "exact_body" | "exact_body_cross_agent" | "cid_reuse" | "cid_reuse_cross_agent" | "phash_near" | "identity_fuzzy" | "evasion_asymmetry" | "ai_same_event";
|
|
24
|
+
export interface UniqueComponent {
|
|
25
|
+
kind: UniqueComponentKind;
|
|
26
|
+
scoreBps: number;
|
|
27
|
+
candidateClaimId: string;
|
|
28
|
+
detail: string;
|
|
29
|
+
/** §15.2 — the judge confidently said "different events" for this candidate, so the component
|
|
30
|
+
* is recorded for audit but does NOT compete for the winner. Only ever set on `identity_fuzzy`
|
|
31
|
+
* inside the review band; every evidence-backed lane is un-exonerable. */
|
|
32
|
+
exonerated?: true;
|
|
33
|
+
}
|
|
34
|
+
export interface UniqueCandidate {
|
|
35
|
+
claimId: string;
|
|
36
|
+
agentAddress: string | null;
|
|
37
|
+
finalVerdict: string | null;
|
|
38
|
+
sameAgent: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The full forensic fact — a superset of the wire minimum the engine validates (factset.ts
|
|
42
|
+
* `UniqueFact`: `ruleId`/`digest`/`scoreBps`/`band`); everything else rides `.loose()` into the
|
|
43
|
+
* engine's trace. A `type`, not an `interface`: the wire type is loose (index-signed), and only an
|
|
44
|
+
* object type alias is implicitly assignable to it (producer.ts `ProducedFacts.unique`).
|
|
45
|
+
*/
|
|
46
|
+
export type UniqueFact = {
|
|
47
|
+
ruleId: string;
|
|
48
|
+
digest: string;
|
|
49
|
+
scoreBps: number;
|
|
50
|
+
band: UniqueBand;
|
|
51
|
+
winner: UniqueComponent | null;
|
|
52
|
+
components: UniqueComponent[];
|
|
53
|
+
candidates: UniqueCandidate[];
|
|
54
|
+
aiPairsJudged: number;
|
|
55
|
+
/** Σ of the judged pairs' OpenRouter `usage.cost` (T12b) — the resolve weave sets it whenever
|
|
56
|
+
* the judge ran (0 when the provider omitted usage); billing folds it into admin `costUsd`.
|
|
57
|
+
* Absent ⇒ the judge never ran (and on rows frozen before this field existed). */
|
|
58
|
+
aiCostUsd?: number;
|
|
59
|
+
/** T18 — the §7 judge's adjudication outcome, set by the resolve weave post-score (like
|
|
60
|
+
* aiCostUsd; scoring never sets it):
|
|
61
|
+
* "flagged" ≥1 valid judgement at/above the AI floor — an ai component exists;
|
|
62
|
+
* "cleared" ≥1 valid judgement, none at the floor (a parsed sameEvent:false IS valid);
|
|
63
|
+
* "failed" the §7 gate held but ZERO pairs returned a valid judgement — the adjudicator
|
|
64
|
+
* was unavailable, and decide() fails the pass band closed on it;
|
|
65
|
+
* "skipped" ai disabled, no qualifying candidate, or already ≥ rejectAtBps.
|
|
66
|
+
* Absent ⇒ a pre-T18 trace: decide() treats it as "skipped" (never a retroactive review). */
|
|
67
|
+
aiOutcome?: "flagged" | "cleared" | "failed" | "skipped";
|
|
68
|
+
/**
|
|
69
|
+
* The owner's own field names behind a `by` key ("Invoice", or several joined); absent ⇒
|
|
70
|
+
* whole-body mode. Only the SENTENCES read it — never a score. It exists because "identical
|
|
71
|
+
* canonical body" was a lie in `by` mode: the bodies differ (different names, different
|
|
72
|
+
* filenames) and only the key matched, so owners could not tell what the engine compared.
|
|
73
|
+
* Absent on every row frozen before this field, so their wording replays byte-identical.
|
|
74
|
+
*/
|
|
75
|
+
keyFields?: string[];
|
|
76
|
+
/** T18 — one row per judged pair; `pairDegradedToText` marks a pair whose PRIOR-claim images
|
|
77
|
+
* could not be re-fetched, so it was judged text-only (recorded, never thrown). */
|
|
78
|
+
aiPairs?: Array<{
|
|
79
|
+
candidateClaimId: string;
|
|
80
|
+
/** A parsed, schema-shaped judge response came back — even sameEvent:false. */
|
|
81
|
+
valid: boolean;
|
|
82
|
+
confidence: number;
|
|
83
|
+
pairDegradedToText?: boolean;
|
|
84
|
+
}>;
|
|
85
|
+
/** Render counters, kept for the engine's trace shape: ALWAYS 0 in this kit — there is no
|
|
86
|
+
* Browser Run binding, so PDFs are never rendered (unique.ts). */
|
|
87
|
+
pdfPagesRendered: number;
|
|
88
|
+
pdfsScreened: number;
|
|
89
|
+
confusablesVersion: number;
|
|
90
|
+
};
|
|
91
|
+
export interface UniqueScoreInput {
|
|
92
|
+
ruleId: string;
|
|
93
|
+
digest: string;
|
|
94
|
+
agentAddress: string | null;
|
|
95
|
+
siblings: UniqueSiblings;
|
|
96
|
+
/**
|
|
97
|
+
* This claim's own attachment pHashes (resolve phase computed them; frozen thereafter), each
|
|
98
|
+
* tagged with the attachment's media type so the pair picks the right distance tier.
|
|
99
|
+
*/
|
|
100
|
+
selfPhashes: Array<{
|
|
101
|
+
phash: string;
|
|
102
|
+
mediaType: string | null;
|
|
103
|
+
}>;
|
|
104
|
+
/** Present only when the rule declares `by` — enables the §4 L3 asymmetry quadrant. */
|
|
105
|
+
identity?: {
|
|
106
|
+
self: string;
|
|
107
|
+
residualSelf: string;
|
|
108
|
+
ofCandidate: Map<string, {
|
|
109
|
+
identity: string;
|
|
110
|
+
residual: string;
|
|
111
|
+
}>;
|
|
112
|
+
} | undefined;
|
|
113
|
+
/** Injected pure trigram sim; `null` ⇒ fall back to the store's whole-text similarity. */
|
|
114
|
+
trigramSim: (a: string, b: string) => number | null;
|
|
115
|
+
/** Gray-zone judge results (T8), confidence 0..1 — already gated + capped by §7. */
|
|
116
|
+
ai?: Array<{
|
|
117
|
+
candidateClaimId: string;
|
|
118
|
+
confidence: number;
|
|
119
|
+
}>;
|
|
120
|
+
/** §15.2 — candidateClaimIds the judge confidently cleared (resolve-side decides "confidently";
|
|
121
|
+
* scoring only applies the bounds). Absent ⇒ byte-identical output to before. */
|
|
122
|
+
exonerated?: ReadonlySet<string>;
|
|
123
|
+
thresholds: {
|
|
124
|
+
rejectAtBps: number;
|
|
125
|
+
reviewAtBps: number;
|
|
126
|
+
};
|
|
127
|
+
/** Field names behind `by` (facts.ts derives them); absent ⇒ whole-body mode. Sentences only. */
|
|
128
|
+
keyFields?: string[];
|
|
129
|
+
}
|
|
130
|
+
/** "Invoice" / "Invoice + Issue date" — the owner's words for what the L1 digest covered. */
|
|
131
|
+
export declare function keyLabel(keyFields: string[] | undefined): string | null;
|
|
132
|
+
/** Band cut: ≥ reject wins, then ≥ review; boundaries inclusive (spec §5 defaults 9000/5000). */
|
|
133
|
+
export declare function bandOf(scoreBps: number, t: {
|
|
134
|
+
rejectAtBps: number;
|
|
135
|
+
reviewAtBps: number;
|
|
136
|
+
}): UniqueBand;
|
|
137
|
+
export declare function scoreUnique(input: UniqueScoreInput): UniqueFact;
|
|
138
|
+
//# sourceMappingURL=unique-score.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unique-score.d.ts","sourceRoot":"","sources":["../../../../src/lib/facts/stock/unique-score.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure duplicate scoring — spec §5 component table (numbers normative), §4 L3 asymmetry
|
|
3
|
+
* quadrant, §6 bands. `scoreUnique` turns the store's sibling rows + the resolve phase's
|
|
4
|
+
* similarity/AI inputs into the `UniqueFact` that freezes into the FactSet (`facts.unique`) —
|
|
5
|
+
* unique.ts resolves, the ENGINE's `decide()` reads only the band (its `uniqueFlagOf`; the rest
|
|
6
|
+
* rides its trace as the audit trail). PURE like a decide step: no I/O, no clock, no randomness;
|
|
7
|
+
* every scoreBps an integer (Math.round only). Duplicate detection is oracle-side, so this table
|
|
8
|
+
* (and the engine's reading of the band it produces) is the whole contract.
|
|
9
|
+
*
|
|
10
|
+
* Final score = MAX component across all candidates (explainable: `winner` names the component
|
|
11
|
+
* and candidate that carried it). With default thresholds only an exact same-claimant copy
|
|
12
|
+
* reaches the reject band — every cross-claimant and probabilistic signal lands in review,
|
|
13
|
+
* which is what defuses the front-run attack (spec §5).
|
|
14
|
+
*
|
|
15
|
+
* The table's one subtraction is §15.2's **bounded judge exoneration**: a confident "different
|
|
16
|
+
* events" judgement drops that pair's text-similarity component out of the MAX (still listed in
|
|
17
|
+
* `components` for audit). Bounded because a judge that can un-flag is a bypass surface — only
|
|
18
|
+
* `identity_fuzzy`, only below `rejectAtBps`, only for the candidate it actually examined.
|
|
19
|
+
*/
|
|
20
|
+
import { CONFUSABLES_VERSION } from "./normalize.js";
|
|
21
|
+
import { hamming, PHASH_NEAR } from "./phash.js";
|
|
22
|
+
/** "Invoice" / "Invoice + Issue date" — the owner's words for what the L1 digest covered. */
|
|
23
|
+
export function keyLabel(keyFields) {
|
|
24
|
+
return keyFields && keyFields.length > 0 ? keyFields.join(" + ") : null;
|
|
25
|
+
}
|
|
26
|
+
/** Band cut: ≥ reject wins, then ≥ review; boundaries inclusive (spec §5 defaults 9000/5000). */
|
|
27
|
+
export function bandOf(scoreBps, t) {
|
|
28
|
+
if (scoreBps >= t.rejectAtBps)
|
|
29
|
+
return "reject";
|
|
30
|
+
if (scoreBps >= t.reviewAtBps)
|
|
31
|
+
return "review";
|
|
32
|
+
return "pass";
|
|
33
|
+
}
|
|
34
|
+
// §5 component table — the fixed rows. Cross-agent exact body scores BELOW same-agent (a copy
|
|
35
|
+
// of someone else's claim is front-run-able, a human looks first); cross-agent CID scores
|
|
36
|
+
// ABOVE same-agent (T5c must-catch vs. a possibly-legit re-reference).
|
|
37
|
+
const EXACT_SAME_BPS = 10000;
|
|
38
|
+
const EXACT_CROSS_BPS = 8800;
|
|
39
|
+
const CID_CROSS_BPS = 8800;
|
|
40
|
+
const CID_SAME_BPS = 8500;
|
|
41
|
+
const PHASH_TIGHT = 6; // hamming ≤ 6 ⇒ 8500; ≤ PHASH_NEAR (10) ⇒ 7000
|
|
42
|
+
const PHASH_TIGHT_BPS = 8500;
|
|
43
|
+
const PHASH_NEAR_BPS = 7000;
|
|
44
|
+
/**
|
|
45
|
+
* Rendered-document tiers. A PDF page renders deterministically: the same
|
|
46
|
+
* file re-exported or re-scanned measured hamming 0–1 on real invoices, while two
|
|
47
|
+
* DIFFERENT invoices sharing one template measured 5 — inside the image tier, so the looser
|
|
48
|
+
* cutoffs scored unrelated documents at 8500. dHash on a text page mostly reads "where the dark
|
|
49
|
+
* bands sit", and every invoice from one template puts them in the same places. Photos keep the
|
|
50
|
+
* wide tiers: the same scene shot twice genuinely moves.
|
|
51
|
+
*/
|
|
52
|
+
const PHASH_DOC_TIGHT = 2;
|
|
53
|
+
const PHASH_DOC_NEAR = 4;
|
|
54
|
+
const RENDERED_DOC_MIME = "application/pdf";
|
|
55
|
+
/** True when either side's hash came from a rendered document — the tighter cutoffs then apply. */
|
|
56
|
+
const isRenderedDoc = (mediaType) => (mediaType?.split(";")[0] ?? "").trim().toLowerCase() === RENDERED_DOC_MIME;
|
|
57
|
+
/** The §5 pHash tier for one pair, or null when the distance clears no tier. */
|
|
58
|
+
function phashTierBps(dist, renderedDoc) {
|
|
59
|
+
const tight = renderedDoc ? PHASH_DOC_TIGHT : PHASH_TIGHT;
|
|
60
|
+
const near = renderedDoc ? PHASH_DOC_NEAR : PHASH_NEAR;
|
|
61
|
+
if (dist <= tight)
|
|
62
|
+
return PHASH_TIGHT_BPS;
|
|
63
|
+
if (dist <= near)
|
|
64
|
+
return PHASH_NEAR_BPS;
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
/** Seam between the weak and review-band trigram maps — both formulas emit exactly 5000 here. */
|
|
68
|
+
const FUZZY_FLOOR = 0.85;
|
|
69
|
+
/** Owner directive: "score < 5% ⇒ it's a new claim". Any whole-text sim ≥ 0.50 records a visible
|
|
70
|
+
* score (500–5000 bps); only below this floor is "no duplicate" claimable. Same cutoff as the
|
|
71
|
+
* store's trigram shortlist, so every shortlisted candidate scores instead of silently passing. */
|
|
72
|
+
const WEAK_FLOOR = 0.5;
|
|
73
|
+
/** Below these floors a signal contributes nothing — "anything below the maps' floors passes". */
|
|
74
|
+
const RESIDUAL_MATCH = 0.9;
|
|
75
|
+
const AI_FLOOR = 0.7;
|
|
76
|
+
const clamp01 = (v) => Math.min(1, Math.max(0, v));
|
|
77
|
+
/** §5 linear maps — Math.round keeps every output an integer bps. */
|
|
78
|
+
const fuzzyBps = (s) => 5000 + Math.round(((clamp01(s) - 0.85) / 0.15) * 3500);
|
|
79
|
+
const weakBps = (s) => 500 + Math.round(((clamp01(s) - 0.5) / 0.35) * 4500);
|
|
80
|
+
const evasionBps = (r) => 8000 + Math.round(((clamp01(r) - 0.9) / 0.1) * 900);
|
|
81
|
+
const aiBps = (c) => 5000 + Math.round(((clamp01(c) - 0.7) / 0.3) * 3500);
|
|
82
|
+
export function scoreUnique(input) {
|
|
83
|
+
const components = [];
|
|
84
|
+
const candidates = [];
|
|
85
|
+
const seen = new Set();
|
|
86
|
+
// Unknown submitter on either side ⇒ NOT same-agent: the same-agent rows are the harsher
|
|
87
|
+
// (auto-reject-capable) ones, so identity uncertainty fails toward human review.
|
|
88
|
+
const isSameAgent = (addr) => input.agentAddress !== null && addr === input.agentAddress;
|
|
89
|
+
const addCandidate = (claimId, agentAddress, finalVerdict) => {
|
|
90
|
+
if (seen.has(claimId))
|
|
91
|
+
return;
|
|
92
|
+
seen.add(claimId);
|
|
93
|
+
candidates.push({ claimId, agentAddress, finalVerdict, sameAgent: isSameAgent(agentAddress) });
|
|
94
|
+
};
|
|
95
|
+
// L1 — exact digest siblings. The sentence names WHAT matched: the owner's `by` fields when the
|
|
96
|
+
// rule declared them (the bodies may differ wildly and still land here), the answers otherwise.
|
|
97
|
+
const key = keyLabel(input.keyFields);
|
|
98
|
+
const exactDetail = key ? `same ${key}` : "identical claim answers";
|
|
99
|
+
for (const s of input.siblings.exact) {
|
|
100
|
+
addCandidate(s.claimId, s.agentAddress, s.finalVerdict);
|
|
101
|
+
components.push(isSameAgent(s.agentAddress)
|
|
102
|
+
? {
|
|
103
|
+
kind: "exact_body",
|
|
104
|
+
scoreBps: EXACT_SAME_BPS,
|
|
105
|
+
candidateClaimId: s.claimId,
|
|
106
|
+
detail: exactDetail,
|
|
107
|
+
}
|
|
108
|
+
: {
|
|
109
|
+
kind: "exact_body_cross_agent",
|
|
110
|
+
scoreBps: EXACT_CROSS_BPS,
|
|
111
|
+
candidateClaimId: s.claimId,
|
|
112
|
+
detail: `${exactDetail} (different submitter)`,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
// L2 — attachment CID reuse (claimant-agnostic registry).
|
|
116
|
+
for (const h of input.siblings.cidHits) {
|
|
117
|
+
addCandidate(h.claimId, h.agentAddress, h.finalVerdict);
|
|
118
|
+
components.push(isSameAgent(h.agentAddress)
|
|
119
|
+
? {
|
|
120
|
+
kind: "cid_reuse",
|
|
121
|
+
scoreBps: CID_SAME_BPS,
|
|
122
|
+
candidateClaimId: h.claimId,
|
|
123
|
+
detail: `same attachment ${h.cid}`,
|
|
124
|
+
}
|
|
125
|
+
: {
|
|
126
|
+
kind: "cid_reuse_cross_agent",
|
|
127
|
+
scoreBps: CID_CROSS_BPS,
|
|
128
|
+
candidateClaimId: h.claimId,
|
|
129
|
+
detail: `same attachment ${h.cid} (different submitter)`,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
// L4 — pHash neighbors; hamming runs here in JS over the store's bounded pool. Scored PER PAIR,
|
|
133
|
+
// not per pool row: the tier depends on what BOTH hashes came from, so a photo-vs-photo pair and
|
|
134
|
+
// a page-vs-page pair against the same candidate can't share one cutoff. Best-scoring pair wins
|
|
135
|
+
// the row (ties break on the shorter distance).
|
|
136
|
+
for (const p of input.siblings.phashPool) {
|
|
137
|
+
const renderedPool = isRenderedDoc(p.mediaType);
|
|
138
|
+
let best = null;
|
|
139
|
+
for (const self of input.selfPhashes) {
|
|
140
|
+
const dist = hamming(self.phash, p.phash);
|
|
141
|
+
const scoreBps = phashTierBps(dist, renderedPool || isRenderedDoc(self.mediaType));
|
|
142
|
+
if (scoreBps === null)
|
|
143
|
+
continue;
|
|
144
|
+
if (best === null ||
|
|
145
|
+
scoreBps > best.scoreBps ||
|
|
146
|
+
(scoreBps === best.scoreBps && dist < best.dist)) {
|
|
147
|
+
best = { scoreBps, dist };
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (best === null)
|
|
151
|
+
continue;
|
|
152
|
+
addCandidate(p.claimId, p.agentAddress, null);
|
|
153
|
+
components.push({
|
|
154
|
+
kind: "phash_near",
|
|
155
|
+
scoreBps: best.scoreBps,
|
|
156
|
+
candidateClaimId: p.claimId,
|
|
157
|
+
detail: `attachment ${p.cid} pHash hamming ${best.dist}`,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
// L3 — the trigram shortlist, read through the §4 L3 quadrant when the rule declared `by`.
|
|
161
|
+
for (const t of input.siblings.trigram) {
|
|
162
|
+
addCandidate(t.claimId, t.agentAddress, t.finalVerdict);
|
|
163
|
+
const overall = clamp01(t.similarity);
|
|
164
|
+
const cand = input.identity?.ofCandidate.get(t.claimId);
|
|
165
|
+
if (input.identity && cand) {
|
|
166
|
+
const idSim = clamp01(input.trigramSim(input.identity.self, cand.identity) ?? overall);
|
|
167
|
+
const resSim = clamp01(input.trigramSim(input.identity.residualSelf, cand.residual) ?? overall);
|
|
168
|
+
if (idSim < FUZZY_FLOOR && resSim >= RESIDUAL_MATCH) {
|
|
169
|
+
// The evasion cell: the identity key was edited while everything else still matches —
|
|
170
|
+
// the trap inverts, this scores ABOVE any identity-matching cell.
|
|
171
|
+
components.push({
|
|
172
|
+
kind: "evasion_asymmetry",
|
|
173
|
+
scoreBps: evasionBps(resSim),
|
|
174
|
+
candidateClaimId: t.claimId,
|
|
175
|
+
detail: `identity differs (sim ${idSim.toFixed(2)}) while residual matches (sim ${resSim.toFixed(2)})`,
|
|
176
|
+
});
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (idSim >= FUZZY_FLOOR) {
|
|
180
|
+
// Identity matches ⇒ tracks overall similarity, floored at the map base (5000): a
|
|
181
|
+
// matching key alone is review-worthy even when the residual was reworked (the
|
|
182
|
+
// "corrected resubmission" cell lands mid-band, never silently passes).
|
|
183
|
+
components.push({
|
|
184
|
+
kind: "identity_fuzzy",
|
|
185
|
+
scoreBps: fuzzyBps(Math.max(FUZZY_FLOOR, overall)),
|
|
186
|
+
candidateClaimId: t.claimId,
|
|
187
|
+
detail: `identity matches (sim ${idSim.toFixed(2)}), overall sim ${overall.toFixed(2)}`,
|
|
188
|
+
});
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
// Both differ ⇒ fall through to the whole-text map: identity keys are short strings,
|
|
192
|
+
// trigram on them is noisy — a high whole-body similarity still counts.
|
|
193
|
+
}
|
|
194
|
+
if (overall >= WEAK_FLOOR) {
|
|
195
|
+
components.push({
|
|
196
|
+
kind: "identity_fuzzy",
|
|
197
|
+
scoreBps: overall >= FUZZY_FLOOR ? fuzzyBps(overall) : weakBps(overall),
|
|
198
|
+
candidateClaimId: t.claimId,
|
|
199
|
+
detail: `text similarity ${overall.toFixed(2)}`,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// L5 — gray-zone AI judge results. Every judged pair bills (aiPairsJudged) even when the
|
|
204
|
+
// confidence lands below the floor and contributes no component.
|
|
205
|
+
for (const a of input.ai ?? []) {
|
|
206
|
+
addCandidate(a.candidateClaimId, null, null);
|
|
207
|
+
const conf = clamp01(a.confidence);
|
|
208
|
+
if (conf < AI_FLOOR)
|
|
209
|
+
continue;
|
|
210
|
+
components.push({
|
|
211
|
+
kind: "ai_same_event",
|
|
212
|
+
scoreBps: aiBps(conf),
|
|
213
|
+
candidateClaimId: a.candidateClaimId,
|
|
214
|
+
detail: `AI same-event confidence ${conf.toFixed(2)}`,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
// §15.2 — bounded exoneration, applied AFTER every lane scored so no map above changes: a
|
|
218
|
+
// candidate the judge confidently cleared loses its text-similarity component only. The three
|
|
219
|
+
// bounds are the whole safety argument — an evidence lane (identical answers, a reused CID, a
|
|
220
|
+
// matching photo hash) is never argued away by a model, and a score already at `rejectAtBps` is
|
|
221
|
+
// never rescued (live only under a lowered threshold: the fuzzy map tops out at 8500).
|
|
222
|
+
if (input.exonerated !== undefined) {
|
|
223
|
+
for (const c of components) {
|
|
224
|
+
if (c.kind === "identity_fuzzy" &&
|
|
225
|
+
c.scoreBps < input.thresholds.rejectAtBps &&
|
|
226
|
+
input.exonerated.has(c.candidateClaimId)) {
|
|
227
|
+
c.exonerated = true;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// Max wins; ties keep the first-generated component (lane order above is fixed ⇒ stable).
|
|
232
|
+
// Exonerated components stay in `components` for the audit trail but are out of the running,
|
|
233
|
+
// so a fully-exonerated claim scores 0 and bands `pass`.
|
|
234
|
+
let winner = null;
|
|
235
|
+
for (const c of components) {
|
|
236
|
+
if (c.exonerated)
|
|
237
|
+
continue;
|
|
238
|
+
if (winner === null || c.scoreBps > winner.scoreBps)
|
|
239
|
+
winner = c;
|
|
240
|
+
}
|
|
241
|
+
const scoreBps = winner?.scoreBps ?? 0;
|
|
242
|
+
return {
|
|
243
|
+
ruleId: input.ruleId,
|
|
244
|
+
digest: input.digest,
|
|
245
|
+
scoreBps,
|
|
246
|
+
band: bandOf(scoreBps, input.thresholds),
|
|
247
|
+
winner,
|
|
248
|
+
components,
|
|
249
|
+
candidates,
|
|
250
|
+
aiPairsJudged: input.ai?.length ?? 0,
|
|
251
|
+
...(input.keyFields ? { keyFields: input.keyFields } : {}),
|
|
252
|
+
pdfPagesRendered: 0,
|
|
253
|
+
pdfsScreened: 0,
|
|
254
|
+
confusablesVersion: CONFUSABLES_VERSION,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=unique-score.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unique-score.js","sourceRoot":"","sources":["../../../../src/lib/facts/stock/unique-score.ts"],"names":[],"mappings":"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"}
|