@apifuse/provider-sdk 2.2.0-beta.62 → 2.2.0-beta.64
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/AUTHORING.md +367 -9
- package/CHANGELOG.md +8 -0
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/bin/apifuse-check.ts +84 -2
- package/bin/apifuse-dev.ts +11 -31
- package/bin/apifuse-migrate-deployment.ts +200 -0
- package/bin/apifuse-pack-check.ts +11 -4
- package/bin/apifuse-pack-types.ts +187 -4
- package/bin/apifuse-record.ts +44 -32
- package/bin/apifuse-submit-check.ts +9 -5
- package/bin/apifuse-test.ts +3 -1
- package/dist/cli/commands.d.ts +1 -1
- package/dist/cli/commands.js +11 -0
- package/dist/cli/deployment-intent.d.ts +178 -0
- package/dist/cli/deployment-intent.js +277 -0
- package/dist/cli/migrate-deployment-intent.d.ts +132 -0
- package/dist/cli/migrate-deployment-intent.js +1552 -0
- package/dist/cli/migrate-provider-shape.d.ts +5 -1
- package/dist/cli/migrate-provider-shape.js +4 -2
- package/dist/cli/resolver-runtime.d.ts +21 -0
- package/dist/cli/resolver-runtime.js +31 -0
- package/dist/define.d.ts +3 -0
- package/dist/define.js +5 -0
- package/dist/dev.d.ts +3 -1
- package/dist/dev.js +6 -1
- package/dist/engine.d.ts +35 -1
- package/dist/engine.js +21 -2
- package/dist/error-resolution.d.ts +1 -0
- package/dist/error-resolution.js +54 -0
- package/dist/errors.d.ts +39 -1
- package/dist/errors.js +50 -0
- package/dist/handle-meta.d.ts +36 -1
- package/dist/handle-meta.js +16 -0
- package/dist/handle.d.ts +23 -5
- package/dist/handle.js +54 -8
- package/dist/health-scenario.d.ts +38 -0
- package/dist/i18n/error-messages.d.ts +86 -0
- package/dist/i18n/error-messages.js +192 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +1 -0
- package/dist/i18n/keys.d.ts +12 -0
- package/dist/i18n/keys.js +76 -5
- package/dist/index.d.ts +11 -3
- package/dist/index.js +9 -1
- package/dist/lint.d.ts +15 -0
- package/dist/lint.js +469 -82
- package/dist/provider.d.ts +6 -6
- package/dist/provider.js +3 -3
- package/dist/runtime/browser-telemetry-binding.d.ts +5 -0
- package/dist/runtime/browser-telemetry-binding.js +83 -0
- package/dist/runtime/browser-telemetry.d.ts +76 -0
- package/dist/runtime/browser-telemetry.js +165 -0
- package/dist/runtime/browser.d.ts +3 -0
- package/dist/runtime/browser.js +208 -47
- package/dist/runtime/cache-telemetry.d.ts +71 -0
- package/dist/runtime/cache-telemetry.js +177 -0
- package/dist/runtime/cache.js +67 -7
- package/dist/runtime/capability-response.d.ts +3 -0
- package/dist/runtime/capability-response.js +56 -0
- package/dist/runtime/capability-telemetry.d.ts +46 -0
- package/dist/runtime/capability-telemetry.js +68 -0
- package/dist/runtime/diagnostic-env.d.ts +3 -0
- package/dist/runtime/diagnostic-env.js +10 -1
- package/dist/runtime/engine-mode.d.ts +74 -0
- package/dist/runtime/engine-mode.js +152 -0
- package/dist/runtime/handle.js +9 -1
- package/dist/runtime/http-telemetry-guard.d.ts +10 -0
- package/dist/runtime/http-telemetry-guard.js +62 -10
- package/dist/runtime/http.js +141 -35
- package/dist/runtime/instrumentation.js +92 -13
- package/dist/runtime/ocr-telemetry.d.ts +82 -0
- package/dist/runtime/ocr-telemetry.js +192 -0
- package/dist/runtime/ocr.js +35 -8
- package/dist/runtime/request-telemetry.d.ts +2 -0
- package/dist/runtime/request-telemetry.js +2 -1
- package/dist/runtime/resolver-runtime-options.d.ts +14 -0
- package/dist/runtime/resolver-runtime-options.js +33 -0
- package/dist/runtime/resolver-shared.d.ts +3 -2
- package/dist/runtime/resolver-shared.js +4 -4
- package/dist/runtime/resolver-telemetry.d.ts +1 -0
- package/dist/runtime/resolver-telemetry.js +1 -1
- package/dist/runtime/resolver-vendors/browser.d.ts +2 -0
- package/dist/runtime/resolver-vendors/browser.js +46 -0
- package/dist/runtime/resolver-vendors/hosts.d.ts +21 -0
- package/dist/runtime/resolver-vendors/hosts.js +35 -0
- package/dist/runtime/resolver-vendors/hypersolutions.js +2 -2
- package/dist/runtime/resolver-vendors/types.d.ts +5 -4
- package/dist/runtime/resolver.d.ts +4 -1
- package/dist/runtime/resolver.js +46 -13
- package/dist/runtime/state-telemetry.d.ts +79 -0
- package/dist/runtime/state-telemetry.js +194 -0
- package/dist/runtime/state.d.ts +3 -0
- package/dist/runtime/state.js +26 -7
- package/dist/runtime/stealth-cookies.d.ts +5 -1
- package/dist/runtime/stealth-cookies.js +21 -1
- package/dist/runtime/stealth-owned-headers.d.ts +26 -0
- package/dist/runtime/stealth-owned-headers.js +37 -0
- package/dist/runtime/stealth-telemetry.d.ts +92 -0
- package/dist/runtime/stealth-telemetry.js +179 -0
- package/dist/runtime/stealth.d.ts +4 -1
- package/dist/runtime/stealth.js +228 -85
- package/dist/runtime/stt-telemetry.d.ts +77 -0
- package/dist/runtime/stt-telemetry.js +176 -0
- package/dist/runtime/stt.js +15 -6
- package/dist/runtime-boundary-lint.d.ts +132 -0
- package/dist/runtime-boundary-lint.js +586 -0
- package/dist/server/error-stack-frames.d.ts +35 -0
- package/dist/server/error-stack-frames.js +219 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.js +4 -0
- package/dist/server/sdk-version.d.ts +3 -0
- package/dist/server/sdk-version.js +19 -0
- package/dist/server/self-test.js +1 -18
- package/dist/server/sensitive-values.d.ts +1 -1
- package/dist/server/sensitive-values.js +9 -0
- package/dist/server/serve-implementation.d.ts +51 -2
- package/dist/server/serve-implementation.js +337 -90
- package/dist/server/types.d.ts +1 -0
- package/dist/server/types.js +7 -0
- package/dist/stateful/stateful-provider-owner-forwarder.js +22 -0
- package/dist/stateful/stateful-provider-runtime-context.d.ts +3 -0
- package/dist/stateful/stateful-provider-runtime-context.js +1 -0
- package/dist/types.d.ts +123 -1
- package/dist/typescript-module.d.ts +39 -0
- package/dist/typescript-module.js +72 -0
- package/package.json +6 -1
- package/src/cli/commands.ts +14 -0
- package/src/cli/deployment-intent.ts +364 -0
- package/src/cli/migrate-deployment-intent.ts +1908 -0
- package/src/cli/migrate-provider-shape.ts +10 -4
- package/src/cli/resolver-runtime.ts +72 -0
- package/src/define.ts +13 -0
- package/src/dev.ts +9 -2
- package/src/engine.ts +38 -2
- package/src/error-resolution.ts +58 -0
- package/src/errors.ts +77 -1
- package/src/handle-meta.ts +51 -1
- package/src/handle.ts +92 -10
- package/src/health-scenario.ts +38 -0
- package/src/i18n/error-messages.ts +255 -0
- package/src/i18n/index.ts +1 -0
- package/src/i18n/keys.ts +80 -6
- package/src/index.ts +86 -0
- package/src/lint.ts +604 -91
- package/src/provider.ts +12 -0
- package/src/runtime/browser-telemetry-binding.ts +92 -0
- package/src/runtime/browser-telemetry.ts +289 -0
- package/src/runtime/browser.ts +249 -65
- package/src/runtime/cache-telemetry.ts +247 -0
- package/src/runtime/cache.ts +68 -17
- package/src/runtime/capability-response.ts +53 -0
- package/src/runtime/capability-telemetry.ts +101 -0
- package/src/runtime/diagnostic-env.ts +11 -1
- package/src/runtime/engine-mode.ts +233 -0
- package/src/runtime/handle.ts +9 -1
- package/src/runtime/http-telemetry-guard.ts +66 -13
- package/src/runtime/http.ts +168 -37
- package/src/runtime/instrumentation.ts +105 -16
- package/src/runtime/ocr-telemetry.ts +308 -0
- package/src/runtime/ocr.ts +114 -74
- package/src/runtime/request-telemetry.ts +2 -1
- package/src/runtime/resolver-runtime-options.ts +50 -0
- package/src/runtime/resolver-shared.ts +9 -4
- package/src/runtime/resolver-telemetry.ts +1 -1
- package/src/runtime/resolver-vendors/browser.ts +65 -7
- package/src/runtime/resolver-vendors/hosts.ts +43 -0
- package/src/runtime/resolver-vendors/hypersolutions.ts +2 -2
- package/src/runtime/resolver-vendors/types.ts +5 -4
- package/src/runtime/resolver.ts +64 -21
- package/src/runtime/state-telemetry.ts +298 -0
- package/src/runtime/state.ts +46 -45
- package/src/runtime/stealth-cookies.ts +24 -1
- package/src/runtime/stealth-owned-headers.ts +41 -0
- package/src/runtime/stealth-telemetry.ts +304 -0
- package/src/runtime/stealth.ts +355 -150
- package/src/runtime/stt-telemetry.ts +282 -0
- package/src/runtime/stt.ts +93 -71
- package/src/runtime-boundary-lint.ts +703 -0
- package/src/server/error-stack-frames.ts +214 -0
- package/src/server/index.ts +53 -0
- package/src/server/sdk-version.ts +22 -0
- package/src/server/self-test.ts +1 -21
- package/src/server/sensitive-values.ts +14 -0
- package/src/server/serve-implementation.ts +569 -108
- package/src/server/types.ts +7 -0
- package/src/stateful/stateful-provider-owner-forwarder.ts +23 -0
- package/src/stateful/stateful-provider-runtime-context.ts +4 -0
- package/src/types.ts +128 -1
- package/src/typescript-module.ts +100 -0
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/approval-override.ts.txt +0 -6
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/codemod-syntax.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/connection-precedence.ts.txt +0 -10
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-ambiguous-a.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-ambiguous-b.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-ambiguous-barrel.ts.txt +0 -2
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-ambiguous-index.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-computed.ts.txt +0 -6
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-cycle-a.ts.txt +0 -1
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-cycle-b.ts.txt +0 -1
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-cycle-index.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-daiso-barrel.ts.txt +0 -7
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-daiso-catalog.ts.txt +0 -19
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-daiso-docs.ts.txt +0 -6
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-daiso-index.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-daiso-stores.ts.txt +0 -8
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-indirect-config.ts.txt +0 -5
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-nonstatic.ts.txt +0 -4
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-package-index.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-reexport-index.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-reexport-leaf.ts.txt +0 -10
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-reexport-one.ts.txt +0 -1
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-reexport-two.ts.txt +0 -1
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-runtime-composed-index.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-runtime-composed-one.ts.txt +0 -6
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-runtime-composed-two.ts.txt +0 -6
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-runtime-mixed-index.ts.txt +0 -14
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-runtime-registry.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-star-package-barrel.ts.txt +0 -2
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-star-package-index.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/discovery-star-package-leaf.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/docs-conflict.ts.txt +0 -8
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-hoisted-array-spread.ts.txt +0 -15
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-imported-array-spread.ts.txt +0 -9
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-kebab-operation-id.ts.txt +0 -17
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-map.ts.txt +0 -5
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-mixed-array-spread.ts.txt +0 -24
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-operation.ts.txt +0 -16
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/examples-snake-operation-id.ts.txt +0 -21
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/factory-duplicate-provider.ts.txt +0 -11
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/factory-id-unresolved.ts.txt +0 -7
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/factory-map.ts.txt +0 -3
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/factory-one-to-many.ts.txt +0 -18
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/factory-one-to-one.ts.txt +0 -13
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/hoist-all.ts.txt +0 -31
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/hoisted-const.ts.txt +0 -11
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/imported-spread.ts.txt +0 -11
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-map.ts.txt +0 -11
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-spread-cast-tail.ts.txt +0 -21
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-spread-ekitan.ts.txt +0 -11
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/inline-spread-override.ts.txt +0 -14
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/locale-canonical-en.json +0 -1
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/locale-canonical-ja.json +0 -1
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/locale-canonical-ko.json +0 -1
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/locale-existing-operation-namespace-en.json +0 -8
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/missing-english-locale.ts.txt +0 -7
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/no-safety.ts.txt +0 -6
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/non-literal.ts.txt +0 -7
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/redundant-approval.ts.txt +0 -6
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/registry-binding-ambiguous.ts.txt +0 -12
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/registry-imported-other.ts.txt +0 -7
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/registry-imported.ts.txt +0 -5
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/registry-key-ambiguous.ts.txt +0 -19
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/registry-shorthand.ts.txt +0 -9
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/registry-typed.ts.txt +0 -11
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/registry-unrelated.ts.txt +0 -13
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/safety-conflict.ts.txt +0 -7
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/stream.ts.txt +0 -7
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/tool-router-spread.ts.txt +0 -15
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/unparseable.ts.txt +0 -4
- package/src/cli/__tests__/fixtures/migrate-operation-declaration/verbatim-template.ts.txt +0 -12
package/dist/handle.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
import { brandHandleError, hasHandleErrorBrand, ProviderError, } from "./errors.js";
|
|
12
|
-
import { APIFUSE_HANDLE_META_KEY, formatHandleIssuers, handleFieldDescription, HANDLE_KIND_NAME_PATTERN, isHandleIssuedBy, } from "./handle-meta.js";
|
|
12
|
+
import { APIFUSE_HANDLE_META_KEY, formatHandleIssuers, handleFieldDescription, handleHasDirectionalFieldNames, HANDLE_KIND_NAME_PATTERN, isHandleIssuedBy, } from "./handle-meta.js";
|
|
13
13
|
import { BOUND_HANDLE_WORD_COUNT, HIGH_PUBLIC_HANDLE_WORD_COUNT, PUBLIC_HANDLE_WORD_COUNT, } from "./runtime/handle-wordlist.js";
|
|
14
14
|
/** Public kinds whose (max) ttl exceeds this are issued with five words (auto-high). */
|
|
15
15
|
const AUTO_HIGH_TTL_MS = 3_600_000;
|
|
@@ -64,6 +64,16 @@ export function isHandleError(value) {
|
|
|
64
64
|
*/
|
|
65
65
|
export function handleRecoverySentence(kind) {
|
|
66
66
|
const issuers = formatHandleIssuers(kind.issuedBy);
|
|
67
|
+
// When the kind is issued under one key and accepted under another, naming
|
|
68
|
+
// only one of them tells the LLM to look for a field that is not there. Name
|
|
69
|
+
// the output key it reads and the input key it writes, in that order.
|
|
70
|
+
if (handleHasDirectionalFieldNames(kind)) {
|
|
71
|
+
const issued = kind.outputFieldName;
|
|
72
|
+
if (issuers) {
|
|
73
|
+
return `Call ${issuers} again and pass the new \`${issued}\` back as \`${kind.fieldName}\`, exactly as returned.`;
|
|
74
|
+
}
|
|
75
|
+
return `Request a new \`${issued}\` and pass it back as \`${kind.fieldName}\`, exactly as returned.`;
|
|
76
|
+
}
|
|
67
77
|
if (issuers) {
|
|
68
78
|
return `Call ${issuers} again and pass the new \`${kind.fieldName}\` exactly as returned.`;
|
|
69
79
|
}
|
|
@@ -111,10 +121,44 @@ function assertKindName(name, define) {
|
|
|
111
121
|
throw new Error(`${define}: kind name must match ${HANDLE_KIND_NAME_PATTERN} (2-12 lowercase letters, no digits or separators) so it never fuses with the word body; received ${JSON.stringify(name)}.`);
|
|
112
122
|
}
|
|
113
123
|
}
|
|
114
|
-
function assertFieldName(fieldName, define) {
|
|
115
|
-
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(fieldName)) {
|
|
116
|
-
throw new Error(`${define}:
|
|
124
|
+
function assertFieldName(fieldName, define, label) {
|
|
125
|
+
if (typeof fieldName !== "string" || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(fieldName)) {
|
|
126
|
+
throw new Error(`${define}: ${label} must be a plain identifier usable as a schema property key; received ${JSON.stringify(fieldName)}.`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Resolves the `fieldName` option to the input key and, when the two differ,
|
|
131
|
+
* the output key.
|
|
132
|
+
*
|
|
133
|
+
* The string form names one key for both directions and is unchanged. The
|
|
134
|
+
* object form requires BOTH keys: a half-declaration would leave one side
|
|
135
|
+
* silently defaulting to `${name}_token`, which is the kind of mismatch this
|
|
136
|
+
* option exists to make explicit. `outputFieldName` is left undefined when the
|
|
137
|
+
* two keys are equal so a one-name kind emits exactly the meta it always did.
|
|
138
|
+
*/
|
|
139
|
+
function resolveFieldNames(value, define, name) {
|
|
140
|
+
if (value === undefined)
|
|
141
|
+
return { fieldName: `${name}_token` };
|
|
142
|
+
if (typeof value === "string") {
|
|
143
|
+
assertFieldName(value, define, "fieldName");
|
|
144
|
+
return { fieldName: value };
|
|
145
|
+
}
|
|
146
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
147
|
+
throw new Error(`${define}: "${name}" fieldName must be a property key or { input, output }; received ${JSON.stringify(value)}.`);
|
|
148
|
+
}
|
|
149
|
+
const record = value;
|
|
150
|
+
const extra = Object.keys(record).filter((key) => key !== "input" && key !== "output");
|
|
151
|
+
if (extra.length > 0) {
|
|
152
|
+
throw new Error(`${define}: "${name}" fieldName accepts only "input" and "output"; received extra ${extra.map((key) => JSON.stringify(key)).join(", ")}.`);
|
|
153
|
+
}
|
|
154
|
+
if (record.input === undefined || record.output === undefined) {
|
|
155
|
+
throw new Error(`${define}: "${name}" fieldName must declare both "input" and "output" when the two directions differ; declaring one would leave the other defaulting to "${name}_token".`);
|
|
117
156
|
}
|
|
157
|
+
assertFieldName(record.input, define, "fieldName.input");
|
|
158
|
+
assertFieldName(record.output, define, "fieldName.output");
|
|
159
|
+
if (record.input === record.output)
|
|
160
|
+
return { fieldName: record.input };
|
|
161
|
+
return { fieldName: record.input, outputFieldName: record.output };
|
|
118
162
|
}
|
|
119
163
|
function assertPositiveInteger(value, label, define) {
|
|
120
164
|
if (!Number.isInteger(value) || value <= 0) {
|
|
@@ -163,8 +207,7 @@ function createHandleField(meta) {
|
|
|
163
207
|
export function defineCursor(options) {
|
|
164
208
|
const define = "defineCursor";
|
|
165
209
|
assertKindName(options.name, define);
|
|
166
|
-
const fieldName = options.fieldName
|
|
167
|
-
assertFieldName(fieldName, define);
|
|
210
|
+
const { fieldName, outputFieldName } = resolveFieldNames(options.fieldName, define, options.name);
|
|
168
211
|
const access = options.access ?? "bound";
|
|
169
212
|
assertAccess(access, define);
|
|
170
213
|
const ttlMs = parseHandleDurationMs(options.ttl, `"${options.name}" ttl`);
|
|
@@ -183,12 +226,14 @@ export function defineCursor(options) {
|
|
|
183
226
|
kind: options.name,
|
|
184
227
|
type: "cursor",
|
|
185
228
|
fieldName,
|
|
229
|
+
...(outputFieldName ? { outputFieldName } : {}),
|
|
186
230
|
...(issuedBy ? { issuedBy } : {}),
|
|
187
231
|
};
|
|
188
232
|
return Object.freeze({
|
|
189
233
|
name: options.name,
|
|
190
234
|
type: "cursor",
|
|
191
235
|
fieldName,
|
|
236
|
+
outputFieldName,
|
|
192
237
|
access,
|
|
193
238
|
issuedBy,
|
|
194
239
|
schema: options.schema,
|
|
@@ -209,8 +254,7 @@ export function defineCursor(options) {
|
|
|
209
254
|
export function defineDraft(options) {
|
|
210
255
|
const define = "defineDraft";
|
|
211
256
|
assertKindName(options.name, define);
|
|
212
|
-
const fieldName = options.fieldName
|
|
213
|
-
assertFieldName(fieldName, define);
|
|
257
|
+
const { fieldName, outputFieldName } = resolveFieldNames(options.fieldName, define, options.name);
|
|
214
258
|
if (!options.ttl || typeof options.ttl !== "object") {
|
|
215
259
|
throw new Error(`${define}: draft "${options.name}" ttl must be { idle, max }.`);
|
|
216
260
|
}
|
|
@@ -242,12 +286,14 @@ export function defineDraft(options) {
|
|
|
242
286
|
kind: options.name,
|
|
243
287
|
type: "draft",
|
|
244
288
|
fieldName,
|
|
289
|
+
...(outputFieldName ? { outputFieldName } : {}),
|
|
245
290
|
...(issuedBy ? { issuedBy } : {}),
|
|
246
291
|
};
|
|
247
292
|
return Object.freeze({
|
|
248
293
|
name: options.name,
|
|
249
294
|
type: "draft",
|
|
250
295
|
fieldName,
|
|
296
|
+
outputFieldName,
|
|
251
297
|
access,
|
|
252
298
|
strength,
|
|
253
299
|
issuedBy,
|
|
@@ -1562,6 +1562,44 @@ export type OperationResult = {
|
|
|
1562
1562
|
data: JsonValue;
|
|
1563
1563
|
request_id: string;
|
|
1564
1564
|
duration_ms: number;
|
|
1565
|
+
/**
|
|
1566
|
+
* Whether the monitor's operation step was answered from a stale-if-error
|
|
1567
|
+
* cache serve — the runtime's projection of the response envelope's
|
|
1568
|
+
* `meta.stale`.
|
|
1569
|
+
*
|
|
1570
|
+
* An operation that reads its upstream through `ctx.cache.getOrSet(...,
|
|
1571
|
+
* { staleIfErrorMs })` answers an upstream outage with HTTP 200 and a
|
|
1572
|
+
* well-formed, fully schema-valid body for the whole stale window. Every
|
|
1573
|
+
* assertion over `status_code` and `data` therefore passes, and the probe
|
|
1574
|
+
* rolls up `ok` while the upstream is down. This boolean is the only thing
|
|
1575
|
+
* in the step result that separates that from a live read.
|
|
1576
|
+
*
|
|
1577
|
+
* Always present, so a reference to it resolves to `false` rather than
|
|
1578
|
+
* raising `reference_unresolvable`; a response whose `meta` is malformed
|
|
1579
|
+
* fails the step rather than projecting as fresh.
|
|
1580
|
+
*
|
|
1581
|
+
* Providers that serve stale-if-error should guard on it, so an outage the
|
|
1582
|
+
* cache is absorbing stops reading as green:
|
|
1583
|
+
*
|
|
1584
|
+
* ```ts
|
|
1585
|
+
* {
|
|
1586
|
+
* id: "guard-freshness",
|
|
1587
|
+
* result: "freshness-guarded",
|
|
1588
|
+
* kind: "guard",
|
|
1589
|
+
* condition: {
|
|
1590
|
+
* kind: "predicate",
|
|
1591
|
+
* operator: "not_equals",
|
|
1592
|
+
* actual: { ref: { namespace: "steps", binding: "case", path: ["served_stale_cache"] } },
|
|
1593
|
+
* expected: true,
|
|
1594
|
+
* },
|
|
1595
|
+
* onFail: {
|
|
1596
|
+
* attribute: [{ operationId, status: "degraded", reasonCode: "expected_absence", reasonKey }],
|
|
1597
|
+
* stop: "scenario",
|
|
1598
|
+
* },
|
|
1599
|
+
* }
|
|
1600
|
+
* ```
|
|
1601
|
+
*/
|
|
1602
|
+
served_stale_cache: boolean;
|
|
1565
1603
|
candidate?: {
|
|
1566
1604
|
attempts: number;
|
|
1567
1605
|
selected_index: number | null;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { ProviderLocaleCatalogMap } from "./catalog.js";
|
|
2
|
+
import { type ProviderLocale } from "./keys.js";
|
|
3
|
+
/**
|
|
4
|
+
* Values interpolated into a localized provider error message or fix.
|
|
5
|
+
*
|
|
6
|
+
* Strings and finite numbers only. String values are treated as untrusted
|
|
7
|
+
* (upstream bodies frequently end up here), so they are scrubbed and capped by
|
|
8
|
+
* {@link interpolateProviderErrorText} before substitution.
|
|
9
|
+
*/
|
|
10
|
+
export type ProviderErrorMessageParams = Readonly<Record<string, string | number>>;
|
|
11
|
+
/** Locales the SDK negotiates for client-facing provider text. */
|
|
12
|
+
export declare const PROVIDER_ERROR_LOCALES: readonly ["en", "ko", "ja"];
|
|
13
|
+
/** Locale used when the caller asks for nothing the provider catalog covers. */
|
|
14
|
+
export declare const DEFAULT_PROVIDER_ERROR_LOCALE = "en";
|
|
15
|
+
/** Catalog namespace for derived `errors.<code>.message` / `errors.<code>.fix` lookups. */
|
|
16
|
+
export declare const PROVIDER_ERROR_CATALOG_NAMESPACE = "errors";
|
|
17
|
+
/** Per-value cap applied to every interpolated param, before substitution. */
|
|
18
|
+
export declare const MAX_INTERPOLATED_PARAM_LENGTH = 200;
|
|
19
|
+
/** Cap applied to a rendered localized message or fix. */
|
|
20
|
+
export declare const MAX_LOCALIZED_ERROR_TEXT_LENGTH = 2000;
|
|
21
|
+
/**
|
|
22
|
+
* Negotiates an `Accept-Language` header against {@link PROVIDER_ERROR_LOCALES}.
|
|
23
|
+
*
|
|
24
|
+
* Quality values are honoured (`ko;q=0.1, ja;q=0.9` selects `ja`) and `q=0`
|
|
25
|
+
* means "not acceptable". Ranges are matched on the primary subtag, so `ko-KR`
|
|
26
|
+
* selects `ko`. Returns `undefined` when the header is absent or names no
|
|
27
|
+
* supported locale, so callers can consult a lower-precedence source before
|
|
28
|
+
* defaulting.
|
|
29
|
+
*/
|
|
30
|
+
export declare function providerLocaleFromAcceptLanguage(header: string | null | undefined): ProviderLocale | undefined;
|
|
31
|
+
/** Reads `accept-language` from a case-insensitive header record. */
|
|
32
|
+
export declare function acceptLanguageHeaderValue(headers: Readonly<Record<string, unknown>> | undefined): string | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Picks the first supported locale across header sources, in precedence order,
|
|
35
|
+
* falling back to {@link DEFAULT_PROVIDER_ERROR_LOCALE}.
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveProviderErrorLocale(...headerValues: readonly (string | null | undefined)[]): ProviderLocale;
|
|
38
|
+
/**
|
|
39
|
+
* Renders one param value as substitution text, or `undefined` when the value
|
|
40
|
+
* cannot be substituted (absent, non-finite, or not a string/number).
|
|
41
|
+
*/
|
|
42
|
+
export declare function interpolatedParamText(value: unknown): string | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Substitutes `{name}` placeholders in a catalog template.
|
|
45
|
+
*
|
|
46
|
+
* - `{{` and `}}` are the literal `{` and `}` escapes.
|
|
47
|
+
* - A placeholder with no usable param is left verbatim, so an authoring gap is
|
|
48
|
+
* visible in the response instead of silently deleting text.
|
|
49
|
+
* - Substituted text is never rescanned, so a param value containing `{other}`
|
|
50
|
+
* cannot trigger a second round of interpolation.
|
|
51
|
+
*/
|
|
52
|
+
export declare function interpolateProviderErrorText(template: string, params?: ProviderErrorMessageParams): string;
|
|
53
|
+
/** A key candidate considered by {@link localizeProviderErrorText}, in priority order. */
|
|
54
|
+
export type ProviderErrorTextCandidate =
|
|
55
|
+
/** An explicit dot-path key from a throw site or an `errorCodes[]` declaration. */
|
|
56
|
+
{
|
|
57
|
+
readonly kind: "key";
|
|
58
|
+
readonly key: string | undefined;
|
|
59
|
+
}
|
|
60
|
+
/** The `errors.<code>.<field>` convention; `code` is used verbatim as a segment. */
|
|
61
|
+
| {
|
|
62
|
+
readonly kind: "derived";
|
|
63
|
+
readonly code: string | undefined;
|
|
64
|
+
readonly field: string;
|
|
65
|
+
};
|
|
66
|
+
export interface LocalizeProviderErrorTextOptions {
|
|
67
|
+
readonly catalogs?: ProviderLocaleCatalogMap;
|
|
68
|
+
readonly locale: ProviderLocale;
|
|
69
|
+
readonly fallbackLocale?: ProviderLocale;
|
|
70
|
+
readonly candidates: readonly ProviderErrorTextCandidate[];
|
|
71
|
+
readonly params?: ProviderErrorMessageParams;
|
|
72
|
+
/** Literal text returned when no candidate resolves. May be `undefined` for `fix`. */
|
|
73
|
+
readonly fallback: string | undefined;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Resolves client-facing error text against the provider locale catalogs.
|
|
77
|
+
*
|
|
78
|
+
* Candidates are tried in order and each one is resolved in the caller's locale
|
|
79
|
+
* before the `en` catalog, so a more specific key always beats a more specific
|
|
80
|
+
* locale. Nothing here throws: a malformed key, an absent catalog, a
|
|
81
|
+
* non-string catalog value and a missing key all fall through to the next
|
|
82
|
+
* candidate and ultimately to `fallback`.
|
|
83
|
+
*/
|
|
84
|
+
export declare function localizeProviderErrorText(options: LocalizeProviderErrorTextOptions): string | undefined;
|
|
85
|
+
/** The `errors.<code>.<field>` dot path this SDK derives for an undeclared key. */
|
|
86
|
+
export declare function derivedProviderErrorCatalogPath(code: string, field: "message" | "fix"): string;
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { sanitizeDiagnosticText } from "../fixture-sanitization.js";
|
|
2
|
+
import { getProviderLocaleSegments, isProviderLocaleKey, } from "./keys.js";
|
|
3
|
+
/** Locales the SDK negotiates for client-facing provider text. */
|
|
4
|
+
export const PROVIDER_ERROR_LOCALES = ["en", "ko", "ja"];
|
|
5
|
+
/** Locale used when the caller asks for nothing the provider catalog covers. */
|
|
6
|
+
export const DEFAULT_PROVIDER_ERROR_LOCALE = "en";
|
|
7
|
+
/** Catalog namespace for derived `errors.<code>.message` / `errors.<code>.fix` lookups. */
|
|
8
|
+
export const PROVIDER_ERROR_CATALOG_NAMESPACE = "errors";
|
|
9
|
+
/** Per-value cap applied to every interpolated param, before substitution. */
|
|
10
|
+
export const MAX_INTERPOLATED_PARAM_LENGTH = 200;
|
|
11
|
+
/** Cap applied to a rendered localized message or fix. */
|
|
12
|
+
export const MAX_LOCALIZED_ERROR_TEXT_LENGTH = 2_000;
|
|
13
|
+
const TRUNCATION_SUFFIX = "…";
|
|
14
|
+
// One pass, three alternatives: `{{` and `}}` are the literal-brace escapes and
|
|
15
|
+
// `{name}` is a substitution. Named groups are deliberately not used so the
|
|
16
|
+
// callback can distinguish an escape from a substitution by the matched text.
|
|
17
|
+
const PLACEHOLDER_PATTERN = /\{\{|\}\}|\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
|
|
18
|
+
// Markup openers are removed outright rather than entity-escaped: the envelope
|
|
19
|
+
// is plain text, so an escaped `<` would be as wrong for a terminal as a raw
|
|
20
|
+
// `<` is for an HTML surface. The `&` rule only fires in front of an
|
|
21
|
+
// entity-shaped run, so ordinary prose ("Tom & Jerry") survives while
|
|
22
|
+
// `<script>` cannot be revived by a consumer that decodes entities.
|
|
23
|
+
const MARKUP_OPENER_PATTERN = /[<>`]/g;
|
|
24
|
+
const HTML_ENTITY_AMPERSAND_PATTERN = /&(?=#?[0-9A-Za-z]{1,32};)/g;
|
|
25
|
+
function isProviderErrorLocale(value) {
|
|
26
|
+
return PROVIDER_ERROR_LOCALES.some((locale) => locale === value);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Negotiates an `Accept-Language` header against {@link PROVIDER_ERROR_LOCALES}.
|
|
30
|
+
*
|
|
31
|
+
* Quality values are honoured (`ko;q=0.1, ja;q=0.9` selects `ja`) and `q=0`
|
|
32
|
+
* means "not acceptable". Ranges are matched on the primary subtag, so `ko-KR`
|
|
33
|
+
* selects `ko`. Returns `undefined` when the header is absent or names no
|
|
34
|
+
* supported locale, so callers can consult a lower-precedence source before
|
|
35
|
+
* defaulting.
|
|
36
|
+
*/
|
|
37
|
+
export function providerLocaleFromAcceptLanguage(header) {
|
|
38
|
+
if (typeof header !== "string" || header.length === 0)
|
|
39
|
+
return undefined;
|
|
40
|
+
const ranges = [];
|
|
41
|
+
for (const [position, token] of header.split(",").entries()) {
|
|
42
|
+
const [rangeText, ...parameters] = token.split(";");
|
|
43
|
+
const primary = rangeText?.trim().split("-")[0]?.toLowerCase();
|
|
44
|
+
if (!primary)
|
|
45
|
+
continue;
|
|
46
|
+
const quality = parseQualityValue(parameters);
|
|
47
|
+
if (quality <= 0)
|
|
48
|
+
continue;
|
|
49
|
+
ranges.push({ primary, quality, position });
|
|
50
|
+
}
|
|
51
|
+
// Stable by construction: equal qualities keep header order.
|
|
52
|
+
ranges.sort((left, right) => left.quality === right.quality ? left.position - right.position : right.quality - left.quality);
|
|
53
|
+
for (const range of ranges) {
|
|
54
|
+
if (isProviderErrorLocale(range.primary))
|
|
55
|
+
return range.primary;
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
function parseQualityValue(parameters) {
|
|
60
|
+
for (const parameter of parameters) {
|
|
61
|
+
const [name, value] = parameter.split("=");
|
|
62
|
+
if (name?.trim().toLowerCase() !== "q")
|
|
63
|
+
continue;
|
|
64
|
+
const quality = Number.parseFloat(value?.trim() ?? "");
|
|
65
|
+
// A malformed `q` is not a rejection; RFC 9110 treats the range as
|
|
66
|
+
// fully acceptable when no usable quality is present.
|
|
67
|
+
if (!Number.isFinite(quality))
|
|
68
|
+
return 1;
|
|
69
|
+
return Math.min(Math.max(quality, 0), 1);
|
|
70
|
+
}
|
|
71
|
+
return 1;
|
|
72
|
+
}
|
|
73
|
+
/** Reads `accept-language` from a case-insensitive header record. */
|
|
74
|
+
export function acceptLanguageHeaderValue(headers) {
|
|
75
|
+
if (!headers)
|
|
76
|
+
return undefined;
|
|
77
|
+
for (const [name, value] of Object.entries(headers)) {
|
|
78
|
+
if (name.toLowerCase() === "accept-language" && typeof value === "string")
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Picks the first supported locale across header sources, in precedence order,
|
|
85
|
+
* falling back to {@link DEFAULT_PROVIDER_ERROR_LOCALE}.
|
|
86
|
+
*/
|
|
87
|
+
export function resolveProviderErrorLocale(...headerValues) {
|
|
88
|
+
for (const value of headerValues) {
|
|
89
|
+
const locale = providerLocaleFromAcceptLanguage(value);
|
|
90
|
+
if (locale)
|
|
91
|
+
return locale;
|
|
92
|
+
}
|
|
93
|
+
return DEFAULT_PROVIDER_ERROR_LOCALE;
|
|
94
|
+
}
|
|
95
|
+
function truncateText(value, limit) {
|
|
96
|
+
return value.length <= limit ? value : `${value.slice(0, limit)}${TRUNCATION_SUFFIX}`;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Renders one param value as substitution text, or `undefined` when the value
|
|
100
|
+
* cannot be substituted (absent, non-finite, or not a string/number).
|
|
101
|
+
*/
|
|
102
|
+
export function interpolatedParamText(value) {
|
|
103
|
+
if (typeof value === "number") {
|
|
104
|
+
return Number.isFinite(value) ? String(value) : undefined;
|
|
105
|
+
}
|
|
106
|
+
if (typeof value !== "string")
|
|
107
|
+
return undefined;
|
|
108
|
+
// sanitizeDiagnosticText scrubs credentials and encodes control, bidi and
|
|
109
|
+
// line-separator characters; the markup pass closes the HTML/markdown hole
|
|
110
|
+
// it deliberately leaves open for log text.
|
|
111
|
+
const scrubbed = sanitizeDiagnosticText(value)
|
|
112
|
+
.replace(MARKUP_OPENER_PATTERN, "")
|
|
113
|
+
.replace(HTML_ENTITY_AMPERSAND_PATTERN, "")
|
|
114
|
+
.replace(/\s+/g, " ")
|
|
115
|
+
.trim();
|
|
116
|
+
return truncateText(scrubbed, MAX_INTERPOLATED_PARAM_LENGTH);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Substitutes `{name}` placeholders in a catalog template.
|
|
120
|
+
*
|
|
121
|
+
* - `{{` and `}}` are the literal `{` and `}` escapes.
|
|
122
|
+
* - A placeholder with no usable param is left verbatim, so an authoring gap is
|
|
123
|
+
* visible in the response instead of silently deleting text.
|
|
124
|
+
* - Substituted text is never rescanned, so a param value containing `{other}`
|
|
125
|
+
* cannot trigger a second round of interpolation.
|
|
126
|
+
*/
|
|
127
|
+
export function interpolateProviderErrorText(template, params) {
|
|
128
|
+
const rendered = template.replace(PLACEHOLDER_PATTERN, (match, name) => {
|
|
129
|
+
if (match === "{{")
|
|
130
|
+
return "{";
|
|
131
|
+
if (match === "}}")
|
|
132
|
+
return "}";
|
|
133
|
+
if (name === undefined)
|
|
134
|
+
return match;
|
|
135
|
+
const substitution = interpolatedParamText(params && Object.hasOwn(params, name) ? params[name] : undefined);
|
|
136
|
+
return substitution ?? match;
|
|
137
|
+
});
|
|
138
|
+
return truncateText(rendered, MAX_LOCALIZED_ERROR_TEXT_LENGTH);
|
|
139
|
+
}
|
|
140
|
+
function asCatalogText(value) {
|
|
141
|
+
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
142
|
+
}
|
|
143
|
+
function readCatalogSegments(catalogs, segments, locale, fallbackLocale) {
|
|
144
|
+
return (asCatalogText(getProviderLocaleSegments(catalogs[locale] ?? {}, segments)) ??
|
|
145
|
+
asCatalogText(getProviderLocaleSegments(catalogs[fallbackLocale] ?? {}, segments)));
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Resolves client-facing error text against the provider locale catalogs.
|
|
149
|
+
*
|
|
150
|
+
* Candidates are tried in order and each one is resolved in the caller's locale
|
|
151
|
+
* before the `en` catalog, so a more specific key always beats a more specific
|
|
152
|
+
* locale. Nothing here throws: a malformed key, an absent catalog, a
|
|
153
|
+
* non-string catalog value and a missing key all fall through to the next
|
|
154
|
+
* candidate and ultimately to `fallback`.
|
|
155
|
+
*/
|
|
156
|
+
export function localizeProviderErrorText(options) {
|
|
157
|
+
const { catalogs } = options;
|
|
158
|
+
if (!catalogs)
|
|
159
|
+
return options.fallback;
|
|
160
|
+
const fallbackLocale = options.fallbackLocale ?? DEFAULT_PROVIDER_ERROR_LOCALE;
|
|
161
|
+
for (const candidate of options.candidates) {
|
|
162
|
+
const segments = candidateSegments(candidate);
|
|
163
|
+
if (!segments)
|
|
164
|
+
continue;
|
|
165
|
+
try {
|
|
166
|
+
const template = readCatalogSegments(catalogs, segments, options.locale, fallbackLocale);
|
|
167
|
+
if (template === undefined)
|
|
168
|
+
continue;
|
|
169
|
+
return interpolateProviderErrorText(template, options.params);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// A hostile catalog or params object (throwing getters, exotic proxies)
|
|
173
|
+
// must not turn a provider error into a masked 500. Fall through to the
|
|
174
|
+
// next candidate and ultimately to the English literal.
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return options.fallback;
|
|
178
|
+
}
|
|
179
|
+
function candidateSegments(candidate) {
|
|
180
|
+
if (candidate.kind === "key") {
|
|
181
|
+
// Explicit keys must satisfy the dot-path grammar; a malformed key is a
|
|
182
|
+
// miss, never a throw at envelope time.
|
|
183
|
+
return isProviderLocaleKey(candidate.key) ? candidate.key.split(".") : undefined;
|
|
184
|
+
}
|
|
185
|
+
if (typeof candidate.code !== "string" || candidate.code.length === 0)
|
|
186
|
+
return undefined;
|
|
187
|
+
return [PROVIDER_ERROR_CATALOG_NAMESPACE, candidate.code, candidate.field];
|
|
188
|
+
}
|
|
189
|
+
/** The `errors.<code>.<field>` dot path this SDK derives for an undeclared key. */
|
|
190
|
+
export function derivedProviderErrorCatalogPath(code, field) {
|
|
191
|
+
return `${PROVIDER_ERROR_CATALOG_NAMESPACE}.${code}.${field}`;
|
|
192
|
+
}
|
package/dist/i18n/index.d.ts
CHANGED
package/dist/i18n/index.js
CHANGED
package/dist/i18n/keys.d.ts
CHANGED
|
@@ -5,6 +5,18 @@ export declare function isProviderLocaleKey(value: unknown): value is ProviderLo
|
|
|
5
5
|
export declare function assertProviderLocaleKey(value: unknown): asserts value is ProviderLocaleKey;
|
|
6
6
|
export declare function qualifyProviderLocaleKey(providerId: string, key: ProviderLocaleKey | string): string;
|
|
7
7
|
export declare function getProviderLocalePath(catalog: ProviderLocaleCatalog, key: ProviderLocaleKey | string): ProviderLocaleValue | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Reads a catalog path from raw segments, bypassing the dot-path grammar.
|
|
10
|
+
*
|
|
11
|
+
* Derived error-message lookups address the catalog by the thrown error code
|
|
12
|
+
* (`errors.<code>.message`). The grammar now accepts the code shapes the SDK
|
|
13
|
+
* registers and the fleet throws, but `code` is provider data: a provider may
|
|
14
|
+
* throw anything, and an unusual code must still resolve its catalog entry
|
|
15
|
+
* rather than be dropped as malformed. Own properties only: a
|
|
16
|
+
* `__proto__`/`constructor` segment must read as a miss, not as the prototype
|
|
17
|
+
* chain.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getProviderLocaleSegments(catalog: ProviderLocaleCatalog, segments: readonly string[]): ProviderLocaleValue | undefined;
|
|
8
20
|
export type ProviderLocaleValue = string | readonly string[];
|
|
9
21
|
export type ProviderLocaleCatalog = Record<string, unknown>;
|
|
10
22
|
export declare function isProviderLocaleValue(value: unknown): value is ProviderLocaleValue;
|
package/dist/i18n/keys.js
CHANGED
|
@@ -1,14 +1,69 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* An ordinary catalog name segment: camelCase, ASCII only.
|
|
3
|
+
*
|
|
4
|
+
* `[A-Z][a-z0-9]+` forces at least one character after each hump, so a
|
|
5
|
+
* screaming acronym (`errorsURL`) is not silently read as camelCase.
|
|
6
|
+
*/
|
|
7
|
+
const NAME_SEGMENT_RE = /^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]+)*$/;
|
|
8
|
+
/** An array-index segment, e.g. the `0` in `meta.tags.0`. */
|
|
9
|
+
const INDEX_SEGMENT_RE = /^[0-9]+$/;
|
|
10
|
+
/**
|
|
11
|
+
* An error-code segment: the thrown `code` used verbatim as a catalog key.
|
|
12
|
+
*
|
|
13
|
+
* Single-case underscore words only — `UPSTREAM_SCHEMA_ERROR`, `BLOCKED`,
|
|
14
|
+
* `reauth_required` — matching the shape the SDK registers and the fleet
|
|
15
|
+
* throws (a census of 91 provider repos found 224 distinct codes: 213
|
|
16
|
+
* SCREAMING_SNAKE, 11 lower_snake, none mixed-case, none with a leading digit).
|
|
17
|
+
* A leading letter is mandatory, so no error code can be spelled like the
|
|
18
|
+
* numeric array-index form and the two segment kinds stay disjoint.
|
|
19
|
+
* The lower_snake arm requires an underscore because a bare lowercase word is
|
|
20
|
+
* already a {@link NAME_SEGMENT_RE} segment.
|
|
21
|
+
*/
|
|
22
|
+
const ERROR_CODE_SEGMENT_RE = /^(?:[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)*|[a-z][a-z0-9]*(?:_[a-z0-9]+)+)$/;
|
|
23
|
+
/**
|
|
24
|
+
* The only parent under which an error-code segment is legal.
|
|
25
|
+
*
|
|
26
|
+
* Must stay equal to `PROVIDER_ERROR_CATALOG_NAMESPACE` in `error-messages.ts`
|
|
27
|
+
* (the derived-path test in `keys.test.ts` fails if they drift). Anchoring the
|
|
28
|
+
* code vocabulary to this one parent is what keeps the grammar from degrading
|
|
29
|
+
* into "any identifier anywhere": everywhere else a segment is still camelCase
|
|
30
|
+
* or an array index.
|
|
31
|
+
*/
|
|
32
|
+
const ERROR_CODE_PARENT_SEGMENT = "errors";
|
|
33
|
+
/**
|
|
34
|
+
* Validates one segment in position.
|
|
35
|
+
*
|
|
36
|
+
* `parent` is the preceding segment, or `undefined` for the first segment. The
|
|
37
|
+
* first segment is always a plain name: catalogs are rooted in SDK-owned
|
|
38
|
+
* namespaces (`meta`, `operations`, `auth`, `errors`), never in an index or a
|
|
39
|
+
* code.
|
|
40
|
+
*/
|
|
41
|
+
function isValidProviderLocaleSegment(segment, parent) {
|
|
42
|
+
if (parent === undefined)
|
|
43
|
+
return NAME_SEGMENT_RE.test(segment);
|
|
44
|
+
if (NAME_SEGMENT_RE.test(segment) || INDEX_SEGMENT_RE.test(segment))
|
|
45
|
+
return true;
|
|
46
|
+
return parent === ERROR_CODE_PARENT_SEGMENT && ERROR_CODE_SEGMENT_RE.test(segment);
|
|
47
|
+
}
|
|
2
48
|
export function providerLocaleKey(key) {
|
|
3
49
|
assertProviderLocaleKey(key);
|
|
4
50
|
return key;
|
|
5
51
|
}
|
|
6
52
|
export function isProviderLocaleKey(value) {
|
|
7
|
-
|
|
53
|
+
if (typeof value !== "string" || value.length === 0)
|
|
54
|
+
return false;
|
|
55
|
+
const segments = value.split(".");
|
|
56
|
+
for (const [index, segment] of segments.entries()) {
|
|
57
|
+
// `split(".")` yields "" for an empty segment ("a..b", ".a", "a."), which
|
|
58
|
+
// no segment pattern matches, so those stay rejected.
|
|
59
|
+
if (!isValidProviderLocaleSegment(segment, index === 0 ? undefined : segments[index - 1]))
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
8
63
|
}
|
|
9
64
|
export function assertProviderLocaleKey(value) {
|
|
10
65
|
if (!isProviderLocaleKey(value)) {
|
|
11
|
-
throw new Error(`Provider locale key must be a dot path such as "meta.description" or "operations.search.description"; received ${JSON.stringify(value)}`);
|
|
66
|
+
throw new Error(`Provider locale key must be a camelCase dot path such as "meta.description" or "operations.search.description", optionally naming an error code under "${ERROR_CODE_PARENT_SEGMENT}." as in "errors.UPSTREAM_SCHEMA_ERROR.message"; received ${JSON.stringify(value)}`);
|
|
12
67
|
}
|
|
13
68
|
}
|
|
14
69
|
export function qualifyProviderLocaleKey(providerId, key) {
|
|
@@ -17,9 +72,25 @@ export function qualifyProviderLocaleKey(providerId, key) {
|
|
|
17
72
|
}
|
|
18
73
|
export function getProviderLocalePath(catalog, key) {
|
|
19
74
|
assertProviderLocaleKey(key);
|
|
75
|
+
return getProviderLocaleSegments(catalog, key.split("."));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Reads a catalog path from raw segments, bypassing the dot-path grammar.
|
|
79
|
+
*
|
|
80
|
+
* Derived error-message lookups address the catalog by the thrown error code
|
|
81
|
+
* (`errors.<code>.message`). The grammar now accepts the code shapes the SDK
|
|
82
|
+
* registers and the fleet throws, but `code` is provider data: a provider may
|
|
83
|
+
* throw anything, and an unusual code must still resolve its catalog entry
|
|
84
|
+
* rather than be dropped as malformed. Own properties only: a
|
|
85
|
+
* `__proto__`/`constructor` segment must read as a miss, not as the prototype
|
|
86
|
+
* chain.
|
|
87
|
+
*/
|
|
88
|
+
export function getProviderLocaleSegments(catalog, segments) {
|
|
89
|
+
if (segments.length === 0)
|
|
90
|
+
return undefined;
|
|
20
91
|
let cursor = catalog;
|
|
21
|
-
for (const segment of
|
|
22
|
-
if (!isRecord(cursor))
|
|
92
|
+
for (const segment of segments) {
|
|
93
|
+
if (!isRecord(cursor) || !Object.hasOwn(cursor, segment))
|
|
23
94
|
return undefined;
|
|
24
95
|
cursor = cursor[segment];
|
|
25
96
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,19 +13,22 @@ export * from "./engine.js";
|
|
|
13
13
|
export * from "./observability.js";
|
|
14
14
|
export * from "./user-input.js";
|
|
15
15
|
export * from "./i18n/index.js";
|
|
16
|
-
export { type LintDiagnostic, lintOperation, lintProvider, } from "./lint.js";
|
|
16
|
+
export { type LintDiagnostic, lintOperation, lintProvider, type ProviderLintInformation, type ProviderLintResult, } from "./lint.js";
|
|
17
|
+
export { type LintRuntimeBoundarySourcesOptions, lintRuntimeBoundarySources, RUNTIME_BOUNDARY_RULES, type RuntimeBoundaryRule, } from "./runtime-boundary-lint.js";
|
|
18
|
+
export { TYPESCRIPT_COMPILER_MODULE_SPECIFIERS, type TypeScriptCompilerModuleLike, } from "./typescript-module.js";
|
|
17
19
|
export * from "./recipes/gov-api.js";
|
|
18
20
|
export * from "./recipes/rest-api.js";
|
|
19
21
|
export { createFlowContext, createScratchpad } from "./runtime/auth-flow.js";
|
|
20
22
|
export type { BrowserClientOptions } from "./runtime/browser.js";
|
|
21
23
|
export { APIFUSE__CACHE__KEY_PEPPER_ENV, createBypassProviderCache, createProviderCache, type ProviderCacheOptions, } from "./runtime/cache.js";
|
|
22
24
|
export * from "./handle.js";
|
|
23
|
-
export { APIFUSE_HANDLE_META_KEY, HANDLE_KIND_NAME_PATTERN, handleFieldDescription, isHandleFieldMeta, } from "./handle-meta.js";
|
|
25
|
+
export { APIFUSE_HANDLE_META_KEY, HANDLE_KIND_NAME_PATTERN, handleFieldDescription, handleFieldNameFor, handleHasDirectionalFieldNames, isHandleFieldMeta, } from "./handle-meta.js";
|
|
24
26
|
export { type CreateHandleContextOptions, type CreateTestHandleContextOptions, createHandleContext, createTestHandleContext, type HandleNormalizationClass, type NormalizedHandle, normalizeHandle, } from "./runtime/handle.js";
|
|
25
27
|
export { type CreateCredentialContextOptions, createCredentialContext, } from "./runtime/credential.js";
|
|
26
28
|
export { createEnvContext } from "./runtime/env.js";
|
|
27
29
|
export { executeOperation } from "./runtime/executor.js";
|
|
28
30
|
export { createHttpClient } from "./runtime/http.js";
|
|
31
|
+
export { OcrTelemetryCollector, bindOcrTelemetry, type OcrTelemetryBackend, type OcrTelemetryEngine, type OcrTelemetryErrorCode, type OcrTelemetryEvent, type OcrTelemetryFinishReason, type OcrTelemetryHeaderPayload, type OcrTelemetryLogPayload, type OcrTelemetryModel, type OcrTelemetrySink, } from "./runtime/ocr-telemetry.js";
|
|
29
32
|
export { NativeEgressGrantExpiredError, NativeEgressNotDeclaredError, NativeIdleTimeoutError, NativeNetworkError, NativeProxyExpiredError, } from "./runtime/native-network-errors.js";
|
|
30
33
|
export type { NativeGatewayProxy, NativeGatewayProxyResolutionInput, NativeGatewayProxySkipReason, NativeGatewayProxySynthesizer, NativeGatewayProxySynthesisResult, NativeGatewayProxySynthesisInput, NativeNetworkClientOptions, NativeNetworkErrorCode, VendorCredentialLookup, VendorCredentialResolver, } from "./runtime/native-network.js";
|
|
31
34
|
export type { Insight, InsightSeverity } from "./runtime/insights.js";
|
|
@@ -37,6 +40,9 @@ export type { ProxyTelemetryHeaderPayload, ProxyHash, ProxyTelemetryLogPayload,
|
|
|
37
40
|
export { RequestTelemetry, closedEnum, type ClosedEnum, type GatewayIngestible, type RequestTelemetryLogPayload, type SpanIndex, type TelemetryContributor, type TelemetryKey, type TenantNeutral, } from "./runtime/request-telemetry.js";
|
|
38
41
|
export { APIFUSE__ENGINE__CEREMONY_LEASE_KEY } from "./runtime/egress-lease.js";
|
|
39
42
|
export { ResolverTelemetryCollector, type ResolverCacheReadTelemetryEvent, type ResolverCacheWriteTelemetryEvent, type ResolverFailoverTelemetryEvent, type ResolverIdentityTelemetryEvent, type ResolverOutcomeTelemetryEvent, type ResolverTelemetryAttemptOutcome, type ResolverAttemptSample, type ResolverTelemetryCacheStatus, type ResolverTelemetryCacheWriteReason, type ResolverTelemetryErrorClass, type ResolverTelemetryHeaderPayload, type ResolverTelemetryIdentitySource, type ResolverTelemetryLogPayload, type ResolverTelemetryOutcome, type ResolverTelemetryPhase, type ResolverTelemetrySink, type ResolverVendorAttemptTelemetryEvent, } from "./runtime/resolver-telemetry.js";
|
|
43
|
+
export { StealthTelemetryCollector, type StealthTelemetryAttemptEvent, type StealthTelemetryAttemptKind, type StealthTelemetryAttemptSample, type StealthTelemetryDiagnostics, type StealthTelemetryErrorCode, type StealthTelemetryHeaderPayload, type StealthTelemetryLogPayload, type StealthTelemetryRequestClass, type StealthTelemetrySbsdEvent, type StealthTelemetrySbsdOutcome, type StealthTelemetrySink, } from "./runtime/stealth-telemetry.js";
|
|
44
|
+
export { SttTelemetryCollector, bindSttTelemetry, type SttTelemetryBackend, type SttTelemetryEngine, type SttTelemetryModel, type SttTelemetryErrorCode, type SttTelemetryEvent, type SttTelemetryHeaderPayload, type SttTelemetryLogPayload, type SttTelemetrySink, } from "./runtime/stt-telemetry.js";
|
|
45
|
+
export { BrowserTelemetryCollector, type BrowserTelemetryErrorCode, type BrowserTelemetryHeaderPayload, type BrowserTelemetryLogPayload, type BrowserTelemetryPoolAcquireOutcome, type BrowserTelemetrySink, type BrowserTelemetrySampleName, type BrowserTelemetryEngine, } from "./runtime/browser-telemetry.js";
|
|
40
46
|
export { APIFUSE__CDP_POOL__URL, APIFUSE__RESOLVER__2CAPTCHA__API_KEY, APIFUSE__RESOLVER__CAPMONSTER__API_KEY, APIFUSE__RESOLVER__CAPSOLVER__API_KEY, APIFUSE__RESOLVER__HYPERSOLUTIONS__API_KEY, APIFUSE__RESOLVER__TIMEOUT_MS, DEFAULT_RESOLVER_TIMEOUT_MS, } from "./runtime/resolver-config.js";
|
|
41
47
|
export { createUnsupportedResolverClient } from "./runtime/resolver-shared.js";
|
|
42
48
|
export type { ResolverRuntimeOptions } from "./runtime/resolver.js";
|
|
@@ -51,7 +57,7 @@ export { APIFUSE_CONTENT_PROVENANCE_META_KEY, APIFUSE_CONTENT_TRUST_META_KEY, AP
|
|
|
51
57
|
export { createServerApp, createServerAppAsync, ERROR_OBSERVABILITY_HEADER, type ProviderErrorCauseFrame, type ServeOptions, serve, } from "./server/serve.js";
|
|
52
58
|
export { DEFAULT_STEALTH_BROWSER, DEFAULT_STEALTH_OS, getStealthProfile, listStealthProfiles, } from "./stealth/profiles.js";
|
|
53
59
|
export * from "./stream.js";
|
|
54
|
-
export type { ApiFuseResponse, AuthConfig, AuthContext, AuthFlowDefinition, AuthFlowInputHandler, AuthFlowStartHandler, AuthMode, AuthTurn, Bcp47Locale, BrowserCookie, BrowserEngine, BrowserOptions, BrowserResourceBody, BrowserResourceDecision, BrowserResourceMethod, BrowserResourcePolicy, BrowserResourceRequest, BrowserResourceRoute, ChallengeSolution, ConnectionMode, ContextDeclaration, CookieJar, ContextScratchpad, CredentialContext, CredentialDeclaration, E164PhoneNumber, EnvContext, FlowContext, FlowContextStore, HealthCheckAssertionContext, HealthCheckCase, HealthCheckCaseResult, HealthCheckSuite, HealthCheckUnsupported, HealthJourneyDefinition, HealthJourneyEventContext, HealthJourneyGatewayContext, HealthJourneyJournalContext, HealthJourneyManualTriggerPolicy, HealthJourneyRunContext, HealthJourneyRunResult, HealthJourneySchedule, HealthScheduleRandomization, HealthJourneySmsContext, HealthJourneyStep, HttpClient, HttpMethod, HttpRedirectFailureReason, HttpRedirectPolicy, HttpRedirectPolicyMode, HttpResponse, HttpRetryOptions, HttpRetrySummary, HttpStreamResponse, IanaTimeZone, InferSchemaOutput, Iso3166Alpha2CountryCode, Iso4217CurrencyCode, Iso8601Duration, NativeContext, NativeNetworkClient, NativeNetworkCloseReason, NativeNetworkConnection, NativeNetworkConnectInput, NativeNetworkConnectOptions, NativeNetworkDynamicGrantOptions, NativeNetworkEgressGrant, NativeProviderConfig, NativeProxyDrainHandler, NativeProxyEgressInfo, NativeProxyExpiringEvent, NativeProxyExpiringReason, NativeTcpDynamicEgressRule, NativeTcpEgressGrant, NativeTcpEgressRule, NativeTcpPortRange, NativeTcpTlsMode, NativeTlsConnectOptions, OcrCaptchaCandidate, OcrCaptchaOptions, OcrCaptchaResult, OcrContext, OcrImageInput, OcrRecognizeRequest, OcrResult, OcrWarning, OperationApprovalPolicy, OperationContractMetadata, OperationDefinition, OperationDeprecationMetadata, OperationExample, OperationErrorCode, ProviderErrorStatus, OperationHandlerResult, OperationLifecycle, OperationObservabilityConfig, OperationObservabilitySensitiveConfig, OperationRelationships, OperationRiskClass, OperationSensitivePath, OperationTransport, OperationTransportKind, ProbeInterval, ProviderAccessConfig, ProviderAccessVisibility, ProviderCache, ProviderCacheGetOrSetOptions, ProviderCacheKeyOptions, ProviderCacheLookupMeta, ProviderCacheResponseMeta, ProviderCacheResult, ProviderChallenge, ProviderChallengeKind, ProviderContext, ProviderContextFor, ProviderDefinition, ProviderDeploymentOverrides, ProviderFileRef, ProviderFilesContext, ProviderHealthMonitorConfig, ProviderHealthProbeConfig, ProviderLocale, ProviderLocaleKey, ProviderLocaleKeyInput, ProviderLogoProfile, ProviderLogoSource, ProviderMeta, ProviderOcrConfig, ProviderProxyConfig, ProviderProxyMode, ProviderProxyPolicy, ProxiedOAuthConfig, ProviderProxyProvider, ProviderProxySessionAffinity, ProviderPublicConnectionMode, ProviderPublicProfile, ProviderReviewed, ProviderResolvedFile, ProviderResolverConfig, ProviderResolverVendor, ProviderRuntimeTarget, ProviderRuntimeState, ProviderSecretDeclaration, ProviderStealthConfig, ProviderStateDurationString, ProviderStateNamespace, ProviderStreamEvent, ProviderSttConfig, ProviderSttMode, ProviderSupportLevel, RequestOptions, RedirectRunReason, ResolverContext, Rfc3339Instant, SchemaLike, SmsOrigin, SmsOtpExtractionPattern, SmsOtpMatcherDefinition, SseMessage, StandardSchemaV1, StateCasResult, StateNamespaceOptions, StateNamespaceScope, StateValue, StateWriteOptions, StealthClient, StealthBrowser, StealthChallengeClassification, StealthCookieStore, StealthCookieStoreV1, StealthFetchOptions, StealthPlatform, StealthProfile, StealthProfileDescriptor, StealthProfileSelection, StealthOS, StealthRedirectHop, StealthRedirectRunOptions, StealthRedirectRunResult, StealthResponse, StealthSession, StealthSessionCookies, SttAudioInput, SttContext, SttPromptPolicy, SttSegment, SttTranscribeMode, SttTranscribeRequest, SttTranscript, SttUnsupportedOptionPolicy, SttUsage, SttVerificationCodeOptions, SttWarning, TraceConfig, TraceSpan, VerificationCodeCandidate, VerificationCodeCandidateSource, VerificationCodeExtractionResult, } from "./types.js";
|
|
60
|
+
export type { ApiFuseResponse, AuthConfig, AuthContext, AuthFlowDefinition, AuthFlowInputHandler, AuthFlowStartHandler, AuthMode, AuthTurn, Bcp47Locale, BrowserCookie, BrowserEngine, BrowserOptions, BrowserResourceBody, BrowserResourceDecision, BrowserResourceMethod, BrowserResourcePolicy, BrowserResourceRequest, BrowserResourceRoute, ChallengeSolution, ConnectionMode, ContextDeclaration, CookieJar, ContextScratchpad, CredentialContext, CredentialDeclaration, E164PhoneNumber, EnvContext, FlowContext, FlowContextStore, HealthCheckAssertionContext, HealthCheckCase, HealthCheckCaseResult, HealthCheckSuite, HealthCheckUnsupported, HealthJourneyDefinition, HealthJourneyEventContext, HealthJourneyGatewayContext, HealthJourneyJournalContext, HealthJourneyManualTriggerPolicy, HealthJourneyRunContext, HealthJourneyRunResult, HealthJourneySchedule, HealthScheduleRandomization, HealthJourneySmsContext, HealthJourneyStep, HttpAttemptContext, HttpClient, HttpHeadersFactory, HttpMethod, HttpRedirectFailureReason, HttpRedirectPolicy, HttpRedirectPolicyMode, HttpResponse, HttpRetryOptions, HttpRetrySummary, HttpStreamResponse, IanaTimeZone, InferSchemaOutput, Iso3166Alpha2CountryCode, Iso4217CurrencyCode, Iso8601Duration, NativeContext, NativeNetworkClient, NativeNetworkCloseReason, NativeNetworkConnection, NativeNetworkConnectInput, NativeNetworkConnectOptions, NativeNetworkDynamicGrantOptions, NativeNetworkEgressGrant, NativeProviderConfig, NativeProxyDrainHandler, NativeProxyEgressInfo, NativeProxyExpiringEvent, NativeProxyExpiringReason, NativeTcpDynamicEgressRule, NativeTcpEgressGrant, NativeTcpEgressRule, NativeTcpPortRange, NativeTcpTlsMode, NativeTlsConnectOptions, OcrCaptchaCandidate, OcrCaptchaOptions, OcrCaptchaResult, OcrContext, OcrImageInput, OcrRecognizeRequest, OcrResult, OcrWarning, OperationApprovalPolicy, OperationContractMetadata, OperationDefinition, OperationDeprecationMetadata, OperationExample, OperationErrorCode, ProviderErrorStatus, OperationHandlerResult, OperationLifecycle, OperationObservabilityConfig, OperationObservabilitySensitiveConfig, OperationRelationships, OperationRiskClass, OperationSensitivePath, OperationTransport, OperationTransportKind, ProbeInterval, ProviderAccessConfig, ProviderAccessVisibility, ProviderCache, ProviderCacheGetOrSetOptions, ProviderCacheKeyOptions, ProviderCacheLookupMeta, ProviderCacheResponseMeta, ProviderCacheResult, ProviderChallenge, ProviderChallengeKind, ProviderContext, ProviderContextFor, ProviderDefinition, ProviderDeploymentOverrides, ProviderFileRef, ProviderFilesContext, ProviderHealthMonitorConfig, ProviderHealthProbeConfig, ProviderLocale, ProviderLocaleKey, ProviderLocaleKeyInput, ProviderLogoProfile, ProviderLogoSource, ProviderMeta, ProviderOcrConfig, ProviderProxyConfig, ProviderProxyMode, ProviderProxyPolicy, ProxiedOAuthConfig, ProviderProxyProvider, ProviderProxySessionAffinity, ProviderPublicConnectionMode, ProviderPublicProfile, ProviderReviewed, ProviderResolvedFile, ProviderResolverConfig, ProviderResolverVendor, ProviderRuntimeTarget, ProviderRuntimeState, ProviderSecretDeclaration, ProviderSecretIssuer, ProviderStealthConfig, ProviderStateDurationString, ProviderStateNamespace, ProviderStreamEvent, ProviderSttConfig, ProviderSttMode, ProviderSupportLevel, RequestOptions, RedirectRunReason, ResolverContext, Rfc3339Instant, SchemaLike, SmsOrigin, SmsOtpExtractionPattern, SmsOtpMatcherDefinition, SseMessage, StandardSchemaV1, StateCasResult, StateNamespaceOptions, StateNamespaceScope, StateValue, StateWriteOptions, StealthClient, StealthBrowser, StealthChallengeClassification, StealthCookieStore, StealthCookieStoreV1, StealthFetchOptions, StealthPlatform, StealthProfile, StealthProfileDescriptor, StealthProfileSelection, StealthOS, StealthRedirectHop, StealthRedirectRunOptions, StealthRedirectRunResult, StealthResponse, StealthSession, StealthSessionCookies, SttAudioInput, SttContext, SttPromptPolicy, SttSegment, SttTranscribeMode, SttTranscribeRequest, SttTranscript, SttUnsupportedOptionPolicy, SttUsage, SttVerificationCodeOptions, SttWarning, TraceConfig, TraceSpan, VerificationCodeCandidate, VerificationCodeCandidateSource, VerificationCodeExtractionResult, } from "./types.js";
|
|
55
61
|
export { DEFAULT_OPERATION_TRANSPORT, HttpRetryAfterPolicy, HttpRetryDelayStrategy, HttpRetryJitter, HttpRetryPreset, HttpRetryUnsafeMethodPolicy, PROBE_INTERVALS, STREAM_CHUNK_BYTES_MAX, STREAM_CHUNK_BYTES_MIN, STREAM_HEARTBEAT_MS_MAX, STREAM_HEARTBEAT_MS_MIN, STREAM_IDLE_TIMEOUT_MS_MAX, STREAM_IDLE_TIMEOUT_MS_MIN, STREAM_MAX_DURATION_MS_MAX, STREAM_MAX_DURATION_MS_MIN, } from "./types.js";
|
|
56
62
|
export * from "./utils/date.js";
|
|
57
63
|
export * from "./utils/parse.js";
|
|
@@ -59,3 +65,5 @@ export * from "./utils/text.js";
|
|
|
59
65
|
export * from "./utils/transform.js";
|
|
60
66
|
export { HttpTelemetryCollector, type HttpTelemetrySink, type HttpTelemetryRequestSink, type HttpAttemptTelemetryEvent, type HttpAttemptSample, type HttpTelemetryErrorCode, type HttpTelemetryRetryPayload, type HttpTelemetryLogPayload, type HttpTelemetryHeaderPayload, } from "./runtime/http-telemetry.js";
|
|
61
67
|
export { NativeTelemetryCollector, type NativeAttemptSample, type NativeConnectTelemetryEvent, type NativeLifecycleTelemetryEvent, type NativeTelemetryDiagnostics, type NativeTelemetryErrorCode, type NativeTelemetryHeaderPayload, type NativeTelemetryKind, type NativeTelemetryLifecycleKind, type NativeTelemetryLogPayload, type NativeTelemetryOutcome, type NativeTelemetrySink, type NativeTelemetryVendorSkipReason, type NativeVendorSkipTelemetryEvent, } from "./runtime/native-telemetry.js";
|
|
68
|
+
export { CacheTelemetryCollector, type CacheTelemetryHeaderPayload, type CacheTelemetryLogPayload, type CacheTelemetrySample, type CacheTelemetrySink, type CacheTelemetrySource, } from "./runtime/cache-telemetry.js";
|
|
69
|
+
export { StateTelemetryCollector, instrumentProviderRuntimeState, type StateTelemetryBackend, type StateTelemetryHeaderPayload, type StateTelemetryLogPayload, type StateTelemetryOperation, type StateTelemetrySample, type StateTelemetrySink, type StateTelemetryViolation, } from "./runtime/state-telemetry.js";
|