@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,130 @@
|
|
|
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
|
+
* KNP/1.0 Identifier 模型(子规范 §6,基线 §9)。
|
|
18
|
+
*
|
|
19
|
+
* 所有 identifier 对对手方 opaque(§6)。生成器产出 `<前缀>_<uuidv7>`:
|
|
20
|
+
* 前缀便于人读日志(neg_/ex_/msg_/off_/agr_),uuidv7 保证跨重启稳定、
|
|
21
|
+
* 碰撞抵抗且按创建时间可排序(§6 SHOULD)。
|
|
22
|
+
*
|
|
23
|
+
* 校验器只做 opaque 字符串检查——协议不强制前缀,但 MUST 非空、无前后
|
|
24
|
+
* 空白、无控制字符、长度受限。A2A `contextId` / `taskId` 同样是 opaque
|
|
25
|
+
* 字符串(§6.6/§6.7),复用同一规则。
|
|
26
|
+
*/
|
|
27
|
+
import { randomBytes } from "node:crypto";
|
|
28
|
+
import { NegotiationValidationError, requireNonEmptyString, requireObject, schemaError, } from "./common.js";
|
|
29
|
+
export const IDENTIFIER_PREFIX = {
|
|
30
|
+
negotiation: "neg",
|
|
31
|
+
exchange: "ex",
|
|
32
|
+
message: "msg",
|
|
33
|
+
offer: "off",
|
|
34
|
+
agreement: "agr",
|
|
35
|
+
// v0.7.0 KTH(KTH rev0.3 §5/§6)
|
|
36
|
+
handoff_candidate: "hcan",
|
|
37
|
+
handoff: "hnd",
|
|
38
|
+
};
|
|
39
|
+
const MAX_IDENTIFIER_LENGTH = 256;
|
|
40
|
+
let lastMs = -1;
|
|
41
|
+
let seq = 0;
|
|
42
|
+
/**
|
|
43
|
+
* UUIDv7:48 位毫秒时间戳 + version(7)/variant(10) 位 + 随机尾(§6 建议可排序)。
|
|
44
|
+
* rand_a 作 12 位每毫秒计数器,保证同毫秒内也单调不减(时钟回拨时锚定 lastMs)。
|
|
45
|
+
*/
|
|
46
|
+
export function uuidv7() {
|
|
47
|
+
const bytes = randomBytes(16);
|
|
48
|
+
let ms = Date.now();
|
|
49
|
+
if (ms <= lastMs) {
|
|
50
|
+
ms = lastMs;
|
|
51
|
+
seq = (seq + 1) & 0xfff;
|
|
52
|
+
if (seq === 0)
|
|
53
|
+
ms = lastMs + 1;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
seq = 0;
|
|
57
|
+
}
|
|
58
|
+
lastMs = ms;
|
|
59
|
+
bytes[0] = Math.floor(ms / 0x10000000000) & 0xff;
|
|
60
|
+
bytes[1] = Math.floor(ms / 0x100000000) & 0xff;
|
|
61
|
+
bytes[2] = Math.floor(ms / 0x1000000) & 0xff;
|
|
62
|
+
bytes[3] = Math.floor(ms / 0x10000) & 0xff;
|
|
63
|
+
bytes[4] = Math.floor(ms / 0x100) & 0xff;
|
|
64
|
+
bytes[5] = ms & 0xff;
|
|
65
|
+
bytes[6] = ((seq >> 8) & 0x0f) | 0x70;
|
|
66
|
+
bytes[7] = seq & 0xff;
|
|
67
|
+
bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80;
|
|
68
|
+
const hex = bytes.toString("hex");
|
|
69
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
70
|
+
}
|
|
71
|
+
/** 生成带前缀的 identifier(`neg_<uuidv7>` 等)。 */
|
|
72
|
+
export function generateId(kind) {
|
|
73
|
+
return `${IDENTIFIER_PREFIX[kind]}_${uuidv7()}`;
|
|
74
|
+
}
|
|
75
|
+
export const newNegotiationId = () => generateId("negotiation");
|
|
76
|
+
export const newExchangeId = () => generateId("exchange");
|
|
77
|
+
export const newMessageId = () => generateId("message");
|
|
78
|
+
export const newOfferId = () => generateId("offer");
|
|
79
|
+
export const newAgreementId = () => generateId("agreement");
|
|
80
|
+
/** opaque identifier 校验:非空、无前后空白、无控制字符、长度受限。 */
|
|
81
|
+
export function validateIdentifier(value, path) {
|
|
82
|
+
const s = requireNonEmptyString(value, path);
|
|
83
|
+
if (s.length > MAX_IDENTIFIER_LENGTH) {
|
|
84
|
+
throw schemaError(path, `${path} exceeds ${MAX_IDENTIFIER_LENGTH} characters`);
|
|
85
|
+
}
|
|
86
|
+
if (s !== s.trim()) {
|
|
87
|
+
throw schemaError(path, `${path} must not have surrounding whitespace`);
|
|
88
|
+
}
|
|
89
|
+
const hasControl = Array.from(s).some((ch) => ch.charCodeAt(0) < 0x20 || ch.charCodeAt(0) === 0x7f);
|
|
90
|
+
if (hasControl) {
|
|
91
|
+
throw schemaError(path, `${path} must not contain control characters`);
|
|
92
|
+
}
|
|
93
|
+
return s;
|
|
94
|
+
}
|
|
95
|
+
/** A2A `contextId`:对 Kiwi opaque(§6.6)。 */
|
|
96
|
+
export function validateContextId(value, path) {
|
|
97
|
+
return validateIdentifier(value, path);
|
|
98
|
+
}
|
|
99
|
+
/** A2A `taskId`:transport/session 状态,不得替代 negotiation_id(§6.7)。 */
|
|
100
|
+
export function validateTaskId(value, path) {
|
|
101
|
+
return validateIdentifier(value, path);
|
|
102
|
+
}
|
|
103
|
+
export function validateTargetRef(value, path) {
|
|
104
|
+
const obj = requireObject(value, path);
|
|
105
|
+
const ref = {
|
|
106
|
+
target_message_id: validateIdentifier(obj.target_message_id, `${path}/target_message_id`),
|
|
107
|
+
};
|
|
108
|
+
if (obj.target_offer_id !== undefined) {
|
|
109
|
+
ref.target_offer_id = validateIdentifier(obj.target_offer_id, `${path}/target_offer_id`);
|
|
110
|
+
}
|
|
111
|
+
return ref;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 用 Ledger 视图核对 TargetRef 的一致性。只有双方都能解析且发生矛盾时才抛
|
|
115
|
+
* state_conflict(§9.7);单侧未知不属于这里可判定的矛盾,留给引擎按
|
|
116
|
+
* offer_unknown 等状态错误处理。
|
|
117
|
+
*/
|
|
118
|
+
export function checkTargetRefAgreement(target, resolver) {
|
|
119
|
+
if (target.target_offer_id === undefined)
|
|
120
|
+
return;
|
|
121
|
+
const messageOffer = resolver.resolveMessageOffer(target.target_message_id);
|
|
122
|
+
if (messageOffer !== null && messageOffer !== target.target_offer_id) {
|
|
123
|
+
throw new NegotiationValidationError("state_conflict", `target_message_id ${target.target_message_id} resolves to offer ${messageOffer}, not ${target.target_offer_id}`, "target_message_id");
|
|
124
|
+
}
|
|
125
|
+
const offerMessage = resolver.resolveOfferMessage(target.target_offer_id);
|
|
126
|
+
if (offerMessage !== null && offerMessage !== target.target_message_id) {
|
|
127
|
+
throw new NegotiationValidationError("state_conflict", `target_offer_id ${target.target_offer_id} resolves to message ${offerMessage}, not ${target.target_message_id}`, "target_offer_id");
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=identifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifiers.js","sourceRoot":"","sources":["../../../src/negotiation/domain/identifiers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
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
|
+
import type { LineItem, TermSet } from "./common.js";
|
|
17
|
+
import type { TargetRef } from "./identifiers.js";
|
|
18
|
+
export type NegotiationActor = "buyer" | "merchant";
|
|
19
|
+
/** KNP/1.0 动作词表(子规范 §8.2)。 */
|
|
20
|
+
export declare const KNP_ACTIONS: readonly ["inquiry", "rfq", "offer", "counter_offer", "conditional_offer", "clarification", "clarification_response", "accept_nonbinding", "withdraw", "decline", "cancel"];
|
|
21
|
+
export type NegotiationAction = (typeof KNP_ACTIONS)[number];
|
|
22
|
+
export declare const SCOPE_VALUES: readonly ["offer", "negotiation"];
|
|
23
|
+
export type TargetScope = (typeof SCOPE_VALUES)[number];
|
|
24
|
+
export interface InquiryQuestion {
|
|
25
|
+
code: string;
|
|
26
|
+
}
|
|
27
|
+
export interface Inquiry {
|
|
28
|
+
type: "inquiry";
|
|
29
|
+
subject?: Record<string, unknown>;
|
|
30
|
+
questions?: InquiryQuestion[];
|
|
31
|
+
}
|
|
32
|
+
export declare function validateInquiry(value: unknown, path?: string): Inquiry;
|
|
33
|
+
export interface Rfq {
|
|
34
|
+
type: "rfq";
|
|
35
|
+
/** RFQ MUST 至少含一个 item(§10)。 */
|
|
36
|
+
items: LineItem[];
|
|
37
|
+
requested_terms?: Record<string, unknown>;
|
|
38
|
+
}
|
|
39
|
+
export declare function validateRfq(value: unknown, path?: string): Rfq;
|
|
40
|
+
export interface Offer {
|
|
41
|
+
type: "offer";
|
|
42
|
+
offer_id: string;
|
|
43
|
+
terms: TermSet;
|
|
44
|
+
}
|
|
45
|
+
export declare function validateOffer(value: unknown, path?: string): Offer;
|
|
46
|
+
export interface CounterOffer {
|
|
47
|
+
type: "counter_offer";
|
|
48
|
+
offer_id: string;
|
|
49
|
+
/** MUST 引用前一个 offer-like 对象(§6.4/§12)。 */
|
|
50
|
+
responding_to_offer_id: string;
|
|
51
|
+
proposed_terms: TermSet;
|
|
52
|
+
}
|
|
53
|
+
export declare function validateCounterOffer(value: unknown, path?: string): CounterOffer;
|
|
54
|
+
export declare const CONDITION_OPERATORS: readonly ["eq", "neq", "gt", "gte", "lt", "lte", "in"];
|
|
55
|
+
export type ConditionOperator = (typeof CONDITION_OPERATORS)[number];
|
|
56
|
+
/** §13.5 协议治理的 field 词表。 */
|
|
57
|
+
export declare const CONDITION_FIELDS: readonly ["aggregate.total_quantity", "fulfillment.batch_count", "service.warranty_months", "commercial.commitment_days"];
|
|
58
|
+
export interface ConditionLeaf {
|
|
59
|
+
field: string;
|
|
60
|
+
op: ConditionOperator;
|
|
61
|
+
value: number | string | (number | string)[];
|
|
62
|
+
}
|
|
63
|
+
export interface ConditionAll {
|
|
64
|
+
all: ConditionNode[];
|
|
65
|
+
}
|
|
66
|
+
export interface ConditionAny {
|
|
67
|
+
any: ConditionNode[];
|
|
68
|
+
}
|
|
69
|
+
export type ConditionNode = ConditionAll | ConditionAny | ConditionLeaf;
|
|
70
|
+
export interface ConditionRule {
|
|
71
|
+
when: ConditionNode;
|
|
72
|
+
then_terms: TermSet;
|
|
73
|
+
}
|
|
74
|
+
export interface ConditionalOffer {
|
|
75
|
+
type: "conditional_offer";
|
|
76
|
+
offer_id: string;
|
|
77
|
+
responding_to_offer_id?: string;
|
|
78
|
+
/** §13.1 示例允许空 base_terms;§12.2 要求可独立求值。 */
|
|
79
|
+
base_terms: TermSet;
|
|
80
|
+
conditions: ConditionRule[];
|
|
81
|
+
}
|
|
82
|
+
export declare function validateConditionalOffer(value: unknown, path?: string): ConditionalOffer;
|
|
83
|
+
export interface ClarificationQuestion {
|
|
84
|
+
field: string;
|
|
85
|
+
reason?: string;
|
|
86
|
+
}
|
|
87
|
+
export interface Clarification {
|
|
88
|
+
type: "clarification";
|
|
89
|
+
questions: ClarificationQuestion[];
|
|
90
|
+
}
|
|
91
|
+
export declare function validateClarification(value: unknown, path?: string): Clarification;
|
|
92
|
+
/**
|
|
93
|
+
* clarification_response:KNP/1.0 未冻结 payload 形状(§8.2/§14)。唯一约束是
|
|
94
|
+
* 携带 `type` 判别;对澄清消息的引用由 envelope `in_reply_to` 承担。
|
|
95
|
+
*/
|
|
96
|
+
export interface ClarificationResponse {
|
|
97
|
+
type: "clarification_response";
|
|
98
|
+
[key: string]: unknown;
|
|
99
|
+
}
|
|
100
|
+
export declare function validateClarificationResponse(value: unknown, path?: string): ClarificationResponse;
|
|
101
|
+
export interface AcceptNonbinding {
|
|
102
|
+
type: "accept_nonbinding";
|
|
103
|
+
offer_id: string;
|
|
104
|
+
terms_digest: string;
|
|
105
|
+
}
|
|
106
|
+
export declare function validateAcceptNonbinding(value: unknown, path?: string): AcceptNonbinding;
|
|
107
|
+
export interface Withdraw extends TargetRef {
|
|
108
|
+
type: "withdraw";
|
|
109
|
+
scope: TargetScope;
|
|
110
|
+
reason_code?: string;
|
|
111
|
+
}
|
|
112
|
+
export declare function validateWithdraw(value: unknown, path?: string): Withdraw;
|
|
113
|
+
export interface Decline extends TargetRef {
|
|
114
|
+
type: "decline";
|
|
115
|
+
scope: TargetScope;
|
|
116
|
+
reason_code?: string;
|
|
117
|
+
}
|
|
118
|
+
export declare function validateDecline(value: unknown, path?: string): Decline;
|
|
119
|
+
export interface Cancel {
|
|
120
|
+
type: "cancel";
|
|
121
|
+
}
|
|
122
|
+
export declare function validateCancel(value: unknown, path?: string): Cancel;
|
|
123
|
+
export interface AcceptedNonbindingAgreement {
|
|
124
|
+
type: "accepted_nonbinding_agreement";
|
|
125
|
+
agreement_id: string;
|
|
126
|
+
negotiation_id: string;
|
|
127
|
+
accepted_offer_id: string;
|
|
128
|
+
agreed_terms: TermSet;
|
|
129
|
+
terms_digest: string;
|
|
130
|
+
accepted_by: NegotiationActor[];
|
|
131
|
+
created_at: string;
|
|
132
|
+
binding_effect: "nonbinding";
|
|
133
|
+
/** KNP/1.0 不产生订单/库存/支付副作用:三个 flag 必须恒为 false(§16/§33)。 */
|
|
134
|
+
creates_order: false;
|
|
135
|
+
reserves_inventory: false;
|
|
136
|
+
authorizes_payment: false;
|
|
137
|
+
}
|
|
138
|
+
export declare function validateAcceptedNonbindingAgreement(value: unknown, path?: string): AcceptedNonbindingAgreement;
|
|
139
|
+
/**
|
|
140
|
+
* envelope.payload 的合法载荷。AcceptedNonbindingAgreement 不在其中:它是
|
|
141
|
+
* 响应/Task artifact(§8.2),不是 envelope action,由
|
|
142
|
+
* validateAcceptedNonbindingAgreement 单独校验。
|
|
143
|
+
*/
|
|
144
|
+
export type NegotiationPayload = Inquiry | Rfq | Offer | CounterOffer | ConditionalOffer | Clarification | ClarificationResponse | AcceptNonbinding | Withdraw | Decline | Cancel;
|
|
145
|
+
/**
|
|
146
|
+
* 按 envelope.action 校验 payload。每个 validator 强制 payload.type 与
|
|
147
|
+
* action 一致,因此 action/payload 类型不匹配会在这里被拒绝(fail-closed)。
|
|
148
|
+
*/
|
|
149
|
+
export declare function validatePayloadForAction(action: NegotiationAction, value: unknown, path?: string): NegotiationPayload;
|
|
@@ -0,0 +1,335 @@
|
|
|
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
|
+
* KNP/1.0 九类核心 Negotiation Objects(子规范 §9–§17,基线 §11)。
|
|
18
|
+
*
|
|
19
|
+
* 九类:Inquiry / RFQ / Offer / CounterOffer / ConditionalOffer /
|
|
20
|
+
* Clarification / Withdraw / Decline / AcceptedNonbindingAgreement。
|
|
21
|
+
* 另含协议动作对应的 payload:AcceptNonbinding(§15)、
|
|
22
|
+
* clarification_response(§8.2/§14)、Cancel(§17.4)。
|
|
23
|
+
*
|
|
24
|
+
* 每个 payload 都以 `type` 为判别字段,与 envelope.action 一一对应。
|
|
25
|
+
* 校验 fail-closed(基线 §4.6):结构、枚举、金额整数性、Agreement 副作用
|
|
26
|
+
* flag、Condition 字段 allowlist、Withdraw/Decline scope 语义等。
|
|
27
|
+
*/
|
|
28
|
+
import { NegotiationValidationError, requireArray, requireDigest, requireEnum, requireIsoTimestamp, requireNonEmptyString, requireObject, requireType, schemaError, validateLineItem, validateTermSet, } from "./common.js";
|
|
29
|
+
import { validateIdentifier } from "./identifiers.js";
|
|
30
|
+
/** KNP/1.0 动作词表(子规范 §8.2)。 */
|
|
31
|
+
export const KNP_ACTIONS = [
|
|
32
|
+
"inquiry",
|
|
33
|
+
"rfq",
|
|
34
|
+
"offer",
|
|
35
|
+
"counter_offer",
|
|
36
|
+
"conditional_offer",
|
|
37
|
+
"clarification",
|
|
38
|
+
"clarification_response",
|
|
39
|
+
"accept_nonbinding",
|
|
40
|
+
"withdraw",
|
|
41
|
+
"decline",
|
|
42
|
+
"cancel",
|
|
43
|
+
];
|
|
44
|
+
export const SCOPE_VALUES = ["offer", "negotiation"];
|
|
45
|
+
export function validateInquiry(value, path = "/payload") {
|
|
46
|
+
const obj = requireObject(value, path);
|
|
47
|
+
requireType(obj, "inquiry", path);
|
|
48
|
+
const inquiry = { type: "inquiry" };
|
|
49
|
+
if (obj.subject !== undefined) {
|
|
50
|
+
inquiry.subject = requireObject(obj.subject, `${path}/subject`);
|
|
51
|
+
}
|
|
52
|
+
if (obj.questions !== undefined) {
|
|
53
|
+
inquiry.questions = requireArray(obj.questions, `${path}/questions`).map((q, i) => {
|
|
54
|
+
const qobj = requireObject(q, `${path}/questions/${i}`);
|
|
55
|
+
return { code: requireNonEmptyString(qobj.code, `${path}/questions/${i}/code`) };
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return inquiry;
|
|
59
|
+
}
|
|
60
|
+
export function validateRfq(value, path = "/payload") {
|
|
61
|
+
const obj = requireObject(value, path);
|
|
62
|
+
requireType(obj, "rfq", path);
|
|
63
|
+
const items = requireArray(obj.items, `${path}/items`);
|
|
64
|
+
if (items.length === 0) {
|
|
65
|
+
throw schemaError(`${path}/items`, "rfq must contain at least one item");
|
|
66
|
+
}
|
|
67
|
+
const rfq = {
|
|
68
|
+
type: "rfq",
|
|
69
|
+
items: items.map((item, i) => validateLineItem(item, `${path}/items/${i}`)),
|
|
70
|
+
};
|
|
71
|
+
if (obj.requested_terms !== undefined) {
|
|
72
|
+
const requested = requireObject(obj.requested_terms, `${path}/requested_terms`);
|
|
73
|
+
if (requested.delivery_before !== undefined) {
|
|
74
|
+
requireIsoTimestamp(requested.delivery_before, `${path}/requested_terms/delivery_before`);
|
|
75
|
+
}
|
|
76
|
+
rfq.requested_terms = requested;
|
|
77
|
+
}
|
|
78
|
+
return rfq;
|
|
79
|
+
}
|
|
80
|
+
export function validateOffer(value, path = "/payload") {
|
|
81
|
+
const obj = requireObject(value, path);
|
|
82
|
+
requireType(obj, "offer", path);
|
|
83
|
+
return {
|
|
84
|
+
type: "offer",
|
|
85
|
+
offer_id: validateIdentifier(obj.offer_id, `${path}/offer_id`),
|
|
86
|
+
terms: validateTermSet(obj.terms, `${path}/terms`, { requireUnitPrice: true }),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export function validateCounterOffer(value, path = "/payload") {
|
|
90
|
+
const obj = requireObject(value, path);
|
|
91
|
+
requireType(obj, "counter_offer", path);
|
|
92
|
+
return {
|
|
93
|
+
type: "counter_offer",
|
|
94
|
+
offer_id: validateIdentifier(obj.offer_id, `${path}/offer_id`),
|
|
95
|
+
responding_to_offer_id: validateIdentifier(obj.responding_to_offer_id, `${path}/responding_to_offer_id`),
|
|
96
|
+
proposed_terms: validateTermSet(obj.proposed_terms, `${path}/proposed_terms`, {
|
|
97
|
+
requireUnitPrice: true,
|
|
98
|
+
}),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
// ConditionalOffer(§13)
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
export const CONDITION_OPERATORS = ["eq", "neq", "gt", "gte", "lt", "lte", "in"];
|
|
105
|
+
/** §13.5 协议治理的 field 词表。 */
|
|
106
|
+
export const CONDITION_FIELDS = [
|
|
107
|
+
"aggregate.total_quantity",
|
|
108
|
+
"fulfillment.batch_count",
|
|
109
|
+
"service.warranty_months",
|
|
110
|
+
"commercial.commitment_days",
|
|
111
|
+
];
|
|
112
|
+
function validateConditionValue(value, path, op) {
|
|
113
|
+
if (Array.isArray(value)) {
|
|
114
|
+
if (op !== "in") {
|
|
115
|
+
throw schemaError(path, `${path} array value is only valid for op=in`);
|
|
116
|
+
}
|
|
117
|
+
if (value.length === 0) {
|
|
118
|
+
throw schemaError(path, `${path} must be a non-empty array for op=in`);
|
|
119
|
+
}
|
|
120
|
+
value.forEach((v, i) => {
|
|
121
|
+
if (typeof v !== "number" && typeof v !== "string") {
|
|
122
|
+
throw schemaError(`${path}/${i}`, `${path} elements must be number or string`);
|
|
123
|
+
}
|
|
124
|
+
if (typeof v === "number" && !Number.isFinite(v)) {
|
|
125
|
+
throw schemaError(`${path}/${i}`, `${path} elements must be finite numbers`);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
return value;
|
|
129
|
+
}
|
|
130
|
+
if (typeof value === "number") {
|
|
131
|
+
if (!Number.isFinite(value)) {
|
|
132
|
+
throw schemaError(path, `${path} must be a finite number`);
|
|
133
|
+
}
|
|
134
|
+
return value;
|
|
135
|
+
}
|
|
136
|
+
if (typeof value === "string") {
|
|
137
|
+
return value;
|
|
138
|
+
}
|
|
139
|
+
throw schemaError(path, `${path} must be a number, string, or array`);
|
|
140
|
+
}
|
|
141
|
+
function validateConditionLeaf(obj, path) {
|
|
142
|
+
const field = requireNonEmptyString(obj.field, `${path}/field`);
|
|
143
|
+
if (!CONDITION_FIELDS.includes(field)) {
|
|
144
|
+
throw new NegotiationValidationError("field_unsupported", `unsupported condition field: ${field}`, `${path}/field`);
|
|
145
|
+
}
|
|
146
|
+
const op = requireEnum(obj.op, CONDITION_OPERATORS, `${path}/op`);
|
|
147
|
+
return {
|
|
148
|
+
field,
|
|
149
|
+
op,
|
|
150
|
+
value: validateConditionValue(obj.value, `${path}/value`, op),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function validateConditionNode(value, path, depth) {
|
|
154
|
+
if (depth > 2) {
|
|
155
|
+
throw schemaError(path, "condition nesting must not exceed 2 levels below the root");
|
|
156
|
+
}
|
|
157
|
+
const obj = requireObject(value, path);
|
|
158
|
+
const hasAll = obj.all !== undefined;
|
|
159
|
+
const hasAny = obj.any !== undefined;
|
|
160
|
+
const isLeaf = obj.field !== undefined || obj.op !== undefined || obj.value !== undefined;
|
|
161
|
+
const present = Number(hasAll) + Number(hasAny) + Number(isLeaf);
|
|
162
|
+
if (present !== 1) {
|
|
163
|
+
throw schemaError(path, "condition node must have exactly one of all/any/leaf");
|
|
164
|
+
}
|
|
165
|
+
if (hasAll) {
|
|
166
|
+
const children = requireArray(obj.all, `${path}/all`);
|
|
167
|
+
if (children.length === 0) {
|
|
168
|
+
throw schemaError(`${path}/all`, "all must be a non-empty array");
|
|
169
|
+
}
|
|
170
|
+
return { all: children.map((c, i) => validateConditionNode(c, `${path}/all/${i}`, depth + 1)) };
|
|
171
|
+
}
|
|
172
|
+
if (hasAny) {
|
|
173
|
+
const children = requireArray(obj.any, `${path}/any`);
|
|
174
|
+
if (children.length === 0) {
|
|
175
|
+
throw schemaError(`${path}/any`, "any must be a non-empty array");
|
|
176
|
+
}
|
|
177
|
+
return { any: children.map((c, i) => validateConditionNode(c, `${path}/any/${i}`, depth + 1)) };
|
|
178
|
+
}
|
|
179
|
+
return validateConditionLeaf(obj, path);
|
|
180
|
+
}
|
|
181
|
+
export function validateConditionalOffer(value, path = "/payload") {
|
|
182
|
+
const obj = requireObject(value, path);
|
|
183
|
+
requireType(obj, "conditional_offer", path);
|
|
184
|
+
const conditions = (obj.conditions === undefined ? [] : requireArray(obj.conditions, `${path}/conditions`)).map((c, i) => {
|
|
185
|
+
const cobj = requireObject(c, `${path}/conditions/${i}`);
|
|
186
|
+
return {
|
|
187
|
+
when: validateConditionNode(cobj.when, `${path}/conditions/${i}/when`, 0),
|
|
188
|
+
then_terms: validateTermSet(cobj.then_terms, `${path}/conditions/${i}/then_terms`),
|
|
189
|
+
};
|
|
190
|
+
});
|
|
191
|
+
return {
|
|
192
|
+
type: "conditional_offer",
|
|
193
|
+
offer_id: validateIdentifier(obj.offer_id, `${path}/offer_id`),
|
|
194
|
+
responding_to_offer_id: obj.responding_to_offer_id === undefined
|
|
195
|
+
? undefined
|
|
196
|
+
: validateIdentifier(obj.responding_to_offer_id, `${path}/responding_to_offer_id`),
|
|
197
|
+
base_terms: validateTermSet(obj.base_terms, `${path}/base_terms`),
|
|
198
|
+
conditions,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
export function validateClarification(value, path = "/payload") {
|
|
202
|
+
const obj = requireObject(value, path);
|
|
203
|
+
requireType(obj, "clarification", path);
|
|
204
|
+
const questions = requireArray(obj.questions, `${path}/questions`);
|
|
205
|
+
if (questions.length === 0) {
|
|
206
|
+
throw schemaError(`${path}/questions`, "clarification must contain at least one question");
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
type: "clarification",
|
|
210
|
+
questions: questions.map((q, i) => {
|
|
211
|
+
const qobj = requireObject(q, `${path}/questions/${i}`);
|
|
212
|
+
const question = {
|
|
213
|
+
field: requireNonEmptyString(qobj.field, `${path}/questions/${i}/field`),
|
|
214
|
+
};
|
|
215
|
+
if (qobj.reason !== undefined) {
|
|
216
|
+
question.reason = requireNonEmptyString(qobj.reason, `${path}/questions/${i}/reason`);
|
|
217
|
+
}
|
|
218
|
+
return question;
|
|
219
|
+
}),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
export function validateClarificationResponse(value, path = "/payload") {
|
|
223
|
+
const obj = requireObject(value, path);
|
|
224
|
+
requireType(obj, "clarification_response", path);
|
|
225
|
+
return { ...obj, type: "clarification_response" };
|
|
226
|
+
}
|
|
227
|
+
export function validateAcceptNonbinding(value, path = "/payload") {
|
|
228
|
+
const obj = requireObject(value, path);
|
|
229
|
+
requireType(obj, "accept_nonbinding", path);
|
|
230
|
+
return {
|
|
231
|
+
type: "accept_nonbinding",
|
|
232
|
+
offer_id: validateIdentifier(obj.offer_id, `${path}/offer_id`),
|
|
233
|
+
terms_digest: requireDigest(obj.terms_digest, `${path}/terms_digest`),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
export function validateWithdraw(value, path = "/payload") {
|
|
237
|
+
const obj = requireObject(value, path);
|
|
238
|
+
requireType(obj, "withdraw", path);
|
|
239
|
+
const scope = requireEnum(obj.scope, SCOPE_VALUES, `${path}/scope`);
|
|
240
|
+
const withdraw = {
|
|
241
|
+
type: "withdraw",
|
|
242
|
+
scope,
|
|
243
|
+
target_message_id: validateIdentifier(obj.target_message_id, `${path}/target_message_id`),
|
|
244
|
+
};
|
|
245
|
+
if (obj.target_offer_id !== undefined) {
|
|
246
|
+
if (scope === "negotiation") {
|
|
247
|
+
// §9.7:negotiation 级用 envelope negotiation_id,不得伪造 object id。
|
|
248
|
+
throw new NegotiationValidationError("state_conflict", `${path}/target_offer_id must be absent for scope=negotiation (envelope negotiation_id is authoritative)`, `${path}/target_offer_id`);
|
|
249
|
+
}
|
|
250
|
+
withdraw.target_offer_id = validateIdentifier(obj.target_offer_id, `${path}/target_offer_id`);
|
|
251
|
+
}
|
|
252
|
+
if (obj.reason_code !== undefined) {
|
|
253
|
+
withdraw.reason_code = requireNonEmptyString(obj.reason_code, `${path}/reason_code`);
|
|
254
|
+
}
|
|
255
|
+
return withdraw;
|
|
256
|
+
}
|
|
257
|
+
export function validateDecline(value, path = "/payload") {
|
|
258
|
+
const obj = requireObject(value, path);
|
|
259
|
+
requireType(obj, "decline", path);
|
|
260
|
+
const scope = requireEnum(obj.scope, SCOPE_VALUES, `${path}/scope`);
|
|
261
|
+
const decline = {
|
|
262
|
+
type: "decline",
|
|
263
|
+
scope,
|
|
264
|
+
target_message_id: validateIdentifier(obj.target_message_id, `${path}/target_message_id`),
|
|
265
|
+
};
|
|
266
|
+
if (obj.target_offer_id !== undefined) {
|
|
267
|
+
if (scope === "negotiation") {
|
|
268
|
+
// §9.7 / §17.3:negotiation 级 decline 以 envelope negotiation_id 为准。
|
|
269
|
+
throw new NegotiationValidationError("state_conflict", `${path}/target_offer_id must be absent for scope=negotiation (envelope negotiation_id is authoritative)`, `${path}/target_offer_id`);
|
|
270
|
+
}
|
|
271
|
+
decline.target_offer_id = validateIdentifier(obj.target_offer_id, `${path}/target_offer_id`);
|
|
272
|
+
}
|
|
273
|
+
if (obj.reason_code !== undefined) {
|
|
274
|
+
decline.reason_code = requireNonEmptyString(obj.reason_code, `${path}/reason_code`);
|
|
275
|
+
}
|
|
276
|
+
return decline;
|
|
277
|
+
}
|
|
278
|
+
export function validateCancel(value, path = "/payload") {
|
|
279
|
+
const obj = requireObject(value, path);
|
|
280
|
+
requireType(obj, "cancel", path);
|
|
281
|
+
return { type: "cancel" };
|
|
282
|
+
}
|
|
283
|
+
function requireFalse(value, path) {
|
|
284
|
+
if (value !== false) {
|
|
285
|
+
throw schemaError(path, `${path} must be false (KNP/1.0 produces no order/inventory/payment side effect)`);
|
|
286
|
+
}
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
export function validateAcceptedNonbindingAgreement(value, path = "/payload") {
|
|
290
|
+
const obj = requireObject(value, path);
|
|
291
|
+
requireType(obj, "accepted_nonbinding_agreement", path);
|
|
292
|
+
const acceptedBy = requireArray(obj.accepted_by, `${path}/accepted_by`);
|
|
293
|
+
if (acceptedBy.length === 0) {
|
|
294
|
+
throw schemaError(`${path}/accepted_by`, "accepted_by must not be empty");
|
|
295
|
+
}
|
|
296
|
+
return {
|
|
297
|
+
type: "accepted_nonbinding_agreement",
|
|
298
|
+
agreement_id: validateIdentifier(obj.agreement_id, `${path}/agreement_id`),
|
|
299
|
+
negotiation_id: validateIdentifier(obj.negotiation_id, `${path}/negotiation_id`),
|
|
300
|
+
accepted_offer_id: validateIdentifier(obj.accepted_offer_id, `${path}/accepted_offer_id`),
|
|
301
|
+
agreed_terms: validateTermSet(obj.agreed_terms, `${path}/agreed_terms`),
|
|
302
|
+
terms_digest: requireDigest(obj.terms_digest, `${path}/terms_digest`),
|
|
303
|
+
accepted_by: acceptedBy.map((a, i) => requireEnum(a, ["buyer", "merchant"], `${path}/accepted_by/${i}`)),
|
|
304
|
+
created_at: requireIsoTimestamp(obj.created_at, `${path}/created_at`),
|
|
305
|
+
binding_effect: requireEnum(obj.binding_effect, ["nonbinding"], `${path}/binding_effect`),
|
|
306
|
+
creates_order: requireFalse(obj.creates_order, `${path}/creates_order`),
|
|
307
|
+
reserves_inventory: requireFalse(obj.reserves_inventory, `${path}/reserves_inventory`),
|
|
308
|
+
authorizes_payment: requireFalse(obj.authorizes_payment, `${path}/authorizes_payment`),
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
const PAYLOAD_VALIDATORS = {
|
|
312
|
+
inquiry: validateInquiry,
|
|
313
|
+
rfq: validateRfq,
|
|
314
|
+
offer: validateOffer,
|
|
315
|
+
counter_offer: validateCounterOffer,
|
|
316
|
+
conditional_offer: validateConditionalOffer,
|
|
317
|
+
clarification: validateClarification,
|
|
318
|
+
clarification_response: validateClarificationResponse,
|
|
319
|
+
accept_nonbinding: validateAcceptNonbinding,
|
|
320
|
+
withdraw: validateWithdraw,
|
|
321
|
+
decline: validateDecline,
|
|
322
|
+
cancel: validateCancel,
|
|
323
|
+
};
|
|
324
|
+
/**
|
|
325
|
+
* 按 envelope.action 校验 payload。每个 validator 强制 payload.type 与
|
|
326
|
+
* action 一致,因此 action/payload 类型不匹配会在这里被拒绝(fail-closed)。
|
|
327
|
+
*/
|
|
328
|
+
export function validatePayloadForAction(action, value, path = "/payload") {
|
|
329
|
+
const validator = PAYLOAD_VALIDATORS[action];
|
|
330
|
+
if (validator === undefined) {
|
|
331
|
+
throw schemaError(path, `no validator registered for action ${action}`);
|
|
332
|
+
}
|
|
333
|
+
return validator(value, path);
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=objects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../src/negotiation/domain/objects.ts"],"names":[],"mappings":"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"}
|