@adcp/sdk 5.25.1 → 6.0.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/README.md +45 -7
- package/dist/lib/compliance-fixtures/index.d.ts +1 -1
- package/dist/lib/compliance-fixtures/index.js +1 -1
- package/dist/lib/core/AgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +15 -0
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/core/TaskExecutor.d.ts +7 -0
- package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
- package/dist/lib/core/TaskExecutor.js +9 -2
- package/dist/lib/core/TaskExecutor.js.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +7 -8
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/schemas/index.d.ts +1 -1
- package/dist/lib/schemas/index.js +1 -1
- package/dist/lib/server/create-adcp-server.d.ts +129 -11
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +112 -2
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/ctx-metadata/backends/memory.d.ts +27 -0
- package/dist/lib/server/ctx-metadata/backends/memory.d.ts.map +1 -0
- package/dist/lib/server/ctx-metadata/backends/memory.js +72 -0
- package/dist/lib/server/ctx-metadata/backends/memory.js.map +1 -0
- package/dist/lib/server/ctx-metadata/backends/pg.d.ts +62 -0
- package/dist/lib/server/ctx-metadata/backends/pg.d.ts.map +1 -0
- package/dist/lib/server/ctx-metadata/backends/pg.js +145 -0
- package/dist/lib/server/ctx-metadata/backends/pg.js.map +1 -0
- package/dist/lib/server/ctx-metadata/index.d.ts +15 -0
- package/dist/lib/server/ctx-metadata/index.d.ts.map +1 -0
- package/dist/lib/server/ctx-metadata/index.js +28 -0
- package/dist/lib/server/ctx-metadata/index.js.map +1 -0
- package/dist/lib/server/ctx-metadata/store.d.ts +177 -0
- package/dist/lib/server/ctx-metadata/store.d.ts.map +1 -0
- package/dist/lib/server/ctx-metadata/store.js +327 -0
- package/dist/lib/server/ctx-metadata/store.js.map +1 -0
- package/dist/lib/server/ctx-metadata/wire-shape.d.ts +55 -0
- package/dist/lib/server/ctx-metadata/wire-shape.d.ts.map +1 -0
- package/dist/lib/server/ctx-metadata/wire-shape.js +121 -0
- package/dist/lib/server/ctx-metadata/wire-shape.js.map +1 -0
- package/dist/lib/server/decisioning/account.d.ts +309 -0
- package/dist/lib/server/decisioning/account.d.ts.map +1 -0
- package/dist/lib/server/decisioning/account.js +102 -0
- package/dist/lib/server/decisioning/account.js.map +1 -0
- package/dist/lib/server/decisioning/admin-router.d.ts +75 -0
- package/dist/lib/server/decisioning/admin-router.d.ts.map +1 -0
- package/dist/lib/server/decisioning/admin-router.js +120 -0
- package/dist/lib/server/decisioning/admin-router.js.map +1 -0
- package/dist/lib/server/decisioning/assembly-helpers.d.ts +204 -0
- package/dist/lib/server/decisioning/assembly-helpers.d.ts.map +1 -0
- package/dist/lib/server/decisioning/assembly-helpers.js +173 -0
- package/dist/lib/server/decisioning/assembly-helpers.js.map +1 -0
- package/dist/lib/server/decisioning/async-outcome.d.ts +154 -0
- package/dist/lib/server/decisioning/async-outcome.d.ts.map +1 -0
- package/dist/lib/server/decisioning/async-outcome.js +239 -0
- package/dist/lib/server/decisioning/async-outcome.js.map +1 -0
- package/dist/lib/server/decisioning/capabilities.d.ts +251 -0
- package/dist/lib/server/decisioning/capabilities.d.ts.map +1 -0
- package/dist/lib/server/decisioning/capabilities.js +16 -0
- package/dist/lib/server/decisioning/capabilities.js.map +1 -0
- package/dist/lib/server/decisioning/context.d.ts +212 -0
- package/dist/lib/server/decisioning/context.d.ts.map +1 -0
- package/dist/lib/server/decisioning/context.js +26 -0
- package/dist/lib/server/decisioning/context.js.map +1 -0
- package/dist/lib/server/decisioning/errors-typed.d.ts +104 -0
- package/dist/lib/server/decisioning/errors-typed.d.ts.map +1 -0
- package/dist/lib/server/decisioning/errors-typed.js +304 -0
- package/dist/lib/server/decisioning/errors-typed.js.map +1 -0
- package/dist/lib/server/decisioning/helpers.d.ts +131 -0
- package/dist/lib/server/decisioning/helpers.d.ts.map +1 -0
- package/dist/lib/server/decisioning/helpers.js +134 -0
- package/dist/lib/server/decisioning/helpers.js.map +1 -0
- package/dist/lib/server/decisioning/index.d.ts +46 -0
- package/dist/lib/server/decisioning/index.d.ts.map +1 -0
- package/dist/lib/server/decisioning/index.js +120 -0
- package/dist/lib/server/decisioning/index.js.map +1 -0
- package/dist/lib/server/decisioning/list-helpers.d.ts +53 -0
- package/dist/lib/server/decisioning/list-helpers.d.ts.map +1 -0
- package/dist/lib/server/decisioning/list-helpers.js +96 -0
- package/dist/lib/server/decisioning/list-helpers.js.map +1 -0
- package/dist/lib/server/decisioning/manifest-helpers.d.ts +56 -0
- package/dist/lib/server/decisioning/manifest-helpers.d.ts.map +1 -0
- package/dist/lib/server/decisioning/manifest-helpers.js +78 -0
- package/dist/lib/server/decisioning/manifest-helpers.js.map +1 -0
- package/dist/lib/server/decisioning/pagination.d.ts +21 -0
- package/dist/lib/server/decisioning/pagination.d.ts.map +1 -0
- package/dist/lib/server/decisioning/pagination.js +12 -0
- package/dist/lib/server/decisioning/pagination.js.map +1 -0
- package/dist/lib/server/decisioning/platform.d.ts +188 -0
- package/dist/lib/server/decisioning/platform.d.ts.map +1 -0
- package/dist/lib/server/decisioning/platform.js +19 -0
- package/dist/lib/server/decisioning/platform.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts +510 -0
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/from-platform.js +2196 -0
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts +114 -0
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js +247 -0
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/protocol-for-tool.d.ts +32 -0
- package/dist/lib/server/decisioning/runtime/protocol-for-tool.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/protocol-for-tool.js +127 -0
- package/dist/lib/server/decisioning/runtime/protocol-for-tool.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts +105 -0
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/task-registry.js +96 -0
- package/dist/lib/server/decisioning/runtime/task-registry.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/to-context.d.ts +54 -0
- package/dist/lib/server/decisioning/runtime/to-context.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/to-context.js +166 -0
- package/dist/lib/server/decisioning/runtime/to-context.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/validate-platform.d.ts +20 -0
- package/dist/lib/server/decisioning/runtime/validate-platform.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/validate-platform.js +93 -0
- package/dist/lib/server/decisioning/runtime/validate-platform.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/audiences.d.ts +72 -0
- package/dist/lib/server/decisioning/specialisms/audiences.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/audiences.js +15 -0
- package/dist/lib/server/decisioning/specialisms/audiences.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts +92 -0
- package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/brand-rights.js +28 -0
- package/dist/lib/server/decisioning/specialisms/brand-rights.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/campaign-governance.d.ts +67 -0
- package/dist/lib/server/decisioning/specialisms/campaign-governance.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/campaign-governance.js +31 -0
- package/dist/lib/server/decisioning/specialisms/campaign-governance.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/content-standards.d.ts +78 -0
- package/dist/lib/server/decisioning/specialisms/content-standards.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/content-standards.js +35 -0
- package/dist/lib/server/decisioning/specialisms/content-standards.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts +81 -0
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.js +28 -0
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/creative.d.ts +144 -0
- package/dist/lib/server/decisioning/specialisms/creative.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/creative.js +19 -0
- package/dist/lib/server/decisioning/specialisms/creative.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/lists.d.ts +61 -0
- package/dist/lib/server/decisioning/specialisms/lists.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/lists.js +30 -0
- package/dist/lib/server/decisioning/specialisms/lists.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/sales.d.ts +163 -0
- package/dist/lib/server/decisioning/specialisms/sales.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/sales.js +64 -0
- package/dist/lib/server/decisioning/specialisms/sales.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/signals.d.ts +64 -0
- package/dist/lib/server/decisioning/specialisms/signals.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/signals.js +28 -0
- package/dist/lib/server/decisioning/specialisms/signals.js.map +1 -0
- package/dist/lib/server/decisioning/start-time.d.ts +76 -0
- package/dist/lib/server/decisioning/start-time.d.ts.map +1 -0
- package/dist/lib/server/decisioning/start-time.js +81 -0
- package/dist/lib/server/decisioning/start-time.js.map +1 -0
- package/dist/lib/server/decisioning/status-changes.d.ts +165 -0
- package/dist/lib/server/decisioning/status-changes.d.ts.map +1 -0
- package/dist/lib/server/decisioning/status-changes.js +131 -0
- package/dist/lib/server/decisioning/status-changes.js.map +1 -0
- package/dist/lib/server/decisioning/status-mappers.d.ts +46 -0
- package/dist/lib/server/decisioning/status-mappers.d.ts.map +1 -0
- package/dist/lib/server/decisioning/status-mappers.js +46 -0
- package/dist/lib/server/decisioning/status-mappers.js.map +1 -0
- package/dist/lib/server/decisioning/tenant-registry.d.ts +289 -0
- package/dist/lib/server/decisioning/tenant-registry.d.ts.map +1 -0
- package/dist/lib/server/decisioning/tenant-registry.js +503 -0
- package/dist/lib/server/decisioning/tenant-registry.js.map +1 -0
- package/dist/lib/server/express-adapter.d.ts +1 -1
- package/dist/lib/server/express-adapter.js +1 -1
- package/dist/lib/server/governance.d.ts +1 -1
- package/dist/lib/server/governance.js +1 -1
- package/dist/lib/server/idempotency/store.d.ts +1 -1
- package/dist/lib/server/idempotency/store.js +1 -1
- package/dist/lib/server/index.d.ts +9 -2
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +79 -4
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/legacy/v5/index.d.ts +38 -0
- package/dist/lib/server/legacy/v5/index.d.ts.map +1 -0
- package/dist/lib/server/legacy/v5/index.js +60 -0
- package/dist/lib/server/legacy/v5/index.js.map +1 -0
- package/dist/lib/server/normalize-errors.d.ts +88 -0
- package/dist/lib/server/normalize-errors.d.ts.map +1 -0
- package/dist/lib/server/normalize-errors.js +146 -0
- package/dist/lib/server/normalize-errors.js.map +1 -0
- package/dist/lib/server/pick-safe-details.d.ts +90 -0
- package/dist/lib/server/pick-safe-details.d.ts.map +1 -0
- package/dist/lib/server/pick-safe-details.js +148 -0
- package/dist/lib/server/pick-safe-details.js.map +1 -0
- package/dist/lib/server/postgres-state-store.d.ts +1 -1
- package/dist/lib/server/postgres-state-store.js +1 -1
- package/dist/lib/server/responses.d.ts +38 -0
- package/dist/lib/server/responses.d.ts.map +1 -1
- package/dist/lib/server/responses.js +38 -0
- package/dist/lib/server/responses.js.map +1 -1
- package/dist/lib/server/state-store.d.ts +1 -1
- package/dist/lib/server/state-store.js +1 -1
- package/dist/lib/server/test-controller.d.ts +10 -3
- package/dist/lib/server/test-controller.d.ts.map +1 -1
- package/dist/lib/server/test-controller.js +10 -3
- package/dist/lib/server/test-controller.js.map +1 -1
- package/dist/lib/testing/comply-controller.d.ts +47 -1
- package/dist/lib/testing/comply-controller.d.ts.map +1 -1
- package/dist/lib/testing/comply-controller.js +11 -4
- package/dist/lib/testing/comply-controller.js.map +1 -1
- package/dist/lib/testing/index.d.ts +1 -1
- package/dist/lib/testing/index.d.ts.map +1 -1
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/testing/personas/index.d.ts +143 -0
- package/dist/lib/testing/personas/index.d.ts.map +1 -0
- package/dist/lib/testing/personas/index.js +190 -0
- package/dist/lib/testing/personas/index.js.map +1 -0
- package/dist/lib/testing/storyboard/index.d.ts +1 -1
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +3 -2
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts +13 -0
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +179 -7
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/types/asset-instances.d.ts +1 -0
- package/dist/lib/types/asset-instances.d.ts.map +1 -1
- package/dist/lib/types/core.generated.d.ts +203 -98
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js +1 -1
- package/dist/lib/types/index.d.ts +1 -0
- package/dist/lib/types/index.d.ts.map +1 -1
- package/dist/lib/types/index.js.map +1 -1
- package/dist/lib/types/schemas.generated.d.ts +599 -159
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +175 -94
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +315 -46
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.d.ts +1 -1
- package/dist/lib/utils/capabilities.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.js +6 -0
- package/dist/lib/utils/capabilities.js.map +1 -1
- package/dist/lib/validation/schema-validator.d.ts +13 -0
- package/dist/lib/validation/schema-validator.d.ts.map +1 -1
- package/dist/lib/validation/schema-validator.js +240 -3
- package/dist/lib/validation/schema-validator.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/docs/guides/BUILD-AN-AGENT.md +30 -5
- package/docs/llms.txt +28 -17
- package/examples/README.md +3 -1
- package/examples/decisioning-platform-broadcast-tv.ts +300 -0
- package/examples/decisioning-platform-identity-graph.ts +214 -0
- package/examples/decisioning-platform-mock-seller.ts +332 -0
- package/examples/decisioning-platform-multi-tenant.ts +128 -0
- package/examples/decisioning-platform-programmatic.ts +254 -0
- package/examples/signals-agent.ts +1 -1
- package/package.json +13 -2
- package/skills/build-brand-rights-agent/SKILL.md +10 -3
- package/skills/build-creative-agent/SKILL.md +94 -64
- package/skills/build-decisioning-creative-template/SKILL.md +554 -0
- package/skills/build-decisioning-platform/SKILL.md +304 -0
- package/skills/build-decisioning-platform/advanced/BRAND-RIGHTS.md +25 -0
- package/skills/build-decisioning-platform/advanced/COMPLIANCE.md +23 -0
- package/skills/build-decisioning-platform/advanced/GOVERNANCE.md +24 -0
- package/skills/build-decisioning-platform/advanced/HITL.md +34 -0
- package/skills/build-decisioning-platform/advanced/IDEMPOTENCY.md +52 -0
- package/skills/build-decisioning-platform/advanced/MULTI-TENANT.md +47 -0
- package/skills/build-decisioning-platform/advanced/OAUTH.md +22 -0
- package/skills/build-decisioning-platform/advanced/REFERENCE.md +991 -0
- package/skills/build-decisioning-platform/advanced/SANDBOX.md +24 -0
- package/skills/build-decisioning-platform/advanced/STATE-MACHINE.md +52 -0
- package/skills/build-decisioning-signal-marketplace/SKILL.md +269 -0
- package/skills/build-generative-seller-agent/SKILL.md +89 -53
- package/skills/build-governance-agent/SKILL.md +76 -45
- package/skills/build-retail-media-agent/SKILL.md +87 -62
- package/skills/build-seller-agent/SKILL.md +384 -255
- package/skills/build-seller-agent/deployment.md +5 -3
- package/skills/build-seller-agent/specialisms/audience-sync.md +0 -2
- package/skills/build-seller-agent/specialisms/sales-broadcast-tv.md +0 -2
- package/skills/build-seller-agent/specialisms/sales-guaranteed.md +0 -2
- package/skills/build-seller-agent/specialisms/sales-non-guaranteed.md +0 -2
- package/skills/build-seller-agent/specialisms/sales-proposal-mode.md +0 -2
- package/skills/build-seller-agent/specialisms/sales-social.md +0 -2
- package/skills/build-seller-agent/specialisms/signed-requests.md +0 -2
- package/skills/build-si-agent/SKILL.md +40 -32
- package/skills/build-signals-agent/SKILL.md +139 -92
- package/skills/call-adcp-agent.previous/SKILL.md +5 -0
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TenantRegistry — multi-tenant deployment helper for the v6.0 decisioning
|
|
4
|
+
* runtime.
|
|
5
|
+
*
|
|
6
|
+
* Holds a map of `agentUrl → TenantConfig` and tracks per-tenant health.
|
|
7
|
+
* Composes with the existing `serve()` host-routing surface: the registry
|
|
8
|
+
* returns an `AdcpServer` factory that dispatches based on `ctx.host`.
|
|
9
|
+
*
|
|
10
|
+
* **Three health states**, never startup-fatal:
|
|
11
|
+
*
|
|
12
|
+
* - `healthy` — JWKS validated, accepting traffic normally.
|
|
13
|
+
* - `unverified` — validation hasn't completed (server starting, or
|
|
14
|
+
* JWKS unreachable transiently). Tenant accepts traffic with a
|
|
15
|
+
* warning header; framework periodically re-validates.
|
|
16
|
+
* - `disabled` — validation failed deterministically (signing key not
|
|
17
|
+
* in published JWKS, brand.json malformed). Tenant returns
|
|
18
|
+
* `SERVICE_UNAVAILABLE` until an admin recheck succeeds.
|
|
19
|
+
*
|
|
20
|
+
* One bad tenant doesn't take down others — health is per-tenant, the
|
|
21
|
+
* other tenants keep serving.
|
|
22
|
+
*
|
|
23
|
+
* Status: Preview / 6.0.
|
|
24
|
+
*
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.createDefaultJwksValidator = createDefaultJwksValidator;
|
|
29
|
+
exports.createTenantRegistry = createTenantRegistry;
|
|
30
|
+
const from_platform_1 = require("./runtime/from-platform");
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Default JWKS validator
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
/**
|
|
35
|
+
* Default JWKS validator. Fetches `{agentUrl}/.well-known/brand.json` and
|
|
36
|
+
* checks that `signingKey.publicJwk` appears in the JWKS keys array.
|
|
37
|
+
*
|
|
38
|
+
* Uses the global `fetch`. Network errors classify as `transient`;
|
|
39
|
+
* 4xx / parse-error / key-not-in-JWKS classify as `permanent`.
|
|
40
|
+
*/
|
|
41
|
+
function createDefaultJwksValidator(opts) {
|
|
42
|
+
const fetchImpl = opts?.fetchImpl ?? fetch;
|
|
43
|
+
// 10-second default timeout. A slow brand.json server (or a malicious
|
|
44
|
+
// one dribbling bytes) would otherwise pin the tenant in `pending`
|
|
45
|
+
// for the lifetime of the fetch — and `register({ awaitFirstValidation: true })`
|
|
46
|
+
// would block the booting host indefinitely. Adopters with strict SLAs
|
|
47
|
+
// pass a tighter value; adopters fronting brand.json behind a slow
|
|
48
|
+
// CDN can extend it. Round-6 Sec-M1.
|
|
49
|
+
const timeoutMs = opts?.timeoutMs ?? 10_000;
|
|
50
|
+
return {
|
|
51
|
+
async validate({ agentUrl, jwksUrl, signingKey }) {
|
|
52
|
+
// Explicit jwksUrl wins (sub-routed deployments where brand.json
|
|
53
|
+
// lives under a path prefix). Default falls back to the spec-
|
|
54
|
+
// canonical host-root location — `new URL('/.well-known/brand.json',
|
|
55
|
+
// agentUrl)` REPLACES the path because the second arg starts with
|
|
56
|
+
// '/'. That's correct for host-level brand identity (one brand per
|
|
57
|
+
// host), wrong for multi-tenant sub-routed deployments — adopters
|
|
58
|
+
// there set `TenantConfig.jwksUrl` to point at the per-tenant
|
|
59
|
+
// brand.json.
|
|
60
|
+
// Reject empty-string jwksUrl as defense-in-depth — `??` only
|
|
61
|
+
// catches null/undefined, so an empty string would otherwise
|
|
62
|
+
// reach `fetch('')` and produce an opaque error. Treat empty as
|
|
63
|
+
// "use default."
|
|
64
|
+
const url = jwksUrl && jwksUrl.length > 0 ? jwksUrl : new URL('/.well-known/brand.json', agentUrl).toString();
|
|
65
|
+
let response;
|
|
66
|
+
try {
|
|
67
|
+
response = await fetchImpl(url, { method: 'GET', signal: AbortSignal.timeout(timeoutMs) });
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
return {
|
|
71
|
+
ok: false,
|
|
72
|
+
recovery: 'transient',
|
|
73
|
+
reason: `JWKS fetch failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (!response.ok) {
|
|
77
|
+
return {
|
|
78
|
+
ok: false,
|
|
79
|
+
recovery: response.status >= 500 ? 'transient' : 'permanent',
|
|
80
|
+
reason: `JWKS fetch returned ${response.status} ${response.statusText}`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
let body;
|
|
84
|
+
try {
|
|
85
|
+
body = await response.json();
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
return {
|
|
89
|
+
ok: false,
|
|
90
|
+
recovery: 'permanent',
|
|
91
|
+
reason: `JWKS body not JSON: ${err instanceof Error ? err.message : String(err)}`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const jwks = body.jwks;
|
|
95
|
+
if (!jwks || !Array.isArray(jwks.keys)) {
|
|
96
|
+
return {
|
|
97
|
+
ok: false,
|
|
98
|
+
recovery: 'permanent',
|
|
99
|
+
reason: '`brand.json` has no `jwks.keys` array',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const matched = jwks.keys.find(k => isMatchingKey(k, signingKey.publicJwk, signingKey.keyId));
|
|
103
|
+
if (!matched) {
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
recovery: 'permanent',
|
|
107
|
+
reason: `signingKey.keyId='${signingKey.keyId}' not present in published JWKS`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return { ok: true };
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function isMatchingKey(jwk, expected, expectedKid) {
|
|
115
|
+
if (!jwk || typeof jwk !== 'object')
|
|
116
|
+
return false;
|
|
117
|
+
const k = jwk;
|
|
118
|
+
// Both `kid` AND public-key material must match. `kid` alone is NOT
|
|
119
|
+
// sufficient — RFC 7517 § 4.5 explicitly notes that `kid` is just a
|
|
120
|
+
// hint and clashes are possible. An attacker who can publish a JWKS
|
|
121
|
+
// with a colliding `kid` would otherwise bypass verification.
|
|
122
|
+
if (typeof k.kid === 'string' && k.kid !== expectedKid)
|
|
123
|
+
return false;
|
|
124
|
+
if (k.kty !== expected.kty)
|
|
125
|
+
return false;
|
|
126
|
+
// Structural equality on the public-half fields (n/e for RSA, x/y for
|
|
127
|
+
// EC, x for OKP). A full JWK thumbprint comparison (RFC 7638) would be
|
|
128
|
+
// more robust but this catches the typical "wrong key" case without
|
|
129
|
+
// pulling crypto deps in. Asymmetric pubkeys are public — comparing
|
|
130
|
+
// the components here doesn't need constant-time semantics.
|
|
131
|
+
if (expected.kty === 'RSA') {
|
|
132
|
+
return k.n === expected.n && k.e === expected.e;
|
|
133
|
+
}
|
|
134
|
+
if (expected.kty === 'EC') {
|
|
135
|
+
return k.crv === expected.crv && k.x === expected.x && k.y === expected.y;
|
|
136
|
+
}
|
|
137
|
+
if (expected.kty === 'OKP') {
|
|
138
|
+
return k.crv === expected.crv && k.x === expected.x;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Resolve the canonical agent URL + the full URL list from a TenantConfig.
|
|
144
|
+
*
|
|
145
|
+
* - `agentUrls` (when set) wins. First element is canonical (used for
|
|
146
|
+
* JWKS resolution and status reporting).
|
|
147
|
+
* - `agentUrl` (single-URL form) maps to a one-element list.
|
|
148
|
+
* - Setting both is a programmer error — refuse explicitly so the
|
|
149
|
+
* ambiguity doesn't silently drop one of them.
|
|
150
|
+
*
|
|
151
|
+
* Returns `[canonical, allUrls]`. `allUrls` is the routing surface;
|
|
152
|
+
* `canonical` is what JWKS / status reports use.
|
|
153
|
+
*/
|
|
154
|
+
function resolveTenantUrls(config) {
|
|
155
|
+
const list = config.agentUrls;
|
|
156
|
+
const single = config.agentUrl;
|
|
157
|
+
if (list !== undefined && single !== undefined) {
|
|
158
|
+
throw new Error('TenantConfig: set exactly one of `agentUrl` (single URL) or `agentUrls` (multi-URL). Setting both is ambiguous.');
|
|
159
|
+
}
|
|
160
|
+
if (list !== undefined) {
|
|
161
|
+
if (list.length === 0) {
|
|
162
|
+
throw new Error('TenantConfig: `agentUrls` must contain at least one URL when provided.');
|
|
163
|
+
}
|
|
164
|
+
return [list[0], list];
|
|
165
|
+
}
|
|
166
|
+
if (single !== undefined) {
|
|
167
|
+
return [single, [single]];
|
|
168
|
+
}
|
|
169
|
+
throw new Error('TenantConfig: must provide either `agentUrl` or `agentUrls`.');
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Parse host + path prefix from an agent URL. Normalizes the path:
|
|
173
|
+
* always starts with `/`; trailing `/` stripped unless the prefix is
|
|
174
|
+
* itself `/` (root, the subdomain-routing case).
|
|
175
|
+
*/
|
|
176
|
+
function parseHostAndPrefix(agentUrl) {
|
|
177
|
+
const url = new URL(agentUrl);
|
|
178
|
+
const host = url.host.toLowerCase();
|
|
179
|
+
let pathPrefix = url.pathname || '/';
|
|
180
|
+
if (pathPrefix.length > 1 && pathPrefix.endsWith('/')) {
|
|
181
|
+
pathPrefix = pathPrefix.slice(0, -1);
|
|
182
|
+
}
|
|
183
|
+
return { host, pathPrefix };
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Does `requestPath` fall under tenant's `pathPrefix`?
|
|
187
|
+
*
|
|
188
|
+
* - Tenant prefix `/` matches any path (subdomain-routing case).
|
|
189
|
+
* - Tenant prefix `/sales` matches `/sales`, `/sales/mcp`, `/sales/a2a`, etc.
|
|
190
|
+
* Does NOT match `/sales-broadcast` (no boundary).
|
|
191
|
+
*
|
|
192
|
+
* **Caller contract.** `requestPath` MUST be a normalized URL pathname:
|
|
193
|
+
* no query string, no fragment, no leading scheme/authority. Express's
|
|
194
|
+
* `req.path`, Node's `new URL(req.url, base).pathname`, or any
|
|
195
|
+
* properly-decoded equivalent. Raw `req.url` includes the query string
|
|
196
|
+
* (`/sales/mcp?token=abc`) which fails the boundary check at the `?`
|
|
197
|
+
* char. The framework strips query/fragment defensively (see
|
|
198
|
+
* `stripQueryAndFragment`) but downstream URL normalization (`..`
|
|
199
|
+
* resolution, percent-decoding) is the caller's responsibility.
|
|
200
|
+
*/
|
|
201
|
+
function pathPrefixMatches(pathPrefix, requestPath) {
|
|
202
|
+
if (pathPrefix === '/')
|
|
203
|
+
return true;
|
|
204
|
+
if (!requestPath.startsWith(pathPrefix))
|
|
205
|
+
return false;
|
|
206
|
+
// Boundary check: char immediately after the prefix must be `/` or
|
|
207
|
+
// end-of-string. Prevents `/sales` from matching `/sales-broadcast`.
|
|
208
|
+
const next = requestPath.charAt(pathPrefix.length);
|
|
209
|
+
return next === '' || next === '/';
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Defensive normalization for callers who hand us `req.url` (raw HTTP
|
|
213
|
+
* path with query / fragment). Strips `?...` and `#...` so the boundary
|
|
214
|
+
* check in `pathPrefixMatches` works. Idempotent on already-normalized
|
|
215
|
+
* paths.
|
|
216
|
+
*/
|
|
217
|
+
function stripQueryAndFragment(pathname) {
|
|
218
|
+
const queryIdx = pathname.indexOf('?');
|
|
219
|
+
const fragmentIdx = pathname.indexOf('#');
|
|
220
|
+
let cut = pathname.length;
|
|
221
|
+
if (queryIdx !== -1 && queryIdx < cut)
|
|
222
|
+
cut = queryIdx;
|
|
223
|
+
if (fragmentIdx !== -1 && fragmentIdx < cut)
|
|
224
|
+
cut = fragmentIdx;
|
|
225
|
+
return cut === pathname.length ? pathname : pathname.slice(0, cut);
|
|
226
|
+
}
|
|
227
|
+
function createTenantRegistry(opts) {
|
|
228
|
+
const validator = opts.jwksValidator ?? createDefaultJwksValidator();
|
|
229
|
+
const autoValidate = opts.autoValidate ?? true;
|
|
230
|
+
// One-shot footgun guard: developers reaching for `autoValidate: false`
|
|
231
|
+
// typically expect "skip the validation cost," but the actual semantics
|
|
232
|
+
// are "every tenant lands in `pending` and `resolveByRequest` silently
|
|
233
|
+
// refuses traffic until the operator calls `recheck()` on each one."
|
|
234
|
+
// That divergence is hard to debug without a clue. Surface it once at
|
|
235
|
+
// construction so the test/dev path stays usable but the production
|
|
236
|
+
// misuse is visible.
|
|
237
|
+
if (opts.autoValidate === false) {
|
|
238
|
+
// eslint-disable-next-line no-console
|
|
239
|
+
console.warn("[adcp] TenantRegistry created with autoValidate: false — every register() lands tenants in 'pending' " +
|
|
240
|
+
'health and resolveByRequest will refuse all traffic until you call recheck(tenantId) on each one. ' +
|
|
241
|
+
'If you wanted to skip validation cost, REMOVE the flag — the default (true) validates in the ' +
|
|
242
|
+
'background and traffic is served as soon as the first validation succeeds. autoValidate: false ' +
|
|
243
|
+
'only suits tests that drive recheck() manually.');
|
|
244
|
+
}
|
|
245
|
+
const tenants = new Map();
|
|
246
|
+
function buildServer(config) {
|
|
247
|
+
const merged = {
|
|
248
|
+
...opts.defaultServerOptions,
|
|
249
|
+
...config.serverOptions,
|
|
250
|
+
};
|
|
251
|
+
return (0, from_platform_1.createAdcpServerFromPlatform)(config.platform, merged);
|
|
252
|
+
}
|
|
253
|
+
async function runValidation(tenantId) {
|
|
254
|
+
const entry = tenants.get(tenantId);
|
|
255
|
+
if (!entry) {
|
|
256
|
+
throw new Error(`runValidation: tenant '${tenantId}' not registered`);
|
|
257
|
+
}
|
|
258
|
+
const [canonicalUrl, allUrls] = resolveTenantUrls(entry.config);
|
|
259
|
+
// Multi-URL tenants validate every URL independently. Aliases share the
|
|
260
|
+
// signing key; if an alias publishes a brand.json that doesn't include
|
|
261
|
+
// the key (DNS hijack, operator misconfig, stale mirror), traffic to
|
|
262
|
+
// that alias would receive responses no buyer can verify. Aggregate
|
|
263
|
+
// failures: tenant is healthy iff ALL URLs validate; first permanent
|
|
264
|
+
// failure → disabled; transient-only → pending/unverified per existing
|
|
265
|
+
// policy. The explicit `jwksUrl` override applies to all URLs (the
|
|
266
|
+
// documented contract for sub-routed deployments).
|
|
267
|
+
const perUrlResults = [];
|
|
268
|
+
for (const url of allUrls) {
|
|
269
|
+
let res;
|
|
270
|
+
try {
|
|
271
|
+
res = await validator.validate({
|
|
272
|
+
agentUrl: url,
|
|
273
|
+
...(entry.config.jwksUrl !== undefined && { jwksUrl: entry.config.jwksUrl }),
|
|
274
|
+
signingKey: entry.config.signingKey,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
catch (err) {
|
|
278
|
+
res = {
|
|
279
|
+
ok: false,
|
|
280
|
+
recovery: 'transient',
|
|
281
|
+
reason: `validator threw on '${url}': ${err instanceof Error ? err.message : String(err)}`,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
perUrlResults.push({ url, res });
|
|
285
|
+
// First permanent failure short-circuits — no point hitting the rest;
|
|
286
|
+
// the tenant is going to disabled regardless.
|
|
287
|
+
if (!res.ok && res.recovery === 'permanent')
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
// Aggregate: pick the worst outcome across the urls we validated.
|
|
291
|
+
let result;
|
|
292
|
+
const firstPermanent = perUrlResults.find(r => !r.res.ok && r.res.recovery === 'permanent');
|
|
293
|
+
const firstTransient = perUrlResults.find(r => !r.res.ok && r.res.recovery === 'transient');
|
|
294
|
+
if (firstPermanent) {
|
|
295
|
+
result = {
|
|
296
|
+
ok: false,
|
|
297
|
+
recovery: 'permanent',
|
|
298
|
+
reason: `${firstPermanent.url}: ${firstPermanent.res.reason}`,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
else if (firstTransient) {
|
|
302
|
+
result = {
|
|
303
|
+
ok: false,
|
|
304
|
+
recovery: 'transient',
|
|
305
|
+
reason: `${firstTransient.url}: ${firstTransient.res.reason}`,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
result = { ok: true };
|
|
310
|
+
}
|
|
311
|
+
const now = new Date().toISOString();
|
|
312
|
+
const wasFirstValidation = entry.status.health === 'pending';
|
|
313
|
+
const baseStatus = { tenantId, agentUrl: canonicalUrl, agentUrls: allUrls, lastCheckedAt: now };
|
|
314
|
+
let status;
|
|
315
|
+
if (result.ok) {
|
|
316
|
+
status = { ...baseStatus, health: 'healthy' };
|
|
317
|
+
}
|
|
318
|
+
else if (result.recovery === 'transient') {
|
|
319
|
+
// Transient failure on FIRST validation → stay `pending` (refuse
|
|
320
|
+
// traffic). Transient failure AFTER first success → `unverified`
|
|
321
|
+
// (graceful degradation — the tenant's known good).
|
|
322
|
+
status = {
|
|
323
|
+
...baseStatus,
|
|
324
|
+
health: wasFirstValidation ? 'pending' : 'unverified',
|
|
325
|
+
reason: result.reason,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
// Permanent failure → `disabled` regardless of prior state. The
|
|
330
|
+
// signing-key material doesn't match what's published; refusing
|
|
331
|
+
// traffic is the safe default.
|
|
332
|
+
status = { ...baseStatus, health: 'disabled', reason: result.reason };
|
|
333
|
+
}
|
|
334
|
+
entry.status = status;
|
|
335
|
+
return status;
|
|
336
|
+
}
|
|
337
|
+
return {
|
|
338
|
+
register(tenantId, config, opts) {
|
|
339
|
+
if (tenants.has(tenantId)) {
|
|
340
|
+
throw new Error(`tenant '${tenantId}' already registered; unregister first`);
|
|
341
|
+
}
|
|
342
|
+
const [canonicalUrl, allUrls] = resolveTenantUrls(config);
|
|
343
|
+
const routes = allUrls.map(url => parseHostAndPrefix(url));
|
|
344
|
+
// Reject overlapping (host, pathPrefix) routes against already-registered
|
|
345
|
+
// tenants. Without this, two tenants can claim the same alias host
|
|
346
|
+
// silently — `resolveByRequest` picks the first-inserted (deterministic
|
|
347
|
+
// per-process via Map insertion order, but cross-process flaky on
|
|
348
|
+
// restart-order changes). Surface the collision now rather than
|
|
349
|
+
// discover it in production. Round-1 expert review (security-medium).
|
|
350
|
+
for (const route of routes) {
|
|
351
|
+
for (const [otherId, otherEntry] of tenants) {
|
|
352
|
+
for (const otherRoute of otherEntry.routes) {
|
|
353
|
+
if (otherRoute.host === route.host && otherRoute.pathPrefix === route.pathPrefix) {
|
|
354
|
+
throw new Error(`tenant '${tenantId}' route ${route.host}${route.pathPrefix} collides with tenant '${otherId}'; ` +
|
|
355
|
+
`register them under distinct hosts or path prefixes`);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
const server = buildServer(config);
|
|
361
|
+
const initialStatus = {
|
|
362
|
+
tenantId,
|
|
363
|
+
agentUrl: canonicalUrl,
|
|
364
|
+
agentUrls: allUrls,
|
|
365
|
+
// `pending` (NOT `unverified`) — first validation hasn't run.
|
|
366
|
+
// resolveByHost refuses traffic until validation succeeds at
|
|
367
|
+
// least once. Closes the register-then-serve race window.
|
|
368
|
+
health: 'pending',
|
|
369
|
+
reason: 'awaiting initial JWKS validation',
|
|
370
|
+
lastCheckedAt: new Date().toISOString(),
|
|
371
|
+
};
|
|
372
|
+
const entry = {
|
|
373
|
+
config: config,
|
|
374
|
+
server,
|
|
375
|
+
status: initialStatus,
|
|
376
|
+
routes,
|
|
377
|
+
};
|
|
378
|
+
tenants.set(tenantId, entry);
|
|
379
|
+
// Operability: log when an explicit jwksUrl points somewhere
|
|
380
|
+
// OTHER than the spec-canonical agentUrl-relative location. An
|
|
381
|
+
// admin who pasted a typo into config gets a visible audit trail
|
|
382
|
+
// before the tenant goes live; a sub-routed deployment that
|
|
383
|
+
// intentionally overrode sees the configured URL confirmed.
|
|
384
|
+
// One-shot per register() — not per validate() — so periodic
|
|
385
|
+
// rechecks don't spam logs.
|
|
386
|
+
if (config.jwksUrl && config.jwksUrl.length > 0) {
|
|
387
|
+
let canonical;
|
|
388
|
+
try {
|
|
389
|
+
canonical = new URL('/.well-known/brand.json', canonicalUrl).toString();
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
canonical = '<invalid agentUrl>';
|
|
393
|
+
}
|
|
394
|
+
if (config.jwksUrl !== canonical) {
|
|
395
|
+
// eslint-disable-next-line no-console
|
|
396
|
+
console.info(`[adcp] tenant '${tenantId}' jwksUrl override: '${config.jwksUrl}' (spec-canonical from agentUrl: '${canonical}')`);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
if (!autoValidate)
|
|
400
|
+
return;
|
|
401
|
+
const validation = runValidation(tenantId);
|
|
402
|
+
entry.pending = validation;
|
|
403
|
+
// Always clear pending on settle so subsequent recheck() doesn't
|
|
404
|
+
// dedupe against a settled promise.
|
|
405
|
+
validation.finally(() => {
|
|
406
|
+
if (entry.pending === validation)
|
|
407
|
+
entry.pending = undefined;
|
|
408
|
+
});
|
|
409
|
+
if (opts?.awaitFirstValidation) {
|
|
410
|
+
return validation;
|
|
411
|
+
}
|
|
412
|
+
// Background fire — log throws so they don't surface as
|
|
413
|
+
// UnhandledPromiseRejection. (runValidation now catches inside;
|
|
414
|
+
// belt-and-suspenders.)
|
|
415
|
+
validation.catch((err) => {
|
|
416
|
+
// eslint-disable-next-line no-console
|
|
417
|
+
console.warn(`[adcp] tenant '${tenantId}' validation threw:`, err);
|
|
418
|
+
});
|
|
419
|
+
},
|
|
420
|
+
unregister(tenantId) {
|
|
421
|
+
tenants.delete(tenantId);
|
|
422
|
+
},
|
|
423
|
+
resolveByHost(host) {
|
|
424
|
+
// Convenience for subdomain-routed deployments — request path is
|
|
425
|
+
// implicitly `/`, which only matches root-prefix tenants.
|
|
426
|
+
return this.resolveByRequest(host, '/');
|
|
427
|
+
},
|
|
428
|
+
resolveByRequest(host, pathname) {
|
|
429
|
+
const lowered = host.toLowerCase();
|
|
430
|
+
// Strip query/fragment defensively — adopters wiring `req.url`
|
|
431
|
+
// (Node raw HTTP) instead of `req.path` (Express normalized)
|
|
432
|
+
// would otherwise fail the boundary check on `/sales/mcp?x=1`.
|
|
433
|
+
const cleanPath = stripQueryAndFragment(pathname);
|
|
434
|
+
let best = null;
|
|
435
|
+
for (const [tenantId, entry] of tenants) {
|
|
436
|
+
// Refuse traffic for pending (first validation hasn't succeeded)
|
|
437
|
+
// and disabled (permanent validation failure). `unverified` —
|
|
438
|
+
// previously healthy, latest recheck failed transiently — still
|
|
439
|
+
// resolves; operators choose graceful degradation here.
|
|
440
|
+
if (entry.status.health === 'pending' || entry.status.health === 'disabled')
|
|
441
|
+
continue;
|
|
442
|
+
// Multi-URL tenants register one route per `agentUrls[]` entry.
|
|
443
|
+
// Longest-prefix match across ALL routes on ALL tenants wins —
|
|
444
|
+
// a tenant with `/sales-broadcast` on alias-host beats a tenant
|
|
445
|
+
// with `/sales` on canonical-host for `/sales-broadcast/mcp`.
|
|
446
|
+
for (const route of entry.routes) {
|
|
447
|
+
if (route.host !== lowered)
|
|
448
|
+
continue;
|
|
449
|
+
if (!pathPrefixMatches(route.pathPrefix, cleanPath))
|
|
450
|
+
continue;
|
|
451
|
+
const prefixLength = route.pathPrefix === '/' ? 0 : route.pathPrefix.length;
|
|
452
|
+
if (best === null || prefixLength > best.prefixLength) {
|
|
453
|
+
best = { tenantId, entry, prefixLength };
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
if (best === null)
|
|
458
|
+
return null;
|
|
459
|
+
return { tenantId: best.tenantId, config: best.entry.config, server: best.entry.server };
|
|
460
|
+
},
|
|
461
|
+
get(tenantId) {
|
|
462
|
+
const entry = tenants.get(tenantId);
|
|
463
|
+
if (!entry)
|
|
464
|
+
return null;
|
|
465
|
+
// Same health gate as resolveByRequest — pending tenants haven't
|
|
466
|
+
// been validated yet, disabled tenants permanently failed.
|
|
467
|
+
// unverified (post-healthy transient failure) resolves normally.
|
|
468
|
+
if (entry.status.health === 'pending' || entry.status.health === 'disabled')
|
|
469
|
+
return null;
|
|
470
|
+
return { tenantId, config: entry.config, server: entry.server };
|
|
471
|
+
},
|
|
472
|
+
getStatus(tenantId) {
|
|
473
|
+
const entry = tenants.get(tenantId);
|
|
474
|
+
return entry?.status ?? null;
|
|
475
|
+
},
|
|
476
|
+
list() {
|
|
477
|
+
return Array.from(tenants.values()).map(e => e.status);
|
|
478
|
+
},
|
|
479
|
+
async recheck(tenantId) {
|
|
480
|
+
const entry = tenants.get(tenantId);
|
|
481
|
+
if (!entry) {
|
|
482
|
+
throw new Error(`recheck: tenant '${tenantId}' not registered`);
|
|
483
|
+
}
|
|
484
|
+
// Dedupe concurrent rechecks against the same tenant.
|
|
485
|
+
if (entry.pending) {
|
|
486
|
+
try {
|
|
487
|
+
await entry.pending;
|
|
488
|
+
}
|
|
489
|
+
catch {
|
|
490
|
+
// ignore — fall through to fresh recheck
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
entry.pending = runValidation(tenantId);
|
|
494
|
+
try {
|
|
495
|
+
return await entry.pending;
|
|
496
|
+
}
|
|
497
|
+
finally {
|
|
498
|
+
entry.pending = undefined;
|
|
499
|
+
}
|
|
500
|
+
},
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
//# sourceMappingURL=tenant-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-registry.js","sourceRoot":"","sources":["../../../../src/lib/server/decisioning/tenant-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
*
|
|
30
30
|
* ```ts
|
|
31
31
|
* import express from 'express';
|
|
32
|
-
* import { createAdcpServer, createExpressAdapter } from '@adcp/sdk/server';
|
|
32
|
+
* import { createAdcpServer, createExpressAdapter } from '@adcp/sdk/server/legacy/v5';
|
|
33
33
|
*
|
|
34
34
|
* const agent = createAdcpServer({ ...handlers });
|
|
35
35
|
* const adapter = createExpressAdapter({
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
*
|
|
31
31
|
* ```ts
|
|
32
32
|
* import express from 'express';
|
|
33
|
-
* import { createAdcpServer, createExpressAdapter } from '@adcp/sdk/server';
|
|
33
|
+
* import { createAdcpServer, createExpressAdapter } from '@adcp/sdk/server/legacy/v5';
|
|
34
34
|
*
|
|
35
35
|
* const agent = createAdcpServer({ ...handlers });
|
|
36
36
|
* const adapter = createExpressAdapter({
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
*
|
|
23
23
|
* @example
|
|
24
24
|
* ```typescript
|
|
25
|
-
* import { createAdcpServer, checkGovernance, governanceDeniedError } from '@adcp/sdk/server';
|
|
25
|
+
* import { createAdcpServer, checkGovernance, governanceDeniedError } from '@adcp/sdk/server/legacy/v5';
|
|
26
26
|
*
|
|
27
27
|
* const server = createAdcpServer({
|
|
28
28
|
* name: 'My Publisher', version: '1.0.0',
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
*
|
|
24
24
|
* @example
|
|
25
25
|
* ```typescript
|
|
26
|
-
* import { createAdcpServer, checkGovernance, governanceDeniedError } from '@adcp/sdk/server';
|
|
26
|
+
* import { createAdcpServer, checkGovernance, governanceDeniedError } from '@adcp/sdk/server/legacy/v5';
|
|
27
27
|
*
|
|
28
28
|
* const server = createAdcpServer({
|
|
29
29
|
* name: 'My Publisher', version: '1.0.0',
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
*
|
|
21
21
|
* @example
|
|
22
22
|
* ```typescript
|
|
23
|
-
* import { createAdcpServer, createIdempotencyStore, memoryBackend } from '@adcp/sdk/server';
|
|
23
|
+
* import { createAdcpServer, createIdempotencyStore, memoryBackend } from '@adcp/sdk/server/legacy/v5';
|
|
24
24
|
*
|
|
25
25
|
* const idempotency = createIdempotencyStore({
|
|
26
26
|
* backend: memoryBackend(),
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
*
|
|
22
22
|
* @example
|
|
23
23
|
* ```typescript
|
|
24
|
-
* import { createAdcpServer, createIdempotencyStore, memoryBackend } from '@adcp/sdk/server';
|
|
24
|
+
* import { createAdcpServer, createIdempotencyStore, memoryBackend } from '@adcp/sdk/server/legacy/v5';
|
|
25
25
|
*
|
|
26
26
|
* const idempotency = createIdempotencyStore({
|
|
27
27
|
* backend: memoryBackend(),
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export { adcpError } from './errors';
|
|
2
2
|
export type { AdcpErrorOptions, AdcpErrorPayload, AdcpErrorResponse } from './errors';
|
|
3
|
+
export { normalizeError, normalizeErrors } from './normalize-errors';
|
|
4
|
+
export type { NormalizedError } from './normalize-errors';
|
|
5
|
+
export { pickSafeDetails } from './pick-safe-details';
|
|
6
|
+
export type { PickSafeDetailsOptions } from './pick-safe-details';
|
|
3
7
|
export { wrapEnvelope } from './wrap-envelope';
|
|
4
8
|
export type { WrapEnvelopeOptions } from './wrap-envelope';
|
|
5
9
|
export { ERROR_ENVELOPE_FIELD_ALLOWLIST, DEFAULT_ERROR_ENVELOPE_FIELDS, ADCP_ERROR_FIELD_ALLOWLIST, CONFLICT_ADCP_ERROR_ALLOWLIST, } from './envelope-allowlist';
|
|
@@ -28,9 +32,9 @@ export type { AdcpStateStore, InMemoryStateStoreOptions, ListOptions, ListResult
|
|
|
28
32
|
export { PostgresStateStore, getAdcpStateMigration, ADCP_STATE_MIGRATION } from './postgres-state-store';
|
|
29
33
|
export type { PostgresStateStoreOptions } from './postgres-state-store';
|
|
30
34
|
export { structuredSerialize, structuredDeserialize } from './structured-serialize';
|
|
31
|
-
export {
|
|
35
|
+
export { requireSessionKey, ADCP_PRE_TRANSPORT, ADCP_SIGNED_REQUESTS_STATE } from './create-adcp-server';
|
|
32
36
|
export type { AdcpServer, AdcpServerComplianceApi, AdcpServerTransport, AdcpTestRequest, AdcpTestToolsCallRequest, AdcpTestResponse, } from './adcp-server';
|
|
33
|
-
export type { AdcpServerConfig, AdcpToolMap, AdcpServerToolName, AdcpCapabilitiesConfig, AdcpCapabilitiesOverrides, AdcpCustomToolConfig, AdcpLogger, SignedRequestsConfig, AdcpPreTransport, AdcpSignedRequestsState, HandlerContext, SessionKeyContext, MediaBuyHandlers, SignalsHandlers, CreativeHandlers, GovernanceHandlers, AccountHandlers, EventTrackingHandlers, SponsoredIntelligenceHandlers, ResolveAccountContext, } from './create-adcp-server';
|
|
37
|
+
export type { AdcpServerConfig, WebhooksConfig, AdcpToolMap, AdcpServerToolName, AdcpCapabilitiesConfig, AdcpCapabilitiesOverrides, AdcpCustomToolConfig, AdcpLogger, SignedRequestsConfig, AdcpPreTransport, AdcpSignedRequestsState, HandlerContext, SessionKeyContext, MediaBuyHandlers, SignalsHandlers, CreativeHandlers, GovernanceHandlers, AccountHandlers, EventTrackingHandlers, SponsoredIntelligenceHandlers, ResolveAccountContext, } from './create-adcp-server';
|
|
34
38
|
export { DEFAULT_REPORTING_CAPABILITIES } from './product-defaults';
|
|
35
39
|
export { isSandboxRequest, mergeSeededProductsIntoResponse, filterValidSeededProducts, bridgeFromTestControllerStore, bridgeFromSessionStore, } from './test-controller-bridge';
|
|
36
40
|
export type { TestControllerBridge, TestControllerBridgeContext, BridgeFromSessionStoreOptions, } from './test-controller-bridge';
|
|
@@ -47,4 +51,7 @@ export { checkGovernance, governanceDeniedError } from './governance';
|
|
|
47
51
|
export type { CheckGovernanceOptions, GovernanceCallResult, GovernanceApproved, GovernanceDenied, GovernanceConditions, } from './governance';
|
|
48
52
|
export { resolvePropertyList, resolveCollectionList, matchesPropertyList, matchesCollectionList, } from './targeting-helpers';
|
|
49
53
|
export type { ResolvedPropertyList, ResolvedCollectionList, ResolvedCollection, ResolveListOptions, } from './targeting-helpers';
|
|
54
|
+
export * from './decisioning';
|
|
55
|
+
export { createCtxMetadataStore, memoryCtxMetadataStore, pgCtxMetadataStore, getCtxMetadataMigration, cleanupExpiredCtxMetadata, CTX_METADATA_MIGRATION, CtxMetadataValidationError, ADCP_INTERNAL_TAG, DEFAULT_MAX_VALUE_BYTES, MAX_TTL_SECONDS, stripCtxMetadata, hasCtxMetadata, ctxMetadataResultKey, scopeCtxMetadataKey, } from './ctx-metadata';
|
|
56
|
+
export type { CtxMetadataStore, CtxMetadataStoreConfig, CtxMetadataBackend, CtxMetadataEntry, CtxMetadataRef, ResourceKind as CtxMetadataResourceKind, MemoryCtxMetadataStoreOptions, PgCtxMetadataBackendOptions, WireShape, } from './ctx-metadata';
|
|
50
57
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/server/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/server/index.ts"],"names":[],"mappings":"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"}
|