@apifuse/provider-sdk 2.2.0-beta.4 → 2.2.0-beta.40

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.
Files changed (303) hide show
  1. package/AUTHORING.md +501 -13
  2. package/CHANGELOG.md +165 -1
  3. package/README.md +72 -14
  4. package/SUBMISSION.md +1 -1
  5. package/bin/apifuse-check.ts +88 -4
  6. package/bin/apifuse-dev.ts +38 -5
  7. package/bin/apifuse-pack-check.ts +22 -2
  8. package/bin/apifuse-pack-smoke.ts +57 -2
  9. package/bin/apifuse-pack-types.ts +356 -38
  10. package/bin/apifuse-perf.ts +14 -13
  11. package/bin/apifuse-record.ts +691 -68
  12. package/bin/apifuse-submit-check.ts +518 -37
  13. package/bin/apifuse-sync-assets.ts +117 -0
  14. package/bin/submit-check-delimited-text.ts +50 -0
  15. package/dist/auth-turn/index.d.ts +3 -3
  16. package/dist/auth-turn/index.js +1 -1
  17. package/dist/auth.d.ts +14 -0
  18. package/dist/auth.js +67 -0
  19. package/dist/ceremonies/index.d.ts +16 -0
  20. package/dist/ceremonies/index.js +141 -36
  21. package/dist/cli/commands.d.ts +1 -1
  22. package/dist/cli/commands.js +8 -0
  23. package/dist/cli/create.d.ts +3 -0
  24. package/dist/cli/create.js +34 -35
  25. package/dist/cli/prompt-assets.d.ts +80 -0
  26. package/dist/cli/prompt-assets.js +743 -0
  27. package/dist/cli/templates/provider/AGENTS.md.tpl +17 -8
  28. package/dist/cli/templates/provider/Dockerfile.tpl +1 -1
  29. package/dist/cli/templates/provider/README.md.tpl +4 -4
  30. package/dist/cli/templates/provider/index.ts.tpl +6 -3
  31. package/dist/cli/templates/provider/operations/ping.ts.tpl +2 -1
  32. package/dist/config/loader.d.ts +177 -16
  33. package/dist/config/loader.js +424 -127
  34. package/dist/contract-serialization.js +4 -8
  35. package/dist/contract-types.d.ts +1 -0
  36. package/dist/contract.js +2 -0
  37. package/dist/declaration-validation.d.ts +32 -0
  38. package/dist/declaration-validation.js +207 -0
  39. package/dist/define.d.ts +51 -25
  40. package/dist/define.js +752 -38
  41. package/dist/error-resolution.d.ts +4 -0
  42. package/dist/error-resolution.js +122 -0
  43. package/dist/errors.d.ts +18 -0
  44. package/dist/errors.js +40 -0
  45. package/dist/fixture-sanitization.d.ts +28 -0
  46. package/dist/fixture-sanitization.js +217 -0
  47. package/dist/health-scenario.d.ts +1842 -0
  48. package/dist/health-scenario.js +624 -0
  49. package/dist/index.d.ts +19 -9
  50. package/dist/index.js +10 -6
  51. package/dist/lint.d.ts +6 -1
  52. package/dist/lint.js +362 -3
  53. package/dist/native-address.d.ts +43 -0
  54. package/dist/native-address.js +281 -0
  55. package/dist/native-egress-policy.d.ts +31 -0
  56. package/dist/native-egress-policy.js +288 -0
  57. package/dist/observability.d.ts +5 -2
  58. package/dist/observability.js +48 -1
  59. package/dist/provider.d.ts +8 -2
  60. package/dist/provider.js +3 -1
  61. package/dist/runtime/auth-flow.d.ts +5 -1
  62. package/dist/runtime/auth-flow.js +6 -0
  63. package/dist/runtime/browser.d.ts +1 -0
  64. package/dist/runtime/browser.js +492 -49
  65. package/dist/runtime/cache.d.ts +1 -0
  66. package/dist/runtime/cache.js +169 -15
  67. package/dist/runtime/choice-wordlist.d.ts +9 -0
  68. package/dist/runtime/choice-wordlist.js +138 -0
  69. package/dist/runtime/choice.d.ts +13 -1
  70. package/dist/runtime/choice.js +490 -102
  71. package/dist/runtime/executor.d.ts +2 -2
  72. package/dist/runtime/executor.js +26 -2
  73. package/dist/runtime/http.d.ts +1 -0
  74. package/dist/runtime/http.js +515 -53
  75. package/dist/runtime/instrumentation.d.ts +2 -2
  76. package/dist/runtime/instrumentation.js +366 -8
  77. package/dist/runtime/native-network-errors.d.ts +33 -0
  78. package/dist/runtime/native-network-errors.js +69 -0
  79. package/dist/runtime/native-network.d.ts +96 -0
  80. package/dist/runtime/native-network.js +1232 -0
  81. package/dist/runtime/ocr.d.ts +29 -0
  82. package/dist/runtime/ocr.js +440 -0
  83. package/dist/runtime/proxy-errors.js +6 -2
  84. package/dist/runtime/proxy-nodemaven.d.ts +56 -0
  85. package/dist/runtime/proxy-nodemaven.js +146 -0
  86. package/dist/runtime/proxy-telemetry.d.ts +80 -1
  87. package/dist/runtime/proxy-telemetry.js +154 -47
  88. package/dist/runtime/redirects.d.ts +29 -0
  89. package/dist/runtime/redirects.js +36 -0
  90. package/dist/runtime/redis.d.ts +1 -1
  91. package/dist/runtime/redis.js +4 -2
  92. package/dist/runtime/request-options.d.ts +68 -1
  93. package/dist/runtime/request-options.js +548 -0
  94. package/dist/runtime/resolver-config.d.ts +6 -0
  95. package/dist/runtime/resolver-config.js +6 -0
  96. package/dist/runtime/resolver-public.d.ts +1 -0
  97. package/dist/runtime/resolver-public.js +1 -0
  98. package/dist/runtime/resolver-shared.d.ts +3 -0
  99. package/dist/runtime/resolver-shared.js +12 -0
  100. package/dist/runtime/resolver-vendors/bindings.d.ts +48 -0
  101. package/dist/runtime/resolver-vendors/bindings.js +40 -0
  102. package/dist/runtime/resolver-vendors/browser.d.ts +22 -0
  103. package/dist/runtime/resolver-vendors/browser.js +377 -0
  104. package/dist/runtime/resolver-vendors/capsolver.d.ts +22 -0
  105. package/dist/runtime/resolver-vendors/capsolver.js +526 -0
  106. package/dist/runtime/resolver-vendors/hosts.d.ts +2 -0
  107. package/dist/runtime/resolver-vendors/hosts.js +33 -0
  108. package/dist/runtime/resolver-vendors/twocaptcha.d.ts +24 -0
  109. package/dist/runtime/resolver-vendors/twocaptcha.js +407 -0
  110. package/dist/runtime/resolver-vendors/types.d.ts +94 -0
  111. package/dist/runtime/resolver-vendors/types.js +96 -0
  112. package/dist/runtime/resolver.d.ts +60 -0
  113. package/dist/runtime/resolver.js +737 -0
  114. package/dist/runtime/secrets.d.ts +27 -0
  115. package/dist/runtime/secrets.js +51 -0
  116. package/dist/runtime/state.d.ts +3 -0
  117. package/dist/runtime/state.js +277 -71
  118. package/dist/runtime/stealth-cookies.d.ts +20 -0
  119. package/dist/runtime/stealth-cookies.js +111 -0
  120. package/dist/runtime/stealth.d.ts +28 -3
  121. package/dist/runtime/stealth.js +519 -255
  122. package/dist/runtime/stt.js +1 -12
  123. package/dist/runtime/timeout.d.ts +5 -0
  124. package/dist/runtime/timeout.js +12 -0
  125. package/dist/runtime/trace-config.d.ts +12 -0
  126. package/dist/runtime/trace-config.js +61 -0
  127. package/dist/serve.d.ts +1 -1
  128. package/dist/serve.js +1 -1
  129. package/dist/server/index.d.ts +5 -3
  130. package/dist/server/index.js +3 -3
  131. package/dist/server/self-test-input-tokens.d.ts +2 -1
  132. package/dist/server/self-test-input-tokens.js +18 -14
  133. package/dist/server/self-test.d.ts +114 -0
  134. package/dist/server/self-test.js +784 -148
  135. package/dist/server/serve-implementation.d.ts +213 -0
  136. package/dist/server/serve-implementation.js +2173 -0
  137. package/dist/server/serve.d.ts +1 -70
  138. package/dist/server/serve.js +1 -1130
  139. package/dist/server/trace-output.d.ts +4 -0
  140. package/dist/server/trace-output.js +20 -0
  141. package/dist/server/types.d.ts +30 -5
  142. package/dist/server/types.js +13 -1
  143. package/dist/stateful/errors.d.ts +19 -0
  144. package/dist/stateful/errors.js +24 -0
  145. package/dist/stateful/http-provider-event-emitter.d.ts +40 -0
  146. package/dist/stateful/http-provider-event-emitter.js +237 -0
  147. package/dist/stateful/http-session-owner-registry.d.ts +44 -0
  148. package/dist/stateful/http-session-owner-registry.js +210 -0
  149. package/dist/stateful/index.d.ts +18 -0
  150. package/dist/stateful/index.js +18 -0
  151. package/dist/stateful/provider-event-delivery-failures.d.ts +32 -0
  152. package/dist/stateful/provider-event-delivery-failures.js +43 -0
  153. package/dist/stateful/provider-event-pipeline-metrics.d.ts +46 -0
  154. package/dist/stateful/provider-event-pipeline-metrics.js +48 -0
  155. package/dist/stateful/provider-event-pipeline.d.ts +50 -0
  156. package/dist/stateful/provider-event-pipeline.js +1 -0
  157. package/dist/stateful/provider-events.d.ts +101 -0
  158. package/dist/stateful/provider-events.js +289 -0
  159. package/dist/stateful/session-key.d.ts +15 -0
  160. package/dist/stateful/session-key.js +86 -0
  161. package/dist/stateful/stateful-provider-adapter-context.d.ts +5 -0
  162. package/dist/stateful/stateful-provider-adapter-context.js +42 -0
  163. package/dist/stateful/stateful-provider-adapter-metrics.d.ts +15 -0
  164. package/dist/stateful/stateful-provider-adapter-metrics.js +21 -0
  165. package/dist/stateful/stateful-provider-adapter.d.ts +98 -0
  166. package/dist/stateful/stateful-provider-adapter.js +287 -0
  167. package/dist/stateful/stateful-provider-observability.d.ts +62 -0
  168. package/dist/stateful/stateful-provider-observability.js +161 -0
  169. package/dist/stateful/stateful-provider-owner-forwarder.d.ts +41 -0
  170. package/dist/stateful/stateful-provider-owner-forwarder.js +215 -0
  171. package/dist/stateful/stateful-provider-runtime-context.d.ts +32 -0
  172. package/dist/stateful/stateful-provider-runtime-context.js +60 -0
  173. package/dist/stateful/stateful-provider-runtime-executor.d.ts +34 -0
  174. package/dist/stateful/stateful-provider-runtime-executor.js +52 -0
  175. package/dist/stateful/stateful-provider-session-routing.d.ts +67 -0
  176. package/dist/stateful/stateful-provider-session-routing.js +345 -0
  177. package/dist/stateful/stateful-provider-session-runtime.d.ts +98 -0
  178. package/dist/stateful/stateful-provider-session-runtime.js +245 -0
  179. package/dist/stateful-signing.d.ts +18 -0
  180. package/dist/stateful-signing.js +27 -0
  181. package/dist/stealth/profiles.js +16 -7
  182. package/dist/stream-evidence.d.ts +74 -0
  183. package/dist/stream-evidence.js +785 -0
  184. package/dist/stream.js +7 -1
  185. package/dist/testing/index.d.ts +2 -1
  186. package/dist/testing/index.js +2 -1
  187. package/dist/testing/run.d.ts +32 -2
  188. package/dist/testing/run.js +489 -21
  189. package/dist/trace-sanitization.d.ts +5 -0
  190. package/dist/trace-sanitization.js +45 -0
  191. package/dist/types.d.ts +545 -23
  192. package/dist/types.js +1 -0
  193. package/package.json +44 -5
  194. package/src/auth-turn/index.ts +1 -1
  195. package/src/auth.ts +118 -0
  196. package/src/ceremonies/index.ts +189 -46
  197. package/src/cli/commands.ts +10 -0
  198. package/src/cli/create.ts +42 -35
  199. package/src/cli/prompt-assets.ts +865 -0
  200. package/src/cli/templates/provider/AGENTS.md.tpl +17 -8
  201. package/src/cli/templates/provider/Dockerfile.tpl +1 -1
  202. package/src/cli/templates/provider/README.md.tpl +4 -4
  203. package/src/cli/templates/provider/index.ts.tpl +6 -3
  204. package/src/cli/templates/provider/operations/ping.ts.tpl +2 -1
  205. package/src/config/loader.ts +665 -163
  206. package/src/contract-serialization.ts +5 -7
  207. package/src/contract-types.ts +1 -0
  208. package/src/contract.ts +2 -0
  209. package/src/declaration-validation.ts +266 -0
  210. package/src/define.ts +970 -87
  211. package/src/error-resolution.ts +127 -0
  212. package/src/errors.ts +52 -0
  213. package/src/fixture-sanitization.ts +248 -0
  214. package/src/health-scenario.ts +875 -0
  215. package/src/index.ts +204 -8
  216. package/src/lint.ts +408 -4
  217. package/src/native-address.ts +340 -0
  218. package/src/native-egress-policy.ts +358 -0
  219. package/src/observability.ts +51 -1
  220. package/src/provider.ts +133 -0
  221. package/src/runtime/auth-flow.ts +12 -0
  222. package/src/runtime/browser.ts +661 -63
  223. package/src/runtime/cache.ts +189 -14
  224. package/src/runtime/choice-wordlist.ts +145 -0
  225. package/src/runtime/choice.ts +631 -120
  226. package/src/runtime/executor.ts +40 -7
  227. package/src/runtime/http.ts +641 -61
  228. package/src/runtime/instrumentation.ts +520 -15
  229. package/src/runtime/native-network-errors.ts +99 -0
  230. package/src/runtime/native-network.ts +1605 -0
  231. package/src/runtime/ocr.ts +523 -0
  232. package/src/runtime/proxy-errors.ts +12 -4
  233. package/src/runtime/proxy-nodemaven.ts +221 -0
  234. package/src/runtime/proxy-telemetry.ts +244 -75
  235. package/src/runtime/redirects.ts +66 -0
  236. package/src/runtime/redis.ts +7 -2
  237. package/src/runtime/request-options.ts +680 -1
  238. package/src/runtime/resolver-config.ts +6 -0
  239. package/src/runtime/resolver-public.ts +20 -0
  240. package/src/runtime/resolver-shared.ts +17 -0
  241. package/src/runtime/resolver-vendors/bindings.ts +56 -0
  242. package/src/runtime/resolver-vendors/browser.ts +533 -0
  243. package/src/runtime/resolver-vendors/capsolver.ts +700 -0
  244. package/src/runtime/resolver-vendors/hosts.ts +38 -0
  245. package/src/runtime/resolver-vendors/twocaptcha.ts +539 -0
  246. package/src/runtime/resolver-vendors/types.ts +212 -0
  247. package/src/runtime/resolver.ts +1103 -0
  248. package/src/runtime/secrets.ts +64 -0
  249. package/src/runtime/state.ts +394 -77
  250. package/src/runtime/stealth-cookies.ts +132 -0
  251. package/src/runtime/stealth.ts +675 -289
  252. package/src/runtime/stt.ts +1 -19
  253. package/src/runtime/timeout.ts +18 -0
  254. package/src/runtime/trace-config.ts +77 -0
  255. package/src/serve.ts +6 -1
  256. package/src/server/index.ts +37 -2
  257. package/src/server/self-test-input-tokens.ts +29 -14
  258. package/src/server/self-test.ts +1025 -175
  259. package/src/server/serve-implementation.ts +3250 -0
  260. package/src/server/serve.ts +1 -1626
  261. package/src/server/trace-output.ts +32 -0
  262. package/src/server/types.ts +13 -1
  263. package/src/stateful/README.md +146 -0
  264. package/src/stateful/errors.ts +35 -0
  265. package/src/stateful/http-provider-event-emitter.ts +314 -0
  266. package/src/stateful/http-session-owner-registry.ts +306 -0
  267. package/src/stateful/index.ts +18 -0
  268. package/src/stateful/provider-event-delivery-failures.ts +80 -0
  269. package/src/stateful/provider-event-pipeline-metrics.ts +95 -0
  270. package/src/stateful/provider-event-pipeline.ts +61 -0
  271. package/src/stateful/provider-events.ts +462 -0
  272. package/src/stateful/session-key.ts +111 -0
  273. package/src/stateful/stateful-provider-adapter-context.ts +59 -0
  274. package/src/stateful/stateful-provider-adapter-metrics.ts +48 -0
  275. package/src/stateful/stateful-provider-adapter.ts +562 -0
  276. package/src/stateful/stateful-provider-observability.ts +261 -0
  277. package/src/stateful/stateful-provider-owner-forwarder.ts +287 -0
  278. package/src/stateful/stateful-provider-runtime-context.ts +92 -0
  279. package/src/stateful/stateful-provider-runtime-executor.ts +96 -0
  280. package/src/stateful/stateful-provider-session-routing.ts +546 -0
  281. package/src/stateful/stateful-provider-session-runtime.ts +403 -0
  282. package/src/stateful-signing.ts +46 -0
  283. package/src/stealth/profiles.ts +17 -7
  284. package/src/stream-evidence.ts +988 -0
  285. package/src/stream.ts +8 -1
  286. package/src/testing/index.ts +10 -1
  287. package/src/testing/run.ts +658 -15
  288. package/src/trace-sanitization.ts +63 -0
  289. package/src/types.ts +660 -38
  290. package/dist/cli/templates/provider/CLAUDE.md.tpl +0 -1
  291. package/src/cli/templates/provider/CLAUDE.md.tpl +0 -1
  292. /package/dist/cli/templates/provider/{skills → .agents/skills}/fixtures-and-recording/SKILL.md.tpl +0 -0
  293. /package/dist/cli/templates/provider/{skills → .agents/skills}/health-checks-and-fail-closed/SKILL.md.tpl +0 -0
  294. /package/dist/cli/templates/provider/{skills → .agents/skills}/normalization-standards/SKILL.md.tpl +0 -0
  295. /package/dist/cli/templates/provider/{skills → .agents/skills}/pagination-and-counts/SKILL.md.tpl +0 -0
  296. /package/dist/cli/templates/provider/{skills → .agents/skills}/upstream-contract-verification/SKILL.md.tpl +0 -0
  297. /package/dist/cli/templates/provider/{skills → .agents/skills}/upstream-notes/README.md.tpl +0 -0
  298. /package/src/cli/templates/provider/{skills → .agents/skills}/fixtures-and-recording/SKILL.md.tpl +0 -0
  299. /package/src/cli/templates/provider/{skills → .agents/skills}/health-checks-and-fail-closed/SKILL.md.tpl +0 -0
  300. /package/src/cli/templates/provider/{skills → .agents/skills}/normalization-standards/SKILL.md.tpl +0 -0
  301. /package/src/cli/templates/provider/{skills → .agents/skills}/pagination-and-counts/SKILL.md.tpl +0 -0
  302. /package/src/cli/templates/provider/{skills → .agents/skills}/upstream-contract-verification/SKILL.md.tpl +0 -0
  303. /package/src/cli/templates/provider/{skills → .agents/skills}/upstream-notes/README.md.tpl +0 -0
@@ -14,6 +14,7 @@ import type {
14
14
  VerificationCodeCandidateSource,
15
15
  VerificationCodeExtractionResult,
16
16
  } from "../types.js";
17
+ import { createTimeoutController, isTimeoutLikeError } from "./timeout.js";
17
18
 
18
19
  export const APIFUSE__STT__BACKEND_ENV = "APIFUSE__STT__BACKEND";
19
20
  export const APIFUSE__STT__MODEL_ENV = "APIFUSE__STT__MODEL";
@@ -169,15 +170,6 @@ function normalizeCloudflareLanguage(language: Bcp47Locale | undefined): string
169
170
  return language?.split("-")[0]?.toLowerCase();
170
171
  }
171
172
 
172
- function isTimeoutLikeError(error: unknown): error is Error {
173
- return (
174
- error instanceof Error &&
175
- (error.name === "AbortError" ||
176
- error.name === "TimeoutError" ||
177
- /\b(timed out|timeout|deadline exceeded)\b/i.test(error.message))
178
- );
179
- }
180
-
181
173
  function toSttTransportError(error: unknown): TransportError {
182
174
  if (error instanceof TransportError) return error;
183
175
  if (isTimeoutLikeError(error)) {
@@ -194,16 +186,6 @@ function toSttTransportError(error: unknown): TransportError {
194
186
  });
195
187
  }
196
188
 
197
- function createTimeoutController(signalTimeoutMs: number): {
198
- controller: AbortController;
199
- clear: () => void;
200
- } {
201
- const controller = new AbortController();
202
- const timeout = setTimeout(() => controller.abort(), signalTimeoutMs);
203
- timeout.unref?.();
204
- return { controller, clear: () => clearTimeout(timeout) };
205
- }
206
-
207
189
  function toCloudflareInput(request: SttTranscribeRequest): Record<string, unknown> {
208
190
  const prompt = resolveSttPrompt(request);
209
191
  const input: Record<string, unknown> = {
@@ -0,0 +1,18 @@
1
+ export function isTimeoutLikeError(error: unknown): error is Error {
2
+ return (
3
+ error instanceof Error &&
4
+ (error.name === "AbortError" ||
5
+ error.name === "TimeoutError" ||
6
+ /\b(timed out|timeout|deadline exceeded)\b/i.test(error.message))
7
+ );
8
+ }
9
+
10
+ export function createTimeoutController(signalTimeoutMs: number): {
11
+ controller: AbortController;
12
+ clear: () => void;
13
+ } {
14
+ const controller = new AbortController();
15
+ const timeout = setTimeout(() => controller.abort(), signalTimeoutMs);
16
+ timeout.unref?.();
17
+ return { controller, clear: () => clearTimeout(timeout) };
18
+ }
@@ -0,0 +1,77 @@
1
+ import type { TraceConfig } from "../types.js";
2
+
3
+ /** SDK-owned environment variable names for server trace output. */
4
+ export const APIFUSE__TRACE__ENABLED = "APIFUSE__TRACE__ENABLED";
5
+ export const APIFUSE__TRACE__EXPORTER = "APIFUSE__TRACE__EXPORTER";
6
+
7
+ type EnvLike = Record<string, string | undefined>;
8
+
9
+ const TRACE_EXPORTER_LOOKUP: Record<Exclude<NonNullable<TraceConfig["exporter"]>, "otlp">, true> = {
10
+ console: true,
11
+ json: true,
12
+ none: true,
13
+ };
14
+ const TRACE_EXPORTERS = new Set(Object.keys(TRACE_EXPORTER_LOOKUP));
15
+
16
+ const emittedWarnings = new Set<string>();
17
+
18
+ function warnOnce(key: string, message: string): void {
19
+ if (emittedWarnings.has(key)) return;
20
+ emittedWarnings.add(key);
21
+ console.warn(message);
22
+ }
23
+
24
+ function parseEnabled(raw: string | undefined): boolean | undefined {
25
+ if (raw === undefined) return undefined;
26
+ switch (raw.trim().toLowerCase()) {
27
+ case "1":
28
+ case "true":
29
+ case "yes":
30
+ case "on":
31
+ return true;
32
+ case "0":
33
+ case "false":
34
+ case "no":
35
+ case "off":
36
+ return false;
37
+ default:
38
+ warnOnce(
39
+ APIFUSE__TRACE__ENABLED,
40
+ "[apifuse] Invalid APIFUSE__TRACE__ENABLED; falling back to disabled tracing.",
41
+ );
42
+ return false;
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Resolve server trace output configuration from SDK-owned environment
48
+ * variables. Invalid exporter values fail closed so a provider cannot crash at
49
+ * startup because of an observability setting.
50
+ */
51
+ export function resolveTraceConfigFromEnv(env: EnvLike = process.env): TraceConfig | undefined {
52
+ const enabledRaw = env[APIFUSE__TRACE__ENABLED];
53
+ const exporterRaw = env[APIFUSE__TRACE__EXPORTER];
54
+
55
+ if (enabledRaw === undefined && exporterRaw === undefined) {
56
+ return undefined;
57
+ }
58
+
59
+ const enabled = parseEnabled(enabledRaw);
60
+ const normalizedExporter = exporterRaw?.trim().toLowerCase();
61
+ const exporter = TRACE_EXPORTERS.has(normalizedExporter as NonNullable<TraceConfig["exporter"]>)
62
+ ? (normalizedExporter as NonNullable<TraceConfig["exporter"]>)
63
+ : exporterRaw === undefined
64
+ ? undefined
65
+ : "none";
66
+ if (exporterRaw !== undefined && exporter === "none" && normalizedExporter !== "none") {
67
+ warnOnce(
68
+ APIFUSE__TRACE__EXPORTER,
69
+ `[apifuse] Invalid APIFUSE__TRACE__EXPORTER value "${normalizedExporter ?? exporterRaw}" (OTLP is unsupported for server output); supported exporters are "console", "json", and "none"; falling back to exporter "none".`,
70
+ );
71
+ }
72
+
73
+ return {
74
+ ...(enabled !== undefined ? { enabled } : {}),
75
+ ...(exporter !== undefined ? { exporter } : {}),
76
+ };
77
+ }
package/src/serve.ts CHANGED
@@ -1 +1,6 @@
1
- export { createServerApp, type ServeOptions, serve } from "./server/serve.js";
1
+ export {
2
+ createServerApp,
3
+ createServerAppAsync,
4
+ type ServeOptions,
5
+ serve,
6
+ } from "./server/serve.js";
@@ -1,16 +1,48 @@
1
- export { createServerApp, type ServeOptions, serve } from "./serve.js";
1
+ export type {
2
+ ProxyCacheStatus,
3
+ ProxyProtocol,
4
+ ProxyUserAgentSource,
5
+ ProxyVendorName,
6
+ SmartproxyAllocatorBodyClass,
7
+ } from "../config/loader.js";
8
+ export type {
9
+ ProxyTelemetryLogPayload,
10
+ ProxyTelemetryResolvedPayload,
11
+ ProxyTelemetryUnresolvedPayload,
12
+ } from "../runtime/proxy-telemetry.js";
13
+ export {
14
+ createServerApp,
15
+ createServerAppAsync,
16
+ ERROR_OBSERVABILITY_HEADER,
17
+ type ErrorObservabilityDetails,
18
+ type ProviderServerCloseOptions,
19
+ type ProviderServerHandle,
20
+ type ProviderServerLogEvent,
21
+ type ProviderServerLogger,
22
+ type ProviderServerOperationExecutor,
23
+ type ProviderServerOperationExecutorInput,
24
+ type ProviderServerOptions,
25
+ type ProviderServerStatefulForwardEnvelope,
26
+ type ServeOptions,
27
+ serve,
28
+ } from "./serve.js";
2
29
  export {
3
30
  computeSelfTestPlanDigest,
4
31
  createSelfTestApp,
32
+ createSelfTestAuthFlowInvoke,
5
33
  createSelfTestInvoke,
6
34
  DEFAULT_SELF_TEST_REQUEST_BUDGET_MS,
7
35
  isSelfTestReadOnlyOperation,
8
36
  PROVIDER_RUNTIME_SELF_TEST_REQUEST_BUDGET_MS_ENV,
9
37
  resolveSelfTestPort,
38
+ SELF_TEST_AUTH_FLOW_MULTI_TURN_SKIP_REASON,
39
+ SELF_TEST_AUTH_FLOW_REJECTED_SKIP_REASON,
10
40
  SELF_TEST_HEALTHZ_PATH,
11
41
  SELF_TEST_PATH,
12
42
  SELF_TEST_SCHEMA_VERSION,
13
43
  type SelfTestAppOptions,
44
+ type SelfTestAuthFlowInvoke,
45
+ type SelfTestAuthFlowRoute,
14
46
  type SelfTestCaseResult,
15
47
  type SelfTestCaseStatus,
16
48
  type SelfTestOperationInvoke,
@@ -18,7 +50,10 @@ export {
18
50
  SelfTestRequestSchema,
19
51
  type SelfTestResponse,
20
52
  } from "./self-test.js";
21
- export { resolveHealthCheckInputDateTokens } from "./self-test-input-tokens.js";
53
+ export {
54
+ type InputDateTokenCalendar,
55
+ resolveHealthCheckInputDateTokens,
56
+ } from "./self-test-input-tokens.js";
22
57
  export {
23
58
  collectSelfTestSensitiveValues,
24
59
  redactSelfTestText,
@@ -1,46 +1,61 @@
1
1
  /**
2
- * Relative-KST date token resolution for health-check case inputs, ported from
3
- * the monorepo health-monitor (`apps/health-monitor/src/lib/health-check-input.ts`)
4
- * so provider self-tests resolve durable probe inputs identically.
2
+ * Relative date-token resolution for health-check case inputs and fixture
3
+ * requests. The calendar defaults to KST; callers that need UTC must opt in
4
+ * explicitly so UTC and KST do not silently disagree from 15:00–23:59 UTC.
5
5
  *
6
- * Supported token: `+<days>d` or `+<days>d:YYYYMMDD` (1..365 days ahead, KST).
6
+ * Supported token: `+<days>d` or `+<days>d:YYYYMMDD` (1..365 days ahead).
7
7
  */
8
- const RELATIVE_KST_DATE_TOKEN = /^\+(\d{1,3})d(?::(YYYYMMDD))?$/i;
8
+ const RELATIVE_DATE_TOKEN = /^\+(\d{1,3})d(?::(YYYYMMDD))?$/i;
9
9
 
10
- function dateFromKstDaysAhead(
10
+ export type InputDateTokenCalendar = "KST" | "UTC";
11
+
12
+ function dateFromDaysAhead(
11
13
  daysAhead: number,
12
14
  now = new Date(),
13
15
  format: "YYYY-MM-DD" | "YYYYMMDD" = "YYYY-MM-DD",
16
+ calendar: InputDateTokenCalendar = "KST",
14
17
  ): string {
15
- const kstNow = new Date(now.getTime() + 9 * 60 * 60 * 1000);
18
+ const calendarNow = new Date(now.getTime() + (calendar === "KST" ? 9 * 60 * 60 * 1000 : 0));
16
19
  const date = new Date(
17
- Date.UTC(kstNow.getUTCFullYear(), kstNow.getUTCMonth(), kstNow.getUTCDate() + daysAhead),
20
+ Date.UTC(
21
+ calendarNow.getUTCFullYear(),
22
+ calendarNow.getUTCMonth(),
23
+ calendarNow.getUTCDate() + daysAhead,
24
+ ),
18
25
  );
19
26
  const isoDate = date.toISOString().slice(0, 10);
20
27
  return format === "YYYYMMDD" ? isoDate.replace(/-/g, "") : isoDate;
21
28
  }
22
29
 
23
- export function resolveHealthCheckInputDateTokens(value: unknown, now = new Date()): unknown {
30
+ export function resolveHealthCheckInputDateTokens(
31
+ value: unknown,
32
+ now = new Date(),
33
+ calendar: InputDateTokenCalendar = "KST",
34
+ ): unknown {
24
35
  if (typeof value === "string") {
25
- const relative = value.match(RELATIVE_KST_DATE_TOKEN);
36
+ const relative = value.match(RELATIVE_DATE_TOKEN);
26
37
  if (!relative) return value;
27
38
  const daysAhead = Number(relative[1]);
28
39
  if (!Number.isInteger(daysAhead) || daysAhead < 1 || daysAhead > 365) {
29
40
  return value;
30
41
  }
31
42
  const format = relative[2]?.toUpperCase() === "YYYYMMDD" ? "YYYYMMDD" : "YYYY-MM-DD";
32
- return dateFromKstDaysAhead(daysAhead, now, format);
43
+ return dateFromDaysAhead(daysAhead, now, format, calendar);
33
44
  }
34
45
  if (Array.isArray(value)) {
35
- return value.map((entry) => resolveHealthCheckInputDateTokens(entry, now));
46
+ const resolved = value.map((entry) => resolveHealthCheckInputDateTokens(entry, now, calendar));
47
+ return resolved.some((entry, index) => entry !== value[index]) ? resolved : value;
36
48
  }
37
49
  if (value && typeof value === "object") {
38
- return Object.fromEntries(
50
+ const resolved = Object.fromEntries(
39
51
  Object.entries(value).map(([key, entry]) => [
40
52
  key,
41
- resolveHealthCheckInputDateTokens(entry, now),
53
+ resolveHealthCheckInputDateTokens(entry, now, calendar),
42
54
  ]),
43
55
  );
56
+ return Object.entries(resolved).some(([key, entry]) => entry !== Reflect.get(value, key))
57
+ ? resolved
58
+ : value;
44
59
  }
45
60
  return value;
46
61
  }