@harrylabsj/kiwi 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +150 -0
- package/contracts/candidate-agent-dto-1.0.README.md +39 -0
- package/contracts/candidate-agent-dto-1.0.schema.json +172 -0
- package/contracts/interop/kiwi-buyer-message-send.json +43 -0
- package/contracts/interop/knp-data-part-examples.json +243 -0
- package/contracts/kiwi-catalog/1.0/agent-record.schema.json +78 -0
- package/contracts/kiwi-catalog/1.0/listing-record.schema.json +88 -0
- package/contracts/kiwi-catalog/1.0/listing-search-result.schema.json +60 -0
- package/contracts/negotiation/1.0/schema.json +501 -0
- package/contracts/shopping.negotiation/0.1/capabilities.schema.json +47 -0
- package/contracts/shopping.negotiation/0.1/decision.schema.json +120 -0
- package/contracts/shopping.negotiation/0.1/policy-result.schema.json +52 -0
- package/contracts/shopping.negotiation/0.1/snapshot.schema.json +172 -0
- package/dist/a2a/client/client.d.ts +33 -0
- package/dist/a2a/client/client.js +161 -0
- package/dist/a2a/client/client.js.map +1 -0
- package/dist/a2a/client/error.d.ts +35 -0
- package/dist/a2a/client/error.js +34 -0
- package/dist/a2a/client/error.js.map +1 -0
- package/dist/a2a/client/index.d.ts +29 -0
- package/dist/a2a/client/index.js +26 -0
- package/dist/a2a/client/index.js.map +1 -0
- package/dist/a2a/client/jsonrpc.d.ts +49 -0
- package/dist/a2a/client/jsonrpc.js +85 -0
- package/dist/a2a/client/jsonrpc.js.map +1 -0
- package/dist/a2a/client/parse.d.ts +18 -0
- package/dist/a2a/client/parse.js +134 -0
- package/dist/a2a/client/parse.js.map +1 -0
- package/dist/a2a/client/types.d.ts +102 -0
- package/dist/a2a/client/types.js +26 -0
- package/dist/a2a/client/types.js.map +1 -0
- package/dist/a2a/client/url-policy.d.ts +44 -0
- package/dist/a2a/client/url-policy.js +242 -0
- package/dist/a2a/client/url-policy.js.map +1 -0
- package/dist/a2a/negotiate.d.ts +68 -0
- package/dist/a2a/negotiate.js +288 -0
- package/dist/a2a/negotiate.js.map +1 -0
- package/dist/a2a/node.d.ts +37 -0
- package/dist/a2a/node.js +155 -0
- package/dist/a2a/node.js.map +1 -0
- package/dist/a2a/server/auth.d.ts +38 -0
- package/dist/a2a/server/auth.js +112 -0
- package/dist/a2a/server/auth.js.map +1 -0
- package/dist/a2a/server/card.d.ts +19 -0
- package/dist/a2a/server/card.js +81 -0
- package/dist/a2a/server/card.js.map +1 -0
- package/dist/a2a/server/errors.d.ts +109 -0
- package/dist/a2a/server/errors.js +178 -0
- package/dist/a2a/server/errors.js.map +1 -0
- package/dist/a2a/server/handler.d.ts +22 -0
- package/dist/a2a/server/handler.js +57 -0
- package/dist/a2a/server/handler.js.map +1 -0
- package/dist/a2a/server/inbound-message.d.ts +37 -0
- package/dist/a2a/server/inbound-message.js +104 -0
- package/dist/a2a/server/inbound-message.js.map +1 -0
- package/dist/a2a/server/index.d.ts +43 -0
- package/dist/a2a/server/index.js +42 -0
- package/dist/a2a/server/index.js.map +1 -0
- package/dist/a2a/server/merchant-handler.d.ts +69 -0
- package/dist/a2a/server/merchant-handler.js +316 -0
- package/dist/a2a/server/merchant-handler.js.map +1 -0
- package/dist/a2a/server/pipeline.d.ts +69 -0
- package/dist/a2a/server/pipeline.js +329 -0
- package/dist/a2a/server/pipeline.js.map +1 -0
- package/dist/a2a/server/server.d.ts +64 -0
- package/dist/a2a/server/server.js +420 -0
- package/dist/a2a/server/server.js.map +1 -0
- package/dist/a2a/server/task-registry.d.ts +31 -0
- package/dist/a2a/server/task-registry.js +67 -0
- package/dist/a2a/server/task-registry.js.map +1 -0
- package/dist/a2a/server/throttle.d.ts +154 -0
- package/dist/a2a/server/throttle.js +289 -0
- package/dist/a2a/server/throttle.js.map +1 -0
- package/dist/a2a/server/types.d.ts +191 -0
- package/dist/a2a/server/types.js +17 -0
- package/dist/a2a/server/types.js.map +1 -0
- package/dist/a2a/server/ucp.d.ts +49 -0
- package/dist/a2a/server/ucp.js +85 -0
- package/dist/a2a/server/ucp.js.map +1 -0
- package/dist/a2a/task/index.d.ts +24 -0
- package/dist/a2a/task/index.js +22 -0
- package/dist/a2a/task/index.js.map +1 -0
- package/dist/a2a/task/ledger.d.ts +48 -0
- package/dist/a2a/task/ledger.js +65 -0
- package/dist/a2a/task/ledger.js.map +1 -0
- package/dist/a2a/task/poller.d.ts +93 -0
- package/dist/a2a/task/poller.js +184 -0
- package/dist/a2a/task/poller.js.map +1 -0
- package/dist/a2a/task/state.d.ts +72 -0
- package/dist/a2a/task/state.js +119 -0
- package/dist/a2a/task/state.js.map +1 -0
- package/dist/a2a/ucp-agent.d.ts +49 -0
- package/dist/a2a/ucp-agent.js +78 -0
- package/dist/a2a/ucp-agent.js.map +1 -0
- package/dist/agent/agent-db.d.ts +31 -0
- package/dist/agent/agent-db.js +91 -0
- package/dist/agent/agent-db.js.map +1 -0
- package/dist/agent/buyer/buyer-tools.d.ts +70 -0
- package/dist/agent/buyer/buyer-tools.js +1353 -0
- package/dist/agent/buyer/buyer-tools.js.map +1 -0
- package/dist/agent/buyer/ranker.d.ts +53 -0
- package/dist/agent/buyer/ranker.js +153 -0
- package/dist/agent/buyer/ranker.js.map +1 -0
- package/dist/agent/buyer/scheduler.d.ts +58 -0
- package/dist/agent/buyer/scheduler.js +317 -0
- package/dist/agent/buyer/scheduler.js.map +1 -0
- package/dist/agent/buyer/search-loop.d.ts +42 -0
- package/dist/agent/buyer/search-loop.js +280 -0
- package/dist/agent/buyer/search-loop.js.map +1 -0
- package/dist/agent/buyer/task-store.d.ts +178 -0
- package/dist/agent/buyer/task-store.js +637 -0
- package/dist/agent/buyer/task-store.js.map +1 -0
- package/dist/agent/buyer/types.d.ts +222 -0
- package/dist/agent/buyer/types.js +124 -0
- package/dist/agent/buyer/types.js.map +1 -0
- package/dist/agent/chat-tools.d.ts +41 -0
- package/dist/agent/chat-tools.js +193 -0
- package/dist/agent/chat-tools.js.map +1 -0
- package/dist/agent/chat-tui.d.ts +49 -0
- package/dist/agent/chat-tui.js +314 -0
- package/dist/agent/chat-tui.js.map +1 -0
- package/dist/agent/connector/fake-connector.d.ts +50 -0
- package/dist/agent/connector/fake-connector.js +138 -0
- package/dist/agent/connector/fake-connector.js.map +1 -0
- package/dist/agent/connector/http-connector.d.ts +49 -0
- package/dist/agent/connector/http-connector.js +208 -0
- package/dist/agent/connector/http-connector.js.map +1 -0
- package/dist/agent/connector/types.d.ts +103 -0
- package/dist/agent/connector/types.js +97 -0
- package/dist/agent/connector/types.js.map +1 -0
- package/dist/agent/fake-chat-model.d.ts +22 -0
- package/dist/agent/fake-chat-model.js +134 -0
- package/dist/agent/fake-chat-model.js.map +1 -0
- package/dist/agent/kernel.d.ts +258 -0
- package/dist/agent/kernel.js +1099 -0
- package/dist/agent/kernel.js.map +1 -0
- package/dist/agent/memory/schema.d.ts +32 -0
- package/dist/agent/memory/schema.js +291 -0
- package/dist/agent/memory/schema.js.map +1 -0
- package/dist/agent/memory/store.d.ts +193 -0
- package/dist/agent/memory/store.js +881 -0
- package/dist/agent/memory/store.js.map +1 -0
- package/dist/agent/memory/types.d.ts +139 -0
- package/dist/agent/memory/types.js +119 -0
- package/dist/agent/memory/types.js.map +1 -0
- package/dist/agent/memory/vault.d.ts +49 -0
- package/dist/agent/memory/vault.js +125 -0
- package/dist/agent/memory/vault.js.map +1 -0
- package/dist/agent/merchant/action-candidate.d.ts +106 -0
- package/dist/agent/merchant/action-candidate.js +241 -0
- package/dist/agent/merchant/action-candidate.js.map +1 -0
- package/dist/agent/merchant/credential-broker.d.ts +67 -0
- package/dist/agent/merchant/credential-broker.js +76 -0
- package/dist/agent/merchant/credential-broker.js.map +1 -0
- package/dist/agent/merchant/fake-merchant-client.d.ts +47 -0
- package/dist/agent/merchant/fake-merchant-client.js +143 -0
- package/dist/agent/merchant/fake-merchant-client.js.map +1 -0
- package/dist/agent/merchant/merchant-client.d.ts +49 -0
- package/dist/agent/merchant/merchant-client.js +186 -0
- package/dist/agent/merchant/merchant-client.js.map +1 -0
- package/dist/agent/merchant/merchant-tools.d.ts +74 -0
- package/dist/agent/merchant/merchant-tools.js +582 -0
- package/dist/agent/merchant/merchant-tools.js.map +1 -0
- package/dist/agent/merchant/types.d.ts +119 -0
- package/dist/agent/merchant/types.js +133 -0
- package/dist/agent/merchant/types.js.map +1 -0
- package/dist/agent/mode.d.ts +32 -0
- package/dist/agent/mode.js +34 -0
- package/dist/agent/mode.js.map +1 -0
- package/dist/agent/negotiation-chat.d.ts +81 -0
- package/dist/agent/negotiation-chat.js +330 -0
- package/dist/agent/negotiation-chat.js.map +1 -0
- package/dist/agent/session.d.ts +22 -0
- package/dist/agent/session.js +164 -0
- package/dist/agent/session.js.map +1 -0
- package/dist/agent/system-prompt.d.ts +26 -0
- package/dist/agent/system-prompt.js +77 -0
- package/dist/agent/system-prompt.js.map +1 -0
- package/dist/agent/write-gate.d.ts +98 -0
- package/dist/agent/write-gate.js +76 -0
- package/dist/agent/write-gate.js.map +1 -0
- package/dist/cli.d.ts +18 -0
- package/dist/cli.js +1139 -0
- package/dist/cli.js.map +1 -0
- package/dist/commerce/data-source.d.ts +88 -0
- package/dist/commerce/data-source.js +25 -0
- package/dist/commerce/data-source.js.map +1 -0
- package/dist/commerce/erp-source.d.ts +51 -0
- package/dist/commerce/erp-source.js +184 -0
- package/dist/commerce/erp-source.js.map +1 -0
- package/dist/commerce/fake-client.d.ts +167 -0
- package/dist/commerce/fake-client.js +549 -0
- package/dist/commerce/fake-client.js.map +1 -0
- package/dist/commerce/http-client.d.ts +73 -0
- package/dist/commerce/http-client.js +284 -0
- package/dist/commerce/http-client.js.map +1 -0
- package/dist/commerce/local-db-source.d.ts +50 -0
- package/dist/commerce/local-db-source.js +162 -0
- package/dist/commerce/local-db-source.js.map +1 -0
- package/dist/commerce/shopping-cli-source.d.ts +57 -0
- package/dist/commerce/shopping-cli-source.js +206 -0
- package/dist/commerce/shopping-cli-source.js.map +1 -0
- package/dist/commerce/types.d.ts +146 -0
- package/dist/commerce/types.js +31 -0
- package/dist/commerce/types.js.map +1 -0
- package/dist/config/profile.d.ts +122 -0
- package/dist/config/profile.js +386 -0
- package/dist/config/profile.js.map +1 -0
- package/dist/contracts/negotiation-schema.d.ts +28 -0
- package/dist/contracts/negotiation-schema.js +101 -0
- package/dist/contracts/negotiation-schema.js.map +1 -0
- package/dist/contracts/schemas.d.ts +31 -0
- package/dist/contracts/schemas.js +122 -0
- package/dist/contracts/schemas.js.map +1 -0
- package/dist/counterparty/a2a-direct/index.d.ts +41 -0
- package/dist/counterparty/a2a-direct/index.js +330 -0
- package/dist/counterparty/a2a-direct/index.js.map +1 -0
- package/dist/counterparty/channel.d.ts +200 -0
- package/dist/counterparty/channel.js +61 -0
- package/dist/counterparty/channel.js.map +1 -0
- package/dist/counterparty/index.d.ts +28 -0
- package/dist/counterparty/index.js +24 -0
- package/dist/counterparty/index.js.map +1 -0
- package/dist/counterparty/platform-api/index.d.ts +41 -0
- package/dist/counterparty/platform-api/index.js +65 -0
- package/dist/counterparty/platform-api/index.js.map +1 -0
- package/dist/counterparty/registry.d.ts +51 -0
- package/dist/counterparty/registry.js +71 -0
- package/dist/counterparty/registry.js.map +1 -0
- package/dist/counterparty/shopping-cli-hosted/index.d.ts +36 -0
- package/dist/counterparty/shopping-cli-hosted/index.js +337 -0
- package/dist/counterparty/shopping-cli-hosted/index.js.map +1 -0
- package/dist/discovery/agent-card/error.d.ts +28 -0
- package/dist/discovery/agent-card/error.js +31 -0
- package/dist/discovery/agent-card/error.js.map +1 -0
- package/dist/discovery/agent-card/extensions.d.ts +20 -0
- package/dist/discovery/agent-card/extensions.js +59 -0
- package/dist/discovery/agent-card/extensions.js.map +1 -0
- package/dist/discovery/agent-card/index.d.ts +29 -0
- package/dist/discovery/agent-card/index.js +38 -0
- package/dist/discovery/agent-card/index.js.map +1 -0
- package/dist/discovery/agent-card/secrets.d.ts +30 -0
- package/dist/discovery/agent-card/secrets.js +240 -0
- package/dist/discovery/agent-card/secrets.js.map +1 -0
- package/dist/discovery/agent-card/types.d.ts +110 -0
- package/dist/discovery/agent-card/types.js +37 -0
- package/dist/discovery/agent-card/types.js.map +1 -0
- package/dist/discovery/agent-card/validate.d.ts +31 -0
- package/dist/discovery/agent-card/validate.js +210 -0
- package/dist/discovery/agent-card/validate.js.map +1 -0
- package/dist/discovery/capability/error.d.ts +23 -0
- package/dist/discovery/capability/error.js +28 -0
- package/dist/discovery/capability/error.js.map +1 -0
- package/dist/discovery/capability/index.d.ts +21 -0
- package/dist/discovery/capability/index.js +21 -0
- package/dist/discovery/capability/index.js.map +1 -0
- package/dist/discovery/capability/intersect.d.ts +56 -0
- package/dist/discovery/capability/intersect.js +137 -0
- package/dist/discovery/capability/intersect.js.map +1 -0
- package/dist/discovery/catalog-source/errors.d.ts +32 -0
- package/dist/discovery/catalog-source/errors.js +41 -0
- package/dist/discovery/catalog-source/errors.js.map +1 -0
- package/dist/discovery/catalog-source/index.d.ts +30 -0
- package/dist/discovery/catalog-source/index.js +29 -0
- package/dist/discovery/catalog-source/index.js.map +1 -0
- package/dist/discovery/catalog-source/kiwi-record.d.ts +183 -0
- package/dist/discovery/catalog-source/kiwi-record.js +72 -0
- package/dist/discovery/catalog-source/kiwi-record.js.map +1 -0
- package/dist/discovery/catalog-source/kiwi-schema.d.ts +33 -0
- package/dist/discovery/catalog-source/kiwi-schema.js +106 -0
- package/dist/discovery/catalog-source/kiwi-schema.js.map +1 -0
- package/dist/discovery/catalog-source/kiwi-source.d.ts +38 -0
- package/dist/discovery/catalog-source/kiwi-source.js +318 -0
- package/dist/discovery/catalog-source/kiwi-source.js.map +1 -0
- package/dist/discovery/catalog-source/register.d.ts +48 -0
- package/dist/discovery/catalog-source/register.js +83 -0
- package/dist/discovery/catalog-source/register.js.map +1 -0
- package/dist/discovery/catalog-source/schema.d.ts +21 -0
- package/dist/discovery/catalog-source/schema.js +63 -0
- package/dist/discovery/catalog-source/schema.js.map +1 -0
- package/dist/discovery/catalog-source/source.d.ts +45 -0
- package/dist/discovery/catalog-source/source.js +197 -0
- package/dist/discovery/catalog-source/source.js.map +1 -0
- package/dist/discovery/catalog-source/types.d.ts +122 -0
- package/dist/discovery/catalog-source/types.js +30 -0
- package/dist/discovery/catalog-source/types.js.map +1 -0
- package/dist/discovery/index.d.ts +25 -0
- package/dist/discovery/index.js +25 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/resolve.d.ts +175 -0
- package/dist/discovery/resolve.js +367 -0
- package/dist/discovery/resolve.js.map +1 -0
- package/dist/discovery/ucp/error.d.ts +25 -0
- package/dist/discovery/ucp/error.js +27 -0
- package/dist/discovery/ucp/error.js.map +1 -0
- package/dist/discovery/ucp/index.d.ts +33 -0
- package/dist/discovery/ucp/index.js +28 -0
- package/dist/discovery/ucp/index.js.map +1 -0
- package/dist/discovery/ucp/intersect.d.ts +148 -0
- package/dist/discovery/ucp/intersect.js +312 -0
- package/dist/discovery/ucp/intersect.js.map +1 -0
- package/dist/discovery/ucp/resolver.d.ts +62 -0
- package/dist/discovery/ucp/resolver.js +214 -0
- package/dist/discovery/ucp/resolver.js.map +1 -0
- package/dist/discovery/ucp/types.d.ts +97 -0
- package/dist/discovery/ucp/types.js +103 -0
- package/dist/discovery/ucp/types.js.map +1 -0
- package/dist/discovery/ucp/validate.d.ts +38 -0
- package/dist/discovery/ucp/validate.js +232 -0
- package/dist/discovery/ucp/validate.js.map +1 -0
- package/dist/discovery/ucp/vendor.d.ts +60 -0
- package/dist/discovery/ucp/vendor.js +61 -0
- package/dist/discovery/ucp/vendor.js.map +1 -0
- package/dist/doctor.d.ts +26 -0
- package/dist/doctor.js +113 -0
- package/dist/doctor.js.map +1 -0
- package/dist/exit-codes.d.ts +26 -0
- package/dist/exit-codes.js +27 -0
- package/dist/exit-codes.js.map +1 -0
- package/dist/fanout/disclosure.d.ts +138 -0
- package/dist/fanout/disclosure.js +188 -0
- package/dist/fanout/disclosure.js.map +1 -0
- package/dist/fanout/index.d.ts +32 -0
- package/dist/fanout/index.js +30 -0
- package/dist/fanout/index.js.map +1 -0
- package/dist/fanout/orchestrator.d.ts +153 -0
- package/dist/fanout/orchestrator.js +439 -0
- package/dist/fanout/orchestrator.js.map +1 -0
- package/dist/fanout/policy.d.ts +128 -0
- package/dist/fanout/policy.js +130 -0
- package/dist/fanout/policy.js.map +1 -0
- package/dist/handoff/acp-commerce.d.ts +58 -0
- package/dist/handoff/acp-commerce.js +69 -0
- package/dist/handoff/acp-commerce.js.map +1 -0
- package/dist/handoff/authorization.d.ts +127 -0
- package/dist/handoff/authorization.js +107 -0
- package/dist/handoff/authorization.js.map +1 -0
- package/dist/handoff/candidate.d.ts +94 -0
- package/dist/handoff/candidate.js +172 -0
- package/dist/handoff/candidate.js.map +1 -0
- package/dist/handoff/channel.d.ts +88 -0
- package/dist/handoff/channel.js +189 -0
- package/dist/handoff/channel.js.map +1 -0
- package/dist/handoff/completion.d.ts +44 -0
- package/dist/handoff/completion.js +136 -0
- package/dist/handoff/completion.js.map +1 -0
- package/dist/handoff/delivery.d.ts +59 -0
- package/dist/handoff/delivery.js +185 -0
- package/dist/handoff/delivery.js.map +1 -0
- package/dist/handoff/destination.d.ts +39 -0
- package/dist/handoff/destination.js +99 -0
- package/dist/handoff/destination.js.map +1 -0
- package/dist/handoff/errors.d.ts +34 -0
- package/dist/handoff/errors.js +47 -0
- package/dist/handoff/errors.js.map +1 -0
- package/dist/handoff/idempotency.d.ts +51 -0
- package/dist/handoff/idempotency.js +168 -0
- package/dist/handoff/idempotency.js.map +1 -0
- package/dist/handoff/index.d.ts +46 -0
- package/dist/handoff/index.js +48 -0
- package/dist/handoff/index.js.map +1 -0
- package/dist/handoff/ledger.d.ts +94 -0
- package/dist/handoff/ledger.js +195 -0
- package/dist/handoff/ledger.js.map +1 -0
- package/dist/handoff/lifecycle.d.ts +29 -0
- package/dist/handoff/lifecycle.js +102 -0
- package/dist/handoff/lifecycle.js.map +1 -0
- package/dist/handoff/metrics.d.ts +56 -0
- package/dist/handoff/metrics.js +78 -0
- package/dist/handoff/metrics.js.map +1 -0
- package/dist/handoff/operator-approval.d.ts +143 -0
- package/dist/handoff/operator-approval.js +287 -0
- package/dist/handoff/operator-approval.js.map +1 -0
- package/dist/handoff/order-record.d.ts +104 -0
- package/dist/handoff/order-record.js +235 -0
- package/dist/handoff/order-record.js.map +1 -0
- package/dist/handoff/package.d.ts +102 -0
- package/dist/handoff/package.js +132 -0
- package/dist/handoff/package.js.map +1 -0
- package/dist/handoff/transaction.d.ts +96 -0
- package/dist/handoff/transaction.js +263 -0
- package/dist/handoff/transaction.js.map +1 -0
- package/dist/handoff/ucp-checkout/cart-channel.d.ts +111 -0
- package/dist/handoff/ucp-checkout/cart-channel.js +370 -0
- package/dist/handoff/ucp-checkout/cart-channel.js.map +1 -0
- package/dist/handoff/ucp-checkout/cart-parse.d.ts +22 -0
- package/dist/handoff/ucp-checkout/cart-parse.js +102 -0
- package/dist/handoff/ucp-checkout/cart-parse.js.map +1 -0
- package/dist/handoff/ucp-checkout/cart-types.d.ts +93 -0
- package/dist/handoff/ucp-checkout/cart-types.js +38 -0
- package/dist/handoff/ucp-checkout/cart-types.js.map +1 -0
- package/dist/handoff/ucp-checkout/channel.d.ts +159 -0
- package/dist/handoff/ucp-checkout/channel.js +636 -0
- package/dist/handoff/ucp-checkout/channel.js.map +1 -0
- package/dist/handoff/ucp-checkout/client.d.ts +88 -0
- package/dist/handoff/ucp-checkout/client.js +228 -0
- package/dist/handoff/ucp-checkout/client.js.map +1 -0
- package/dist/handoff/ucp-checkout/endpoint.d.ts +36 -0
- package/dist/handoff/ucp-checkout/endpoint.js +145 -0
- package/dist/handoff/ucp-checkout/endpoint.js.map +1 -0
- package/dist/handoff/ucp-checkout/index.d.ts +35 -0
- package/dist/handoff/ucp-checkout/index.js +36 -0
- package/dist/handoff/ucp-checkout/index.js.map +1 -0
- package/dist/handoff/ucp-checkout/parse.d.ts +71 -0
- package/dist/handoff/ucp-checkout/parse.js +349 -0
- package/dist/handoff/ucp-checkout/parse.js.map +1 -0
- package/dist/handoff/ucp-checkout/totals.d.ts +41 -0
- package/dist/handoff/ucp-checkout/totals.js +36 -0
- package/dist/handoff/ucp-checkout/totals.js.map +1 -0
- package/dist/handoff/ucp-checkout/types.d.ts +149 -0
- package/dist/handoff/ucp-checkout/types.js +58 -0
- package/dist/handoff/ucp-checkout/types.js.map +1 -0
- package/dist/handoff/url-safety.d.ts +44 -0
- package/dist/handoff/url-safety.js +121 -0
- package/dist/handoff/url-safety.js.map +1 -0
- package/dist/i18n.d.ts +24 -0
- package/dist/i18n.js +27 -0
- package/dist/i18n.js.map +1 -0
- package/dist/negotiation/action-candidate.d.ts +97 -0
- package/dist/negotiation/action-candidate.js +160 -0
- package/dist/negotiation/action-candidate.js.map +1 -0
- package/dist/negotiation/condition/evaluator.d.ts +36 -0
- package/dist/negotiation/condition/evaluator.js +123 -0
- package/dist/negotiation/condition/evaluator.js.map +1 -0
- package/dist/negotiation/context-map/index.d.ts +23 -0
- package/dist/negotiation/context-map/index.js +22 -0
- package/dist/negotiation/context-map/index.js.map +1 -0
- package/dist/negotiation/context-map/store.d.ts +51 -0
- package/dist/negotiation/context-map/store.js +186 -0
- package/dist/negotiation/context-map/store.js.map +1 -0
- package/dist/negotiation/context-map/types.d.ts +29 -0
- package/dist/negotiation/context-map/types.js +57 -0
- package/dist/negotiation/context-map/types.js.map +1 -0
- package/dist/negotiation/domain/common.d.ts +95 -0
- package/dist/negotiation/domain/common.js +216 -0
- package/dist/negotiation/domain/common.js.map +1 -0
- package/dist/negotiation/domain/envelope.d.ts +55 -0
- package/dist/negotiation/domain/envelope.js +110 -0
- package/dist/negotiation/domain/envelope.js.map +1 -0
- package/dist/negotiation/domain/identifiers.d.ts +65 -0
- package/dist/negotiation/domain/identifiers.js +130 -0
- package/dist/negotiation/domain/identifiers.js.map +1 -0
- package/dist/negotiation/domain/objects.d.ts +149 -0
- package/dist/negotiation/domain/objects.js +335 -0
- package/dist/negotiation/domain/objects.js.map +1 -0
- package/dist/negotiation/idempotency/index.d.ts +26 -0
- package/dist/negotiation/idempotency/index.js +25 -0
- package/dist/negotiation/idempotency/index.js.map +1 -0
- package/dist/negotiation/idempotency/store.d.ts +52 -0
- package/dist/negotiation/idempotency/store.js +189 -0
- package/dist/negotiation/idempotency/store.js.map +1 -0
- package/dist/negotiation/idempotency/types.d.ts +102 -0
- package/dist/negotiation/idempotency/types.js +47 -0
- package/dist/negotiation/idempotency/types.js.map +1 -0
- package/dist/negotiation/jcs.d.ts +21 -0
- package/dist/negotiation/jcs.js +114 -0
- package/dist/negotiation/jcs.js.map +1 -0
- package/dist/negotiation/ledger/event.d.ts +142 -0
- package/dist/negotiation/ledger/event.js +206 -0
- package/dist/negotiation/ledger/event.js.map +1 -0
- package/dist/negotiation/ledger/index.d.ts +26 -0
- package/dist/negotiation/ledger/index.js +25 -0
- package/dist/negotiation/ledger/index.js.map +1 -0
- package/dist/negotiation/ledger/store.d.ts +97 -0
- package/dist/negotiation/ledger/store.js +338 -0
- package/dist/negotiation/ledger/store.js.map +1 -0
- package/dist/negotiation/prompt.d.ts +34 -0
- package/dist/negotiation/prompt.js +113 -0
- package/dist/negotiation/prompt.js.map +1 -0
- package/dist/negotiation/recovery/index.d.ts +26 -0
- package/dist/negotiation/recovery/index.js +24 -0
- package/dist/negotiation/recovery/index.js.map +1 -0
- package/dist/negotiation/recovery/outbound.d.ts +49 -0
- package/dist/negotiation/recovery/outbound.js +34 -0
- package/dist/negotiation/recovery/outbound.js.map +1 -0
- package/dist/negotiation/recovery/recover.d.ts +59 -0
- package/dist/negotiation/recovery/recover.js +486 -0
- package/dist/negotiation/recovery/recover.js.map +1 -0
- package/dist/negotiation/recovery/types.d.ts +85 -0
- package/dist/negotiation/recovery/types.js +17 -0
- package/dist/negotiation/recovery/types.js.map +1 -0
- package/dist/negotiation/state/phase.d.ts +70 -0
- package/dist/negotiation/state/phase.js +200 -0
- package/dist/negotiation/state/phase.js.map +1 -0
- package/dist/negotiation/types.d.ts +139 -0
- package/dist/negotiation/types.js +24 -0
- package/dist/negotiation/types.js.map +1 -0
- package/dist/net/safe-http.d.ts +54 -0
- package/dist/net/safe-http.js +116 -0
- package/dist/net/safe-http.js.map +1 -0
- package/dist/operator/controller.d.ts +181 -0
- package/dist/operator/controller.js +784 -0
- package/dist/operator/controller.js.map +1 -0
- package/dist/operator/runner.d.ts +128 -0
- package/dist/operator/runner.js +248 -0
- package/dist/operator/runner.js.map +1 -0
- package/dist/operator/store.d.ts +39 -0
- package/dist/operator/store.js +169 -0
- package/dist/operator/store.js.map +1 -0
- package/dist/operator/strategy.d.ts +54 -0
- package/dist/operator/strategy.js +249 -0
- package/dist/operator/strategy.js.map +1 -0
- package/dist/operator/tui.d.ts +27 -0
- package/dist/operator/tui.js +395 -0
- package/dist/operator/tui.js.map +1 -0
- package/dist/operator/types.d.ts +224 -0
- package/dist/operator/types.js +17 -0
- package/dist/operator/types.js.map +1 -0
- package/dist/product-buyer.d.ts +74 -0
- package/dist/product-buyer.js +161 -0
- package/dist/product-buyer.js.map +1 -0
- package/dist/product-cli.d.ts +56 -0
- package/dist/product-cli.js +175 -0
- package/dist/product-cli.js.map +1 -0
- package/dist/product-compat.d.ts +50 -0
- package/dist/product-compat.js +63 -0
- package/dist/product-compat.js.map +1 -0
- package/dist/product-init.d.ts +73 -0
- package/dist/product-init.js +203 -0
- package/dist/product-init.js.map +1 -0
- package/dist/product-publish.d.ts +85 -0
- package/dist/product-publish.js +216 -0
- package/dist/product-publish.js.map +1 -0
- package/dist/protocol/legacy-shopping-negotiation/adapter.d.ts +42 -0
- package/dist/protocol/legacy-shopping-negotiation/adapter.js +561 -0
- package/dist/protocol/legacy-shopping-negotiation/adapter.js.map +1 -0
- package/dist/protocol/legacy-shopping-negotiation/mapping.d.ts +78 -0
- package/dist/protocol/legacy-shopping-negotiation/mapping.js +321 -0
- package/dist/protocol/legacy-shopping-negotiation/mapping.js.map +1 -0
- package/dist/protocol/legacy-shopping-negotiation/money.d.ts +49 -0
- package/dist/protocol/legacy-shopping-negotiation/money.js +70 -0
- package/dist/protocol/legacy-shopping-negotiation/money.js.map +1 -0
- package/dist/protocol/legacy-shopping-negotiation/types.d.ts +107 -0
- package/dist/protocol/legacy-shopping-negotiation/types.js +34 -0
- package/dist/protocol/legacy-shopping-negotiation/types.js.map +1 -0
- package/dist/runtime/buyer-policy.d.ts +58 -0
- package/dist/runtime/buyer-policy.js +89 -0
- package/dist/runtime/buyer-policy.js.map +1 -0
- package/dist/runtime/fake-model.d.ts +77 -0
- package/dist/runtime/fake-model.js +307 -0
- package/dist/runtime/fake-model.js.map +1 -0
- package/dist/runtime/foreground.d.ts +56 -0
- package/dist/runtime/foreground.js +97 -0
- package/dist/runtime/foreground.js.map +1 -0
- package/dist/runtime/heartbeat.d.ts +36 -0
- package/dist/runtime/heartbeat.js +49 -0
- package/dist/runtime/heartbeat.js.map +1 -0
- package/dist/runtime/merchant-turn.d.ts +35 -0
- package/dist/runtime/merchant-turn.js +20 -0
- package/dist/runtime/merchant-turn.js.map +1 -0
- package/dist/runtime/model.d.ts +40 -0
- package/dist/runtime/model.js +86 -0
- package/dist/runtime/model.js.map +1 -0
- package/dist/runtime/negotiation-turn.d.ts +101 -0
- package/dist/runtime/negotiation-turn.js +317 -0
- package/dist/runtime/negotiation-turn.js.map +1 -0
- package/dist/runtime/tools.d.ts +64 -0
- package/dist/runtime/tools.js +236 -0
- package/dist/runtime/tools.js.map +1 -0
- package/dist/supervisor/init.d.ts +31 -0
- package/dist/supervisor/init.js +222 -0
- package/dist/supervisor/init.js.map +1 -0
- package/dist/supervisor/logs.d.ts +28 -0
- package/dist/supervisor/logs.js +101 -0
- package/dist/supervisor/logs.js.map +1 -0
- package/dist/supervisor/manage.d.ts +72 -0
- package/dist/supervisor/manage.js +419 -0
- package/dist/supervisor/manage.js.map +1 -0
- package/dist/supervisor/manifest.d.ts +69 -0
- package/dist/supervisor/manifest.js +209 -0
- package/dist/supervisor/manifest.js.map +1 -0
- package/dist/supervisor/stack-config.d.ts +79 -0
- package/dist/supervisor/stack-config.js +262 -0
- package/dist/supervisor/stack-config.js.map +1 -0
- package/dist/supervisor/wrapper.d.ts +17 -0
- package/dist/supervisor/wrapper.js +138 -0
- package/dist/supervisor/wrapper.js.map +1 -0
- package/dist/trust/identity/auth-verifier.d.ts +96 -0
- package/dist/trust/identity/auth-verifier.js +166 -0
- package/dist/trust/identity/auth-verifier.js.map +1 -0
- package/dist/trust/identity/identity-binding.d.ts +63 -0
- package/dist/trust/identity/identity-binding.js +59 -0
- package/dist/trust/identity/identity-binding.js.map +1 -0
- package/dist/trust/identity/index.d.ts +38 -0
- package/dist/trust/identity/index.js +31 -0
- package/dist/trust/identity/index.js.map +1 -0
- package/dist/trust/identity/jws.d.ts +64 -0
- package/dist/trust/identity/jws.js +178 -0
- package/dist/trust/identity/jws.js.map +1 -0
- package/dist/trust/identity/keys.d.ts +71 -0
- package/dist/trust/identity/keys.js +118 -0
- package/dist/trust/identity/keys.js.map +1 -0
- package/dist/trust/identity/message-signature.d.ts +105 -0
- package/dist/trust/identity/message-signature.js +297 -0
- package/dist/trust/identity/message-signature.js.map +1 -0
- package/dist/trust/identity/nonce.d.ts +45 -0
- package/dist/trust/identity/nonce.js +50 -0
- package/dist/trust/identity/nonce.js.map +1 -0
- package/dist/trust/identity/signature-base.d.ts +84 -0
- package/dist/trust/identity/signature-base.js +261 -0
- package/dist/trust/identity/signature-base.js.map +1 -0
- package/dist/trust/identity/trust-policy.d.ts +92 -0
- package/dist/trust/identity/trust-policy.js +95 -0
- package/dist/trust/identity/trust-policy.js.map +1 -0
- package/dist/trust/index.d.ts +21 -0
- package/dist/trust/index.js +22 -0
- package/dist/trust/index.js.map +1 -0
- package/dist/trust/records/evaluator.d.ts +76 -0
- package/dist/trust/records/evaluator.js +122 -0
- package/dist/trust/records/evaluator.js.map +1 -0
- package/dist/trust/records/index.d.ts +28 -0
- package/dist/trust/records/index.js +26 -0
- package/dist/trust/records/index.js.map +1 -0
- package/dist/trust/records/store.d.ts +75 -0
- package/dist/trust/records/store.js +339 -0
- package/dist/trust/records/store.js.map +1 -0
- package/dist/trust/records/types.d.ts +159 -0
- package/dist/trust/records/types.js +40 -0
- package/dist/trust/records/types.js.map +1 -0
- package/dist/tui/banner.d.ts +46 -0
- package/dist/tui/banner.js +99 -0
- package/dist/tui/banner.js.map +1 -0
- package/dist/tui/styles.d.ts +70 -0
- package/dist/tui/styles.js +197 -0
- package/dist/tui/styles.js.map +1 -0
- package/dist/tui/theme.d.ts +63 -0
- package/dist/tui/theme.js +136 -0
- package/dist/tui/theme.js.map +1 -0
- package/examples/profiles/buyer.deepseek.yaml +34 -0
- package/examples/profiles/buyer.fake.yaml +36 -0
- package/examples/profiles/buyer.local.yaml +40 -0
- package/examples/profiles/merchant.deepseek.yaml +32 -0
- package/examples/profiles/merchant.fake.yaml +31 -0
- package/examples/profiles/merchant.local.yaml +34 -0
- package/package.json +55 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/** signature-base 构造/解析失败。 */
|
|
17
|
+
export class SignatureBaseError extends Error {
|
|
18
|
+
code;
|
|
19
|
+
constructor(code, message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = "SignatureBaseError";
|
|
22
|
+
this.code = code;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** 取单值 HTTP 字段;多值时按 RFC 9421 §2.1 用 ", " 连接。 */
|
|
26
|
+
export function headerValue(headers, name) {
|
|
27
|
+
const value = headers[name.toLowerCase()];
|
|
28
|
+
if (value === undefined || value === null)
|
|
29
|
+
return undefined;
|
|
30
|
+
if (Array.isArray(value))
|
|
31
|
+
return value.map((v) => v.trim()).join(", ");
|
|
32
|
+
const trimmed = value.trim();
|
|
33
|
+
return trimmed.length === 0 ? undefined : trimmed;
|
|
34
|
+
}
|
|
35
|
+
/** 引号字符串转义(RFC 9421 字典字符串值)。 */
|
|
36
|
+
function escapeString(value) {
|
|
37
|
+
return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
38
|
+
}
|
|
39
|
+
/** 引号字符串反转义。 */
|
|
40
|
+
function unescapeString(value) {
|
|
41
|
+
return value.replace(/\\(["\\])/g, "$1");
|
|
42
|
+
}
|
|
43
|
+
/** 参数字典序列化:RFC 9421 §2.2 固定顺序 created, expires, nonce, keyid, alg, tag。 */
|
|
44
|
+
export function serializeParams(params) {
|
|
45
|
+
let out = "";
|
|
46
|
+
if (params.created !== undefined)
|
|
47
|
+
out += `;created=${params.created}`;
|
|
48
|
+
if (params.expires !== undefined)
|
|
49
|
+
out += `;expires=${params.expires}`;
|
|
50
|
+
if (params.nonce !== undefined)
|
|
51
|
+
out += `;nonce="${escapeString(params.nonce)}"`;
|
|
52
|
+
if (params.keyid !== undefined)
|
|
53
|
+
out += `;keyid="${escapeString(params.keyid)}"`;
|
|
54
|
+
if (params.algorithm !== undefined)
|
|
55
|
+
out += `;alg="${escapeString(params.algorithm)}"`;
|
|
56
|
+
if (params.tag !== undefined)
|
|
57
|
+
out += `;tag="${escapeString(params.tag)}"`;
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
/** 格式化一条 Signature-Input 项:`label=(comps)params`。 */
|
|
61
|
+
export function formatSignatureInput(label, components, params) {
|
|
62
|
+
const comps = components.map((c) => `"${c}"`).join(" ");
|
|
63
|
+
return `${label}=(${comps})${serializeParams(params)}`;
|
|
64
|
+
}
|
|
65
|
+
/** 解析单条 Signature-Input 项。 */
|
|
66
|
+
function parseEntry(entry) {
|
|
67
|
+
const eq = entry.indexOf("=");
|
|
68
|
+
if (eq <= 0) {
|
|
69
|
+
throw new SignatureBaseError("malformed", `signature-input entry has no label: "${entry}"`);
|
|
70
|
+
}
|
|
71
|
+
const label = entry.slice(0, eq).trim();
|
|
72
|
+
const rest = entry.slice(eq + 1).trim();
|
|
73
|
+
if (!rest.startsWith("(")) {
|
|
74
|
+
throw new SignatureBaseError("malformed", `signature-input entry "${label}" has no component list`);
|
|
75
|
+
}
|
|
76
|
+
let depth = 0;
|
|
77
|
+
let close = -1;
|
|
78
|
+
for (let i = 0; i < rest.length; i++) {
|
|
79
|
+
const ch = rest[i];
|
|
80
|
+
if (ch === "(")
|
|
81
|
+
depth += 1;
|
|
82
|
+
else if (ch === ")") {
|
|
83
|
+
depth -= 1;
|
|
84
|
+
if (depth === 0) {
|
|
85
|
+
close = i;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (close < 0) {
|
|
91
|
+
throw new SignatureBaseError("malformed", `signature-input entry "${label}" has unterminated component list`);
|
|
92
|
+
}
|
|
93
|
+
const inner = rest.slice(1, close);
|
|
94
|
+
const components = inner
|
|
95
|
+
.split(/\s+/)
|
|
96
|
+
.filter((s) => s.length > 0)
|
|
97
|
+
.map((s) => {
|
|
98
|
+
const m = /^"((?:[^"\\]|\\.)*)"$/.exec(s);
|
|
99
|
+
if (m === null) {
|
|
100
|
+
throw new SignatureBaseError("malformed", `signature-input component "${s}" is not a quoted string`);
|
|
101
|
+
}
|
|
102
|
+
return unescapeString(m[1] ?? "");
|
|
103
|
+
});
|
|
104
|
+
const paramsText = rest.slice(close + 1);
|
|
105
|
+
const params = {};
|
|
106
|
+
for (const param of paramsText.split(";")) {
|
|
107
|
+
const trimmed = param.trim();
|
|
108
|
+
if (trimmed.length === 0)
|
|
109
|
+
continue;
|
|
110
|
+
const kv = trimmed.indexOf("=");
|
|
111
|
+
if (kv < 0) {
|
|
112
|
+
throw new SignatureBaseError("malformed", `signature-input parameter "${trimmed}" has no value`);
|
|
113
|
+
}
|
|
114
|
+
const key = trimmed.slice(0, kv).trim();
|
|
115
|
+
const rawValue = trimmed.slice(kv + 1).trim();
|
|
116
|
+
switch (key) {
|
|
117
|
+
case "created":
|
|
118
|
+
case "expires": {
|
|
119
|
+
const n = Number(rawValue);
|
|
120
|
+
if (!Number.isInteger(n) || n < 0) {
|
|
121
|
+
throw new SignatureBaseError("malformed", `signature-input ${key} must be a non-negative integer`);
|
|
122
|
+
}
|
|
123
|
+
params[key] = n;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case "nonce":
|
|
127
|
+
case "keyid":
|
|
128
|
+
case "alg":
|
|
129
|
+
case "tag": {
|
|
130
|
+
const m = /^"((?:[^"\\]|\\.)*)"$/.exec(rawValue);
|
|
131
|
+
if (m === null) {
|
|
132
|
+
throw new SignatureBaseError("malformed", `signature-input ${key} must be a quoted string`);
|
|
133
|
+
}
|
|
134
|
+
const value = unescapeString(m[1] ?? "");
|
|
135
|
+
// Signature-Input 里是 alg;内部参数名是 algorithm(与 RFC 术语区分)。
|
|
136
|
+
if (key === "alg")
|
|
137
|
+
params.algorithm = value;
|
|
138
|
+
else
|
|
139
|
+
params[key] = value;
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
default:
|
|
143
|
+
// 未知参数 RFC 9421 要求拒绝(fail-closed):签名者/验证者对参数理解不同。
|
|
144
|
+
throw new SignatureBaseError("malformed", `signature-input has unsupported parameter "${key}"`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return { label, components, params };
|
|
148
|
+
}
|
|
149
|
+
/** 按顶层逗号切分(不在括号/引号内的逗号),支持一条头含多个签名。 */
|
|
150
|
+
function splitTopLevel(value) {
|
|
151
|
+
const parts = [];
|
|
152
|
+
let depth = 0;
|
|
153
|
+
let inQuote = false;
|
|
154
|
+
let start = 0;
|
|
155
|
+
for (let i = 0; i < value.length; i++) {
|
|
156
|
+
const ch = value[i];
|
|
157
|
+
if (ch === '"' && value[i - 1] !== "\\")
|
|
158
|
+
inQuote = !inQuote;
|
|
159
|
+
if (inQuote)
|
|
160
|
+
continue;
|
|
161
|
+
if (ch === "(")
|
|
162
|
+
depth += 1;
|
|
163
|
+
else if (ch === ")")
|
|
164
|
+
depth -= 1;
|
|
165
|
+
else if (ch === "," && depth === 0) {
|
|
166
|
+
parts.push(value.slice(start, i));
|
|
167
|
+
start = i + 1;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
parts.push(value.slice(start));
|
|
171
|
+
return parts;
|
|
172
|
+
}
|
|
173
|
+
/** 解析 Signature-Input 头,返回全部签名项(可能多个)。 */
|
|
174
|
+
export function parseSignatureInput(value) {
|
|
175
|
+
const entries = [];
|
|
176
|
+
for (const part of splitTopLevel(value)) {
|
|
177
|
+
const trimmed = part.trim();
|
|
178
|
+
if (trimmed.length === 0)
|
|
179
|
+
continue;
|
|
180
|
+
entries.push(parseEntry(trimmed));
|
|
181
|
+
}
|
|
182
|
+
return entries;
|
|
183
|
+
}
|
|
184
|
+
/** 解析 Signature 头:`label=:base64:` 序列。 */
|
|
185
|
+
export function parseSignatureHeader(value) {
|
|
186
|
+
const out = {};
|
|
187
|
+
for (const part of value.trim().split(/\s+/)) {
|
|
188
|
+
const m = /^([A-Za-z0-9_!#$%&'*+\-.^`|~]+)=:([^:]*):$/.exec(part);
|
|
189
|
+
if (m === null)
|
|
190
|
+
continue;
|
|
191
|
+
out[m[1] ?? ""] = Buffer.from(m[2] ?? "", "base64");
|
|
192
|
+
}
|
|
193
|
+
return out;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* 构造 signature base(RFC 9421 §2.1)。
|
|
197
|
+
* 每个覆盖组件渲染一行(`"name": value`),最后追加 `"@signature-params"` 行。
|
|
198
|
+
* 覆盖的字段缺失时抛 SignatureBaseError(fail-closed:不能对不存在的组件签名)。
|
|
199
|
+
*/
|
|
200
|
+
export function buildSignatureBase(input) {
|
|
201
|
+
const { method, targetUri, authority, headers, components, params } = input;
|
|
202
|
+
let base = "";
|
|
203
|
+
for (const component of components) {
|
|
204
|
+
switch (component) {
|
|
205
|
+
case "@method":
|
|
206
|
+
base += `"@method": ${method}\n`;
|
|
207
|
+
break;
|
|
208
|
+
case "@target-uri":
|
|
209
|
+
base += `"@target-uri": ${targetUri}\n`;
|
|
210
|
+
break;
|
|
211
|
+
case "@authority":
|
|
212
|
+
base += `"@authority": ${authority}\n`;
|
|
213
|
+
break;
|
|
214
|
+
case "@scheme": {
|
|
215
|
+
let scheme;
|
|
216
|
+
try {
|
|
217
|
+
scheme = new URL(targetUri).protocol.replace(/:$/, "");
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
throw new SignatureBaseError("malformed", `@scheme requires a parseable target URI`);
|
|
221
|
+
}
|
|
222
|
+
base += `"@scheme": ${scheme}\n`;
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
case "@path": {
|
|
226
|
+
let path;
|
|
227
|
+
try {
|
|
228
|
+
path = new URL(targetUri).pathname;
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
throw new SignatureBaseError("malformed", `@path requires a parseable target URI`);
|
|
232
|
+
}
|
|
233
|
+
base += `"@path": ${path}\n`;
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case "@query": {
|
|
237
|
+
let query;
|
|
238
|
+
try {
|
|
239
|
+
query = new URL(targetUri).search.replace(/^\?/, "");
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
throw new SignatureBaseError("malformed", `@query requires a parseable target URI`);
|
|
243
|
+
}
|
|
244
|
+
base += `"@query": ${query}\n`;
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
default: {
|
|
248
|
+
const value = headerValue(headers, component);
|
|
249
|
+
if (value === undefined) {
|
|
250
|
+
throw new SignatureBaseError("missing_component", `covered component "${component}" is not present in the request`);
|
|
251
|
+
}
|
|
252
|
+
base += `"${component}": ${value}\n`;
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
const comps = components.map((c) => `"${c}"`).join(" ");
|
|
258
|
+
base += `"@signature-params": (${comps})${serializeParams(params)}\n`;
|
|
259
|
+
return base;
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=signature-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature-base.js","sourceRoot":"","sources":["../../../src/trust/identity/signature-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Trust Levels 与 TrustPolicy(基线 §28 / §31)。
|
|
18
|
+
*
|
|
19
|
+
* Trust level 只控制协议/自动化风险,不等于产品或 Merchant 推荐等级(§28)。
|
|
20
|
+
* 本策略表把「是否强制某类身份证据」按对端 trust level 分级:
|
|
21
|
+
*
|
|
22
|
+
* | level | 含义 | 强制 HTTP Message Signature | 强制 Agent Card JWS | 强制 nonce |
|
|
23
|
+
* |-------|-------------------------|-----------------------------|----------------------|------------|
|
|
24
|
+
* | T0 | UNKNOWN | 否(未认证可匿名访问) | 否 | 否 |
|
|
25
|
+
* | T1 | DISCOVERED | 是 | 否 | 否 |
|
|
26
|
+
* | T2 | AUTHENTICATED | 是 | 是 | 否 |
|
|
27
|
+
* | T3 | VERIFIED_RELATIONSHIP | 是 | 是 | 是 |
|
|
28
|
+
*
|
|
29
|
+
* §31(digest ≠ authentication):签名/验签与完整性是两件事。HTTP Message
|
|
30
|
+
* Signature 提供认证与防篡改绑定;Agent Card JWS 提供「卡片确实是该 key 所属方
|
|
31
|
+
* 发布的」证据。是否强制由部署策略(本表)决定,不由算法本身决定。
|
|
32
|
+
*/
|
|
33
|
+
export type TrustLevel = "T0" | "T1" | "T2" | "T3";
|
|
34
|
+
export declare const TRUST_LEVELS: readonly TrustLevel[];
|
|
35
|
+
export declare function isTrustLevel(value: unknown): value is TrustLevel;
|
|
36
|
+
/** T0=0 … T3=3。 */
|
|
37
|
+
export declare function trustLevelRank(level: TrustLevel): number;
|
|
38
|
+
/**
|
|
39
|
+
* 取两个 trust level 中更保守(更低)的一个。
|
|
40
|
+
* WP1 集成:签名密钥档案的 trustLevel 优先,但 record 推导值对它是保守校验——
|
|
41
|
+
* 冲突时绝不向更乐观的一侧取齐(§28 trust level 只控制协议/自动化风险)。
|
|
42
|
+
*/
|
|
43
|
+
export declare function conservativeLevel(a: TrustLevel, b: TrustLevel): TrustLevel;
|
|
44
|
+
/**
|
|
45
|
+
* 信任策略:按对端 trust level 决定对请求身份证据的强制程度。
|
|
46
|
+
* 全部为纯查询接口,便于测试矩阵。
|
|
47
|
+
*/
|
|
48
|
+
export interface TrustPolicy {
|
|
49
|
+
/** 该 level 是否强制请求携带 HTTP Message Signature。 */
|
|
50
|
+
requireHttpSignature(level: TrustLevel): boolean;
|
|
51
|
+
/** 该 level 是否强制请求/卡片携带可验证的 Agent Card JWS。 */
|
|
52
|
+
requireCardJws(level: TrustLevel): boolean;
|
|
53
|
+
/** 该 level 是否强制签名携带 nonce(防重放)。 */
|
|
54
|
+
requireNonce(level: TrustLevel): boolean;
|
|
55
|
+
/** created/expires 时钟偏差容忍(秒)。 */
|
|
56
|
+
maxClockSkewSeconds(level: TrustLevel): number;
|
|
57
|
+
/** 无 expires 时签名允许的最大年龄(秒)。 */
|
|
58
|
+
maxSignatureAgeSeconds(level: TrustLevel): number;
|
|
59
|
+
}
|
|
60
|
+
/** 默认部署策略(上面的矩阵)。可注入自定义策略。 */
|
|
61
|
+
export declare const DEFAULT_TRUST_POLICY: TrustPolicy;
|
|
62
|
+
export interface PolicyEvaluationInput {
|
|
63
|
+
level: TrustLevel;
|
|
64
|
+
hasHttpSignature: boolean;
|
|
65
|
+
hasCardJws: boolean;
|
|
66
|
+
/** 卡片 JWS 是否验证通过(未提供时 undefined)。 */
|
|
67
|
+
cardJwsValid?: boolean;
|
|
68
|
+
hasNonce?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* WP1:对端 TrustRecord 评估推导出的信任信号(可选)。签名密钥档案的
|
|
71
|
+
* trustLevel(`level`)优先;两者同时提供且冲突时取更保守者
|
|
72
|
+
* (conservativeLevel)。`record.rejected === true` 时直接拒绝(fail-closed,
|
|
73
|
+
* §4.6)。
|
|
74
|
+
*/
|
|
75
|
+
record?: {
|
|
76
|
+
trustLevel: TrustLevel;
|
|
77
|
+
rejected?: boolean;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export interface PolicyEvaluationResult {
|
|
81
|
+
allowed: boolean;
|
|
82
|
+
/** 未通过时的协议错误码。 */
|
|
83
|
+
protocolCode?: "authentication_required" | "authorization_failed";
|
|
84
|
+
reason?: string;
|
|
85
|
+
/** 缺失的证据类别(diagnostic)。 */
|
|
86
|
+
missing: string[];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 按策略表评估一次请求的身份证据。这是 TrustPolicy 矩阵的单一入口:
|
|
90
|
+
* 签名是否强制、JWS 是否强制、nonce 是否强制都在这里判定。
|
|
91
|
+
*/
|
|
92
|
+
export declare function evaluatePolicy(policy: TrustPolicy, input: PolicyEvaluationInput): PolicyEvaluationResult;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
export const TRUST_LEVELS = ["T0", "T1", "T2", "T3"];
|
|
17
|
+
export function isTrustLevel(value) {
|
|
18
|
+
return typeof value === "string" && TRUST_LEVELS.includes(value);
|
|
19
|
+
}
|
|
20
|
+
/** T0=0 … T3=3。 */
|
|
21
|
+
export function trustLevelRank(level) {
|
|
22
|
+
return TRUST_LEVELS.indexOf(level);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 取两个 trust level 中更保守(更低)的一个。
|
|
26
|
+
* WP1 集成:签名密钥档案的 trustLevel 优先,但 record 推导值对它是保守校验——
|
|
27
|
+
* 冲突时绝不向更乐观的一侧取齐(§28 trust level 只控制协议/自动化风险)。
|
|
28
|
+
*/
|
|
29
|
+
export function conservativeLevel(a, b) {
|
|
30
|
+
return trustLevelRank(a) <= trustLevelRank(b) ? a : b;
|
|
31
|
+
}
|
|
32
|
+
/** 默认部署策略(上面的矩阵)。可注入自定义策略。 */
|
|
33
|
+
export const DEFAULT_TRUST_POLICY = {
|
|
34
|
+
requireHttpSignature: (level) => level !== "T0",
|
|
35
|
+
requireCardJws: (level) => level === "T2" || level === "T3",
|
|
36
|
+
requireNonce: (level) => level === "T3",
|
|
37
|
+
maxClockSkewSeconds: () => 300,
|
|
38
|
+
maxSignatureAgeSeconds: () => 900,
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* 按策略表评估一次请求的身份证据。这是 TrustPolicy 矩阵的单一入口:
|
|
42
|
+
* 签名是否强制、JWS 是否强制、nonce 是否强制都在这里判定。
|
|
43
|
+
*/
|
|
44
|
+
export function evaluatePolicy(policy, input) {
|
|
45
|
+
if (input.record?.rejected === true) {
|
|
46
|
+
return {
|
|
47
|
+
allowed: false,
|
|
48
|
+
protocolCode: "authorization_failed",
|
|
49
|
+
reason: "TrustRecord evaluation rejected counterparty (fail-closed)",
|
|
50
|
+
missing: [],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// 有效 level:密钥档案 level 优先,record 推导值做保守校验(冲突取更保守者)。
|
|
54
|
+
const level = input.record === undefined
|
|
55
|
+
? input.level
|
|
56
|
+
: conservativeLevel(input.level, input.record.trustLevel);
|
|
57
|
+
const missing = [];
|
|
58
|
+
if (policy.requireHttpSignature(level) && !input.hasHttpSignature) {
|
|
59
|
+
return {
|
|
60
|
+
allowed: false,
|
|
61
|
+
protocolCode: "authentication_required",
|
|
62
|
+
reason: `HTTP Message Signature required at ${level}`,
|
|
63
|
+
missing: ["http-signature"],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (policy.requireCardJws(level)) {
|
|
67
|
+
if (!input.hasCardJws) {
|
|
68
|
+
return {
|
|
69
|
+
allowed: false,
|
|
70
|
+
protocolCode: "authentication_required",
|
|
71
|
+
reason: `Agent Card JWS required at ${level}`,
|
|
72
|
+
missing: ["card-jws"],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (input.cardJwsValid === false) {
|
|
76
|
+
return {
|
|
77
|
+
allowed: false,
|
|
78
|
+
protocolCode: "authorization_failed",
|
|
79
|
+
reason: `Agent Card JWS verification failed at ${level}`,
|
|
80
|
+
missing: [],
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (policy.requireNonce(level) && input.hasHttpSignature && input.hasNonce !== true) {
|
|
85
|
+
// hasNonce 缺省/未知按缺失处理(fail-closed):T3 的 nonce 强制不容模糊。
|
|
86
|
+
return {
|
|
87
|
+
allowed: false,
|
|
88
|
+
protocolCode: "authorization_failed",
|
|
89
|
+
reason: `signature nonce required at ${level}`,
|
|
90
|
+
missing: ["nonce"],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return { allowed: true, missing };
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=trust-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust-policy.js","sourceRoot":"","sources":["../../../src/trust/identity/trust-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* trust — 信任层(基线 §27-§28 / §31)。WP5 落地 identity 子层;WP1 落地
|
|
18
|
+
* records 子层(对端信任记录:事实观察 + 评估 + 持久化)。
|
|
19
|
+
*/
|
|
20
|
+
export * from "./identity/index.js";
|
|
21
|
+
export * from "./records/index.js";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* trust — 信任层(基线 §27-§28 / §31)。WP5 落地 identity 子层;WP1 落地
|
|
18
|
+
* records 子层(对端信任记录:事实观察 + 评估 + 持久化)。
|
|
19
|
+
*/
|
|
20
|
+
export * from "./identity/index.js";
|
|
21
|
+
export * from "./records/index.js";
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/trust/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* trust/records — 评估器(从事实观察推导 trust_level 建议值,基线 §27 / §28)。
|
|
18
|
+
*
|
|
19
|
+
* 评估规则确定、可测、无模型参与:
|
|
20
|
+
* - 初始 T0;
|
|
21
|
+
* - 成功交换 ≥ successToT1 → T1(成功发现/交互);
|
|
22
|
+
* - 连续验签成功 ≥ consecutiveVerifiedToT2 → T2(验签身份连续有效);
|
|
23
|
+
* - 对端在 establishedRelationships(部署配置)→ T3;
|
|
24
|
+
* - signature_failure / replay 超阈值,或存在 third_party_adjudicated 争议
|
|
25
|
+
* → 拒绝(rejected),level 置 T0(fail-closed,§4.6);
|
|
26
|
+
* - 未解决争议保守封顶:mutually_acknowledged → 封顶 T1;local_asserted → 封顶 T2。
|
|
27
|
+
*
|
|
28
|
+
* 维度分离(§27/§28):trust level 只控制协议/自动化风险。dispute 是 reputation
|
|
29
|
+
* 维度 —— 评估器只对已知事实做保守封顶/拒绝,不把本地单方标记伪装成全球事实,
|
|
30
|
+
* 也不让 reputation 直接写进协议 level。reputation 以 ReputationSignal 透传,
|
|
31
|
+
* 无数据时 Ranker 侧拿到显式 unknown(绝不 0.5)。
|
|
32
|
+
*/
|
|
33
|
+
import { type TrustLevel } from "../identity/trust-policy.js";
|
|
34
|
+
import type { CounterpartyTrustRecord, ReputationSignal, ReputationSource, TrustRecordFacts } from "./types.js";
|
|
35
|
+
export interface TrustEvaluatorConfig {
|
|
36
|
+
/** 成功交换 ≥ 此值 → T1(成功发现/交互)。默认 1。 */
|
|
37
|
+
successToT1: number;
|
|
38
|
+
/** 连续验签成功 ≥ 此值 → T2(验签身份连续有效)。默认 3。 */
|
|
39
|
+
consecutiveVerifiedToT2: number;
|
|
40
|
+
/** signature_failure ≥ 此值 → 拒绝。默认 3。 */
|
|
41
|
+
signatureFailureRejectThreshold: number;
|
|
42
|
+
/** replay ≥ 此值 → 拒绝。默认 2。 */
|
|
43
|
+
replayRejectThreshold: number;
|
|
44
|
+
}
|
|
45
|
+
export declare const DEFAULT_TRUST_EVALUATOR_CONFIG: TrustEvaluatorConfig;
|
|
46
|
+
export type EvaluationRule = "initial_t0" | "successful_exchange_t1" | "signature_continuity_t2" | "established_relationship_t3" | "rejected_signature_failures" | "rejected_replay" | "rejected_adjudicated_dispute" | "capped_mutual_dispute" | "capped_local_dispute";
|
|
47
|
+
export interface EvaluationResult {
|
|
48
|
+
/** 建议 trust level(T0-T3)。 */
|
|
49
|
+
level: TrustLevel;
|
|
50
|
+
/** 拒绝建议(超硬阈值 / 已裁决争议):调用方应拒绝自动化交互。 */
|
|
51
|
+
rejected: boolean;
|
|
52
|
+
reason?: string;
|
|
53
|
+
/** 生效的评估规则(升级路径 / 拒绝 / 封顶,diagnostic)。 */
|
|
54
|
+
applied: EvaluationRule[];
|
|
55
|
+
/** §27 Commercial Reputation:无数据必须是显式 unknown,绝不返回 0.5。 */
|
|
56
|
+
reputation: ReputationSignal;
|
|
57
|
+
}
|
|
58
|
+
export interface EvaluateOptions {
|
|
59
|
+
config?: TrustEvaluatorConfig;
|
|
60
|
+
/** 已建立关系标记(部署配置):在此集合中的对端 → T3。 */
|
|
61
|
+
establishedRelationships?: ReadonlySet<string>;
|
|
62
|
+
/** Reputation 来源;缺省恒返回显式 unknown。 */
|
|
63
|
+
reputation?: ReputationSource;
|
|
64
|
+
}
|
|
65
|
+
/** 无 reputation 数据的默认来源:恒返回显式 unknown(§27:绝不 0.5)。 */
|
|
66
|
+
export declare const NO_REPUTATION: ReputationSource;
|
|
67
|
+
/** 把 record 转成 evaluatePolicy 的 record 输入(WP1 集成,见 trust-policy.ts)。 */
|
|
68
|
+
export declare function recordPolicyInput(record: CounterpartyTrustRecord): {
|
|
69
|
+
trustLevel: TrustLevel;
|
|
70
|
+
rejected: boolean;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* 从事实推导 trust_level 建议值(纯函数,无模型参与)。输入是 record 的事实面,
|
|
74
|
+
* 结论字段(trust_level / rejected / evaluated_at)不参与推导。
|
|
75
|
+
*/
|
|
76
|
+
export declare function evaluateTrustRecord(record: TrustRecordFacts, options?: EvaluateOptions): EvaluationResult;
|