@t4h.framework/dev 0.0.0-experimental-20261006133319 → 0.0.0-experimental-20261007204009

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 (109) hide show
  1. package/CHANGELOG.md +4 -41
  2. package/README.md +12 -67
  3. package/dist/AppProcess.d.ts +2 -14
  4. package/dist/AppProcess.js +4 -22
  5. package/dist/AppProcess.js.map +1 -1
  6. package/dist/Server.d.ts +0 -4
  7. package/dist/Server.js +0 -10
  8. package/dist/Server.js.map +1 -1
  9. package/dist/constants/server.d.ts +1 -9
  10. package/dist/constants/server.js +1 -9
  11. package/dist/constants/server.js.map +1 -1
  12. package/dist/index.d.ts +0 -6
  13. package/dist/index.js +0 -5
  14. package/dist/index.js.map +1 -1
  15. package/dist/models/FrameworkConfig.d.ts +0 -11
  16. package/dist/models/FrameworkConfig.js +0 -1
  17. package/dist/models/FrameworkConfig.js.map +1 -1
  18. package/dist/models/claims/DevCacheClaim.d.ts +1 -2
  19. package/dist/models/claims/DevCacheClaim.js +6 -17
  20. package/dist/models/claims/DevCacheClaim.js.map +1 -1
  21. package/dist/models/claims/DevORMClaim.js +1 -6
  22. package/dist/models/claims/DevORMClaim.js.map +1 -1
  23. package/dist/services/CallbackToken.service.d.ts +1 -4
  24. package/dist/services/CallbackToken.service.js +3 -10
  25. package/dist/services/CallbackToken.service.js.map +1 -1
  26. package/dist/services/Database.service.d.ts +0 -8
  27. package/dist/services/Database.service.js +3 -18
  28. package/dist/services/Database.service.js.map +1 -1
  29. package/dist/services/WorkflowRunAsyncActivityFacade.service.d.ts +0 -2
  30. package/dist/services/WorkflowRunAsyncActivityFacade.service.js +0 -6
  31. package/dist/services/WorkflowRunAsyncActivityFacade.service.js.map +1 -1
  32. package/dist/services/WorkflowRunEvents.service.d.ts +0 -9
  33. package/dist/services/WorkflowRunEvents.service.js +2 -13
  34. package/dist/services/WorkflowRunEvents.service.js.map +1 -1
  35. package/dist/services/WorkflowRunFacade.service.d.ts +0 -1
  36. package/dist/services/WorkflowRunFacade.service.js +0 -3
  37. package/dist/services/WorkflowRunFacade.service.js.map +1 -1
  38. package/dist/transport/AppProcessJsonRpc.js +4 -17
  39. package/dist/transport/AppProcessJsonRpc.js.map +1 -1
  40. package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.d.ts +5 -3
  41. package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.js +10 -6
  42. package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.js.map +1 -1
  43. package/dist/use-cases/EnqueueWorkflowRunNextTick.usecase.d.ts +9 -3
  44. package/dist/use-cases/EnqueueWorkflowRunNextTick.usecase.js +39 -7
  45. package/dist/use-cases/EnqueueWorkflowRunNextTick.usecase.js.map +1 -1
  46. package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.d.ts +5 -5
  47. package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.js +15 -29
  48. package/dist/use-cases/ExecuteWorkflowRunAsyncActivity.usecase.js.map +1 -1
  49. package/dist/use-cases/NextTickWorkflowRun.usecase.d.ts +1 -6
  50. package/dist/use-cases/NextTickWorkflowRun.usecase.js +3 -54
  51. package/dist/use-cases/NextTickWorkflowRun.usecase.js.map +1 -1
  52. package/dist/use-cases/ReceiveWorkflowEvent.usecase.d.ts +2 -10
  53. package/dist/use-cases/ReceiveWorkflowEvent.usecase.js +5 -35
  54. package/dist/use-cases/ReceiveWorkflowEvent.usecase.js.map +1 -1
  55. package/dist/workers/app-process.d.ts +0 -8
  56. package/dist/workers/app-process.js +14 -114
  57. package/dist/workers/app-process.js.map +1 -1
  58. package/package.json +2 -2
  59. package/dist/HeadlessApp.d.ts +0 -65
  60. package/dist/HeadlessApp.js +0 -163
  61. package/dist/HeadlessApp.js.map +0 -1
  62. package/dist/models/LocalWorkflowRunJobExecutor.d.ts +0 -10
  63. package/dist/models/LocalWorkflowRunJobExecutor.js +0 -23
  64. package/dist/models/LocalWorkflowRunJobExecutor.js.map +0 -1
  65. package/dist/models/RuntimeControlServer.d.ts +0 -32
  66. package/dist/models/RuntimeControlServer.js +0 -75
  67. package/dist/models/RuntimeControlServer.js.map +0 -1
  68. package/dist/models/RuntimeDebugLog.d.ts +0 -10
  69. package/dist/models/RuntimeDebugLog.js +0 -32
  70. package/dist/models/RuntimeDebugLog.js.map +0 -1
  71. package/dist/models/RuntimeEvent.d.ts +0 -95
  72. package/dist/models/RuntimeEvent.js +0 -2
  73. package/dist/models/RuntimeEvent.js.map +0 -1
  74. package/dist/models/WorkflowRunJob.d.ts +0 -95
  75. package/dist/models/WorkflowRunJob.js +0 -2
  76. package/dist/models/WorkflowRunJob.js.map +0 -1
  77. package/dist/models/WorkflowWorkerPool.d.ts +0 -39
  78. package/dist/models/WorkflowWorkerPool.js +0 -154
  79. package/dist/models/WorkflowWorkerPool.js.map +0 -1
  80. package/dist/services/RuntimeEvents.service.d.ts +0 -16
  81. package/dist/services/RuntimeEvents.service.js +0 -35
  82. package/dist/services/RuntimeEvents.service.js.map +0 -1
  83. package/dist/services/WorkflowRunScheduler.service.d.ts +0 -62
  84. package/dist/services/WorkflowRunScheduler.service.js +0 -278
  85. package/dist/services/WorkflowRunScheduler.service.js.map +0 -1
  86. package/dist/tools/format-runtime-event.d.ts +0 -3
  87. package/dist/tools/format-runtime-event.js +0 -51
  88. package/dist/tools/format-runtime-event.js.map +0 -1
  89. package/dist/tools/run-workflow-run-job.d.ts +0 -3
  90. package/dist/tools/run-workflow-run-job.js +0 -25
  91. package/dist/tools/run-workflow-run-job.js.map +0 -1
  92. package/dist/tools/runtime-control-client.d.ts +0 -15
  93. package/dist/tools/runtime-control-client.js +0 -54
  94. package/dist/tools/runtime-control-client.js.map +0 -1
  95. package/dist/tools/runtime-registry.d.ts +0 -26
  96. package/dist/tools/runtime-registry.js +0 -57
  97. package/dist/tools/runtime-registry.js.map +0 -1
  98. package/dist/tools/start-runtime-monitor.d.ts +0 -12
  99. package/dist/tools/start-runtime-monitor.js +0 -69
  100. package/dist/tools/start-runtime-monitor.js.map +0 -1
  101. package/dist/tools/to-runtime-config.d.ts +0 -3
  102. package/dist/tools/to-runtime-config.js +0 -13
  103. package/dist/tools/to-runtime-config.js.map +0 -1
  104. package/dist/use-cases/RejectAbandonedWorkflowRuns.usecase.d.ts +0 -14
  105. package/dist/use-cases/RejectAbandonedWorkflowRuns.usecase.js +0 -55
  106. package/dist/use-cases/RejectAbandonedWorkflowRuns.usecase.js.map +0 -1
  107. package/dist/workers/workflow-worker.d.ts +0 -1
  108. package/dist/workers/workflow-worker.js +0 -58
  109. package/dist/workers/workflow-worker.js.map +0 -1
@@ -1,3 +0,0 @@
1
- import type { FrameworkRuntimeConfig } from '../models/FrameworkConfig.js';
2
- /** Validates `runtime` from `framework.config.*`. */
3
- export declare function toRuntimeConfig(runtime: FrameworkRuntimeConfig | undefined): FrameworkRuntimeConfig | undefined;
@@ -1,13 +0,0 @@
1
- /** Validates `runtime` from `framework.config.*`. */
2
- export function toRuntimeConfig(runtime) {
3
- if (!runtime)
4
- return undefined;
5
- const { workers, concurrency } = runtime;
6
- if (workers !== undefined && !(Number.isInteger(workers) && workers >= 0))
7
- throw new Error(`framework.config runtime.workers must be an integer >= 0, got ${workers}`);
8
- if (concurrency !== undefined &&
9
- !(Number.isInteger(concurrency) && concurrency >= 1))
10
- throw new Error(`framework.config runtime.concurrency must be an integer >= 1, got ${concurrency}`);
11
- return { workers, concurrency };
12
- }
13
- //# sourceMappingURL=to-runtime-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"to-runtime-config.js","sourceRoot":"","sources":["../../src/tools/to-runtime-config.ts"],"names":[],"mappings":"AAEA,qDAAqD;AACrD,MAAM,UAAU,eAAe,CAC7B,OAA2C;IAE3C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAA;IAE9B,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;IAExC,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,iEAAiE,OAAO,EAAE,CAC3E,CAAA;IAEH,IACE,WAAW,KAAK,SAAS;QACzB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,CAAC;QAEpD,MAAM,IAAI,KAAK,CACb,qEAAqE,WAAW,EAAE,CACnF,CAAA;IAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;AACjC,CAAC"}
@@ -1,14 +0,0 @@
1
- import { WorkflowRunRepository } from '../repositories/WorkflowRun.repository.js';
2
- import { WorkflowRunEventsService } from '../services/WorkflowRunEvents.service.js';
3
- import { WorkflowRunFacade } from '../services/WorkflowRunFacade.service.js';
4
- /**
5
- * Rejects runs pinned to a workflow worker that died: the activity classes
6
- * they pushed lived only in that thread, so they cannot be resumed.
7
- */
8
- export declare class RejectAbandonedWorkflowRuns {
9
- private readonly workflowRunRepository;
10
- private readonly workflowRun;
11
- private readonly events;
12
- constructor(workflowRunRepository: WorkflowRunRepository, workflowRun: WorkflowRunFacade, events: WorkflowRunEventsService);
13
- reject(runIds: readonly string[], cause: Error): Promise<void>;
14
- }
@@ -1,55 +0,0 @@
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 { styleText } from 'node:util';
11
- import { Inject, Injectable } from 'pleroma';
12
- import { WorkflowRunRepository } from '../repositories/WorkflowRun.repository.js';
13
- import { WorkflowRunEventsService } from '../services/WorkflowRunEvents.service.js';
14
- import { WorkflowRunFacade } from '../services/WorkflowRunFacade.service.js';
15
- import { toRejectedReason } from '../tools/to-rejected-reason.js';
16
- /**
17
- * Rejects runs pinned to a workflow worker that died: the activity classes
18
- * they pushed lived only in that thread, so they cannot be resumed.
19
- */
20
- let RejectAbandonedWorkflowRuns = class RejectAbandonedWorkflowRuns {
21
- workflowRunRepository;
22
- workflowRun;
23
- events;
24
- constructor(workflowRunRepository, workflowRun, events) {
25
- this.workflowRunRepository = workflowRunRepository;
26
- this.workflowRun = workflowRun;
27
- this.events = events;
28
- }
29
- async reject(runIds, cause) {
30
- const reason = toRejectedReason(new Error('The workflow worker running this run stopped', { cause }));
31
- for (const runId of runIds) {
32
- try {
33
- const run = await this.workflowRunRepository.findById(runId);
34
- if (run?.status !== 'running')
35
- continue;
36
- await this.workflowRunRepository.reject(runId, reason);
37
- this.events.runUpdated(runId);
38
- await this.workflowRun.onWorkflowRunFinished(runId);
39
- }
40
- catch (error) {
41
- console.error(styleText('red', `[Runtime] could not reject run ${runId}:`, {
42
- stream: process.stderr,
43
- }), error);
44
- }
45
- }
46
- }
47
- };
48
- RejectAbandonedWorkflowRuns = __decorate([
49
- Injectable(),
50
- __param(0, Inject(() => WorkflowRunRepository)),
51
- __param(1, Inject(() => WorkflowRunFacade)),
52
- __param(2, Inject(() => WorkflowRunEventsService))
53
- ], RejectAbandonedWorkflowRuns);
54
- export { RejectAbandonedWorkflowRuns };
55
- //# sourceMappingURL=RejectAbandonedWorkflowRuns.usecase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RejectAbandonedWorkflowRuns.usecase.js","sourceRoot":"","sources":["../../src/use-cases/RejectAbandonedWorkflowRuns.usecase.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEjE;;;GAGG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAGnB;IAGA;IAGA;IARnB,YAEmB,qBAA4C,EAG5C,WAA8B,EAG9B,MAAgC;QANhC,0BAAqB,GAArB,qBAAqB,CAAuB;QAG5C,gBAAW,GAAX,WAAW,CAAmB;QAG9B,WAAM,GAAN,MAAM,CAA0B;IAChD,CAAC;IAEG,KAAK,CAAC,MAAM,CAAC,MAAyB,EAAE,KAAY;QACzD,MAAM,MAAM,GAAG,gBAAgB,CAC7B,IAAI,KAAK,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,CAAC,CACrE,CAAA;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;gBAE5D,IAAI,GAAG,EAAE,MAAM,KAAK,SAAS;oBAAE,SAAQ;gBAEvC,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;gBAEtD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;gBAE7B,MAAM,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CACX,SAAS,CAAC,KAAK,EAAE,kCAAkC,KAAK,GAAG,EAAE;oBAC3D,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB,CAAC,EACF,KAAK,CACN,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAtCY,2BAA2B;IADvC,UAAU,EAAE;IAGR,WAAA,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAA;IAGnC,WAAA,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAA;IAG/B,WAAA,MAAM,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,CAAA;GAR9B,2BAA2B,CAsCvC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,58 +0,0 @@
1
- import { parentPort, workerData } from 'node:worker_threads';
2
- import { Env } from '@t4h.framework/core';
3
- import { container } from 'pleroma';
4
- import { env, loadApp } from './app-process.js';
5
- import { getClaims } from '../claims.js';
6
- import { toSerializedJobError } from '../models/WorkflowWorkerPool.js';
7
- import { CallbackTokenService } from '../services/CallbackToken.service.js';
8
- import { configureDatabase } from '../services/Database.service.js';
9
- import { RuntimeEventsService } from '../services/RuntimeEvents.service.js';
10
- import { WorkflowRunEventsService } from '../services/WorkflowRunEvents.service.js';
11
- import { WorkflowRunSchedulerService } from '../services/WorkflowRunScheduler.service.js';
12
- import { getJsonCodec } from '../tools/json-codec.js';
13
- import { runWorkflowRunJob } from '../tools/run-workflow-run-job.js';
14
- if (!parentPort)
15
- throw new Error('workflow-worker must run as a worker thread');
16
- const port = parentPort;
17
- const post = (message) => port.postMessage(message);
18
- const data = workerData;
19
- try {
20
- configureDatabase({ location: data.databaseLocation, createSchema: false });
21
- container.resolve(CallbackTokenService).useSecret(data.callbackSecret);
22
- container.resolve(WorkflowRunSchedulerService).forwardTo({
23
- enqueue: job => post({ type: 'queue:enqueue', job }),
24
- scheduleTimeout: (runId, pendingId, timeoutAt) => post({
25
- type: 'timeout:schedule',
26
- runId,
27
- pendingId,
28
- timeoutAt: timeoutAt.getTime(),
29
- }),
30
- cancelTimeout: pendingId => post({ type: 'timeout:cancel', pendingId }),
31
- });
32
- container
33
- .resolve(RuntimeEventsService)
34
- .forwardTo(event => post({ type: 'runtime:event', event }));
35
- container.resolve(WorkflowRunEventsService).forwardTo({
36
- runCreated: payload => post({ type: 'events:run-created', payload }),
37
- runUpdated: runId => post({ type: 'events:run-updated', runId }),
38
- });
39
- await loadApp(data.entrypoint, data);
40
- // Load lazily built integrations now, not on the first job.
41
- await Promise.all([getClaims(), getJsonCodec()]);
42
- port.on('message', ({ id, job }) => {
43
- const reject = (error) => post({ type: 'job:rejected', id, error: toSerializedJobError(error) });
44
- Env.run(env, () => runWorkflowRunJob(job)).then(value => {
45
- try {
46
- post({ type: 'job:fulfilled', id, value });
47
- }
48
- catch (error) {
49
- reject(error);
50
- }
51
- }, reject);
52
- });
53
- post({ type: 'ready' });
54
- }
55
- catch (error) {
56
- post({ type: 'boot-failed', error: toSerializedJobError(error) });
57
- }
58
- //# sourceMappingURL=workflow-worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow-worker.js","sourceRoot":"","sources":["../../src/workers/workflow-worker.ts"],"names":[],"mappings":"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"}