@adcp/sdk 8.1.0-beta.13 → 8.1.0-beta.14
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/README.md +1 -1
- package/bin/adcp-registry.js +2 -2
- package/dist/lib/canonical-references/index.d.ts +107 -0
- package/dist/lib/canonical-references/index.d.ts.map +1 -0
- package/dist/lib/canonical-references/index.js +551 -0
- package/dist/lib/canonical-references/index.js.map +1 -0
- package/dist/lib/core/ConversationTypes.d.ts +7 -0
- package/dist/lib/core/ConversationTypes.d.ts.map +1 -1
- package/dist/lib/core/ProtocolResponseParser.d.ts +10 -0
- package/dist/lib/core/ProtocolResponseParser.d.ts.map +1 -1
- package/dist/lib/core/ProtocolResponseParser.js +110 -0
- package/dist/lib/core/ProtocolResponseParser.js.map +1 -1
- package/dist/lib/core/ResponseValidator.d.ts +2 -0
- package/dist/lib/core/ResponseValidator.d.ts.map +1 -1
- package/dist/lib/core/ResponseValidator.js +3 -3
- package/dist/lib/core/ResponseValidator.js.map +1 -1
- package/dist/lib/core/TaskExecutor.d.ts +2 -0
- package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
- package/dist/lib/core/TaskExecutor.js +32 -8
- package/dist/lib/core/TaskExecutor.js.map +1 -1
- package/dist/lib/index.d.ts +5 -4
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +27 -11
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/mock-server/creative-ad-server/server.d.ts +2 -0
- package/dist/lib/mock-server/creative-ad-server/server.d.ts.map +1 -1
- package/dist/lib/mock-server/creative-ad-server/server.js +37 -1
- package/dist/lib/mock-server/creative-ad-server/server.js.map +1 -1
- package/dist/lib/mock-server/creative-template/server.d.ts +2 -0
- package/dist/lib/mock-server/creative-template/server.d.ts.map +1 -1
- package/dist/lib/mock-server/creative-template/server.js +29 -2
- package/dist/lib/mock-server/creative-template/server.js.map +1 -1
- package/dist/lib/mock-server/index.d.ts +10 -1
- package/dist/lib/mock-server/index.d.ts.map +1 -1
- package/dist/lib/mock-server/index.js +38 -8
- package/dist/lib/mock-server/index.js.map +1 -1
- package/dist/lib/mock-server/sales-guaranteed/server.d.ts +2 -0
- package/dist/lib/mock-server/sales-guaranteed/server.d.ts.map +1 -1
- package/dist/lib/mock-server/sales-guaranteed/server.js +64 -7
- package/dist/lib/mock-server/sales-guaranteed/server.js.map +1 -1
- package/dist/lib/mock-server/sales-non-guaranteed/server.d.ts +2 -0
- package/dist/lib/mock-server/sales-non-guaranteed/server.d.ts.map +1 -1
- package/dist/lib/mock-server/sales-non-guaranteed/server.js +44 -1
- package/dist/lib/mock-server/sales-non-guaranteed/server.js.map +1 -1
- package/dist/lib/mock-server/sales-social/server.d.ts +2 -0
- package/dist/lib/mock-server/sales-social/server.d.ts.map +1 -1
- package/dist/lib/mock-server/sales-social/server.js +64 -4
- package/dist/lib/mock-server/sales-social/server.js.map +1 -1
- package/dist/lib/mock-server/scenario.d.ts +97 -0
- package/dist/lib/mock-server/scenario.d.ts.map +1 -0
- package/dist/lib/mock-server/scenario.js +464 -0
- package/dist/lib/mock-server/scenario.js.map +1 -0
- package/dist/lib/mock-server/signal-marketplace/server.d.ts +2 -0
- package/dist/lib/mock-server/signal-marketplace/server.d.ts.map +1 -1
- package/dist/lib/mock-server/signal-marketplace/server.js +29 -1
- package/dist/lib/mock-server/signal-marketplace/server.js.map +1 -1
- package/dist/lib/mock-server/sponsored-intelligence/server.d.ts +2 -0
- package/dist/lib/mock-server/sponsored-intelligence/server.d.ts.map +1 -1
- package/dist/lib/mock-server/sponsored-intelligence/server.js +47 -9
- package/dist/lib/mock-server/sponsored-intelligence/server.js.map +1 -1
- package/dist/lib/protocols/index.d.ts +4 -2
- package/dist/lib/protocols/index.d.ts.map +1 -1
- package/dist/lib/protocols/index.js +10 -3
- package/dist/lib/protocols/index.js.map +1 -1
- package/dist/lib/registry/index.d.ts +42 -16
- package/dist/lib/registry/index.d.ts.map +1 -1
- package/dist/lib/registry/index.js +191 -24
- package/dist/lib/registry/index.js.map +1 -1
- package/dist/lib/registry/types.d.ts +39 -8
- package/dist/lib/registry/types.d.ts.map +1 -1
- package/dist/lib/registry/types.generated.d.ts +2873 -699
- package/dist/lib/registry/types.generated.d.ts.map +1 -1
- package/dist/lib/registry/types.generated.js +2 -2
- package/dist/lib/registry/types.generated.js.map +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/a2a-adapter.d.ts +3 -1
- package/dist/lib/server/a2a-adapter.d.ts.map +1 -1
- package/dist/lib/server/a2a-adapter.js +11 -2
- package/dist/lib/server/a2a-adapter.js.map +1 -1
- package/dist/lib/server/adcp-server.js +32 -0
- package/dist/lib/server/adcp-server.js.map +1 -1
- package/dist/lib/server/create-adcp-server.d.ts +12 -6
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +72 -11
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/decisioning/account.d.ts +17 -17
- package/dist/lib/server/decisioning/account.d.ts.map +1 -1
- package/dist/lib/server/decisioning/account.js.map +1 -1
- package/dist/lib/server/decisioning/buyer-agent.d.ts +27 -10
- package/dist/lib/server/decisioning/buyer-agent.d.ts.map +1 -1
- package/dist/lib/server/decisioning/buyer-agent.js +25 -7
- package/dist/lib/server/decisioning/buyer-agent.js.map +1 -1
- package/dist/lib/server/decisioning/capabilities.d.ts +35 -7
- package/dist/lib/server/decisioning/capabilities.d.ts.map +1 -1
- package/dist/lib/server/decisioning/errors-typed.d.ts +18 -16
- package/dist/lib/server/decisioning/errors-typed.d.ts.map +1 -1
- package/dist/lib/server/decisioning/errors-typed.js +26 -24
- package/dist/lib/server/decisioning/errors-typed.js.map +1 -1
- package/dist/lib/server/decisioning/index.d.ts +1 -1
- package/dist/lib/server/decisioning/index.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.js +4 -2
- package/dist/lib/server/decisioning/index.js.map +1 -1
- package/dist/lib/server/decisioning/platform-helpers.d.ts +3 -2
- package/dist/lib/server/decisioning/platform-helpers.d.ts.map +1 -1
- package/dist/lib/server/decisioning/platform-helpers.js +3 -2
- package/dist/lib/server/decisioning/platform-helpers.js.map +1 -1
- package/dist/lib/server/decisioning/platform.d.ts +27 -10
- package/dist/lib/server/decisioning/platform.d.ts.map +1 -1
- package/dist/lib/server/decisioning/platform.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts +14 -10
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +374 -59
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/validate-platform.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/validate-platform.js +3 -8
- package/dist/lib/server/decisioning/runtime/validate-platform.js.map +1 -1
- package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.d.ts +9 -11
- package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.d.ts.map +1 -1
- package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.js +9 -11
- package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.js.map +1 -1
- package/dist/lib/server/operational-platform.d.ts +6 -8
- package/dist/lib/server/operational-platform.d.ts.map +1 -1
- package/dist/lib/server/operational-platform.js +4 -6
- package/dist/lib/server/operational-platform.js.map +1 -1
- package/dist/lib/server/test-controller-bridge.d.ts +14 -14
- package/dist/lib/server/test-controller-bridge.d.ts.map +1 -1
- package/dist/lib/server/test-controller-bridge.js +16 -16
- package/dist/lib/server/test-controller-bridge.js.map +1 -1
- package/dist/lib/server/test-controller.d.ts +31 -9
- package/dist/lib/server/test-controller.d.ts.map +1 -1
- package/dist/lib/server/test-controller.js +106 -54
- package/dist/lib/server/test-controller.js.map +1 -1
- package/dist/lib/signing/canonicalize.d.ts +0 -53
- package/dist/lib/signing/canonicalize.d.ts.map +1 -1
- package/dist/lib/signing/canonicalize.js +1 -33
- package/dist/lib/signing/canonicalize.js.map +1 -1
- package/dist/lib/signing/client.d.ts +5 -5
- package/dist/lib/signing/client.d.ts.map +1 -1
- package/dist/lib/signing/client.js +1 -10
- package/dist/lib/signing/client.js.map +1 -1
- package/dist/lib/signing/errors.d.ts +0 -11
- package/dist/lib/signing/errors.d.ts.map +1 -1
- package/dist/lib/signing/errors.js +1 -11
- package/dist/lib/signing/errors.js.map +1 -1
- package/dist/lib/signing/jwks-helpers.d.ts +2 -4
- package/dist/lib/signing/jwks-helpers.d.ts.map +1 -1
- package/dist/lib/signing/jwks-helpers.js +9 -0
- package/dist/lib/signing/jwks-helpers.js.map +1 -1
- package/dist/lib/signing/provider.d.ts +11 -10
- package/dist/lib/signing/provider.d.ts.map +1 -1
- package/dist/lib/signing/request-context.d.ts +8 -11
- package/dist/lib/signing/request-context.d.ts.map +1 -1
- package/dist/lib/signing/request-context.js +7 -10
- package/dist/lib/signing/request-context.js.map +1 -1
- package/dist/lib/signing/server.d.ts +3 -4
- package/dist/lib/signing/server.d.ts.map +1 -1
- package/dist/lib/signing/server.js +1 -9
- package/dist/lib/signing/server.js.map +1 -1
- package/dist/lib/signing/signer-async.d.ts +2 -8
- package/dist/lib/signing/signer-async.d.ts.map +1 -1
- package/dist/lib/signing/signer-async.js +0 -12
- package/dist/lib/signing/signer-async.js.map +1 -1
- package/dist/lib/signing/signer.d.ts +4 -111
- package/dist/lib/signing/signer.d.ts.map +1 -1
- package/dist/lib/signing/signer.js +2 -98
- package/dist/lib/signing/signer.js.map +1 -1
- package/dist/lib/signing/testing.d.ts +10 -10
- package/dist/lib/signing/testing.d.ts.map +1 -1
- package/dist/lib/signing/testing.js +6 -13
- package/dist/lib/signing/testing.js.map +1 -1
- package/dist/lib/signing/types.d.ts +0 -36
- package/dist/lib/signing/types.d.ts.map +1 -1
- package/dist/lib/signing/types.js +1 -37
- package/dist/lib/signing/types.js.map +1 -1
- package/dist/lib/testing/agent-tester.d.ts +1 -0
- package/dist/lib/testing/agent-tester.d.ts.map +1 -1
- package/dist/lib/testing/agent-tester.js.map +1 -1
- package/dist/lib/testing/client.d.ts +1 -1
- package/dist/lib/testing/client.d.ts.map +1 -1
- package/dist/lib/testing/client.js +4 -2
- package/dist/lib/testing/client.js.map +1 -1
- package/dist/lib/testing/compliance/comply.d.ts +8 -0
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +98 -7
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/spec-conformance.d.ts +6 -6
- package/dist/lib/testing/compliance/spec-conformance.d.ts.map +1 -1
- package/dist/lib/testing/compliance/spec-conformance.js +6 -6
- package/dist/lib/testing/compliance/spec-conformance.js.map +1 -1
- package/dist/lib/testing/compliance/summary.d.ts +5 -0
- package/dist/lib/testing/compliance/summary.d.ts.map +1 -1
- package/dist/lib/testing/compliance/summary.js +17 -0
- package/dist/lib/testing/compliance/summary.js.map +1 -1
- package/dist/lib/testing/comply-controller.d.ts +19 -0
- package/dist/lib/testing/comply-controller.d.ts.map +1 -1
- package/dist/lib/testing/comply-controller.js +11 -8
- package/dist/lib/testing/comply-controller.js.map +1 -1
- package/dist/lib/testing/index.d.ts +4 -3
- package/dist/lib/testing/index.d.ts.map +1 -1
- package/dist/lib/testing/index.js +13 -1
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.d.ts +4 -0
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.js +881 -0
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.js.map +1 -0
- package/dist/lib/testing/storyboard/compliance.d.ts +6 -0
- package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/compliance.js +8 -4
- package/dist/lib/testing/storyboard/compliance.js.map +1 -1
- package/dist/lib/testing/storyboard/index.d.ts +2 -1
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +9 -1
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/loader.d.ts +3 -2
- package/dist/lib/testing/storyboard/loader.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/loader.js +73 -2
- package/dist/lib/testing/storyboard/loader.js.map +1 -1
- package/dist/lib/testing/storyboard/path.d.ts +21 -0
- package/dist/lib/testing/storyboard/path.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/path.js +86 -0
- package/dist/lib/testing/storyboard/path.js.map +1 -1
- package/dist/lib/testing/storyboard/rate-limit-trip.d.ts +92 -0
- package/dist/lib/testing/storyboard/rate-limit-trip.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/rate-limit-trip.js +276 -0
- package/dist/lib/testing/storyboard/rate-limit-trip.js.map +1 -0
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +361 -28
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/seeding.d.ts +5 -4
- package/dist/lib/testing/storyboard/seeding.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/seeding.js +23 -3
- package/dist/lib/testing/storyboard/seeding.js.map +1 -1
- package/dist/lib/testing/storyboard/types.d.ts +108 -20
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/types.js +1 -0
- package/dist/lib/testing/storyboard/types.js.map +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts +18 -0
- package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/validations.js +238 -33
- package/dist/lib/testing/storyboard/validations.js.map +1 -1
- package/dist/lib/testing/test-controller.d.ts +17 -25
- package/dist/lib/testing/test-controller.d.ts.map +1 -1
- package/dist/lib/testing/test-controller.js.map +1 -1
- package/dist/lib/testing/types.d.ts +13 -1
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/types/check-governance.d.ts +1 -1
- package/dist/lib/types/comply-test-controller.d.ts +243 -3
- package/dist/lib/types/core.generated.d.ts +261 -21
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js +1 -1
- package/dist/lib/types/create-media-buy.d.ts +107 -3
- package/dist/lib/types/error-codes.d.ts +2 -2
- package/dist/lib/types/get-adcp-capabilities.d.ts +1 -1
- package/dist/lib/types/get-media-buys.d.ts +107 -3
- package/dist/lib/types/get-plan-audit-logs.d.ts +1 -1
- package/dist/lib/types/get-products.d.ts +104 -3
- package/dist/lib/types/inline-enums.generated.d.ts +27 -17
- package/dist/lib/types/inline-enums.generated.d.ts.map +1 -1
- package/dist/lib/types/inline-enums.generated.js +39 -28
- package/dist/lib/types/inline-enums.generated.js.map +1 -1
- package/dist/lib/types/manifest.generated.d.ts +7 -4
- package/dist/lib/types/manifest.generated.d.ts.map +1 -1
- package/dist/lib/types/manifest.generated.js +2 -2
- package/dist/lib/types/manifest.generated.js.map +1 -1
- package/dist/lib/types/report-plan-outcome.d.ts +1 -1
- package/dist/lib/types/schemas.generated.d.ts +714 -193
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +194 -79
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/sync-plans.d.ts +1 -1
- package/dist/lib/types/tools.generated.d.ts +331 -28
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/types/update-media-buy.d.ts +107 -3
- package/dist/lib/types/v3-1-beta/tools.generated.d.ts +20 -0
- package/dist/lib/types/v3-1-beta/tools.generated.d.ts.map +1 -1
- package/dist/lib/upstream-recorder/constants.d.ts +2 -0
- package/dist/lib/upstream-recorder/constants.d.ts.map +1 -0
- package/dist/lib/upstream-recorder/constants.js +5 -0
- package/dist/lib/upstream-recorder/constants.js.map +1 -0
- package/dist/lib/upstream-recorder/index.d.ts +20 -10
- package/dist/lib/upstream-recorder/index.d.ts.map +1 -1
- package/dist/lib/upstream-recorder/index.js +21 -10
- package/dist/lib/upstream-recorder/index.js.map +1 -1
- package/dist/lib/upstream-recorder/recorder.d.ts +65 -0
- package/dist/lib/upstream-recorder/recorder.d.ts.map +1 -1
- package/dist/lib/upstream-recorder/recorder.js +500 -47
- package/dist/lib/upstream-recorder/recorder.js.map +1 -1
- package/dist/lib/upstream-recorder/types.d.ts +109 -13
- package/dist/lib/upstream-recorder/types.d.ts.map +1 -1
- package/dist/lib/upstream-recorder/types.js.map +1 -1
- package/dist/lib/utils/adcp-version-config.d.ts +1 -0
- package/dist/lib/utils/adcp-version-config.d.ts.map +1 -1
- package/dist/lib/utils/adcp-version-config.js +21 -0
- package/dist/lib/utils/adcp-version-config.js.map +1 -1
- package/dist/lib/utils/capability-rollups.d.ts +5 -5
- package/dist/lib/utils/capability-rollups.d.ts.map +1 -1
- package/dist/lib/utils/capability-rollups.js +1 -1
- package/dist/lib/utils/capability-rollups.js.map +1 -1
- package/dist/lib/utils/json-depth.d.ts +2 -0
- package/dist/lib/utils/json-depth.d.ts.map +1 -0
- package/dist/lib/utils/json-depth.js +5 -0
- package/dist/lib/utils/json-depth.js.map +1 -0
- package/dist/lib/utils/media-buy-delivery-notification-builders.d.ts +1 -1
- package/dist/lib/utils/media-buy-delivery-notification-builders.d.ts.map +1 -1
- package/dist/lib/utils/preview-creative-builders.d.ts +1 -1
- package/dist/lib/utils/preview-creative-builders.d.ts.map +1 -1
- package/dist/lib/utils/redact-secrets.d.ts +13 -2
- package/dist/lib/utils/redact-secrets.d.ts.map +1 -1
- package/dist/lib/utils/redact-secrets.js +40 -13
- package/dist/lib/utils/redact-secrets.js.map +1 -1
- package/dist/lib/utils/response-schemas.d.ts +1 -0
- package/dist/lib/utils/response-schemas.d.ts.map +1 -1
- package/dist/lib/utils/response-schemas.js +15 -0
- package/dist/lib/utils/response-schemas.js.map +1 -1
- package/dist/lib/utils/response-unwrapper.d.ts +2 -1
- package/dist/lib/utils/response-unwrapper.d.ts.map +1 -1
- package/dist/lib/utils/response-unwrapper.js +11 -3
- package/dist/lib/utils/response-unwrapper.js.map +1 -1
- package/dist/lib/utils/tool-request-schemas.d.ts +31 -1
- package/dist/lib/utils/tool-request-schemas.d.ts.map +1 -1
- package/dist/lib/v2/format-schema/fetch.d.ts +13 -5
- package/dist/lib/v2/format-schema/fetch.d.ts.map +1 -1
- package/dist/lib/v2/format-schema/fetch.js +27 -16
- package/dist/lib/v2/format-schema/fetch.js.map +1 -1
- package/dist/lib/v2/format-schema/index.d.ts +13 -11
- package/dist/lib/v2/format-schema/index.d.ts.map +1 -1
- package/dist/lib/v2/format-schema/index.js +19 -12
- package/dist/lib/v2/format-schema/index.js.map +1 -1
- package/dist/lib/v2/format-schema/resolver.d.ts +71 -0
- package/dist/lib/v2/format-schema/resolver.d.ts.map +1 -0
- package/dist/lib/v2/format-schema/resolver.js +284 -0
- package/dist/lib/v2/format-schema/resolver.js.map +1 -0
- package/dist/lib/v2/format-schema/sandbox-refs.d.ts +6 -0
- package/dist/lib/v2/format-schema/sandbox-refs.d.ts.map +1 -1
- package/dist/lib/v2/format-schema/sandbox-refs.js +36 -15
- package/dist/lib/v2/format-schema/sandbox-refs.js.map +1 -1
- package/dist/lib/validation/schema-loader.d.ts.map +1 -1
- package/dist/lib/validation/schema-loader.js +48 -3
- package/dist/lib/validation/schema-loader.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/docs/guides/BUILD-AN-AGENT.md +7 -7
- package/docs/guides/CANONICAL-REFERENCE-RESOLVER.md +75 -0
- package/docs/llms.txt +37 -8
- package/examples/README.md +29 -16
- package/examples/hello_creative_adapter_ad_server.ts +8 -2
- package/examples/hello_seller_adapter_guaranteed.ts +26 -18
- package/examples/hello_seller_adapter_multi_tenant.ts +6 -6
- package/examples/hello_seller_adapter_social.ts +80 -4
- package/examples/hello_si_adapter_brand.ts +10 -21
- package/examples/hello_signals_adapter_marketplace.ts +184 -9
- package/examples/proxy-seller-snap/README.md +47 -0
- package/examples/proxy-seller-snap/index.ts +321 -0
- package/package.json +19 -4
- package/skills/build-creative-agent/SKILL.md +1 -15
- package/skills/build-decisioning-platform/SKILL.md +6 -1
- package/skills/build-seller-agent/SKILL.md +5 -2
- package/skills/build-si-agent/SKILL.md +2 -2
- package/skills/call-adcp-agent/SKILL.md +4 -1
- package/dist/lib/signing/response-verifier.d.ts +0 -105
- package/dist/lib/signing/response-verifier.d.ts.map +0 -1
- package/dist/lib/signing/response-verifier.js +0 -271
- package/dist/lib/signing/response-verifier.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type RequestLike, type
|
|
1
|
+
import { type RequestLike, type SignatureParams } from './canonicalize';
|
|
2
2
|
import type { AdcpUse } from './jwks-helpers';
|
|
3
3
|
import { type AdcpJsonWebKey, type AdcpSignAlg } from './types';
|
|
4
4
|
export interface SignerKey {
|
|
@@ -8,7 +8,6 @@ export interface SignerKey {
|
|
|
8
8
|
* Private JWK. MUST carry `adcp_use` matching the helper being called:
|
|
9
9
|
* - `signRequest` requires `adcp_use: 'request-signing'`
|
|
10
10
|
* - `signWebhook` requires `adcp_use: 'webhook-signing'`
|
|
11
|
-
* - `signResponse` requires `adcp_use: 'response-signing'`
|
|
12
11
|
*
|
|
13
12
|
* Mismatched or missing `adcp_use` throws at the signer with the same
|
|
14
13
|
* error code the verifier raises at step 8 — failure surfaces at
|
|
@@ -47,12 +46,12 @@ type Rfc9421AdcpUse = Exclude<AdcpUse, 'governance-signing'>;
|
|
|
47
46
|
* is skipped — preserves backward compat with adapters that pre-date the
|
|
48
47
|
* `SigningProvider.adcpUse` field. Adapter authors who want signer-side
|
|
49
48
|
* defense-in-depth set `adcpUse` on their provider; the async helpers
|
|
50
|
-
* (`signRequestAsync` / `signWebhookAsync`
|
|
51
|
-
*
|
|
49
|
+
* (`signRequestAsync` / `signWebhookAsync`) then enforce the binding
|
|
50
|
+
* parallel to the sync path.
|
|
52
51
|
*/
|
|
53
52
|
declare function assertProviderPurpose(provider: {
|
|
54
53
|
readonly keyid: string;
|
|
55
|
-
readonly adcpUse?:
|
|
54
|
+
readonly adcpUse?: string;
|
|
56
55
|
}, expected: Rfc9421AdcpUse): void;
|
|
57
56
|
export { assertProviderPurpose };
|
|
58
57
|
export interface SignRequestOptions {
|
|
@@ -154,110 +153,4 @@ export declare function prepareWebhookSignature(request: RequestLike, identity:
|
|
|
154
153
|
* conformant webhooks should use this instead of hand-rolling signatures.
|
|
155
154
|
*/
|
|
156
155
|
export declare function signWebhook(request: RequestLike, key: SignerKey, options?: SignWebhookOptions): SignedRequest;
|
|
157
|
-
export interface SignResponseOptions {
|
|
158
|
-
/**
|
|
159
|
-
* Cover a `Content-Digest` of the response body. Defaults to `true` when
|
|
160
|
-
* the response has a body.
|
|
161
|
-
*
|
|
162
|
-
* **Asymmetric with `signRequest`.** Request signing defaults to opt-in
|
|
163
|
-
* (`coverContentDigest: true` required to cover); response signing
|
|
164
|
-
* defaults to opt-out because an unbound body is the most common
|
|
165
|
-
* cross-purpose footgun for response signing — without a body digest,
|
|
166
|
-
* an attacker that can swap the payload but preserve headers can pass
|
|
167
|
-
* the signature check. The asymmetry is deliberate; callers that want
|
|
168
|
-
* to omit (e.g. when an upstream proxy computes the digest) pass
|
|
169
|
-
* `false` explicitly.
|
|
170
|
-
*/
|
|
171
|
-
coverContentDigest?: boolean;
|
|
172
|
-
/**
|
|
173
|
-
* Additional derived/header components to cover beyond
|
|
174
|
-
* {@link RESPONSE_MANDATORY_COMPONENTS}. The defaults already include
|
|
175
|
-
* `@status`, `@authority`, and `@target-uri`. Use this for `@method`
|
|
176
|
-
* (uncommon for responses — request method is usually implicit) or for
|
|
177
|
-
* custom headers (`x-content-type-options`, etc.).
|
|
178
|
-
*/
|
|
179
|
-
additionalComponents?: ReadonlyArray<string>;
|
|
180
|
-
label?: string;
|
|
181
|
-
windowSeconds?: number;
|
|
182
|
-
now?: () => number;
|
|
183
|
-
nonce?: string;
|
|
184
|
-
/**
|
|
185
|
-
* Override the signature tag. Defaults to `adcp/response-signing/v1`.
|
|
186
|
-
* Exposed so test suites can pin a wrong tag to exercise receiver
|
|
187
|
-
* rejection paths without mutating the signed headers post-hoc.
|
|
188
|
-
*/
|
|
189
|
-
tag?: string;
|
|
190
|
-
}
|
|
191
|
-
export interface SignedResponse {
|
|
192
|
-
status: number;
|
|
193
|
-
headers: Record<string, string>;
|
|
194
|
-
signatureBase: string;
|
|
195
|
-
params: SignatureParams;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Result of canonicalizing a response for signing — everything `signResponse`
|
|
199
|
-
* and `signResponseAsync` produce up to (but not including) the call into
|
|
200
|
-
* the signer/provider.
|
|
201
|
-
*/
|
|
202
|
-
export interface PreparedResponseSignature {
|
|
203
|
-
status: number;
|
|
204
|
-
components: string[];
|
|
205
|
-
params: SignatureParams;
|
|
206
|
-
/**
|
|
207
|
-
* Outbound response headers including `Content-Digest` when covered, but
|
|
208
|
-
* not yet including `Signature-Input` / `Signature` — those are appended
|
|
209
|
-
* by {@link finalizeResponseSignature}.
|
|
210
|
-
*/
|
|
211
|
-
headers: Record<string, string>;
|
|
212
|
-
/** Canonical signature base bytes (UTF-8). Pass to the signer/provider. */
|
|
213
|
-
base: string;
|
|
214
|
-
label: string;
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Canonicalize a response for RFC 9421 response-signing (§2.2.9). Pure
|
|
218
|
-
* (no I/O); shared between sync `signResponse` and async `signResponseAsync`
|
|
219
|
-
* so canonicalization can't drift between them. Covers
|
|
220
|
-
* {@link RESPONSE_MANDATORY_COMPONENTS} by default; adds `content-type` +
|
|
221
|
-
* `content-digest` automatically when the response carries a body. Callers
|
|
222
|
-
* can extend the covered set via
|
|
223
|
-
* {@link SignResponseOptions.additionalComponents}.
|
|
224
|
-
*
|
|
225
|
-
* **No purpose-binding gate** — same caveat as
|
|
226
|
-
* {@link prepareRequestSignature}. The convenience helper `signResponse`
|
|
227
|
-
* runs `assertKeyPurpose` before calling this.
|
|
228
|
-
*/
|
|
229
|
-
export declare function prepareResponseSignature(response: ResponseLike, identity: SignatureIdentity, options?: SignResponseOptions): PreparedResponseSignature;
|
|
230
|
-
/**
|
|
231
|
-
* Attach `Signature` / `Signature-Input` headers given the bytes returned
|
|
232
|
-
* by the signer/provider. Mirrors {@link finalizeRequestSignature} but
|
|
233
|
-
* returns a {@link SignedResponse} that carries the response status alongside
|
|
234
|
-
* the stamped headers so the caller can hand the whole object back to its
|
|
235
|
-
* HTTP layer.
|
|
236
|
-
*/
|
|
237
|
-
export declare function finalizeResponseSignature(prepared: PreparedResponseSignature, signature: Uint8Array): SignedResponse;
|
|
238
|
-
/**
|
|
239
|
-
* Sign an outbound response under the RFC 9421 response-signing profile
|
|
240
|
-
* (`tag=adcp/response-signing/v1`). Covers `@status` and `@authority` by
|
|
241
|
-
* default, plus `content-type` + `content-digest` when a body is present.
|
|
242
|
-
* Servers emitting signed responses (e.g. seller agents whose clients
|
|
243
|
-
* verify `get_products` payloads before parsing) should use this instead
|
|
244
|
-
* of hand-rolling signatures.
|
|
245
|
-
*
|
|
246
|
-
* Returns headers as a plain `Record<string, string>` for direct use with
|
|
247
|
-
* Express (`res.set(signed.headers)`). For Fetch / Node `Response` (where
|
|
248
|
-
* the headers object is immutable on construction), spread into the
|
|
249
|
-
* `Headers` constructor or `setHeader` loop:
|
|
250
|
-
*
|
|
251
|
-
* ```ts
|
|
252
|
-
* // Express
|
|
253
|
-
* res.status(signed.status).set(signed.headers).send(body);
|
|
254
|
-
*
|
|
255
|
-
* // Fetch / Workers / Node 20+ Response
|
|
256
|
-
* return new Response(body, { status: signed.status, headers: signed.headers });
|
|
257
|
-
*
|
|
258
|
-
* // Node `http.ServerResponse`
|
|
259
|
-
* res.writeHead(signed.status, signed.headers).end(body);
|
|
260
|
-
* ```
|
|
261
|
-
*/
|
|
262
|
-
export declare function signResponse(response: ResponseLike, key: SignerKey, options?: SignResponseOptions): SignedResponse;
|
|
263
156
|
//# sourceMappingURL=signer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../../src/lib/signing/signer.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../../src/lib/signing/signer.ts"],"names":[],"mappings":"AACA,OAAO,EAA6C,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGnH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,SAAS,GAAG,mBAAmB,CAAC;IACrC;;;;;;;;;;OAUG;IACH,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH;;;;;;;GAOG;AACH,KAAK,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;AAM7D;;;;;;;;;;GAUG;AACH,iBAAS,qBAAqB,CAC5B,QAAQ,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/D,QAAQ,EAAE,cAAc,GACvB,IAAI,CAGN;AAwBD,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,WAAW,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC;IACxB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,kBAAuB,GAC/B,wBAAwB,CA8B1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,SAAS,EAAE,UAAU,GAAG,aAAa,CAMjH;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,GAAE,kBAAuB,GAAG,aAAa,CAKjH;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,kBAAuB,GAC/B,wBAAwB,CAuB1B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,GAAE,kBAAuB,GAAG,aAAa,CAKjH"}
|
|
@@ -6,9 +6,6 @@ exports.finalizeRequestSignature = finalizeRequestSignature;
|
|
|
6
6
|
exports.signRequest = signRequest;
|
|
7
7
|
exports.prepareWebhookSignature = prepareWebhookSignature;
|
|
8
8
|
exports.signWebhook = signWebhook;
|
|
9
|
-
exports.prepareResponseSignature = prepareResponseSignature;
|
|
10
|
-
exports.finalizeResponseSignature = finalizeResponseSignature;
|
|
11
|
-
exports.signResponse = signResponse;
|
|
12
9
|
const crypto_1 = require("crypto");
|
|
13
10
|
const canonicalize_1 = require("./canonicalize");
|
|
14
11
|
const content_digest_1 = require("./content-digest");
|
|
@@ -26,8 +23,8 @@ function assertKeyPurpose(key, expected) {
|
|
|
26
23
|
* is skipped — preserves backward compat with adapters that pre-date the
|
|
27
24
|
* `SigningProvider.adcpUse` field. Adapter authors who want signer-side
|
|
28
25
|
* defense-in-depth set `adcpUse` on their provider; the async helpers
|
|
29
|
-
* (`signRequestAsync` / `signWebhookAsync`
|
|
30
|
-
*
|
|
26
|
+
* (`signRequestAsync` / `signWebhookAsync`) then enforce the binding
|
|
27
|
+
* parallel to the sync path.
|
|
31
28
|
*/
|
|
32
29
|
function assertProviderPurpose(provider, expected) {
|
|
33
30
|
if (provider.adcpUse === undefined)
|
|
@@ -45,8 +42,6 @@ function throwIfPurposeMismatch(keyid, actual, expected) {
|
|
|
45
42
|
throw new errors_1.RequestSignatureError('request_signature_key_purpose_invalid', 8, message);
|
|
46
43
|
case 'webhook-signing':
|
|
47
44
|
throw new errors_1.WebhookSignatureError('webhook_signature_key_purpose_invalid', 8, message);
|
|
48
|
-
case 'response-signing':
|
|
49
|
-
throw new errors_1.ResponseSignatureError('response_signature_key_purpose_invalid', 8, message);
|
|
50
45
|
default: {
|
|
51
46
|
// Compile-time exhaustiveness: a future widening of `Rfc9421AdcpUse`
|
|
52
47
|
// (typically because `AdcpUse` grew an RFC-9421 member) must add a
|
|
@@ -166,97 +161,6 @@ function signWebhook(request, key, options = {}) {
|
|
|
166
161
|
const signature = produceSignature(key, Buffer.from(prepared.base, 'utf8'));
|
|
167
162
|
return finalizeRequestSignature(prepared, signature);
|
|
168
163
|
}
|
|
169
|
-
/**
|
|
170
|
-
* Canonicalize a response for RFC 9421 response-signing (§2.2.9). Pure
|
|
171
|
-
* (no I/O); shared between sync `signResponse` and async `signResponseAsync`
|
|
172
|
-
* so canonicalization can't drift between them. Covers
|
|
173
|
-
* {@link RESPONSE_MANDATORY_COMPONENTS} by default; adds `content-type` +
|
|
174
|
-
* `content-digest` automatically when the response carries a body. Callers
|
|
175
|
-
* can extend the covered set via
|
|
176
|
-
* {@link SignResponseOptions.additionalComponents}.
|
|
177
|
-
*
|
|
178
|
-
* **No purpose-binding gate** — same caveat as
|
|
179
|
-
* {@link prepareRequestSignature}. The convenience helper `signResponse`
|
|
180
|
-
* runs `assertKeyPurpose` before calling this.
|
|
181
|
-
*/
|
|
182
|
-
function prepareResponseSignature(response, identity, options = {}) {
|
|
183
|
-
const now = options.now ? options.now() : Math.floor(Date.now() / 1000);
|
|
184
|
-
const windowSeconds = Math.min(options.windowSeconds ?? 300, types_1.MAX_SIGNATURE_WINDOW_SECONDS);
|
|
185
|
-
const nonce = options.nonce ?? base64UrlRandom(16);
|
|
186
|
-
const label = options.label ?? 'sig1';
|
|
187
|
-
const hasBody = (response.body ?? '').length > 0;
|
|
188
|
-
const coverDigest = (options.coverContentDigest ?? true) && hasBody;
|
|
189
|
-
const headers = { ...flattenHeaders(response.headers) };
|
|
190
|
-
if (coverDigest) {
|
|
191
|
-
headers['Content-Digest'] = (0, content_digest_1.computeContentDigest)(response.body ?? '');
|
|
192
|
-
}
|
|
193
|
-
const components = [...types_1.RESPONSE_MANDATORY_COMPONENTS];
|
|
194
|
-
if (hasBody)
|
|
195
|
-
components.push('content-type');
|
|
196
|
-
if (coverDigest)
|
|
197
|
-
components.push('content-digest');
|
|
198
|
-
if (options.additionalComponents) {
|
|
199
|
-
for (const c of options.additionalComponents) {
|
|
200
|
-
if (!components.includes(c))
|
|
201
|
-
components.push(c);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
const params = {
|
|
205
|
-
created: now,
|
|
206
|
-
expires: now + windowSeconds,
|
|
207
|
-
nonce,
|
|
208
|
-
keyid: identity.keyid,
|
|
209
|
-
alg: identity.alg,
|
|
210
|
-
tag: options.tag ?? types_1.RESPONSE_SIGNING_TAG,
|
|
211
|
-
};
|
|
212
|
-
const normalizedResponse = { ...response, headers };
|
|
213
|
-
const base = (0, canonicalize_1.buildResponseSignatureBase)(components, normalizedResponse, params);
|
|
214
|
-
return { status: response.status, components, params, headers, base, label };
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Attach `Signature` / `Signature-Input` headers given the bytes returned
|
|
218
|
-
* by the signer/provider. Mirrors {@link finalizeRequestSignature} but
|
|
219
|
-
* returns a {@link SignedResponse} that carries the response status alongside
|
|
220
|
-
* the stamped headers so the caller can hand the whole object back to its
|
|
221
|
-
* HTTP layer.
|
|
222
|
-
*/
|
|
223
|
-
function finalizeResponseSignature(prepared, signature) {
|
|
224
|
-
const headers = { ...prepared.headers };
|
|
225
|
-
const sigB64 = Buffer.from(signature).toString('base64url');
|
|
226
|
-
headers['Signature-Input'] = `${prepared.label}=${(0, canonicalize_1.formatSignatureParams)(prepared.components, prepared.params)}`;
|
|
227
|
-
headers['Signature'] = `${prepared.label}=:${sigB64}:`;
|
|
228
|
-
return { status: prepared.status, headers, signatureBase: prepared.base, params: prepared.params };
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Sign an outbound response under the RFC 9421 response-signing profile
|
|
232
|
-
* (`tag=adcp/response-signing/v1`). Covers `@status` and `@authority` by
|
|
233
|
-
* default, plus `content-type` + `content-digest` when a body is present.
|
|
234
|
-
* Servers emitting signed responses (e.g. seller agents whose clients
|
|
235
|
-
* verify `get_products` payloads before parsing) should use this instead
|
|
236
|
-
* of hand-rolling signatures.
|
|
237
|
-
*
|
|
238
|
-
* Returns headers as a plain `Record<string, string>` for direct use with
|
|
239
|
-
* Express (`res.set(signed.headers)`). For Fetch / Node `Response` (where
|
|
240
|
-
* the headers object is immutable on construction), spread into the
|
|
241
|
-
* `Headers` constructor or `setHeader` loop:
|
|
242
|
-
*
|
|
243
|
-
* ```ts
|
|
244
|
-
* // Express
|
|
245
|
-
* res.status(signed.status).set(signed.headers).send(body);
|
|
246
|
-
*
|
|
247
|
-
* // Fetch / Workers / Node 20+ Response
|
|
248
|
-
* return new Response(body, { status: signed.status, headers: signed.headers });
|
|
249
|
-
*
|
|
250
|
-
* // Node `http.ServerResponse`
|
|
251
|
-
* res.writeHead(signed.status, signed.headers).end(body);
|
|
252
|
-
* ```
|
|
253
|
-
*/
|
|
254
|
-
function signResponse(response, key, options = {}) {
|
|
255
|
-
assertKeyPurpose(key, 'response-signing');
|
|
256
|
-
const prepared = prepareResponseSignature(response, { keyid: key.keyid, alg: key.alg }, options);
|
|
257
|
-
const signature = produceSignature(key, Buffer.from(prepared.base, 'utf8'));
|
|
258
|
-
return finalizeResponseSignature(prepared, signature);
|
|
259
|
-
}
|
|
260
164
|
function produceSignature(key, data) {
|
|
261
165
|
const privateKey = (0, crypto_1.createPrivateKey)({
|
|
262
166
|
key: key.privateKey,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../../src/lib/signing/signer.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../../src/lib/signing/signer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { SigningProvider } from './provider';
|
|
2
2
|
import type { SignerKey } from './signer';
|
|
3
|
-
import type
|
|
3
|
+
import { type AdcpUse } from './jwks-helpers';
|
|
4
4
|
import type { AdcpJsonWebKey, AdcpSignAlg } from './types';
|
|
5
5
|
/**
|
|
6
6
|
* Environment variable that lets operators acknowledge an in-memory signer
|
|
@@ -18,13 +18,13 @@ export interface InMemorySigningProviderOptions {
|
|
|
18
18
|
privateKey: AdcpJsonWebKey;
|
|
19
19
|
/**
|
|
20
20
|
* Optional purpose binding. When supplied, the async signing helpers
|
|
21
|
-
* (`signRequestAsync` / `signWebhookAsync`
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
21
|
+
* (`signRequestAsync` / `signWebhookAsync`) refuse to sign with a
|
|
22
|
+
* mismatched purpose — same defense-in-depth gate the sync path's
|
|
23
|
+
* `SignerKey.privateKey.adcp_use` provides. Defaults to the value carried
|
|
24
|
+
* on `privateKey.adcp_use` when present, so adapters minted via
|
|
25
|
+
* `pemToAdcpJwk({ adcp_use: ... })` get the binding for free.
|
|
26
26
|
*/
|
|
27
|
-
adcpUse?:
|
|
27
|
+
adcpUse?: string;
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* Reference {@link SigningProvider} that holds the private JWK in process
|
|
@@ -41,7 +41,7 @@ export declare class InMemorySigningProvider implements SigningProvider {
|
|
|
41
41
|
readonly keyid: string;
|
|
42
42
|
readonly algorithm: AdcpSignAlg;
|
|
43
43
|
readonly fingerprint: string;
|
|
44
|
-
readonly adcpUse?:
|
|
44
|
+
readonly adcpUse?: string;
|
|
45
45
|
private readonly privateKey;
|
|
46
46
|
constructor(options: InMemorySigningProviderOptions);
|
|
47
47
|
sign(payload: Uint8Array): Promise<Uint8Array>;
|
|
@@ -82,8 +82,8 @@ export interface MintEphemeralEd25519KeyOptions {
|
|
|
82
82
|
/**
|
|
83
83
|
* AdCP purpose binding tagged on both JWKs. Accepts every member of
|
|
84
84
|
* {@link AdcpUse} — see that type for the canonical list (currently
|
|
85
|
-
* `'webhook-signing'`, `'request-signing'`, `'
|
|
86
|
-
*
|
|
85
|
+
* `'webhook-signing'`, `'request-signing'`, and `'governance-signing'`).
|
|
86
|
+
* Defaults to `'webhook-signing'`.
|
|
87
87
|
*
|
|
88
88
|
* For production request-signing keys use `pemToAdcpJwk()` or a KMS-backed
|
|
89
89
|
* `SigningProvider` instead.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/lib/signing/testing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/lib/signing/testing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,gCAAgC,CAAC;AAExE,MAAM,WAAW,8BAA8B;IAC7C,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,SAAS,EAAE,WAAW,CAAC;IACvB,4CAA4C;IAC5C,UAAU,EAAE,cAAc,CAAC;IAC3B;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAEhC,OAAO,EAAE,8BAA8B;IAoC7C,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAQrD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,eAAe,CAMnE;AAED,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,SAAS,EAAE,WAAW,CAAC;IACvB,kFAAkF;IAClF,SAAS,EAAE,cAAc,CAAC;IAC1B;;;;OAIG;IACH,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,MAAM,WAAW,8BAA8B;IAC7C;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,CAAC,EAAE,8BAA8B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqCjH"}
|
|
@@ -37,6 +37,7 @@ exports.InMemorySigningProvider = exports.ALLOW_IN_MEMORY_SIGNER_ENV = void 0;
|
|
|
37
37
|
exports.signerKeyToProvider = signerKeyToProvider;
|
|
38
38
|
exports.mintEphemeralEd25519Key = mintEphemeralEd25519Key;
|
|
39
39
|
const node_crypto_1 = require("node:crypto");
|
|
40
|
+
const jwks_helpers_1 = require("./jwks-helpers");
|
|
40
41
|
/**
|
|
41
42
|
* Environment variable that lets operators acknowledge an in-memory signer
|
|
42
43
|
* is intentional in a `NODE_ENV=production` deployment (CI runs with
|
|
@@ -44,15 +45,6 @@ const node_crypto_1 = require("node:crypto");
|
|
|
44
45
|
* production-time guard.
|
|
45
46
|
*/
|
|
46
47
|
exports.ALLOW_IN_MEMORY_SIGNER_ENV = 'ADCP_ALLOW_IN_MEMORY_SIGNER';
|
|
47
|
-
const ADCP_USE_VALUES = new Set([
|
|
48
|
-
'request-signing',
|
|
49
|
-
'webhook-signing',
|
|
50
|
-
'response-signing',
|
|
51
|
-
'governance-signing',
|
|
52
|
-
]);
|
|
53
|
-
function isAdcpUse(value) {
|
|
54
|
-
return typeof value === 'string' && ADCP_USE_VALUES.has(value);
|
|
55
|
-
}
|
|
56
48
|
/**
|
|
57
49
|
* Reference {@link SigningProvider} that holds the private JWK in process
|
|
58
50
|
* memory. Useful for unit tests, conformance vectors, and local development.
|
|
@@ -88,10 +80,10 @@ class InMemorySigningProvider {
|
|
|
88
80
|
this.keyid = options.keyid;
|
|
89
81
|
this.algorithm = options.algorithm;
|
|
90
82
|
this.privateKey = options.privateKey;
|
|
91
|
-
// Prefer explicit `adcpUse` option; fall back to
|
|
92
|
-
//
|
|
83
|
+
// Prefer explicit `adcpUse` option; fall back to raw JWK metadata so
|
|
84
|
+
// retired/unknown purposes still fail closed at the async signer gate.
|
|
93
85
|
const jwkUse = options.privateKey.adcp_use;
|
|
94
|
-
this.adcpUse = options.adcpUse ?? (
|
|
86
|
+
this.adcpUse = options.adcpUse ?? (typeof jwkUse === 'string' ? jwkUse : undefined);
|
|
95
87
|
// Mirrors the historical `privateKeyFingerprint` derivation — same input,
|
|
96
88
|
// same 64-bit cache disambiguator, so behavior carries over for callers
|
|
97
89
|
// who switch from the inline `request_signing` shape to a provider while
|
|
@@ -153,9 +145,10 @@ function signerKeyToProvider(key) {
|
|
|
153
145
|
* ```
|
|
154
146
|
*/
|
|
155
147
|
async function mintEphemeralEd25519Key(opts) {
|
|
156
|
-
const { generateKeyPair, exportJWK } = await Promise.resolve().then(() => __importStar(require('jose')));
|
|
157
148
|
const resolvedKid = opts?.kid ?? (0, node_crypto_1.randomUUID)();
|
|
158
149
|
const adcpUse = opts?.adcp_use ?? 'webhook-signing';
|
|
150
|
+
(0, jwks_helpers_1.assertAdcpUse)(adcpUse, 'mintEphemeralEd25519Key');
|
|
151
|
+
const { generateKeyPair, exportJWK } = await Promise.resolve().then(() => __importStar(require('jose')));
|
|
159
152
|
const { publicKey: pubKeyObj, privateKey: privKeyObj } = await generateKeyPair('EdDSA', {
|
|
160
153
|
crv: 'Ed25519',
|
|
161
154
|
extractable: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../src/lib/signing/testing.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../src/lib/signing/testing.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,16 +84,6 @@ export type VerifyResult = ({
|
|
|
84
84
|
verified_at: number;
|
|
85
85
|
};
|
|
86
86
|
export declare const REQUEST_SIGNING_TAG = "adcp/request-signing/v1";
|
|
87
|
-
/**
|
|
88
|
-
* Tag value for the AdCP response-signing profile (RFC 9421 §2.2.9).
|
|
89
|
-
*
|
|
90
|
-
* Signer ships in #1823; verifier (`verifyResponseSignature`) ships in
|
|
91
|
-
* #1826. The wire format is now exercised both directions inside this SDK
|
|
92
|
-
* via round-trip tests. The `v1` suffix gives a clean break path if cross-
|
|
93
|
-
* SDK interop testing later surfaces an incompat — any breaking change
|
|
94
|
-
* ships as `v2` and verifiers reject `v1`.
|
|
95
|
-
*/
|
|
96
|
-
export declare const RESPONSE_SIGNING_TAG = "adcp/response-signing/v1";
|
|
97
87
|
export declare const ALLOWED_ALGS: Set<string>;
|
|
98
88
|
/**
|
|
99
89
|
* Wire-format algorithm identifier — the string that appears in
|
|
@@ -103,30 +93,4 @@ export type AdcpSignAlg = 'ed25519' | 'ecdsa-p256-sha256';
|
|
|
103
93
|
export declare const MAX_SIGNATURE_WINDOW_SECONDS = 300;
|
|
104
94
|
export declare const CLOCK_SKEW_TOLERANCE_SECONDS = 60;
|
|
105
95
|
export declare const MANDATORY_COMPONENTS: ReadonlyArray<string>;
|
|
106
|
-
/**
|
|
107
|
-
* Minimum derived components covered by a response signature under the AdCP
|
|
108
|
-
* response-signing profile (RFC 9421 §2.2.9).
|
|
109
|
-
*
|
|
110
|
-
* - `@status` — binds the signature to the response status code.
|
|
111
|
-
* - `@authority` — binds it to the request origin the response was emitted
|
|
112
|
-
* for (so a compromised origin can't cross-sign for a sibling tenant on
|
|
113
|
-
* the same fleet).
|
|
114
|
-
* - `@target-uri` — binds the signature to the specific request path + query,
|
|
115
|
-
* preventing a multi-tenant seller from emitting interchangeable signatures
|
|
116
|
-
* across endpoints sharing the same authority. Matches RFC 9421 §B.2.5
|
|
117
|
-
* examples for response signing.
|
|
118
|
-
*
|
|
119
|
-
* `content-type` + `content-digest` are added at signing time when the
|
|
120
|
-
* response carries a body — `content-digest` is opt-out via
|
|
121
|
-
* `coverContentDigest: false` because an unbound body is the most common
|
|
122
|
-
* cross-purpose footgun for response signing. Callers can extend the
|
|
123
|
-
* covered set further via `SignResponseOptions.additionalComponents`
|
|
124
|
-
* (e.g. `@method`, custom headers).
|
|
125
|
-
*
|
|
126
|
-
* Signer ships in #1823; verifier (`verifyResponseSignature`) ships in
|
|
127
|
-
* #1826. The wire format is now exercised both directions inside this SDK
|
|
128
|
-
* via round-trip tests. The `v1` tag suffix gives a clean break path if
|
|
129
|
-
* cross-SDK interop testing later surfaces an incompat.
|
|
130
|
-
*/
|
|
131
|
-
export declare const RESPONSE_MANDATORY_COMPONENTS: ReadonlyArray<string>;
|
|
132
96
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/signing/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEtE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,qBAAqB,EAAE,mBAAmB,CAAC;IAC3C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,CAAC,CAAC,EAAE,MAAM,CAAC;IACX;;;;;OAKG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,cAAc,CAAC,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnH,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAC7D
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/signing/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEtE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,qBAAqB,EAAE,mBAAmB,CAAC;IAC3C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,CAAC,CAAC,EAAE,MAAM,CAAC;IACX;;;;;OAKG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,cAAc,CAAC,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnH,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAC7D,eAAO,MAAM,YAAY,aAA4C,CAAC;AACtE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,mBAAmB,CAAC;AAC1D,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAC/C,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAA4C,CAAC"}
|
|
@@ -1,45 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.MANDATORY_COMPONENTS = exports.CLOCK_SKEW_TOLERANCE_SECONDS = exports.MAX_SIGNATURE_WINDOW_SECONDS = exports.ALLOWED_ALGS = exports.REQUEST_SIGNING_TAG = void 0;
|
|
4
4
|
exports.REQUEST_SIGNING_TAG = 'adcp/request-signing/v1';
|
|
5
|
-
/**
|
|
6
|
-
* Tag value for the AdCP response-signing profile (RFC 9421 §2.2.9).
|
|
7
|
-
*
|
|
8
|
-
* Signer ships in #1823; verifier (`verifyResponseSignature`) ships in
|
|
9
|
-
* #1826. The wire format is now exercised both directions inside this SDK
|
|
10
|
-
* via round-trip tests. The `v1` suffix gives a clean break path if cross-
|
|
11
|
-
* SDK interop testing later surfaces an incompat — any breaking change
|
|
12
|
-
* ships as `v2` and verifiers reject `v1`.
|
|
13
|
-
*/
|
|
14
|
-
exports.RESPONSE_SIGNING_TAG = 'adcp/response-signing/v1';
|
|
15
5
|
exports.ALLOWED_ALGS = new Set(['ed25519', 'ecdsa-p256-sha256']);
|
|
16
6
|
exports.MAX_SIGNATURE_WINDOW_SECONDS = 300;
|
|
17
7
|
exports.CLOCK_SKEW_TOLERANCE_SECONDS = 60;
|
|
18
8
|
exports.MANDATORY_COMPONENTS = ['@method', '@target-uri', '@authority'];
|
|
19
|
-
/**
|
|
20
|
-
* Minimum derived components covered by a response signature under the AdCP
|
|
21
|
-
* response-signing profile (RFC 9421 §2.2.9).
|
|
22
|
-
*
|
|
23
|
-
* - `@status` — binds the signature to the response status code.
|
|
24
|
-
* - `@authority` — binds it to the request origin the response was emitted
|
|
25
|
-
* for (so a compromised origin can't cross-sign for a sibling tenant on
|
|
26
|
-
* the same fleet).
|
|
27
|
-
* - `@target-uri` — binds the signature to the specific request path + query,
|
|
28
|
-
* preventing a multi-tenant seller from emitting interchangeable signatures
|
|
29
|
-
* across endpoints sharing the same authority. Matches RFC 9421 §B.2.5
|
|
30
|
-
* examples for response signing.
|
|
31
|
-
*
|
|
32
|
-
* `content-type` + `content-digest` are added at signing time when the
|
|
33
|
-
* response carries a body — `content-digest` is opt-out via
|
|
34
|
-
* `coverContentDigest: false` because an unbound body is the most common
|
|
35
|
-
* cross-purpose footgun for response signing. Callers can extend the
|
|
36
|
-
* covered set further via `SignResponseOptions.additionalComponents`
|
|
37
|
-
* (e.g. `@method`, custom headers).
|
|
38
|
-
*
|
|
39
|
-
* Signer ships in #1823; verifier (`verifyResponseSignature`) ships in
|
|
40
|
-
* #1826. The wire format is now exercised both directions inside this SDK
|
|
41
|
-
* via round-trip tests. The `v1` tag suffix gives a clean break path if
|
|
42
|
-
* cross-SDK interop testing later surfaces an incompat.
|
|
43
|
-
*/
|
|
44
|
-
exports.RESPONSE_MANDATORY_COMPONENTS = ['@status', '@authority', '@target-uri'];
|
|
45
9
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/signing/types.ts"],"names":[],"mappings":";;;AAsFa,QAAA,mBAAmB,GAAG,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/signing/types.ts"],"names":[],"mappings":";;;AAsFa,QAAA,mBAAmB,GAAG,yBAAyB,CAAC;AAChD,QAAA,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAMzD,QAAA,4BAA4B,GAAG,GAAG,CAAC;AACnC,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAClC,QAAA,oBAAoB,GAA0B,CAAC,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC"}
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
24
|
export type { TestScenario, TestOptions, TestStepResult, AgentProfile, TestResult, SuiteResult, TaskResult, Logger, } from './types';
|
|
25
|
+
export type { TestClient } from './client';
|
|
25
26
|
export { setAgentTesterLogger, getLogger, createTestClient, runStep } from './client';
|
|
26
27
|
export { formatTestResults, formatTestResultsJSON, formatTestResultsSummary } from './formatter';
|
|
27
28
|
import type { TestScenario, TestOptions, TestResult } from './types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-tester.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/agent-tester.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,YAAY,EACV,YAAY,EACZ,WAAW,EACX,cAAc,EACd,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAU,EACV,MAAM,GACP,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-tester.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/agent-tester.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,YAAY,EACV,YAAY,EACZ,WAAW,EACX,cAAc,EACd,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAU,EACV,MAAM,GACP,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AA0DjG,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAgC,MAAM,SAAS,CAAC;AAGnG;;GAEG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CAyWrB;AAGD,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EAEvB,2BAA2B,EAC3B,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,gCAAgC,EAChC,8BAA8B,EAC9B,2BAA2B,EAC3B,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAElB,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EAEpB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EAExB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EAEnB,kBAAkB,EAClB,0BAA0B,EAC1B,UAAU,EACV,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
|