@t4h.framework/dev 0.3.0 → 0.3.1

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 (74) hide show
  1. package/dist/AppManager.d.ts +21 -0
  2. package/dist/AppManager.js +83 -0
  3. package/dist/AppManager.js.map +1 -0
  4. package/dist/EventStore.d.ts +57 -0
  5. package/dist/EventStore.js +15 -0
  6. package/dist/EventStore.js.map +1 -0
  7. package/dist/Server.d.ts +27 -0
  8. package/dist/Server.js +64 -0
  9. package/dist/Server.js.map +1 -0
  10. package/dist/bootstrap.d.ts +8 -0
  11. package/dist/bootstrap.js +12 -0
  12. package/dist/bootstrap.js.map +1 -0
  13. package/dist/controllers/Environment.controller.d.ts +4 -0
  14. package/dist/controllers/Environment.controller.js +31 -0
  15. package/dist/controllers/Environment.controller.js.map +1 -0
  16. package/dist/controllers/Workflows.controller.d.ts +27 -0
  17. package/dist/controllers/Workflows.controller.js +119 -0
  18. package/dist/controllers/Workflows.controller.js.map +1 -0
  19. package/dist/decorators/JsonRpcMethod.d.ts +12 -0
  20. package/dist/decorators/JsonRpcMethod.js +15 -0
  21. package/dist/decorators/JsonRpcMethod.js.map +1 -0
  22. package/dist/events.d.ts +16 -0
  23. package/dist/events.js +2 -0
  24. package/dist/events.js.map +1 -0
  25. package/dist/helpers/get-json-rpc-server-methods.d.ts +4 -0
  26. package/dist/helpers/get-json-rpc-server-methods.js +17 -0
  27. package/dist/helpers/get-json-rpc-server-methods.js.map +1 -0
  28. package/dist/outputs/WorkflowRunActivityOutput.d.ts +10 -0
  29. package/dist/outputs/WorkflowRunActivityOutput.js +2 -0
  30. package/dist/outputs/WorkflowRunActivityOutput.js.map +1 -0
  31. package/dist/outputs/WorkflowRunAsyncActivityOutput.d.ts +6 -0
  32. package/dist/outputs/WorkflowRunAsyncActivityOutput.js +2 -0
  33. package/dist/outputs/WorkflowRunAsyncActivityOutput.js.map +1 -0
  34. package/dist/outputs/WorkflowRunOutput.d.ts +18 -0
  35. package/dist/outputs/WorkflowRunOutput.js +2 -0
  36. package/dist/outputs/WorkflowRunOutput.js.map +1 -0
  37. package/dist/services/DevEventNotifier.service.d.ts +18 -0
  38. package/dist/services/DevEventNotifier.service.js +43 -0
  39. package/dist/services/DevEventNotifier.service.js.map +1 -0
  40. package/dist/services/WorkflowRunEventEmitter.service.d.ts +17 -0
  41. package/dist/services/WorkflowRunEventEmitter.service.js +74 -0
  42. package/dist/services/WorkflowRunEventEmitter.service.js.map +1 -0
  43. package/dist/services/WorkflowRunEventProducer.service.d.ts +11 -0
  44. package/dist/services/WorkflowRunEventProducer.service.js +26 -0
  45. package/dist/services/WorkflowRunEventProducer.service.js.map +1 -0
  46. package/dist/socket/DevServerSocketBridge.d.ts +16 -0
  47. package/dist/socket/DevServerSocketBridge.js +75 -0
  48. package/dist/socket/DevServerSocketBridge.js.map +1 -0
  49. package/dist/socket/ServerSocket.d.ts +18 -0
  50. package/dist/socket/ServerSocket.js +57 -0
  51. package/dist/socket/ServerSocket.js.map +1 -0
  52. package/dist/tools/is-localhost.d.ts +1 -0
  53. package/dist/tools/is-localhost.js +11 -0
  54. package/dist/tools/is-localhost.js.map +1 -0
  55. package/dist/typings/events.d.ts +43 -0
  56. package/dist/typings/events.js +10 -0
  57. package/dist/typings/events.js.map +1 -0
  58. package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.js +1 -1
  59. package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.js.map +1 -1
  60. package/dist/use-cases/TimeoutWorkflowRunAsyncActivity.usecase.js +1 -1
  61. package/dist/use-cases/TimeoutWorkflowRunAsyncActivity.usecase.js.map +1 -1
  62. package/dist/use-cases/WorkflowRunAsyncActivity.usecase.js +1 -1
  63. package/dist/use-cases/WorkflowRunAsyncActivity.usecase.js.map +1 -1
  64. package/dist/use-cases/WorkflowRunBuildHistory.usecase.js +2 -1
  65. package/dist/use-cases/WorkflowRunBuildHistory.usecase.js.map +1 -1
  66. package/dist/use-cases/WorkflowRunSyncActivity.usecase.js +1 -1
  67. package/dist/use-cases/WorkflowRunSyncActivity.usecase.js.map +1 -1
  68. package/package.json +4 -4
  69. package/dist/models/SftpClientCache.d.ts +0 -6
  70. package/dist/models/SftpClientCache.js +0 -34
  71. package/dist/models/SftpClientCache.js.map +0 -1
  72. package/dist/tools/json-schema-to-inquirer-question.d.ts +0 -11
  73. package/dist/tools/json-schema-to-inquirer-question.js +0 -34
  74. package/dist/tools/json-schema-to-inquirer-question.js.map +0 -1
@@ -0,0 +1,21 @@
1
+ import { ChildProcess } from 'node:child_process';
2
+ export interface AppManagerEvents {
3
+ onBuildStatus?(status: string): void;
4
+ onBuildSuccess?(): void;
5
+ onBuildFail?(diagnostics: string): void;
6
+ }
7
+ export interface AppManagerOptions {
8
+ events?: AppManagerEvents;
9
+ onAppRestart?: (app: ChildProcess) => void;
10
+ }
11
+ export declare class AppManager {
12
+ private readonly entrypoint;
13
+ private readonly env;
14
+ private readonly options;
15
+ private tsBuildWatcher;
16
+ private app;
17
+ constructor(entrypoint: string, env: Record<string, string>, options?: AppManagerOptions);
18
+ start(): Promise<ChildProcess>;
19
+ stop(): void;
20
+ protected onTsBuildSuccess(packageJsonPath: string, outDir: string): Promise<ChildProcess>;
21
+ }
@@ -0,0 +1,83 @@
1
+ import { ChildProcess, fork } from 'node:child_process';
2
+ import path from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ import { mkdirOutDirProjectFromTsConfigPathAndJsonPackagePath } from './tools/mkdir-out-dir-project-from-ts-config-path-and-json-package-path.js';
5
+ import { resolvePackageJsonPath } from './tools/resolve-package-json-path.js';
6
+ import { resolveTsconfigFromPackageJsonPath } from './tools/resolve-tsconfig-path-from-package-json-path.js';
7
+ import { tsBuildWatch } from './tools/ts-build-watch.js';
8
+ export class AppManager {
9
+ entrypoint;
10
+ env;
11
+ options;
12
+ tsBuildWatcher;
13
+ app;
14
+ constructor(entrypoint, env, options = {}) {
15
+ this.entrypoint = entrypoint;
16
+ this.env = env;
17
+ this.options = options;
18
+ }
19
+ async start() {
20
+ const packageJsonPath = await resolvePackageJsonPath(this.entrypoint);
21
+ const tsConfigPath = await resolveTsconfigFromPackageJsonPath(packageJsonPath);
22
+ const outDir = await mkdirOutDirProjectFromTsConfigPathAndJsonPackagePath(tsConfigPath, packageJsonPath);
23
+ return new Promise((resolve, reject) => {
24
+ let isSettled = false;
25
+ this.tsBuildWatcher = tsBuildWatch(tsConfigPath, {
26
+ outDir: path.join(outDir, 'dist'),
27
+ sourceMap: true,
28
+ declaration: false,
29
+ declarationMap: false,
30
+ }, {
31
+ onSuccess: async () => {
32
+ if (this.app)
33
+ this.app.kill();
34
+ this.options.events?.onBuildSuccess?.();
35
+ this.app = await this.onTsBuildSuccess(packageJsonPath, outDir);
36
+ if (isSettled) {
37
+ this.options.onAppRestart?.(this.app);
38
+ return;
39
+ }
40
+ isSettled = true;
41
+ resolve(this.app);
42
+ },
43
+ onFail: diagnostics => {
44
+ const onBuildFail = this.options.events?.onBuildFail;
45
+ if (!onBuildFail)
46
+ console.error('ts build failed:', diagnostics);
47
+ onBuildFail?.(diagnostics);
48
+ if (isSettled)
49
+ return;
50
+ isSettled = true;
51
+ reject(new Error(diagnostics));
52
+ },
53
+ onStatus: status => {
54
+ const onBuildStatus = this.options.events?.onBuildStatus;
55
+ if (!onBuildStatus)
56
+ console.log('ts build status:', status);
57
+ onBuildStatus?.(status);
58
+ },
59
+ });
60
+ });
61
+ }
62
+ stop() {
63
+ if (!this.tsBuildWatcher)
64
+ throw new Error('tsBuildWatcher is not initialized, did you call start()?');
65
+ this.tsBuildWatcher.close();
66
+ if (!this.app)
67
+ return;
68
+ this.app.kill();
69
+ }
70
+ async onTsBuildSuccess(packageJsonPath, outDir) {
71
+ const { default: packageJson } = await import(packageJsonPath, {
72
+ with: { type: 'json' },
73
+ });
74
+ if (typeof packageJson.main !== 'string')
75
+ throw new Error('main in package.json is not a string');
76
+ const entrypoint = pathToFileURL(path.join(outDir, 'dist', packageJson.main)).href;
77
+ return fork(path.join(import.meta.dirname, 'workers', 'app-process.js'), [
78
+ entrypoint,
79
+ ...Object.entries(this.env).map(([name, value]) => `${name}=${value}`),
80
+ ], { stdio: ['ignore', 'inherit', 'inherit', 'ipc'] });
81
+ }
82
+ }
83
+ //# sourceMappingURL=AppManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppManager.js","sourceRoot":"","sources":["../src/AppManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { App, Log } from '@t4h.framework/core';
3
+ import type { WorkflowRunStatus } from './models/WorkflowRun.js';
4
+ import type { AsyncActivityPendingStatus, WorkflowRunActivityStatus } from './models/WorkflowRunActivity.js';
5
+ export declare enum Events {
6
+ Manifest = "manifest",
7
+ WorkflowRun = "workflow-run",
8
+ WorkflowRunActivity = "workflow-run:activity",
9
+ WorkflowRunAsyncActivity = "workflow-run:async-activity",
10
+ WorkflowRunLog = "workflow-run:log"
11
+ }
12
+ interface IEvent<T extends string> {
13
+ event: T;
14
+ }
15
+ export interface IManifestEvent extends IEvent<Events.Manifest>, ReturnType<App['toManifest']> {
16
+ }
17
+ export interface IWorkflowRunEvent extends IEvent<Events.WorkflowRun> {
18
+ id: string;
19
+ workflow: string;
20
+ status: WorkflowRunStatus;
21
+ createdAt: number;
22
+ finishedAt?: number;
23
+ input?: Record<string, unknown>;
24
+ output?: unknown;
25
+ error?: {
26
+ message: string;
27
+ stack?: string;
28
+ };
29
+ }
30
+ export interface IWorkflowRunActivityEvent extends IEvent<Events.WorkflowRunActivity> {
31
+ id: string;
32
+ workflowRun: string;
33
+ name: string;
34
+ type: 'sync' | 'async';
35
+ status: WorkflowRunActivityStatus;
36
+ output?: unknown;
37
+ createdAt: number;
38
+ finishedAt?: number;
39
+ }
40
+ export interface IWorkflowRunAsyncActivityEvent extends IEvent<Events.WorkflowRunAsyncActivity> {
41
+ id: string;
42
+ workflowRun: string;
43
+ activity: string;
44
+ status: AsyncActivityPendingStatus;
45
+ timeoutAt?: number;
46
+ }
47
+ export interface IWorkflowRunLogEvent extends IEvent<Events.WorkflowRunLog> {
48
+ workflowRun: string;
49
+ log: Log;
50
+ }
51
+ export type Event = IWorkflowRunEvent | IWorkflowRunActivityEvent | IWorkflowRunAsyncActivityEvent | IWorkflowRunLogEvent | IManifestEvent;
52
+ export declare class EventStore extends EventEmitter {
53
+ push<T extends Event['event']>(event: T, data: Omit<Extract<Event, {
54
+ event: T;
55
+ }>, 'event'>): void;
56
+ }
57
+ export {};
@@ -0,0 +1,15 @@
1
+ import { EventEmitter } from 'node:events';
2
+ export var Events;
3
+ (function (Events) {
4
+ Events["Manifest"] = "manifest";
5
+ Events["WorkflowRun"] = "workflow-run";
6
+ Events["WorkflowRunActivity"] = "workflow-run:activity";
7
+ Events["WorkflowRunAsyncActivity"] = "workflow-run:async-activity";
8
+ Events["WorkflowRunLog"] = "workflow-run:log";
9
+ })(Events || (Events = {}));
10
+ export class EventStore extends EventEmitter {
11
+ push(event, data) {
12
+ this.emit(event, { event, ...data });
13
+ }
14
+ }
15
+ //# sourceMappingURL=EventStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventStore.js","sourceRoot":"","sources":["../src/EventStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAU1C,MAAM,CAAN,IAAY,MAMX;AAND,WAAY,MAAM;IAChB,+BAAqB,CAAA;IACrB,sCAA4B,CAAA;IAC5B,uDAA6C,CAAA;IAC7C,kEAAwD,CAAA;IACxD,6CAAmC,CAAA;AACrC,CAAC,EANW,MAAM,KAAN,MAAM,QAMjB;AAmDD,MAAM,OAAO,UAAW,SAAQ,YAAY;IACnC,IAAI,CACT,KAAQ,EACR,IAAiD;QAEjD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IACtC,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import { ChildProcess } from 'node:child_process';
2
+ import { EventStore } from './EventStore.js';
3
+ export interface ServerEvents {
4
+ onStop?(): Promise<void> | void;
5
+ }
6
+ export interface ServerConfig {
7
+ events?: ServerEvents;
8
+ }
9
+ export declare class Server {
10
+ private readonly config;
11
+ readonly events: EventStore;
12
+ private app;
13
+ private server;
14
+ private worker;
15
+ constructor(config?: ServerConfig);
16
+ start(app: ChildProcess): Promise<this>;
17
+ updateApp(app: ChildProcess): void;
18
+ stop(): Promise<void>;
19
+ private readonly onAppMessage;
20
+ runWorkflow(workflowId: string, input: unknown): Promise<any>;
21
+ setEnv(name: string, value: string): Promise<any>;
22
+ listEnv(): Promise<any>;
23
+ listWaitingAsyncActivities(): Promise<any>;
24
+ listWorkflowRuns(): Promise<any>;
25
+ getWorkflowRun(id: string): Promise<any>;
26
+ advanceAsyncActivity(id: string, payload: unknown): Promise<any>;
27
+ }
package/dist/Server.js ADDED
@@ -0,0 +1,64 @@
1
+ import { ChildProcess } from 'node:child_process';
2
+ import Type from 'typebox';
3
+ import { EventStore, Events } from './EventStore.js';
4
+ import { JSONRPCClient } from './models/JSONRPCClient.js';
5
+ import { JSONRPCServer, JSONRPCServerMethod } from './models/JSONRPCServer.js';
6
+ export class Server {
7
+ config;
8
+ events = new EventStore();
9
+ app;
10
+ server;
11
+ worker;
12
+ constructor(config = {}) {
13
+ this.config = config;
14
+ }
15
+ async start(app) {
16
+ this.app = app;
17
+ this.server = new JSONRPCServer([
18
+ new JSONRPCServerMethod(Events.Manifest, { schema: [Type.Any()] }, manifest => this.events.push(Events.Manifest, manifest)),
19
+ new JSONRPCServerMethod(Events.WorkflowRunLog, { schema: [Type.Any()] }, event => this.events.push(Events.WorkflowRunLog, event)),
20
+ new JSONRPCServerMethod(Events.WorkflowRun, { schema: [Type.Any()] }, event => this.events.push(Events.WorkflowRun, event)),
21
+ new JSONRPCServerMethod(Events.WorkflowRunActivity, { schema: [Type.Any()] }, event => this.events.push(Events.WorkflowRunActivity, event)),
22
+ new JSONRPCServerMethod(Events.WorkflowRunAsyncActivity, { schema: [Type.Any()] }, event => this.events.push(Events.WorkflowRunAsyncActivity, event)),
23
+ ], message => {
24
+ this.app.send(message);
25
+ });
26
+ this.worker = new JSONRPCClient(message => {
27
+ this.app.send(message);
28
+ });
29
+ app.on('message', this.onAppMessage);
30
+ return this;
31
+ }
32
+ updateApp(app) {
33
+ this.app.off('message', this.onAppMessage);
34
+ this.app = app;
35
+ this.app.on('message', this.onAppMessage);
36
+ }
37
+ async stop() {
38
+ this.app.kill();
39
+ await this.config.events?.onStop?.();
40
+ }
41
+ onAppMessage = (message) => Promise.all([this.server.handle(message), this.worker.handle(message)]);
42
+ async runWorkflow(workflowId, input) {
43
+ return await this.worker.call('workflow.run', workflowId, input);
44
+ }
45
+ async setEnv(name, value) {
46
+ return await this.worker.call('env.set', name, value);
47
+ }
48
+ async listEnv() {
49
+ return await this.worker.call('env.list');
50
+ }
51
+ async listWaitingAsyncActivities() {
52
+ return await this.worker.call('workflow.async-activities.waiting.list');
53
+ }
54
+ async listWorkflowRuns() {
55
+ return await this.worker.call('workflow.runs.list');
56
+ }
57
+ async getWorkflowRun(id) {
58
+ return await this.worker.call('workflow.runs.get', id);
59
+ }
60
+ async advanceAsyncActivity(id, payload) {
61
+ return await this.worker.call('workflow.async-activities.advance', id, payload);
62
+ }
63
+ }
64
+ //# sourceMappingURL=Server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type AppManagerEvents } from './AppManager.js';
2
+ import { Server } from './Server.js';
3
+ interface BootstrapOptions {
4
+ env?: Record<string, string>;
5
+ events?: AppManagerEvents;
6
+ }
7
+ export declare function bootstrap(entrypoint: string, options?: BootstrapOptions): Promise<Server>;
8
+ export {};
@@ -0,0 +1,12 @@
1
+ import { AppManager } from './AppManager.js';
2
+ import { Server } from './Server.js';
3
+ export async function bootstrap(entrypoint, options = {}) {
4
+ const server = new Server();
5
+ const manager = new AppManager(entrypoint, options.env ?? {}, {
6
+ events: options.events,
7
+ onAppRestart: app => server.updateApp(app),
8
+ });
9
+ const app = await manager.start();
10
+ return server.start(app);
11
+ }
12
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAyB,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAOpC,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,UAAkB,EAClB,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;IAE3B,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QAC5D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;KAC3C,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;IAEjC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare class EnvironmentController {
2
+ set(name: string, value: string): Promise<void>;
3
+ list(): Promise<string[]>;
4
+ }
@@ -0,0 +1,31 @@
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
+ import { Injectable } from 'pleroma';
8
+ import Type from 'typebox';
9
+ import { JsonRpcMethod } from '../decorators/JsonRpcMethod.js';
10
+ import { env } from '../workers/app-process.js';
11
+ let EnvironmentController = class EnvironmentController {
12
+ async set(name, value) {
13
+ env.set(name, value);
14
+ }
15
+ async list() {
16
+ return env.values().toArray();
17
+ }
18
+ };
19
+ __decorate([
20
+ JsonRpcMethod('env.set', {
21
+ schema: [Type.String(), Type.String()],
22
+ })
23
+ ], EnvironmentController.prototype, "set", null);
24
+ __decorate([
25
+ JsonRpcMethod('env.list')
26
+ ], EnvironmentController.prototype, "list", null);
27
+ EnvironmentController = __decorate([
28
+ Injectable()
29
+ ], EnvironmentController);
30
+ export { EnvironmentController };
31
+ //# sourceMappingURL=Environment.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Environment.controller.js","sourceRoot":"","sources":["../../src/controllers/Environment.controller.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,IAAI,MAAM,SAAS,CAAA;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAA;AAGxC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAInB,AAAN,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,KAAa;QAC1C,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACtB,CAAC;IAGY,AAAN,KAAK,CAAC,IAAI;QACf,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;IAC/B,CAAC;CACF,CAAA;AARc;IAHZ,aAAa,CAAC,SAAS,EAAE;QACxB,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;KACvC,CAAC;gDAGD;AAGY;IADZ,aAAa,CAAC,UAAU,CAAC;iDAGzB;AAXU,qBAAqB;IADjC,UAAU,EAAE;GACA,qBAAqB,CAYjC"}
@@ -0,0 +1,27 @@
1
+ import type { WorkflowRunAsyncActivityOutput } from '../outputs/WorkflowRunAsyncActivityOutput.js';
2
+ import type { WorkflowRunOutput } from '../outputs/WorkflowRunOutput.js';
3
+ import { WorkflowRunRepository } from '../repositories/WorkflowRun.repository.js';
4
+ import { WorkflowRunActivityRepository } from '../repositories/WorkflowRunActivity.repository.js';
5
+ import { BuildWorkflowRunResultService } from '../services/BuildWorkflowRunResult.service.js';
6
+ import { WorkflowRunAsyncActivityFacade } from '../services/WorkflowRunAsyncActivityFacade.service.js';
7
+ import { WorkflowRunFacade } from '../services/WorkflowRunFacade.service.js';
8
+ export declare class WorkflowsController {
9
+ private readonly workflowRun;
10
+ private readonly buildWorkflowRunResultService;
11
+ private readonly workflowRunAsyncActivity;
12
+ private readonly workflowRunActivityRepository;
13
+ private readonly workflowRunRepository;
14
+ constructor(workflowRun: WorkflowRunFacade, buildWorkflowRunResultService: BuildWorkflowRunResultService, workflowRunAsyncActivity: WorkflowRunAsyncActivityFacade, workflowRunActivityRepository: WorkflowRunActivityRepository, workflowRunRepository: WorkflowRunRepository);
15
+ run(workflowId: string, input: unknown): Promise<unknown>;
16
+ findRuns(): Promise<{
17
+ id: string;
18
+ workflow: string;
19
+ status: import("../models/WorkflowRun.js").WorkflowRunStatus;
20
+ createdAt: number;
21
+ finishedAt: number | undefined;
22
+ logs: import("@t4h.framework/core").Log[];
23
+ }[]>;
24
+ findRun(id: string): WorkflowRunOutput | null;
25
+ asyncAdvance(id: string, payload: unknown): Promise<unknown>;
26
+ asyncWaitingList(): WorkflowRunAsyncActivityOutput[];
27
+ }
@@ -0,0 +1,119 @@
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 Type from 'typebox';
12
+ import { JsonRpcMethod } from '../decorators/JsonRpcMethod.js';
13
+ import { WorkflowRunRepository } from '../repositories/WorkflowRun.repository.js';
14
+ import { WorkflowRunActivityRepository } from '../repositories/WorkflowRunActivity.repository.js';
15
+ import { BuildWorkflowRunResultService } from '../services/BuildWorkflowRunResult.service.js';
16
+ import { WorkflowRunAsyncActivityFacade } from '../services/WorkflowRunAsyncActivityFacade.service.js';
17
+ import { WorkflowRunFacade } from '../services/WorkflowRunFacade.service.js';
18
+ let WorkflowsController = class WorkflowsController {
19
+ workflowRun;
20
+ buildWorkflowRunResultService;
21
+ workflowRunAsyncActivity;
22
+ workflowRunActivityRepository;
23
+ workflowRunRepository;
24
+ constructor(workflowRun, buildWorkflowRunResultService, workflowRunAsyncActivity, workflowRunActivityRepository, workflowRunRepository) {
25
+ this.workflowRun = workflowRun;
26
+ this.buildWorkflowRunResultService = buildWorkflowRunResultService;
27
+ this.workflowRunAsyncActivity = workflowRunAsyncActivity;
28
+ this.workflowRunActivityRepository = workflowRunActivityRepository;
29
+ this.workflowRunRepository = workflowRunRepository;
30
+ }
31
+ async run(workflowId, input) {
32
+ const run = this.workflowRun.create(workflowId, input);
33
+ await this.workflowRun.nextTick(run.id);
34
+ return this.buildWorkflowRunResultService.build(run);
35
+ }
36
+ async findRuns() {
37
+ return this.workflowRunRepository.findAll().map(run => ({
38
+ id: run.id,
39
+ workflow: run.workflow,
40
+ status: run.status,
41
+ createdAt: run.createdAt,
42
+ finishedAt: run.finishedAt,
43
+ logs: run.logs,
44
+ }));
45
+ }
46
+ findRun(id) {
47
+ const run = this.workflowRunRepository.findById(id);
48
+ if (!run)
49
+ return null;
50
+ const activities = this.workflowRunActivityRepository
51
+ .findByRunId(run.id)
52
+ .map(activity => ({
53
+ id: activity.id,
54
+ name: activity.constructable.name,
55
+ type: activity.type,
56
+ status: activity.status,
57
+ output: activity.output,
58
+ createdAt: activity.createdAt.getTime(),
59
+ finishedAt: activity.finishedAt?.getTime(),
60
+ }));
61
+ return {
62
+ id: run.id,
63
+ workflow: run.workflow,
64
+ status: run.status,
65
+ createdAt: run.createdAt,
66
+ finishedAt: run.finishedAt,
67
+ logs: run.logs,
68
+ input: run.input,
69
+ output: run.output,
70
+ error: run.rejectedReason,
71
+ activities,
72
+ };
73
+ }
74
+ async asyncAdvance(id, payload) {
75
+ return this.workflowRunAsyncActivity.advance(id, payload);
76
+ }
77
+ asyncWaitingList() {
78
+ const pendingActivities = this.workflowRunActivityRepository.findBy(activity => activity.asyncActivity?.status === 'pending');
79
+ return pendingActivities.map(pending => {
80
+ const run = pending.run;
81
+ return {
82
+ id: pending.id,
83
+ workflow: run.workflow,
84
+ schema: pending.asyncActivity?.lastPendingAsyncActivity?.schema,
85
+ };
86
+ });
87
+ }
88
+ };
89
+ __decorate([
90
+ JsonRpcMethod('workflow.run', {
91
+ schema: [Type.String(), Type.Any()],
92
+ })
93
+ ], WorkflowsController.prototype, "run", null);
94
+ __decorate([
95
+ JsonRpcMethod('workflow.runs.list')
96
+ ], WorkflowsController.prototype, "findRuns", null);
97
+ __decorate([
98
+ JsonRpcMethod('workflow.runs.get', {
99
+ schema: [Type.String()],
100
+ })
101
+ ], WorkflowsController.prototype, "findRun", null);
102
+ __decorate([
103
+ JsonRpcMethod('workflow.async-activities.advance', {
104
+ schema: [Type.String(), Type.Any()],
105
+ })
106
+ ], WorkflowsController.prototype, "asyncAdvance", null);
107
+ __decorate([
108
+ JsonRpcMethod('workflow.async-activities.waiting.list')
109
+ ], WorkflowsController.prototype, "asyncWaitingList", null);
110
+ WorkflowsController = __decorate([
111
+ Injectable(),
112
+ __param(0, Inject(() => WorkflowRunFacade)),
113
+ __param(1, Inject(() => BuildWorkflowRunResultService)),
114
+ __param(2, Inject(() => WorkflowRunAsyncActivityFacade)),
115
+ __param(3, Inject(() => WorkflowRunActivityRepository)),
116
+ __param(4, Inject(() => WorkflowRunRepository))
117
+ ], WorkflowsController);
118
+ export { WorkflowsController };
119
+ //# sourceMappingURL=Workflows.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Workflows.controller.js","sourceRoot":"","sources":["../../src/controllers/Workflows.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import 'reflect-metadata';
2
+ import Type from 'typebox';
3
+ export interface JsonRpcMethodOptions {
4
+ schema?: readonly Type.TSchema[];
5
+ }
6
+ export interface MethodMetadata {
7
+ name: string;
8
+ propertyKey: string | symbol;
9
+ options?: JsonRpcMethodOptions;
10
+ }
11
+ export declare const METHOD_METADATA: unique symbol;
12
+ export declare function JsonRpcMethod(name: string, options?: JsonRpcMethodOptions): MethodDecorator;
@@ -0,0 +1,15 @@
1
+ import 'reflect-metadata';
2
+ import Type from 'typebox';
3
+ export const METHOD_METADATA = Symbol('jsonrpc:methods');
4
+ export function JsonRpcMethod(name, options) {
5
+ return (target, propertyKey) => {
6
+ const methods = Reflect.getOwnMetadata(METHOD_METADATA, target) ?? [];
7
+ methods.push({
8
+ name,
9
+ propertyKey,
10
+ options,
11
+ });
12
+ Reflect.defineMetadata(METHOD_METADATA, methods, target);
13
+ };
14
+ }
15
+ //# sourceMappingURL=JsonRpcMethod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonRpcMethod.js","sourceRoot":"","sources":["../../src/decorators/JsonRpcMethod.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AACzB,OAAO,IAAI,MAAM,SAAS,CAAA;AAY1B,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAExD,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,OAA8B;IAE9B,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QAC7B,MAAM,OAAO,GACX,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;QAEvD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,WAAW;YACX,OAAO;SACR,CAAC,CAAA;QAEF,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1D,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Log } from '@t4h.framework/core';
2
+ export interface WorkflowRunActivityCreatedEvent {
3
+ id: string;
4
+ workflowRunId: string;
5
+ type: 'sync' | 'async';
6
+ }
7
+ export interface AsyncActivityCreatedEvent {
8
+ id: string;
9
+ workflowRunId: string;
10
+ activityId: string;
11
+ timeoutAt?: string;
12
+ }
13
+ export interface LogEvent {
14
+ workflowRunId: string;
15
+ log: Log;
16
+ }
package/dist/events.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { type Constructable } from 'pleroma';
2
+ import Type from 'typebox';
3
+ import { JSONRPCServerMethod } from '../models/JSONRPCServer.js';
4
+ export declare function getJsonRpcServerMethods(controllers: Constructable[]): JSONRPCServerMethod<readonly Type.TSchema[]>[];
@@ -0,0 +1,17 @@
1
+ import { container } from 'pleroma';
2
+ import Type from 'typebox';
3
+ import { METHOD_METADATA, } from '../decorators/JsonRpcMethod.js';
4
+ import { JSONRPCServerMethod } from '../models/JSONRPCServer.js';
5
+ export function getJsonRpcServerMethods(controllers) {
6
+ return controllers.flatMap((controller) => {
7
+ const prototype = controller.prototype;
8
+ const methods = Reflect.getOwnMetadata(METHOD_METADATA, prototype) ?? [];
9
+ return methods.map(metadata => new JSONRPCServerMethod(metadata.name, {
10
+ schema: metadata.options?.schema,
11
+ }, (...args) => {
12
+ const cont = container.resolve(controller);
13
+ return cont[metadata.propertyKey](...args);
14
+ }));
15
+ });
16
+ }
17
+ //# sourceMappingURL=get-json-rpc-server-methods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-json-rpc-server-methods.js","sourceRoot":"","sources":["../../src/helpers/get-json-rpc-server-methods.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,MAAM,SAAS,CAAA;AACvD,OAAO,IAAI,MAAM,SAAS,CAAA;AAE1B,OAAO,EACL,eAAe,GAEhB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,MAAM,UAAU,uBAAuB,CACrC,WAA4B;IAE5B,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,UAAe,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAA;QAEtC,MAAM,OAAO,GACX,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,SAAS,CAAC,IAAI,EAAE,CAAA;QAE1D,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,EAAE,CACT,IAAI,mBAAmB,CACrB,QAAQ,CAAC,IAAI,EACb;YACE,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM;SACjC,EACD,CAAC,GAAG,IAAI,EAAE,EAAE;YACV,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAQ,CAAA;YAEjD,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;QAC5C,CAAC,CACF,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { WorkflowRunActivityStatus } from '../models/WorkflowRunActivity.js';
2
+ export interface WorkflowRunActivityOutput {
3
+ id: string;
4
+ name: string;
5
+ type: 'sync' | 'async';
6
+ status: WorkflowRunActivityStatus;
7
+ createdAt: number;
8
+ output?: unknown;
9
+ finishedAt?: number;
10
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=WorkflowRunActivityOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowRunActivityOutput.js","sourceRoot":"","sources":["../../src/outputs/WorkflowRunActivityOutput.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type Type from 'typebox';
2
+ export interface WorkflowRunAsyncActivityOutput {
3
+ id: string;
4
+ workflow: string;
5
+ schema?: Type.TSchema;
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=WorkflowRunAsyncActivityOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowRunAsyncActivityOutput.js","sourceRoot":"","sources":["../../src/outputs/WorkflowRunAsyncActivityOutput.ts"],"names":[],"mappings":""}