@adcp/sdk 13.0.0-rc.8 → 13.0.0-rc.9
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/dist/lib/adapters/roster-account-store.d.mts +9 -8
- package/dist/lib/adapters/roster-account-store.d.ts +9 -8
- package/dist/lib/adapters/roster-account-store.d.ts.map +1 -1
- package/dist/lib/adapters/roster-account-store.js +2 -1
- package/dist/lib/adapters/roster-account-store.js.map +1 -1
- package/dist/lib/adapters/roster-account-store.mjs +2 -1
- package/dist/lib/adapters/roster-account-store.mjs.map +1 -1
- package/dist/lib/net/address-guards.d.ts.map +1 -1
- package/dist/lib/net/address-guards.js +6 -0
- package/dist/lib/net/address-guards.js.map +1 -1
- package/dist/lib/net/address-guards.mjs +6 -0
- package/dist/lib/net/address-guards.mjs.map +1 -1
- package/dist/lib/net/ssrf-fetch.d.ts.map +1 -1
- package/dist/lib/net/ssrf-fetch.js +66 -53
- package/dist/lib/net/ssrf-fetch.js.map +1 -1
- package/dist/lib/net/ssrf-fetch.mjs +66 -53
- package/dist/lib/net/ssrf-fetch.mjs.map +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/account-mode.d.mts +2 -1
- package/dist/lib/server/account-mode.d.ts +2 -1
- package/dist/lib/server/account-mode.d.ts.map +1 -1
- package/dist/lib/server/account-mode.js +1 -0
- package/dist/lib/server/account-mode.js.map +1 -1
- package/dist/lib/server/account-mode.mjs +1 -0
- package/dist/lib/server/account-mode.mjs.map +1 -1
- package/dist/lib/server/create-adcp-server.d.mts +10 -6
- package/dist/lib/server/create-adcp-server.d.ts +10 -6
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +2 -1
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/create-adcp-server.mjs +2 -1
- package/dist/lib/server/create-adcp-server.mjs.map +1 -1
- package/dist/lib/server/decisioning/account.d.mts +16 -11
- package/dist/lib/server/decisioning/account.d.ts +16 -11
- package/dist/lib/server/decisioning/account.d.ts.map +1 -1
- package/dist/lib/server/decisioning/account.js.map +1 -1
- package/dist/lib/server/decisioning/account.mjs.map +1 -1
- package/dist/lib/server/decisioning/pagination.d.mts +2 -0
- package/dist/lib/server/decisioning/pagination.d.ts +2 -0
- package/dist/lib/server/decisioning/pagination.d.ts.map +1 -1
- package/dist/lib/server/decisioning/pagination.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.d.mts +20 -14
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts +20 -14
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +32 -6
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.mjs +32 -6
- package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
- package/dist/lib/server/decisioning/specialisms/sales.d.mts +16 -4
- package/dist/lib/server/decisioning/specialisms/sales.d.ts +16 -4
- package/dist/lib/server/decisioning/specialisms/sales.d.ts.map +1 -1
- package/dist/lib/server/decisioning/specialisms/sales.js.map +1 -1
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/index.mjs.map +1 -1
- package/dist/lib/server/legacy/v5/index.d.mts +2 -1
- package/dist/lib/server/legacy/v5/index.d.ts +2 -1
- package/dist/lib/server/legacy/v5/index.d.ts.map +1 -1
- package/dist/lib/server/legacy/v5/index.js.map +1 -1
- package/dist/lib/server/legacy/v5/index.mjs.map +1 -1
- package/dist/lib/testing/compliance/comply.d.mts +2 -0
- package/dist/lib/testing/compliance/comply.d.ts +2 -0
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +45 -14
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/comply.mjs +45 -14
- package/dist/lib/testing/compliance/comply.mjs.map +1 -1
- package/dist/lib/testing/compliance/index.d.mts +1 -1
- package/dist/lib/testing/compliance/index.d.ts +1 -1
- package/dist/lib/testing/compliance/index.d.ts.map +1 -1
- package/dist/lib/testing/compliance/index.js.map +1 -1
- package/dist/lib/testing/compliance/index.mjs.map +1 -1
- package/dist/lib/testing/compliance/storyboard-tracks.d.ts.map +1 -1
- package/dist/lib/testing/compliance/storyboard-tracks.js +9 -1
- package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -1
- package/dist/lib/testing/compliance/storyboard-tracks.mjs +9 -1
- package/dist/lib/testing/compliance/storyboard-tracks.mjs.map +1 -1
- package/dist/lib/testing/compliance/types.d.mts +26 -25
- package/dist/lib/testing/compliance/types.d.ts +26 -25
- package/dist/lib/testing/compliance/types.d.ts.map +1 -1
- package/dist/lib/testing/compliance/types.js.map +1 -1
- package/dist/lib/testing/index.d.mts +2 -2
- package/dist/lib/testing/index.d.ts +2 -2
- package/dist/lib/testing/index.d.ts.map +1 -1
- package/dist/lib/testing/index.js +16 -0
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/testing/index.mjs +16 -0
- package/dist/lib/testing/index.mjs.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.js +20 -12
- package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.mjs +20 -12
- package/dist/lib/testing/scenarios/media-buy.mjs.map +1 -1
- package/dist/lib/testing/storyboard/creative-assets.d.mts +23 -0
- package/dist/lib/testing/storyboard/creative-assets.d.ts +23 -0
- package/dist/lib/testing/storyboard/creative-assets.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/creative-assets.js +322 -45
- package/dist/lib/testing/storyboard/creative-assets.js.map +1 -1
- package/dist/lib/testing/storyboard/creative-assets.mjs +321 -45
- package/dist/lib/testing/storyboard/creative-assets.mjs.map +1 -1
- package/dist/lib/testing/storyboard/index.d.mts +4 -1
- package/dist/lib/testing/storyboard/index.d.ts +4 -1
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +20 -0
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/index.mjs +19 -0
- package/dist/lib/testing/storyboard/index.mjs.map +1 -1
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.d.mts +21 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.d.ts +22 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.js +668 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.js.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.mjs +638 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.mjs.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.d.mts +5 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.d.ts +6 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.js +44 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.js.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.mjs +20 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.mjs.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.d.mts +38 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.d.ts +39 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.js +17 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.js.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.mjs +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.mjs.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.d.mts +32 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.d.ts +33 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.js +105 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.js.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.mjs +80 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.mjs.map +1 -0
- package/dist/lib/testing/storyboard/probes.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/probes.js +2 -1
- package/dist/lib/testing/storyboard/probes.js.map +1 -1
- package/dist/lib/testing/storyboard/probes.mjs +2 -1
- package/dist/lib/testing/storyboard/probes.mjs.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +382 -69
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.mjs +387 -70
- package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
- package/dist/lib/testing/storyboard/seeding.js +3 -1
- package/dist/lib/testing/storyboard/seeding.js.map +1 -1
- package/dist/lib/testing/storyboard/seeding.mjs +3 -1
- package/dist/lib/testing/storyboard/seeding.mjs.map +1 -1
- package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/task-map.js +16 -2
- package/dist/lib/testing/storyboard/task-map.js.map +1 -1
- package/dist/lib/testing/storyboard/task-map.mjs +16 -2
- package/dist/lib/testing/storyboard/task-map.mjs.map +1 -1
- package/dist/lib/testing/storyboard/trusted-match-context-replay.d.mts +11 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.d.ts +12 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.js +340 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.js.map +1 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.mjs +316 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.mjs.map +1 -0
- package/dist/lib/testing/storyboard/types.d.mts +84 -15
- package/dist/lib/testing/storyboard/types.d.ts +84 -15
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/types.js +2 -0
- package/dist/lib/testing/storyboard/types.js.map +1 -1
- package/dist/lib/testing/storyboard/types.mjs +2 -0
- package/dist/lib/testing/storyboard/types.mjs.map +1 -1
- package/dist/lib/testing/storyboard/validations.d.mts +3 -0
- package/dist/lib/testing/storyboard/validations.d.ts +3 -0
- package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/validations.js +64 -24
- package/dist/lib/testing/storyboard/validations.js.map +1 -1
- package/dist/lib/testing/storyboard/validations.mjs +64 -24
- package/dist/lib/testing/storyboard/validations.mjs.map +1 -1
- package/dist/lib/types/server-payload-aliases.d.mts +8 -2
- package/dist/lib/types/server-payload-aliases.d.ts +8 -2
- package/dist/lib/types/server-payload-aliases.d.ts.map +1 -1
- package/dist/lib/types/server-payload-aliases.js.map +1 -1
- package/dist/lib/upstream-recorder/recorder.d.mts +7 -18
- package/dist/lib/upstream-recorder/recorder.d.ts +7 -18
- package/dist/lib/upstream-recorder/recorder.d.ts.map +1 -1
- package/dist/lib/upstream-recorder/recorder.js +17 -10
- package/dist/lib/upstream-recorder/recorder.js.map +1 -1
- package/dist/lib/upstream-recorder/recorder.mjs +12 -5
- package/dist/lib/upstream-recorder/recorder.mjs.map +1 -1
- package/dist/lib/utils/redact-secrets.d.ts.map +1 -1
- package/dist/lib/utils/redact-secrets.js +7 -1
- package/dist/lib/utils/redact-secrets.js.map +1 -1
- package/dist/lib/utils/redact-secrets.mjs +7 -1
- package/dist/lib/utils/redact-secrets.mjs.map +1 -1
- package/dist/lib/version.d.mts +3 -3
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/dist/lib/version.mjs +3 -3
- package/dist/lib/version.mjs.map +1 -1
- package/docs/guides/BUILD-AN-AGENT.md +4 -2
- package/docs/llms.txt +1 -1
- package/package.json +2 -2
|
@@ -41,8 +41,10 @@ __export(storyboard_exports, {
|
|
|
41
41
|
applyContextOutputsWithProvenance: () => import_context2.applyContextOutputsWithProvenance,
|
|
42
42
|
applyFixtureBindingsToRequest: () => import_fixture_resolution.applyFixtureBindingsToRequest,
|
|
43
43
|
applyStoryboardVersionOptions: () => import_runner.applyStoryboardVersionOptions,
|
|
44
|
+
buildAuthorizationServerMetadataUrl: () => import_oauth_metadata_graph.buildAuthorizationServerMetadataUrl,
|
|
44
45
|
buildDiscoveryFailedResult: () => import_runner.buildDiscoveryFailedResult,
|
|
45
46
|
buildFixtureResolutionSpecs: () => import_fixture_resolution.buildFixtureResolutionSpecs,
|
|
47
|
+
buildProtectedResourceMetadataUrl: () => import_oauth_metadata_graph.buildProtectedResourceMetadataUrl,
|
|
46
48
|
buildRequest: () => import_request_builder.buildRequest,
|
|
47
49
|
clearAssertionRegistry: () => import_assertions.clearAssertionRegistry,
|
|
48
50
|
clearSandboxCache: () => import_sandbox_entities.clearSandboxCache,
|
|
@@ -51,10 +53,12 @@ __export(storyboard_exports, {
|
|
|
51
53
|
detectContextRejectionHints: () => import_rejection_hints.detectContextRejectionHints,
|
|
52
54
|
evaluateCapabilityPredicate: () => import_runner.evaluateCapabilityPredicate,
|
|
53
55
|
executeStoryboardTask: () => import_task_map.executeStoryboardTask,
|
|
56
|
+
expandCreativeAssetDirectives: () => import_creative_assets.expandCreativeAssetDirectives,
|
|
54
57
|
extractContext: () => import_context2.extractContext,
|
|
55
58
|
extractContextWithProvenance: () => import_context2.extractContextWithProvenance,
|
|
56
59
|
extractTaskAdcpError: () => import_rate_limit_trip.extractTaskAdcpError,
|
|
57
60
|
findBundleById: () => import_compliance.findBundleById,
|
|
61
|
+
findUnresolvedCreativeAssetDirectives: () => import_creative_assets.findUnresolvedCreativeAssetDirectives,
|
|
58
62
|
getAssertion: () => import_assertions.getAssertion,
|
|
59
63
|
getComplianceCacheDir: () => import_compliance.getComplianceCacheDir,
|
|
60
64
|
getComplianceStoryboardById: () => import_compliance.getComplianceStoryboardById,
|
|
@@ -63,6 +67,8 @@ __export(storyboard_exports, {
|
|
|
63
67
|
getSandboxBrand: () => import_sandbox_entities.getSandboxBrand,
|
|
64
68
|
getSandboxBrands: () => import_sandbox_entities.getSandboxBrands,
|
|
65
69
|
getSandboxEntities: () => import_sandbox_entities.getSandboxEntities,
|
|
70
|
+
gradeOAuthMetadataGraph: () => import_oauth_metadata_graph.gradeOAuthMetadataGraph,
|
|
71
|
+
gradeOAuthMetadataGraphVector: () => import_oauth_metadata_graph.gradeOAuthMetadataGraphVector,
|
|
66
72
|
hasRequestBuilder: () => import_request_builder.hasRequestBuilder,
|
|
67
73
|
injectContext: () => import_context2.injectContext,
|
|
68
74
|
isComplianceVersionSupported: () => import_compliance.isComplianceVersionSupported,
|
|
@@ -75,12 +81,15 @@ __export(storyboard_exports, {
|
|
|
75
81
|
listStrictOnlyFailures: () => import_runner.listStrictOnlyFailures,
|
|
76
82
|
loadBundleStoryboards: () => import_compliance.loadBundleStoryboards,
|
|
77
83
|
loadComplianceIndex: () => import_compliance.loadComplianceIndex,
|
|
84
|
+
loadOAuthMetadataGraphVectors: () => import_oauth_metadata_graph.loadOAuthMetadataGraphVectors,
|
|
78
85
|
loadSpecialismDetail: () => import_compliance.loadSpecialismDetail,
|
|
79
86
|
loadStoryboardFile: () => import_loader.loadStoryboardFile,
|
|
80
87
|
matchesFixtureRequirements: () => import_fixture_resolution.matchesFixtureRequirements,
|
|
81
88
|
normalizeFixtureMatchExpression: () => import_fixture_resolution.normalizeFixtureMatchExpression,
|
|
89
|
+
normalizeOAuthResourceForComparison: () => import_oauth_metadata_graph.normalizeOAuthResourceForComparison,
|
|
82
90
|
parsePath: () => import_path.parsePath,
|
|
83
91
|
parseStoryboard: () => import_loader.parseStoryboard,
|
|
92
|
+
redactOAuthUrlForOutput: () => import_oauth_metadata_graph.redactOAuthUrlForOutput,
|
|
84
93
|
registerAssertion: () => import_assertions.registerAssertion,
|
|
85
94
|
resolveAssertions: () => import_assertions.resolveAssertions,
|
|
86
95
|
resolveBundleOrStoryboard: () => import_compliance.resolveBundleOrStoryboard,
|
|
@@ -108,11 +117,13 @@ var import_loader = require('./loader.js');
|
|
|
108
117
|
var import_fixture_resolution = require('./fixture-resolution.js');
|
|
109
118
|
var import_compliance = require('./compliance.js');
|
|
110
119
|
var import_task_map = require('./task-map.js');
|
|
120
|
+
var import_creative_assets = require('./creative-assets.js');
|
|
111
121
|
var import_path = require('./path.js');
|
|
112
122
|
var import_context2 = require('./context.js');
|
|
113
123
|
var import_rejection_hints = require('./rejection-hints.js');
|
|
114
124
|
var import_request_builder = require('./request-builder.js');
|
|
115
125
|
var import_validations = require('./validations.js');
|
|
126
|
+
var import_oauth_metadata_graph = require('./oauth-metadata-graph/index.js');
|
|
116
127
|
var import_rate_limit_trip = require('./rate-limit-trip.js');
|
|
117
128
|
var import_test_kit = require('./test-kit.js');
|
|
118
129
|
var import_wellknown_schemas = require('../../types/wellknown-schemas.generated.js');
|
|
@@ -143,8 +154,10 @@ var import_sandbox_entities = require('./sandbox-entities.js');
|
|
|
143
154
|
applyContextOutputsWithProvenance,
|
|
144
155
|
applyFixtureBindingsToRequest,
|
|
145
156
|
applyStoryboardVersionOptions,
|
|
157
|
+
buildAuthorizationServerMetadataUrl,
|
|
146
158
|
buildDiscoveryFailedResult,
|
|
147
159
|
buildFixtureResolutionSpecs,
|
|
160
|
+
buildProtectedResourceMetadataUrl,
|
|
148
161
|
buildRequest,
|
|
149
162
|
clearAssertionRegistry,
|
|
150
163
|
clearSandboxCache,
|
|
@@ -153,10 +166,12 @@ var import_sandbox_entities = require('./sandbox-entities.js');
|
|
|
153
166
|
detectContextRejectionHints,
|
|
154
167
|
evaluateCapabilityPredicate,
|
|
155
168
|
executeStoryboardTask,
|
|
169
|
+
expandCreativeAssetDirectives,
|
|
156
170
|
extractContext,
|
|
157
171
|
extractContextWithProvenance,
|
|
158
172
|
extractTaskAdcpError,
|
|
159
173
|
findBundleById,
|
|
174
|
+
findUnresolvedCreativeAssetDirectives,
|
|
160
175
|
getAssertion,
|
|
161
176
|
getComplianceCacheDir,
|
|
162
177
|
getComplianceStoryboardById,
|
|
@@ -165,6 +180,8 @@ var import_sandbox_entities = require('./sandbox-entities.js');
|
|
|
165
180
|
getSandboxBrand,
|
|
166
181
|
getSandboxBrands,
|
|
167
182
|
getSandboxEntities,
|
|
183
|
+
gradeOAuthMetadataGraph,
|
|
184
|
+
gradeOAuthMetadataGraphVector,
|
|
168
185
|
hasRequestBuilder,
|
|
169
186
|
injectContext,
|
|
170
187
|
isComplianceVersionSupported,
|
|
@@ -177,12 +194,15 @@ var import_sandbox_entities = require('./sandbox-entities.js');
|
|
|
177
194
|
listStrictOnlyFailures,
|
|
178
195
|
loadBundleStoryboards,
|
|
179
196
|
loadComplianceIndex,
|
|
197
|
+
loadOAuthMetadataGraphVectors,
|
|
180
198
|
loadSpecialismDetail,
|
|
181
199
|
loadStoryboardFile,
|
|
182
200
|
matchesFixtureRequirements,
|
|
183
201
|
normalizeFixtureMatchExpression,
|
|
202
|
+
normalizeOAuthResourceForComparison,
|
|
184
203
|
parsePath,
|
|
185
204
|
parseStoryboard,
|
|
205
|
+
redactOAuthUrlForOutput,
|
|
186
206
|
registerAssertion,
|
|
187
207
|
resolveAssertions,
|
|
188
208
|
resolveBundleOrStoryboard,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/testing/storyboard/index.ts"],"sourcesContent":["/**\n * Storyboard-driven testing for AdCP agents.\n *\n * Storyboards are YAML-defined workflows that map directly to\n * SingleAgentClient methods, enabling step-by-step agent testing.\n * The canonical storyboard set lives in the AdCP compliance tarball\n * and is pulled into `compliance/cache/{version}/` via `npm run sync-schemas`.\n */\n\n// Side-effect import: registers the default cross-step assertions that\n// upstream storyboards reference by id (idempotency.conflict_no_payload_leak,\n// context.no_secret_echo, governance.denial_blocks_mutation). Without this\n// registration here, any `runStoryboard` call against a storyboard declaring\n// `invariants: [...]` would throw at start on unresolved ids. Consumers who\n// want to replace the defaults can `clearAssertionRegistry()` first.\nimport { registerDefaultInvariants } from './default-invariants';\n\nregisterDefaultInvariants();\n\n// Types\nexport type {\n A2ATaskEnvelope,\n AgentEntry,\n Storyboard,\n StoryboardFixtureResolution,\n FixtureResolutionStrategy,\n FixtureMatchOperator,\n FixtureMatchClause,\n FixtureResolutionDeclaration,\n ProductFixtureResolutionDeclaration,\n PricingOptionFixtureResolutionDeclaration,\n FixtureResolutionStatus,\n FixtureResolutionRecord,\n FixtureResolutionAttempt,\n FixtureResolutionEvidence,\n FixtureResolutionCoverageGap,\n StoryboardInvariants,\n StoryboardInvariantsObject,\n StepInvariantsObject,\n StoryboardPhase,\n StoryboardStep,\n RateLimitTripSpec,\n StoryboardValidation,\n StoryboardValidationCheck,\n WebhookFilterSpec,\n WebhookRetryTriggerSpec,\n WebhookAssertionErrorCode,\n ContextOutput,\n ContextInput,\n ContextProvenanceEntry,\n ContextValueRejectedHint,\n ShapeDriftHint,\n MissingRequiredFieldHint,\n FormatMismatchHint,\n MonotonicViolationHint,\n ImpairmentCoherenceHint,\n ImpairmentCoherenceNotApplicableHint,\n StoryboardContext,\n StoryboardRunOptions,\n ValidationResult,\n StoryboardStepPreview,\n StoryboardStepResult,\n StoryboardStepHint,\n StoryboardStepHintBase,\n StoryboardPhaseResult,\n StoryboardResult,\n AssertionResult,\n StrictValidationSummary,\n StrictValidationVerdict,\n UpstreamTrafficPayloadMatch,\n RunnerNotice,\n NoticeCode,\n NoticeSeverity,\n} from './types';\nexport { WEBHOOK_IDEMPOTENCY_KEY_PATTERN } from './types';\n\n// Cross-step assertion registry (adcontextprotocol/adcp#2639)\nexport {\n registerAssertion,\n getAssertion,\n listAssertions,\n listDefaultAssertions,\n clearAssertionRegistry,\n resolveAssertions,\n} from './assertions';\nexport type { AssertionSpec, AssertionContext, RegisterAssertionOptions } from './assertions';\n\n// Webhook receiver (outbound-webhook conformance testing per adcontextprotocol/adcp#2431)\nexport { createWebhookReceiver } from './webhook-receiver';\nexport type {\n CapturedWebhook,\n CreateWebhookReceiverOptions,\n RetryReplayPolicy,\n WebhookFilter,\n WebhookReceiver,\n WebhookWaitResult,\n} from './webhook-receiver';\n\n// Runner-variable substitution (`{{runner.*}}` / `{{prior_step.*.operation_id}}`)\nexport { createRunnerVariables } from './context';\nexport type { RunnerVariables } from './context';\n\n// Webhook-assertion pseudo-tasks\nexport { WEBHOOK_ASSERTION_TASKS } from './webhook-assertions';\n\n// Runner\nexport {\n runStoryboard,\n runStoryboardStep,\n applyAdcpVersionRunOptions,\n applyStoryboardVersionOptions,\n getFirstStepPreview,\n summarizeStrictValidation,\n listStrictOnlyFailures,\n resolveCapabilityPath,\n evaluateCapabilityPredicate,\n buildDiscoveryFailedResult,\n} from './runner';\n\n// Parser (single-file load for spec evolution / targeted testing)\nexport { parseStoryboard, loadStoryboardFile } from './loader';\n\n// AdCP 3.2 fixture-handle resolution\nexport {\n applyFixtureBindingsToRequest,\n buildFixtureResolutionSpecs,\n FixtureBindingRegistry,\n matchesFixtureRequirements,\n normalizeFixtureMatchExpression,\n validateFixtureResolutionDeclarations,\n} from './fixture-resolution';\n\n// Compliance cache: capability-driven resolution\nexport {\n getComplianceCacheDir,\n getExternalSchemaRootForCompliance,\n loadComplianceIndex,\n listBundles,\n loadBundleStoryboards,\n listAllComplianceStoryboards,\n getComplianceStoryboardById,\n findBundleById,\n resolveBundleOrStoryboard,\n resolveStoryboardsForCapabilities,\n isComplianceVersionSupported,\n loadSpecialismDetail,\n listSpecialisms,\n CapabilityResolutionError,\n PROTOCOL_TO_PATH,\n UNBASELINED_SUPPORTED_PROTOCOLS,\n} from './compliance';\nexport type {\n AgentCapabilities,\n BundleKind,\n BundleRef,\n CapabilityResolutionCode,\n ComplianceIndex,\n ComplianceIndexProtocol,\n ComplianceIndexSpecialism,\n NotApplicableStoryboard,\n ResolveOptions,\n ResolvedBundle,\n ResolvedStoryboards,\n SpecialismDetail,\n} from './compliance';\n\n// Task mapping\nexport { TASK_TO_METHOD, executeStoryboardTask } from './task-map';\n\n// Path utilities\nexport { parsePath, resolvePath, setPath } from './path';\n\n// Context\nexport {\n CONTEXT_EXTRACTORS,\n extractContext,\n extractContextWithProvenance,\n injectContext,\n applyContextOutputs,\n applyContextOutputsWithProvenance,\n applyContextInputs,\n} from './context';\nexport type { ContextWriteResult } from './context';\n\n// Rejection-hint detection (issue #870)\nexport { detectContextRejectionHints } from './rejection-hints';\n\n// Request builder\nexport { buildRequest, hasRequestBuilder } from './request-builder';\n\n// Validations\nexport { runValidations } from './validations';\nexport {\n RateLimitTripObserver,\n RATE_LIMIT_TRIP_CONTRACT,\n RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS,\n RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX,\n RATE_LIMIT_TRIP_MAX_ATTEMPTS_MIN,\n extractTaskAdcpError,\n validateRateLimitTripSpec,\n type RateLimitTripFailureCode,\n type RateLimitTripClient,\n type RateLimitTripObservation,\n type RateLimitTripObserverOptions,\n type RateLimitTripResponseSnapshot,\n type RateLimitTripStructuredResult,\n type RateLimitTripTaskOptions,\n} from './rate-limit-trip';\n\n// `./junit` is deliberately NOT re-exported. The CLI requires it\n// directly from `dist/lib/testing/storyboard/junit.js` and the function\n// is marked `@internal` (stripped from the generated `.d.ts`). Add a\n// re-export here only if/when we promote it to a public API surface.\n\n// Test-kit schema validation\nexport { validateTestKit, TestKitValidationError, PROBE_TASK_ALLOWLIST } from './test-kit';\n\n// Sandbox entities\nexport type { SandboxBrand, SandboxAgent, SandboxEntities, BrandJson } from './sandbox-entities';\nexport { BrandJsonSchema, AdagentsJsonSchema } from '../../types/wellknown-schemas.generated';\nexport type { AdagentsJson } from '../../types/wellknown-schemas.generated';\nexport {\n getSandboxEntities,\n getSandboxBrands,\n getSandboxBrand,\n isSandboxDomain,\n clearSandboxCache,\n} from './sandbox-entities';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA,gCAA0C;
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/testing/storyboard/index.ts"],"sourcesContent":["/**\n * Storyboard-driven testing for AdCP agents.\n *\n * Storyboards are YAML-defined workflows that map directly to\n * SingleAgentClient methods, enabling step-by-step agent testing.\n * The canonical storyboard set lives in the AdCP compliance tarball\n * and is pulled into `compliance/cache/{version}/` via `npm run sync-schemas`.\n */\n\n// Side-effect import: registers the default cross-step assertions that\n// upstream storyboards reference by id (idempotency.conflict_no_payload_leak,\n// context.no_secret_echo, governance.denial_blocks_mutation). Without this\n// registration here, any `runStoryboard` call against a storyboard declaring\n// `invariants: [...]` would throw at start on unresolved ids. Consumers who\n// want to replace the defaults can `clearAssertionRegistry()` first.\nimport { registerDefaultInvariants } from './default-invariants';\n\nregisterDefaultInvariants();\n\n// Types\nexport type {\n A2ATaskEnvelope,\n AgentEntry,\n Storyboard,\n StoryboardFixtureResolution,\n FixtureResolutionStrategy,\n FixtureMatchOperator,\n FixtureMatchClause,\n FixtureResolutionDeclaration,\n ProductFixtureResolutionDeclaration,\n PricingOptionFixtureResolutionDeclaration,\n FixtureResolutionStatus,\n FixtureResolutionRecord,\n FixtureResolutionAttempt,\n FixtureResolutionEvidence,\n FixtureResolutionCoverageGap,\n StoryboardInvariants,\n StoryboardInvariantsObject,\n StepInvariantsObject,\n StoryboardPhase,\n StoryboardStep,\n RateLimitTripSpec,\n StoryboardValidation,\n StoryboardValidationCheck,\n WebhookFilterSpec,\n WebhookRetryTriggerSpec,\n WebhookAssertionErrorCode,\n ContextOutput,\n ContextInput,\n ContextProvenanceEntry,\n ContextValueRejectedHint,\n ShapeDriftHint,\n MissingRequiredFieldHint,\n FormatMismatchHint,\n MonotonicViolationHint,\n ImpairmentCoherenceHint,\n ImpairmentCoherenceNotApplicableHint,\n StoryboardContext,\n StoryboardRunOptions,\n TrustedMatchContextProviderEndpoint,\n TrustedMatchContextRegistrationContext,\n TrustedMatchContextRouterRunnerOptions,\n ValidationResult,\n StoryboardStepPreview,\n StoryboardStepResult,\n StoryboardStepHint,\n StoryboardStepHintBase,\n StoryboardPhaseResult,\n StoryboardResult,\n AssertionResult,\n StrictValidationSummary,\n StrictValidationVerdict,\n UpstreamTrafficPayloadMatch,\n RunnerNotice,\n NoticeCode,\n NoticeSeverity,\n} from './types';\nexport { WEBHOOK_IDEMPOTENCY_KEY_PATTERN } from './types';\n\n// Cross-step assertion registry (adcontextprotocol/adcp#2639)\nexport {\n registerAssertion,\n getAssertion,\n listAssertions,\n listDefaultAssertions,\n clearAssertionRegistry,\n resolveAssertions,\n} from './assertions';\nexport type { AssertionSpec, AssertionContext, RegisterAssertionOptions } from './assertions';\n\n// Webhook receiver (outbound-webhook conformance testing per adcontextprotocol/adcp#2431)\nexport { createWebhookReceiver } from './webhook-receiver';\nexport type {\n CapturedWebhook,\n CreateWebhookReceiverOptions,\n RetryReplayPolicy,\n WebhookFilter,\n WebhookReceiver,\n WebhookWaitResult,\n} from './webhook-receiver';\n\n// Runner-variable substitution (`{{runner.*}}` / `{{prior_step.*.operation_id}}`)\nexport { createRunnerVariables } from './context';\nexport type { RunnerVariables } from './context';\n\n// Webhook-assertion pseudo-tasks\nexport { WEBHOOK_ASSERTION_TASKS } from './webhook-assertions';\n\n// Runner\nexport {\n runStoryboard,\n runStoryboardStep,\n applyAdcpVersionRunOptions,\n applyStoryboardVersionOptions,\n getFirstStepPreview,\n summarizeStrictValidation,\n listStrictOnlyFailures,\n resolveCapabilityPath,\n evaluateCapabilityPredicate,\n buildDiscoveryFailedResult,\n} from './runner';\n\n// Parser (single-file load for spec evolution / targeted testing)\nexport { parseStoryboard, loadStoryboardFile } from './loader';\n\n// AdCP 3.2 fixture-handle resolution\nexport {\n applyFixtureBindingsToRequest,\n buildFixtureResolutionSpecs,\n FixtureBindingRegistry,\n matchesFixtureRequirements,\n normalizeFixtureMatchExpression,\n validateFixtureResolutionDeclarations,\n} from './fixture-resolution';\n\n// Compliance cache: capability-driven resolution\nexport {\n getComplianceCacheDir,\n getExternalSchemaRootForCompliance,\n loadComplianceIndex,\n listBundles,\n loadBundleStoryboards,\n listAllComplianceStoryboards,\n getComplianceStoryboardById,\n findBundleById,\n resolveBundleOrStoryboard,\n resolveStoryboardsForCapabilities,\n isComplianceVersionSupported,\n loadSpecialismDetail,\n listSpecialisms,\n CapabilityResolutionError,\n PROTOCOL_TO_PATH,\n UNBASELINED_SUPPORTED_PROTOCOLS,\n} from './compliance';\nexport type {\n AgentCapabilities,\n BundleKind,\n BundleRef,\n CapabilityResolutionCode,\n ComplianceIndex,\n ComplianceIndexProtocol,\n ComplianceIndexSpecialism,\n NotApplicableStoryboard,\n ResolveOptions,\n ResolvedBundle,\n ResolvedStoryboards,\n SpecialismDetail,\n} from './compliance';\n\n// Task mapping\nexport { TASK_TO_METHOD, executeStoryboardTask } from './task-map';\n\n// Storyboard-only creative asset directives\nexport { expandCreativeAssetDirectives, findUnresolvedCreativeAssetDirectives } from './creative-assets';\n\n// Path utilities\nexport { parsePath, resolvePath, setPath } from './path';\n\n// Context\nexport {\n CONTEXT_EXTRACTORS,\n extractContext,\n extractContextWithProvenance,\n injectContext,\n applyContextOutputs,\n applyContextOutputsWithProvenance,\n applyContextInputs,\n} from './context';\nexport type { ContextWriteResult } from './context';\n\n// Rejection-hint detection (issue #870)\nexport { detectContextRejectionHints } from './rejection-hints';\n\n// Request builder\nexport { buildRequest, hasRequestBuilder } from './request-builder';\n\n// Validations\nexport { runValidations } from './validations';\nexport {\n gradeOAuthMetadataGraph,\n gradeOAuthMetadataGraphVector,\n loadOAuthMetadataGraphVectors,\n buildAuthorizationServerMetadataUrl,\n buildProtectedResourceMetadataUrl,\n normalizeOAuthResourceForComparison,\n redactOAuthUrlForOutput,\n} from './oauth-metadata-graph';\nexport type {\n GradeOAuthMetadataGraphOptions,\n OAuthMetadataFetchResponse,\n OAuthMetadataFetchTransport,\n OAuthMetadataGraphErrorCode,\n OAuthMetadataGraphFinding,\n OAuthMetadataGraphGrade,\n OAuthMetadataGraphObservation,\n OAuthMetadataGraphVector,\n OAuthMetadataGraphVectorCorpus,\n} from './oauth-metadata-graph';\nexport {\n RateLimitTripObserver,\n RATE_LIMIT_TRIP_CONTRACT,\n RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS,\n RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX,\n RATE_LIMIT_TRIP_MAX_ATTEMPTS_MIN,\n extractTaskAdcpError,\n validateRateLimitTripSpec,\n type RateLimitTripFailureCode,\n type RateLimitTripClient,\n type RateLimitTripObservation,\n type RateLimitTripObserverOptions,\n type RateLimitTripResponseSnapshot,\n type RateLimitTripStructuredResult,\n type RateLimitTripTaskOptions,\n} from './rate-limit-trip';\n\n// `./junit` is deliberately NOT re-exported. The CLI requires it\n// directly from `dist/lib/testing/storyboard/junit.js` and the function\n// is marked `@internal` (stripped from the generated `.d.ts`). Add a\n// re-export here only if/when we promote it to a public API surface.\n\n// Test-kit schema validation\nexport { validateTestKit, TestKitValidationError, PROBE_TASK_ALLOWLIST } from './test-kit';\n\n// Sandbox entities\nexport type { SandboxBrand, SandboxAgent, SandboxEntities, BrandJson } from './sandbox-entities';\nexport { BrandJsonSchema, AdagentsJsonSchema } from '../../types/wellknown-schemas.generated';\nexport type { AdagentsJson } from '../../types/wellknown-schemas.generated';\nexport {\n getSandboxEntities,\n getSandboxBrands,\n getSandboxBrand,\n isSandboxDomain,\n clearSandboxCache,\n} from './sandbox-entities';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA,gCAA0C;AA8D1C,mBAAgD;AAGhD,wBAOO;AAIP,8BAAsC;AAWtC,qBAAsC;AAItC,gCAAwC;AAGxC,oBAWO;AAGP,oBAAoD;AAGpD,gCAOO;AAGP,wBAiBO;AAiBP,sBAAsD;AAGtD,6BAAqF;AAGrF,kBAAgD;AAGhD,IAAAA,kBAQO;AAIP,6BAA4C;AAG5C,6BAAgD;AAGhD,yBAA+B;AAC/B,kCAQO;AAYP,6BAeO;AAQP,sBAA8E;AAI9E,+BAAoD;AAEpD,8BAMO;AAAA,IA5OP,qDAA0B;","names":["import_context"]}
|
|
@@ -52,6 +52,7 @@ import {
|
|
|
52
52
|
UNBASELINED_SUPPORTED_PROTOCOLS
|
|
53
53
|
} from "./compliance.mjs";
|
|
54
54
|
import { TASK_TO_METHOD, executeStoryboardTask } from "./task-map.mjs";
|
|
55
|
+
import { expandCreativeAssetDirectives, findUnresolvedCreativeAssetDirectives } from "./creative-assets.mjs";
|
|
55
56
|
import { parsePath, resolvePath, setPath } from "./path.mjs";
|
|
56
57
|
import {
|
|
57
58
|
CONTEXT_EXTRACTORS,
|
|
@@ -65,6 +66,15 @@ import {
|
|
|
65
66
|
import { detectContextRejectionHints } from "./rejection-hints.mjs";
|
|
66
67
|
import { buildRequest, hasRequestBuilder } from "./request-builder.mjs";
|
|
67
68
|
import { runValidations } from "./validations.mjs";
|
|
69
|
+
import {
|
|
70
|
+
gradeOAuthMetadataGraph,
|
|
71
|
+
gradeOAuthMetadataGraphVector,
|
|
72
|
+
loadOAuthMetadataGraphVectors,
|
|
73
|
+
buildAuthorizationServerMetadataUrl,
|
|
74
|
+
buildProtectedResourceMetadataUrl,
|
|
75
|
+
normalizeOAuthResourceForComparison,
|
|
76
|
+
redactOAuthUrlForOutput
|
|
77
|
+
} from "./oauth-metadata-graph/index.mjs";
|
|
68
78
|
import {
|
|
69
79
|
RateLimitTripObserver,
|
|
70
80
|
RATE_LIMIT_TRIP_CONTRACT,
|
|
@@ -107,8 +117,10 @@ export {
|
|
|
107
117
|
applyContextOutputsWithProvenance,
|
|
108
118
|
applyFixtureBindingsToRequest,
|
|
109
119
|
applyStoryboardVersionOptions,
|
|
120
|
+
buildAuthorizationServerMetadataUrl,
|
|
110
121
|
buildDiscoveryFailedResult,
|
|
111
122
|
buildFixtureResolutionSpecs,
|
|
123
|
+
buildProtectedResourceMetadataUrl,
|
|
112
124
|
buildRequest,
|
|
113
125
|
clearAssertionRegistry,
|
|
114
126
|
clearSandboxCache,
|
|
@@ -117,10 +129,12 @@ export {
|
|
|
117
129
|
detectContextRejectionHints,
|
|
118
130
|
evaluateCapabilityPredicate,
|
|
119
131
|
executeStoryboardTask,
|
|
132
|
+
expandCreativeAssetDirectives,
|
|
120
133
|
extractContext,
|
|
121
134
|
extractContextWithProvenance,
|
|
122
135
|
extractTaskAdcpError,
|
|
123
136
|
findBundleById,
|
|
137
|
+
findUnresolvedCreativeAssetDirectives,
|
|
124
138
|
getAssertion,
|
|
125
139
|
getComplianceCacheDir,
|
|
126
140
|
getComplianceStoryboardById,
|
|
@@ -129,6 +143,8 @@ export {
|
|
|
129
143
|
getSandboxBrand,
|
|
130
144
|
getSandboxBrands,
|
|
131
145
|
getSandboxEntities,
|
|
146
|
+
gradeOAuthMetadataGraph,
|
|
147
|
+
gradeOAuthMetadataGraphVector,
|
|
132
148
|
hasRequestBuilder,
|
|
133
149
|
injectContext,
|
|
134
150
|
isComplianceVersionSupported,
|
|
@@ -141,12 +157,15 @@ export {
|
|
|
141
157
|
listStrictOnlyFailures,
|
|
142
158
|
loadBundleStoryboards,
|
|
143
159
|
loadComplianceIndex,
|
|
160
|
+
loadOAuthMetadataGraphVectors,
|
|
144
161
|
loadSpecialismDetail,
|
|
145
162
|
loadStoryboardFile,
|
|
146
163
|
matchesFixtureRequirements,
|
|
147
164
|
normalizeFixtureMatchExpression,
|
|
165
|
+
normalizeOAuthResourceForComparison,
|
|
148
166
|
parsePath,
|
|
149
167
|
parseStoryboard,
|
|
168
|
+
redactOAuthUrlForOutput,
|
|
150
169
|
registerAssertion,
|
|
151
170
|
resolveAssertions,
|
|
152
171
|
resolveBundleOrStoryboard,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/testing/storyboard/index.ts"],"sourcesContent":["/**\n * Storyboard-driven testing for AdCP agents.\n *\n * Storyboards are YAML-defined workflows that map directly to\n * SingleAgentClient methods, enabling step-by-step agent testing.\n * The canonical storyboard set lives in the AdCP compliance tarball\n * and is pulled into `compliance/cache/{version}/` via `npm run sync-schemas`.\n */\n\n// Side-effect import: registers the default cross-step assertions that\n// upstream storyboards reference by id (idempotency.conflict_no_payload_leak,\n// context.no_secret_echo, governance.denial_blocks_mutation). Without this\n// registration here, any `runStoryboard` call against a storyboard declaring\n// `invariants: [...]` would throw at start on unresolved ids. Consumers who\n// want to replace the defaults can `clearAssertionRegistry()` first.\nimport { registerDefaultInvariants } from './default-invariants';\n\nregisterDefaultInvariants();\n\n// Types\nexport type {\n A2ATaskEnvelope,\n AgentEntry,\n Storyboard,\n StoryboardFixtureResolution,\n FixtureResolutionStrategy,\n FixtureMatchOperator,\n FixtureMatchClause,\n FixtureResolutionDeclaration,\n ProductFixtureResolutionDeclaration,\n PricingOptionFixtureResolutionDeclaration,\n FixtureResolutionStatus,\n FixtureResolutionRecord,\n FixtureResolutionAttempt,\n FixtureResolutionEvidence,\n FixtureResolutionCoverageGap,\n StoryboardInvariants,\n StoryboardInvariantsObject,\n StepInvariantsObject,\n StoryboardPhase,\n StoryboardStep,\n RateLimitTripSpec,\n StoryboardValidation,\n StoryboardValidationCheck,\n WebhookFilterSpec,\n WebhookRetryTriggerSpec,\n WebhookAssertionErrorCode,\n ContextOutput,\n ContextInput,\n ContextProvenanceEntry,\n ContextValueRejectedHint,\n ShapeDriftHint,\n MissingRequiredFieldHint,\n FormatMismatchHint,\n MonotonicViolationHint,\n ImpairmentCoherenceHint,\n ImpairmentCoherenceNotApplicableHint,\n StoryboardContext,\n StoryboardRunOptions,\n ValidationResult,\n StoryboardStepPreview,\n StoryboardStepResult,\n StoryboardStepHint,\n StoryboardStepHintBase,\n StoryboardPhaseResult,\n StoryboardResult,\n AssertionResult,\n StrictValidationSummary,\n StrictValidationVerdict,\n UpstreamTrafficPayloadMatch,\n RunnerNotice,\n NoticeCode,\n NoticeSeverity,\n} from './types';\nexport { WEBHOOK_IDEMPOTENCY_KEY_PATTERN } from './types';\n\n// Cross-step assertion registry (adcontextprotocol/adcp#2639)\nexport {\n registerAssertion,\n getAssertion,\n listAssertions,\n listDefaultAssertions,\n clearAssertionRegistry,\n resolveAssertions,\n} from './assertions';\nexport type { AssertionSpec, AssertionContext, RegisterAssertionOptions } from './assertions';\n\n// Webhook receiver (outbound-webhook conformance testing per adcontextprotocol/adcp#2431)\nexport { createWebhookReceiver } from './webhook-receiver';\nexport type {\n CapturedWebhook,\n CreateWebhookReceiverOptions,\n RetryReplayPolicy,\n WebhookFilter,\n WebhookReceiver,\n WebhookWaitResult,\n} from './webhook-receiver';\n\n// Runner-variable substitution (`{{runner.*}}` / `{{prior_step.*.operation_id}}`)\nexport { createRunnerVariables } from './context';\nexport type { RunnerVariables } from './context';\n\n// Webhook-assertion pseudo-tasks\nexport { WEBHOOK_ASSERTION_TASKS } from './webhook-assertions';\n\n// Runner\nexport {\n runStoryboard,\n runStoryboardStep,\n applyAdcpVersionRunOptions,\n applyStoryboardVersionOptions,\n getFirstStepPreview,\n summarizeStrictValidation,\n listStrictOnlyFailures,\n resolveCapabilityPath,\n evaluateCapabilityPredicate,\n buildDiscoveryFailedResult,\n} from './runner';\n\n// Parser (single-file load for spec evolution / targeted testing)\nexport { parseStoryboard, loadStoryboardFile } from './loader';\n\n// AdCP 3.2 fixture-handle resolution\nexport {\n applyFixtureBindingsToRequest,\n buildFixtureResolutionSpecs,\n FixtureBindingRegistry,\n matchesFixtureRequirements,\n normalizeFixtureMatchExpression,\n validateFixtureResolutionDeclarations,\n} from './fixture-resolution';\n\n// Compliance cache: capability-driven resolution\nexport {\n getComplianceCacheDir,\n getExternalSchemaRootForCompliance,\n loadComplianceIndex,\n listBundles,\n loadBundleStoryboards,\n listAllComplianceStoryboards,\n getComplianceStoryboardById,\n findBundleById,\n resolveBundleOrStoryboard,\n resolveStoryboardsForCapabilities,\n isComplianceVersionSupported,\n loadSpecialismDetail,\n listSpecialisms,\n CapabilityResolutionError,\n PROTOCOL_TO_PATH,\n UNBASELINED_SUPPORTED_PROTOCOLS,\n} from './compliance';\nexport type {\n AgentCapabilities,\n BundleKind,\n BundleRef,\n CapabilityResolutionCode,\n ComplianceIndex,\n ComplianceIndexProtocol,\n ComplianceIndexSpecialism,\n NotApplicableStoryboard,\n ResolveOptions,\n ResolvedBundle,\n ResolvedStoryboards,\n SpecialismDetail,\n} from './compliance';\n\n// Task mapping\nexport { TASK_TO_METHOD, executeStoryboardTask } from './task-map';\n\n// Path utilities\nexport { parsePath, resolvePath, setPath } from './path';\n\n// Context\nexport {\n CONTEXT_EXTRACTORS,\n extractContext,\n extractContextWithProvenance,\n injectContext,\n applyContextOutputs,\n applyContextOutputsWithProvenance,\n applyContextInputs,\n} from './context';\nexport type { ContextWriteResult } from './context';\n\n// Rejection-hint detection (issue #870)\nexport { detectContextRejectionHints } from './rejection-hints';\n\n// Request builder\nexport { buildRequest, hasRequestBuilder } from './request-builder';\n\n// Validations\nexport { runValidations } from './validations';\nexport {\n RateLimitTripObserver,\n RATE_LIMIT_TRIP_CONTRACT,\n RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS,\n RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX,\n RATE_LIMIT_TRIP_MAX_ATTEMPTS_MIN,\n extractTaskAdcpError,\n validateRateLimitTripSpec,\n type RateLimitTripFailureCode,\n type RateLimitTripClient,\n type RateLimitTripObservation,\n type RateLimitTripObserverOptions,\n type RateLimitTripResponseSnapshot,\n type RateLimitTripStructuredResult,\n type RateLimitTripTaskOptions,\n} from './rate-limit-trip';\n\n// `./junit` is deliberately NOT re-exported. The CLI requires it\n// directly from `dist/lib/testing/storyboard/junit.js` and the function\n// is marked `@internal` (stripped from the generated `.d.ts`). Add a\n// re-export here only if/when we promote it to a public API surface.\n\n// Test-kit schema validation\nexport { validateTestKit, TestKitValidationError, PROBE_TASK_ALLOWLIST } from './test-kit';\n\n// Sandbox entities\nexport type { SandboxBrand, SandboxAgent, SandboxEntities, BrandJson } from './sandbox-entities';\nexport { BrandJsonSchema, AdagentsJsonSchema } from '../../types/wellknown-schemas.generated';\nexport type { AdagentsJson } from '../../types/wellknown-schemas.generated';\nexport {\n getSandboxEntities,\n getSandboxBrands,\n getSandboxBrand,\n isSandboxDomain,\n clearSandboxCache,\n} from './sandbox-entities';\n"],"mappings":"AAeA,SAAS,iCAAiC;AAE1C,0BAA0B;
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/testing/storyboard/index.ts"],"sourcesContent":["/**\n * Storyboard-driven testing for AdCP agents.\n *\n * Storyboards are YAML-defined workflows that map directly to\n * SingleAgentClient methods, enabling step-by-step agent testing.\n * The canonical storyboard set lives in the AdCP compliance tarball\n * and is pulled into `compliance/cache/{version}/` via `npm run sync-schemas`.\n */\n\n// Side-effect import: registers the default cross-step assertions that\n// upstream storyboards reference by id (idempotency.conflict_no_payload_leak,\n// context.no_secret_echo, governance.denial_blocks_mutation). Without this\n// registration here, any `runStoryboard` call against a storyboard declaring\n// `invariants: [...]` would throw at start on unresolved ids. Consumers who\n// want to replace the defaults can `clearAssertionRegistry()` first.\nimport { registerDefaultInvariants } from './default-invariants';\n\nregisterDefaultInvariants();\n\n// Types\nexport type {\n A2ATaskEnvelope,\n AgentEntry,\n Storyboard,\n StoryboardFixtureResolution,\n FixtureResolutionStrategy,\n FixtureMatchOperator,\n FixtureMatchClause,\n FixtureResolutionDeclaration,\n ProductFixtureResolutionDeclaration,\n PricingOptionFixtureResolutionDeclaration,\n FixtureResolutionStatus,\n FixtureResolutionRecord,\n FixtureResolutionAttempt,\n FixtureResolutionEvidence,\n FixtureResolutionCoverageGap,\n StoryboardInvariants,\n StoryboardInvariantsObject,\n StepInvariantsObject,\n StoryboardPhase,\n StoryboardStep,\n RateLimitTripSpec,\n StoryboardValidation,\n StoryboardValidationCheck,\n WebhookFilterSpec,\n WebhookRetryTriggerSpec,\n WebhookAssertionErrorCode,\n ContextOutput,\n ContextInput,\n ContextProvenanceEntry,\n ContextValueRejectedHint,\n ShapeDriftHint,\n MissingRequiredFieldHint,\n FormatMismatchHint,\n MonotonicViolationHint,\n ImpairmentCoherenceHint,\n ImpairmentCoherenceNotApplicableHint,\n StoryboardContext,\n StoryboardRunOptions,\n TrustedMatchContextProviderEndpoint,\n TrustedMatchContextRegistrationContext,\n TrustedMatchContextRouterRunnerOptions,\n ValidationResult,\n StoryboardStepPreview,\n StoryboardStepResult,\n StoryboardStepHint,\n StoryboardStepHintBase,\n StoryboardPhaseResult,\n StoryboardResult,\n AssertionResult,\n StrictValidationSummary,\n StrictValidationVerdict,\n UpstreamTrafficPayloadMatch,\n RunnerNotice,\n NoticeCode,\n NoticeSeverity,\n} from './types';\nexport { WEBHOOK_IDEMPOTENCY_KEY_PATTERN } from './types';\n\n// Cross-step assertion registry (adcontextprotocol/adcp#2639)\nexport {\n registerAssertion,\n getAssertion,\n listAssertions,\n listDefaultAssertions,\n clearAssertionRegistry,\n resolveAssertions,\n} from './assertions';\nexport type { AssertionSpec, AssertionContext, RegisterAssertionOptions } from './assertions';\n\n// Webhook receiver (outbound-webhook conformance testing per adcontextprotocol/adcp#2431)\nexport { createWebhookReceiver } from './webhook-receiver';\nexport type {\n CapturedWebhook,\n CreateWebhookReceiverOptions,\n RetryReplayPolicy,\n WebhookFilter,\n WebhookReceiver,\n WebhookWaitResult,\n} from './webhook-receiver';\n\n// Runner-variable substitution (`{{runner.*}}` / `{{prior_step.*.operation_id}}`)\nexport { createRunnerVariables } from './context';\nexport type { RunnerVariables } from './context';\n\n// Webhook-assertion pseudo-tasks\nexport { WEBHOOK_ASSERTION_TASKS } from './webhook-assertions';\n\n// Runner\nexport {\n runStoryboard,\n runStoryboardStep,\n applyAdcpVersionRunOptions,\n applyStoryboardVersionOptions,\n getFirstStepPreview,\n summarizeStrictValidation,\n listStrictOnlyFailures,\n resolveCapabilityPath,\n evaluateCapabilityPredicate,\n buildDiscoveryFailedResult,\n} from './runner';\n\n// Parser (single-file load for spec evolution / targeted testing)\nexport { parseStoryboard, loadStoryboardFile } from './loader';\n\n// AdCP 3.2 fixture-handle resolution\nexport {\n applyFixtureBindingsToRequest,\n buildFixtureResolutionSpecs,\n FixtureBindingRegistry,\n matchesFixtureRequirements,\n normalizeFixtureMatchExpression,\n validateFixtureResolutionDeclarations,\n} from './fixture-resolution';\n\n// Compliance cache: capability-driven resolution\nexport {\n getComplianceCacheDir,\n getExternalSchemaRootForCompliance,\n loadComplianceIndex,\n listBundles,\n loadBundleStoryboards,\n listAllComplianceStoryboards,\n getComplianceStoryboardById,\n findBundleById,\n resolveBundleOrStoryboard,\n resolveStoryboardsForCapabilities,\n isComplianceVersionSupported,\n loadSpecialismDetail,\n listSpecialisms,\n CapabilityResolutionError,\n PROTOCOL_TO_PATH,\n UNBASELINED_SUPPORTED_PROTOCOLS,\n} from './compliance';\nexport type {\n AgentCapabilities,\n BundleKind,\n BundleRef,\n CapabilityResolutionCode,\n ComplianceIndex,\n ComplianceIndexProtocol,\n ComplianceIndexSpecialism,\n NotApplicableStoryboard,\n ResolveOptions,\n ResolvedBundle,\n ResolvedStoryboards,\n SpecialismDetail,\n} from './compliance';\n\n// Task mapping\nexport { TASK_TO_METHOD, executeStoryboardTask } from './task-map';\n\n// Storyboard-only creative asset directives\nexport { expandCreativeAssetDirectives, findUnresolvedCreativeAssetDirectives } from './creative-assets';\n\n// Path utilities\nexport { parsePath, resolvePath, setPath } from './path';\n\n// Context\nexport {\n CONTEXT_EXTRACTORS,\n extractContext,\n extractContextWithProvenance,\n injectContext,\n applyContextOutputs,\n applyContextOutputsWithProvenance,\n applyContextInputs,\n} from './context';\nexport type { ContextWriteResult } from './context';\n\n// Rejection-hint detection (issue #870)\nexport { detectContextRejectionHints } from './rejection-hints';\n\n// Request builder\nexport { buildRequest, hasRequestBuilder } from './request-builder';\n\n// Validations\nexport { runValidations } from './validations';\nexport {\n gradeOAuthMetadataGraph,\n gradeOAuthMetadataGraphVector,\n loadOAuthMetadataGraphVectors,\n buildAuthorizationServerMetadataUrl,\n buildProtectedResourceMetadataUrl,\n normalizeOAuthResourceForComparison,\n redactOAuthUrlForOutput,\n} from './oauth-metadata-graph';\nexport type {\n GradeOAuthMetadataGraphOptions,\n OAuthMetadataFetchResponse,\n OAuthMetadataFetchTransport,\n OAuthMetadataGraphErrorCode,\n OAuthMetadataGraphFinding,\n OAuthMetadataGraphGrade,\n OAuthMetadataGraphObservation,\n OAuthMetadataGraphVector,\n OAuthMetadataGraphVectorCorpus,\n} from './oauth-metadata-graph';\nexport {\n RateLimitTripObserver,\n RATE_LIMIT_TRIP_CONTRACT,\n RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS,\n RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX,\n RATE_LIMIT_TRIP_MAX_ATTEMPTS_MIN,\n extractTaskAdcpError,\n validateRateLimitTripSpec,\n type RateLimitTripFailureCode,\n type RateLimitTripClient,\n type RateLimitTripObservation,\n type RateLimitTripObserverOptions,\n type RateLimitTripResponseSnapshot,\n type RateLimitTripStructuredResult,\n type RateLimitTripTaskOptions,\n} from './rate-limit-trip';\n\n// `./junit` is deliberately NOT re-exported. The CLI requires it\n// directly from `dist/lib/testing/storyboard/junit.js` and the function\n// is marked `@internal` (stripped from the generated `.d.ts`). Add a\n// re-export here only if/when we promote it to a public API surface.\n\n// Test-kit schema validation\nexport { validateTestKit, TestKitValidationError, PROBE_TASK_ALLOWLIST } from './test-kit';\n\n// Sandbox entities\nexport type { SandboxBrand, SandboxAgent, SandboxEntities, BrandJson } from './sandbox-entities';\nexport { BrandJsonSchema, AdagentsJsonSchema } from '../../types/wellknown-schemas.generated';\nexport type { AdagentsJson } from '../../types/wellknown-schemas.generated';\nexport {\n getSandboxEntities,\n getSandboxBrands,\n getSandboxBrand,\n isSandboxDomain,\n clearSandboxCache,\n} from './sandbox-entities';\n"],"mappings":"AAeA,SAAS,iCAAiC;AAE1C,0BAA0B;AA4D1B,SAAS,uCAAuC;AAGhD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP,SAAS,6BAA6B;AAWtC,SAAS,6BAA6B;AAItC,SAAS,+BAA+B;AAGxC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,iBAAiB,0BAA0B;AAGpD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAiBP,SAAS,gBAAgB,6BAA6B;AAGtD,SAAS,+BAA+B,6CAA6C;AAGrF,SAAS,WAAW,aAAa,eAAe;AAGhD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP,SAAS,mCAAmC;AAG5C,SAAS,cAAc,yBAAyB;AAGhD,SAAS,sBAAsB;AAC/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAYP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAQK;AAQP,SAAS,iBAAiB,wBAAwB,4BAA4B;AAI9E,SAAS,iBAAiB,0BAA0B;AAEpD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { OAuthMetadataGraphGrade } from './types.mjs';
|
|
2
|
+
export interface GradeOAuthMetadataGraphOptions {
|
|
3
|
+
/** Explicit local-development opt-in. Production grading remains HTTPS-only. */
|
|
4
|
+
allowHttp?: boolean;
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
/** Trusted scoped fetch supplied by a hosted runner; it must enforce peer-address binding. */
|
|
7
|
+
trustedFetchFn?: typeof fetch;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Shared RFC 9728 comparison semantics used by security.yaml and oauth_setup.
|
|
11
|
+
* Only scheme and host are case-folded and default ports are elided. The
|
|
12
|
+
* path, query, fragment, userinfo, and trailing slash remain significant.
|
|
13
|
+
*/
|
|
14
|
+
export declare function normalizeOAuthResourceForComparison(value: string): string;
|
|
15
|
+
/** Redact sensitive URL components before including a URL in a report. */
|
|
16
|
+
export declare function redactOAuthUrlForOutput(value: string): string;
|
|
17
|
+
/** Redact absolute URLs embedded in diagnostic text before report serialization. */
|
|
18
|
+
export declare function redactOAuthUrlsInText(value: string): string;
|
|
19
|
+
export declare function buildProtectedResourceMetadataUrl(agentUrl: string): string;
|
|
20
|
+
export declare function buildAuthorizationServerMetadataUrl(issuer: string): string;
|
|
21
|
+
export declare function gradeOAuthMetadataGraph(agentUrl: string, options?: GradeOAuthMetadataGraphOptions): Promise<OAuthMetadataGraphGrade>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { OAuthMetadataGraphGrade } from './types';
|
|
2
|
+
export interface GradeOAuthMetadataGraphOptions {
|
|
3
|
+
/** Explicit local-development opt-in. Production grading remains HTTPS-only. */
|
|
4
|
+
allowHttp?: boolean;
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
/** Trusted scoped fetch supplied by a hosted runner; it must enforce peer-address binding. */
|
|
7
|
+
trustedFetchFn?: typeof fetch;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Shared RFC 9728 comparison semantics used by security.yaml and oauth_setup.
|
|
11
|
+
* Only scheme and host are case-folded and default ports are elided. The
|
|
12
|
+
* path, query, fragment, userinfo, and trailing slash remain significant.
|
|
13
|
+
*/
|
|
14
|
+
export declare function normalizeOAuthResourceForComparison(value: string): string;
|
|
15
|
+
/** Redact sensitive URL components before including a URL in a report. */
|
|
16
|
+
export declare function redactOAuthUrlForOutput(value: string): string;
|
|
17
|
+
/** Redact absolute URLs embedded in diagnostic text before report serialization. */
|
|
18
|
+
export declare function redactOAuthUrlsInText(value: string): string;
|
|
19
|
+
export declare function buildProtectedResourceMetadataUrl(agentUrl: string): string;
|
|
20
|
+
export declare function buildAuthorizationServerMetadataUrl(issuer: string): string;
|
|
21
|
+
export declare function gradeOAuthMetadataGraph(agentUrl: string, options?: GradeOAuthMetadataGraphOptions): Promise<OAuthMetadataGraphGrade>;
|
|
22
|
+
//# sourceMappingURL=grader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grader.d.ts","sourceRoot":"","sources":["../../../../../src/lib/testing/storyboard/oauth-metadata-graph/grader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAKV,uBAAuB,EAExB,MAAM,SAAS,CAAC;AA4BjB,MAAM,WAAW,8BAA8B;IAC7C,gFAAgF;IAChF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,8FAA8F;IAC9F,cAAc,CAAC,EAAE,OAAO,KAAK,CAAC;CAC/B;AA8BD;;;;GAIG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAoCzE;AAED,0EAA0E;AAC1E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAa7D;AAED,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1E;AAED,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI1E;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,uBAAuB,CAAC,CAElC"}
|