@t4h.framework/dev 0.14.1 → 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 +19 -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 +27 -5
  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 +153 -126
  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
@@ -1,8 +1,43 @@
1
- import type { WorkflowRun } from '../models/WorkflowRun.js';
1
+ import type { Log } from '@t4h.framework/core';
2
+ import { WorkflowRun, type WorkflowRunRejectedReason, type WorkflowRunStatus } from '../models/WorkflowRun.js';
3
+ import { DatabaseService } from '../services/Database.service.js';
4
+ export interface PageOptions {
5
+ limit?: number;
6
+ offset?: number;
7
+ }
8
+ export interface WorkflowRunLogsPage {
9
+ count: number;
10
+ logs: Log[];
11
+ }
12
+ export interface WorkflowRunFindOptions {
13
+ status?: WorkflowRunStatus;
14
+ workflow?: string;
15
+ id?: string;
16
+ parentRunId?: string;
17
+ parentActivityId?: string;
18
+ rootOnly?: boolean;
19
+ createdAfter?: number;
20
+ createdBefore?: number;
21
+ limit?: number;
22
+ offset?: number;
23
+ }
2
24
  export declare class WorkflowRunRepository {
3
- private readonly runs;
4
- findAll(): WorkflowRun[];
5
- findById(id: string): WorkflowRun | undefined;
6
- save(run: WorkflowRun): void;
7
- findBy(predicate: (run: WorkflowRun) => boolean): WorkflowRun[];
25
+ private readonly database;
26
+ constructor(database: DatabaseService);
27
+ private get db();
28
+ create(run: WorkflowRun): Promise<void>;
29
+ createMany(runs: readonly WorkflowRun[]): Promise<void>;
30
+ findById(id: string): Promise<WorkflowRun | undefined>;
31
+ findByParentActivityId(parentActivityId: string): Promise<WorkflowRun[]>;
32
+ findStartableIdsByParentActivityId(parentActivityId: string): string[];
33
+ findBatchSiblings(parentActivityId: string): Promise<WorkflowRun[]>;
34
+ countRunningByParentActivityId(parentActivityId: string): number;
35
+ find({ status, workflow, id, parentRunId, parentActivityId, rootOnly, createdAfter, createdBefore, limit, offset, }?: WorkflowRunFindOptions): Promise<[WorkflowRun[], number]>;
36
+ finish(id: string, output: unknown): Promise<void>;
37
+ reject(id: string, reason: WorkflowRunRejectedReason, activityId?: string): void;
38
+ createLogs(runId: string, logs: readonly Log[]): Promise<void>;
39
+ findLogs(runId: string, { limit, offset }?: PageOptions): Promise<WorkflowRunLogsPage>;
40
+ findParentActivityIdsWithRuns(parentActivityIds: readonly string[]): Set<string>;
41
+ private toRow;
42
+ private toModel;
8
43
  }
@@ -4,24 +4,217 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { Injectable } from 'pleroma';
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { Inject, Injectable } from 'pleroma';
11
+ import { WorkflowRun, } from '../models/WorkflowRun.js';
12
+ import { DatabaseService } from '../services/Database.service.js';
13
+ const LOGS_PAGE_SIZE = 25;
14
+ const INSERT = `
15
+ INSERT INTO workflow_runs (
16
+ id, workflow_id, status, input, output, rejected_reason,
17
+ rejected_activity_id, parent_run_id, parent_activity_id,
18
+ batch_index, batch_size, created_at, updated_at
19
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
20
+ `;
8
21
  let WorkflowRunRepository = class WorkflowRunRepository {
9
- runs = [];
10
- findAll() {
11
- return this.runs;
22
+ database;
23
+ constructor(database) {
24
+ this.database = database;
25
+ }
26
+ get db() {
27
+ return this.database.db;
28
+ }
29
+ async create(run) {
30
+ this.db.prepare(INSERT).run(...(await this.toRow(run)));
31
+ }
32
+ async createMany(runs) {
33
+ const rows = await Promise.all(runs.map(run => this.toRow(run)));
34
+ this.database.transaction(() => {
35
+ const insert = this.db.prepare(INSERT);
36
+ for (const row of rows)
37
+ insert.run(...row);
38
+ });
39
+ }
40
+ async findById(id) {
41
+ const row = this.db
42
+ .prepare('SELECT * FROM workflow_runs WHERE id = ?')
43
+ .get(id);
44
+ return row && (await this.toModel(row));
45
+ }
46
+ async findByParentActivityId(parentActivityId) {
47
+ const rows = this.db
48
+ .prepare(`SELECT * FROM workflow_runs
49
+ WHERE parent_activity_id = ?
50
+ ORDER BY batch_index, created_at, id`)
51
+ .all(parentActivityId);
52
+ return Promise.all(rows.map(row => this.toModel(row)));
53
+ }
54
+ findStartableIdsByParentActivityId(parentActivityId) {
55
+ const rows = this.db
56
+ .prepare(`SELECT workflow_runs.id FROM workflow_runs
57
+ WHERE workflow_runs.parent_activity_id = ?
58
+ AND workflow_runs.status = 'running'
59
+ AND NOT EXISTS (
60
+ SELECT 1 FROM workflow_run_activities
61
+ WHERE workflow_run_activities.run_id = workflow_runs.id
62
+ )
63
+ ORDER BY workflow_runs.batch_index, workflow_runs.created_at, workflow_runs.id`)
64
+ .all(parentActivityId);
65
+ return rows.map(row => row.id);
66
+ }
67
+ async findBatchSiblings(parentActivityId) {
68
+ const rows = this.db
69
+ .prepare(`SELECT * FROM workflow_runs
70
+ WHERE parent_activity_id = ? AND batch_size IS NOT NULL
71
+ ORDER BY batch_index`)
72
+ .all(parentActivityId);
73
+ return Promise.all(rows.map(row => this.toModel(row)));
74
+ }
75
+ countRunningByParentActivityId(parentActivityId) {
76
+ const row = this.db
77
+ .prepare(`SELECT COUNT(*) AS count FROM workflow_runs
78
+ WHERE parent_activity_id = ? AND status = 'running'`)
79
+ .get(parentActivityId);
80
+ return row.count;
81
+ }
82
+ async find({ status, workflow, id, parentRunId, parentActivityId, rootOnly, createdAfter, createdBefore, limit = 50, offset = 0, } = {}) {
83
+ const conditions = [];
84
+ const params = [];
85
+ if (status) {
86
+ conditions.push('status = ?');
87
+ params.push(status);
88
+ }
89
+ if (workflow) {
90
+ conditions.push('workflow_id = ?');
91
+ params.push(workflow);
92
+ }
93
+ if (id) {
94
+ conditions.push('instr(id, ?) = 1');
95
+ params.push(id);
96
+ }
97
+ if (parentRunId) {
98
+ conditions.push('parent_run_id = ?');
99
+ params.push(parentRunId);
100
+ }
101
+ if (parentActivityId) {
102
+ conditions.push('parent_activity_id = ?');
103
+ params.push(parentActivityId);
104
+ }
105
+ if (rootOnly)
106
+ conditions.push('parent_run_id IS NULL');
107
+ if (createdAfter !== undefined) {
108
+ conditions.push('created_at >= ?');
109
+ params.push(createdAfter);
110
+ }
111
+ if (createdBefore !== undefined) {
112
+ conditions.push('created_at <= ?');
113
+ params.push(createdBefore);
114
+ }
115
+ const where = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';
116
+ const { count } = this.db
117
+ .prepare(`SELECT COUNT(*) AS count FROM workflow_runs ${where}`)
118
+ .get(...params);
119
+ const rows = this.db
120
+ .prepare(`SELECT * FROM workflow_runs ${where}
121
+ ORDER BY created_at DESC, id DESC
122
+ LIMIT ? OFFSET ?`)
123
+ .all(...params, limit, offset);
124
+ return [await Promise.all(rows.map(row => this.toModel(row))), count];
125
+ }
126
+ async finish(id, output) {
127
+ this.db
128
+ .prepare(`UPDATE workflow_runs
129
+ SET status = 'fulfilled', output = ?, updated_at = ?
130
+ WHERE id = ?`)
131
+ .run(await this.database.encode(output), Date.now(), id);
132
+ }
133
+ reject(id, reason, activityId) {
134
+ this.db
135
+ .prepare(`UPDATE workflow_runs
136
+ SET status = 'rejected', rejected_reason = ?, rejected_activity_id = ?,
137
+ updated_at = ?
138
+ WHERE id = ?`)
139
+ .run(JSON.stringify(reason), activityId ?? null, Date.now(), id);
140
+ }
141
+ async createLogs(runId, logs) {
142
+ const rows = await Promise.all(logs.map(async (log) => [
143
+ runId,
144
+ log.level,
145
+ (await this.database.encode(log.args)) ?? '[]',
146
+ log.at,
147
+ ]));
148
+ this.database.transaction(() => {
149
+ const insert = this.db.prepare('INSERT INTO workflow_run_logs (run_id, level, args, at) VALUES (?, ?, ?, ?)');
150
+ for (const row of rows)
151
+ insert.run(...row);
152
+ });
153
+ }
154
+ async findLogs(runId, { limit = LOGS_PAGE_SIZE, offset = 0 } = {}) {
155
+ const { count } = this.db
156
+ .prepare('SELECT COUNT(*) AS count FROM workflow_run_logs WHERE run_id = ?')
157
+ .get(runId);
158
+ const rows = this.db
159
+ .prepare(`SELECT level, args, at FROM workflow_run_logs
160
+ WHERE run_id = ? ORDER BY at DESC, id DESC LIMIT ? OFFSET ?`)
161
+ .all(runId, limit, offset);
162
+ return {
163
+ count,
164
+ logs: await Promise.all(rows.map(async (row) => ({
165
+ level: row.level,
166
+ args: (await this.database.decode(row.args)),
167
+ at: row.at,
168
+ }))),
169
+ };
12
170
  }
13
- findById(id) {
14
- return this.runs.find(run => run.id === id);
171
+ findParentActivityIdsWithRuns(parentActivityIds) {
172
+ if (parentActivityIds.length === 0)
173
+ return new Set();
174
+ const rows = this.db
175
+ .prepare(`SELECT DISTINCT parent_activity_id FROM workflow_runs
176
+ WHERE parent_activity_id IN (${parentActivityIds.map(() => '?').join(', ')})`)
177
+ .all(...parentActivityIds);
178
+ return new Set(rows.map(row => row.parent_activity_id));
15
179
  }
16
- save(run) {
17
- this.runs.push(run);
180
+ async toRow(run) {
181
+ return [
182
+ run.id,
183
+ run.workflow,
184
+ run.status,
185
+ await this.database.encode(run.input),
186
+ await this.database.encode(run.output),
187
+ run.rejectedReason ? JSON.stringify(run.rejectedReason) : null,
188
+ run.rejectedActivityId ?? null,
189
+ run.parentWorkflowRunId ?? null,
190
+ run.parentWorkflowRunActivityId ?? null,
191
+ run.batchIndex ?? null,
192
+ run.batchSize ?? null,
193
+ run.createdAt.getTime(),
194
+ run.updatedAt.getTime(),
195
+ ];
18
196
  }
19
- findBy(predicate) {
20
- return this.runs.filter(predicate);
197
+ async toModel(row) {
198
+ return new WorkflowRun(row.workflow_id, await this.database.decode(row.input), {
199
+ id: row.id,
200
+ status: row.status,
201
+ output: await this.database.decode(row.output),
202
+ rejectedReason: row.rejected_reason
203
+ ? JSON.parse(row.rejected_reason)
204
+ : undefined,
205
+ rejectedActivityId: row.rejected_activity_id ?? undefined,
206
+ parentWorkflowRunId: row.parent_run_id ?? undefined,
207
+ parentWorkflowRunActivityId: row.parent_activity_id ?? undefined,
208
+ batchIndex: row.batch_index ?? undefined,
209
+ batchSize: row.batch_size ?? undefined,
210
+ createdAt: new Date(row.created_at),
211
+ updatedAt: new Date(row.updated_at),
212
+ });
21
213
  }
22
214
  };
23
215
  WorkflowRunRepository = __decorate([
24
- Injectable()
216
+ Injectable(),
217
+ __param(0, Inject(() => DatabaseService))
25
218
  ], WorkflowRunRepository);
26
219
  export { WorkflowRunRepository };
27
220
  //# sourceMappingURL=WorkflowRun.repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowRun.repository.js","sourceRoot":"","sources":["../../src/repositories/WorkflowRun.repository.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAK7B,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACf,IAAI,GAAkB,EAAE,CAAA;IAElC,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAEM,QAAQ,CAAC,EAAU;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAC7C,CAAC;IAEM,IAAI,CAAC,GAAgB;QAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACrB,CAAC;IAEM,MAAM,CAAC,SAAwC;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACpC,CAAC;CACF,CAAA;AAlBY,qBAAqB;IADjC,UAAU,EAAE;GACA,qBAAqB,CAkBjC"}
1
+ {"version":3,"file":"WorkflowRun.repository.js","sourceRoot":"","sources":["../../src/repositories/WorkflowRun.repository.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,21 @@
1
- import type { WorkflowRunActivity } from '../models/WorkflowRunActivity.js';
1
+ import { WorkflowRunActivity } from '../models/WorkflowRunActivity.js';
2
+ import { DatabaseService } from '../services/Database.service.js';
2
3
  export declare class WorkflowRunActivityRepository {
3
- private activitiesByRun;
4
- save(activity: WorkflowRunActivity): void;
5
- findById(id: string): WorkflowRunActivity | undefined;
6
- findByRunId(run: string): WorkflowRunActivity[];
7
- findBy(predicate: (activity: WorkflowRunActivity) => boolean): WorkflowRunActivity[];
4
+ private readonly database;
5
+ constructor(database: DatabaseService);
6
+ private get db();
7
+ create(activity: WorkflowRunActivity): Promise<void>;
8
+ findById(id: string): Promise<WorkflowRunActivity | undefined>;
9
+ findByRunId(runId: string): Promise<WorkflowRunActivity[]>;
10
+ findPageByRunId(runId: string, { limit, offset }?: {
11
+ limit?: number;
12
+ offset?: number;
13
+ }): Promise<{
14
+ count: number;
15
+ activities: WorkflowRunActivity[];
16
+ }>;
17
+ countByRunId(runId: string): number;
18
+ complete(id: string, output: unknown): Promise<void>;
19
+ fail(id: string, output?: unknown): Promise<void>;
20
+ private toModel;
8
21
  }
@@ -4,33 +4,83 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { Injectable } from 'pleroma';
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { Inject, Injectable } from 'pleroma';
11
+ import { WorkflowRunActivity, } from '../models/WorkflowRunActivity.js';
12
+ import { DatabaseService } from '../services/Database.service.js';
8
13
  let WorkflowRunActivityRepository = class WorkflowRunActivityRepository {
9
- activitiesByRun = new Map();
10
- save(activity) {
11
- const activities = this.activitiesByRun.get(activity.run.id) || [];
12
- activities.push(activity);
13
- this.activitiesByRun.set(activity.run.id, activities);
14
- }
15
- findById(id) {
16
- return this.activitiesByRun
17
- .values()
18
- .flatMap(activities => activities)
19
- .find(activity => activity.id === id);
20
- }
21
- findByRunId(run) {
22
- return this.activitiesByRun.get(run) || [];
23
- }
24
- findBy(predicate) {
25
- return this.activitiesByRun
26
- .values()
27
- .flatMap(activities => activities)
28
- .filter(predicate)
29
- .toArray();
14
+ database;
15
+ constructor(database) {
16
+ this.database = database;
17
+ }
18
+ get db() {
19
+ return this.database.db;
20
+ }
21
+ async create(activity) {
22
+ this.db
23
+ .prepare(`INSERT INTO workflow_run_activities (
24
+ id, run_id, position, type, kind, status, input, output, completed_at, created_at
25
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
26
+ .run(activity.id, activity.runId, activity.position, activity.type, activity.kind, activity.status, await this.database.encode(activity.input), await this.database.encode(activity.output), activity.completedAt?.getTime() ?? null, activity.createdAt.getTime());
27
+ }
28
+ async findById(id) {
29
+ const row = this.db
30
+ .prepare('SELECT * FROM workflow_run_activities WHERE id = ?')
31
+ .get(id);
32
+ return row && (await this.toModel(row));
33
+ }
34
+ async findByRunId(runId) {
35
+ const rows = this.db
36
+ .prepare('SELECT * FROM workflow_run_activities WHERE run_id = ? ORDER BY position')
37
+ .all(runId);
38
+ return Promise.all(rows.map(row => this.toModel(row)));
39
+ }
40
+ async findPageByRunId(runId, { limit = 25, offset = 0 } = {}) {
41
+ const rows = this.db
42
+ .prepare(`SELECT * FROM workflow_run_activities WHERE run_id = ?
43
+ ORDER BY position DESC LIMIT ? OFFSET ?`)
44
+ .all(runId, limit, offset);
45
+ return {
46
+ count: this.countByRunId(runId),
47
+ activities: await Promise.all(rows.map(row => this.toModel(row))),
48
+ };
49
+ }
50
+ countByRunId(runId) {
51
+ const row = this.db
52
+ .prepare('SELECT COUNT(*) AS count FROM workflow_run_activities WHERE run_id = ?')
53
+ .get(runId);
54
+ return row.count;
55
+ }
56
+ async complete(id, output) {
57
+ this.db
58
+ .prepare(`UPDATE workflow_run_activities
59
+ SET output = ?, completed_at = ?, status = 'fulfilled'
60
+ WHERE id = ?`)
61
+ .run(await this.database.encode(output), Date.now(), id);
62
+ }
63
+ async fail(id, output) {
64
+ this.db
65
+ .prepare(`UPDATE workflow_run_activities
66
+ SET output = ?, completed_at = ?, status = 'rejected'
67
+ WHERE id = ?`)
68
+ .run(await this.database.encode(output), Date.now(), id);
69
+ }
70
+ async toModel(row) {
71
+ return new WorkflowRunActivity(row.run_id, row.position, row.type, row.kind, {
72
+ id: row.id,
73
+ status: row.status,
74
+ input: await this.database.decode(row.input),
75
+ output: await this.database.decode(row.output),
76
+ completedAt: row.completed_at === null ? undefined : new Date(row.completed_at),
77
+ createdAt: new Date(row.created_at),
78
+ });
30
79
  }
31
80
  };
32
81
  WorkflowRunActivityRepository = __decorate([
33
- Injectable()
82
+ Injectable(),
83
+ __param(0, Inject(() => DatabaseService))
34
84
  ], WorkflowRunActivityRepository);
35
85
  export { WorkflowRunActivityRepository };
36
86
  //# sourceMappingURL=WorkflowRunActivity.repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowRunActivity.repository.js","sourceRoot":"","sources":["../../src/repositories/WorkflowRunActivity.repository.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAK7B,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAChC,eAAe,GAAG,IAAI,GAAG,EAAiC,CAAA;IAE3D,IAAI,CAAC,QAA6B;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA;QAElE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;IACvD,CAAC;IAEM,QAAQ,CAAC,EAAU;QACxB,OAAO,IAAI,CAAC,eAAe;aACxB,MAAM,EAAE;aACR,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC;aACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IACzC,CAAC;IAEM,WAAW,CAAC,GAAW;QAC5B,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;IAC5C,CAAC;IAEM,MAAM,CACX,SAAqD;QAErD,OAAO,IAAI,CAAC,eAAe;aACxB,MAAM,EAAE;aACR,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC;aACjC,MAAM,CAAC,SAAS,CAAC;aACjB,OAAO,EAAE,CAAA;IACd,CAAC;CACF,CAAA;AA/BY,6BAA6B;IADzC,UAAU,EAAE;GACA,6BAA6B,CA+BzC"}
1
+ {"version":3,"file":"WorkflowRunActivity.repository.js","sourceRoot":"","sources":["../../src/repositories/WorkflowRunActivity.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type Type from 'typebox';
2
+ import { WorkflowRunAsyncActivityPending, type AsyncActivityPendingStatus } from '../models/WorkflowRunActivity.js';
3
+ import { DatabaseService } from '../services/Database.service.js';
4
+ export interface PageQuery {
5
+ limit?: number;
6
+ offset?: number;
7
+ }
8
+ export interface WaitingAsyncActivitiesPage {
9
+ count: number;
10
+ activities: WaitingAsyncActivity[];
11
+ }
12
+ export interface WaitingAsyncActivity {
13
+ id: string;
14
+ pendingId: string;
15
+ runId: string;
16
+ workflowId: string;
17
+ type: string;
18
+ schema: Type.TSchema | undefined;
19
+ timeoutAt: Date | undefined;
20
+ }
21
+ export declare class WorkflowRunAsyncActivityPendingRepository {
22
+ private readonly database;
23
+ constructor(database: DatabaseService);
24
+ private get db();
25
+ create(pending: WorkflowRunAsyncActivityPending): Promise<void>;
26
+ findById(id: string): Promise<WorkflowRunAsyncActivityPending | undefined>;
27
+ findByActivityId(activityId: string): Promise<WorkflowRunAsyncActivityPending[]>;
28
+ findPageByActivityId(activityId: string, { limit, offset }?: PageQuery): Promise<{
29
+ count: number;
30
+ pendings: WorkflowRunAsyncActivityPending[];
31
+ }>;
32
+ findLastByActivityId(activityId: string): Promise<WorkflowRunAsyncActivityPending | undefined>;
33
+ findLastStatusByActivityIds(activityIds: readonly string[]): Map<string, AsyncActivityPendingStatus>;
34
+ findRootByActivityId(activityId: string): Promise<WorkflowRunAsyncActivityPending | undefined>;
35
+ updateStatus(id: string, status: AsyncActivityPendingStatus): void;
36
+ setPayload(id: string, payload: unknown): Promise<void>;
37
+ findWaiting({ limit, offset, }?: PageQuery): WaitingAsyncActivitiesPage;
38
+ private toModel;
39
+ }
@@ -0,0 +1,160 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { Inject, Injectable } from 'pleroma';
11
+ import { WorkflowRunAsyncActivityPending, } from '../models/WorkflowRunActivity.js';
12
+ import { DatabaseService } from '../services/Database.service.js';
13
+ const WAITING_PAGE_SIZE = 25;
14
+ const WAITING_FROM_WHERE = `
15
+ FROM workflow_run_async_activity_pendings
16
+ JOIN workflow_run_activities
17
+ ON workflow_run_activities.id = workflow_run_async_activity_pendings.activity_id
18
+ JOIN workflow_runs
19
+ ON workflow_runs.id = workflow_run_activities.run_id
20
+ WHERE workflow_run_async_activity_pendings.status = 'pending'
21
+ AND workflow_runs.status = 'running'
22
+ AND workflow_run_async_activity_pendings.position = (
23
+ SELECT MAX(last_pending.position)
24
+ FROM workflow_run_async_activity_pendings AS last_pending
25
+ WHERE last_pending.activity_id = workflow_run_async_activity_pendings.activity_id
26
+ )`;
27
+ let WorkflowRunAsyncActivityPendingRepository = class WorkflowRunAsyncActivityPendingRepository {
28
+ database;
29
+ constructor(database) {
30
+ this.database = database;
31
+ }
32
+ get db() {
33
+ return this.database.db;
34
+ }
35
+ async create(pending) {
36
+ this.db
37
+ .prepare(`INSERT INTO workflow_run_async_activity_pendings (
38
+ id, activity_id, position, previous_id, status, schema, timeout_at,
39
+ result, payload, created_at, updated_at
40
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
41
+ .run(pending.id, pending.activityId, pending.position, pending.previousId ?? null, pending.status, pending.schema ? JSON.stringify(pending.schema) : null, pending.timeoutAt?.getTime() ?? null, await this.database.encode(pending.result), await this.database.encode(pending.payload), pending.createdAt.getTime(), pending.updatedAt.getTime());
42
+ }
43
+ async findById(id) {
44
+ const row = this.db
45
+ .prepare('SELECT * FROM workflow_run_async_activity_pendings WHERE id = ?')
46
+ .get(id);
47
+ return row && (await this.toModel(row));
48
+ }
49
+ async findByActivityId(activityId) {
50
+ const rows = this.db
51
+ .prepare(`SELECT * FROM workflow_run_async_activity_pendings
52
+ WHERE activity_id = ? ORDER BY position`)
53
+ .all(activityId);
54
+ return Promise.all(rows.map(row => this.toModel(row)));
55
+ }
56
+ async findPageByActivityId(activityId, { limit = 25, offset = 0 } = {}) {
57
+ const { count } = this.db
58
+ .prepare(`SELECT COUNT(*) AS count FROM workflow_run_async_activity_pendings
59
+ WHERE activity_id = ?`)
60
+ .get(activityId);
61
+ const rows = this.db
62
+ .prepare(`SELECT * FROM workflow_run_async_activity_pendings
63
+ WHERE activity_id = ? ORDER BY position DESC LIMIT ? OFFSET ?`)
64
+ .all(activityId, limit, offset);
65
+ return {
66
+ count,
67
+ pendings: await Promise.all(rows.map(row => this.toModel(row))),
68
+ };
69
+ }
70
+ async findLastByActivityId(activityId) {
71
+ const row = this.db
72
+ .prepare(`SELECT * FROM workflow_run_async_activity_pendings
73
+ WHERE activity_id = ? ORDER BY position DESC LIMIT 1`)
74
+ .get(activityId);
75
+ return row && (await this.toModel(row));
76
+ }
77
+ findLastStatusByActivityIds(activityIds) {
78
+ if (activityIds.length === 0)
79
+ return new Map();
80
+ const rows = this.db
81
+ .prepare(`SELECT activity_id, status FROM workflow_run_async_activity_pendings
82
+ WHERE activity_id IN (${activityIds.map(() => '?').join(', ')})
83
+ AND position = (
84
+ SELECT MAX(last_pending.position)
85
+ FROM workflow_run_async_activity_pendings AS last_pending
86
+ WHERE last_pending.activity_id = workflow_run_async_activity_pendings.activity_id
87
+ )`)
88
+ .all(...activityIds);
89
+ return new Map(rows.map(row => [row.activity_id, row.status]));
90
+ }
91
+ async findRootByActivityId(activityId) {
92
+ const row = this.db
93
+ .prepare(`SELECT * FROM workflow_run_async_activity_pendings
94
+ WHERE activity_id = ? AND position = 0`)
95
+ .get(activityId);
96
+ return row && (await this.toModel(row));
97
+ }
98
+ updateStatus(id, status) {
99
+ this.db
100
+ .prepare(`UPDATE workflow_run_async_activity_pendings
101
+ SET status = ?, updated_at = ? WHERE id = ?`)
102
+ .run(status, Date.now(), id);
103
+ }
104
+ async setPayload(id, payload) {
105
+ this.db
106
+ .prepare(`UPDATE workflow_run_async_activity_pendings
107
+ SET payload = ?, updated_at = ? WHERE id = ?`)
108
+ .run(await this.database.encode(payload), Date.now(), id);
109
+ }
110
+ findWaiting({ limit = WAITING_PAGE_SIZE, offset = 0, } = {}) {
111
+ const { count } = this.db
112
+ .prepare(`SELECT COUNT(*) AS count ${WAITING_FROM_WHERE}`)
113
+ .get();
114
+ const rows = this.db
115
+ .prepare(`SELECT workflow_run_activities.id AS activity_id,
116
+ workflow_run_async_activity_pendings.id AS pending_id,
117
+ workflow_run_activities.run_id,
118
+ workflow_runs.workflow_id,
119
+ workflow_run_activities.type,
120
+ workflow_run_async_activity_pendings.schema,
121
+ workflow_run_async_activity_pendings.timeout_at
122
+ ${WAITING_FROM_WHERE}
123
+ ORDER BY workflow_runs.created_at DESC, workflow_runs.id DESC, workflow_run_activities.position
124
+ LIMIT ? OFFSET ?`)
125
+ .all(limit, offset);
126
+ return {
127
+ count,
128
+ activities: rows.map(row => ({
129
+ id: row.activity_id,
130
+ pendingId: row.pending_id,
131
+ runId: row.run_id,
132
+ workflowId: row.workflow_id,
133
+ type: row.type,
134
+ schema: row.schema
135
+ ? JSON.parse(row.schema)
136
+ : undefined,
137
+ timeoutAt: row.timeout_at === null ? undefined : new Date(row.timeout_at),
138
+ })),
139
+ };
140
+ }
141
+ async toModel(row) {
142
+ return new WorkflowRunAsyncActivityPending(row.activity_id, row.position, {
143
+ id: row.id,
144
+ previousId: row.previous_id ?? undefined,
145
+ status: row.status,
146
+ schema: row.schema ? JSON.parse(row.schema) : undefined,
147
+ timeoutAt: row.timeout_at === null ? undefined : new Date(row.timeout_at),
148
+ result: await this.database.decode(row.result),
149
+ payload: await this.database.decode(row.payload),
150
+ createdAt: new Date(row.created_at),
151
+ updatedAt: new Date(row.updated_at),
152
+ });
153
+ }
154
+ };
155
+ WorkflowRunAsyncActivityPendingRepository = __decorate([
156
+ Injectable(),
157
+ __param(0, Inject(() => DatabaseService))
158
+ ], WorkflowRunAsyncActivityPendingRepository);
159
+ export { WorkflowRunAsyncActivityPendingRepository };
160
+ //# sourceMappingURL=WorkflowRunAsyncActivityPending.repository.js.map