@apifuse/provider-sdk 2.2.0-beta.10 → 2.2.0-beta.11

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 (66) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/server/index.d.ts +1 -1
  3. package/dist/server/index.js +1 -1
  4. package/dist/server/serve.d.ts +98 -2
  5. package/dist/server/serve.js +485 -23
  6. package/dist/stateful/errors.d.ts +14 -0
  7. package/dist/stateful/errors.js +14 -0
  8. package/dist/stateful/http-provider-event-emitter.d.ts +40 -0
  9. package/dist/stateful/http-provider-event-emitter.js +237 -0
  10. package/dist/stateful/http-session-owner-registry.d.ts +44 -0
  11. package/dist/stateful/http-session-owner-registry.js +210 -0
  12. package/dist/stateful/index.d.ts +18 -0
  13. package/dist/stateful/index.js +18 -0
  14. package/dist/stateful/provider-event-delivery-failures.d.ts +32 -0
  15. package/dist/stateful/provider-event-delivery-failures.js +43 -0
  16. package/dist/stateful/provider-event-pipeline-metrics.d.ts +46 -0
  17. package/dist/stateful/provider-event-pipeline-metrics.js +48 -0
  18. package/dist/stateful/provider-event-pipeline.d.ts +50 -0
  19. package/dist/stateful/provider-event-pipeline.js +1 -0
  20. package/dist/stateful/provider-events.d.ts +101 -0
  21. package/dist/stateful/provider-events.js +289 -0
  22. package/dist/stateful/session-key.d.ts +15 -0
  23. package/dist/stateful/session-key.js +86 -0
  24. package/dist/stateful/stateful-provider-adapter-context.d.ts +5 -0
  25. package/dist/stateful/stateful-provider-adapter-context.js +42 -0
  26. package/dist/stateful/stateful-provider-adapter-metrics.d.ts +15 -0
  27. package/dist/stateful/stateful-provider-adapter-metrics.js +21 -0
  28. package/dist/stateful/stateful-provider-adapter.d.ts +98 -0
  29. package/dist/stateful/stateful-provider-adapter.js +287 -0
  30. package/dist/stateful/stateful-provider-observability.d.ts +62 -0
  31. package/dist/stateful/stateful-provider-observability.js +161 -0
  32. package/dist/stateful/stateful-provider-owner-forwarder.d.ts +41 -0
  33. package/dist/stateful/stateful-provider-owner-forwarder.js +207 -0
  34. package/dist/stateful/stateful-provider-runtime-context.d.ts +32 -0
  35. package/dist/stateful/stateful-provider-runtime-context.js +60 -0
  36. package/dist/stateful/stateful-provider-runtime-executor.d.ts +34 -0
  37. package/dist/stateful/stateful-provider-runtime-executor.js +52 -0
  38. package/dist/stateful/stateful-provider-session-routing.d.ts +71 -0
  39. package/dist/stateful/stateful-provider-session-routing.js +353 -0
  40. package/dist/stateful/stateful-provider-session-runtime.d.ts +98 -0
  41. package/dist/stateful/stateful-provider-session-runtime.js +245 -0
  42. package/dist/stateful-signing.d.ts +18 -0
  43. package/dist/stateful-signing.js +27 -0
  44. package/package.json +6 -1
  45. package/src/server/index.ts +13 -1
  46. package/src/server/serve.ts +691 -25
  47. package/src/stateful/README.md +146 -0
  48. package/src/stateful/errors.ts +23 -0
  49. package/src/stateful/http-provider-event-emitter.ts +314 -0
  50. package/src/stateful/http-session-owner-registry.ts +306 -0
  51. package/src/stateful/index.ts +18 -0
  52. package/src/stateful/provider-event-delivery-failures.ts +80 -0
  53. package/src/stateful/provider-event-pipeline-metrics.ts +95 -0
  54. package/src/stateful/provider-event-pipeline.ts +61 -0
  55. package/src/stateful/provider-events.ts +462 -0
  56. package/src/stateful/session-key.ts +111 -0
  57. package/src/stateful/stateful-provider-adapter-context.ts +59 -0
  58. package/src/stateful/stateful-provider-adapter-metrics.ts +48 -0
  59. package/src/stateful/stateful-provider-adapter.ts +562 -0
  60. package/src/stateful/stateful-provider-observability.ts +261 -0
  61. package/src/stateful/stateful-provider-owner-forwarder.ts +279 -0
  62. package/src/stateful/stateful-provider-runtime-context.ts +92 -0
  63. package/src/stateful/stateful-provider-runtime-executor.ts +96 -0
  64. package/src/stateful/stateful-provider-session-routing.ts +555 -0
  65. package/src/stateful/stateful-provider-session-runtime.ts +403 -0
  66. package/src/stateful-signing.ts +46 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # @apifuse/provider-sdk Changelog
2
2
 
3
+ ## 2.2.0-beta.11
4
+
5
+ - Release candidate for main commit f6f739bd5265afe714bbace9900edc2695fcf826.
6
+
3
7
  ## 2.2.0-beta.10
4
8
 
5
9
  - Release candidate for main commit c41bd919739e0293ae8fa4d72a8a32f034cef4b8.
@@ -1,4 +1,4 @@
1
- export { createServerApp, type ServeOptions, serve } from "./serve.js";
1
+ export { createServerApp, type ProviderServerCloseOptions, type ProviderServerHandle, type ProviderServerLogEvent, type ProviderServerLogger, type ProviderServerOperationExecutor, type ProviderServerOperationExecutorInput, type ProviderServerOptions, type ProviderServerStatefulForwardEnvelope, type ServeOptions, serve, } from "./serve.js";
2
2
  export { computeSelfTestPlanDigest, createSelfTestApp, createSelfTestAuthFlowInvoke, createSelfTestInvoke, DEFAULT_SELF_TEST_REQUEST_BUDGET_MS, isSelfTestReadOnlyOperation, PROVIDER_RUNTIME_SELF_TEST_REQUEST_BUDGET_MS_ENV, resolveSelfTestPort, SELF_TEST_AUTH_FLOW_MULTI_TURN_SKIP_REASON, SELF_TEST_AUTH_FLOW_REJECTED_SKIP_REASON, SELF_TEST_HEALTHZ_PATH, SELF_TEST_PATH, SELF_TEST_SCHEMA_VERSION, type SelfTestAppOptions, type SelfTestAuthFlowInvoke, type SelfTestAuthFlowRoute, type SelfTestCaseResult, type SelfTestCaseStatus, type SelfTestOperationInvoke, type SelfTestRequest, SelfTestRequestSchema, type SelfTestResponse, } from "./self-test.js";
3
3
  export { resolveHealthCheckInputDateTokens } from "./self-test-input-tokens.js";
4
4
  export { collectSelfTestSensitiveValues, redactSelfTestText, SELF_TEST_MAX_TEXT_LENGTH, SELF_TEST_REDACTED_PLACEHOLDER, } from "./self-test-redaction.js";
@@ -1,4 +1,4 @@
1
- export { createServerApp, serve } from "./serve.js";
1
+ export { createServerApp, serve, } from "./serve.js";
2
2
  export { computeSelfTestPlanDigest, createSelfTestApp, createSelfTestAuthFlowInvoke, createSelfTestInvoke, DEFAULT_SELF_TEST_REQUEST_BUDGET_MS, isSelfTestReadOnlyOperation, PROVIDER_RUNTIME_SELF_TEST_REQUEST_BUDGET_MS_ENV, resolveSelfTestPort, SELF_TEST_AUTH_FLOW_MULTI_TURN_SKIP_REASON, SELF_TEST_AUTH_FLOW_REJECTED_SKIP_REASON, SELF_TEST_HEALTHZ_PATH, SELF_TEST_PATH, SELF_TEST_SCHEMA_VERSION, SelfTestRequestSchema, } from "./self-test.js";
3
3
  export { resolveHealthCheckInputDateTokens } from "./self-test-input-tokens.js";
4
4
  export { collectSelfTestSensitiveValues, redactSelfTestText, SELF_TEST_MAX_TEXT_LENGTH, SELF_TEST_REDACTED_PLACEHOLDER, } from "./self-test-redaction.js";
@@ -1,7 +1,56 @@
1
1
  import { Hono } from "hono";
2
+ import { z } from "zod";
2
3
  import { type ProviderErrorCategory } from "../observability.js";
3
- import type { ProviderDefinition, ProviderRuntimeState, SttContext } from "../types.js";
4
+ import type { ProviderContext, ProviderDefinition, ProviderRuntimeState, SttContext } from "../types.js";
4
5
  import { type OperationRequest } from "./types.js";
6
+ export declare const ProviderServerStatefulForwardEnvelopeSchema: z.ZodObject<{
7
+ requestId: z.ZodString;
8
+ providerId: z.ZodString;
9
+ operationId: z.ZodString;
10
+ sessionKey: z.ZodString;
11
+ connectionId: z.ZodString;
12
+ serviceAccountId: z.ZodString;
13
+ ownerPodId: z.ZodString;
14
+ generation: z.ZodNumber;
15
+ sourcePodId: z.ZodString;
16
+ forwardedAt: z.ZodString;
17
+ deadlineAt: z.ZodOptional<z.ZodString>;
18
+ idempotencyKey: z.ZodOptional<z.ZodString>;
19
+ operationRequest: z.ZodObject<{
20
+ requestId: z.ZodString;
21
+ input: z.ZodRecord<z.ZodString, z.ZodUnknown>;
22
+ connectionId: z.ZodOptional<z.ZodString>;
23
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
24
+ trace: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
25
+ connection: z.ZodOptional<z.ZodObject<{
26
+ id: z.ZodString;
27
+ mode: z.ZodEnum<{
28
+ none: "none";
29
+ credentials: "credentials";
30
+ oauth2: "oauth2";
31
+ "platform-managed": "platform-managed";
32
+ }>;
33
+ secrets: z.ZodRecord<z.ZodString, z.ZodString>;
34
+ scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
35
+ metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
36
+ externalRef: z.ZodString;
37
+ }, z.core.$strict>>;
38
+ }, z.core.$strict>;
39
+ }, z.core.$strict>;
40
+ export type ProviderServerStatefulForwardEnvelope = Readonly<z.infer<typeof ProviderServerStatefulForwardEnvelopeSchema>>;
41
+ export type ProviderServerStatefulOwnerFence = Readonly<Pick<ProviderServerStatefulForwardEnvelope, "providerId" | "sessionKey" | "ownerPodId" | "generation" | "sourcePodId" | "forwardedAt" | "requestId" | "idempotencyKey">>;
42
+ export type ProviderServerStatefulOwnerFenceValidator = (fence: ProviderServerStatefulOwnerFence, signal: AbortSignal) => boolean | Promise<boolean>;
43
+ export type ProviderServerOperationExecutorInput = {
44
+ readonly provider: ProviderDefinition;
45
+ readonly operationId: string;
46
+ readonly ctx: ProviderContext;
47
+ readonly request: OperationRequest & {
48
+ readonly deadlineAt?: string;
49
+ };
50
+ readonly signal?: AbortSignal;
51
+ readonly internalStatefulForward?: ProviderServerStatefulForwardEnvelope;
52
+ };
53
+ export type ProviderServerOperationExecutor = (input: ProviderServerOperationExecutorInput) => Promise<unknown>;
5
54
  export declare function resolveProviderProxyAffinityKey(provider: ProviderDefinition, request: OperationRequest, operationId: string): string;
6
55
  type ProviderRequestCost = {
7
56
  durationMs: number;
@@ -49,18 +98,65 @@ export type ProviderServerLogEvent = (ProviderServerLogEventBase & {
49
98
  resource: "browser" | "stealth";
50
99
  errorClass: string;
51
100
  message: string;
101
+ } | {
102
+ level: "error";
103
+ event: "provider_shutdown_hook_failed";
104
+ providerId: string;
105
+ hookIndex: number;
106
+ errorClass: string;
107
+ message: string;
52
108
  };
53
109
  export type ProviderServerLogger = (event: ProviderServerLogEvent) => void;
54
110
  export type ProviderServerOptions = {
55
111
  logger?: ProviderServerLogger;
112
+ /** Optional provider-specific operation executor. Stateful providers use this to preserve provider-local runtime semantics. */
113
+ operationExecutor?: ProviderServerOperationExecutor;
114
+ /** Optional signed internal executor for stateful owner forwarding. */
115
+ internalOperationExecutor?: ProviderServerOperationExecutor;
116
+ statefulForwarding?: {
117
+ readonly secret: string;
118
+ readonly maxSkewMs?: number;
119
+ readonly replayCacheMaxEntries?: number;
120
+ /** Required fail-closed check against the SDK/runtime owner registry. */
121
+ readonly validateOwnerFence: ProviderServerStatefulOwnerFenceValidator;
122
+ };
56
123
  /** Optional STT override for tests or custom hosts; local/prod normally resolves from env. */
57
124
  stt?: SttContext;
58
125
  /** Optional runtime state override for tests or custom hosts. Production resolves Redis from env and fails closed when unavailable. */
59
126
  state?: ProviderRuntimeState;
60
127
  /** Allow process-local runtime state only for local development and tests. */
61
128
  allowMemoryStateFallback?: boolean;
129
+ /**
130
+ * Graceful process shutdown. Hooks run in declaration order after listeners stop accepting work.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * await serve(provider, {
135
+ * shutdown: {
136
+ * hooks: [
137
+ * async () => { await emitter.flush(); },
138
+ * async () => { await sessionManager.closeAll("server-shutdown"); },
139
+ * async () => { await lease.release(); },
140
+ * async () => { await router.close(); },
141
+ * ],
142
+ * },
143
+ * });
144
+ * ```
145
+ */
146
+ shutdown?: {
147
+ readonly hooks?: Array<() => Promise<void>>;
148
+ readonly signals?: boolean | NodeJS.Signals[];
149
+ readonly timeoutMs?: number;
150
+ };
62
151
  };
63
152
  export declare function createServerApp(provider: ProviderDefinition, options?: ProviderServerOptions): Hono;
153
+ export type ProviderServerCloseOptions = {
154
+ readonly timeoutMs?: number;
155
+ };
156
+ export type ProviderServerHandle = {
157
+ readonly port: number;
158
+ close(options?: ProviderServerCloseOptions): Promise<void>;
159
+ };
64
160
  export interface ServeOptions extends ProviderServerOptions {
65
161
  host?: string;
66
162
  port?: number;
@@ -71,5 +167,5 @@ export interface ServeOptions extends ProviderServerOptions {
71
167
  */
72
168
  selfTestPort?: number;
73
169
  }
74
- export declare function serve(provider: ProviderDefinition, options?: ServeOptions): Promise<void>;
170
+ export declare function serve(provider: ProviderDefinition, options?: ServeOptions): Promise<ProviderServerHandle>;
75
171
  export {};