@ontemper/sdk 0.1.0-rc.1 → 0.2.0

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 (96) hide show
  1. package/README.md +92 -22
  2. package/dist/AxiosError.d.ts +46 -0
  3. package/dist/AxiosError.d.ts.map +1 -0
  4. package/dist/AxiosError.js +118 -0
  5. package/dist/AxiosError.js.map +1 -0
  6. package/dist/Contract/Invocation.d.ts +21 -0
  7. package/dist/Contract/Invocation.d.ts.map +1 -0
  8. package/dist/Contract/Invocation.js +2 -0
  9. package/dist/Contract/Invocation.js.map +1 -0
  10. package/dist/Contract/Manifest.d.ts +125 -0
  11. package/dist/Contract/Manifest.d.ts.map +1 -0
  12. package/dist/Contract/Manifest.js +59 -0
  13. package/dist/Contract/Manifest.js.map +1 -0
  14. package/dist/Contract/RuntimeApi.d.ts +143 -0
  15. package/dist/Contract/RuntimeApi.d.ts.map +1 -0
  16. package/dist/Contract/RuntimeApi.js +148 -0
  17. package/dist/Contract/RuntimeApi.js.map +1 -0
  18. package/dist/Contract/index.d.ts +4 -0
  19. package/dist/Contract/index.d.ts.map +1 -0
  20. package/dist/Contract/index.js +3 -0
  21. package/dist/Contract/index.js.map +1 -0
  22. package/dist/Correlation.d.ts +33 -0
  23. package/dist/Correlation.d.ts.map +1 -0
  24. package/dist/Correlation.js +57 -0
  25. package/dist/Correlation.js.map +1 -0
  26. package/dist/HttpApiResource.d.ts +32 -0
  27. package/dist/HttpApiResource.d.ts.map +1 -0
  28. package/dist/HttpApiResource.js +35 -0
  29. package/dist/HttpApiResource.js.map +1 -0
  30. package/dist/HttpClient.d.ts +10 -0
  31. package/dist/HttpClient.d.ts.map +1 -0
  32. package/dist/HttpClient.js +167 -0
  33. package/dist/HttpClient.js.map +1 -0
  34. package/dist/HttpPayload.d.ts +9 -0
  35. package/dist/HttpPayload.d.ts.map +1 -0
  36. package/dist/HttpPayload.js +32 -0
  37. package/dist/HttpPayload.js.map +1 -0
  38. package/dist/Invocation.d.ts +1 -20
  39. package/dist/Invocation.d.ts.map +1 -1
  40. package/dist/Invocation.js.map +1 -1
  41. package/dist/LogContext.d.ts +59 -0
  42. package/dist/LogContext.d.ts.map +1 -0
  43. package/dist/LogContext.js +47 -0
  44. package/dist/LogContext.js.map +1 -0
  45. package/dist/Logger.d.ts +3 -3
  46. package/dist/Logger.d.ts.map +1 -1
  47. package/dist/Logger.js +305 -37
  48. package/dist/Logger.js.map +1 -1
  49. package/dist/Manifest.d.ts +4 -16
  50. package/dist/Manifest.d.ts.map +1 -1
  51. package/dist/Manifest.js +65 -4
  52. package/dist/Manifest.js.map +1 -1
  53. package/dist/Middleware.d.ts +5 -2
  54. package/dist/Middleware.d.ts.map +1 -1
  55. package/dist/Middleware.js +278 -27
  56. package/dist/Middleware.js.map +1 -1
  57. package/dist/Redaction.d.ts +27 -0
  58. package/dist/Redaction.d.ts.map +1 -0
  59. package/dist/Redaction.js +149 -0
  60. package/dist/Redaction.js.map +1 -0
  61. package/dist/Resource.d.ts +66 -0
  62. package/dist/Resource.d.ts.map +1 -0
  63. package/dist/Resource.js +57 -0
  64. package/dist/Resource.js.map +1 -0
  65. package/dist/ResourcesErrors.d.ts +36 -0
  66. package/dist/ResourcesErrors.d.ts.map +1 -0
  67. package/dist/ResourcesErrors.js +27 -0
  68. package/dist/ResourcesErrors.js.map +1 -0
  69. package/dist/ResourcesToken.d.ts +10 -0
  70. package/dist/ResourcesToken.d.ts.map +1 -0
  71. package/dist/ResourcesToken.js +63 -0
  72. package/dist/ResourcesToken.js.map +1 -0
  73. package/dist/RuntimeResources.d.ts +26 -0
  74. package/dist/RuntimeResources.d.ts.map +1 -0
  75. package/dist/RuntimeResources.js +115 -0
  76. package/dist/RuntimeResources.js.map +1 -0
  77. package/dist/Trigger.d.ts +1 -26
  78. package/dist/Trigger.d.ts.map +1 -1
  79. package/dist/Trigger.js +1 -24
  80. package/dist/Trigger.js.map +1 -1
  81. package/dist/Workflow.d.ts +26 -9
  82. package/dist/Workflow.d.ts.map +1 -1
  83. package/dist/Workflow.js +48 -12
  84. package/dist/Workflow.js.map +1 -1
  85. package/dist/cli.d.ts.map +1 -1
  86. package/dist/cli.js +193 -41
  87. package/dist/cli.js.map +1 -1
  88. package/dist/index.d.ts +15 -4
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +12 -2
  91. package/dist/index.js.map +1 -1
  92. package/dist/testing.d.ts +34 -2
  93. package/dist/testing.d.ts.map +1 -1
  94. package/dist/testing.js +35 -0
  95. package/dist/testing.js.map +1 -1
  96. package/package.json +6 -2
package/dist/Workflow.js CHANGED
@@ -1,18 +1,30 @@
1
- import { Context, FileSystem, Layer, Path, References } from 'effect';
1
+ import { Clock, ConfigProvider, Context, FileSystem, Layer, Path } from 'effect';
2
2
  import { Etag, HttpPlatform, HttpRouter, HttpServer, HttpServerResponse } from 'effect/unstable/http';
3
- import { HttpApiBuilder } from 'effect/unstable/httpapi';
3
+ import { HttpApi, HttpApiBuilder } from 'effect/unstable/httpapi';
4
+ import { httpClientLayer } from './HttpClient.js';
4
5
  import { Invocation } from './Invocation.js';
5
- import { makeWorkflowLoggers, writeStdoutLine } from './Logger.js';
6
- import { makeManifest } from './Manifest.js';
7
- import { InvocationMiddlewareLive } from './Middleware.js';
6
+ import { loggerLayer, writeStdoutLine } from './Logger.js';
7
+ import { HEALTHCHECK_PATH, makeManifest } from './Manifest.js';
8
+ import { EventRequestMiddleware, UnmatchedRequestMiddleware } from './Middleware.js';
9
+ import { makeSecretMasks, SecretMasks } from './Redaction.js';
10
+ import { declarationLayer, declarationOf } from './Resource.js';
11
+ import { RuntimeResources } from './RuntimeResources.js';
8
12
  /**
9
13
  * Kubernetes probes every workflow pod on `GET /healthcheck` (startup, liveness, readiness). The
10
14
  * runtime owns that route so a migrated workflow cannot crash-loop by omitting it. It is composed
11
15
  * onto the router ahead of the user API, so it is served regardless of the user's `Api` and never
12
- * appears in the manifest.
16
+ * appears in the manifest, which rejects an API declaring it. Like legacy, it runs outside any
17
+ * request trace and logs nothing.
13
18
  */
14
- const PlatformRoutes = HttpRouter.add('GET', '/healthcheck', HttpServerResponse.jsonUnsafe({ status: 'ok' }));
19
+ const PlatformRoutes = HttpRouter.add('GET', HEALTHCHECK_PATH, HttpServerResponse.jsonUnsafe({ status: 'ok' }));
15
20
  const InMemoryHttpPlatform = Layer.mergeAll(HttpPlatform.layer.pipe(Layer.provide(FileSystem.layerNoop({}))), FileSystem.layerNoop({}), Path.layer, Etag.layerWeak);
21
+ /**
22
+ * Standard Effect services the workflow depends on: `Effect.log*` as legacy JSON lines, `Config`
23
+ * over the environment, and the platform `HttpClient`. One secret registry lives per module.
24
+ */
25
+ const platformLayer = (platform) => Layer.mergeAll(loggerLayer(platform.writeLog ?? writeStdoutLine), httpClientLayer(platform.outboundFetch ?? ((url, init) => globalThis.fetch(url, init)))).pipe(Layer.provideMerge(Layer.mergeAll(
26
+ // Legacy `process.env.X ?? fallback` treated an empty variable as set.
27
+ ConfigProvider.layer(platform.configProvider ?? ConfigProvider.fromEnvRecord(process.env, { preserveEmptyStrings: true })), Layer.succeed(SecretMasks, makeSecretMasks()), platform.clock === undefined ? Layer.empty : Layer.succeed(Clock.Clock, platform.clock))));
16
28
  /** Platform run metadata travels in `context`; the header copies are removed so handlers cannot drift onto them. */
17
29
  const stripPlatformHeaders = (request) => {
18
30
  const names = [];
@@ -23,22 +35,46 @@ const stripPlatformHeaders = (request) => {
23
35
  for (const name of names)
24
36
  request.headers.delete(name);
25
37
  };
38
+ /** One middleware layer per resource, variable, and resource type the API's endpoints declare. */
39
+ const declarationsOf = (api, platform) => {
40
+ const layers = new Map();
41
+ HttpApi.reflect(api, {
42
+ onGroup() { },
43
+ onEndpoint({ middleware }) {
44
+ for (const key of middleware) {
45
+ const runtime = declarationOf(key);
46
+ if (runtime !== undefined && !layers.has(key.key))
47
+ layers.set(key.key, declarationLayer(key, runtime));
48
+ }
49
+ },
50
+ });
51
+ return Layer.mergeAll(Layer.empty, ...layers.values()).pipe(Layer.provide(platform.resources === undefined ? RuntimeResources.layer : Layer.succeed(RuntimeResources, platform.resources)));
52
+ };
26
53
  export const workflow = (options) => {
27
54
  const manifest = makeManifest(options.api);
28
- const appLayer = Layer.mergeAll(PlatformRoutes, HttpApiBuilder.layer(options.api).pipe(Layer.provide(options.handlers)), InvocationMiddlewareLive).pipe(Layer.provide(HttpServer.layerServices), Layer.provide(InMemoryHttpPlatform));
29
- const web = HttpRouter.toWebHandler(appLayer, { disableLogger: true });
55
+ const handlers = options.handlers.pipe(Layer.provide(declarationsOf(options.api, options)));
56
+ const appLayer = Layer.mergeAll(PlatformRoutes, HttpApiBuilder.layer(options.api).pipe(Layer.provide(handlers), Layer.provide(EventRequestMiddleware)), UnmatchedRequestMiddleware).pipe(Layer.provide(HttpServer.layerServices), Layer.provide(InMemoryHttpPlatform), Layer.provideMerge(platformLayer(options)));
57
+ // Legacy Hono routing: exact case, no trailing- or duplicate-slash folding, unbounded parameters.
58
+ const web = HttpRouter.toWebHandler(appLayer, {
59
+ disableLogger: true,
60
+ routerConfig: {
61
+ caseSensitive: true,
62
+ ignoreTrailingSlash: false,
63
+ ignoreDuplicateSlashes: false,
64
+ maxParamLength: Number.POSITIVE_INFINITY,
65
+ },
66
+ });
30
67
  // SAFETY: WorkflowOptions accepts a complete handler layer whose only request service is Invocation.
31
68
  const handler = web.handler;
32
- const loggers = makeWorkflowLoggers(options.writeLog ?? writeStdoutLine);
33
69
  return Object.freeze({
34
70
  api: options.api,
35
71
  manifest,
36
72
  fetch: (request, invocation) => {
37
73
  stripPlatformHeaders(request);
38
- // Loggers ride on the request context so middleware and handlers share them.
39
- return handler(request, Context.make(Invocation, invocation).pipe(Context.add(References.CurrentLoggers, loggers)));
74
+ return handler(request, Context.make(Invocation, invocation));
40
75
  },
41
76
  dispose: web.dispose,
77
+ withPlatform: (platform) => workflow({ ...options, ...platform }),
42
78
  });
43
79
  };
44
80
  //# sourceMappingURL=Workflow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Workflow.js","sourceRoot":"","sources":["../src/Workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Workflow.js","sourceRoot":"","sources":["../src/Workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACjF,OAAO,EAAE,IAAI,EAAmB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACvH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAC;AAGrF,OAAO,EAAE,eAAe,EAAsB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAuB,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAuB,MAAM,uBAAuB,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAEhH,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,CACzC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAChE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,EACxB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,SAAS,CACf,CAAC;AAkCF;;;GAGG;AACH,MAAM,aAAa,GAAG,CAAC,QAA0B,EAAE,EAAE,CACnD,KAAK,CAAC,QAAQ,CACZ,WAAW,CAAC,QAAQ,CAAC,QAAQ,IAAI,eAAe,CAAC,EACjD,eAAe,CAAC,QAAQ,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CACxF,CAAC,IAAI,CACJ,KAAK,CAAC,YAAY,CAChB,KAAK,CAAC,QAAQ;AACZ,uEAAuE;AACvE,cAAc,CAAC,KAAK,CAClB,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CACrG,EACD,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,EAAE,CAAC,EAC7C,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CACxF,CACF,CACF,CAAC;AAEJ,oHAAoH;AACpH,MAAM,oBAAoB,GAAG,CAAC,OAAgB,EAAQ,EAAE;IACtD,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACvC,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,kGAAkG;AAClG,MAAM,cAAc,GAAG,CACrB,GAAgC,EAChC,QAA0B,EAC1B,EAAE;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgE,CAAC;IACvF,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QACnB,OAAO,KAAI,CAAC;QACZ,UAAU,CAAC,EAAE,UAAU,EAAE;YACvB,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACzD,KAAK,CAAC,OAAO,CACX,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,SAAS,CAAC,CAChH,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,OAAoC,EACS,EAAE;IAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAC7B,cAAc,EACd,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,EACtG,0BAA0B,CAC3B,CAAC,IAAI,CACJ,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EACvC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,EACnC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAC3C,CAAC;IACF,kGAAkG;IAClG,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC5C,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE;YACZ,aAAa,EAAE,IAAI;YACnB,mBAAmB,EAAE,KAAK;YAC1B,sBAAsB,EAAE,KAAK;YAC7B,cAAc,EAAE,MAAM,CAAC,iBAAiB;SACzC;KACF,CAAC,CAAC;IACH,qGAAqG;IACrG,MAAM,OAAO,GAAG,GAAG,CAAC,OAAwF,CAAC;IAE7G,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ;QACR,KAAK,EAAE,CAAC,OAAgB,EAAE,UAA6B,EAAE,EAAE;YACzD,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,YAAY,EAAE,CAAC,QAA0B,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;KACpF,CAAC,CAAC;AACL,CAAC,CAAC"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAyTA,eAAO,MAAM,MAAM,eAAsB,aAAa,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,IAAI,CAK5E,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAgeA,eAAO,MAAM,MAAM,eAAsB,aAAa,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,IAAI,CAK5E,CAAC"}
package/dist/cli.js CHANGED
@@ -5,6 +5,7 @@ import { mkdtemp, rm } from 'node:fs/promises';
5
5
  import { createServer } from 'node:http';
6
6
  import { tmpdir } from 'node:os';
7
7
  import { dirname, join, resolve } from 'node:path';
8
+ import { finished } from 'node:stream';
8
9
  import { fileURLToPath, pathToFileURL } from 'node:url';
9
10
  const usage = `Usage:
10
11
  temper-workflow dev --entrypoint <file> [--host 127.0.0.1] [--port 3051]
@@ -117,6 +118,26 @@ const loadBuiltWorkflow = async (entrypoint) => {
117
118
  };
118
119
  /** Mirrors the Firecracker guest's 115 s request deadline so local runs surface the same interruption. */
119
120
  const LOCAL_DEADLINE_MS = 115_000;
121
+ /**
122
+ * The platform sends SIGTERM after a 20 s preStop drain and SIGKILL 40 s later
123
+ * (packages/infrastructure/k8s-workflow/defaults.ts). Requests still being handled get the grace and
124
+ * are then interrupted; whatever still runs at the deadline, module disposal included, ends with the
125
+ * process. Tests shorten both through the environment.
126
+ */
127
+ const SHUTDOWN_GRACE_MS = 30_000;
128
+ const SHUTDOWN_DEADLINE_MS = 35_000;
129
+ /** A whole number of milliseconds from the environment, else `fallback`. */
130
+ const millisecondsFromEnvironment = (name, fallback) => {
131
+ const text = process.env[name];
132
+ if (text === undefined)
133
+ return fallback;
134
+ if (!/^\d+$/.test(text))
135
+ fail(`${name} must be a whole number of milliseconds.`);
136
+ return Number(text);
137
+ };
138
+ /** The legacy host (@hono/node-server) discarded unread request bytes this long, and at most this many, after a response. */
139
+ const DRAIN_TIMEOUT_MS = 500;
140
+ const MAX_DRAIN_BYTES = 64 * 1024 * 1024;
120
141
  const invocationFor = (module, triggerKind) => ({
121
142
  workflowId: module.manifest.apiId,
122
143
  deploymentId: 'local',
@@ -127,35 +148,97 @@ const invocationFor = (module, triggerKind) => ({
127
148
  deadline: Date.now() + LOCAL_DEADLINE_MS,
128
149
  token: '',
129
150
  });
130
- const readRequestBody = async (request) => {
131
- if (request.method === 'GET' || request.method === 'HEAD')
132
- return undefined;
133
- const chunks = [];
134
- // SAFETY: no request encoding is configured, so IncomingMessage yields Buffer chunks.
135
- for await (const chunk of request) {
136
- chunks.push(chunk);
137
- }
138
- if (chunks.length === 0)
139
- return undefined;
140
- const bytes = Buffer.concat(chunks);
141
- const body = new ArrayBuffer(bytes.length);
142
- new Uint8Array(body).set(bytes);
143
- return body;
151
+ /**
152
+ * The request body, read from the socket only as the workflow reads it, so the module's 100 MiB
153
+ * ceiling and invocation deadline govern the read, as they did behind the legacy host. Cancelling it
154
+ * stops the reads but keeps the socket, which still carries the response.
155
+ */
156
+ const requestBody = (incoming) => {
157
+ let detach = () => undefined;
158
+ return new ReadableStream({
159
+ start(controller) {
160
+ const onData = (chunk) => {
161
+ incoming.pause();
162
+ controller.enqueue(chunk);
163
+ };
164
+ incoming.pause();
165
+ incoming.on('data', onData);
166
+ const stopWatching = finished(incoming, (error) => {
167
+ detach();
168
+ if (error === undefined || error === null)
169
+ controller.close();
170
+ else
171
+ controller.error(error);
172
+ });
173
+ detach = () => {
174
+ incoming.off('data', onData);
175
+ stopWatching();
176
+ };
177
+ },
178
+ pull() {
179
+ incoming.resume();
180
+ },
181
+ cancel() {
182
+ detach();
183
+ },
184
+ }, { highWaterMark: 0 });
185
+ };
186
+ /**
187
+ * After a response, request bytes nobody read are discarded briefly and the socket then closes, so a
188
+ * client still sending (e.g. after a 413) can read the answer: the legacy host's drain.
189
+ */
190
+ const drainIncoming = (incoming) => {
191
+ if (incoming.readableEnded || incoming.destroyed)
192
+ return;
193
+ let discarded = 0;
194
+ const onData = (chunk) => {
195
+ discarded += chunk.byteLength;
196
+ if (discarded > MAX_DRAIN_BYTES)
197
+ close();
198
+ };
199
+ const release = () => {
200
+ clearTimeout(timer);
201
+ incoming.off('data', onData);
202
+ };
203
+ const close = () => {
204
+ release();
205
+ incoming.socket.destroySoon();
206
+ };
207
+ const timer = setTimeout(close, DRAIN_TIMEOUT_MS);
208
+ timer.unref();
209
+ // The body stream's own listener would pause the socket again.
210
+ incoming.removeAllListeners('data');
211
+ incoming.on('data', onData);
212
+ incoming.once('end', release);
213
+ incoming.once('error', release);
214
+ incoming.resume();
144
215
  };
145
- const toWebRequest = async (request, host) => {
216
+ const toWebRequest = (incoming, host, signal) => {
146
217
  const headers = new Headers();
147
218
  let index = 0;
148
- while (index < request.rawHeaders.length) {
149
- headers.append(request.rawHeaders[index], request.rawHeaders[index + 1]);
219
+ while (index < incoming.rawHeaders.length) {
220
+ headers.append(incoming.rawHeaders[index], incoming.rawHeaders[index + 1]);
150
221
  index += 2;
151
222
  }
152
- return new Request(`http://${request.headers.host ?? host}${request.url ?? '/'}`, {
153
- method: request.method,
223
+ const init = {
224
+ method: incoming.method,
154
225
  headers,
155
- body: await readRequestBody(request),
156
- });
226
+ body: incoming.method === 'GET' || incoming.method === 'HEAD' ? undefined : requestBody(incoming),
227
+ // A streamed body is sent half-duplex.
228
+ duplex: 'half',
229
+ signal,
230
+ };
231
+ return new Request(`http://${incoming.headers.host ?? host}${incoming.url ?? '/'}`, init);
157
232
  };
158
- const sendWebResponse = async (response, outgoing) => {
233
+ /**
234
+ * Writes the response until it ends or `signal` aborts. A response nobody will read is cancelled
235
+ * unread, and one cut short ends with its connection, so it cannot look complete.
236
+ */
237
+ const sendWebResponse = async (response, outgoing, signal) => {
238
+ if (signal.aborted) {
239
+ await response.body?.cancel();
240
+ return;
241
+ }
159
242
  for (const [name, value] of response.headers) {
160
243
  if (name !== 'set-cookie')
161
244
  outgoing.setHeader(name, value);
@@ -170,6 +253,13 @@ const sendWebResponse = async (response, outgoing) => {
170
253
  return;
171
254
  }
172
255
  const reader = response.body.getReader();
256
+ // Cancelling ends a pending read and releases the body's source; the abort also ends a drain wait.
257
+ const aborted = Promise.withResolvers();
258
+ const onAbort = () => {
259
+ aborted.resolve(undefined);
260
+ reader.cancel().catch(() => undefined);
261
+ };
262
+ signal.addEventListener('abort', onAbort, { once: true });
173
263
  try {
174
264
  while (true) {
175
265
  const item = await reader.read();
@@ -177,17 +267,52 @@ const sendWebResponse = async (response, outgoing) => {
177
267
  break;
178
268
  if (!outgoing.write(item.value)) {
179
269
  const drained = Promise.withResolvers();
180
- outgoing.once('drain', () => drained.resolve(undefined));
181
- await drained.promise;
270
+ const onDrain = () => drained.resolve(undefined);
271
+ outgoing.once('drain', onDrain);
272
+ await Promise.race([drained.promise, aborted.promise]);
273
+ outgoing.off('drain', onDrain);
182
274
  }
183
275
  }
184
276
  }
185
277
  finally {
278
+ signal.removeEventListener('abort', onAbort);
186
279
  reader.releaseLock();
187
280
  }
188
- outgoing.end();
281
+ if (signal.aborted)
282
+ outgoing.destroy();
283
+ else
284
+ outgoing.end();
285
+ };
286
+ /** Waits until every promise settles or `milliseconds` pass. */
287
+ const settleWithin = async (pending, milliseconds) => {
288
+ const elapsed = Promise.withResolvers();
289
+ const timer = setTimeout(() => elapsed.resolve(undefined), milliseconds);
290
+ await Promise.race([Promise.allSettled(pending), elapsed.promise]);
291
+ clearTimeout(timer);
292
+ };
293
+ /**
294
+ * Stops accepting connections and stops responses already streaming: after the platform's drain
295
+ * window they are long-lived streams that would hold the process open. Requests still being handled
296
+ * get `grace`; then their handlers are interrupted and their connections closed.
297
+ */
298
+ const closeServer = async (server, requests, responding, grace) => {
299
+ const closed = Promise.withResolvers();
300
+ server.close((error) => (error === undefined ? closed.resolve(undefined) : closed.reject(error)));
301
+ for (const exchange of responding)
302
+ exchange.response.abort();
303
+ await settleWithin(requests.values(), grace);
304
+ for (const exchange of requests.keys()) {
305
+ exchange.handler.abort();
306
+ exchange.response.abort();
307
+ }
308
+ // The shutdown deadline bounds this wait, like everything after the signal.
309
+ await Promise.allSettled(requests.values());
310
+ server.closeAllConnections();
311
+ await closed.promise;
189
312
  };
190
313
  const runServer = async (options, loader, reload) => {
314
+ const shutdownGrace = millisecondsFromEnvironment('TEMPER_WORKFLOW_SHUTDOWN_GRACE_MS', SHUTDOWN_GRACE_MS);
315
+ const shutdownDeadline = millisecondsFromEnvironment('TEMPER_WORKFLOW_SHUTDOWN_DEADLINE_MS', SHUTDOWN_DEADLINE_MS);
191
316
  let current = await loader(options.entrypoint);
192
317
  let reloadTimer;
193
318
  let stopping = false;
@@ -214,18 +339,39 @@ const runServer = async (options, loader, reload) => {
214
339
  }, 40);
215
340
  })
216
341
  : undefined;
217
- const server = createServer((request, response) => {
218
- void toWebRequest(request, options.host)
219
- .then((webRequest) => {
220
- const active = current.module;
221
- return active.fetch(webRequest, invocationFor(active, 'http'));
222
- })
223
- .then((webResponse) => sendWebResponse(webResponse, response))
342
+ const requests = new Map();
343
+ const responding = new Set();
344
+ const server = createServer((incoming, outgoing) => {
345
+ const exchange = { handler: new AbortController(), response: new AbortController() };
346
+ // A client that leaves early stops only its response. As behind the legacy host, the handler runs
347
+ // to completion, since an interrupted handler could stop between two side effects.
348
+ outgoing.once('close', () => {
349
+ if (!outgoing.writableFinished)
350
+ exchange.response.abort();
351
+ });
352
+ outgoing.once('finish', () => drainIncoming(incoming));
353
+ const module = current.module;
354
+ const served = (async () => {
355
+ // The deadline starts at arrival and the body streams in, so both bound the body read.
356
+ const response = await module.fetch(toWebRequest(incoming, options.host, exchange.handler.signal), invocationFor(module, 'http'));
357
+ responding.add(exchange);
358
+ await sendWebResponse(response, outgoing, exchange.response.signal);
359
+ })()
224
360
  .catch((error) => {
225
- response.statusCode = 500;
226
- response.end('Workflow request failed.');
227
361
  process.stderr.write(`${String(error)}\n`);
362
+ // A response already under way cannot become an error response.
363
+ if (responding.has(exchange))
364
+ outgoing.destroy();
365
+ else if (!outgoing.destroyed) {
366
+ outgoing.statusCode = 500;
367
+ outgoing.end('Workflow request failed.');
368
+ }
369
+ })
370
+ .finally(() => {
371
+ requests.delete(exchange);
372
+ responding.delete(exchange);
228
373
  });
374
+ requests.set(exchange, served);
229
375
  });
230
376
  const listening = Promise.withResolvers();
231
377
  server.once('error', listening.reject);
@@ -242,17 +388,20 @@ const runServer = async (options, loader, reload) => {
242
388
  process.once('SIGINT', () => shutdown.resolve(undefined));
243
389
  process.once('SIGTERM', () => shutdown.resolve(undefined));
244
390
  await shutdown.promise;
391
+ // One deadline bounds the whole shutdown, reload work and disposal included. It never holds the
392
+ // process open itself, but ends it even while a finalizer's timer or socket still would.
393
+ setTimeout(() => {
394
+ process.stderr.write(`Workflow shutdown passed its ${shutdownDeadline} ms deadline; exiting.\n`);
395
+ process.exit(1);
396
+ }, shutdownDeadline).unref();
245
397
  }
246
398
  finally {
247
399
  stopping = true;
248
400
  watcher?.close();
249
401
  clearTimeout(reloadTimer);
250
402
  await reloadWork;
251
- if (server.listening) {
252
- const closed = Promise.withResolvers();
253
- server.close((error) => (error === undefined ? closed.resolve(undefined) : closed.reject(error)));
254
- await closed.promise;
255
- }
403
+ if (server.listening)
404
+ await closeServer(server, requests, responding, shutdownGrace);
256
405
  await current.dispose();
257
406
  }
258
407
  };
@@ -260,20 +409,23 @@ const runDev = (options) => runServer(options, loadWorkflow, true);
260
409
  const runServe = (options) => runServer(options, loadBuiltWorkflow, false);
261
410
  const runInvoke = async (options) => {
262
411
  const loaded = await loadWorkflow(options.entrypoint);
412
+ // stdout carries only the response body; log lines go to stderr.
413
+ const module = loaded.module.withPlatform({ writeLog: (line) => process.stderr.write(`${line}\n`) });
263
414
  try {
264
415
  const headers = new Headers();
265
416
  if (options.body !== undefined)
266
417
  headers.set('content-type', 'application/json');
267
- const response = await loaded.module.fetch(new Request(`http://127.0.0.1${options.path}`, {
418
+ const response = await module.fetch(new Request(`http://127.0.0.1${options.path}`, {
268
419
  method: options.method,
269
420
  headers,
270
421
  body: options.method === 'GET' || options.method === 'HEAD' ? undefined : options.body,
271
- }), invocationFor(loaded.module, 'manual'));
422
+ }), invocationFor(module, 'manual'));
272
423
  process.stdout.write(new Uint8Array(await response.arrayBuffer()));
273
424
  if (!response.ok)
274
425
  process.exitCode = 1;
275
426
  }
276
427
  finally {
428
+ await module.dispose();
277
429
  await loaded.dispose();
278
430
  }
279
431
  };
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,17 @@
1
- export { Invocation, type InvocationContext, type InvocationTriggerKind } from './Invocation.js';
1
+ export { AxiosError, LegacyAxiosErrorFormat, toAxiosError, toAxiosErrorJson } from './AxiosError.js';
2
+ export { type ChildRequest, childMessageId, type Correlation, currentCorrelation, withCorrelation, withFreshTrace, } from './Correlation.js';
3
+ export { type OutboundFetch } from './HttpClient.js';
4
+ export type { InvocationContext, InvocationTriggerKind } from './Contract/Invocation.js';
5
+ export { ManifestResource, ResponsePolicy, TriggerKind, TriggerMetadata, WorkflowManifest, WorkflowManifestEndpoint, } from './Contract/Manifest.js';
6
+ export { HttpApiResource } from './HttpApiResource.js';
7
+ export { Invocation } from './Invocation.js';
8
+ export { type SpanLinesOptions, type SpanOutcome, withSpanLines } from './LogContext.js';
2
9
  export { type DeadlineExceededBody } from './Middleware.js';
3
- export { makeManifest, RUNTIME_API_VERSION, SDK_VERSION, type WorkflowManifest, type WorkflowManifestEndpoint, } from './Manifest.js';
4
- export { ResponsePolicy, Trigger, TriggerKind, TriggerMetadata } from './Trigger.js';
5
- export { workflow, type WorkflowModule, type WorkflowOptions } from './Workflow.js';
10
+ export { makeManifest, RUNTIME_API_VERSION, SDK_VERSION } from './Manifest.js';
11
+ export { registerSecrets } from './Redaction.js';
12
+ export { type AnyDeclaration, type Declaration, Resource, type ResourceSelection, ResourceType, Variable, } from './Resource.js';
13
+ export { type ResourceReader } from './RuntimeResources.js';
14
+ export { InvalidResourceError, ResourceNotFoundError, ResourceNotSelectableError, ResourcesUnauthorizedError, ResourcesUnavailableError, } from './ResourcesErrors.js';
15
+ export { Trigger } from './Trigger.js';
16
+ export { workflow, type WorkflowModule, type WorkflowOptions, type WorkflowPlatform } from './Workflow.js';
6
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrG,OAAO,EACL,KAAK,YAAY,EACjB,cAAc,EACd,KAAK,WAAW,EAChB,kBAAkB,EAClB,eAAe,EACf,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,QAAQ,EACR,KAAK,iBAAiB,EACtB,YAAY,EACZ,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,16 @@
1
+ export { AxiosError, LegacyAxiosErrorFormat, toAxiosError, toAxiosErrorJson } from './AxiosError.js';
2
+ export { childMessageId, currentCorrelation, withCorrelation, withFreshTrace, } from './Correlation.js';
3
+ export {} from './HttpClient.js';
4
+ export { ManifestResource, ResponsePolicy, TriggerKind, TriggerMetadata, WorkflowManifest, WorkflowManifestEndpoint, } from './Contract/Manifest.js';
5
+ export { HttpApiResource } from './HttpApiResource.js';
1
6
  export { Invocation } from './Invocation.js';
7
+ export { withSpanLines } from './LogContext.js';
2
8
  export {} from './Middleware.js';
3
- export { makeManifest, RUNTIME_API_VERSION, SDK_VERSION, } from './Manifest.js';
4
- export { ResponsePolicy, Trigger, TriggerKind, TriggerMetadata } from './Trigger.js';
9
+ export { makeManifest, RUNTIME_API_VERSION, SDK_VERSION } from './Manifest.js';
10
+ export { registerSecrets } from './Redaction.js';
11
+ export { Resource, ResourceType, Variable, } from './Resource.js';
12
+ export {} from './RuntimeResources.js';
13
+ export { InvalidResourceError, ResourceNotFoundError, ResourceNotSelectableError, ResourcesUnauthorizedError, ResourcesUnavailableError, } from './ResourcesErrors.js';
14
+ export { Trigger } from './Trigger.js';
5
15
  export { workflow } from './Workflow.js';
6
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsD,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAA6B,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,WAAW,GAGZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,QAAQ,EAA6C,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrG,OAAO,EAEL,cAAc,EAEd,kBAAkB,EAClB,eAAe,EACf,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAsB,MAAM,iBAAiB,CAAC;AAErD,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAA2C,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAA6B,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAGL,QAAQ,EAER,YAAY,EACZ,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAuB,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAoE,MAAM,eAAe,CAAC"}
package/dist/testing.d.ts CHANGED
@@ -1,5 +1,7 @@
1
- import type { InvocationContext } from './Invocation.js';
2
- import type { WorkflowModule } from './Workflow.js';
1
+ import { type Clock, type Schema } from 'effect';
2
+ import type { InvocationContext } from './Contract/Invocation.js';
3
+ import type { OutboundFetch } from './HttpClient.js';
4
+ import type { WorkflowModule, WorkflowPlatform } from './Workflow.js';
3
5
  export interface InvokeOptions {
4
6
  readonly request: Request;
5
7
  readonly context: InvocationContext;
@@ -7,4 +9,34 @@ export interface InvokeOptions {
7
9
  /** A complete invocation for tests. Override only the fields the test observes. */
8
10
  export declare const testInvocation: (overrides?: Partial<InvocationContext>) => InvocationContext;
9
11
  export declare const invoke: (module: WorkflowModule, options: InvokeOptions) => Promise<Response>;
12
+ /** What declared resources, variables, and resource types read in a test instead of the runtime API. */
13
+ export interface TestResources {
14
+ /** Resource key → its resolved value, secrets filled in, as the runtime API answers it. */
15
+ readonly values?: Readonly<Record<string, Schema.Json>>;
16
+ /** Variable key → its value. */
17
+ readonly variables?: Readonly<Record<string, string>>;
18
+ /** The key of the record a selection finds; `undefined` when no record matches. */
19
+ readonly select?: (resourceTypeKey: string, match: Readonly<Record<string, string>>) => string | undefined;
20
+ }
21
+ export interface TestPlatformOptions {
22
+ /** Values every `Config` read sees; the real environment is never read. */
23
+ readonly config?: Readonly<Record<string, string>>;
24
+ /** Answers the workflow's outbound requests; without it every outbound request fails. */
25
+ readonly fetch?: OutboundFetch;
26
+ /** Drives the invocation deadline, for example a `TestClock`. */
27
+ readonly clock?: Clock.Clock;
28
+ /**
29
+ * Answers declared resources; a read of anything absent fails with `ResourceNotFoundError`. Without it,
30
+ * declared resources read through the runtime API at `UNNBOUND_API_URL`, answered by `fetch`.
31
+ */
32
+ readonly resources?: TestResources;
33
+ }
34
+ export interface TestPlatform {
35
+ /** Pass to `module.withPlatform(platform)`. */
36
+ readonly platform: WorkflowPlatform;
37
+ /** Every JSON log line the workflow wrote, in order. */
38
+ readonly logs: Array<string>;
39
+ }
40
+ /** Platform services isolated from the process: no environment, network, or stdout. */
41
+ export declare const testPlatform: (options?: TestPlatformOptions) => TestPlatform;
10
42
  //# sourceMappingURL=testing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACrC;AAED,mFAAmF;AACnF,eAAO,MAAM,cAAc,eAAe,OAAO,CAAC,iBAAiB,CAAC,KAAQ,iBAU1E,CAAC;AAEH,eAAO,MAAM,MAAM,WAAY,cAAc,WAAW,aAAa,KAAG,OAAO,CAAC,QAAQ,CACxC,CAAC"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAoC,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACrC;AAED,mFAAmF;AACnF,eAAO,MAAM,cAAc,eAAe,OAAO,CAAC,iBAAiB,CAAC,KAAQ,iBAU1E,CAAC;AAEH,eAAO,MAAM,MAAM,WAAY,cAAc,WAAW,aAAa,KAAG,OAAO,CAAC,QAAQ,CACxC,CAAC;AAEjD,wGAAwG;AACxG,MAAM,WAAW,aAAa;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,gCAAgC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,mFAAmF;IACnF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;CAC5G;AAED,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,yFAAyF;IACzF,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC9B;AAuBD,uFAAuF;AACvF,eAAO,MAAM,YAAY,aAAa,mBAAmB,KAAQ,YAehE,CAAC"}