@t4h.framework/dev 0.14.2 → 0.15.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 (187) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +96 -45
  3. package/dist/AppProcess.d.ts +36 -0
  4. package/dist/AppProcess.js +126 -0
  5. package/dist/AppProcess.js.map +1 -0
  6. package/dist/Server.d.ts +41 -0
  7. package/dist/Server.js +168 -0
  8. package/dist/Server.js.map +1 -0
  9. package/dist/constants/server.d.ts +9 -0
  10. package/dist/constants/server.js +10 -0
  11. package/dist/constants/server.js.map +1 -0
  12. package/dist/http/create-app.d.ts +16 -0
  13. package/dist/http/create-app.js +134 -0
  14. package/dist/http/create-app.js.map +1 -0
  15. package/dist/http/helpers/to-http-error.d.ts +8 -0
  16. package/dist/http/helpers/to-http-error.js +9 -0
  17. package/dist/http/helpers/to-http-error.js.map +1 -0
  18. package/dist/http/middlewares/error-handler.middleware.d.ts +2 -0
  19. package/dist/http/middlewares/error-handler.middleware.js +27 -0
  20. package/dist/http/middlewares/error-handler.middleware.js.map +1 -0
  21. package/dist/http/middlewares/project-manifest.middleware.d.ts +11 -0
  22. package/dist/http/middlewares/project-manifest.middleware.js +11 -0
  23. package/dist/http/middlewares/project-manifest.middleware.js.map +1 -0
  24. package/dist/http/middlewares/read-json-body.middleware.d.ts +6 -0
  25. package/dist/http/middlewares/read-json-body.middleware.js +22 -0
  26. package/dist/http/middlewares/read-json-body.middleware.js.map +1 -0
  27. package/dist/http/middlewares/workflow-authorization.middleware.d.ts +12 -0
  28. package/dist/http/middlewares/workflow-authorization.middleware.js +28 -0
  29. package/dist/http/middlewares/workflow-authorization.middleware.js.map +1 -0
  30. package/dist/index.d.ts +3 -15
  31. package/dist/index.js +2 -15
  32. package/dist/index.js.map +1 -1
  33. package/dist/models/JSONRPCClient.d.ts +2 -0
  34. package/dist/models/JSONRPCClient.js +21 -4
  35. package/dist/models/JSONRPCClient.js.map +1 -1
  36. package/dist/models/JSONRPCError.d.ts +13 -0
  37. package/dist/models/JSONRPCError.js +11 -0
  38. package/dist/models/JSONRPCError.js.map +1 -0
  39. package/dist/models/JSONRPCServer.d.ts +2 -0
  40. package/dist/models/JSONRPCServer.js +10 -2
  41. package/dist/models/JSONRPCServer.js.map +1 -1
  42. package/dist/models/WorkflowAuthorizationMissingError.d.ts +5 -0
  43. package/dist/models/WorkflowAuthorizationMissingError.js +9 -0
  44. package/dist/models/WorkflowAuthorizationMissingError.js.map +1 -0
  45. package/dist/models/WorkflowRun.d.ts +28 -15
  46. package/dist/models/WorkflowRun.js +17 -8
  47. package/dist/models/WorkflowRun.js.map +1 -1
  48. package/dist/models/WorkflowRunActivity.d.ts +40 -27
  49. package/dist/models/WorkflowRunActivity.js +46 -34
  50. package/dist/models/WorkflowRunActivity.js.map +1 -1
  51. package/dist/models/claims/DevHttpClientRequestClaim.js +4 -5
  52. package/dist/models/claims/DevHttpClientRequestClaim.js.map +1 -1
  53. package/dist/models/claims/DevORMClaim.d.ts +15 -4
  54. package/dist/models/claims/DevORMClaim.js +128 -29
  55. package/dist/models/claims/DevORMClaim.js.map +1 -1
  56. package/dist/models/claims/DevWorkflowBatchClaim.js +2 -3
  57. package/dist/models/claims/DevWorkflowBatchClaim.js.map +1 -1
  58. package/dist/models/claims/DevWorkflowClaim.d.ts +1 -1
  59. package/dist/models/claims/DevWorkflowClaim.js +6 -11
  60. package/dist/models/claims/DevWorkflowClaim.js.map +1 -1
  61. package/dist/repositories/WorkflowRun.repository.d.ts +41 -6
  62. package/dist/repositories/WorkflowRun.repository.js +204 -11
  63. package/dist/repositories/WorkflowRun.repository.js.map +1 -1
  64. package/dist/repositories/WorkflowRunActivity.repository.d.ts +19 -6
  65. package/dist/repositories/WorkflowRunActivity.repository.js +73 -23
  66. package/dist/repositories/WorkflowRunActivity.repository.js.map +1 -1
  67. package/dist/repositories/WorkflowRunAsyncActivityPending.repository.d.ts +39 -0
  68. package/dist/repositories/WorkflowRunAsyncActivityPending.repository.js +160 -0
  69. package/dist/repositories/WorkflowRunAsyncActivityPending.repository.js.map +1 -0
  70. package/dist/services/ActivityRegistry.service.d.ts +7 -0
  71. package/dist/services/ActivityRegistry.service.js +32 -0
  72. package/dist/services/ActivityRegistry.service.js.map +1 -0
  73. package/dist/services/Database.service.d.ts +14 -0
  74. package/dist/services/Database.service.js +108 -0
  75. package/dist/services/Database.service.js.map +1 -0
  76. package/dist/services/TimeoutScheduler.service.js +9 -3
  77. package/dist/services/TimeoutScheduler.service.js.map +1 -1
  78. package/dist/services/WorkflowAuthorization.service.d.ts +19 -0
  79. package/dist/services/WorkflowAuthorization.service.js +75 -0
  80. package/dist/services/WorkflowAuthorization.service.js.map +1 -0
  81. package/dist/services/WorkflowRunAsyncActivityFacade.service.d.ts +8 -15
  82. package/dist/services/WorkflowRunAsyncActivityFacade.service.js +12 -26
  83. package/dist/services/WorkflowRunAsyncActivityFacade.service.js.map +1 -1
  84. package/dist/services/WorkflowRunEvents.service.d.ts +11 -0
  85. package/dist/services/WorkflowRunEvents.service.js +42 -0
  86. package/dist/services/WorkflowRunEvents.service.js.map +1 -0
  87. package/dist/services/WorkflowRunFacade.service.d.ts +109 -7
  88. package/dist/services/WorkflowRunFacade.service.js +65 -10
  89. package/dist/services/WorkflowRunFacade.service.js.map +1 -1
  90. package/dist/services/WorkflowRunLock.service.d.ts +6 -0
  91. package/dist/services/WorkflowRunLock.service.js +34 -0
  92. package/dist/services/WorkflowRunLock.service.js.map +1 -0
  93. package/dist/services/WorkflowRunSyncActivityFacade.service.d.ts +4 -4
  94. package/dist/services/WorkflowRunSyncActivityFacade.service.js +7 -7
  95. package/dist/services/WorkflowRunSyncActivityFacade.service.js.map +1 -1
  96. package/dist/tools/find-workflow-by-id.d.ts +2 -0
  97. package/dist/tools/find-workflow-by-id.js +9 -0
  98. package/dist/tools/find-workflow-by-id.js.map +1 -0
  99. package/dist/tools/format-routes.d.ts +10 -0
  100. package/dist/tools/format-routes.js +40 -0
  101. package/dist/tools/format-routes.js.map +1 -0
  102. package/dist/tools/replace.d.ts +1 -0
  103. package/dist/tools/replace.js +14 -0
  104. package/dist/tools/replace.js.map +1 -0
  105. package/dist/tools/to-workflow-run-activity-output.d.ts +24 -0
  106. package/dist/tools/to-workflow-run-activity-output.js +18 -0
  107. package/dist/tools/to-workflow-run-activity-output.js.map +1 -0
  108. package/dist/tools/to-workflow-run-output.d.ts +12 -0
  109. package/dist/tools/to-workflow-run-output.js +13 -0
  110. package/dist/tools/to-workflow-run-output.js.map +1 -0
  111. package/dist/transport/AppProcessJsonRpc.js +59 -0
  112. package/dist/transport/AppProcessJsonRpc.js.map +1 -0
  113. package/dist/use-cases/BuildWorkflowRunActivityHistory.usecase.d.ts +9 -0
  114. package/dist/use-cases/{WorkflowRunBuildHistory.usecase.js → BuildWorkflowRunActivityHistory.usecase.js} +18 -16
  115. package/dist/use-cases/BuildWorkflowRunActivityHistory.usecase.js.map +1 -0
  116. package/dist/use-cases/CreateWorkflowRun.usecase.d.ts +6 -6
  117. package/dist/use-cases/CreateWorkflowRun.usecase.js +20 -21
  118. package/dist/use-cases/CreateWorkflowRun.usecase.js.map +1 -1
  119. package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.d.ts +9 -3
  120. package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.js +45 -39
  121. package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.js.map +1 -1
  122. package/dist/use-cases/EnqueueWorkflowRunNextTick.usecase.d.ts +9 -0
  123. package/dist/use-cases/EnqueueWorkflowRunNextTick.usecase.js +43 -0
  124. package/dist/use-cases/EnqueueWorkflowRunNextTick.usecase.js.map +1 -0
  125. package/dist/use-cases/ExecuteWorkflowRunActivity.usecase.d.ts +9 -0
  126. package/dist/use-cases/ExecuteWorkflowRunActivity.usecase.js +46 -0
  127. package/dist/use-cases/ExecuteWorkflowRunActivity.usecase.js.map +1 -0
  128. package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.d.ts +22 -0
  129. package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.js +117 -0
  130. package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.js.map +1 -0
  131. package/dist/use-cases/NextTickWorkflowRun.usecase.d.ts +18 -7
  132. package/dist/use-cases/NextTickWorkflowRun.usecase.js +152 -128
  133. package/dist/use-cases/NextTickWorkflowRun.usecase.js.map +1 -1
  134. package/dist/use-cases/RunWorkflow.usecase.d.ts +10 -0
  135. package/dist/use-cases/RunWorkflow.usecase.js +46 -0
  136. package/dist/use-cases/RunWorkflow.usecase.js.map +1 -0
  137. package/dist/use-cases/WorkflowRunActivityFind.usecase.d.ts +34 -0
  138. package/dist/use-cases/WorkflowRunActivityFind.usecase.js +49 -0
  139. package/dist/use-cases/WorkflowRunActivityFind.usecase.js.map +1 -0
  140. package/dist/use-cases/WorkflowRunActivityFindById.usecase.d.ts +34 -0
  141. package/dist/use-cases/WorkflowRunActivityFindById.usecase.js +60 -0
  142. package/dist/use-cases/WorkflowRunActivityFindById.usecase.js.map +1 -0
  143. package/dist/use-cases/WorkflowRunAsyncActivityAdvance.usecase.d.ts +12 -4
  144. package/dist/use-cases/WorkflowRunAsyncActivityAdvance.usecase.js +41 -27
  145. package/dist/use-cases/WorkflowRunAsyncActivityAdvance.usecase.js.map +1 -1
  146. package/dist/use-cases/WorkflowRunAsyncActivityPendingFind.usecase.d.ts +24 -0
  147. package/dist/use-cases/WorkflowRunAsyncActivityPendingFind.usecase.js +56 -0
  148. package/dist/use-cases/WorkflowRunAsyncActivityPendingFind.usecase.js.map +1 -0
  149. package/dist/use-cases/WorkflowRunFind.usecase.d.ts +18 -0
  150. package/dist/use-cases/WorkflowRunFind.usecase.js +28 -0
  151. package/dist/use-cases/WorkflowRunFind.usecase.js.map +1 -0
  152. package/dist/use-cases/WorkflowRunFindById.usecase.d.ts +21 -0
  153. package/dist/use-cases/WorkflowRunFindById.usecase.js +46 -0
  154. package/dist/use-cases/WorkflowRunFindById.usecase.js.map +1 -0
  155. package/dist/workers/app-process.js +10 -1
  156. package/dist/workers/app-process.js.map +1 -1
  157. package/package.json +14 -4
  158. package/.ai/skills/framework-dev/SKILL.md +0 -348
  159. package/dist/DevServer.d.ts +0 -24
  160. package/dist/DevServer.js +0 -87
  161. package/dist/DevServer.js.map +0 -1
  162. package/dist/models/InMemoryDatabase.d.ts +0 -20
  163. package/dist/models/InMemoryDatabase.js +0 -111
  164. package/dist/models/InMemoryDatabase.js.map +0 -1
  165. package/dist/services/BuildWorkflowRunResult.service.d.ts +0 -8
  166. package/dist/services/BuildWorkflowRunResult.service.js +0 -49
  167. package/dist/services/BuildWorkflowRunResult.service.js.map +0 -1
  168. package/dist/tools/is-workflow-waiting.d.ts +0 -4
  169. package/dist/tools/is-workflow-waiting.js +0 -12
  170. package/dist/tools/is-workflow-waiting.js.map +0 -1
  171. package/dist/transport/DevServerJsonRpc.js +0 -42
  172. package/dist/transport/DevServerJsonRpc.js.map +0 -1
  173. package/dist/use-cases/CallbackWorkflowRunAsyncActivity.usecase.d.ts +0 -14
  174. package/dist/use-cases/CallbackWorkflowRunAsyncActivity.usecase.js +0 -64
  175. package/dist/use-cases/CallbackWorkflowRunAsyncActivity.usecase.js.map +0 -1
  176. package/dist/use-cases/TimeoutWorkflowRunAsyncActivity.usecase.d.ts +0 -8
  177. package/dist/use-cases/TimeoutWorkflowRunAsyncActivity.usecase.js +0 -40
  178. package/dist/use-cases/TimeoutWorkflowRunAsyncActivity.usecase.js.map +0 -1
  179. package/dist/use-cases/WorkflowRunAsyncActivity.usecase.d.ts +0 -7
  180. package/dist/use-cases/WorkflowRunAsyncActivity.usecase.js +0 -46
  181. package/dist/use-cases/WorkflowRunAsyncActivity.usecase.js.map +0 -1
  182. package/dist/use-cases/WorkflowRunBuildHistory.usecase.d.ts +0 -8
  183. package/dist/use-cases/WorkflowRunBuildHistory.usecase.js.map +0 -1
  184. package/dist/use-cases/WorkflowRunSyncActivity.usecase.d.ts +0 -4
  185. package/dist/use-cases/WorkflowRunSyncActivity.usecase.js +0 -28
  186. package/dist/use-cases/WorkflowRunSyncActivity.usecase.js.map +0 -1
  187. /package/dist/transport/{DevServerJsonRpc.d.ts → AppProcessJsonRpc.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/constants/server.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAA;AAEhC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAA;AAEvC,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,GAAG,IAAI,CAAA;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAA;AAE7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAA;AAE3C,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAA;AAElD,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAAA;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAA;AAExC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,aAAa,EAAE,aAAa,CAAU,CAAA"}
@@ -0,0 +1,16 @@
1
+ import type { EventEmitter } from 'node:events';
2
+ import { Hono } from 'hono';
3
+ import type { AppProcess } from '../AppProcess.js';
4
+ import { type ProjectManifestVariables } from './middlewares/project-manifest.middleware.js';
5
+ import { type JsonBodyVariables } from './middlewares/read-json-body.middleware.js';
6
+ import { type WorkflowAuthorizationVariables } from './middlewares/workflow-authorization.middleware.js';
7
+ export interface CreateAppOptions {
8
+ appProcess: AppProcess;
9
+ events: EventEmitter;
10
+ projectDir: string;
11
+ }
12
+ type AppEnv = {
13
+ Variables: ProjectManifestVariables & JsonBodyVariables & WorkflowAuthorizationVariables;
14
+ };
15
+ export declare function createApp({ appProcess, events, projectDir, }: CreateAppOptions): Hono<AppEnv, import("hono/types").BlankSchema, "/">;
16
+ export {};
@@ -0,0 +1,134 @@
1
+ import { Hono } from 'hono';
2
+ import { cors } from 'hono/cors';
3
+ import { streamSSE } from 'hono/streaming';
4
+ import { toHttpError } from './helpers/to-http-error.js';
5
+ import { errorHandler } from './middlewares/error-handler.middleware.js';
6
+ import { projectManifest, } from './middlewares/project-manifest.middleware.js';
7
+ import { readJsonBody, } from './middlewares/read-json-body.middleware.js';
8
+ import { workflowAuthorization, } from './middlewares/workflow-authorization.middleware.js';
9
+ import { DEV_ROUTES_PREFIX, SSE_HEARTBEAT_INTERVAL_IN_MS, WORKFLOW_RUN_EVENTS, } from '../constants/server.js';
10
+ const WORKFLOW_PATH = '/projects/:projectId/workflows/:workflowId';
11
+ const SERVER_EVENTS = [
12
+ 'manifest',
13
+ 'build:status',
14
+ 'build:fail',
15
+ 'app:exit',
16
+ ...WORKFLOW_RUN_EVENTS,
17
+ ];
18
+ const FIND_QUERY_STRINGS = [
19
+ 'status',
20
+ 'workflow',
21
+ 'id',
22
+ 'parentRunId',
23
+ 'parentActivityId',
24
+ ];
25
+ const PAGE_QUERY_INTEGERS = ['limit', 'offset'];
26
+ const MAX_LIMIT = 50;
27
+ const FIND_QUERY_INTEGERS = [
28
+ 'createdAfter',
29
+ 'createdBefore',
30
+ ...PAGE_QUERY_INTEGERS,
31
+ ];
32
+ function toIntegers(query, names) {
33
+ const result = {};
34
+ for (const name of names) {
35
+ const value = Number.parseInt(query[name] ?? '', 10);
36
+ if (Number.isFinite(value))
37
+ result[name] = value;
38
+ }
39
+ return result;
40
+ }
41
+ function checkPage(page) {
42
+ if (page.limit !== undefined && (page.limit < 1 || page.limit > MAX_LIMIT))
43
+ throw toHttpError(400, `limit must be between 1 and ${MAX_LIMIT}`);
44
+ if (page.offset !== undefined && page.offset < 0)
45
+ throw toHttpError(400, 'offset must be 0 or more');
46
+ }
47
+ function toPageQuery(query) {
48
+ const page = toIntegers(query, PAGE_QUERY_INTEGERS);
49
+ checkPage(page);
50
+ return page;
51
+ }
52
+ function toFindQuery(query) {
53
+ const result = toIntegers(query, FIND_QUERY_INTEGERS);
54
+ checkPage(result);
55
+ for (const name of FIND_QUERY_STRINGS)
56
+ if (query[name])
57
+ result[name] = query[name];
58
+ if (query.rootOnly !== undefined)
59
+ result.rootOnly = query.rootOnly === 'true';
60
+ return result;
61
+ }
62
+ function toAdvancePayload(body) {
63
+ if (body !== undefined &&
64
+ (typeof body !== 'object' || body === null || Array.isArray(body)))
65
+ throw toHttpError(400, 'Body must be an object');
66
+ return body?.payload;
67
+ }
68
+ export function createApp({ appProcess, events, projectDir, }) {
69
+ const app = new Hono();
70
+ app.use(cors());
71
+ app.onError(errorHandler);
72
+ app.notFound(context => context.json({
73
+ statusCode: 404,
74
+ message: `Cannot ${context.req.method} ${context.req.path}`,
75
+ error: 'Not Found',
76
+ }, 404));
77
+ const manifest = projectManifest({ appProcess });
78
+ const authorization = workflowAuthorization({ projectDir });
79
+ app.get('/projects/:projectId/manifest.json', manifest, context => context.json(context.get('manifest')));
80
+ app.post(`${WORKFLOW_PATH}/runs`, readJsonBody, manifest, authorization, async (context) => {
81
+ const { id } = await appProcess.call('workflow.run', context.get('workflowId'), context.get('body'));
82
+ return context.json({ id }, 201);
83
+ });
84
+ app.patch(`${WORKFLOW_PATH}/runs/:runId/activities/:activityId`, readJsonBody, manifest, authorization, async (context) => {
85
+ const payload = toAdvancePayload(context.get('body'));
86
+ const activity = await appProcess.call('workflow.async-activities.advance', context.req.param('activityId'), payload);
87
+ return context.json({
88
+ id: activity.id,
89
+ type: activity.type,
90
+ status: activity.status,
91
+ });
92
+ });
93
+ const dev = new Hono();
94
+ dev.get('/manifest', async (context) => context.json(await appProcess.whenReady()));
95
+ dev.get('/state', context => context.json({ state: appProcess.state }));
96
+ dev.get('/runs', async (context) => context.json(await appProcess.call('workflow.runs.find', toFindQuery(context.req.query()))));
97
+ dev.get('/runs/:id', async (context) => context.json(await appProcess.call('workflow.runs.findById', context.req.param('id'))));
98
+ dev.get('/runs/:id/activities', async (context) => context.json(await appProcess.call('workflow.runs.activities.find', context.req.param('id'), toPageQuery(context.req.query()))));
99
+ dev.get('/runs/:id/activities/:activityId/pendings', async (context) => context.json(await appProcess.call('workflow.runs.activities.pendings.find', context.req.param('id'), context.req.param('activityId'), toPageQuery(context.req.query()))));
100
+ dev.get('/runs/:id/activities/:activityId', async (context) => context.json(await appProcess.call('workflow.runs.activities.findById', context.req.param('id'), context.req.param('activityId'))));
101
+ dev.get('/runs/:id/logs', async (context) => context.json(await appProcess.call('workflow.runs.logs.find', context.req.param('id'), toPageQuery(context.req.query()))));
102
+ dev.get('/activities/waiting', async (context) => context.json(await appProcess.call('workflow.async-activities.waiting.list', toPageQuery(context.req.query()))));
103
+ dev.post('/workflows/:workflowId/runs', readJsonBody, async (context) => {
104
+ const { id } = await appProcess.call('workflow.run', context.req.param('workflowId'), context.get('body'));
105
+ return context.json({ id }, 201);
106
+ });
107
+ dev.post('/activities/:activityId/advance', readJsonBody, async (context) => {
108
+ const payload = toAdvancePayload(context.get('body'));
109
+ const activity = await appProcess.call('workflow.async-activities.advance', context.req.param('activityId'), payload);
110
+ return context.json({
111
+ id: activity.id,
112
+ type: activity.type,
113
+ status: activity.status,
114
+ });
115
+ });
116
+ dev.get('/events', context => streamSSE(context, async (stream) => {
117
+ const send = (event, data) => stream.writeSSE({ event, data: JSON.stringify(data ?? null) });
118
+ const listeners = SERVER_EVENTS.map(event => {
119
+ const listener = (data) => void send(event, data);
120
+ events.on(event, listener);
121
+ return [event, listener];
122
+ });
123
+ const heartbeat = setInterval(() => void stream.writeSSE({ event: 'ping', data: '' }), SSE_HEARTBEAT_INTERVAL_IN_MS).unref();
124
+ if (appProcess.manifest)
125
+ await send('manifest', appProcess.manifest);
126
+ await new Promise(resolve => stream.onAbort(resolve));
127
+ clearInterval(heartbeat);
128
+ for (const [event, listener] of listeners)
129
+ events.off(event, listener);
130
+ }));
131
+ app.route(DEV_ROUTES_PREFIX, dev);
132
+ return app;
133
+ }
134
+ //# sourceMappingURL=create-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-app.js","sourceRoot":"","sources":["../../src/http/create-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { HTTPException } from 'hono/http-exception';
2
+ import type { ContentfulStatusCode } from 'hono/utils/http-status';
3
+ export interface HttpErrorBody {
4
+ statusCode: number;
5
+ message: unknown;
6
+ error?: unknown;
7
+ }
8
+ export declare function toHttpError(statusCode: ContentfulStatusCode, message: unknown, error?: unknown): HTTPException;
@@ -0,0 +1,9 @@
1
+ import { STATUS_CODES } from 'node:http';
2
+ import { HTTPException } from 'hono/http-exception';
3
+ export function toHttpError(statusCode, message, error = STATUS_CODES[statusCode]) {
4
+ return new HTTPException(statusCode, {
5
+ message: typeof message === 'string' ? message : String(error),
6
+ cause: { statusCode, message, error },
7
+ });
8
+ }
9
+ //# sourceMappingURL=to-http-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-http-error.js","sourceRoot":"","sources":["../../../src/http/helpers/to-http-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AASnD,MAAM,UAAU,WAAW,CACzB,UAAgC,EAChC,OAAgB,EAChB,QAAiB,YAAY,CAAC,UAAU,CAAC;IAEzC,OAAO,IAAI,aAAa,CAAC,UAAU,EAAE;QACnC,OAAO,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC9D,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAA0B;KAC9D,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ErrorHandler } from 'hono';
2
+ export declare const errorHandler: ErrorHandler;
@@ -0,0 +1,27 @@
1
+ import { STATUS_CODES } from 'node:http';
2
+ import { HTTPException } from 'hono/http-exception';
3
+ import { AppProcessNotReadyError } from '../../AppProcess.js';
4
+ import { JSONRPCError } from '../../models/JSONRPCError.js';
5
+ export const errorHandler = (error, context) => {
6
+ if (error instanceof HTTPException) {
7
+ const body = error.cause ?? {
8
+ statusCode: error.status,
9
+ message: error.message,
10
+ error: STATUS_CODES[error.status],
11
+ };
12
+ return context.json(body, error.status);
13
+ }
14
+ if (error instanceof AppProcessNotReadyError)
15
+ return context.json({ statusCode: 503, message: 'App is not ready', error: error.message }, 503);
16
+ if (error instanceof JSONRPCError && error.data?.status) {
17
+ const statusCode = error.data.status;
18
+ return context.json({
19
+ statusCode,
20
+ message: error.data.details ?? error.message,
21
+ error: STATUS_CODES[statusCode],
22
+ }, statusCode);
23
+ }
24
+ console.error('[Server] unexpected error:', error);
25
+ return context.json({ statusCode: 500, message: 'Internal server error', error: String(error) }, 500);
26
+ };
27
+ //# sourceMappingURL=error-handler.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.middleware.js","sourceRoot":"","sources":["../../../src/http/middlewares/error-handler.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAG3D,MAAM,CAAC,MAAM,YAAY,GAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC3D,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;QACnC,MAAM,IAAI,GAAI,KAAK,CAAC,KAAmC,IAAI;YACzD,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;SAClC,CAAA;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,MAA8B,CAAC,CAAA;IACjE,CAAC;IAED,IAAI,KAAK,YAAY,uBAAuB;QAC1C,OAAO,OAAO,CAAC,IAAI,CACjB,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EACtE,GAAG,CACJ,CAAA;IAEH,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAA8B,CAAA;QAE5D,OAAO,OAAO,CAAC,IAAI,CACjB;YACE,UAAU;YACV,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;YAC5C,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC;SAChC,EACD,UAAU,CACX,CAAA;IACH,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAA;IAElD,OAAO,OAAO,CAAC,IAAI,CACjB,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAC3E,GAAG,CACJ,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppManifest, AppProcess } from '../../AppProcess.js';
3
+ export type ProjectManifestVariables = {
4
+ manifest: AppManifest;
5
+ };
6
+ export interface ProjectManifestOptions {
7
+ appProcess: AppProcess;
8
+ }
9
+ export declare function projectManifest({ appProcess, }: ProjectManifestOptions): MiddlewareHandler<{
10
+ Variables: ProjectManifestVariables;
11
+ }>;
@@ -0,0 +1,11 @@
1
+ import { toHttpError } from '../helpers/to-http-error.js';
2
+ export function projectManifest({ appProcess, }) {
3
+ return async (context, next) => {
4
+ const manifest = await appProcess.whenReady();
5
+ if (manifest.id !== context.req.param('projectId'))
6
+ throw toHttpError(404, 'Project not found');
7
+ context.set('manifest', manifest);
8
+ await next();
9
+ };
10
+ }
11
+ //# sourceMappingURL=project-manifest.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-manifest.middleware.js","sourceRoot":"","sources":["../../../src/http/middlewares/project-manifest.middleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAQzD,MAAM,UAAU,eAAe,CAAC,EAC9B,UAAU,GACa;IAGvB,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,CAAA;QAE7C,IAAI,QAAQ,CAAC,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;YAChD,MAAM,WAAW,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAA;QAE7C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAEjC,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ export type JsonBodyVariables = {
3
+ rawBody: string;
4
+ body: unknown;
5
+ };
6
+ export declare const readJsonBody: MiddlewareHandler;
@@ -0,0 +1,22 @@
1
+ import { bodyLimit } from 'hono/body-limit';
2
+ import { every } from 'hono/combine';
3
+ import { JSON_BODY_LIMIT_IN_BYTES } from '../../constants/server.js';
4
+ import { toHttpError } from '../helpers/to-http-error.js';
5
+ const JSON_CONTENT_TYPE = /^application\/([\w.-]+\+)?json/i;
6
+ const parseJsonBody = async (context, next) => {
7
+ const rawBody = await context.req.text();
8
+ context.set('rawBody', rawBody);
9
+ context.set('body', undefined);
10
+ const contentType = context.req.header('content-type') ?? '';
11
+ if (rawBody.length && JSON_CONTENT_TYPE.test(contentType)) {
12
+ try {
13
+ context.set('body', JSON.parse(rawBody));
14
+ }
15
+ catch (error) {
16
+ throw toHttpError(400, error instanceof Error ? error.message : 'Invalid JSON body');
17
+ }
18
+ }
19
+ await next();
20
+ };
21
+ export const readJsonBody = every(bodyLimit({ maxSize: JSON_BODY_LIMIT_IN_BYTES }), parseJsonBody);
22
+ //# sourceMappingURL=read-json-body.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-json-body.middleware.js","sourceRoot":"","sources":["../../../src/http/middlewares/read-json-body.middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAIzD,MAAM,iBAAiB,GAAG,iCAAiC,CAAA;AAE3D,MAAM,aAAa,GAEd,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC3B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;IAExC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAE9B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;IAE5D,IAAI,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CACf,GAAG,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAC7D,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,EAAE,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAC/B,SAAS,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,EAChD,aAAa,CACd,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { ProjectManifestVariables } from './project-manifest.middleware.js';
3
+ import type { JsonBodyVariables } from './read-json-body.middleware.js';
4
+ export type WorkflowAuthorizationVariables = {
5
+ workflowId: string;
6
+ };
7
+ export interface WorkflowAuthorizationOptions {
8
+ projectDir: string;
9
+ }
10
+ export declare function workflowAuthorization({ projectDir, }: WorkflowAuthorizationOptions): MiddlewareHandler<{
11
+ Variables: ProjectManifestVariables & JsonBodyVariables & WorkflowAuthorizationVariables;
12
+ }>;
@@ -0,0 +1,28 @@
1
+ import { WorkflowAuthorizationService } from '../../services/WorkflowAuthorization.service.js';
2
+ import { toHttpError } from '../helpers/to-http-error.js';
3
+ export function workflowAuthorization({ projectDir, }) {
4
+ const authorization = new WorkflowAuthorizationService(projectDir);
5
+ return async (context, next) => {
6
+ const manifest = context.get('manifest');
7
+ const workflowId = context.req.param('workflowId');
8
+ const workflow = manifest.workflows.find(workflow => workflow.id === workflowId);
9
+ if (!workflow?.id)
10
+ throw toHttpError(404, 'Workflow not found');
11
+ const url = new URL(context.req.url);
12
+ const authorized = await authorization.authorize(manifest, workflow.id, {
13
+ method: context.req.method,
14
+ url: `${url.pathname}${url.search}`,
15
+ path: url.pathname,
16
+ headers: Object.fromEntries(context.req.raw.headers.entries()),
17
+ params: context.req.param(),
18
+ query: context.req.query(),
19
+ rawBody: context.get('rawBody'),
20
+ body: context.get('body'),
21
+ });
22
+ if (!authorized)
23
+ throw toHttpError(401, 'Unauthorized');
24
+ context.set('workflowId', workflow.id);
25
+ await next();
26
+ };
27
+ }
28
+ //# sourceMappingURL=workflow-authorization.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-authorization.middleware.js","sourceRoot":"","sources":["../../../src/http/middlewares/workflow-authorization.middleware.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAA;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAQzD,MAAM,UAAU,qBAAqB,CAAC,EACpC,UAAU,GACmB;IAK7B,MAAM,aAAa,GAAG,IAAI,4BAA4B,CAAC,UAAU,CAAC,CAAA;IAElE,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAExC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAElD,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CACtC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,UAAU,CACvC,CAAA;QAED,IAAI,CAAC,QAAQ,EAAE,EAAE;YAAE,MAAM,WAAW,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAA;QAE/D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAEpC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE;YACtE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;YAC1B,GAAG,EAAE,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE;YACnC,IAAI,EAAE,GAAG,CAAC,QAAQ;YAClB,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;YAC3B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;YAC1B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YAC/B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;SAC1B,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU;YAAE,MAAM,WAAW,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAEvD,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;QAEtC,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAA;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,15 +1,3 @@
1
- export * from './DevServer.js';
2
- export * from './claims.js';
3
- export * from './models/claims/DevCacheClaim.js';
4
- export * from './models/claims/DevFileSystemClaim.js';
5
- export * from './models/claims/DevGetActivityUniqueIdentifierClaim.js';
6
- export * from './models/claims/DevGetProjectUniqueIdentifierClaim.js';
7
- export * from './models/claims/DevGetProjectVersionUniqueIdentifierClaim.js';
8
- export * from './models/claims/DevGetProjectVersionWorkflowUniqueIdentifierClaim.js';
9
- export * from './models/claims/DevGetWorkflowUniqueIdentifierClaim.js';
10
- export * from './models/claims/DevHttpClientRequestClaim.js';
11
- export * from './models/claims/DevORMClaim.js';
12
- export * from './models/claims/DevSmtpSendEmailClaim.js';
13
- export * from './models/claims/DevWorkflowClaim.js';
14
- export * from './tools/find-claim-by-constructor.js';
15
- export * from './tools/is-workflow-waiting.js';
1
+ export * from './Server.js';
2
+ export * from './models/WorkflowAuthorizationMissingError.js';
3
+ export type { AppManifest, AppProcessState } from './AppProcess.js';
package/dist/index.js CHANGED
@@ -1,16 +1,3 @@
1
- export * from './DevServer.js';
2
- export * from './claims.js';
3
- export * from './models/claims/DevCacheClaim.js';
4
- export * from './models/claims/DevFileSystemClaim.js';
5
- export * from './models/claims/DevGetActivityUniqueIdentifierClaim.js';
6
- export * from './models/claims/DevGetProjectUniqueIdentifierClaim.js';
7
- export * from './models/claims/DevGetProjectVersionUniqueIdentifierClaim.js';
8
- export * from './models/claims/DevGetProjectVersionWorkflowUniqueIdentifierClaim.js';
9
- export * from './models/claims/DevGetWorkflowUniqueIdentifierClaim.js';
10
- export * from './models/claims/DevHttpClientRequestClaim.js';
11
- export * from './models/claims/DevORMClaim.js';
12
- export * from './models/claims/DevSmtpSendEmailClaim.js';
13
- export * from './models/claims/DevWorkflowClaim.js';
14
- export * from './tools/find-claim-by-constructor.js';
15
- export * from './tools/is-workflow-waiting.js';
1
+ export * from './Server.js';
2
+ export * from './models/WorkflowAuthorizationMissingError.js';
16
3
  //# 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,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,kCAAkC,CAAA;AAChD,cAAc,uCAAuC,CAAA;AACrD,cAAc,wDAAwD,CAAA;AACtE,cAAc,uDAAuD,CAAA;AACrE,cAAc,8DAA8D,CAAA;AAC5E,cAAc,sEAAsE,CAAA;AACpF,cAAc,wDAAwD,CAAA;AACtE,cAAc,8CAA8C,CAAA;AAC5D,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0CAA0C,CAAA;AACxD,cAAc,qCAAqC,CAAA;AACnD,cAAc,sCAAsC,CAAA;AACpD,cAAc,gCAAgC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,+CAA+C,CAAA"}
@@ -3,9 +3,11 @@ export type JSONRPCClientSend = (message: string) => void | Promise<void>;
3
3
  export declare class JSONRPCClient {
4
4
  private readonly send;
5
5
  private readonly listeners;
6
+ private readonly pending;
6
7
  constructor(send: JSONRPCClientSend);
7
8
  addListener(listener: (response: JSONRPCResponseFulfilled | JSONRPCResponseRejected) => void): () => void;
8
9
  call(method: string, ...params: any[]): Promise<any>;
10
+ rejectPending(error: Error): void;
9
11
  notify(method: string, ...params: any[]): Promise<void>;
10
12
  handle(message: any): Promise<unknown>;
11
13
  }
@@ -1,7 +1,9 @@
1
1
  import { uuidv7 } from 'uuidv7';
2
+ import { JSONRPCError } from './JSONRPCError.js';
2
3
  export class JSONRPCClient {
3
4
  send;
4
5
  listeners = [];
6
+ pending = new Set();
5
7
  constructor(send) {
6
8
  this.send = send;
7
9
  }
@@ -15,19 +17,34 @@ export class JSONRPCClient {
15
17
  const id = uuidv7();
16
18
  const message = { jsonrpc: '2.0', id, method, params };
17
19
  const promise = new Promise((resolve, reject) => {
20
+ const fail = (error) => {
21
+ off();
22
+ this.pending.delete(fail);
23
+ reject(error);
24
+ };
18
25
  const off = this.addListener(response => {
19
26
  if (response.id !== id)
20
27
  return;
21
- off();
22
- if ('result' in response)
28
+ if ('result' in response) {
29
+ off();
30
+ this.pending.delete(fail);
23
31
  resolve(response.result);
24
- else
25
- reject(new Error(response.error.message));
32
+ return;
33
+ }
34
+ fail(new JSONRPCError(response.error.message, {
35
+ code: response.error.code,
36
+ data: response.error.data,
37
+ }));
26
38
  });
39
+ this.pending.add(fail);
27
40
  });
28
41
  await this.send(JSON.stringify(message));
29
42
  return promise;
30
43
  }
44
+ rejectPending(error) {
45
+ for (const fail of [...this.pending])
46
+ fail(error);
47
+ }
31
48
  async notify(method, ...params) {
32
49
  const message = { jsonrpc: '2.0', method, params };
33
50
  await this.send(JSON.stringify(message));
@@ -1 +1 @@
1
- {"version":3,"file":"JSONRPCClient.js","sourceRoot":"","sources":["../../src/models/JSONRPCClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAU/B,MAAM,OAAO,aAAa;IAKK;IAJZ,SAAS,GAEX,EAAE,CAAA;IAEjB,YAA6B,IAAuB;QAAvB,SAAI,GAAJ,IAAI,CAAmB;IAAG,CAAC;IAEjD,WAAW,CAChB,QAES;QAET,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5D,CAAC,CAAA;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,GAAG,MAAa;QAChD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;QAEnB,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAW,CAAA;QAE/D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;gBACtC,IAAI,QAAQ,CAAC,EAAE,KAAK,EAAE;oBAAE,OAAM;gBAE9B,GAAG,EAAE,CAAA;gBAEL,IAAI,QAAQ,IAAI,QAAQ;oBAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;;oBAC7C,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;YAChD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;QAExC,OAAO,OAAO,CAAA;IAChB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,GAAG,MAAa;QAClD,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAW,CAAA;QAE3D,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1C,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAY;QAC9B,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QAExE,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QAEpE,MAAM,IAAI,GAAG,OAA0B,CAAA;QAEvC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAEvE,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;YAAE,OAAM;QAE3B,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS;YAAE,OAAM;QAEjC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IACpD,CAAC;CACF"}
1
+ {"version":3,"file":"JSONRPCClient.js","sourceRoot":"","sources":["../../src/models/JSONRPCClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface JSONRPCErrorData {
2
+ status?: number;
3
+ details?: unknown;
4
+ }
5
+ export interface JSONRPCErrorOptions {
6
+ code?: number;
7
+ data?: JSONRPCErrorData;
8
+ }
9
+ export declare class JSONRPCError extends Error {
10
+ readonly code: number;
11
+ readonly data: JSONRPCErrorData | undefined;
12
+ constructor(message: string, { code, data }?: JSONRPCErrorOptions);
13
+ }
@@ -0,0 +1,11 @@
1
+ export class JSONRPCError extends Error {
2
+ code;
3
+ data;
4
+ constructor(message, { code = -32000, data } = {}) {
5
+ super(message);
6
+ this.name = 'JSONRPCError';
7
+ this.code = code;
8
+ this.data = data;
9
+ }
10
+ }
11
+ //# sourceMappingURL=JSONRPCError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JSONRPCError.js","sourceRoot":"","sources":["../../src/models/JSONRPCError.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrB,IAAI,CAAQ;IACZ,IAAI,CAA8B;IAElD,YACE,OAAe,EACf,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,KAA0B,EAAE;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF"}
@@ -1,5 +1,6 @@
1
1
  import { type ValidateFunction } from 'ajv';
2
2
  import Type from 'typebox';
3
+ import { type JSONRPCErrorData } from './JSONRPCError.js';
3
4
  export interface JSONRPCServerServerMethodConfig<TSchema extends Type.TSchema | null = null> {
4
5
  schema?: TSchema;
5
6
  }
@@ -45,6 +46,7 @@ export type JSONRPCResponseRejected = {
45
46
  error: {
46
47
  code: number;
47
48
  message: string;
49
+ data?: JSONRPCErrorData;
48
50
  };
49
51
  };
50
52
  export type JSONRPCResponseNotification = {
@@ -1,5 +1,6 @@
1
1
  import { Ajv } from 'ajv';
2
2
  import Type from 'typebox';
3
+ import { JSONRPCError } from './JSONRPCError.js';
3
4
  const ajv = new Ajv();
4
5
  export class JSONRPCServerMethod {
5
6
  name;
@@ -26,7 +27,10 @@ export class JSONRPCServerMethod {
26
27
  return this.call([params]);
27
28
  const isValid = this.validate.every((validate, index) => validate(params[index]));
28
29
  if (!isValid)
29
- throw new Error('Invalid parameters');
30
+ throw new JSONRPCError('Invalid parameters', {
31
+ code: -32602,
32
+ data: { status: 400 },
33
+ });
30
34
  return await this.fn(...params);
31
35
  }
32
36
  }
@@ -53,17 +57,21 @@ export class JSONRPCServer {
53
57
  if (!method)
54
58
  throw new Error(`Method ${message.method} not found`);
55
59
  const result = (await method.call(message.params)) ?? null;
60
+ if (!('id' in message) || message.id === undefined)
61
+ return;
56
62
  await this.send(JSON.stringify({ jsonrpc: '2.0', id: message.id, result }));
57
63
  }
58
64
  catch (error) {
59
65
  if (!('id' in message) || message.id === undefined)
60
66
  throw error;
67
+ const rpcError = error instanceof JSONRPCError ? error : null;
61
68
  await this.send(JSON.stringify({
62
69
  jsonrpc: '2.0',
63
70
  id: message.id,
64
71
  error: {
65
- code: -32000,
72
+ code: rpcError?.code ?? -32000,
66
73
  message: error instanceof Error ? error.message : String(error),
74
+ ...(rpcError?.data ? { data: rpcError.data } : {}),
67
75
  },
68
76
  }));
69
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"JSONRPCServer.js","sourceRoot":"","sources":["../../src/models/JSONRPCServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JSONRPCServer.js","sourceRoot":"","sources":["../../src/models/JSONRPCServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare class WorkflowAuthorizationMissingError extends Error {
2
+ readonly workflowId: string;
3
+ readonly name = "WorkflowAuthorizationMissingError";
4
+ constructor(workflowId: string);
5
+ }
@@ -0,0 +1,9 @@
1
+ export class WorkflowAuthorizationMissingError extends Error {
2
+ workflowId;
3
+ name = 'WorkflowAuthorizationMissingError';
4
+ constructor(workflowId) {
5
+ super(`Workflow "${workflowId}" has no authorization and the app has no default one. Set app.authorization or workflow.authorization.`);
6
+ this.workflowId = workflowId;
7
+ }
8
+ }
9
+ //# sourceMappingURL=WorkflowAuthorizationMissingError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowAuthorizationMissingError.js","sourceRoot":"","sources":["../../src/models/WorkflowAuthorizationMissingError.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iCAAkC,SAAQ,KAAK;IAG9B;IAFH,IAAI,GAAG,mCAAmC,CAAA;IAEnE,YAA4B,UAAkB;QAC5C,KAAK,CACH,aAAa,UAAU,yGAAyG,CACjI,CAAA;QAHyB,eAAU,GAAV,UAAU,CAAQ;IAI9C,CAAC;CACF"}