@t4h.framework/dev 0.2.1 → 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 (83) 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/models/SftpClient.d.ts +7 -0
  29. package/dist/models/SftpClient.js +25 -0
  30. package/dist/models/SftpClient.js.map +1 -0
  31. package/dist/models/claims/DevSftpClaim.d.ts +4 -3
  32. package/dist/models/claims/DevSftpClaim.js +78 -81
  33. package/dist/models/claims/DevSftpClaim.js.map +1 -1
  34. package/dist/outputs/WorkflowRunActivityOutput.d.ts +10 -0
  35. package/dist/outputs/WorkflowRunActivityOutput.js +2 -0
  36. package/dist/outputs/WorkflowRunActivityOutput.js.map +1 -0
  37. package/dist/outputs/WorkflowRunAsyncActivityOutput.d.ts +6 -0
  38. package/dist/outputs/WorkflowRunAsyncActivityOutput.js +2 -0
  39. package/dist/outputs/WorkflowRunAsyncActivityOutput.js.map +1 -0
  40. package/dist/outputs/WorkflowRunOutput.d.ts +18 -0
  41. package/dist/outputs/WorkflowRunOutput.js +2 -0
  42. package/dist/outputs/WorkflowRunOutput.js.map +1 -0
  43. package/dist/services/DevEventNotifier.service.d.ts +18 -0
  44. package/dist/services/DevEventNotifier.service.js +43 -0
  45. package/dist/services/DevEventNotifier.service.js.map +1 -0
  46. package/dist/services/WorkflowRunEventEmitter.service.d.ts +17 -0
  47. package/dist/services/WorkflowRunEventEmitter.service.js +74 -0
  48. package/dist/services/WorkflowRunEventEmitter.service.js.map +1 -0
  49. package/dist/services/WorkflowRunEventProducer.service.d.ts +11 -0
  50. package/dist/services/WorkflowRunEventProducer.service.js +26 -0
  51. package/dist/services/WorkflowRunEventProducer.service.js.map +1 -0
  52. package/dist/socket/DevServerSocketBridge.d.ts +16 -0
  53. package/dist/socket/DevServerSocketBridge.js +75 -0
  54. package/dist/socket/DevServerSocketBridge.js.map +1 -0
  55. package/dist/socket/ServerSocket.d.ts +18 -0
  56. package/dist/socket/ServerSocket.js +57 -0
  57. package/dist/socket/ServerSocket.js.map +1 -0
  58. package/dist/tools/get-sftp-config-from-connection-string.d.ts +2 -0
  59. package/dist/tools/get-sftp-config-from-connection-string.js +25 -0
  60. package/dist/tools/get-sftp-config-from-connection-string.js.map +1 -0
  61. package/dist/tools/is-localhost.d.ts +1 -0
  62. package/dist/tools/is-localhost.js +11 -0
  63. package/dist/tools/is-localhost.js.map +1 -0
  64. package/dist/tools/json-codec.d.ts +9 -1
  65. package/dist/tools/json-codec.js +9 -2
  66. package/dist/tools/json-codec.js.map +1 -1
  67. package/dist/typings/events.d.ts +43 -0
  68. package/dist/typings/events.js +10 -0
  69. package/dist/typings/events.js.map +1 -0
  70. package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.js +1 -1
  71. package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.js.map +1 -1
  72. package/dist/use-cases/TimeoutWorkflowRunAsyncActivity.usecase.js +1 -1
  73. package/dist/use-cases/TimeoutWorkflowRunAsyncActivity.usecase.js.map +1 -1
  74. package/dist/use-cases/WorkflowRunAsyncActivity.usecase.js +1 -1
  75. package/dist/use-cases/WorkflowRunAsyncActivity.usecase.js.map +1 -1
  76. package/dist/use-cases/WorkflowRunBuildHistory.usecase.js +2 -1
  77. package/dist/use-cases/WorkflowRunBuildHistory.usecase.js.map +1 -1
  78. package/dist/use-cases/WorkflowRunSyncActivity.usecase.js +1 -1
  79. package/dist/use-cases/WorkflowRunSyncActivity.usecase.js.map +1 -1
  80. package/package.json +5 -5
  81. package/dist/tools/json-schema-to-inquirer-question.d.ts +0 -11
  82. package/dist/tools/json-schema-to-inquirer-question.js +0 -34
  83. package/dist/tools/json-schema-to-inquirer-question.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SftpClient.js","sourceRoot":"","sources":["../../src/models/SftpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,iCAAiC,EAAE,MAAM,oDAAoD,CAAA;AAEtG,MAAM,OAAO,UAAW,SAAQ,cAAc;IAC5C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAwB;QAC3C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,CAAA;QAE/C,MAAM,MAAM,CAAC,OAAO,CAClB,MAAM,iCAAiC,CAAC,gBAAgB,CAAC,CAC1D,CAAA;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAChC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IACvD,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAwB,EAAE,QAAgB;QACnE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAEzD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAA;QAEhC,KAAK,MAAM;aACR,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;aACrB,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC9C,OAAO,CAAC,GAAG,EAAE;YACZ,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;QAEJ,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
@@ -1,14 +1,15 @@
1
+ import type { Binary } from '@t4h.framework/core';
1
2
  import { SftpClaim, type SftpAppendActivityInput, type SftpChmodActivityInput, type SftpCopyActivityInput, type SftpCwdActivityInput, type SftpDeleteActivityInput, type SftpDownloadDirActivityInput, type SftpExistsActivityInput, type SftpExistsResult, type SftpFileInfo, type SftpGetActivityInput, type SftpListActivityInput, type SftpMkdirActivityInput, type SftpPutActivityInput, type SftpRealPathActivityInput, type SftpRenameActivityInput, type SftpRmdirActivityInput, type SftpStat, type SftpStatActivityInput } from '@t4h.framework/sftp';
2
3
  export declare class DevSftpClaim extends SftpClaim {
3
4
  private readonly claims;
4
- private withClient;
5
+ private stream;
5
6
  append(input: SftpAppendActivityInput): Promise<void>;
6
7
  chmod(input: SftpChmodActivityInput): Promise<void>;
7
8
  cwd(input: SftpCwdActivityInput): Promise<string>;
8
9
  delete(input: SftpDeleteActivityInput): Promise<void>;
9
- downloadDir(input: SftpDownloadDirActivityInput): Promise<import("@t4h.framework/core").Binary>;
10
+ downloadDir(input: SftpDownloadDirActivityInput): Promise<Binary>;
10
11
  exists(input: SftpExistsActivityInput): Promise<SftpExistsResult>;
11
- get(input: SftpGetActivityInput): Promise<import("@t4h.framework/core").Binary>;
12
+ get(input: SftpGetActivityInput): Promise<Binary>;
12
13
  list(input: SftpListActivityInput): Promise<SftpFileInfo[]>;
13
14
  mkdir(input: SftpMkdirActivityInput): Promise<void>;
14
15
  put(input: SftpPutActivityInput): Promise<void>;
@@ -1,117 +1,114 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import fs from 'node:fs';
3
- import os from 'node:os';
4
- import path from 'node:path';
2
+ import { createReadStream } from 'node:fs';
3
+ import { mkdir, mkdtemp, rm } from 'node:fs/promises';
4
+ import { tmpdir } from 'node:os';
5
+ import { extname, join } from 'node:path';
5
6
  import { Claim } from '@t4h.framework/core';
6
7
  import { FileSystemClaim } from '@t4h.framework/fs';
7
- import { SftpClaim, } from '@t4h.framework/sftp';
8
- import SftpClient from 'ssh2-sftp-client';
9
- import * as tar from 'tar';
10
- async function getSftpConfigFromConnectionString(connectionString) {
11
- const url = new URL(connectionString);
12
- if (url.protocol !== 'sftp:')
13
- throw new Error(`Unsupported protocol: ${url.protocol}`);
14
- const config = {
15
- host: url.hostname,
16
- port: url.port ? Number(url.port) : 22,
17
- username: decodeURIComponent(url.username),
18
- };
19
- if (url.password) {
20
- const password = decodeURIComponent(url.password);
21
- if (password.startsWith('privateKey:'))
22
- config.privateKey = password.slice(11);
23
- else
24
- config.password = password;
25
- }
26
- const passphrase = url.searchParams.get('passphrase');
27
- if (passphrase)
28
- config.passphrase = passphrase;
29
- if (!config.password && !config.privateKey)
30
- throw new Error('SFTP connection requires a password or private key');
31
- return config;
32
- }
8
+ import { SftpBinary, SftpClaim, } from '@t4h.framework/sftp';
9
+ import mime from 'mime-types';
10
+ import { create } from 'tar';
11
+ import { SftpClient } from '../SftpClient.js';
33
12
  export class DevSftpClaim extends SftpClaim {
34
13
  claims = new Claim({
35
14
  fs: FileSystemClaim,
36
15
  });
37
- async withClient(connectionString, fn) {
38
- const client = new SftpClient();
39
- await client.connect(await getSftpConfigFromConnectionString(connectionString));
40
- try {
41
- return await fn(client);
42
- }
43
- finally {
44
- await client.end().catch(() => { });
45
- }
16
+ async stream(content) {
17
+ if (!(content instanceof SftpBinary))
18
+ return content.stream();
19
+ return SftpClient.stream(content.connectionString, content.filepath);
46
20
  }
47
21
  async append(input) {
48
- await this.withClient(input.connectionString, async (client) => {
49
- const stream = await input.content.stream();
50
- await client.append(stream, input.filepath);
51
- });
22
+ await using client = await SftpClient.connect(input.connectionString);
23
+ await client.append(await this.stream(input.content), input.filepath);
52
24
  }
53
25
  async chmod(input) {
54
- await this.withClient(input.connectionString, client => client.chmod(input.path, input.mode));
55
- }
56
- cwd(input) {
57
- return this.withClient(input.connectionString, client => client.cwd());
26
+ await using client = await SftpClient.connect(input.connectionString);
27
+ const mode = (() => {
28
+ if (typeof input.mode === 'number')
29
+ return input.mode;
30
+ const mode = Number.parseInt(input.mode, 8);
31
+ if (Number.isNaN(mode))
32
+ throw new Error(`Invalid chmod mode "${input.mode}" (expected octal string or number)`);
33
+ return mode;
34
+ })();
35
+ await client.chmod(input.path, mode);
36
+ }
37
+ async cwd(input) {
38
+ await using client = await SftpClient.connect(input.connectionString);
39
+ return await client.cwd();
58
40
  }
59
41
  async delete(input) {
60
- await this.withClient(input.connectionString, client => client.delete(input.path, input.noErrorOK));
42
+ await using client = await SftpClient.connect(input.connectionString);
43
+ await client.delete(input.path, input.noErrorOK ?? false);
61
44
  }
62
45
  async downloadDir(input) {
63
- const tempDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'sftp-dl-'));
64
- const archivePath = path.join(os.tmpdir(), `sftp-dl-${randomUUID()}.tar`);
46
+ const workDir = await mkdtemp(join(tmpdir(), 'sftp-dl-'));
47
+ const contentDir = join(workDir, 'content');
48
+ const archivePath = join(workDir, 'archive.tar.gz');
65
49
  try {
66
- await this.withClient(input.connectionString, client => client.downloadDir(input.path, tempDir));
67
- await tar.c({ cwd: tempDir, file: archivePath }, ['.']);
68
- return await this.claims.fs.read(archivePath);
69
- }
70
- catch (error) {
71
- await fs.promises.rm(archivePath, { force: true }).catch(() => { });
72
- throw error;
50
+ await using client = await SftpClient.connect(input.connectionString);
51
+ await mkdir(contentDir, { recursive: true });
52
+ await client.downloadDir(input.path, contentDir);
53
+ await create({ gzip: true, file: archivePath, cwd: contentDir }, ['.']);
54
+ await rm(contentDir, { recursive: true, force: true });
55
+ return await this.claims.fs.write(`${randomUUID()}-sftp-download-dir.tar.gz`, createReadStream(archivePath));
73
56
  }
74
57
  finally {
75
- await fs.promises.rm(tempDir, { recursive: true, force: true });
58
+ await rm(workDir, { recursive: true, force: true });
76
59
  }
77
60
  }
78
- exists(input) {
79
- return this.withClient(input.connectionString, client => client.exists(input.path));
80
- }
81
- get(input) {
82
- return this.withClient(input.connectionString, async (client) => {
83
- const tempDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'sftp-get-'));
84
- const localPath = path.join(tempDir, path.basename(input.filepath) || 'file.bin');
85
- await client.fastGet(input.filepath, localPath, {});
86
- return await this.claims.fs.read(localPath);
61
+ async exists(input) {
62
+ await using client = await SftpClient.connect(input.connectionString);
63
+ return await client.exists(input.path);
64
+ }
65
+ async get(input) {
66
+ await using client = await SftpClient.connect(input.connectionString);
67
+ const stat = await client.stat(input.filepath);
68
+ const contentType = mime.lookup(extname(input.filepath)) || 'application/octet-stream';
69
+ return SftpBinary.from(input.connectionString, {
70
+ filepath: input.filepath,
71
+ contentType,
72
+ contentLength: stat.size,
73
+ }, binary => SftpClient.stream(binary.connectionString, binary.filepath));
74
+ }
75
+ async list(input) {
76
+ await using client = await SftpClient.connect(input.connectionString);
77
+ const entries = await client.list(input.path);
78
+ return entries.map(entry => {
79
+ const types = ['d', '-', 'l'];
80
+ if (!types.includes(entry.type))
81
+ throw new Error(`Unexpected SFTP list entry type "${entry.type}" for "${entry.name}"`);
82
+ return entry;
87
83
  });
88
84
  }
89
- list(input) {
90
- return this.withClient(input.connectionString, client => client.list(input.path));
91
- }
92
85
  async mkdir(input) {
93
- await this.withClient(input.connectionString, client => client.mkdir(input.path, input.recursive));
86
+ await using client = await SftpClient.connect(input.connectionString);
87
+ await client.mkdir(input.path, input.recursive ?? false);
94
88
  }
95
89
  async put(input) {
96
- await this.withClient(input.connectionString, async (client) => {
97
- const stream = await input.content.stream();
98
- await client.put(stream, input.filepath);
99
- });
90
+ await using client = await SftpClient.connect(input.connectionString);
91
+ await client.put(await this.stream(input.content), input.filepath);
100
92
  }
101
93
  async copy(input) {
102
- await this.withClient(input.connectionString, client => client.rcopy(input.srcPath, input.destPath));
94
+ await using client = await SftpClient.connect(input.connectionString);
95
+ await client.rcopy(input.srcPath, input.destPath);
103
96
  }
104
- realPath(input) {
105
- return this.withClient(input.connectionString, client => client.realPath(input.path));
97
+ async realPath(input) {
98
+ await using client = await SftpClient.connect(input.connectionString);
99
+ return await client.realPath(input.path);
106
100
  }
107
101
  async rename(input) {
108
- await this.withClient(input.connectionString, client => client.rename(input.srcPath, input.destPath));
102
+ await using client = await SftpClient.connect(input.connectionString);
103
+ await client.rename(input.srcPath, input.destPath);
109
104
  }
110
105
  async rmdir(input) {
111
- await this.withClient(input.connectionString, client => client.rmdir(input.path, input.recursive));
106
+ await using client = await SftpClient.connect(input.connectionString);
107
+ await client.rmdir(input.path, input.recursive ?? false);
112
108
  }
113
- stat(input) {
114
- return this.withClient(input.connectionString, client => client.stat(input.path));
109
+ async stat(input) {
110
+ await using client = await SftpClient.connect(input.connectionString);
111
+ return (await client.stat(input.path));
115
112
  }
116
113
  }
117
114
  //# sourceMappingURL=DevSftpClaim.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DevSftpClaim.js","sourceRoot":"","sources":["../../../src/models/claims/DevSftpClaim.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DevSftpClaim.js","sourceRoot":"","sources":["../../../src/models/claims/DevSftpClaim.ts"],"names":[],"mappings":"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"}
@@ -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":""}
@@ -0,0 +1,18 @@
1
+ import type { Log } from '@t4h.framework/core';
2
+ import type { WorkflowRunActivityOutput } from './WorkflowRunActivityOutput.js';
3
+ import type { WorkflowRunStatus } from '../models/WorkflowRun.js';
4
+ export interface WorkflowRunOutput {
5
+ id: string;
6
+ workflow: string;
7
+ status: WorkflowRunStatus;
8
+ createdAt: number;
9
+ logs: Log[];
10
+ finishedAt?: number;
11
+ input?: unknown;
12
+ output?: unknown;
13
+ error?: {
14
+ message: string;
15
+ stack?: string;
16
+ };
17
+ activities: WorkflowRunActivityOutput[];
18
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=WorkflowRunOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowRunOutput.js","sourceRoot":"","sources":["../../src/outputs/WorkflowRunOutput.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import type { Log } from '@t4h.framework/core';
2
+ import type { JSONRPCClient } from '../models/JSONRPCClient.js';
3
+ import type { WorkflowRunActivity } from '../models/WorkflowRunActivity.js';
4
+ import type { WorkflowRunAsyncActivityPending } from '../models/WorkflowRunActivity.js';
5
+ /**
6
+ * Encapsulates the worker-side IPC client so use-cases/repositories can push
7
+ * typed events to the dev server without depending on transport details.
8
+ *
9
+ * Always emits flat DTOs — the domain models hold circular references
10
+ * (run <-> activity <-> parent) that would break the IPC `JSON.stringify`.
11
+ */
12
+ export declare class DevEventNotifier {
13
+ private client?;
14
+ attach(client: JSONRPCClient): void;
15
+ workflowRunActivityCreated(activity: WorkflowRunActivity): void;
16
+ asyncActivityCreated(activity: WorkflowRunActivity, pending: WorkflowRunAsyncActivityPending): void;
17
+ log(workflowRunId: string, log: Log): void;
18
+ }
@@ -0,0 +1,43 @@
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
+ /**
9
+ * Encapsulates the worker-side IPC client so use-cases/repositories can push
10
+ * typed events to the dev server without depending on transport details.
11
+ *
12
+ * Always emits flat DTOs — the domain models hold circular references
13
+ * (run <-> activity <-> parent) that would break the IPC `JSON.stringify`.
14
+ */
15
+ let DevEventNotifier = class DevEventNotifier {
16
+ client;
17
+ attach(client) {
18
+ this.client = client;
19
+ }
20
+ workflowRunActivityCreated(activity) {
21
+ void this.client?.notify('workflow-run-activity.created', {
22
+ id: activity.id,
23
+ workflowRunId: activity.run.id,
24
+ type: activity.type,
25
+ });
26
+ }
27
+ asyncActivityCreated(activity, pending) {
28
+ void this.client?.notify('async-activity.created', {
29
+ id: pending.id,
30
+ workflowRunId: activity.run.id,
31
+ activityId: activity.id,
32
+ timeoutAt: pending.timeoutAt?.toISOString(),
33
+ });
34
+ }
35
+ log(workflowRunId, log) {
36
+ void this.client?.notify('log', { workflowRunId, log });
37
+ }
38
+ };
39
+ DevEventNotifier = __decorate([
40
+ Injectable()
41
+ ], DevEventNotifier);
42
+ export { DevEventNotifier };
43
+ //# sourceMappingURL=DevEventNotifier.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevEventNotifier.service.js","sourceRoot":"","sources":["../../src/services/DevEventNotifier.service.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAMpC;;;;;;GAMG;AAEI,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IACnB,MAAM,CAAgB;IAEvB,MAAM,CAAC,MAAqB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAEM,0BAA0B,CAAC,QAA6B;QAC7D,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,+BAA+B,EAAE;YACxD,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,aAAa,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC9B,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,CAAC,CAAA;IACJ,CAAC;IAEM,oBAAoB,CACzB,QAA6B,EAC7B,OAAwC;QAExC,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,wBAAwB,EAAE;YACjD,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,aAAa,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC9B,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE;SAC5C,CAAC,CAAA;IACJ,CAAC;IAEM,GAAG,CAAC,aAAqB,EAAE,GAAQ;QACxC,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAA;IACzD,CAAC;CACF,CAAA;AA9BY,gBAAgB;IAD5B,UAAU,EAAE;GACA,gBAAgB,CA8B5B"}
@@ -0,0 +1,17 @@
1
+ import type { Log } from '@t4h.framework/core';
2
+ import type { JSONRPCClient } from '../models/JSONRPCClient.js';
3
+ import type { WorkflowRun } from '../models/WorkflowRun.js';
4
+ import type { WorkflowRunActivity, WorkflowRunAsyncActivityPending } from '../models/WorkflowRunActivity.js';
5
+ export declare class WorkflowRunEventEmitter {
6
+ #private;
7
+ attach(client: JSONRPCClient): void;
8
+ private get client();
9
+ onUpdateWorkflowRun(run: WorkflowRun): void;
10
+ onCreateWorkflowRunActivity(activity: WorkflowRunActivity): void;
11
+ onUpdateWorkflowRunActivity(activity: WorkflowRunActivity): void;
12
+ onCreateWorkflowRunAsyncActivity(activity: WorkflowRunActivity, pending: WorkflowRunAsyncActivityPending): void;
13
+ onResolveWorkflowRunAsyncActivity(activity: WorkflowRunActivity, pending: WorkflowRunAsyncActivityPending): void;
14
+ log(workflowRun: string, log: Log): void;
15
+ private notifyActivity;
16
+ private notifyAsyncActivity;
17
+ }
@@ -0,0 +1,74 @@
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 { WorkflowRunEventMethod, } from '../typings/events.js';
9
+ let WorkflowRunEventEmitter = class WorkflowRunEventEmitter {
10
+ #client;
11
+ attach(client) {
12
+ this.#client = client;
13
+ }
14
+ get client() {
15
+ if (!this.#client)
16
+ throw new Error('Client not attached');
17
+ return this.#client;
18
+ }
19
+ onUpdateWorkflowRun(run) {
20
+ const event = {
21
+ id: run.id,
22
+ workflow: run.workflow,
23
+ status: run.status,
24
+ createdAt: run.createdAt,
25
+ finishedAt: run.finishedAt,
26
+ output: run.output,
27
+ error: run.rejectedReason,
28
+ };
29
+ void this.#client?.notify(WorkflowRunEventMethod.WorkflowRunUpdated, event);
30
+ }
31
+ onCreateWorkflowRunActivity(activity) {
32
+ this.notifyActivity(activity, WorkflowRunEventMethod.WorkflowRunActivityCreated);
33
+ }
34
+ onUpdateWorkflowRunActivity(activity) {
35
+ this.notifyActivity(activity, WorkflowRunEventMethod.WorkflowRunActivityUpdated);
36
+ }
37
+ onCreateWorkflowRunAsyncActivity(activity, pending) {
38
+ this.notifyAsyncActivity(activity, pending, WorkflowRunEventMethod.WorkflowRunAsyncActivityCreated);
39
+ }
40
+ onResolveWorkflowRunAsyncActivity(activity, pending) {
41
+ this.notifyAsyncActivity(activity, pending, WorkflowRunEventMethod.WorkflowRunAsyncActivityResolved);
42
+ }
43
+ log(workflowRun, log) {
44
+ const event = { workflowRun, log };
45
+ void this.#client?.notify(WorkflowRunEventMethod.Log, event);
46
+ }
47
+ notifyActivity(activity, method) {
48
+ const event = {
49
+ id: activity.id,
50
+ workflowRun: activity.run.id,
51
+ type: activity.type,
52
+ status: activity.status,
53
+ output: activity.output,
54
+ createdAt: activity.createdAt.getTime(),
55
+ finishedAt: activity.finishedAt?.getTime(),
56
+ };
57
+ void this.#client?.notify(method, event);
58
+ }
59
+ notifyAsyncActivity(activity, pending, method) {
60
+ const event = {
61
+ id: pending.id,
62
+ workflowRun: activity.run.id,
63
+ activity: activity.id,
64
+ status: pending.status,
65
+ timeoutAt: pending.timeoutAt?.getTime(),
66
+ };
67
+ void this.#client?.notify(method, event);
68
+ }
69
+ };
70
+ WorkflowRunEventEmitter = __decorate([
71
+ Injectable()
72
+ ], WorkflowRunEventEmitter);
73
+ export { WorkflowRunEventEmitter };
74
+ //# sourceMappingURL=WorkflowRunEventEmitter.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowRunEventEmitter.service.js","sourceRoot":"","sources":["../../src/services/WorkflowRunEventEmitter.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { IWorkflowRunActivityEvent, IWorkflowRunAsyncActivityEvent, IWorkflowRunEvent, IWorkflowRunLogEvent } from '../EventStore.js';
2
+ import type { JSONRPCClient } from '../models/JSONRPCClient.js';
3
+ export type WorkflowRunEvent = IWorkflowRunEvent | IWorkflowRunActivityEvent | IWorkflowRunAsyncActivityEvent | IWorkflowRunLogEvent;
4
+ export declare class WorkflowRunEventProducer {
5
+ #private;
6
+ attach(client: JSONRPCClient): void;
7
+ private get client();
8
+ send<T extends WorkflowRunEvent['event']>(event: T, data: Omit<Extract<WorkflowRunEvent, {
9
+ event: T;
10
+ }>, 'event'>): void;
11
+ }
@@ -0,0 +1,26 @@
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
+ let WorkflowRunEventProducer = class WorkflowRunEventProducer {
9
+ #client;
10
+ attach(client) {
11
+ this.#client = client;
12
+ }
13
+ get client() {
14
+ if (!this.#client)
15
+ throw new Error('JSON RPC client not attached');
16
+ return this.#client;
17
+ }
18
+ send(event, data) {
19
+ void this.client.notify(event, { event, ...data });
20
+ }
21
+ };
22
+ WorkflowRunEventProducer = __decorate([
23
+ Injectable()
24
+ ], WorkflowRunEventProducer);
25
+ export { WorkflowRunEventProducer };
26
+ //# sourceMappingURL=WorkflowRunEventProducer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowRunEventProducer.service.js","sourceRoot":"","sources":["../../src/services/WorkflowRunEventProducer.service.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAiB7B,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,OAAO,CAAgB;IAEhB,MAAM,CAAC,MAAqB;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACvB,CAAC;IAED,IAAY,MAAM;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAElE,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAEM,IAAI,CACT,KAAQ,EACR,IAA4D;QAE5D,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IACpD,CAAC;CACF,CAAA;AAnBY,wBAAwB;IADpC,UAAU,EAAE;GACA,wBAAwB,CAmBpC"}
@@ -0,0 +1,16 @@
1
+ import type { JSONRPCClient } from '../models/JSONRPCClient.js';
2
+ export interface DevServerSocketBridgeOptions {
3
+ port?: number;
4
+ }
5
+ export declare class DevServerSocketBridge {
6
+ private readonly jsonRpcClient;
7
+ private readonly options?;
8
+ private wss?;
9
+ private readonly connections;
10
+ constructor(jsonRpcClient: JSONRPCClient, options?: DevServerSocketBridgeOptions | undefined);
11
+ listen(): Promise<{
12
+ url: string;
13
+ close(): Promise<void>;
14
+ }>;
15
+ notify(method: string, ...params: unknown[]): void;
16
+ }
@@ -0,0 +1,75 @@
1
+ import {} from 'node:net';
2
+ import { WebSocket, WebSocketServer } from 'ws';
3
+ function isLocalhostOrigin(origin) {
4
+ try {
5
+ const { hostname } = new URL(origin);
6
+ return hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1';
7
+ }
8
+ catch {
9
+ return false;
10
+ }
11
+ }
12
+ export class DevServerSocketBridge {
13
+ jsonRpcClient;
14
+ options;
15
+ wss;
16
+ connections = new Set();
17
+ constructor(jsonRpcClient, options) {
18
+ this.jsonRpcClient = jsonRpcClient;
19
+ this.options = options;
20
+ }
21
+ async listen() {
22
+ return new Promise((resolve, reject) => {
23
+ const wss = new WebSocketServer({
24
+ host: '127.0.0.1',
25
+ port: this.options?.port ?? 0,
26
+ });
27
+ this.wss = wss;
28
+ wss.on('connection', (ws, req) => {
29
+ const origin = req.headers['origin'];
30
+ if (origin && !isLocalhostOrigin(origin)) {
31
+ ws.close(1008, 'Forbidden');
32
+ return;
33
+ }
34
+ this.connections.add(ws);
35
+ ws.on('close', () => this.connections.delete(ws));
36
+ ws.on('message', async (raw) => {
37
+ let call;
38
+ try {
39
+ call = JSON.parse(raw.toString());
40
+ const result = await this.jsonRpcClient.call(call.method, ...(call.params ?? []));
41
+ ws.send(JSON.stringify({ jsonrpc: '2.0', id: call.id, result: result ?? null }));
42
+ }
43
+ catch (error) {
44
+ if (call?.id !== undefined) {
45
+ ws.send(JSON.stringify({
46
+ jsonrpc: '2.0',
47
+ id: call.id,
48
+ error: {
49
+ code: -32000,
50
+ message: error instanceof Error ? error.message : 'Internal error',
51
+ },
52
+ }));
53
+ }
54
+ }
55
+ });
56
+ });
57
+ wss.on('listening', () => {
58
+ const addr = wss.address();
59
+ resolve({
60
+ url: `ws://127.0.0.1:${addr.port}`,
61
+ close: () => new Promise((res, rej) => wss.close(err => (err ? rej(err) : res()))),
62
+ });
63
+ });
64
+ wss.on('error', reject);
65
+ });
66
+ }
67
+ notify(method, ...params) {
68
+ const data = JSON.stringify({ jsonrpc: '2.0', method, params });
69
+ for (const ws of this.connections) {
70
+ if (ws.readyState === WebSocket.OPEN)
71
+ ws.send(data);
72
+ }
73
+ }
74
+ }
75
+ //# sourceMappingURL=DevServerSocketBridge.js.map