@relkit/runtime-hono 0.4.0 → 0.5.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 (250) hide show
  1. package/dist/agent-active-execution.d.ts +13 -0
  2. package/dist/agent-active-execution.d.ts.map +1 -0
  3. package/dist/agent-active-execution.js +8 -0
  4. package/dist/agent-active-execution.js.map +1 -0
  5. package/dist/agent-approval-coordinator.d.ts +20 -0
  6. package/dist/agent-approval-coordinator.d.ts.map +1 -0
  7. package/dist/agent-approval-coordinator.js +148 -0
  8. package/dist/agent-approval-coordinator.js.map +1 -0
  9. package/dist/agent-capability-negotiation.d.ts +2 -0
  10. package/dist/agent-capability-negotiation.d.ts.map +1 -0
  11. package/dist/agent-capability-negotiation.js +16 -0
  12. package/dist/agent-capability-negotiation.js.map +1 -0
  13. package/dist/agent-compatibility.d.ts +5 -0
  14. package/dist/agent-compatibility.d.ts.map +1 -0
  15. package/dist/agent-compatibility.js +47 -0
  16. package/dist/agent-compatibility.js.map +1 -0
  17. package/dist/agent-content-sink.d.ts +11 -0
  18. package/dist/agent-content-sink.d.ts.map +1 -0
  19. package/dist/agent-content-sink.js +132 -0
  20. package/dist/agent-content-sink.js.map +1 -0
  21. package/dist/agent-control-worker.d.ts +8 -0
  22. package/dist/agent-control-worker.d.ts.map +1 -0
  23. package/dist/agent-control-worker.js +131 -0
  24. package/dist/agent-control-worker.js.map +1 -0
  25. package/dist/agent-follow-up.d.ts +12 -0
  26. package/dist/agent-follow-up.d.ts.map +1 -0
  27. package/dist/agent-follow-up.js +106 -0
  28. package/dist/agent-follow-up.js.map +1 -0
  29. package/dist/agent-inspector-projection.d.ts +7 -0
  30. package/dist/agent-inspector-projection.d.ts.map +1 -0
  31. package/dist/agent-inspector-projection.js +121 -0
  32. package/dist/agent-inspector-projection.js.map +1 -0
  33. package/dist/agent-inspector.d.ts +5 -0
  34. package/dist/agent-inspector.d.ts.map +1 -0
  35. package/dist/agent-inspector.js +107 -0
  36. package/dist/agent-inspector.js.map +1 -0
  37. package/dist/agent-progress-sink.d.ts +10 -0
  38. package/dist/agent-progress-sink.d.ts.map +1 -0
  39. package/dist/agent-progress-sink.js +52 -0
  40. package/dist/agent-progress-sink.js.map +1 -0
  41. package/dist/agent-protocol-encoding.d.ts +3 -0
  42. package/dist/agent-protocol-encoding.d.ts.map +1 -0
  43. package/dist/agent-protocol-encoding.js +123 -0
  44. package/dist/agent-protocol-encoding.js.map +1 -0
  45. package/dist/agent-protocol-frame-state.d.ts +8 -0
  46. package/dist/agent-protocol-frame-state.d.ts.map +1 -0
  47. package/dist/agent-protocol-frame-state.js +124 -0
  48. package/dist/agent-protocol-frame-state.js.map +1 -0
  49. package/dist/agent-protocol-progress.d.ts +8 -0
  50. package/dist/agent-protocol-progress.d.ts.map +1 -0
  51. package/dist/agent-protocol-progress.js +5 -0
  52. package/dist/agent-protocol-progress.js.map +1 -0
  53. package/dist/agent-protocol-stream.d.ts +57 -0
  54. package/dist/agent-protocol-stream.d.ts.map +1 -0
  55. package/dist/agent-protocol-stream.js +77 -0
  56. package/dist/agent-protocol-stream.js.map +1 -0
  57. package/dist/agent-protocol-support.d.ts +19 -0
  58. package/dist/agent-protocol-support.d.ts.map +1 -0
  59. package/dist/agent-protocol-support.js +108 -0
  60. package/dist/agent-protocol-support.js.map +1 -0
  61. package/dist/agent-protocol-tool.d.ts +12 -0
  62. package/dist/agent-protocol-tool.d.ts.map +1 -0
  63. package/dist/agent-protocol-tool.js +65 -0
  64. package/dist/agent-protocol-tool.js.map +1 -0
  65. package/dist/agent-protocol.d.ts +4 -0
  66. package/dist/agent-protocol.d.ts.map +1 -0
  67. package/dist/agent-protocol.js +101 -0
  68. package/dist/agent-protocol.js.map +1 -0
  69. package/dist/agent-rpc-errors.d.ts +5 -0
  70. package/dist/agent-rpc-errors.d.ts.map +1 -0
  71. package/dist/agent-rpc-errors.js +65 -0
  72. package/dist/agent-rpc-errors.js.map +1 -0
  73. package/dist/agent-rpc-read.d.ts +42 -0
  74. package/dist/agent-rpc-read.d.ts.map +1 -0
  75. package/dist/agent-rpc-read.js +127 -0
  76. package/dist/agent-rpc-read.js.map +1 -0
  77. package/dist/agent-rpc-resume.d.ts +13 -0
  78. package/dist/agent-rpc-resume.d.ts.map +1 -0
  79. package/dist/agent-rpc-resume.js +72 -0
  80. package/dist/agent-rpc-resume.js.map +1 -0
  81. package/dist/agent-rpc-support.d.ts +44 -0
  82. package/dist/agent-rpc-support.d.ts.map +1 -0
  83. package/dist/agent-rpc-support.js +111 -0
  84. package/dist/agent-rpc-support.js.map +1 -0
  85. package/dist/agent-rpc-worker.d.ts +7 -0
  86. package/dist/agent-rpc-worker.d.ts.map +1 -0
  87. package/dist/agent-rpc-worker.js +135 -0
  88. package/dist/agent-rpc-worker.js.map +1 -0
  89. package/dist/agent-rpc-write.d.ts +6 -0
  90. package/dist/agent-rpc-write.d.ts.map +1 -0
  91. package/dist/agent-rpc-write.js +109 -0
  92. package/dist/agent-rpc-write.js.map +1 -0
  93. package/dist/agent-rpc.d.ts +21 -0
  94. package/dist/agent-rpc.d.ts.map +1 -0
  95. package/dist/agent-rpc.js +42 -0
  96. package/dist/agent-rpc.js.map +1 -0
  97. package/dist/agent-run-journal.d.ts +12 -0
  98. package/dist/agent-run-journal.d.ts.map +1 -0
  99. package/dist/agent-run-journal.js +96 -0
  100. package/dist/agent-run-journal.js.map +1 -0
  101. package/dist/agent-run-tasks.d.ts +3 -0
  102. package/dist/agent-run-tasks.d.ts.map +1 -0
  103. package/dist/agent-run-tasks.js +16 -0
  104. package/dist/agent-run-tasks.js.map +1 -0
  105. package/dist/agent-runtime.d.ts +17 -0
  106. package/dist/agent-runtime.d.ts.map +1 -0
  107. package/dist/agent-runtime.js +2 -0
  108. package/dist/agent-runtime.js.map +1 -0
  109. package/dist/api-docs.js +1 -1
  110. package/dist/api-docs.js.map +1 -1
  111. package/dist/auth.d.ts +3 -1
  112. package/dist/auth.d.ts.map +1 -1
  113. package/dist/auth.js +5 -1
  114. package/dist/auth.js.map +1 -1
  115. package/dist/bun.d.ts +2 -0
  116. package/dist/bun.d.ts.map +1 -0
  117. package/dist/bun.js +2 -0
  118. package/dist/bun.js.map +1 -0
  119. package/dist/client-authorization.d.ts +2 -0
  120. package/dist/client-authorization.d.ts.map +1 -0
  121. package/dist/client-authorization.js +21 -0
  122. package/dist/client-authorization.js.map +1 -0
  123. package/dist/client-identity.d.ts +24 -0
  124. package/dist/client-identity.d.ts.map +1 -0
  125. package/dist/client-identity.js +46 -0
  126. package/dist/client-identity.js.map +1 -0
  127. package/dist/create-app.d.ts +2 -0
  128. package/dist/create-app.d.ts.map +1 -1
  129. package/dist/create-app.js +10 -0
  130. package/dist/create-app.js.map +1 -1
  131. package/dist/index.d.ts +11 -0
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +11 -0
  134. package/dist/index.js.map +1 -1
  135. package/dist/internal-endpoint-paths.d.ts +4 -0
  136. package/dist/internal-endpoint-paths.d.ts.map +1 -0
  137. package/dist/internal-endpoint-paths.js +16 -0
  138. package/dist/internal-endpoint-paths.js.map +1 -0
  139. package/dist/internal-endpoints.d.ts +1 -3
  140. package/dist/internal-endpoints.d.ts.map +1 -1
  141. package/dist/internal-endpoints.js +4 -12
  142. package/dist/internal-endpoints.js.map +1 -1
  143. package/dist/jobs/authorization.d.ts +14 -0
  144. package/dist/jobs/authorization.d.ts.map +1 -0
  145. package/dist/jobs/authorization.js +60 -0
  146. package/dist/jobs/authorization.js.map +1 -0
  147. package/dist/jobs/common.d.ts +22 -0
  148. package/dist/jobs/common.d.ts.map +1 -0
  149. package/dist/jobs/common.js +127 -0
  150. package/dist/jobs/common.js.map +1 -0
  151. package/dist/jobs/cursors.d.ts +10 -0
  152. package/dist/jobs/cursors.d.ts.map +1 -0
  153. package/dist/jobs/cursors.js +64 -0
  154. package/dist/jobs/cursors.js.map +1 -0
  155. package/dist/jobs/handlers-mutations.d.ts +8 -0
  156. package/dist/jobs/handlers-mutations.d.ts.map +1 -0
  157. package/dist/jobs/handlers-mutations.js +73 -0
  158. package/dist/jobs/handlers-mutations.js.map +1 -0
  159. package/dist/jobs/handlers-read.d.ts +8 -0
  160. package/dist/jobs/handlers-read.d.ts.map +1 -0
  161. package/dist/jobs/handlers-read.js +70 -0
  162. package/dist/jobs/handlers-read.js.map +1 -0
  163. package/dist/jobs/handlers-stream.d.ts +7 -0
  164. package/dist/jobs/handlers-stream.d.ts.map +1 -0
  165. package/dist/jobs/handlers-stream.js +72 -0
  166. package/dist/jobs/handlers-stream.js.map +1 -0
  167. package/dist/jobs/handlers-validation.d.ts +6 -0
  168. package/dist/jobs/handlers-validation.d.ts.map +1 -0
  169. package/dist/jobs/handlers-validation.js +119 -0
  170. package/dist/jobs/handlers-validation.js.map +1 -0
  171. package/dist/jobs/handlers.d.ts +4 -0
  172. package/dist/jobs/handlers.d.ts.map +1 -0
  173. package/dist/jobs/handlers.js +4 -0
  174. package/dist/jobs/handlers.js.map +1 -0
  175. package/dist/jobs/projection-stream.d.ts +4 -0
  176. package/dist/jobs/projection-stream.d.ts.map +1 -0
  177. package/dist/jobs/projection-stream.js +82 -0
  178. package/dist/jobs/projection-stream.js.map +1 -0
  179. package/dist/jobs/projection-validation.d.ts +5 -0
  180. package/dist/jobs/projection-validation.d.ts.map +1 -0
  181. package/dist/jobs/projection-validation.js +143 -0
  182. package/dist/jobs/projection-validation.js.map +1 -0
  183. package/dist/jobs/projection.d.ts +11 -0
  184. package/dist/jobs/projection.d.ts.map +1 -0
  185. package/dist/jobs/projection.js +89 -0
  186. package/dist/jobs/projection.js.map +1 -0
  187. package/dist/jobs/rpc.d.ts +5 -0
  188. package/dist/jobs/rpc.d.ts.map +1 -0
  189. package/dist/jobs/rpc.js +115 -0
  190. package/dist/jobs/rpc.js.map +1 -0
  191. package/dist/jobs/support.d.ts +31 -0
  192. package/dist/jobs/support.d.ts.map +1 -0
  193. package/dist/jobs/support.js +144 -0
  194. package/dist/jobs/support.js.map +1 -0
  195. package/dist/jobs/types.d.ts +48 -0
  196. package/dist/jobs/types.d.ts.map +1 -0
  197. package/dist/jobs/types.js +22 -0
  198. package/dist/jobs/types.js.map +1 -0
  199. package/dist/materialize-routes-utils.d.ts.map +1 -1
  200. package/dist/materialize-routes-utils.js +12 -0
  201. package/dist/materialize-routes-utils.js.map +1 -1
  202. package/dist/materialize-routes-validation.d.ts +3 -0
  203. package/dist/materialize-routes-validation.d.ts.map +1 -0
  204. package/dist/materialize-routes-validation.js +28 -0
  205. package/dist/materialize-routes-validation.js.map +1 -0
  206. package/dist/materialize-routes.d.ts +21 -1
  207. package/dist/materialize-routes.d.ts.map +1 -1
  208. package/dist/materialize-routes.js +12 -28
  209. package/dist/materialize-routes.js.map +1 -1
  210. package/dist/native-stream.d.ts +3 -0
  211. package/dist/native-stream.d.ts.map +1 -0
  212. package/dist/native-stream.js +72 -0
  213. package/dist/native-stream.js.map +1 -0
  214. package/dist/realtime-rpc-support.d.ts +19 -0
  215. package/dist/realtime-rpc-support.d.ts.map +1 -0
  216. package/dist/realtime-rpc-support.js +63 -0
  217. package/dist/realtime-rpc-support.js.map +1 -0
  218. package/dist/realtime-rpc.d.ts +4 -0
  219. package/dist/realtime-rpc.d.ts.map +1 -0
  220. package/dist/realtime-rpc.js +134 -0
  221. package/dist/realtime-rpc.js.map +1 -0
  222. package/dist/realtime-runtime.d.ts +13 -0
  223. package/dist/realtime-runtime.d.ts.map +1 -0
  224. package/dist/realtime-runtime.js +2 -0
  225. package/dist/realtime-runtime.js.map +1 -0
  226. package/dist/rpc-identity.d.ts +10 -0
  227. package/dist/rpc-identity.d.ts.map +1 -0
  228. package/dist/rpc-identity.js +26 -0
  229. package/dist/rpc-identity.js.map +1 -0
  230. package/dist/rpc-response.d.ts +5 -0
  231. package/dist/rpc-response.d.ts.map +1 -0
  232. package/dist/rpc-response.js +45 -0
  233. package/dist/rpc-response.js.map +1 -0
  234. package/dist/rpc-route-types.d.ts +10 -0
  235. package/dist/rpc-route-types.d.ts.map +1 -0
  236. package/dist/rpc-route-types.js +50 -0
  237. package/dist/rpc-route-types.js.map +1 -0
  238. package/dist/rpc-websocket.d.ts +6 -0
  239. package/dist/rpc-websocket.d.ts.map +1 -0
  240. package/dist/rpc-websocket.js +48 -0
  241. package/dist/rpc-websocket.js.map +1 -0
  242. package/dist/rpc.d.ts +8 -0
  243. package/dist/rpc.d.ts.map +1 -1
  244. package/dist/rpc.js +46 -59
  245. package/dist/rpc.js.map +1 -1
  246. package/dist/transport-security.d.ts +19 -0
  247. package/dist/transport-security.d.ts.map +1 -0
  248. package/dist/transport-security.js +124 -0
  249. package/dist/transport-security.js.map +1 -0
  250. package/package.json +25 -11
@@ -0,0 +1,127 @@
1
+ import { assertJsonValue, isJsonValue } from "@relkit/contracts";
2
+ import { assertExpectedIdentity, assertRpcSecurity } from "../rpc-identity.js";
3
+ import { jobError } from "./support.js";
4
+ import { jobsRuntime } from "./types.js";
5
+ export const jobEnvelopeSchema = {
6
+ "~standard": {
7
+ version: 1,
8
+ vendor: "relkit-jobs-envelope",
9
+ validate(value) {
10
+ if (!isRecord(value))
11
+ return { issues: [{ message: "Job RPC input must be an object." }] };
12
+ assertJsonValue(value);
13
+ return { value };
14
+ },
15
+ },
16
+ };
17
+ export const jobItemSchema = {
18
+ "~standard": {
19
+ version: 1,
20
+ vendor: "relkit-jobs-frame",
21
+ validate(value) {
22
+ assertJsonValue(value);
23
+ return { value };
24
+ },
25
+ },
26
+ };
27
+ export function configFor(options) {
28
+ const config = jobsRuntime(options);
29
+ if (config === undefined)
30
+ throw jobError("RELKIT_JOB_RUN_NOT_FOUND", "Jobs runtime is unavailable.");
31
+ return config;
32
+ }
33
+ export async function guardJobRequest(options, context, input, operation) {
34
+ assertJobsNegotiation(options, context.hono.req.raw, context.rpcHeaders);
35
+ if (options.clientIdentity !== undefined) {
36
+ await assertExpectedIdentity(context, options.clientIdentity, expectedIdentity(input));
37
+ }
38
+ if (isMutation(operation) && options.transportSecurity !== undefined) {
39
+ await assertRpcSecurity(context, options.transportSecurity);
40
+ }
41
+ }
42
+ export function recordInput(value) {
43
+ if (!isRecord(value))
44
+ throw jobError("RELKIT_JOB_ACCESS_DENIED", "Job request is invalid.");
45
+ return value;
46
+ }
47
+ export function envelopeInput(value, allowed) {
48
+ const input = recordInput(value);
49
+ const fields = new Set(allowed);
50
+ if (Object.keys(input).some((key) => !fields.has(key))) {
51
+ throw jobError("RELKIT_JOB_ACCESS_DENIED", "Job request contains an unsupported field.");
52
+ }
53
+ return input;
54
+ }
55
+ export function requiredText(value, name) {
56
+ if (typeof value !== "string" ||
57
+ value.length === 0 ||
58
+ new TextEncoder().encode(value).byteLength > 256) {
59
+ throw jobError("RELKIT_JOB_ACCESS_DENIED", `Job ${name} is invalid.`);
60
+ }
61
+ return value;
62
+ }
63
+ export function optionalText(value, name) {
64
+ return value === undefined ? undefined : requiredText(value, name);
65
+ }
66
+ export function optionalCursor(value, name) {
67
+ if (value === undefined)
68
+ return undefined;
69
+ if (typeof value !== "string" ||
70
+ value.length === 0 ||
71
+ new TextEncoder().encode(value).byteLength > 4096) {
72
+ throw jobError("RELKIT_JOB_CURSOR_INVALID", `Job ${name} is invalid.`);
73
+ }
74
+ return value;
75
+ }
76
+ export function expectedIdentity(value) {
77
+ if (value.expectedIdentity === undefined)
78
+ return undefined;
79
+ const identity = recordInput(value.expectedIdentity);
80
+ if (Object.keys(identity).some((key) => key !== "identityScope" && key !== "sessionEpoch")) {
81
+ throw jobError("RELKIT_JOB_ACCESS_DENIED", "Job identity metadata is invalid.");
82
+ }
83
+ return {
84
+ identityScope: requiredText(identity.identityScope, "identity scope"),
85
+ sessionEpoch: requiredText(identity.sessionEpoch, "session epoch"),
86
+ };
87
+ }
88
+ export function operationOptions(value) {
89
+ if (value === undefined)
90
+ return {};
91
+ const options = recordInput(value);
92
+ for (const key of Object.keys(options)) {
93
+ if (!["operationId", "idempotencyKey", "delay", "at", "tags", "correlationId"].includes(key)) {
94
+ throw jobError("RELKIT_JOB_ACCESS_DENIED", "Job trigger options contain an unsupported field.");
95
+ }
96
+ }
97
+ return options;
98
+ }
99
+ export function isMutation(operation) {
100
+ return operation === "trigger" || operation === "cancel" || operation === "retry";
101
+ }
102
+ export function assertJobsNegotiation(options, request, rpcHeaders) {
103
+ const config = jobsRuntime(options);
104
+ const version = request.headers.get("x-relkit-jobs-protocol") ?? header(rpcHeaders, "x-relkit-jobs-protocol");
105
+ if (version !== null && version !== String(config?.protocolVersion ?? 1)) {
106
+ throw jobError("RELKIT_JOB_PROTOCOL_UNSUPPORTED", "The jobs protocol version is unsupported.");
107
+ }
108
+ const fingerprint = request.headers.get("x-relkit-public-fingerprint") ??
109
+ header(rpcHeaders, "x-relkit-public-fingerprint");
110
+ if (fingerprint !== null &&
111
+ config?.publicFingerprint !== undefined &&
112
+ fingerprint !== config.publicFingerprint) {
113
+ throw jobError("RELKIT_JOB_PUBLIC_CONTRACT_STALE", "The public job contract is stale.");
114
+ }
115
+ }
116
+ function header(headers, name) {
117
+ if (headers === undefined)
118
+ return null;
119
+ const entry = Object.entries(headers).find(([key]) => key.toLowerCase() === name);
120
+ if (entry === undefined)
121
+ return null;
122
+ return Array.isArray(entry[1]) ? (entry[1][0] ?? null) : (entry[1] ?? null);
123
+ }
124
+ function isRecord(value) {
125
+ return value !== null && typeof value === "object" && !Array.isArray(value);
126
+ }
127
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/jobs/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { JsonValue } from "@relkit/contracts";
2
+ import type { JobClientOperation, RunPage, RunSnapshot, RunWatchFrame } from "@relkit/contracts/jobs";
3
+ import type { TaskJobNode } from "@relkit/graph";
4
+ import type { JobsRpcRuntime, TrustedJobScope } from "./types.js";
5
+ export declare function decodeJobCursor(config: JobsRpcRuntime, trusted: TrustedJobScope, job: TaskJobNode, operation: JobClientOperation, filters: JsonValue, cursor: string | undefined): string | undefined;
6
+ export declare function encodeJobCursor(config: JobsRpcRuntime, trusted: TrustedJobScope, job: TaskJobNode, operation: JobClientOperation, filters: JsonValue, position: string): string;
7
+ export declare function projectPageCursor(page: RunPage<RunSnapshot>, config: JobsRpcRuntime, trusted: TrustedJobScope, job: TaskJobNode, filters: JsonValue): RunPage<RunSnapshot>;
8
+ export declare function projectWatchCursor(frame: RunWatchFrame<RunSnapshot>, config: JobsRpcRuntime, trusted: TrustedJobScope, job: TaskJobNode, filters: JsonValue): RunWatchFrame<RunSnapshot>;
9
+ export declare function decodeCursorFilters(value: unknown): JsonValue;
10
+ //# sourceMappingURL=cursors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursors.d.ts","sourceRoot":"","sources":["../../src/jobs/cursors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EACV,kBAAkB,EAClB,OAAO,EACP,WAAW,EACX,aAAa,EACd,MAAM,wBAAwB,CAAC;AAOhC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,GAAG,SAAS,CAapB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CASR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,EAC1B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,WAAW,CAAC,CAOtB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,EACjC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,SAAS,GACjB,aAAa,CAAC,WAAW,CAAC,CAM5B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAM7D"}
@@ -0,0 +1,64 @@
1
+ import { createJobCursor, readJobCursor, } from "@relkit/jobs";
2
+ import { jobError } from "./support.js";
3
+ export function decodeJobCursor(config, trusted, job, operation, filters, cursor) {
4
+ if (cursor === undefined)
5
+ return undefined;
6
+ try {
7
+ const value = readJobCursor(cursor, binding(config, trusted, job, operation, filters), cursorOptions(config));
8
+ if (typeof value.position !== "string")
9
+ throw new Error("Cursor position is not text.");
10
+ return value.position;
11
+ }
12
+ catch {
13
+ throw jobError("RELKIT_JOB_CURSOR_INVALID", "Job cursor is invalid.");
14
+ }
15
+ }
16
+ export function encodeJobCursor(config, trusted, job, operation, filters, position) {
17
+ try {
18
+ return createJobCursor({ ...binding(config, trusted, job, operation, filters), position }, cursorOptions(config));
19
+ }
20
+ catch {
21
+ throw jobError("RELKIT_JOB_CURSOR_INVALID", "Job cursor is invalid.");
22
+ }
23
+ }
24
+ export function projectPageCursor(page, config, trusted, job, filters) {
25
+ return Object.freeze({
26
+ ...page,
27
+ ...(page.nextCursor === undefined
28
+ ? {}
29
+ : { nextCursor: encodeJobCursor(config, trusted, job, "list", filters, page.nextCursor) }),
30
+ });
31
+ }
32
+ export function projectWatchCursor(frame, config, trusted, job, filters) {
33
+ if (frame.cursor === undefined)
34
+ return frame;
35
+ return {
36
+ ...frame,
37
+ cursor: encodeJobCursor(config, trusted, job, "watch", filters, frame.cursor),
38
+ };
39
+ }
40
+ export function decodeCursorFilters(value) {
41
+ if (value === undefined)
42
+ return {};
43
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
44
+ throw jobError("RELKIT_JOB_CURSOR_INVALID", "Job cursor filters are invalid.");
45
+ }
46
+ return value;
47
+ }
48
+ function binding(config, trusted, job, operation, filters) {
49
+ return {
50
+ application: trusted.application,
51
+ environment: trusted.environment,
52
+ scope: trusted.scope,
53
+ ...(trusted.subject === undefined ? {} : { subject: trusted.subject }),
54
+ jobId: job.jobId,
55
+ operation,
56
+ filters,
57
+ schema: config.publicFingerprint ?? "relkit.jobs.v1",
58
+ position: null,
59
+ };
60
+ }
61
+ function cursorOptions(config) {
62
+ return config.cursorSecret === undefined ? undefined : { key: config.cursorSecret };
63
+ }
64
+ //# sourceMappingURL=cursors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursors.js","sourceRoot":"","sources":["../../src/jobs/cursors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { RunCancellationReceipt, RunHandle, RunRetryReceipt } from "@relkit/contracts/jobs";
2
+ import type { TaskJobNode } from "@relkit/graph";
3
+ import type { RouteMaterializationOptions } from "../materialize-routes.js";
4
+ import type { RpcContext } from "../rpc.js";
5
+ export declare function triggerJob(options: RouteMaterializationOptions, context: RpcContext, job: TaskJobNode, value: unknown, signal?: AbortSignal): Promise<RunHandle>;
6
+ export declare function cancelJobRun(options: RouteMaterializationOptions, context: RpcContext, job: TaskJobNode, value: unknown, signal?: AbortSignal): Promise<RunCancellationReceipt>;
7
+ export declare function retryJobRun(options: RouteMaterializationOptions, context: RpcContext, job: TaskJobNode, value: unknown, signal?: AbortSignal): Promise<RunRetryReceipt>;
8
+ //# sourceMappingURL=handlers-mutations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers-mutations.d.ts","sourceRoot":"","sources":["../../src/jobs/handlers-mutations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQjG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAqB5C,wBAAsB,UAAU,CAC9B,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,CAuCpB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,sBAAsB,CAAC,CAiDjC;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC,CA0C1B"}
@@ -0,0 +1,73 @@
1
+ import { createJobsControls, decodeJobWire, prepareCanonicalSubmission, submitPreparedSubmission, validateTaskInput, } from "@relkit/jobs";
2
+ import { assertGrantLive, authorizeJobOperation } from "./authorization.js";
3
+ import { configFor, envelopeInput, guardJobRequest, operationOptions, requiredText, } from "./common.js";
4
+ import { assertRunForJob, descriptorFor, jobError, runtimeFor, scopedRuntime, trustedScopeFor, } from "./support.js";
5
+ import { projectCancellation, projectRetry } from "./projection.js";
6
+ import { readRun, validateCanonicalRun } from "./handlers-validation.js";
7
+ import { jobPolicy } from "./types.js";
8
+ export async function triggerJob(options, context, job, value, signal) {
9
+ const input = envelopeInput(value, ["input", "options", "expectedIdentity"]);
10
+ await guardJobRequest(options, context, input, "trigger");
11
+ const config = configFor(options);
12
+ const descriptor = await descriptorFor(config, job);
13
+ const runtime = await runtimeFor(config, job);
14
+ const validated = await validateTaskInput(descriptor.task.input, input.input);
15
+ const canonicalInput = decodeJobWire(validated.wire);
16
+ const trusted = await trustedScopeFor(config, context, job, "trigger", canonicalInput ?? null);
17
+ const admission = await prepareCanonicalSubmission(scopedRuntime(runtime, trusted.scope), descriptor.task, validated.wire, operationOptions(input.options), descriptor);
18
+ const authorized = await authorizeJobOperation(config, context, job, descriptor, "trigger", admission.input, undefined, signal);
19
+ const finalRuntime = scopedRuntime(runtime, authorized.grant.scope);
20
+ const finalAdmission = authorized.grant.scope === trusted.scope
21
+ ? admission
22
+ : await prepareCanonicalSubmission(finalRuntime, descriptor.task, validated.wire, operationOptions(input.options), descriptor);
23
+ assertGrantLive(authorized.grant);
24
+ return submitPreparedSubmission(finalRuntime, finalAdmission, signal);
25
+ }
26
+ export async function cancelJobRun(options, context, job, value, signal) {
27
+ const input = envelopeInput(value, ["runId", "operationId", "reason", "expectedIdentity"]);
28
+ await guardJobRequest(options, context, input, "cancel");
29
+ const config = configFor(options);
30
+ const descriptor = await descriptorFor(config, job);
31
+ const runtime = await runtimeFor(config, job);
32
+ const runId = requiredText(input.runId, "run ID");
33
+ const operationId = requiredText(input.operationId, "operation ID");
34
+ const trusted = await trustedScopeFor(config, context, job, "cancel");
35
+ const initial = await authorizeJobOperation(config, context, job, descriptor, "cancel", undefined, undefined, signal, runId);
36
+ const observed = await readRun(runtime, initial.grant.scope, runId, signal);
37
+ const authorized = await authorizeJobOperation(config, context, job, descriptor, "cancel", undefined, observed, signal, runId);
38
+ assertRunForJob(observed, job, { ...trusted, scope: authorized.grant.scope });
39
+ assertGrantLive(authorized.grant);
40
+ const receipt = await createJobsControls(scopedRuntime(runtime, authorized.grant.scope)).cancel(runId, {
41
+ operationId,
42
+ ...(input.reason === undefined ? {} : { reason: requiredText(input.reason, "reason") }),
43
+ ...(signal === undefined ? {} : { signal }),
44
+ });
45
+ if (receipt.run !== undefined) {
46
+ if (receipt.run.runId !== runId)
47
+ throw jobError("RELKIT_JOB_ACCESS_DENIED", "Job cancellation receipt is unavailable.");
48
+ assertRunForJob(receipt.run, job, { ...trusted, scope: authorized.grant.scope });
49
+ await validateCanonicalRun(descriptor, receipt.run);
50
+ }
51
+ return projectCancellation(receipt, jobPolicy(job), descriptor);
52
+ }
53
+ export async function retryJobRun(options, context, job, value, signal) {
54
+ const input = envelopeInput(value, ["runId", "operationId", "expectedIdentity"]);
55
+ await guardJobRequest(options, context, input, "retry");
56
+ const config = configFor(options);
57
+ const descriptor = await descriptorFor(config, job);
58
+ const runtime = await runtimeFor(config, job);
59
+ const runId = requiredText(input.runId, "run ID");
60
+ const operationId = requiredText(input.operationId, "operation ID");
61
+ const trusted = await trustedScopeFor(config, context, job, "retry");
62
+ const initial = await authorizeJobOperation(config, context, job, descriptor, "retry", undefined, undefined, signal, runId);
63
+ const observed = await readRun(runtime, initial.grant.scope, runId, signal);
64
+ const authorized = await authorizeJobOperation(config, context, job, descriptor, "retry", undefined, observed, signal, runId);
65
+ assertRunForJob(observed, job, { ...trusted, scope: authorized.grant.scope });
66
+ assertGrantLive(authorized.grant);
67
+ const receipt = await createJobsControls(scopedRuntime(runtime, authorized.grant.scope)).retry(runId, {
68
+ operationId,
69
+ ...(signal === undefined ? {} : { signal }),
70
+ });
71
+ return projectRetry(receipt, job);
72
+ }
73
+ //# sourceMappingURL=handlers-mutations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers-mutations.js","sourceRoot":"","sources":["../../src/jobs/handlers-mutations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { RunPage, RunSnapshot, RunWatchFrame } from "@relkit/contracts/jobs";
2
+ import type { TaskJobNode } from "@relkit/graph";
3
+ import type { RouteMaterializationOptions } from "../materialize-routes.js";
4
+ import type { RpcContext } from "../rpc.js";
5
+ export declare function getJobRun(options: RouteMaterializationOptions, context: RpcContext, job: TaskJobNode, value: unknown, signal?: AbortSignal): Promise<RunSnapshot>;
6
+ export declare function listJobRuns(options: RouteMaterializationOptions, context: RpcContext, job: TaskJobNode, value: unknown, signal?: AbortSignal): Promise<RunPage<RunSnapshot>>;
7
+ export declare function watchJobRun(options: RouteMaterializationOptions, context: RpcContext, job: TaskJobNode, value: unknown, signal?: AbortSignal): Promise<AsyncIterable<RunWatchFrame<RunSnapshot>>>;
8
+ //# sourceMappingURL=handlers-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers-read.d.ts","sourceRoot":"","sources":["../../src/jobs/handlers-read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEhG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AA2B5C,wBAAsB,SAAS,CAC7B,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,CAmCtB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAuC/B;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CA+CpD"}
@@ -0,0 +1,70 @@
1
+ import { assertJsonValue } from "@relkit/contracts";
2
+ import { createJobsControls } from "@relkit/jobs";
3
+ import { authorizeJobOperation, assertGrantLive } from "./authorization.js";
4
+ import { configFor, envelopeInput, guardJobRequest, optionalCursor, recordInput, requiredText, } from "./common.js";
5
+ import { decodeJobCursor, encodeJobCursor, projectPageCursor, projectWatchCursor, } from "./cursors.js";
6
+ import { assertRunForJob, descriptorFor, runtimeFor, scopedRuntime, trustedScopeFor, } from "./support.js";
7
+ import { jobPolicy } from "./types.js";
8
+ import { projectPage, projectSnapshot, projectWatchFrame } from "./projection.js";
9
+ import { queryInput, readRun, validateCanonicalRun } from "./handlers-validation.js";
10
+ export async function getJobRun(options, context, job, value, signal) {
11
+ const input = envelopeInput(value, ["runId", "expectedIdentity"]);
12
+ await guardJobRequest(options, context, input, "get");
13
+ const config = configFor(options);
14
+ const descriptor = await descriptorFor(config, job);
15
+ const runtime = await runtimeFor(config, job);
16
+ const runId = requiredText(input.runId, "run ID");
17
+ const trusted = await trustedScopeFor(config, context, job, "get");
18
+ const initial = await authorizeJobOperation(config, context, job, descriptor, "get", undefined, undefined, signal, runId);
19
+ const observed = await readRun(runtime, initial.grant.scope, runId, signal);
20
+ const authorized = await authorizeJobOperation(config, context, job, descriptor, "get", undefined, observed, signal, runId);
21
+ const owner = { ...trusted, scope: authorized.grant.scope };
22
+ assertRunForJob(observed, job, owner);
23
+ await validateCanonicalRun(descriptor, observed);
24
+ return projectSnapshot(observed, jobPolicy(job), descriptor);
25
+ }
26
+ export async function listJobRuns(options, context, job, value, signal) {
27
+ const input = envelopeInput(value, ["query", "expectedIdentity"]);
28
+ await guardJobRequest(options, context, input, "list");
29
+ const config = configFor(options);
30
+ const descriptor = await descriptorFor(config, job);
31
+ const runtime = await runtimeFor(config, job);
32
+ const trusted = await trustedScopeFor(config, context, job, "list");
33
+ const authorized = await authorizeJobOperation(config, context, job, descriptor, "list", undefined, undefined, signal);
34
+ const requestedQuery = queryInput(input.query);
35
+ const { cursor: requestedCursor, ...requestedFilters } = requestedQuery;
36
+ const filters = { ...requestedFilters, jobId: job.jobId };
37
+ assertJsonValue(filters);
38
+ const owner = { ...trusted, scope: authorized.grant.scope };
39
+ const cursor = decodeJobCursor(config, owner, job, "list", filters, requestedCursor);
40
+ const page = await createJobsControls(scopedRuntime(runtime, authorized.grant.scope)).list({ ...filters, ...(cursor === undefined ? {} : { cursor }) }, signal === undefined ? {} : { signal });
41
+ assertGrantLive(authorized.grant);
42
+ for (const run of page.items) {
43
+ assertRunForJob(run, job, owner);
44
+ await validateCanonicalRun(descriptor, run);
45
+ }
46
+ return projectPageCursor(projectPage(page, jobPolicy(job), descriptor), config, owner, job, filters);
47
+ }
48
+ export async function watchJobRun(options, context, job, value, signal) {
49
+ const input = envelopeInput(value, ["runId", "after", "expectedIdentity"]);
50
+ await guardJobRequest(options, context, input, "watch");
51
+ const config = configFor(options);
52
+ const descriptor = await descriptorFor(config, job);
53
+ const runtime = await runtimeFor(config, job);
54
+ const runId = requiredText(input.runId, "run ID");
55
+ const trusted = await trustedScopeFor(config, context, job, "watch");
56
+ const authorized = await authorizeJobOperation(config, context, job, descriptor, "watch", undefined, undefined, signal, runId);
57
+ const owner = { ...trusted, scope: authorized.grant.scope };
58
+ const filters = { runId };
59
+ const after = decodeJobCursor(config, owner, job, "watch", filters, optionalCursor(input.after, "cursor"));
60
+ const source = createJobsControls(scopedRuntime(runtime, owner.scope)).observe({ runId, ...(after === undefined ? {} : { after }) }, signal === undefined ? {} : { signal });
61
+ return (async function* () {
62
+ for await (const frame of source) {
63
+ assertGrantLive(authorized.grant);
64
+ assertRunForJob(frame.run, job, owner);
65
+ await validateCanonicalRun(descriptor, frame.run);
66
+ yield projectWatchCursor(projectWatchFrame(frame, jobPolicy(job), descriptor), config, owner, job, filters);
67
+ }
68
+ })();
69
+ }
70
+ //# sourceMappingURL=handlers-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers-read.js","sourceRoot":"","sources":["../../src/jobs/handlers-read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { JsonValue } from "@relkit/contracts";
2
+ import type { NamedStreamFrame } from "@relkit/contracts/jobs";
3
+ import type { TaskJobNode } from "@relkit/graph";
4
+ import type { RouteMaterializationOptions } from "../materialize-routes.js";
5
+ import type { RpcContext } from "../rpc.js";
6
+ export declare function streamJobRun(options: RouteMaterializationOptions, context: RpcContext, job: TaskJobNode, value: unknown, signal?: AbortSignal): Promise<AsyncIterable<NamedStreamFrame<JsonValue>>>;
7
+ //# sourceMappingURL=handlers-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers-stream.d.ts","sourceRoot":"","sources":["../../src/jobs/handlers-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAc5C,wBAAsB,YAAY,CAChC,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAyDrD"}
@@ -0,0 +1,72 @@
1
+ import { TASK_ITEM_MAX_BYTES, validateCanonicalOutput } from "@relkit/jobs";
2
+ import { authorizeJobOperation, assertGrantLive } from "./authorization.js";
3
+ import { configFor, envelopeInput, guardJobRequest, optionalCursor, requiredText, } from "./common.js";
4
+ import { decodeJobCursor, encodeJobCursor } from "./cursors.js";
5
+ import { descriptorFor, jobError, runtimeFor, trustedScopeFor } from "./support.js";
6
+ import { jobPolicy } from "./types.js";
7
+ import { projectStreamFrame } from "./projection.js";
8
+ export async function streamJobRun(options, context, job, value, signal) {
9
+ const input = envelopeInput(value, ["runId", "name", "after", "expectedIdentity"]);
10
+ await guardJobRequest(options, context, input, "stream");
11
+ const config = configFor(options);
12
+ const descriptor = await descriptorFor(config, job);
13
+ const runtime = await runtimeFor(config, job);
14
+ const runId = requiredText(input.runId, "run ID");
15
+ const name = requiredText(input.name, "stream name");
16
+ const policy = jobPolicy(job);
17
+ if (!policy.streams.includes(name))
18
+ throw jobError("RELKIT_JOB_ACCESS_DENIED", "Job stream was not found.");
19
+ const trusted = await trustedScopeFor(config, context, job, "stream");
20
+ const authorized = await authorizeJobOperation(config, context, job, descriptor, "stream", undefined, undefined, signal, runId, name);
21
+ const owner = { ...trusted, scope: authorized.grant.scope };
22
+ const filters = { runId, name };
23
+ const after = decodeJobCursor(config, owner, job, "stream", filters, optionalCursor(input.after, "cursor"));
24
+ const source = nativeStream(runtime, runId, name, after, signal, owner.scope);
25
+ return (async function* () {
26
+ for await (const frame of source) {
27
+ assertGrantLive(authorized.grant);
28
+ const streamSchema = descriptor.task.streams?.[name];
29
+ if (frameIsChunk(frame) && streamSchema !== undefined) {
30
+ try {
31
+ await validateCanonicalOutput(streamSchema, frame.item, TASK_ITEM_MAX_BYTES);
32
+ }
33
+ catch {
34
+ throw jobError("RELKIT_JOB_ACCESS_DENIED", "Job stream data is not available.");
35
+ }
36
+ }
37
+ const projected = projectStreamFrame(frame, runId, name);
38
+ if (!("cursor" in projected) || projected.cursor === undefined) {
39
+ yield projected;
40
+ continue;
41
+ }
42
+ yield {
43
+ ...projected,
44
+ cursor: encodeJobCursor(config, owner, job, "stream", filters, projected.cursor),
45
+ };
46
+ }
47
+ })();
48
+ }
49
+ function nativeStream(runtime, runId, name, after, signal, scope) {
50
+ const streams = runtime.adapter.streams;
51
+ if (streams === undefined)
52
+ throw jobError("RELKIT_JOB_STREAM_UNSUPPORTED", "Job streams are unavailable.");
53
+ const candidate = streams;
54
+ const method = typeof candidate.observe === "function" ? candidate.observe : candidate.stream;
55
+ if (typeof method !== "function")
56
+ throw jobError("RELKIT_JOB_STREAM_UNSUPPORTED", "Job streams are unavailable.");
57
+ const source = method({ runId, name, ...(after === undefined ? {} : { after }) }, runtime.operationContext({ signal: signal ?? new AbortController().signal, scope }));
58
+ if (!isAsyncIterable(source))
59
+ throw jobError("RELKIT_JOB_STREAM_UNSUPPORTED", "Job stream is invalid.");
60
+ return source;
61
+ }
62
+ function frameIsChunk(value) {
63
+ return (value !== null &&
64
+ typeof value === "object" &&
65
+ value.kind === "chunk");
66
+ }
67
+ function isAsyncIterable(value) {
68
+ return (value !== null &&
69
+ typeof value === "object" &&
70
+ typeof value[Symbol.asyncIterator] === "function");
71
+ }
72
+ //# sourceMappingURL=handlers-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers-stream.js","sourceRoot":"","sources":["../../src/jobs/handlers-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { RunListQuery, RunSnapshot } from "@relkit/contracts/jobs";
2
+ import { type JobDescriptorAny, type JobsRuntime } from "@relkit/jobs";
3
+ export declare function validateCanonicalRun(descriptor: JobDescriptorAny, run: RunSnapshot): Promise<void>;
4
+ export declare function readRun(runtime: JobsRuntime, scope: string, runId: string, signal?: AbortSignal): Promise<RunSnapshot>;
5
+ export declare function queryInput(value: unknown): RunListQuery;
6
+ //# sourceMappingURL=handlers-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers-validation.d.ts","sourceRoot":"","sources":["../../src/jobs/handlers-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAKtB,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,gBAAgB,EAC5B,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,CAUtB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAsEvD"}