@adcp/sdk 6.9.0 → 6.11.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/bin/adcp.js +285 -5
- package/compliance/cache/3.0.6.previous/domains/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/domains/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/domains/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/index.json +324 -0
- package/compliance/cache/3.0.6.previous/protocols/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/protocols/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/protocols/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/specialisms/audience-sync/index.yaml +280 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.0.6.previous/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.0.6.previous/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-ad-server/index.yaml +383 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/generative-seller.yaml +758 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/index.yaml +746 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-template/index.yaml +413 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-aware-seller/index.yaml +136 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.0.6.previous/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-broadcast-tv/index.yaml +689 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-catalog-driven/index.yaml +779 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-guaranteed/index.yaml +504 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-non-guaranteed/index.yaml +428 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-proposal-mode/index.yaml +520 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-social/index.yaml +584 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/index.yaml +415 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/scenarios/governance_denied.yaml +207 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-owned/index.yaml +316 -0
- package/compliance/cache/3.0.6.previous/test-kits/acme-outdoor.yaml +210 -0
- package/compliance/cache/3.0.6.previous/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.0.6.previous/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.0.6.previous/test-kits/substitution-observer-runner.yaml +690 -0
- package/compliance/cache/3.0.6.previous/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.0.6.previous/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/README.md +219 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.0.6.previous/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.0.6.previous/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.0.6.previous/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.0.6.previous/universal/deterministic-testing.yaml +1343 -0
- package/compliance/cache/3.0.6.previous/universal/error-compliance.yaml +474 -0
- package/compliance/cache/3.0.6.previous/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.0.6.previous/universal/get-signals-pagination-integrity.yaml +211 -0
- package/compliance/cache/3.0.6.previous/universal/idempotency.yaml +593 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-creative-formats.yaml +258 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-list-accounts.yaml +262 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.0.6.previous/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/runner-output-contract.yaml +358 -0
- package/compliance/cache/3.0.6.previous/universal/schema-validation.yaml +526 -0
- package/compliance/cache/3.0.6.previous/universal/security.yaml +431 -0
- package/compliance/cache/3.0.6.previous/universal/signed-requests.yaml +205 -0
- package/compliance/cache/3.0.6.previous/universal/storyboard-schema.yaml +1176 -0
- package/compliance/cache/3.0.6.previous/universal/v3-envelope-integrity.yaml +106 -0
- package/compliance/cache/3.0.6.previous/universal/webhook-emission.yaml +337 -0
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.ts +33 -0
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +127 -1
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/credential-policy.d.ts +221 -0
- package/dist/lib/server/credential-policy.d.ts.map +1 -0
- package/dist/lib/server/credential-policy.js +260 -0
- package/dist/lib/server/credential-policy.js.map +1 -0
- package/dist/lib/server/decisioning/async-outcome.d.ts +17 -0
- package/dist/lib/server/decisioning/async-outcome.d.ts.map +1 -1
- package/dist/lib/server/decisioning/async-outcome.js +23 -18
- package/dist/lib/server/decisioning/async-outcome.js.map +1 -1
- package/dist/lib/server/decisioning/context.d.ts +8 -2
- package/dist/lib/server/decisioning/context.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.d.ts +1 -0
- package/dist/lib/server/decisioning/index.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +6 -4
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js +5 -2
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts +5 -0
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.js +4 -1
- package/dist/lib/server/decisioning/runtime/task-registry.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.js +10 -2
- package/dist/lib/server/decisioning/runtime/to-context.js.map +1 -1
- package/dist/lib/server/dynamic-registry.d.ts +219 -0
- package/dist/lib/server/dynamic-registry.d.ts.map +1 -0
- package/dist/lib/server/dynamic-registry.js +245 -0
- package/dist/lib/server/dynamic-registry.js.map +1 -0
- package/dist/lib/server/index.d.ts +8 -0
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +15 -4
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/operational-platform.d.ts +239 -0
- package/dist/lib/server/operational-platform.d.ts.map +1 -0
- package/dist/lib/server/operational-platform.js +94 -0
- package/dist/lib/server/operational-platform.js.map +1 -0
- package/dist/lib/server/test-controller.d.ts +2 -0
- package/dist/lib/server/test-controller.d.ts.map +1 -1
- package/dist/lib/server/test-controller.js +6 -11
- package/dist/lib/server/test-controller.js.map +1 -1
- package/dist/lib/server/wire-safe.d.ts +211 -0
- package/dist/lib/server/wire-safe.d.ts.map +1 -0
- package/dist/lib/server/wire-safe.js +231 -0
- package/dist/lib/server/wire-safe.js.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts +168 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.js +172 -0
- package/dist/lib/server/wire-spec-fields.generated.js.map +1 -0
- package/dist/lib/testing/compliance/index.d.ts +2 -0
- package/dist/lib/testing/compliance/index.d.ts.map +1 -1
- package/dist/lib/testing/compliance/index.js +6 -1
- package/dist/lib/testing/compliance/index.js.map +1 -1
- package/dist/lib/testing/compliance/summary.d.ts +77 -0
- package/dist/lib/testing/compliance/summary.d.ts.map +1 -0
- package/dist/lib/testing/compliance/summary.js +176 -0
- package/dist/lib/testing/compliance/summary.js.map +1 -0
- package/dist/lib/testing/comply-controller.d.ts +2 -0
- package/dist/lib/testing/comply-controller.d.ts.map +1 -1
- package/dist/lib/testing/comply-controller.js.map +1 -1
- package/dist/lib/testing/storyboard/compliance.d.ts +26 -0
- package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/compliance.js +51 -0
- package/dist/lib/testing/storyboard/compliance.js.map +1 -1
- package/dist/lib/testing/storyboard/index.d.ts +2 -2
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +4 -2
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +58 -5
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-spec field discipline at the operational fan-out boundary.
|
|
3
|
+
*
|
|
4
|
+
* `WireSafe<T>` is a branded type that signals "this object has been
|
|
5
|
+
* stripped to AdCP wire-spec fields and is safe to forward upstream."
|
|
6
|
+
* The brand is constructed only by {@link pickWireSpecFields} (or
|
|
7
|
+
* variants). Code that spreads a buyer request directly cannot satisfy
|
|
8
|
+
* the brand — `{ ...buyerReq, paused: true }` is `T`, not
|
|
9
|
+
* `WireSafe<T>`.
|
|
10
|
+
*
|
|
11
|
+
* The brand is the L2 of #1529: where L1 (`credentialPolicy`,
|
|
12
|
+
* `src/lib/server/credential-policy.ts`) catches credential-shaped
|
|
13
|
+
* keys at the buyer-facing dispatch boundary, L2 catches structural
|
|
14
|
+
* leakage at the operational dispatch boundary — storefront fan-out
|
|
15
|
+
* code that picks per-target args from a buyer request, where the
|
|
16
|
+
* scrub happens BEFORE the credential scan would have run on the
|
|
17
|
+
* upstream call.
|
|
18
|
+
*
|
|
19
|
+
* **The brand is opt-in at the type level.** `OperationalPlatform`
|
|
20
|
+
* methods accept plain `UpdateMediaBuyRequest` etc. (not branded —
|
|
21
|
+
* see #1530's interface), so adopters who don't use the helper
|
|
22
|
+
* aren't broken. Adopters who DO use the helper get the safety
|
|
23
|
+
* benefit at the picking site: assigning the result to a
|
|
24
|
+
* `WireSafe<UpdateMediaBuyRequest>` variable forces `pickWireSpecFields`
|
|
25
|
+
* to be the constructor; spreading the buyer request elsewhere fails
|
|
26
|
+
* to satisfy the brand.
|
|
27
|
+
*
|
|
28
|
+
* **Migration footgun:** `pickWireSpecFields` ALONE doesn't close
|
|
29
|
+
* the round-2 / round-3 vectors (nested `context.<x>_access_token`,
|
|
30
|
+
* nested `ext.<x>_access_token`). `ext` and `context` are wire-spec
|
|
31
|
+
* fields, so the helper preserves them whole. Storefronts that fan
|
|
32
|
+
* out MUST chain {@link scrubExtensions} after the pick — that helper
|
|
33
|
+
* filters ext/context to a caller-specified key allowlist AND
|
|
34
|
+
* recursively drops credential-shaped keys at any depth (using the
|
|
35
|
+
* L1 default pattern set or an adopter-supplied matcher). Calling
|
|
36
|
+
* `pickWireSpecFields` without `scrubExtensions` reopens the
|
|
37
|
+
* round-2/round-3 attack surface.
|
|
38
|
+
*
|
|
39
|
+
* @see docs/guides/CTX-METADATA-SAFETY.md
|
|
40
|
+
* @see scripts/generate-wire-spec-fields.ts — codegen for the
|
|
41
|
+
* allowlist constants this module reads.
|
|
42
|
+
*
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
import { type CredentialPatternsConfig } from './credential-policy';
|
|
46
|
+
import { WIRE_SPEC_FIELDS, type WireSpecRequestName } from './wire-spec-fields.generated';
|
|
47
|
+
declare const __wireSafe: unique symbol;
|
|
48
|
+
/**
|
|
49
|
+
* A request shape that has been narrowed to AdCP wire-spec fields.
|
|
50
|
+
* Cannot be produced by spreading a buyer request — only via
|
|
51
|
+
* {@link pickWireSpecFields} or by typed `as WireSafe<T>` assertion
|
|
52
|
+
* at a known-safe construction site (e.g. a poller that builds the
|
|
53
|
+
* request from stored state, not from buyer input).
|
|
54
|
+
*
|
|
55
|
+
* The brand is what makes this load-bearing: `{ ...buyerRequest }` is
|
|
56
|
+
* `T`, not `WireSafe<T>`, so passing it where `WireSafe<T>` is
|
|
57
|
+
* required is a compile error.
|
|
58
|
+
*/
|
|
59
|
+
export type WireSafe<T> = T & {
|
|
60
|
+
readonly [__wireSafe]: true;
|
|
61
|
+
};
|
|
62
|
+
export type { WireSpecRequestName };
|
|
63
|
+
export { WIRE_SPEC_FIELDS };
|
|
64
|
+
/**
|
|
65
|
+
* The wire-spec request type associated with a `WireSpecRequestName`.
|
|
66
|
+
* Internal — adopters access it transparently via
|
|
67
|
+
* `pickWireSpecFields`'s return narrowing.
|
|
68
|
+
*/
|
|
69
|
+
type WireSpecRequestShape<K extends WireSpecRequestName> = (typeof WIRE_SPEC_FIELDS)[K]['__type'];
|
|
70
|
+
/**
|
|
71
|
+
* Strip a buyer request to the wire-spec fields defined for
|
|
72
|
+
* `schemaName` and return the result branded `WireSafe<T>`. The
|
|
73
|
+
* canonical constructor of {@link WireSafe}.
|
|
74
|
+
*
|
|
75
|
+
* Drops every property NOT in the schema's `properties` allowlist,
|
|
76
|
+
* including buyer-supplied unknown keys (`<platform>_access_token`,
|
|
77
|
+
* `account: { brand: 'attacker.com' }`-style identity-pivot fields,
|
|
78
|
+
* arbitrary attacker payload). The allowlist comes from codegen — the
|
|
79
|
+
* AdCP request schema IS the allowlist; drift is structurally
|
|
80
|
+
* impossible.
|
|
81
|
+
*
|
|
82
|
+
* **Top-level only.** `ext` and `context` are wire-spec fields and
|
|
83
|
+
* are preserved verbatim by this helper. Storefronts MUST chain
|
|
84
|
+
* {@link scrubExtensions} to drop nested credentials in those
|
|
85
|
+
* envelopes. See the module-level migration footgun warning.
|
|
86
|
+
*
|
|
87
|
+
* Storefronts call this once per upstream target during fan-out:
|
|
88
|
+
*
|
|
89
|
+
* ```ts
|
|
90
|
+
* const safe = pickWireSpecFields(buyerReq, 'UpdateMediaBuyRequest');
|
|
91
|
+
* for (const target of targets) {
|
|
92
|
+
* const perTarget = scrubExtensions(safe, { ... });
|
|
93
|
+
* await operational.updateMediaBuy(ctxFor(target), perTarget);
|
|
94
|
+
* }
|
|
95
|
+
* ```
|
|
96
|
+
*
|
|
97
|
+
* Pollers that construct requests from stored state typically don't
|
|
98
|
+
* need this — their inputs aren't buyer-controlled. They can opt in
|
|
99
|
+
* for symmetric type safety with `as WireSafe<T>` if their type
|
|
100
|
+
* system encourages it, or call this helper anyway (the strip is a
|
|
101
|
+
* no-op when input is already wire-spec only).
|
|
102
|
+
*
|
|
103
|
+
* @param request - Buyer-supplied (or otherwise untrusted) input.
|
|
104
|
+
* @param schemaName - PascalCase request type name from
|
|
105
|
+
* {@link WIRE_SPEC_FIELDS}. TypeScript narrows the return type to
|
|
106
|
+
* `WireSafe<RequestType>` based on this — so
|
|
107
|
+
* `pickWireSpecFields(req, 'UpdateMediaBuyRequest')` returns
|
|
108
|
+
* `WireSafe<UpdateMediaBuyRequest>`.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```ts
|
|
112
|
+
* import { pickWireSpecFields } from '@adcp/sdk/server';
|
|
113
|
+
*
|
|
114
|
+
* // Buyer sends:
|
|
115
|
+
* // { media_buy_id: 'mb_1', paused: true, snap_access_token: 'attacker' }
|
|
116
|
+
* const safe = pickWireSpecFields(buyerReq, 'UpdateMediaBuyRequest');
|
|
117
|
+
* // safe: WireSafe<UpdateMediaBuyRequest>
|
|
118
|
+
* // value: { media_buy_id: 'mb_1', paused: true } — credential dropped
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export declare function pickWireSpecFields<K extends WireSpecRequestName>(request: unknown, schemaName: K): WireSafe<WireSpecRequestShape<K>>;
|
|
122
|
+
/**
|
|
123
|
+
* Apply an extension-object allowlist to a `WireSafe<T>` and
|
|
124
|
+
* recursively scrub credential-shaped values. Closes the round-2 /
|
|
125
|
+
* round-3 nested-credential vectors that `pickWireSpecFields` alone
|
|
126
|
+
* leaves open (because `ext` and `context` are wire-spec fields and
|
|
127
|
+
* are preserved verbatim by the pick).
|
|
128
|
+
*
|
|
129
|
+
* Three operations, applied in order:
|
|
130
|
+
*
|
|
131
|
+
* 1. **Top-level allowlist filter** (when `allowedExtKeys` is set):
|
|
132
|
+
* drop keys from `ext` and `context` that aren't in the
|
|
133
|
+
* allowlist. Pass an empty Set to drop both fields entirely;
|
|
134
|
+
* pass `undefined` to leave the top level untouched.
|
|
135
|
+
* 2. **Recursive credential scan** (when `recursiveCredentialScan`
|
|
136
|
+
* is `true`, default): walk surviving values in `ext`/`context`
|
|
137
|
+
* at any depth and drop nested keys that match the L1
|
|
138
|
+
* credential-pattern set (or an adopter-supplied matcher). Closes
|
|
139
|
+
* `ext.partner.token` and similar deep-nesting attack vectors.
|
|
140
|
+
* 3. **Adopter inject** (when `inject` is set): merge
|
|
141
|
+
* storefront-controlled values into `ext` and/or `context`.
|
|
142
|
+
* Inject runs LAST so storefront-resolved credentials override
|
|
143
|
+
* any allowlisted buyer values that collide.
|
|
144
|
+
*
|
|
145
|
+
* The `WireSafe<T>` brand survives — the operation is closed over
|
|
146
|
+
* the wire-spec field set.
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```ts
|
|
150
|
+
* const safe = pickWireSpecFields(buyerReq, 'UpdateMediaBuyRequest');
|
|
151
|
+
* const perTarget = scrubExtensions(safe, {
|
|
152
|
+
* allowedExtKeys: new Set(['scope3_api_key', 'partner_request_id']),
|
|
153
|
+
* inject: {
|
|
154
|
+
* context: {
|
|
155
|
+
* managed_access_token: target.token,
|
|
156
|
+
* managed_advertiser_id: target.advertiserId,
|
|
157
|
+
* },
|
|
158
|
+
* },
|
|
159
|
+
* });
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
export interface ScrubExtensionsOptions {
|
|
163
|
+
/**
|
|
164
|
+
* Set of keys permitted to survive on `ext` and `context`. Keys
|
|
165
|
+
* outside this set are dropped from both. Pass `undefined` to leave
|
|
166
|
+
* `ext`/`context` top-level untouched (only the recursive scan and
|
|
167
|
+
* `inject` apply); pass an empty set to drop both entirely.
|
|
168
|
+
*/
|
|
169
|
+
allowedExtKeys?: ReadonlySet<string>;
|
|
170
|
+
/**
|
|
171
|
+
* When true (default), recursively walk surviving `ext`/`context`
|
|
172
|
+
* values and drop nested keys matching the credential-pattern set.
|
|
173
|
+
* Closes round-4-style deep-nesting attack vectors that the
|
|
174
|
+
* top-level allowlist alone cannot — e.g. an adopter who allowlists
|
|
175
|
+
* `partner` and forgets that `partner.token` is buyer-controlled.
|
|
176
|
+
*
|
|
177
|
+
* Set to `false` only when you've validated the surviving
|
|
178
|
+
* `ext`/`context` shapes yourself (e.g. via Zod-typed extensions).
|
|
179
|
+
*/
|
|
180
|
+
recursiveCredentialScan?: boolean;
|
|
181
|
+
/**
|
|
182
|
+
* Optional matcher overrides for the recursive scan. Defaults to
|
|
183
|
+
* the L1 credential-policy default pattern set
|
|
184
|
+
* ({@link DEFAULT_CREDENTIAL_PATTERNS}). Pass `extend` to add
|
|
185
|
+
* adopter-specific patterns; pass `matcher` to fully replace the
|
|
186
|
+
* regex set.
|
|
187
|
+
*/
|
|
188
|
+
credentialPatterns?: CredentialPatternsConfig;
|
|
189
|
+
/**
|
|
190
|
+
* Adopter-controlled values to merge into `ext` and/or `context`
|
|
191
|
+
* AFTER the allowlist filter and recursive scan run. Used to inject
|
|
192
|
+
* storefront-owned routing tokens (e.g. resolved per-target
|
|
193
|
+
* advertiser IDs) into the per-target request.
|
|
194
|
+
*
|
|
195
|
+
* **Adopter-side ONLY — values here MUST be storefront-derived,
|
|
196
|
+
* never read from the incoming buyer request.** Threading buyer-
|
|
197
|
+
* controlled values through `inject` defeats the discipline.
|
|
198
|
+
* Values injected here bypass the recursive credential scan and
|
|
199
|
+
* are merged in after it completes — ensure they are fully
|
|
200
|
+
* storefront-derived, never shaped by buyer input.
|
|
201
|
+
*/
|
|
202
|
+
inject?: {
|
|
203
|
+
ext?: Record<string, unknown>;
|
|
204
|
+
context?: Record<string, unknown>;
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Implementation of {@link ScrubExtensionsOptions}. See JSDoc above.
|
|
209
|
+
*/
|
|
210
|
+
export declare function scrubExtensions<T extends object>(request: WireSafe<T>, options: ScrubExtensionsOptions): WireSafe<T>;
|
|
211
|
+
//# sourceMappingURL=wire-safe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-safe.d.ts","sourceRoot":"","sources":["../../../src/lib/server/wire-safe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAA0B,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAE1F,OAAO,CAAC,MAAM,UAAU,EAAE,OAAO,MAAM,CAAC;AAExC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAE9D,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B;;;;GAIG;AACH,KAAK,oBAAoB,CAAC,CAAC,SAAS,mBAAmB,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAElG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,mBAAmB,EAC9D,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,CAAC,GACZ,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAuBnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAErC;;;;;;;;;OASG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAE9C;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,sBAAsB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAyDpH"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Wire-spec field discipline at the operational fan-out boundary.
|
|
4
|
+
*
|
|
5
|
+
* `WireSafe<T>` is a branded type that signals "this object has been
|
|
6
|
+
* stripped to AdCP wire-spec fields and is safe to forward upstream."
|
|
7
|
+
* The brand is constructed only by {@link pickWireSpecFields} (or
|
|
8
|
+
* variants). Code that spreads a buyer request directly cannot satisfy
|
|
9
|
+
* the brand — `{ ...buyerReq, paused: true }` is `T`, not
|
|
10
|
+
* `WireSafe<T>`.
|
|
11
|
+
*
|
|
12
|
+
* The brand is the L2 of #1529: where L1 (`credentialPolicy`,
|
|
13
|
+
* `src/lib/server/credential-policy.ts`) catches credential-shaped
|
|
14
|
+
* keys at the buyer-facing dispatch boundary, L2 catches structural
|
|
15
|
+
* leakage at the operational dispatch boundary — storefront fan-out
|
|
16
|
+
* code that picks per-target args from a buyer request, where the
|
|
17
|
+
* scrub happens BEFORE the credential scan would have run on the
|
|
18
|
+
* upstream call.
|
|
19
|
+
*
|
|
20
|
+
* **The brand is opt-in at the type level.** `OperationalPlatform`
|
|
21
|
+
* methods accept plain `UpdateMediaBuyRequest` etc. (not branded —
|
|
22
|
+
* see #1530's interface), so adopters who don't use the helper
|
|
23
|
+
* aren't broken. Adopters who DO use the helper get the safety
|
|
24
|
+
* benefit at the picking site: assigning the result to a
|
|
25
|
+
* `WireSafe<UpdateMediaBuyRequest>` variable forces `pickWireSpecFields`
|
|
26
|
+
* to be the constructor; spreading the buyer request elsewhere fails
|
|
27
|
+
* to satisfy the brand.
|
|
28
|
+
*
|
|
29
|
+
* **Migration footgun:** `pickWireSpecFields` ALONE doesn't close
|
|
30
|
+
* the round-2 / round-3 vectors (nested `context.<x>_access_token`,
|
|
31
|
+
* nested `ext.<x>_access_token`). `ext` and `context` are wire-spec
|
|
32
|
+
* fields, so the helper preserves them whole. Storefronts that fan
|
|
33
|
+
* out MUST chain {@link scrubExtensions} after the pick — that helper
|
|
34
|
+
* filters ext/context to a caller-specified key allowlist AND
|
|
35
|
+
* recursively drops credential-shaped keys at any depth (using the
|
|
36
|
+
* L1 default pattern set or an adopter-supplied matcher). Calling
|
|
37
|
+
* `pickWireSpecFields` without `scrubExtensions` reopens the
|
|
38
|
+
* round-2/round-3 attack surface.
|
|
39
|
+
*
|
|
40
|
+
* @see docs/guides/CTX-METADATA-SAFETY.md
|
|
41
|
+
* @see scripts/generate-wire-spec-fields.ts — codegen for the
|
|
42
|
+
* allowlist constants this module reads.
|
|
43
|
+
*
|
|
44
|
+
* @public
|
|
45
|
+
*/
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.WIRE_SPEC_FIELDS = void 0;
|
|
48
|
+
exports.pickWireSpecFields = pickWireSpecFields;
|
|
49
|
+
exports.scrubExtensions = scrubExtensions;
|
|
50
|
+
const credential_policy_1 = require("./credential-policy");
|
|
51
|
+
const wire_spec_fields_generated_1 = require("./wire-spec-fields.generated");
|
|
52
|
+
Object.defineProperty(exports, "WIRE_SPEC_FIELDS", { enumerable: true, get: function () { return wire_spec_fields_generated_1.WIRE_SPEC_FIELDS; } });
|
|
53
|
+
/**
|
|
54
|
+
* Strip a buyer request to the wire-spec fields defined for
|
|
55
|
+
* `schemaName` and return the result branded `WireSafe<T>`. The
|
|
56
|
+
* canonical constructor of {@link WireSafe}.
|
|
57
|
+
*
|
|
58
|
+
* Drops every property NOT in the schema's `properties` allowlist,
|
|
59
|
+
* including buyer-supplied unknown keys (`<platform>_access_token`,
|
|
60
|
+
* `account: { brand: 'attacker.com' }`-style identity-pivot fields,
|
|
61
|
+
* arbitrary attacker payload). The allowlist comes from codegen — the
|
|
62
|
+
* AdCP request schema IS the allowlist; drift is structurally
|
|
63
|
+
* impossible.
|
|
64
|
+
*
|
|
65
|
+
* **Top-level only.** `ext` and `context` are wire-spec fields and
|
|
66
|
+
* are preserved verbatim by this helper. Storefronts MUST chain
|
|
67
|
+
* {@link scrubExtensions} to drop nested credentials in those
|
|
68
|
+
* envelopes. See the module-level migration footgun warning.
|
|
69
|
+
*
|
|
70
|
+
* Storefronts call this once per upstream target during fan-out:
|
|
71
|
+
*
|
|
72
|
+
* ```ts
|
|
73
|
+
* const safe = pickWireSpecFields(buyerReq, 'UpdateMediaBuyRequest');
|
|
74
|
+
* for (const target of targets) {
|
|
75
|
+
* const perTarget = scrubExtensions(safe, { ... });
|
|
76
|
+
* await operational.updateMediaBuy(ctxFor(target), perTarget);
|
|
77
|
+
* }
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* Pollers that construct requests from stored state typically don't
|
|
81
|
+
* need this — their inputs aren't buyer-controlled. They can opt in
|
|
82
|
+
* for symmetric type safety with `as WireSafe<T>` if their type
|
|
83
|
+
* system encourages it, or call this helper anyway (the strip is a
|
|
84
|
+
* no-op when input is already wire-spec only).
|
|
85
|
+
*
|
|
86
|
+
* @param request - Buyer-supplied (or otherwise untrusted) input.
|
|
87
|
+
* @param schemaName - PascalCase request type name from
|
|
88
|
+
* {@link WIRE_SPEC_FIELDS}. TypeScript narrows the return type to
|
|
89
|
+
* `WireSafe<RequestType>` based on this — so
|
|
90
|
+
* `pickWireSpecFields(req, 'UpdateMediaBuyRequest')` returns
|
|
91
|
+
* `WireSafe<UpdateMediaBuyRequest>`.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* import { pickWireSpecFields } from '@adcp/sdk/server';
|
|
96
|
+
*
|
|
97
|
+
* // Buyer sends:
|
|
98
|
+
* // { media_buy_id: 'mb_1', paused: true, snap_access_token: 'attacker' }
|
|
99
|
+
* const safe = pickWireSpecFields(buyerReq, 'UpdateMediaBuyRequest');
|
|
100
|
+
* // safe: WireSafe<UpdateMediaBuyRequest>
|
|
101
|
+
* // value: { media_buy_id: 'mb_1', paused: true } — credential dropped
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
function pickWireSpecFields(request, schemaName) {
|
|
105
|
+
const allowlist = wire_spec_fields_generated_1.WIRE_SPEC_FIELDS[schemaName].fields;
|
|
106
|
+
const out = {};
|
|
107
|
+
if (request === null || typeof request !== 'object') {
|
|
108
|
+
// Defensive: caller passed something that isn't a request object.
|
|
109
|
+
// Return an empty WireSafe — the upstream call will reject on
|
|
110
|
+
// missing required fields (e.g. `idempotency_key`), which is the
|
|
111
|
+
// right error class to surface (it's adopter-side, not buyer-side).
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
const source = request;
|
|
115
|
+
// Indexed loop instead of for-of: avoids Array.prototype[Symbol.iterator]
|
|
116
|
+
// dispatch, which a supply-chain dep could poison to inject extra field
|
|
117
|
+
// names into the iteration at call time (freeze of the array object does
|
|
118
|
+
// not prevent iterator-protocol interception).
|
|
119
|
+
const len = allowlist.length;
|
|
120
|
+
for (let i = 0; i < len; i++) {
|
|
121
|
+
const field = allowlist[i]; // non-null: i is bounds-checked by len
|
|
122
|
+
if (Object.prototype.hasOwnProperty.call(source, field)) {
|
|
123
|
+
out[field] = source[field];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return out;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Implementation of {@link ScrubExtensionsOptions}. See JSDoc above.
|
|
130
|
+
*/
|
|
131
|
+
function scrubExtensions(request, options) {
|
|
132
|
+
const out = { ...request };
|
|
133
|
+
const { allowedExtKeys, recursiveCredentialScan = true, credentialPatterns, inject } = options;
|
|
134
|
+
// Step 1: top-level allowlist filter. When `allowedExtKeys` is
|
|
135
|
+
// undefined we leave the top level alone (recursive scan and
|
|
136
|
+
// inject still run); when it's an empty set we drop both fields.
|
|
137
|
+
if (allowedExtKeys !== undefined) {
|
|
138
|
+
const sourceExt = (out.ext ?? {});
|
|
139
|
+
const sourceCtx = (out.context ?? {});
|
|
140
|
+
const filteredExt = {};
|
|
141
|
+
const filteredCtx = {};
|
|
142
|
+
for (const k of allowedExtKeys) {
|
|
143
|
+
if (Object.prototype.hasOwnProperty.call(sourceExt, k))
|
|
144
|
+
filteredExt[k] = sourceExt[k];
|
|
145
|
+
if (Object.prototype.hasOwnProperty.call(sourceCtx, k))
|
|
146
|
+
filteredCtx[k] = sourceCtx[k];
|
|
147
|
+
}
|
|
148
|
+
out.ext = filteredExt;
|
|
149
|
+
out.context = filteredCtx;
|
|
150
|
+
}
|
|
151
|
+
// Step 2: recursive credential-shape scan. Strategy depends on
|
|
152
|
+
// whether step 1 ran:
|
|
153
|
+
//
|
|
154
|
+
// - With `allowedExtKeys` set: top-level is already gated by
|
|
155
|
+
// the explicit allowlist. The adopter has affirmed those keys
|
|
156
|
+
// are legitimate (e.g. `scope3_api_key` allowlisted on a
|
|
157
|
+
// specific tool), so we DON'T second-guess them by name. The
|
|
158
|
+
// scan applies to depths 1+ — dropping nested credentials
|
|
159
|
+
// INSIDE allowlisted values (`partner: { token: '...' }`
|
|
160
|
+
// becomes `partner: {}`).
|
|
161
|
+
//
|
|
162
|
+
// - Without `allowedExtKeys`: no top-level gate; scan from
|
|
163
|
+
// depth 0 to drop credential-shaped keys at any depth. This
|
|
164
|
+
// is the path adopters take when they trust their own
|
|
165
|
+
// ext/context shapes but want belt-and-suspenders coverage.
|
|
166
|
+
if (recursiveCredentialScan) {
|
|
167
|
+
const fromDepth = allowedExtKeys !== undefined ? 1 : 0;
|
|
168
|
+
if (out.ext !== undefined && out.ext !== null && typeof out.ext === 'object') {
|
|
169
|
+
out.ext = stripNestedCredentials(out.ext, credentialPatterns, fromDepth);
|
|
170
|
+
}
|
|
171
|
+
if (out.context !== undefined && out.context !== null && typeof out.context === 'object') {
|
|
172
|
+
out.context = stripNestedCredentials(out.context, credentialPatterns, fromDepth);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Step 3: adopter-controlled inject. Runs AFTER the scan so
|
|
176
|
+
// storefront-resolved credentials/IDs aren't accidentally dropped
|
|
177
|
+
// by the recursive scan (e.g. injected `managed_access_token` is
|
|
178
|
+
// intentional and belongs).
|
|
179
|
+
if (inject?.ext) {
|
|
180
|
+
out.ext = { ...out.ext, ...inject.ext };
|
|
181
|
+
}
|
|
182
|
+
if (inject?.context) {
|
|
183
|
+
out.context = { ...out.context, ...inject.context };
|
|
184
|
+
}
|
|
185
|
+
return out;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Recursively walk a value and drop keys matching the credential
|
|
189
|
+
* pattern set, starting from `fromDepth`. Used by `scrubExtensions`
|
|
190
|
+
* to close round-4 nesting.
|
|
191
|
+
*
|
|
192
|
+
* `fromDepth = 0` scans every depth including the top level — used
|
|
193
|
+
* when no `allowedExtKeys` is supplied.
|
|
194
|
+
* `fromDepth = 1` skips the top level — used when the top-level
|
|
195
|
+
* keys have already been gated by an explicit allowlist (the
|
|
196
|
+
* adopter affirmed them legitimate by name).
|
|
197
|
+
*
|
|
198
|
+
* Returns a NEW object/array tree — input is not mutated. Cycle-safe
|
|
199
|
+
* via `WeakSet`. Primitives pass through.
|
|
200
|
+
*/
|
|
201
|
+
function stripNestedCredentials(value, patterns, fromDepth = 0) {
|
|
202
|
+
// Identify credential-shaped paths via the L1 scanner.
|
|
203
|
+
const hits = new Set((0, credential_policy_1.scanArgsForCredentials)(value, patterns));
|
|
204
|
+
if (hits.size === 0)
|
|
205
|
+
return value;
|
|
206
|
+
const seen = new WeakSet();
|
|
207
|
+
const walk = (node, path, depth) => {
|
|
208
|
+
if (node === null || typeof node !== 'object')
|
|
209
|
+
return node;
|
|
210
|
+
if (seen.has(node))
|
|
211
|
+
return node;
|
|
212
|
+
seen.add(node);
|
|
213
|
+
if (Array.isArray(node)) {
|
|
214
|
+
return node.map((item, i) => walk(item, [...path, String(i)], depth + 1));
|
|
215
|
+
}
|
|
216
|
+
const out = {};
|
|
217
|
+
for (const [key, child] of Object.entries(node)) {
|
|
218
|
+
const childPath = [...path, key];
|
|
219
|
+
// Only drop the key if we're AT or BEYOND `fromDepth`. Keys
|
|
220
|
+
// shallower than fromDepth pass through unchecked because
|
|
221
|
+
// they were already gated upstream.
|
|
222
|
+
if (depth >= fromDepth && hits.has(childPath.join('.'))) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
out[key] = walk(child, childPath, depth + 1);
|
|
226
|
+
}
|
|
227
|
+
return out;
|
|
228
|
+
};
|
|
229
|
+
return walk(value, [], 0);
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=wire-safe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-safe.js","sourceRoot":"","sources":["../../../src/lib/server/wire-safe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type { AcquireRightsRequest, ActivateSignalRequest, BuildCreativeRequest, CalibrateContentRequest, CreateCollectionListRequest, CreateContentStandardsRequest, CreateMediaBuyRequest, CreatePropertyListRequest, DeleteCollectionListRequest, DeletePropertyListRequest, GetMediaBuyDeliveryRequest, LogEventRequest, ProvidePerformanceFeedbackRequest, ReportPlanOutcomeRequest, ReportUsageRequest, SIInitiateSessionRequest, SISendMessageRequest, SyncAccountsRequest, SyncAudiencesRequest, SyncCatalogsRequest, SyncCreativesRequest, SyncEventSourcesRequest, SyncGovernanceRequest, SyncPlansRequest, UpdateCollectionListRequest, UpdateContentStandardsRequest, UpdateMediaBuyRequest, UpdatePropertyListRequest, UpdateRightsRequest } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Wire-spec field allowlists per request type. The `fields` values
|
|
4
|
+
* are exact top-level property names from the AdCP request JSON
|
|
5
|
+
* schemas; `pickWireSpecFields(req, schemaName)` uses them to strip
|
|
6
|
+
* buyer-controlled args to schema-spec fields at the operational
|
|
7
|
+
* fan-out boundary. Drift between this map and the schemas is
|
|
8
|
+
* impossible by construction — both are emitted from the same
|
|
9
|
+
* codegen pass.
|
|
10
|
+
*
|
|
11
|
+
* The `__type` phantom is type-only (`null as unknown as T`) — it
|
|
12
|
+
* carries the wire-spec request shape so `pickWireSpecFields`'s
|
|
13
|
+
* return type narrows per `schemaName`. Runtime cost: one null
|
|
14
|
+
* property per entry.
|
|
15
|
+
*
|
|
16
|
+
* Arrays and entry objects are runtime-frozen via `Object.freeze`
|
|
17
|
+
* so a misbehaving dependency cannot widen the scrub via prototype
|
|
18
|
+
* pollution or shared-state mutation of the allowlist.
|
|
19
|
+
*/
|
|
20
|
+
export declare const WIRE_SPEC_FIELDS: Readonly<{
|
|
21
|
+
/** schemas/cache/3.0.6/brand/acquire-rights-request.json */
|
|
22
|
+
readonly AcquireRightsRequest: Readonly<{
|
|
23
|
+
fields: readonly string[];
|
|
24
|
+
__type: AcquireRightsRequest;
|
|
25
|
+
}>;
|
|
26
|
+
/** schemas/cache/3.0.6/signals/activate-signal-request.json */
|
|
27
|
+
readonly ActivateSignalRequest: Readonly<{
|
|
28
|
+
fields: readonly string[];
|
|
29
|
+
__type: ActivateSignalRequest;
|
|
30
|
+
}>;
|
|
31
|
+
/** schemas/cache/3.0.6/media-buy/build-creative-request.json */
|
|
32
|
+
readonly BuildCreativeRequest: Readonly<{
|
|
33
|
+
fields: readonly string[];
|
|
34
|
+
__type: BuildCreativeRequest;
|
|
35
|
+
}>;
|
|
36
|
+
/** schemas/cache/3.0.6/content-standards/calibrate-content-request.json */
|
|
37
|
+
readonly CalibrateContentRequest: Readonly<{
|
|
38
|
+
fields: readonly string[];
|
|
39
|
+
__type: CalibrateContentRequest;
|
|
40
|
+
}>;
|
|
41
|
+
/** schemas/cache/3.0.6/collection/create-collection-list-request.json */
|
|
42
|
+
readonly CreateCollectionListRequest: Readonly<{
|
|
43
|
+
fields: readonly string[];
|
|
44
|
+
__type: CreateCollectionListRequest;
|
|
45
|
+
}>;
|
|
46
|
+
/** schemas/cache/3.0.6/content-standards/create-content-standards-request.json */
|
|
47
|
+
readonly CreateContentStandardsRequest: Readonly<{
|
|
48
|
+
fields: readonly string[];
|
|
49
|
+
__type: CreateContentStandardsRequest;
|
|
50
|
+
}>;
|
|
51
|
+
/** schemas/cache/3.0.6/media-buy/create-media-buy-request.json */
|
|
52
|
+
readonly CreateMediaBuyRequest: Readonly<{
|
|
53
|
+
fields: readonly string[];
|
|
54
|
+
__type: CreateMediaBuyRequest;
|
|
55
|
+
}>;
|
|
56
|
+
/** schemas/cache/3.0.6/property/create-property-list-request.json */
|
|
57
|
+
readonly CreatePropertyListRequest: Readonly<{
|
|
58
|
+
fields: readonly string[];
|
|
59
|
+
__type: CreatePropertyListRequest;
|
|
60
|
+
}>;
|
|
61
|
+
/** schemas/cache/3.0.6/collection/delete-collection-list-request.json */
|
|
62
|
+
readonly DeleteCollectionListRequest: Readonly<{
|
|
63
|
+
fields: readonly string[];
|
|
64
|
+
__type: DeleteCollectionListRequest;
|
|
65
|
+
}>;
|
|
66
|
+
/** schemas/cache/3.0.6/property/delete-property-list-request.json */
|
|
67
|
+
readonly DeletePropertyListRequest: Readonly<{
|
|
68
|
+
fields: readonly string[];
|
|
69
|
+
__type: DeletePropertyListRequest;
|
|
70
|
+
}>;
|
|
71
|
+
/** schemas/cache/3.0.6/media-buy/get-media-buy-delivery-request.json */
|
|
72
|
+
readonly GetMediaBuyDeliveryRequest: Readonly<{
|
|
73
|
+
fields: readonly string[];
|
|
74
|
+
__type: GetMediaBuyDeliveryRequest;
|
|
75
|
+
}>;
|
|
76
|
+
/** schemas/cache/3.0.6/media-buy/log-event-request.json */
|
|
77
|
+
readonly LogEventRequest: Readonly<{
|
|
78
|
+
fields: readonly string[];
|
|
79
|
+
__type: LogEventRequest;
|
|
80
|
+
}>;
|
|
81
|
+
/** schemas/cache/3.0.6/media-buy/provide-performance-feedback-request.json */
|
|
82
|
+
readonly ProvidePerformanceFeedbackRequest: Readonly<{
|
|
83
|
+
fields: readonly string[];
|
|
84
|
+
__type: ProvidePerformanceFeedbackRequest;
|
|
85
|
+
}>;
|
|
86
|
+
/** schemas/cache/3.0.6/governance/report-plan-outcome-request.json */
|
|
87
|
+
readonly ReportPlanOutcomeRequest: Readonly<{
|
|
88
|
+
fields: readonly string[];
|
|
89
|
+
__type: ReportPlanOutcomeRequest;
|
|
90
|
+
}>;
|
|
91
|
+
/** schemas/cache/3.0.6/account/report-usage-request.json */
|
|
92
|
+
readonly ReportUsageRequest: Readonly<{
|
|
93
|
+
fields: readonly string[];
|
|
94
|
+
__type: ReportUsageRequest;
|
|
95
|
+
}>;
|
|
96
|
+
/** schemas/cache/3.0.6/sponsored-intelligence/si-initiate-session-request.json */
|
|
97
|
+
readonly SIInitiateSessionRequest: Readonly<{
|
|
98
|
+
fields: readonly string[];
|
|
99
|
+
__type: SIInitiateSessionRequest;
|
|
100
|
+
}>;
|
|
101
|
+
/** schemas/cache/3.0.6/sponsored-intelligence/si-send-message-request.json */
|
|
102
|
+
readonly SISendMessageRequest: Readonly<{
|
|
103
|
+
fields: readonly string[];
|
|
104
|
+
__type: SISendMessageRequest;
|
|
105
|
+
}>;
|
|
106
|
+
/** schemas/cache/3.0.6/account/sync-accounts-request.json */
|
|
107
|
+
readonly SyncAccountsRequest: Readonly<{
|
|
108
|
+
fields: readonly string[];
|
|
109
|
+
__type: SyncAccountsRequest;
|
|
110
|
+
}>;
|
|
111
|
+
/** schemas/cache/3.0.6/media-buy/sync-audiences-request.json */
|
|
112
|
+
readonly SyncAudiencesRequest: Readonly<{
|
|
113
|
+
fields: readonly string[];
|
|
114
|
+
__type: SyncAudiencesRequest;
|
|
115
|
+
}>;
|
|
116
|
+
/** schemas/cache/3.0.6/media-buy/sync-catalogs-request.json */
|
|
117
|
+
readonly SyncCatalogsRequest: Readonly<{
|
|
118
|
+
fields: readonly string[];
|
|
119
|
+
__type: SyncCatalogsRequest;
|
|
120
|
+
}>;
|
|
121
|
+
/** schemas/cache/3.0.6/creative/sync-creatives-request.json */
|
|
122
|
+
readonly SyncCreativesRequest: Readonly<{
|
|
123
|
+
fields: readonly string[];
|
|
124
|
+
__type: SyncCreativesRequest;
|
|
125
|
+
}>;
|
|
126
|
+
/** schemas/cache/3.0.6/media-buy/sync-event-sources-request.json */
|
|
127
|
+
readonly SyncEventSourcesRequest: Readonly<{
|
|
128
|
+
fields: readonly string[];
|
|
129
|
+
__type: SyncEventSourcesRequest;
|
|
130
|
+
}>;
|
|
131
|
+
/** schemas/cache/3.0.6/account/sync-governance-request.json */
|
|
132
|
+
readonly SyncGovernanceRequest: Readonly<{
|
|
133
|
+
fields: readonly string[];
|
|
134
|
+
__type: SyncGovernanceRequest;
|
|
135
|
+
}>;
|
|
136
|
+
/** schemas/cache/3.0.6/governance/sync-plans-request.json */
|
|
137
|
+
readonly SyncPlansRequest: Readonly<{
|
|
138
|
+
fields: readonly string[];
|
|
139
|
+
__type: SyncPlansRequest;
|
|
140
|
+
}>;
|
|
141
|
+
/** schemas/cache/3.0.6/collection/update-collection-list-request.json */
|
|
142
|
+
readonly UpdateCollectionListRequest: Readonly<{
|
|
143
|
+
fields: readonly string[];
|
|
144
|
+
__type: UpdateCollectionListRequest;
|
|
145
|
+
}>;
|
|
146
|
+
/** schemas/cache/3.0.6/content-standards/update-content-standards-request.json */
|
|
147
|
+
readonly UpdateContentStandardsRequest: Readonly<{
|
|
148
|
+
fields: readonly string[];
|
|
149
|
+
__type: UpdateContentStandardsRequest;
|
|
150
|
+
}>;
|
|
151
|
+
/** schemas/cache/3.0.6/media-buy/update-media-buy-request.json */
|
|
152
|
+
readonly UpdateMediaBuyRequest: Readonly<{
|
|
153
|
+
fields: readonly string[];
|
|
154
|
+
__type: UpdateMediaBuyRequest;
|
|
155
|
+
}>;
|
|
156
|
+
/** schemas/cache/3.0.6/property/update-property-list-request.json */
|
|
157
|
+
readonly UpdatePropertyListRequest: Readonly<{
|
|
158
|
+
fields: readonly string[];
|
|
159
|
+
__type: UpdatePropertyListRequest;
|
|
160
|
+
}>;
|
|
161
|
+
/** schemas/cache/3.0.6/brand/update-rights-request.json */
|
|
162
|
+
readonly UpdateRightsRequest: Readonly<{
|
|
163
|
+
fields: readonly string[];
|
|
164
|
+
__type: UpdateRightsRequest;
|
|
165
|
+
}>;
|
|
166
|
+
}>;
|
|
167
|
+
export type WireSpecRequestName = keyof typeof WIRE_SPEC_FIELDS;
|
|
168
|
+
//# sourceMappingURL=wire-spec-fields.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-spec-fields.generated.d.ts","sourceRoot":"","sources":["../../../src/lib/server/wire-spec-fields.generated.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,6BAA6B,EAC7B,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EACf,iCAAiC,EACjC,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC3B,6BAA6B,EAC7B,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,gBAAgB;IAC3B,4DAA4D;;gBAE4H,SAAS,MAAM,EAAE;gBAC5K,oBAAoB;;IAEjD,+DAA+D;;gBAEsG,SAAS,MAAM,EAAE;gBACzJ,qBAAqB;;IAElD,gEAAgE;;gBAEsR,SAAS,MAAM,EAAE;gBAC1U,oBAAoB;;IAEjD,2EAA2E;;gBAEoC,SAAS,MAAM,EAAE;gBACnG,uBAAuB;;IAEpD,yEAAyE;;gBAEgF,SAAS,MAAM,EAAE;gBAC7I,2BAA2B;;IAExD,kFAAkF;;gBAEoE,SAAS,MAAM,EAAE;gBAC1I,6BAA6B;;IAE1D,kEAAkE;;gBAEgR,SAAS,MAAM,EAAE;gBACtU,qBAAqB;;IAElD,qEAAqE;;gBAEmF,SAAS,MAAM,EAAE;gBAC5I,yBAAyB;;IAEtD,yEAAyE;;gBAEgC,SAAS,MAAM,EAAE;gBAC7F,2BAA2B;;IAExD,qEAAqE;;gBAEoC,SAAS,MAAM,EAAE;gBAC7F,yBAAyB;;IAEtD,wEAAwE;;gBAE2I,SAAS,MAAM,EAAE;gBACvM,0BAA0B;;IAEvD,2DAA2D;;gBAEuE,SAAS,MAAM,EAAE;gBACtH,eAAe;;IAE5C,8EAA8E;;gBAE0H,SAAS,MAAM,EAAE;gBAC5L,iCAAiC;;IAE9D,sEAAsE;;gBAEwH,SAAS,MAAM,EAAE;gBAClL,wBAAwB;;IAErD,4DAA4D;;gBAEoD,SAAS,MAAM,EAAE;gBACpG,kBAAkB;;IAE/C,kFAAkF;;gBAE0G,SAAS,MAAM,EAAE;gBAChL,wBAAwB;;IAErD,8EAA8E;;gBAEgD,SAAS,MAAM,EAAE;gBAClH,oBAAoB;;IAEjD,6DAA6D;;gBAEyF,SAAS,MAAM,EAAE;gBAC1I,mBAAmB;;IAEhD,gEAAgE;;gBAE4D,SAAS,MAAM,EAAE;gBAChH,oBAAoB;;IAEjD,+DAA+D;;gBAEiI,SAAS,MAAM,EAAE;gBACpL,mBAAmB;;IAEhD,+DAA+D;;gBAEiJ,SAAS,MAAM,EAAE;gBACpM,oBAAoB;;IAEjD,oEAAoE;;gBAE4D,SAAS,MAAM,EAAE;gBACpH,uBAAuB;;IAEpD,+DAA+D;;gBAEiC,SAAS,MAAM,EAAE;gBACpF,qBAAqB;;IAElD,6DAA6D;;gBAEgC,SAAS,MAAM,EAAE;gBACjF,gBAAgB;;IAE7C,yEAAyE;;gBAEwG,SAAS,MAAM,EAAE;gBACrK,2BAA2B;;IAExD,kFAAkF;;gBAEmF,SAAS,MAAM,EAAE;gBACzJ,6BAA6B;;IAE1D,kEAAkE;;gBAEsN,SAAS,MAAM,EAAE;gBAC5Q,qBAAqB;;IAElD,qEAAqE;;gBAE2G,SAAS,MAAM,EAAE;gBACpK,yBAAyB;;IAEtD,2DAA2D;;gBAE0H,SAAS,MAAM,EAAE;gBACzK,mBAAmB;;EAEvC,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,gBAAgB,CAAC"}
|