@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,138 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Copyright 2026 harrylabsj
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* kiwi child-runner (internal; never invoked by users directly).
|
|
19
|
+
*
|
|
20
|
+
* node wrapper.js --kiwi-nonce <hex> --manifest <path> --log <path> \
|
|
21
|
+
* --exit <path> -- <cmd> [args...]
|
|
22
|
+
*
|
|
23
|
+
* Responsibilities:
|
|
24
|
+
* - spawn the exact child argv (array, never a shell string), piping its
|
|
25
|
+
* stdout/stderr into the instance-owned log file;
|
|
26
|
+
* - forward SIGINT/SIGTERM to that exact child only;
|
|
27
|
+
* - on child exit, write the exit record and exit with the child's code
|
|
28
|
+
* (or 128+signo), so up/status can see crashes.
|
|
29
|
+
*
|
|
30
|
+
* The nonce in argv lets status/down verify PID ownership with ps and makes
|
|
31
|
+
* PID-reuse kills cryptographically improbable.
|
|
32
|
+
*/
|
|
33
|
+
import { spawn } from "node:child_process";
|
|
34
|
+
import { closeSync, fsyncSync, openSync, renameSync, writeSync } from "node:fs";
|
|
35
|
+
function parseArgs(argv) {
|
|
36
|
+
let nonce;
|
|
37
|
+
let manifest;
|
|
38
|
+
let log;
|
|
39
|
+
let exit;
|
|
40
|
+
let command;
|
|
41
|
+
for (let i = 0; i < argv.length; i++) {
|
|
42
|
+
const arg = argv[i];
|
|
43
|
+
if (arg === "--kiwi-nonce")
|
|
44
|
+
nonce = argv[++i];
|
|
45
|
+
else if (arg === "--manifest")
|
|
46
|
+
manifest = argv[++i];
|
|
47
|
+
else if (arg === "--log")
|
|
48
|
+
log = argv[++i];
|
|
49
|
+
else if (arg === "--exit")
|
|
50
|
+
exit = argv[++i];
|
|
51
|
+
else if (arg === "--") {
|
|
52
|
+
command = argv.slice(i + 1);
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
else
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
if (!nonce || !manifest || !log || !exit || !command || command.length === 0)
|
|
59
|
+
return undefined;
|
|
60
|
+
return { nonce, manifest, log, exit, command };
|
|
61
|
+
}
|
|
62
|
+
function writeExitRecord(exitPath, record) {
|
|
63
|
+
const tmp = `${exitPath}.tmp-${process.pid}`;
|
|
64
|
+
const fd = openSync(tmp, "wx", 0o600);
|
|
65
|
+
try {
|
|
66
|
+
writeSync(fd, `${JSON.stringify(record)}\n`);
|
|
67
|
+
fsyncSync(fd);
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
closeSync(fd);
|
|
71
|
+
}
|
|
72
|
+
renameSync(tmp, exitPath);
|
|
73
|
+
}
|
|
74
|
+
function main() {
|
|
75
|
+
const args = parseArgs(process.argv.slice(2));
|
|
76
|
+
if (!args) {
|
|
77
|
+
process.stderr.write("kiwi child-runner: invalid arguments\n");
|
|
78
|
+
process.exit(2);
|
|
79
|
+
}
|
|
80
|
+
const logFd = openSync(args.log, "a", 0o600);
|
|
81
|
+
const child = spawn(args.command[0], args.command.slice(1), {
|
|
82
|
+
stdio: ["ignore", logFd, logFd],
|
|
83
|
+
});
|
|
84
|
+
closeSync(logFd); // the child holds its own descriptors now
|
|
85
|
+
let exited = false;
|
|
86
|
+
let killTimer;
|
|
87
|
+
const forward = (signal) => {
|
|
88
|
+
if (exited)
|
|
89
|
+
return;
|
|
90
|
+
child.kill(signal);
|
|
91
|
+
// 兜底(评审项 P3-2):supervisor 的 SIGKILL 升级只杀 wrapper(5s 后),
|
|
92
|
+
// 若 wrapper 被升级杀掉而子进程还活着,子进程会孤儿化继续运行——重启后
|
|
93
|
+
// 双 agent 并存、双写同一 SQLite/端口。此处 2.5s(< 5s 升级点,留足
|
|
94
|
+
// 调度余量)强杀子进程:正常关停永远不需要 supervisor 升级,升级发生时
|
|
95
|
+
// 子进程已被兜底终止。
|
|
96
|
+
if (killTimer === undefined) {
|
|
97
|
+
killTimer = setTimeout(() => {
|
|
98
|
+
if (!exited)
|
|
99
|
+
child.kill("SIGKILL");
|
|
100
|
+
}, 2500);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
// Signal handlers are installed before the ready marker is written, so a
|
|
104
|
+
// supervisor that waits for readiness can never lose a signal.
|
|
105
|
+
process.on("SIGINT", () => forward("SIGINT"));
|
|
106
|
+
process.on("SIGTERM", () => forward("SIGTERM"));
|
|
107
|
+
child.on("error", (err) => {
|
|
108
|
+
exited = true;
|
|
109
|
+
writeExitRecord(args.exit, {
|
|
110
|
+
exit_code: 1,
|
|
111
|
+
signal: null,
|
|
112
|
+
at: new Date().toISOString(),
|
|
113
|
+
});
|
|
114
|
+
process.stderr.write(`kiwi child-runner: failed to spawn ${args.command[0] ?? ""}: ${err.message}\n`);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
});
|
|
117
|
+
child.on("exit", (code, signal) => {
|
|
118
|
+
exited = true;
|
|
119
|
+
writeExitRecord(args.exit, {
|
|
120
|
+
exit_code: code,
|
|
121
|
+
signal,
|
|
122
|
+
at: new Date().toISOString(),
|
|
123
|
+
});
|
|
124
|
+
if (signal) {
|
|
125
|
+
process.exit(128 + (signal === "SIGTERM" ? 15 : signal === "SIGINT" ? 2 : 1));
|
|
126
|
+
}
|
|
127
|
+
process.exit(code ?? 1);
|
|
128
|
+
});
|
|
129
|
+
// Ready marker: signal handlers are up and the child has been spawned.
|
|
130
|
+
// The supervisor waits for this before it may signal us.
|
|
131
|
+
writeExitRecord(`${args.manifest}.ready`, {
|
|
132
|
+
exit_code: null,
|
|
133
|
+
signal: null,
|
|
134
|
+
at: new Date().toISOString(),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
main();
|
|
138
|
+
//# sourceMappingURL=wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../src/supervisor/wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
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
|
+
* HttpMessageSignatureVerifier —— AuthVerifier 接缝的完整身份方案(WP5)。
|
|
18
|
+
*
|
|
19
|
+
* 在 a2a/server 的认证接缝上落地:
|
|
20
|
+
* 1. 请求带 HTTP Message Signature(RFC 9421)→ 验签(算法 / 时间窗口 /
|
|
21
|
+
* nonce / content-digest 完整性);
|
|
22
|
+
* 2. 验签通过的 keyid → 本地信任锚档案(profile:identity / organization /
|
|
23
|
+
* role / trustLevel);
|
|
24
|
+
* 3. TrustPolicy 按档案 trust level 决定是否强制 Agent Card JWS(§31:是否
|
|
25
|
+
* 强制由策略决定,不是算法自带的);
|
|
26
|
+
* 4. 身份绑定冲突(宣称 profile vs 密钥档案)→ identity_rejected(§18)。
|
|
27
|
+
*
|
|
28
|
+
* 未签名请求:按 anonymousTrustLevel(默认 T0 UNKNOWN)评估策略。默认策略表
|
|
29
|
+
* T0 不强制签名,因此匿名可访问;部署方想 fail-closed 可传
|
|
30
|
+
* `requireHttpSignature: 恒真` 的策略或把 anonymousTrustLevel 设为 T1。
|
|
31
|
+
*
|
|
32
|
+
* 请求头约定(本实现自有的最小约定):
|
|
33
|
+
* - `x-agent-card-jws`:请求携带的 Agent Card compact JWS(T2+ 强制时校验);
|
|
34
|
+
* - `x-kiwi-claimed-identity`:可选 JSON `{ identity?, organization?, role? }`,
|
|
35
|
+
* 用于身份绑定冲突检测。
|
|
36
|
+
*/
|
|
37
|
+
import type { AuthContext, AuthResult, AuthVerifier } from "../../a2a/server/types.js";
|
|
38
|
+
import { type ClaimedIdentity } from "./identity-binding.js";
|
|
39
|
+
import type { KeyResolver } from "./keys.js";
|
|
40
|
+
import type { NonceStore } from "./nonce.js";
|
|
41
|
+
import { type TrustLevel, type TrustPolicy } from "./trust-policy.js";
|
|
42
|
+
/** 请求携带 Agent Card JWS 的自定义头。 */
|
|
43
|
+
export declare const CARD_JWS_HEADER = "x-agent-card-jws";
|
|
44
|
+
/** 请求宣称身份的 JSON 头(untrusted,仅用于冲突检测)。 */
|
|
45
|
+
export declare const CLAIMED_IDENTITY_HEADER = "x-kiwi-claimed-identity";
|
|
46
|
+
export type CardJwsVerificationResult = {
|
|
47
|
+
ok: true;
|
|
48
|
+
identity?: string;
|
|
49
|
+
organization?: string;
|
|
50
|
+
role?: "buyer" | "merchant";
|
|
51
|
+
} | {
|
|
52
|
+
ok: false;
|
|
53
|
+
reason: string;
|
|
54
|
+
};
|
|
55
|
+
export interface HttpMessageSignatureVerifierOptions {
|
|
56
|
+
/** keyid → 公钥 + 档案(本地信任锚 / JWKS 接缝)。 */
|
|
57
|
+
resolver: KeyResolver;
|
|
58
|
+
/** 信任策略;默认 DEFAULT_TRUST_POLICY(T0 匿名 / T1+ 强制签名 / T2+ 强制 JWS / T3 强制 nonce)。 */
|
|
59
|
+
policy?: TrustPolicy;
|
|
60
|
+
nonceStore?: NonceStore;
|
|
61
|
+
/** 时钟(unix 秒);默认 Date.now()/1000。 */
|
|
62
|
+
now?: () => number;
|
|
63
|
+
/** @target-uri 重建用 scheme;默认取 AuthContext.scheme 再回落此值。 */
|
|
64
|
+
scheme?: "http" | "https";
|
|
65
|
+
/** 未签名请求的 trust level;默认 T0。 */
|
|
66
|
+
anonymousTrustLevel?: TrustLevel;
|
|
67
|
+
/** 未签名(匿名放行)时的幂等身份;默认 "anonymous"。 */
|
|
68
|
+
anonymousIdentity?: string;
|
|
69
|
+
/** 验证请求携带的 Agent Card JWS;T2+ 时必需。 */
|
|
70
|
+
verifyCardJws?: (jws: string) => CardJwsVerificationResult;
|
|
71
|
+
/** created/expires 时钟偏差(秒);默认 300。 */
|
|
72
|
+
maxClockSkewSeconds?: number;
|
|
73
|
+
/** 无 expires 的签名最大年龄(秒);默认 900。 */
|
|
74
|
+
maxSignatureAgeSeconds?: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 解析 `x-kiwi-claimed-identity` 头(JSON)。非 JSON / 形状非法返回 undefined
|
|
78
|
+
* (untrusted 输入,解析失败不阻断——冲突检测只在有宣称值时生效)。
|
|
79
|
+
*/
|
|
80
|
+
export declare function parseClaimedIdentityHeader(headers: Record<string, string | string[] | undefined>): ClaimedIdentity | undefined;
|
|
81
|
+
/** 完整 HTTP Message Signature 入站验证器(AuthVerifier 实现)。 */
|
|
82
|
+
export declare class HttpMessageSignatureVerifier implements AuthVerifier {
|
|
83
|
+
readonly name = "http-message-signature";
|
|
84
|
+
private readonly resolver;
|
|
85
|
+
private readonly policy;
|
|
86
|
+
private readonly nonceStore;
|
|
87
|
+
private readonly now;
|
|
88
|
+
private readonly scheme;
|
|
89
|
+
private readonly anonymousTrustLevel;
|
|
90
|
+
private readonly anonymousIdentity;
|
|
91
|
+
private readonly verifyCardJws;
|
|
92
|
+
private readonly maxClockSkewSeconds;
|
|
93
|
+
private readonly maxSignatureAgeSeconds;
|
|
94
|
+
constructor(options: HttpMessageSignatureVerifierOptions);
|
|
95
|
+
verify(ctx: AuthContext): AuthResult;
|
|
96
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
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 { bindIdentity } from "./identity-binding.js";
|
|
17
|
+
import { verifyHttpMessageSignature } from "./message-signature.js";
|
|
18
|
+
import { headerValue } from "./signature-base.js";
|
|
19
|
+
import { DEFAULT_TRUST_POLICY, } from "./trust-policy.js";
|
|
20
|
+
/** 请求携带 Agent Card JWS 的自定义头。 */
|
|
21
|
+
export const CARD_JWS_HEADER = "x-agent-card-jws";
|
|
22
|
+
/** 请求宣称身份的 JSON 头(untrusted,仅用于冲突检测)。 */
|
|
23
|
+
export const CLAIMED_IDENTITY_HEADER = "x-kiwi-claimed-identity";
|
|
24
|
+
/**
|
|
25
|
+
* 解析 `x-kiwi-claimed-identity` 头(JSON)。非 JSON / 形状非法返回 undefined
|
|
26
|
+
* (untrusted 输入,解析失败不阻断——冲突检测只在有宣称值时生效)。
|
|
27
|
+
*/
|
|
28
|
+
export function parseClaimedIdentityHeader(headers) {
|
|
29
|
+
const value = headerValue(headers, CLAIMED_IDENTITY_HEADER);
|
|
30
|
+
if (value === undefined)
|
|
31
|
+
return undefined;
|
|
32
|
+
let parsed;
|
|
33
|
+
try {
|
|
34
|
+
parsed = JSON.parse(value);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
|
|
40
|
+
return undefined;
|
|
41
|
+
const obj = parsed;
|
|
42
|
+
const out = {};
|
|
43
|
+
if (typeof obj.identity === "string")
|
|
44
|
+
out.identity = obj.identity;
|
|
45
|
+
if (typeof obj.organization === "string")
|
|
46
|
+
out.organization = obj.organization;
|
|
47
|
+
if (obj.role === "buyer" || obj.role === "merchant")
|
|
48
|
+
out.role = obj.role;
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
/** 完整 HTTP Message Signature 入站验证器(AuthVerifier 实现)。 */
|
|
52
|
+
export class HttpMessageSignatureVerifier {
|
|
53
|
+
name = "http-message-signature";
|
|
54
|
+
resolver;
|
|
55
|
+
policy;
|
|
56
|
+
nonceStore;
|
|
57
|
+
now;
|
|
58
|
+
scheme;
|
|
59
|
+
anonymousTrustLevel;
|
|
60
|
+
anonymousIdentity;
|
|
61
|
+
verifyCardJws;
|
|
62
|
+
maxClockSkewSeconds;
|
|
63
|
+
maxSignatureAgeSeconds;
|
|
64
|
+
constructor(options) {
|
|
65
|
+
this.resolver = options.resolver;
|
|
66
|
+
this.policy = options.policy ?? DEFAULT_TRUST_POLICY;
|
|
67
|
+
this.nonceStore = options.nonceStore;
|
|
68
|
+
this.now = options.now ?? (() => Math.floor(Date.now() / 1000));
|
|
69
|
+
this.scheme = options.scheme ?? "http";
|
|
70
|
+
this.anonymousTrustLevel = options.anonymousTrustLevel ?? "T0";
|
|
71
|
+
this.anonymousIdentity = options.anonymousIdentity ?? "anonymous";
|
|
72
|
+
this.verifyCardJws = options.verifyCardJws;
|
|
73
|
+
this.maxClockSkewSeconds = options.maxClockSkewSeconds ?? 300;
|
|
74
|
+
this.maxSignatureAgeSeconds = options.maxSignatureAgeSeconds ?? 900;
|
|
75
|
+
}
|
|
76
|
+
verify(ctx) {
|
|
77
|
+
const headers = ctx.headers ?? {};
|
|
78
|
+
// 未签名请求:按匿名等级评估策略。
|
|
79
|
+
if (headerValue(headers, "signature-input") === undefined) {
|
|
80
|
+
if (this.policy.requireHttpSignature(this.anonymousTrustLevel)) {
|
|
81
|
+
return {
|
|
82
|
+
authenticated: false,
|
|
83
|
+
protocolCode: "authentication_required",
|
|
84
|
+
reason: `HTTP Message Signature required at ${this.anonymousTrustLevel}`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return { authenticated: true, identity: this.anonymousIdentity };
|
|
88
|
+
}
|
|
89
|
+
// 签名请求:重建 @target-uri / @authority(服务端只有 origin-form req.url)。
|
|
90
|
+
const authority = headerValue(headers, "host") ?? "";
|
|
91
|
+
const scheme = ctx.scheme ?? this.scheme;
|
|
92
|
+
const targetUri = ctx.url.startsWith("http://") || ctx.url.startsWith("https://")
|
|
93
|
+
? ctx.url
|
|
94
|
+
: `${scheme}://${authority}${ctx.url}`;
|
|
95
|
+
const result = verifyHttpMessageSignature({
|
|
96
|
+
method: ctx.method,
|
|
97
|
+
targetUri,
|
|
98
|
+
authority,
|
|
99
|
+
headers,
|
|
100
|
+
body: ctx.body ?? Buffer.alloc(0),
|
|
101
|
+
resolver: this.resolver,
|
|
102
|
+
nonceStore: this.nonceStore,
|
|
103
|
+
now: this.now,
|
|
104
|
+
maxClockSkewSeconds: this.maxClockSkewSeconds,
|
|
105
|
+
maxSignatureAgeSeconds: this.maxSignatureAgeSeconds,
|
|
106
|
+
});
|
|
107
|
+
if (!result.ok) {
|
|
108
|
+
return { authenticated: false, protocolCode: result.code, reason: result.reason };
|
|
109
|
+
}
|
|
110
|
+
const principal = {
|
|
111
|
+
identity: result.profile?.identity ?? result.keyid,
|
|
112
|
+
keyid: result.keyid,
|
|
113
|
+
trustLevel: result.profile?.trustLevel ?? this.anonymousTrustLevel,
|
|
114
|
+
profile: result.profile,
|
|
115
|
+
};
|
|
116
|
+
// nonce 强制(策略表 T3):签名必须携带 nonce 才能满足重放保护要求。
|
|
117
|
+
if (this.policy.requireNonce(principal.trustLevel) && result.params.nonce === undefined) {
|
|
118
|
+
return {
|
|
119
|
+
authenticated: false,
|
|
120
|
+
protocolCode: "authorization_failed",
|
|
121
|
+
reason: `signature nonce required at ${principal.trustLevel}`,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Agent Card JWS 强制由 TrustPolicy 决定(§31)。
|
|
125
|
+
const cardJws = headerValue(headers, CARD_JWS_HEADER);
|
|
126
|
+
let cardClaims;
|
|
127
|
+
if (this.policy.requireCardJws(principal.trustLevel)) {
|
|
128
|
+
if (cardJws === undefined) {
|
|
129
|
+
return {
|
|
130
|
+
authenticated: false,
|
|
131
|
+
protocolCode: "authentication_required",
|
|
132
|
+
reason: `Agent Card JWS required at ${principal.trustLevel}`,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (this.verifyCardJws === undefined) {
|
|
136
|
+
return {
|
|
137
|
+
authenticated: false,
|
|
138
|
+
protocolCode: "authorization_failed",
|
|
139
|
+
reason: "Agent Card JWS verification is not configured",
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
cardClaims = this.verifyCardJws(cardJws);
|
|
143
|
+
if (!cardClaims.ok) {
|
|
144
|
+
return {
|
|
145
|
+
authenticated: false,
|
|
146
|
+
protocolCode: "authorization_failed",
|
|
147
|
+
reason: `invalid Agent Card JWS: ${cardClaims.reason}`,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// 身份绑定冲突 → identity_rejected(§18 / §32)。
|
|
152
|
+
const claimed = {
|
|
153
|
+
...(parseClaimedIdentityHeader(headers) ?? {}),
|
|
154
|
+
...(cardClaims !== undefined && cardClaims.ok ? cardClaims : {}),
|
|
155
|
+
};
|
|
156
|
+
const bound = bindIdentity({ verified: principal, claimed });
|
|
157
|
+
if (!bound.ok) {
|
|
158
|
+
return { authenticated: false, protocolCode: "identity_rejected", reason: bound.reason };
|
|
159
|
+
}
|
|
160
|
+
// 验签通过:identity 是 HTTP Message Signature 验证出的对端身份。
|
|
161
|
+
// identityVerified=true 让 pipeline 把该身份写入入站 Ledger identity
|
|
162
|
+
// snapshot 的 counterparty 侧(§22,与 buyer 侧记录对称)。
|
|
163
|
+
return { authenticated: true, identity: bound.senderIdentity, identityVerified: true };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=auth-verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-verifier.js","sourceRoot":"","sources":["../../../src/trust/identity/auth-verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
* 身份绑定(基线 §27 Identity Trust / §36-19 / UCP Identity Binding 思想)。
|
|
18
|
+
*
|
|
19
|
+
* 验签通过的身份 MUST 绑定到:
|
|
20
|
+
* - 协议幂等主键的 sender 侧(子规范 §20.1 (sender_identity, message_id));
|
|
21
|
+
* - Ledger identity snapshot(基线 §22 identity snapshot)。
|
|
22
|
+
*
|
|
23
|
+
* 冲突检测:请求宣称的 profile(identity / organization / role)与密钥绑定的
|
|
24
|
+
* profile 不一致 → identity_rejected(§18 词表 / §32 error model)。fail-closed:
|
|
25
|
+
* 任何宣称字段与已绑定档案冲突都拒绝,绝不静默采用宣称值。
|
|
26
|
+
*/
|
|
27
|
+
import type { LedgerIdentitySnapshot } from "../../negotiation/ledger/index.js";
|
|
28
|
+
import type { TrustLevel } from "./trust-policy.js";
|
|
29
|
+
/** 验签通过的身份主体。 */
|
|
30
|
+
export interface VerifiedPrincipal {
|
|
31
|
+
/** 规范身份:优先密钥档案 profile.identity,否则 keyid。 */
|
|
32
|
+
identity: string;
|
|
33
|
+
keyid: string;
|
|
34
|
+
trustLevel: TrustLevel;
|
|
35
|
+
profile?: {
|
|
36
|
+
identity?: string;
|
|
37
|
+
organization?: string;
|
|
38
|
+
role?: "buyer" | "merchant";
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** 请求宣称的身份(来自请求头/卡片 JWS 等;untrusted)。 */
|
|
42
|
+
export interface ClaimedIdentity {
|
|
43
|
+
identity?: string;
|
|
44
|
+
organization?: string;
|
|
45
|
+
role?: "buyer" | "merchant";
|
|
46
|
+
}
|
|
47
|
+
export type IdentityBindingResult = {
|
|
48
|
+
ok: true;
|
|
49
|
+
senderIdentity: string;
|
|
50
|
+
snapshot: LedgerIdentitySnapshot;
|
|
51
|
+
} | {
|
|
52
|
+
ok: false;
|
|
53
|
+
protocolCode: "identity_rejected";
|
|
54
|
+
reason: string;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* 把验证过的身份绑定到幂等主键与 Ledger 快照,并做宣称档案冲突检测。
|
|
58
|
+
* claimed 缺省时不冲突(未宣称即不比较);宣称字段必须与档案一致。
|
|
59
|
+
*/
|
|
60
|
+
export declare function bindIdentity(input: {
|
|
61
|
+
verified: VerifiedPrincipal;
|
|
62
|
+
claimed?: ClaimedIdentity;
|
|
63
|
+
}): IdentityBindingResult;
|
|
@@ -0,0 +1,59 @@
|
|
|
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
|
+
* 把验证过的身份绑定到幂等主键与 Ledger 快照,并做宣称档案冲突检测。
|
|
18
|
+
* claimed 缺省时不冲突(未宣称即不比较);宣称字段必须与档案一致。
|
|
19
|
+
*/
|
|
20
|
+
export function bindIdentity(input) {
|
|
21
|
+
const senderIdentity = input.verified.identity;
|
|
22
|
+
const profile = input.verified.profile;
|
|
23
|
+
const claimed = input.claimed;
|
|
24
|
+
if (claimed !== undefined) {
|
|
25
|
+
if (claimed.identity !== undefined &&
|
|
26
|
+
profile?.identity !== undefined &&
|
|
27
|
+
claimed.identity !== profile.identity) {
|
|
28
|
+
return {
|
|
29
|
+
ok: false,
|
|
30
|
+
protocolCode: "identity_rejected",
|
|
31
|
+
reason: `claimed identity "${claimed.identity}" conflicts with key "${input.verified.keyid}" profile identity "${profile.identity}"`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (claimed.organization !== undefined &&
|
|
35
|
+
profile?.organization !== undefined &&
|
|
36
|
+
claimed.organization !== profile.organization) {
|
|
37
|
+
return {
|
|
38
|
+
ok: false,
|
|
39
|
+
protocolCode: "identity_rejected",
|
|
40
|
+
reason: `claimed organization "${claimed.organization}" conflicts with key "${input.verified.keyid}" profile`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (claimed.role !== undefined &&
|
|
44
|
+
profile?.role !== undefined &&
|
|
45
|
+
claimed.role !== profile.role) {
|
|
46
|
+
return {
|
|
47
|
+
ok: false,
|
|
48
|
+
protocolCode: "identity_rejected",
|
|
49
|
+
reason: `claimed role "${claimed.role}" conflicts with key "${input.verified.keyid}" profile role "${profile.role}"`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
ok: true,
|
|
55
|
+
senderIdentity,
|
|
56
|
+
snapshot: { sender_identity: senderIdentity, counterparty_identity: senderIdentity },
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=identity-binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-binding.js","sourceRoot":"","sources":["../../../src/trust/identity/identity-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAqCH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAG5B;IACC,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAE9B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IACE,OAAO,CAAC,QAAQ,KAAK,SAAS;YAC9B,OAAO,EAAE,QAAQ,KAAK,SAAS;YAC/B,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EACrC,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,YAAY,EAAE,mBAAmB;gBACjC,MAAM,EAAE,qBAAqB,OAAO,CAAC,QAAQ,yBAAyB,KAAK,CAAC,QAAQ,CAAC,KAAK,uBAAuB,OAAO,CAAC,QAAQ,GAAG;aACrI,CAAC;QACJ,CAAC;QACD,IACE,OAAO,CAAC,YAAY,KAAK,SAAS;YAClC,OAAO,EAAE,YAAY,KAAK,SAAS;YACnC,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,EAC7C,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,YAAY,EAAE,mBAAmB;gBACjC,MAAM,EAAE,yBAAyB,OAAO,CAAC,YAAY,yBAAyB,KAAK,CAAC,QAAQ,CAAC,KAAK,WAAW;aAC9G,CAAC;QACJ,CAAC;QACD,IACE,OAAO,CAAC,IAAI,KAAK,SAAS;YAC1B,OAAO,EAAE,IAAI,KAAK,SAAS;YAC3B,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAC7B,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,YAAY,EAAE,mBAAmB;gBACjC,MAAM,EAAE,iBAAiB,OAAO,CAAC,IAAI,yBAAyB,KAAK,CAAC,QAAQ,CAAC,KAAK,mBAAmB,OAAO,CAAC,IAAI,GAAG;aACrH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,cAAc;QACd,QAAQ,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,cAAc,EAAE;KACrF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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/identity — WP5 身份层(HTTP Message Signatures + Agent Card JWS +
|
|
18
|
+
* TrustPolicy + 身份绑定)。
|
|
19
|
+
*
|
|
20
|
+
* 入口:HttpMessageSignatureVerifier 接入 a2a/server 的 AuthVerifier 接缝;
|
|
21
|
+
* HttpMessageSigner 接入 a2a/client 的出站签名挂点。
|
|
22
|
+
*/
|
|
23
|
+
export { HttpMessageSignatureVerifier, parseClaimedIdentityHeader, CARD_JWS_HEADER, CLAIMED_IDENTITY_HEADER, } from "./auth-verifier.js";
|
|
24
|
+
export type { CardJwsVerificationResult, HttpMessageSignatureVerifierOptions, } from "./auth-verifier.js";
|
|
25
|
+
export { bindIdentity } from "./identity-binding.js";
|
|
26
|
+
export type { ClaimedIdentity, IdentityBindingResult, VerifiedPrincipal, } from "./identity-binding.js";
|
|
27
|
+
export { JwsError, jwsKid, verifyAgentCardJws, verifyCompactJws } from "./jws.js";
|
|
28
|
+
export type { AgentCardJwsResult, JwsErrorCode, VerifiedJws } from "./jws.js";
|
|
29
|
+
export { ed25519PrivateKeyFromSeed, privateKeyObject, publicKeyJwkFromRaw, publicKeyObject, resolveFromJwks, resolveFromSigningKeys, } from "./keys.js";
|
|
30
|
+
export type { KeyProfile, KeyResolver, SignatureAlgorithm, SigningKey } from "./keys.js";
|
|
31
|
+
export { contentDigestHeader, DEFAULT_COVERED_COMPONENTS, HttpMessageSigner, RFC9421_ALG_NAMES, verifyContentDigest, verifyHttpMessageSignature, } from "./message-signature.js";
|
|
32
|
+
export type { HttpMessageSignerOptions, HttpSignatureVerifyResult, VerifyHttpSignatureInput, } from "./message-signature.js";
|
|
33
|
+
export { InMemoryNonceStore } from "./nonce.js";
|
|
34
|
+
export type { NonceStore } from "./nonce.js";
|
|
35
|
+
export { buildSignatureBase, formatSignatureInput, headerValue, parseSignatureHeader, parseSignatureInput, serializeParams, } from "./signature-base.js";
|
|
36
|
+
export type { CoveredComponent, ParsedSignatureInput, SignatureBaseError, SignatureBaseInput, SignatureParams, } from "./signature-base.js";
|
|
37
|
+
export { conservativeLevel, DEFAULT_TRUST_POLICY, evaluatePolicy, isTrustLevel, TRUST_LEVELS, trustLevelRank, } from "./trust-policy.js";
|
|
38
|
+
export type { PolicyEvaluationInput, PolicyEvaluationResult, TrustLevel, TrustPolicy, } from "./trust-policy.js";
|
|
@@ -0,0 +1,31 @@
|
|
|
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/identity — WP5 身份层(HTTP Message Signatures + Agent Card JWS +
|
|
18
|
+
* TrustPolicy + 身份绑定)。
|
|
19
|
+
*
|
|
20
|
+
* 入口:HttpMessageSignatureVerifier 接入 a2a/server 的 AuthVerifier 接缝;
|
|
21
|
+
* HttpMessageSigner 接入 a2a/client 的出站签名挂点。
|
|
22
|
+
*/
|
|
23
|
+
export { HttpMessageSignatureVerifier, parseClaimedIdentityHeader, CARD_JWS_HEADER, CLAIMED_IDENTITY_HEADER, } from "./auth-verifier.js";
|
|
24
|
+
export { bindIdentity } from "./identity-binding.js";
|
|
25
|
+
export { JwsError, jwsKid, verifyAgentCardJws, verifyCompactJws } from "./jws.js";
|
|
26
|
+
export { ed25519PrivateKeyFromSeed, privateKeyObject, publicKeyJwkFromRaw, publicKeyObject, resolveFromJwks, resolveFromSigningKeys, } from "./keys.js";
|
|
27
|
+
export { contentDigestHeader, DEFAULT_COVERED_COMPONENTS, HttpMessageSigner, RFC9421_ALG_NAMES, verifyContentDigest, verifyHttpMessageSignature, } from "./message-signature.js";
|
|
28
|
+
export { InMemoryNonceStore } from "./nonce.js";
|
|
29
|
+
export { buildSignatureBase, formatSignatureInput, headerValue, parseSignatureHeader, parseSignatureInput, serializeParams, } from "./signature-base.js";
|
|
30
|
+
export { conservativeLevel, DEFAULT_TRUST_POLICY, evaluatePolicy, isTrustLevel, TRUST_LEVELS, trustLevelRank, } from "./trust-policy.js";
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/trust/identity/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;GAMG;AAEH,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAOrD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGlF,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,sBAAsB,GACvB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,mBAAmB,CAAC"}
|