@apifuse/provider-sdk 2.2.0-beta.3 → 2.2.0-beta.30

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 (342) hide show
  1. package/AUTHORING.md +493 -5
  2. package/CHANGELOG.md +127 -1
  3. package/README.md +52 -6
  4. package/SUBMISSION.md +1 -1
  5. package/bin/apifuse-check.ts +106 -62
  6. package/bin/apifuse-create.ts +1 -1
  7. package/bin/apifuse-dev.ts +63 -55
  8. package/bin/apifuse-pack-check.ts +22 -2
  9. package/bin/apifuse-pack-smoke.ts +78 -82
  10. package/bin/apifuse-pack-types.ts +583 -0
  11. package/bin/apifuse-perf.ts +59 -140
  12. package/bin/apifuse-record.ts +698 -113
  13. package/bin/apifuse-submit-check.ts +517 -44
  14. package/bin/apifuse-sync-assets.ts +117 -0
  15. package/bin/apifuse.ts +1 -1
  16. package/bin/submit-check-delimited-text.ts +50 -0
  17. package/bin/submit-check-xml.ts +1 -1
  18. package/dist/auth-turn/index.d.ts +4 -4
  19. package/dist/auth-turn/index.js +1 -1
  20. package/dist/auth.d.ts +16 -2
  21. package/dist/auth.js +76 -18
  22. package/dist/ceremonies/index.d.ts +9 -1
  23. package/dist/ceremonies/index.js +117 -29
  24. package/dist/cli/commands.d.ts +1 -1
  25. package/dist/cli/commands.js +8 -0
  26. package/dist/cli/create.d.ts +3 -0
  27. package/dist/cli/create.js +34 -35
  28. package/dist/cli/prompt-assets.d.ts +80 -0
  29. package/dist/cli/prompt-assets.js +743 -0
  30. package/dist/cli/templates/provider/AGENTS.md.tpl +17 -8
  31. package/dist/cli/templates/provider/README.md.tpl +4 -4
  32. package/dist/config/loader.d.ts +176 -17
  33. package/dist/config/loader.js +434 -161
  34. package/dist/contract-serialization.d.ts +2 -2
  35. package/dist/contract-serialization.js +7 -14
  36. package/dist/contract-types.d.ts +3 -2
  37. package/dist/contract.d.ts +3 -3
  38. package/dist/contract.js +6 -6
  39. package/dist/declaration-validation.d.ts +23 -0
  40. package/dist/declaration-validation.js +159 -0
  41. package/dist/define.d.ts +13 -1
  42. package/dist/define.js +391 -122
  43. package/dist/dev.d.ts +1 -1
  44. package/dist/dev.js +1 -1
  45. package/dist/error-resolution.d.ts +4 -0
  46. package/dist/error-resolution.js +122 -0
  47. package/dist/errors.d.ts +19 -1
  48. package/dist/errors.js +41 -3
  49. package/dist/fixture-sanitization.d.ts +26 -0
  50. package/dist/fixture-sanitization.js +216 -0
  51. package/dist/i18n/catalog.d.ts +2 -2
  52. package/dist/i18n/catalog.js +4 -10
  53. package/dist/i18n/index.d.ts +2 -2
  54. package/dist/i18n/index.js +2 -2
  55. package/dist/i18n/keys.d.ts +2 -2
  56. package/dist/index.d.ts +50 -42
  57. package/dist/index.js +41 -37
  58. package/dist/lint.d.ts +6 -1
  59. package/dist/lint.js +370 -18
  60. package/dist/native-address.d.ts +43 -0
  61. package/dist/native-address.js +281 -0
  62. package/dist/native-egress-policy.d.ts +31 -0
  63. package/dist/native-egress-policy.js +288 -0
  64. package/dist/observability.d.ts +5 -2
  65. package/dist/observability.js +48 -1
  66. package/dist/provider.d.ts +13 -11
  67. package/dist/provider.js +10 -9
  68. package/dist/public-schema-field-lint.d.ts +1 -1
  69. package/dist/recipes/gov-api.js +1 -1
  70. package/dist/runtime/auth-flow.d.ts +3 -1
  71. package/dist/runtime/auth-flow.js +8 -3
  72. package/dist/runtime/browser.d.ts +1 -1
  73. package/dist/runtime/browser.js +138 -40
  74. package/dist/runtime/cache.d.ts +2 -1
  75. package/dist/runtime/cache.js +173 -23
  76. package/dist/runtime/choice-wordlist.d.ts +9 -0
  77. package/dist/runtime/choice-wordlist.js +138 -0
  78. package/dist/runtime/choice.d.ts +13 -1
  79. package/dist/runtime/choice.js +514 -124
  80. package/dist/runtime/credential.d.ts +1 -1
  81. package/dist/runtime/credential.js +1 -1
  82. package/dist/runtime/env.d.ts +1 -1
  83. package/dist/runtime/executor.d.ts +1 -1
  84. package/dist/runtime/executor.js +25 -3
  85. package/dist/runtime/http.d.ts +3 -2
  86. package/dist/runtime/http.js +517 -55
  87. package/dist/runtime/insights.d.ts +1 -1
  88. package/dist/runtime/insights.js +6 -13
  89. package/dist/runtime/instrumentation.d.ts +2 -2
  90. package/dist/runtime/instrumentation.js +371 -23
  91. package/dist/runtime/keyring.js +1 -1
  92. package/dist/runtime/namespace.js +1 -1
  93. package/dist/runtime/native-network-errors.d.ts +33 -0
  94. package/dist/runtime/native-network-errors.js +69 -0
  95. package/dist/runtime/native-network.d.ts +96 -0
  96. package/dist/runtime/native-network.js +1232 -0
  97. package/dist/runtime/ocr.d.ts +29 -0
  98. package/dist/runtime/ocr.js +440 -0
  99. package/dist/runtime/otlp.d.ts +1 -1
  100. package/dist/runtime/perf.d.ts +1 -1
  101. package/dist/runtime/provider.d.ts +1 -1
  102. package/dist/runtime/provider.js +1 -2
  103. package/dist/runtime/proxy-errors.d.ts +1 -1
  104. package/dist/runtime/proxy-errors.js +9 -7
  105. package/dist/runtime/proxy-nodemaven.d.ts +56 -0
  106. package/dist/runtime/proxy-nodemaven.js +146 -0
  107. package/dist/runtime/proxy-retry-policy.d.ts +2 -2
  108. package/dist/runtime/proxy-retry-policy.js +2 -2
  109. package/dist/runtime/proxy-telemetry.d.ts +2 -1
  110. package/dist/runtime/proxy-telemetry.js +58 -52
  111. package/dist/runtime/redirects.d.ts +29 -0
  112. package/dist/runtime/redirects.js +36 -0
  113. package/dist/runtime/redis.d.ts +1 -1
  114. package/dist/runtime/redis.js +5 -5
  115. package/dist/runtime/request-options.d.ts +68 -1
  116. package/dist/runtime/request-options.js +548 -0
  117. package/dist/runtime/resolver-config.d.ts +6 -0
  118. package/dist/runtime/resolver-config.js +6 -0
  119. package/dist/runtime/resolver-public.d.ts +1 -0
  120. package/dist/runtime/resolver-public.js +1 -0
  121. package/dist/runtime/resolver-shared.d.ts +3 -0
  122. package/dist/runtime/resolver-shared.js +12 -0
  123. package/dist/runtime/resolver-vendors/bindings.d.ts +48 -0
  124. package/dist/runtime/resolver-vendors/bindings.js +40 -0
  125. package/dist/runtime/resolver-vendors/browser.d.ts +20 -0
  126. package/dist/runtime/resolver-vendors/browser.js +282 -0
  127. package/dist/runtime/resolver-vendors/hosts.d.ts +2 -0
  128. package/dist/runtime/resolver-vendors/hosts.js +33 -0
  129. package/dist/runtime/resolver-vendors/twocaptcha.d.ts +24 -0
  130. package/dist/runtime/resolver-vendors/twocaptcha.js +368 -0
  131. package/dist/runtime/resolver-vendors/types.d.ts +83 -0
  132. package/dist/runtime/resolver-vendors/types.js +69 -0
  133. package/dist/runtime/resolver.d.ts +59 -0
  134. package/dist/runtime/resolver.js +705 -0
  135. package/dist/runtime/secrets.d.ts +27 -0
  136. package/dist/runtime/secrets.js +51 -0
  137. package/dist/runtime/state.d.ts +5 -2
  138. package/dist/runtime/state.js +280 -74
  139. package/dist/runtime/stealth-cookies.d.ts +20 -0
  140. package/dist/runtime/stealth-cookies.js +111 -0
  141. package/dist/runtime/stealth.d.ts +30 -5
  142. package/dist/runtime/stealth.js +523 -259
  143. package/dist/runtime/stt.d.ts +1 -1
  144. package/dist/runtime/stt.js +12 -27
  145. package/dist/runtime/timeout.d.ts +5 -0
  146. package/dist/runtime/timeout.js +12 -0
  147. package/dist/runtime/trace.d.ts +2 -2
  148. package/dist/runtime/trace.js +2 -4
  149. package/dist/runtime/waterfall.d.ts +1 -1
  150. package/dist/schema.d.ts +1 -1
  151. package/dist/schema.js +7 -15
  152. package/dist/serve.d.ts +1 -1
  153. package/dist/serve.js +1 -1
  154. package/dist/server/index.d.ts +7 -7
  155. package/dist/server/index.js +6 -6
  156. package/dist/server/self-test-input-tokens.d.ts +2 -1
  157. package/dist/server/self-test-input-tokens.js +18 -14
  158. package/dist/server/self-test-redaction.d.ts +1 -1
  159. package/dist/server/self-test-redaction.js +1 -1
  160. package/dist/server/self-test.d.ts +117 -3
  161. package/dist/server/self-test.js +787 -151
  162. package/dist/server/serve-implementation.d.ts +210 -0
  163. package/dist/server/serve-implementation.js +2077 -0
  164. package/dist/server/serve.d.ts +1 -70
  165. package/dist/server/serve.js +1 -1143
  166. package/dist/server/types.d.ts +34 -9
  167. package/dist/server/types.js +8 -1
  168. package/dist/stateful/errors.d.ts +19 -0
  169. package/dist/stateful/errors.js +24 -0
  170. package/dist/stateful/http-provider-event-emitter.d.ts +40 -0
  171. package/dist/stateful/http-provider-event-emitter.js +237 -0
  172. package/dist/stateful/http-session-owner-registry.d.ts +44 -0
  173. package/dist/stateful/http-session-owner-registry.js +210 -0
  174. package/dist/stateful/index.d.ts +18 -0
  175. package/dist/stateful/index.js +18 -0
  176. package/dist/stateful/provider-event-delivery-failures.d.ts +32 -0
  177. package/dist/stateful/provider-event-delivery-failures.js +43 -0
  178. package/dist/stateful/provider-event-pipeline-metrics.d.ts +46 -0
  179. package/dist/stateful/provider-event-pipeline-metrics.js +48 -0
  180. package/dist/stateful/provider-event-pipeline.d.ts +50 -0
  181. package/dist/stateful/provider-event-pipeline.js +1 -0
  182. package/dist/stateful/provider-events.d.ts +101 -0
  183. package/dist/stateful/provider-events.js +289 -0
  184. package/dist/stateful/session-key.d.ts +15 -0
  185. package/dist/stateful/session-key.js +86 -0
  186. package/dist/stateful/stateful-provider-adapter-context.d.ts +5 -0
  187. package/dist/stateful/stateful-provider-adapter-context.js +42 -0
  188. package/dist/stateful/stateful-provider-adapter-metrics.d.ts +15 -0
  189. package/dist/stateful/stateful-provider-adapter-metrics.js +21 -0
  190. package/dist/stateful/stateful-provider-adapter.d.ts +98 -0
  191. package/dist/stateful/stateful-provider-adapter.js +287 -0
  192. package/dist/stateful/stateful-provider-observability.d.ts +62 -0
  193. package/dist/stateful/stateful-provider-observability.js +161 -0
  194. package/dist/stateful/stateful-provider-owner-forwarder.d.ts +41 -0
  195. package/dist/stateful/stateful-provider-owner-forwarder.js +215 -0
  196. package/dist/stateful/stateful-provider-runtime-context.d.ts +32 -0
  197. package/dist/stateful/stateful-provider-runtime-context.js +60 -0
  198. package/dist/stateful/stateful-provider-runtime-executor.d.ts +34 -0
  199. package/dist/stateful/stateful-provider-runtime-executor.js +52 -0
  200. package/dist/stateful/stateful-provider-session-routing.d.ts +67 -0
  201. package/dist/stateful/stateful-provider-session-routing.js +345 -0
  202. package/dist/stateful/stateful-provider-session-runtime.d.ts +98 -0
  203. package/dist/stateful/stateful-provider-session-runtime.js +245 -0
  204. package/dist/stateful-signing.d.ts +18 -0
  205. package/dist/stateful-signing.js +27 -0
  206. package/dist/stealth/profiles.d.ts +1 -1
  207. package/dist/stealth/profiles.js +21 -21
  208. package/dist/stream-evidence.d.ts +74 -0
  209. package/dist/stream-evidence.js +785 -0
  210. package/dist/stream.d.ts +1 -1
  211. package/dist/stream.js +7 -1
  212. package/dist/testing/index.d.ts +3 -2
  213. package/dist/testing/index.js +3 -2
  214. package/dist/testing/run.d.ts +32 -2
  215. package/dist/testing/run.js +488 -28
  216. package/dist/types.d.ts +566 -19
  217. package/dist/types.js +1 -0
  218. package/dist/user-input.d.ts +30 -0
  219. package/dist/user-input.js +66 -0
  220. package/package.json +42 -7
  221. package/src/auth-turn/index.ts +2 -2
  222. package/src/auth.ts +146 -86
  223. package/src/ceremonies/index.ts +167 -92
  224. package/src/cli/commands.ts +10 -0
  225. package/src/cli/create.ts +42 -35
  226. package/src/cli/prompt-assets.ts +865 -0
  227. package/src/cli/templates/provider/AGENTS.md.tpl +17 -8
  228. package/src/cli/templates/provider/README.md.tpl +4 -4
  229. package/src/config/loader.ts +667 -289
  230. package/src/contract-serialization.ts +10 -18
  231. package/src/contract-types.ts +3 -2
  232. package/src/contract.ts +14 -28
  233. package/src/declaration-validation.ts +202 -0
  234. package/src/define.ts +631 -495
  235. package/src/dev.ts +4 -9
  236. package/src/error-resolution.ts +127 -0
  237. package/src/errors.ts +56 -11
  238. package/src/fixture-sanitization.ts +247 -0
  239. package/src/i18n/catalog.ts +10 -32
  240. package/src/i18n/index.ts +2 -2
  241. package/src/i18n/keys.ts +5 -11
  242. package/src/index.ts +157 -44
  243. package/src/lint.ts +488 -154
  244. package/src/native-address.ts +340 -0
  245. package/src/native-egress-policy.ts +358 -0
  246. package/src/observability.ts +51 -1
  247. package/src/provider.ts +65 -11
  248. package/src/public-schema-field-lint.ts +7 -33
  249. package/src/recipes/gov-api.ts +2 -5
  250. package/src/runtime/auth-flow.ts +13 -7
  251. package/src/runtime/browser.ts +252 -207
  252. package/src/runtime/cache.ts +209 -81
  253. package/src/runtime/choice-wordlist.ts +145 -0
  254. package/src/runtime/choice.ts +685 -216
  255. package/src/runtime/credential.ts +2 -2
  256. package/src/runtime/env.ts +1 -1
  257. package/src/runtime/executor.ts +37 -19
  258. package/src/runtime/http.ts +645 -65
  259. package/src/runtime/insights.ts +15 -53
  260. package/src/runtime/instrumentation.ts +530 -67
  261. package/src/runtime/keyring.ts +7 -19
  262. package/src/runtime/namespace.ts +2 -7
  263. package/src/runtime/native-network-errors.ts +99 -0
  264. package/src/runtime/native-network.ts +1605 -0
  265. package/src/runtime/ocr.ts +523 -0
  266. package/src/runtime/otlp.ts +12 -23
  267. package/src/runtime/perf.ts +1 -1
  268. package/src/runtime/provider.ts +4 -9
  269. package/src/runtime/proxy-errors.ts +29 -42
  270. package/src/runtime/proxy-nodemaven.ts +221 -0
  271. package/src/runtime/proxy-retry-policy.ts +3 -3
  272. package/src/runtime/proxy-telemetry.ts +84 -77
  273. package/src/runtime/redirects.ts +66 -0
  274. package/src/runtime/redis.ts +10 -13
  275. package/src/runtime/request-options.ts +679 -9
  276. package/src/runtime/resolver-config.ts +6 -0
  277. package/src/runtime/resolver-public.ts +18 -0
  278. package/src/runtime/resolver-shared.ts +17 -0
  279. package/src/runtime/resolver-vendors/bindings.ts +56 -0
  280. package/src/runtime/resolver-vendors/browser.ts +408 -0
  281. package/src/runtime/resolver-vendors/hosts.ts +38 -0
  282. package/src/runtime/resolver-vendors/twocaptcha.ts +500 -0
  283. package/src/runtime/resolver-vendors/types.ts +173 -0
  284. package/src/runtime/resolver.ts +1060 -0
  285. package/src/runtime/secrets.ts +64 -0
  286. package/src/runtime/state.ts +399 -161
  287. package/src/runtime/stealth-cookies.ts +132 -0
  288. package/src/runtime/stealth.ts +681 -295
  289. package/src/runtime/stt.ts +39 -113
  290. package/src/runtime/timeout.ts +18 -0
  291. package/src/runtime/trace.ts +14 -44
  292. package/src/runtime/waterfall.ts +5 -18
  293. package/src/schema.ts +23 -84
  294. package/src/serve.ts +6 -1
  295. package/src/server/index.ts +30 -7
  296. package/src/server/self-test-input-tokens.ts +29 -14
  297. package/src/server/self-test-redaction.ts +2 -2
  298. package/src/server/self-test.ts +1030 -180
  299. package/src/server/serve-implementation.ts +3060 -0
  300. package/src/server/serve.ts +1 -1781
  301. package/src/server/types.ts +12 -13
  302. package/src/stateful/README.md +146 -0
  303. package/src/stateful/errors.ts +35 -0
  304. package/src/stateful/http-provider-event-emitter.ts +314 -0
  305. package/src/stateful/http-session-owner-registry.ts +306 -0
  306. package/src/stateful/index.ts +18 -0
  307. package/src/stateful/provider-event-delivery-failures.ts +80 -0
  308. package/src/stateful/provider-event-pipeline-metrics.ts +95 -0
  309. package/src/stateful/provider-event-pipeline.ts +61 -0
  310. package/src/stateful/provider-events.ts +462 -0
  311. package/src/stateful/session-key.ts +111 -0
  312. package/src/stateful/stateful-provider-adapter-context.ts +59 -0
  313. package/src/stateful/stateful-provider-adapter-metrics.ts +48 -0
  314. package/src/stateful/stateful-provider-adapter.ts +562 -0
  315. package/src/stateful/stateful-provider-observability.ts +261 -0
  316. package/src/stateful/stateful-provider-owner-forwarder.ts +287 -0
  317. package/src/stateful/stateful-provider-runtime-context.ts +92 -0
  318. package/src/stateful/stateful-provider-runtime-executor.ts +96 -0
  319. package/src/stateful/stateful-provider-session-routing.ts +546 -0
  320. package/src/stateful/stateful-provider-session-runtime.ts +403 -0
  321. package/src/stateful-signing.ts +46 -0
  322. package/src/stealth/profiles.ts +27 -33
  323. package/src/stream-evidence.ts +988 -0
  324. package/src/stream.ts +16 -20
  325. package/src/testing/index.ts +11 -2
  326. package/src/testing/run.ts +668 -74
  327. package/src/types.ts +665 -35
  328. package/src/user-input.ts +118 -0
  329. package/dist/cli/templates/provider/CLAUDE.md.tpl +0 -1
  330. package/src/cli/templates/provider/CLAUDE.md.tpl +0 -1
  331. /package/dist/cli/templates/provider/{skills → .agents/skills}/fixtures-and-recording/SKILL.md.tpl +0 -0
  332. /package/dist/cli/templates/provider/{skills → .agents/skills}/health-checks-and-fail-closed/SKILL.md.tpl +0 -0
  333. /package/dist/cli/templates/provider/{skills → .agents/skills}/normalization-standards/SKILL.md.tpl +0 -0
  334. /package/dist/cli/templates/provider/{skills → .agents/skills}/pagination-and-counts/SKILL.md.tpl +0 -0
  335. /package/dist/cli/templates/provider/{skills → .agents/skills}/upstream-contract-verification/SKILL.md.tpl +0 -0
  336. /package/dist/cli/templates/provider/{skills → .agents/skills}/upstream-notes/README.md.tpl +0 -0
  337. /package/src/cli/templates/provider/{skills → .agents/skills}/fixtures-and-recording/SKILL.md.tpl +0 -0
  338. /package/src/cli/templates/provider/{skills → .agents/skills}/health-checks-and-fail-closed/SKILL.md.tpl +0 -0
  339. /package/src/cli/templates/provider/{skills → .agents/skills}/normalization-standards/SKILL.md.tpl +0 -0
  340. /package/src/cli/templates/provider/{skills → .agents/skills}/pagination-and-counts/SKILL.md.tpl +0 -0
  341. /package/src/cli/templates/provider/{skills → .agents/skills}/upstream-contract-verification/SKILL.md.tpl +0 -0
  342. /package/src/cli/templates/provider/{skills → .agents/skills}/upstream-notes/README.md.tpl +0 -0
package/src/schema.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { type ZodString, type ZodType, z } from "zod";
2
2
 
3
- import { ValidationError } from "./errors";
4
- import { providerLocaleKey } from "./i18n/keys";
3
+ import { ValidationError } from "./errors.js";
4
+ import { providerLocaleKey } from "./i18n/keys.js";
5
5
  import type {
6
6
  InferSchemaOutput,
7
7
  ProviderLocaleKey,
8
8
  SchemaLike,
9
9
  StandardSchemaV1,
10
- } from "./types";
10
+ } from "./types.js";
11
11
 
12
12
  export { z };
13
13
 
@@ -25,15 +25,11 @@ function isFailureResult<Output>(
25
25
  return "issues" in result;
26
26
  }
27
27
  function isPromiseResult<Output>(
28
- result:
29
- | StandardSchemaV1.Result<Output>
30
- | Promise<StandardSchemaV1.Result<Output>>,
28
+ result: StandardSchemaV1.Result<Output> | Promise<StandardSchemaV1.Result<Output>>,
31
29
  ): result is Promise<StandardSchemaV1.Result<Output>> {
32
30
  return result instanceof Promise;
33
31
  }
34
- function formatStandardSchemaIssues(
35
- issues: readonly StandardSchemaV1.Issue[],
36
- ): string {
32
+ function formatStandardSchemaIssues(issues: readonly StandardSchemaV1.Issue[]): string {
37
33
  return issues.map((issue) => issue.message).join("; ");
38
34
  }
39
35
  export function parseSchema<TSchema extends SchemaLike>(
@@ -46,8 +42,7 @@ export async function parseSchema(
46
42
  value: unknown,
47
43
  fieldPath: string,
48
44
  ): Promise<unknown> {
49
- if ("parse" in schema && typeof schema.parse === "function")
50
- return schema.parse(value);
45
+ if ("parse" in schema && typeof schema.parse === "function") return schema.parse(value);
51
46
  const result = schema["~standard"].validate(value);
52
47
  const resolved = isPromiseResult(result) ? await result : result;
53
48
  if (isFailureResult(resolved))
@@ -78,8 +73,7 @@ export function safeParseSchemaSync(
78
73
  `Schema validation for ${fieldPath} returned a Promise. defineProvider fixture validation requires synchronous Standard Schema validation.`,
79
74
  ),
80
75
  };
81
- if (isFailureResult(result))
82
- return { success: false, error: result.issues };
76
+ if (isFailureResult(result)) return { success: false, error: result.issues };
83
77
  return { success: true, data: result.value };
84
78
  } catch (error) {
85
79
  return { success: false, error };
@@ -147,9 +141,7 @@ const describeKeyMethod = function <TSchema extends ZodType>(
147
141
  };
148
142
 
149
143
  function installDescribeKeyOnPrototype(prototype: unknown): void {
150
- const target = prototype as
151
- | (Record<string, unknown> & { describeKey?: unknown })
152
- | null;
144
+ const target = prototype as (Record<string, unknown> & { describeKey?: unknown }) | null;
153
145
  if (!target || typeof target.describeKey === "function") {
154
146
  return;
155
147
  }
@@ -201,12 +193,8 @@ export function field<TSchema extends ZodType>(
201
193
  const metadata = described.meta() ?? {};
202
194
  return described.meta({
203
195
  ...metadata,
204
- ...((options.sensitive ?? true)
205
- ? { [APIFUSE_SENSITIVE_META_KEY]: true }
206
- : {}),
207
- ...(options.kind
208
- ? { [APIFUSE_SENSITIVE_KIND_META_KEY]: options.kind }
209
- : {}),
196
+ ...((options.sensitive ?? true) ? { [APIFUSE_SENSITIVE_META_KEY]: true } : {}),
197
+ ...(options.kind ? { [APIFUSE_SENSITIVE_KIND_META_KEY]: options.kind } : {}),
210
198
  });
211
199
  }
212
200
 
@@ -222,10 +210,7 @@ function sensitiveString(
222
210
  description: string,
223
211
  options: { description?: string; minLength?: number } = {},
224
212
  ): ZodString {
225
- const schema =
226
- options.minLength === undefined
227
- ? z.string()
228
- : z.string().min(options.minLength);
213
+ const schema = options.minLength === undefined ? z.string() : z.string().min(options.minLength);
229
214
  return field(schema, {
230
215
  kind,
231
216
  description: options.description ?? description,
@@ -234,33 +219,17 @@ function sensitiveString(
234
219
 
235
220
  export const fields = {
236
221
  apiKey: (options?: { description?: string }) =>
237
- sensitiveString(
238
- "api_key",
239
- "Provider API key or credential secret.",
240
- options,
241
- ),
222
+ sensitiveString("api_key", "Provider API key or credential secret.", options),
242
223
  authorization: (options?: { description?: string }) =>
243
- sensitiveString(
244
- "authorization",
245
- "Authorization header value or bearer credential.",
246
- options,
247
- ),
224
+ sensitiveString("authorization", "Authorization header value or bearer credential.", options),
248
225
  cookie: (options?: { description?: string }) =>
249
- sensitiveString(
250
- "cookie",
251
- "Cookie header or browser session secret.",
252
- options,
253
- ),
226
+ sensitiveString("cookie", "Cookie header or browser session secret.", options),
254
227
  otp: (options?: { description?: string }) =>
255
228
  sensitiveString("otp", "One-time verification code.", options),
256
229
  password: (options?: { description?: string; minLength?: number }) =>
257
230
  sensitiveString("password", "Password credential.", options),
258
231
  paymentUrl: (options?: { description?: string }) =>
259
- sensitiveString(
260
- "payment_url",
261
- "Sensitive payment or checkout URL.",
262
- options,
263
- ),
232
+ sensitiveString("payment_url", "Sensitive payment or checkout URL.", options),
264
233
  phone: (options?: { description?: string }) =>
265
234
  sensitiveString("phone", "Phone number or phone-based identity.", options),
266
235
  secret: (options?: { description?: string }) =>
@@ -271,10 +240,7 @@ export const fields = {
271
240
 
272
241
  export function isSensitiveSchema(schema: unknown): boolean {
273
242
  const metadata = readZodMetadata(schema);
274
- return (
275
- metadata !== undefined &&
276
- Reflect.get(metadata, APIFUSE_SENSITIVE_META_KEY) === true
277
- );
243
+ return metadata !== undefined && Reflect.get(metadata, APIFUSE_SENSITIVE_META_KEY) === true;
278
244
  }
279
245
 
280
246
  export function collectSensitivePaths(schema: unknown): SensitivePath[] {
@@ -283,10 +249,7 @@ export function collectSensitivePaths(schema: unknown): SensitivePath[] {
283
249
  return out;
284
250
  }
285
251
 
286
- export function redactPayload(
287
- value: unknown,
288
- paths: readonly SensitivePath[] = [],
289
- ): unknown {
252
+ export function redactPayload(value: unknown, paths: readonly SensitivePath[] = []): unknown {
290
253
  return redactValue(value, [], paths);
291
254
  }
292
255
 
@@ -297,8 +260,7 @@ function collectSensitivePathsInto(
297
260
  activeSchemas: Set<unknown>,
298
261
  emittedPaths: Set<string>,
299
262
  ): void {
300
- if (!schema || typeof schema !== "object" || activeSchemas.has(schema))
301
- return;
263
+ if (!schema || typeof schema !== "object" || activeSchemas.has(schema)) return;
302
264
  activeSchemas.add(schema);
303
265
  try {
304
266
  if (isSensitiveSchema(schema)) pushSensitivePath(out, emittedPaths, path);
@@ -308,13 +270,7 @@ function collectSensitivePathsInto(
308
270
  case "object": {
309
271
  const shape = readObjectShape(def);
310
272
  for (const [key, child] of Object.entries(shape)) {
311
- collectSensitivePathsInto(
312
- child,
313
- [...path, key],
314
- out,
315
- activeSchemas,
316
- emittedPaths,
317
- );
273
+ collectSensitivePathsInto(child, [...path, key], out, activeSchemas, emittedPaths);
318
274
  }
319
275
  break;
320
276
  }
@@ -341,20 +297,8 @@ function collectSensitivePathsInto(
341
297
  );
342
298
  break;
343
299
  case "pipe":
344
- collectSensitivePathsInto(
345
- Reflect.get(def, "in"),
346
- path,
347
- out,
348
- activeSchemas,
349
- emittedPaths,
350
- );
351
- collectSensitivePathsInto(
352
- Reflect.get(def, "out"),
353
- path,
354
- out,
355
- activeSchemas,
356
- emittedPaths,
357
- );
300
+ collectSensitivePathsInto(Reflect.get(def, "in"), path, out, activeSchemas, emittedPaths);
301
+ collectSensitivePathsInto(Reflect.get(def, "out"), path, out, activeSchemas, emittedPaths);
358
302
  break;
359
303
  }
360
304
  } finally {
@@ -402,18 +346,13 @@ function pathMatches(
402
346
  ): boolean {
403
347
  return patterns.some((pattern) => {
404
348
  if (pattern.length !== path.length) return false;
405
- return pattern.every(
406
- (segment, index) => segment === "*" || segment === path[index],
407
- );
349
+ return pattern.every((segment, index) => segment === "*" || segment === path[index]);
408
350
  });
409
351
  }
410
352
 
411
353
  function isReservedSensitiveKey(key: string): boolean {
412
354
  const normalized = key.toLowerCase().replace(/[-_\s]/g, "");
413
- return (
414
- RESERVED_SENSITIVE_KEYS.has(normalized) ||
415
- RESERVED_SENSITIVE_KEYS.has(key.toLowerCase())
416
- );
355
+ return RESERVED_SENSITIVE_KEYS.has(normalized) || RESERVED_SENSITIVE_KEYS.has(key.toLowerCase());
417
356
  }
418
357
 
419
358
  function readZodMetadata(schema: unknown): object | undefined {
package/src/serve.ts CHANGED
@@ -1 +1,6 @@
1
- export { createServerApp, type ServeOptions, serve } from "./server/serve";
1
+ export {
2
+ createServerApp,
3
+ createServerAppAsync,
4
+ type ServeOptions,
5
+ serve,
6
+ } from "./server/serve.js";
@@ -1,30 +1,53 @@
1
- export { createServerApp, type ServeOptions, serve } from "./serve";
1
+ export {
2
+ createServerApp,
3
+ createServerAppAsync,
4
+ ERROR_OBSERVABILITY_HEADER,
5
+ type ErrorObservabilityDetails,
6
+ type ProviderServerCloseOptions,
7
+ type ProviderServerHandle,
8
+ type ProviderServerLogEvent,
9
+ type ProviderServerLogger,
10
+ type ProviderServerOperationExecutor,
11
+ type ProviderServerOperationExecutorInput,
12
+ type ProviderServerOptions,
13
+ type ProviderServerStatefulForwardEnvelope,
14
+ type ServeOptions,
15
+ serve,
16
+ } from "./serve.js";
2
17
  export {
3
18
  computeSelfTestPlanDigest,
4
19
  createSelfTestApp,
20
+ createSelfTestAuthFlowInvoke,
5
21
  createSelfTestInvoke,
6
22
  DEFAULT_SELF_TEST_REQUEST_BUDGET_MS,
7
23
  isSelfTestReadOnlyOperation,
8
24
  PROVIDER_RUNTIME_SELF_TEST_REQUEST_BUDGET_MS_ENV,
9
25
  resolveSelfTestPort,
26
+ SELF_TEST_AUTH_FLOW_MULTI_TURN_SKIP_REASON,
27
+ SELF_TEST_AUTH_FLOW_REJECTED_SKIP_REASON,
10
28
  SELF_TEST_HEALTHZ_PATH,
11
29
  SELF_TEST_PATH,
12
30
  SELF_TEST_SCHEMA_VERSION,
13
31
  type SelfTestAppOptions,
32
+ type SelfTestAuthFlowInvoke,
33
+ type SelfTestAuthFlowRoute,
14
34
  type SelfTestCaseResult,
15
35
  type SelfTestCaseStatus,
16
36
  type SelfTestOperationInvoke,
17
37
  type SelfTestRequest,
18
38
  SelfTestRequestSchema,
19
39
  type SelfTestResponse,
20
- } from "./self-test";
21
- export { resolveHealthCheckInputDateTokens } from "./self-test-input-tokens";
40
+ } from "./self-test.js";
41
+ export {
42
+ type InputDateTokenCalendar,
43
+ resolveHealthCheckInputDateTokens,
44
+ } from "./self-test-input-tokens.js";
22
45
  export {
23
46
  collectSelfTestSensitiveValues,
24
47
  redactSelfTestText,
25
48
  SELF_TEST_MAX_TEXT_LENGTH,
26
49
  SELF_TEST_REDACTED_PLACEHOLDER,
27
- } from "./self-test-redaction";
50
+ } from "./self-test-redaction.js";
28
51
  export {
29
52
  DEFAULT_SELF_TEST_PORT,
30
53
  deriveSelfTestToken,
@@ -34,7 +57,7 @@ export {
34
57
  resolveSelfTestMasterSecrets,
35
58
  type SelfTestMasterSecrets,
36
59
  verifySelfTestAuthorization,
37
- } from "./self-test-token";
60
+ } from "./self-test-token.js";
38
61
  export type {
39
62
  AuthFlowRequest,
40
63
  AuthFlowResponse,
@@ -45,7 +68,7 @@ export type {
45
68
  OperationRequest,
46
69
  OperationResponse,
47
70
  OperationSuccessResponse,
48
- } from "./types";
71
+ } from "./types.js";
49
72
  export {
50
73
  AuthFlowRequestSchema,
51
74
  AuthFlowSuccessResponseSchema,
@@ -55,4 +78,4 @@ export {
55
78
  OperationErrorResponseSchema,
56
79
  OperationRequestSchema,
57
80
  OperationSuccessResponseSchema,
58
- } from "./types";
81
+ } from "./types.js";
@@ -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
  }
@@ -1,8 +1,8 @@
1
- import type { ProviderDefinition } from "../types";
1
+ import type { ProviderDefinition } from "../types.js";
2
2
  import {
3
3
  PROVIDER_RUNTIME_SELF_TEST_MASTER_SECRET_ENV,
4
4
  PROVIDER_RUNTIME_SELF_TEST_MASTER_SECRET_PREVIOUS_ENV,
5
- } from "./self-test-token";
5
+ } from "./self-test-token.js";
6
6
 
7
7
  export const SELF_TEST_REDACTED_PLACEHOLDER = "[REDACTED]";
8
8