@t4h.framework/dev 0.2.0 → 0.3.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.
- package/dist/models/SftpClient.d.ts +7 -0
- package/dist/models/SftpClient.js +25 -0
- package/dist/models/SftpClient.js.map +1 -0
- package/dist/models/SftpClientCache.d.ts +6 -0
- package/dist/models/SftpClientCache.js +34 -0
- package/dist/models/SftpClientCache.js.map +1 -0
- package/dist/models/WorkflowRun.d.ts +1 -0
- package/dist/models/WorkflowRun.js +1 -0
- package/dist/models/WorkflowRun.js.map +1 -1
- package/dist/models/claims/DevSftpClaim.d.ts +5 -4
- package/dist/models/claims/DevSftpClaim.js +83 -117
- package/dist/models/claims/DevSftpClaim.js.map +1 -1
- package/dist/tools/get-sftp-config-from-connection-string.d.ts +2 -0
- package/dist/tools/get-sftp-config-from-connection-string.js +25 -0
- package/dist/tools/get-sftp-config-from-connection-string.js.map +1 -0
- package/dist/tools/json-codec.d.ts +9 -1
- package/dist/tools/json-codec.js +9 -2
- package/dist/tools/json-codec.js.map +1 -1
- package/dist/use-cases/CreateWorkflowRun.usecase.js +1 -0
- package/dist/use-cases/CreateWorkflowRun.usecase.js.map +1 -1
- package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.js +34 -32
- package/dist/use-cases/CreateWorkflowRunAsyncActivity.usecase.js.map +1 -1
- package/dist/use-cases/NextTickWorkflowRun.usecase.d.ts +2 -0
- package/dist/use-cases/NextTickWorkflowRun.usecase.js +30 -12
- package/dist/use-cases/NextTickWorkflowRun.usecase.js.map +1 -1
- package/dist/use-cases/TimeoutWorkflowRunAsyncActivity.usecase.js +11 -9
- package/dist/use-cases/TimeoutWorkflowRunAsyncActivity.usecase.js.map +1 -1
- package/dist/use-cases/WorkflowRunAsyncActivity.usecase.js +18 -16
- package/dist/use-cases/WorkflowRunAsyncActivity.usecase.js.map +1 -1
- package/dist/use-cases/WorkflowRunSyncActivity.usecase.js +8 -6
- package/dist/use-cases/WorkflowRunSyncActivity.usecase.js.map +1 -1
- package/dist/workers/app-process.js +4 -1
- package/dist/workers/app-process.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PassThrough } from 'node:stream';
|
|
2
|
+
import BaseSftpClient from 'ssh2-sftp-client';
|
|
3
|
+
export declare class SftpClient extends BaseSftpClient {
|
|
4
|
+
static connect(connectionString: string): Promise<SftpClient>;
|
|
5
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
6
|
+
static stream(connectionString: string, filepath: string): Promise<PassThrough>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { PassThrough } from 'node:stream';
|
|
2
|
+
import BaseSftpClient from 'ssh2-sftp-client';
|
|
3
|
+
import { getSftpConfigFromConnectionString } from '../tools/get-sftp-config-from-connection-string.js';
|
|
4
|
+
export class SftpClient extends BaseSftpClient {
|
|
5
|
+
static async connect(connectionString) {
|
|
6
|
+
const client = new SftpClient(connectionString);
|
|
7
|
+
await client.connect(await getSftpConfigFromConnectionString(connectionString));
|
|
8
|
+
return client;
|
|
9
|
+
}
|
|
10
|
+
async [Symbol.asyncDispose]() {
|
|
11
|
+
await this.end().catch(error => console.error(error));
|
|
12
|
+
}
|
|
13
|
+
static async stream(connectionString, filepath) {
|
|
14
|
+
const client = await SftpClient.connect(connectionString);
|
|
15
|
+
const stream = new PassThrough();
|
|
16
|
+
void client
|
|
17
|
+
.get(filepath, stream)
|
|
18
|
+
.catch((error) => stream.destroy(error))
|
|
19
|
+
.finally(() => {
|
|
20
|
+
void client.end().catch(error => console.error(error));
|
|
21
|
+
});
|
|
22
|
+
return stream;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=SftpClient.js.map
|
|
@@ -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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SftpClient } from './SftpClient.js';
|
|
2
|
+
export type SftpClientConnector = (connectionString: string, onConnectionLost: () => void) => Promise<SftpClient>;
|
|
3
|
+
export declare function evictSftpClientFromCache(connectionString: string): void;
|
|
4
|
+
export declare function getCachedSftpClient(connectionString: string, connect: SftpClientConnector): Promise<SftpClient>;
|
|
5
|
+
export declare function clearSftpClientCache(): void;
|
|
6
|
+
export declare function getSftpClientCacheSize(): number;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { LRUCache } from 'lru-cache';
|
|
2
|
+
import { SftpClient } from './SftpClient.js';
|
|
3
|
+
const DEFAULT_MAX_CLIENTS = 16;
|
|
4
|
+
const DEFAULT_TTL_MS = 60_000;
|
|
5
|
+
const clientCache = new LRUCache({
|
|
6
|
+
max: DEFAULT_MAX_CLIENTS,
|
|
7
|
+
ttl: DEFAULT_TTL_MS,
|
|
8
|
+
ttlAutopurge: true,
|
|
9
|
+
dispose: client => {
|
|
10
|
+
void client.end().catch(() => { });
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
export function evictSftpClientFromCache(connectionString) {
|
|
14
|
+
if (!clientCache.has(connectionString))
|
|
15
|
+
return;
|
|
16
|
+
clientCache.delete(connectionString);
|
|
17
|
+
}
|
|
18
|
+
export async function getCachedSftpClient(connectionString, connect) {
|
|
19
|
+
const cached = clientCache.get(connectionString);
|
|
20
|
+
if (cached)
|
|
21
|
+
return cached;
|
|
22
|
+
const client = await connect(connectionString, () => {
|
|
23
|
+
evictSftpClientFromCache(connectionString);
|
|
24
|
+
});
|
|
25
|
+
clientCache.set(connectionString, client);
|
|
26
|
+
return client;
|
|
27
|
+
}
|
|
28
|
+
export function clearSftpClientCache() {
|
|
29
|
+
clientCache.clear();
|
|
30
|
+
}
|
|
31
|
+
export function getSftpClientCacheSize() {
|
|
32
|
+
return clientCache.size;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=SftpClientCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SftpClientCache.js","sourceRoot":"","sources":["../../src/models/SftpClientCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,mBAAmB,GAAG,EAAE,CAAA;AAC9B,MAAM,cAAc,GAAG,MAAM,CAAA;AAO7B,MAAM,WAAW,GAAG,IAAI,QAAQ,CAAqB;IACnD,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,cAAc;IACnB,YAAY,EAAE,IAAI;IAClB,OAAO,EAAE,MAAM,CAAC,EAAE;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACnC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,UAAU,wBAAwB,CAAC,gBAAwB;IAC/D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAAE,OAAM;IAE9C,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,gBAAwB,EACxB,OAA4B;IAE5B,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAEhD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAClD,wBAAwB,CAAC,gBAAgB,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,WAAW,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;IAEzC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,WAAW,CAAC,KAAK,EAAE,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,WAAW,CAAC,IAAI,CAAA;AACzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowRun.js","sourceRoot":"","sources":["../../src/models/WorkflowRun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAI9D,MAAM,OAAO,WAAW;IACf,EAAE,CAAQ;IACD,QAAQ,CAAQ;IAChB,KAAK,CAAS;IACvB,MAAM,CAAmB;IACzB,MAAM,CAAU;IAChB,cAAc,CAAsC;IACpD,MAAM,CAAc;IACpB,cAAc,CAAsB;IAC3B,IAAI,GAAU,EAAE,CAAA;IAEhC,YAAY,QAAgB,EAAE,KAAc,EAAE,KAAa,UAAU,EAAE;QACrE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;IACzB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"WorkflowRun.js","sourceRoot":"","sources":["../../src/models/WorkflowRun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAI9D,MAAM,OAAO,WAAW;IACf,EAAE,CAAQ;IACD,QAAQ,CAAQ;IAChB,KAAK,CAAS;IACvB,MAAM,CAAmB;IACzB,MAAM,CAAU;IAChB,cAAc,CAAsC;IACpD,MAAM,CAAc;IACpB,cAAc,CAAsB;IACpC,2BAA2B,CAAS;IAC3B,IAAI,GAAU,EAAE,CAAA;IAEhC,YAAY,QAAgB,EAAE,KAAc,EAAE,KAAa,UAAU,EAAE;QACrE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;IACzB,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
|
-
import { DevFileBinary } from '../DevFileBinary.js';
|
|
3
3
|
export declare class DevSftpClaim extends SftpClaim {
|
|
4
|
-
private
|
|
4
|
+
private readonly claims;
|
|
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<
|
|
10
|
+
downloadDir(input: SftpDownloadDirActivityInput): Promise<Binary>;
|
|
10
11
|
exists(input: SftpExistsActivityInput): Promise<SftpExistsResult>;
|
|
11
|
-
get(input: SftpGetActivityInput): Promise<
|
|
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,148 +1,114 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
catch {
|
|
14
|
-
return value;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
async function parseConnectionString(connectionString) {
|
|
18
|
-
const url = new URL(connectionString);
|
|
19
|
-
if (url.protocol !== 'sftp:')
|
|
20
|
-
throw new Error(`Unsupported protocol: ${url.protocol}`);
|
|
21
|
-
const config = {
|
|
22
|
-
host: url.hostname,
|
|
23
|
-
port: url.port ? Number(url.port) : 22,
|
|
24
|
-
username: decodeUserinfo(url.username),
|
|
25
|
-
};
|
|
26
|
-
if (url.password)
|
|
27
|
-
config.password = decodeUserinfo(url.password);
|
|
28
|
-
const privateKeyPath = url.searchParams.get('privateKeyPath');
|
|
29
|
-
if (privateKeyPath) {
|
|
30
|
-
const resolved = path.resolve(privateKeyPath);
|
|
31
|
-
config.privateKey = await fs.promises.readFile(resolved, 'utf8');
|
|
32
|
-
}
|
|
33
|
-
const passphrase = url.searchParams.get('passphrase');
|
|
34
|
-
if (passphrase)
|
|
35
|
-
config.passphrase = passphrase;
|
|
36
|
-
if (!config.password && !config.privateKey)
|
|
37
|
-
throw new Error('SFTP connection requires a password in the URL or ?privateKeyPath=/path/to/key.pem');
|
|
38
|
-
return config;
|
|
39
|
-
}
|
|
40
|
-
function isFileBinaryInput(content) {
|
|
41
|
-
return (typeof content === 'object' &&
|
|
42
|
-
content !== null &&
|
|
43
|
-
'path' in content &&
|
|
44
|
-
typeof content.path === 'string');
|
|
45
|
-
}
|
|
46
|
-
async function binaryToBuffer(content) {
|
|
47
|
-
if (isFileBinaryInput(content))
|
|
48
|
-
return fs.promises.readFile(content.path);
|
|
49
|
-
const stream = await content.stream();
|
|
50
|
-
const chunks = [];
|
|
51
|
-
for await (const chunk of stream) {
|
|
52
|
-
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
53
|
-
}
|
|
54
|
-
return Buffer.concat(chunks);
|
|
55
|
-
}
|
|
56
|
-
async function bufferToBinary(buffer, filepath) {
|
|
57
|
-
const tempPath = path.join(os.tmpdir(), `sftp-${randomUUID()}${path.extname(filepath) || '.bin'}`);
|
|
58
|
-
await fs.promises.writeFile(tempPath, buffer);
|
|
59
|
-
const stat = await fs.promises.stat(tempPath);
|
|
60
|
-
return DevFileBinary.from({
|
|
61
|
-
path: tempPath,
|
|
62
|
-
contentType: 'application/octet-stream',
|
|
63
|
-
contentLength: stat.size,
|
|
64
|
-
});
|
|
65
|
-
}
|
|
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';
|
|
6
|
+
import { Claim } from '@t4h.framework/core';
|
|
7
|
+
import { FileSystemClaim } from '@t4h.framework/fs';
|
|
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';
|
|
66
12
|
export class DevSftpClaim extends SftpClaim {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
await client.end().catch(() => { });
|
|
75
|
-
}
|
|
13
|
+
claims = new Claim({
|
|
14
|
+
fs: FileSystemClaim,
|
|
15
|
+
});
|
|
16
|
+
async stream(content) {
|
|
17
|
+
if (!(content instanceof SftpBinary))
|
|
18
|
+
return content.stream();
|
|
19
|
+
return SftpClient.stream(content.connectionString, content.filepath);
|
|
76
20
|
}
|
|
77
21
|
async append(input) {
|
|
78
|
-
await
|
|
79
|
-
|
|
80
|
-
});
|
|
22
|
+
await using client = await SftpClient.connect(input.connectionString);
|
|
23
|
+
await client.append(await this.stream(input.content), input.filepath);
|
|
81
24
|
}
|
|
82
25
|
async chmod(input) {
|
|
83
|
-
await
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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();
|
|
87
40
|
}
|
|
88
41
|
async delete(input) {
|
|
89
|
-
await
|
|
42
|
+
await using client = await SftpClient.connect(input.connectionString);
|
|
43
|
+
await client.delete(input.path, input.noErrorOK ?? false);
|
|
90
44
|
}
|
|
91
45
|
async downloadDir(input) {
|
|
92
|
-
const
|
|
93
|
-
const
|
|
46
|
+
const workDir = await mkdtemp(join(tmpdir(), 'sftp-dl-'));
|
|
47
|
+
const contentDir = join(workDir, 'content');
|
|
48
|
+
const archivePath = join(workDir, 'archive.tar.gz');
|
|
94
49
|
try {
|
|
95
|
-
await
|
|
96
|
-
await
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
contentLength: stat.size,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
await fs.promises.rm(archivePath, { force: true }).catch(() => { });
|
|
106
|
-
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));
|
|
107
56
|
}
|
|
108
57
|
finally {
|
|
109
|
-
await
|
|
58
|
+
await rm(workDir, { recursive: true, force: true });
|
|
110
59
|
}
|
|
111
60
|
}
|
|
112
|
-
exists(input) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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;
|
|
119
83
|
});
|
|
120
84
|
}
|
|
121
|
-
list(input) {
|
|
122
|
-
return this.withClient(input.connectionString, client => client.list(input.path));
|
|
123
|
-
}
|
|
124
85
|
async mkdir(input) {
|
|
125
|
-
await
|
|
86
|
+
await using client = await SftpClient.connect(input.connectionString);
|
|
87
|
+
await client.mkdir(input.path, input.recursive ?? false);
|
|
126
88
|
}
|
|
127
89
|
async put(input) {
|
|
128
|
-
await
|
|
129
|
-
|
|
130
|
-
});
|
|
90
|
+
await using client = await SftpClient.connect(input.connectionString);
|
|
91
|
+
await client.put(await this.stream(input.content), input.filepath);
|
|
131
92
|
}
|
|
132
93
|
async copy(input) {
|
|
133
|
-
await
|
|
94
|
+
await using client = await SftpClient.connect(input.connectionString);
|
|
95
|
+
await client.rcopy(input.srcPath, input.destPath);
|
|
134
96
|
}
|
|
135
|
-
realPath(input) {
|
|
136
|
-
|
|
97
|
+
async realPath(input) {
|
|
98
|
+
await using client = await SftpClient.connect(input.connectionString);
|
|
99
|
+
return await client.realPath(input.path);
|
|
137
100
|
}
|
|
138
101
|
async rename(input) {
|
|
139
|
-
await
|
|
102
|
+
await using client = await SftpClient.connect(input.connectionString);
|
|
103
|
+
await client.rename(input.srcPath, input.destPath);
|
|
140
104
|
}
|
|
141
105
|
async rmdir(input) {
|
|
142
|
-
await
|
|
106
|
+
await using client = await SftpClient.connect(input.connectionString);
|
|
107
|
+
await client.rmdir(input.path, input.recursive ?? false);
|
|
143
108
|
}
|
|
144
|
-
stat(input) {
|
|
145
|
-
|
|
109
|
+
async stat(input) {
|
|
110
|
+
await using client = await SftpClient.connect(input.connectionString);
|
|
111
|
+
return (await client.stat(input.path));
|
|
146
112
|
}
|
|
147
113
|
}
|
|
148
114
|
//# sourceMappingURL=DevSftpClaim.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevSftpClaim.js","sourceRoot":"","sources":["../../../src/models/claims/DevSftpClaim.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"DevSftpClaim.js","sourceRoot":"","sources":["../../../src/models/claims/DevSftpClaim.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export async function getSftpConfigFromConnectionString(connectionString) {
|
|
2
|
+
const url = new URL(connectionString);
|
|
3
|
+
if (url.protocol !== 'sftp:')
|
|
4
|
+
throw new Error(`Unsupported protocol: ${url.protocol}`);
|
|
5
|
+
const config = {
|
|
6
|
+
host: url.hostname,
|
|
7
|
+
port: url.port ? Number(url.port) : 22,
|
|
8
|
+
};
|
|
9
|
+
if (url.username)
|
|
10
|
+
config.username = decodeURIComponent(url.username);
|
|
11
|
+
if (url.password) {
|
|
12
|
+
const password = decodeURIComponent(url.password);
|
|
13
|
+
if (password.startsWith('privateKey:'))
|
|
14
|
+
config.privateKey = password.slice(11);
|
|
15
|
+
else
|
|
16
|
+
config.password = password;
|
|
17
|
+
}
|
|
18
|
+
const passphrase = url.searchParams.get('passphrase');
|
|
19
|
+
if (passphrase)
|
|
20
|
+
config.passphrase = passphrase;
|
|
21
|
+
if (!config.password && !config.privateKey)
|
|
22
|
+
throw new Error('SFTP connection requires a password in the URL or a private key');
|
|
23
|
+
return config;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=get-sftp-config-from-connection-string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-sftp-config-from-connection-string.js","sourceRoot":"","sources":["../../src/tools/get-sftp-config-from-connection-string.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,gBAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAErC,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO;QAC1B,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAE1D,MAAM,MAAM,GAA8B;QACxC,IAAI,EAAE,GAAG,CAAC,QAAQ;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;KACvC,CAAA;IAED,IAAI,GAAG,CAAC,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAEpE,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAEjD,IAAI,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC;YACpC,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;;YACnC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACjC,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAErD,IAAI,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAA;IAE9C,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU;QACxC,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAA;IAEH,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { Binary } from '@t4h.framework/core';
|
|
2
|
+
import { SftpBinary } from '@t4h.framework/sftp';
|
|
2
3
|
import { JSONCodec, JSONCodecKind } from '../models/JSONCodec.js';
|
|
3
4
|
import { JSONCodecKindFrameworkSerializableClass as Kind } from '../models/JSONCodecKindFrameworkSerializableClass.js';
|
|
4
5
|
export declare const jsonCodec: JSONCodec<[JSONCodecKind<"date", string, Date, {}, {}>, JSONCodecKind<"binary", {
|
|
5
6
|
path: string;
|
|
6
7
|
contentType: string;
|
|
7
8
|
contentLength: number;
|
|
8
|
-
}, Binary, {}, {}>,
|
|
9
|
+
}, Binary, {}, {}>, JSONCodecKind<"sftp:binary", {
|
|
10
|
+
connectionString: string;
|
|
11
|
+
file: {
|
|
12
|
+
filepath: string;
|
|
13
|
+
contentType: string;
|
|
14
|
+
contentLength: number;
|
|
15
|
+
};
|
|
16
|
+
}, SftpBinary, {}, {}>, Kind<"orm", import("@t4h.framework/core").SerializableClass>, Kind<"http:body", import("@t4h.framework/core").SerializableClass>, Kind<"oauth2:client-credentials-grant", import("@t4h.framework/core").SerializableClass>, Kind<"oauth2:grant-resource-owner-password", import("@t4h.framework/core").SerializableClass>]>;
|
package/dist/tools/json-codec.js
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
import { Binary } from '@t4h.framework/core';
|
|
2
2
|
import { Body, OAuth2ClientCredentials, OAuth2GrantResourceOwnerPassword, } from '@t4h.framework/http';
|
|
3
3
|
import { ORM } from '@t4h.framework/orm';
|
|
4
|
+
import { SftpBinary } from '@t4h.framework/sftp';
|
|
4
5
|
import { DevFileBinary } from '../models/DevFileBinary.js';
|
|
5
6
|
import { JSONCodec, JSONCodecKind } from '../models/JSONCodec.js';
|
|
6
7
|
import { JSONCodecKindFrameworkSerializableClass as Kind } from '../models/JSONCodecKindFrameworkSerializableClass.js';
|
|
8
|
+
import { SftpClient } from '../models/SftpClient.js';
|
|
7
9
|
const jsonDateKind = new JSONCodecKind('date', value => value instanceof Date, (date) => date.toISOString(), (date) => new Date(date));
|
|
8
|
-
const
|
|
10
|
+
const jsonFileBinaryKind = new JSONCodecKind('binary', value => value instanceof DevFileBinary, (binary) => {
|
|
9
11
|
if (!(binary instanceof DevFileBinary))
|
|
10
12
|
throw new TypeError('Unsupported binary instance');
|
|
11
13
|
return binary.toJSON();
|
|
12
14
|
}, json => DevFileBinary.from(json));
|
|
13
|
-
|
|
15
|
+
const jsonSftpBinaryKind = new JSONCodecKind('sftp:binary', value => value instanceof SftpBinary, (binary) => {
|
|
16
|
+
if (!(binary instanceof SftpBinary))
|
|
17
|
+
throw new TypeError('Unsupported binary instance');
|
|
18
|
+
return binary.toJSON();
|
|
19
|
+
}, json => SftpBinary.from(json.connectionString, json.file, binary => SftpClient.stream(binary.connectionString, binary.filepath)));
|
|
20
|
+
export const jsonCodec = new JSONCodec(jsonDateKind, jsonFileBinaryKind, jsonSftpBinaryKind, new Kind('orm', ORM), new Kind('http:body', Body), new Kind('oauth2:client-credentials-grant', OAuth2ClientCredentials), new Kind('oauth2:grant-resource-owner-password', OAuth2GrantResourceOwnerPassword));
|
|
14
21
|
//# sourceMappingURL=json-codec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-codec.js","sourceRoot":"","sources":["../../src/tools/json-codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EACL,IAAI,EACJ,uBAAuB,EACvB,gCAAgC,GACjC,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"json-codec.js","sourceRoot":"","sources":["../../src/tools/json-codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EACL,IAAI,EACJ,uBAAuB,EACvB,gCAAgC,GACjC,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,uCAAuC,IAAI,IAAI,EAAE,MAAM,sDAAsD,CAAA;AACtH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD,MAAM,YAAY,GAAG,IAAI,aAAa,CACpC,MAAM,EACN,KAAK,CAAC,EAAE,CAAC,KAAK,YAAY,IAAI,EAC9B,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,EAClC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CACjC,CAAA;AAED,MAAM,kBAAkB,GAAG,IAAI,aAAa,CAC1C,QAAQ,EACR,KAAK,CAAC,EAAE,CAAC,KAAK,YAAY,aAAa,EACvC,CAAC,MAAc,EAAE,EAAE;IACjB,IAAI,CAAC,CAAC,MAAM,YAAY,aAAa,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAA;IAEpD,OAAO,MAAM,CAAC,MAAM,EAAE,CAAA;AACxB,CAAC,EACD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CACjC,CAAA;AAED,MAAM,kBAAkB,GAAG,IAAI,aAAa,CAC1C,aAAa,EACb,KAAK,CAAC,EAAE,CAAC,KAAK,YAAY,UAAU,EACpC,CAAC,MAAkB,EAAE,EAAE;IACrB,IAAI,CAAC,CAAC,MAAM,YAAY,UAAU,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAA;IAEpD,OAAO,MAAM,CAAC,MAAM,EAAE,CAAA;AACxB,CAAC,EACD,IAAI,CAAC,EAAE,CACL,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CACzD,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAC5D,CACJ,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,CACpC,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EACpB,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAC3B,IAAI,IAAI,CAAC,iCAAiC,EAAE,uBAAuB,CAAC,EACpE,IAAI,IAAI,CACN,sCAAsC,EACtC,gCAAgC,CACjC,CACF,CAAA"}
|
|
@@ -26,6 +26,7 @@ let CreateWorkflowRun = class CreateWorkflowRun {
|
|
|
26
26
|
run.parent = parentRun;
|
|
27
27
|
}
|
|
28
28
|
if (options?.parentWorkflowRunActivityId) {
|
|
29
|
+
run.parentWorkflowRunActivityId = options.parentWorkflowRunActivityId;
|
|
29
30
|
const parentActivity = this.workflowRunActivityRepository.findById(options.parentWorkflowRunActivityId);
|
|
30
31
|
if (parentActivity)
|
|
31
32
|
run.parentActivity = parentActivity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateWorkflowRun.usecase.js","sourceRoot":"","sources":["../../src/use-cases/CreateWorkflowRun.usecase.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAA;AAS1F,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAGT;IAGA;IALnB,YAEmB,qBAA4C,EAG5C,6BAA4D;QAH5D,0BAAqB,GAArB,qBAAqB,CAAuB;QAG5C,kCAA6B,GAA7B,6BAA6B,CAA+B;IAC5E,CAAC;IAEG,MAAM,CACX,UAAkB,EAClB,KAAc,EACd,OAAkC;QAElC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;QAE3D,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CACnD,OAAO,CAAC,mBAAmB,CAC5B,CAAA;YAED,IAAI,SAAS;gBAAE,GAAG,CAAC,MAAM,GAAG,SAAS,CAAA;QACvC,CAAC;QAED,IAAI,OAAO,EAAE,2BAA2B,EAAE,CAAC;YACzC,MAAM,cAAc,GAAG,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAChE,OAAO,CAAC,2BAA2B,CACpC,CAAA;YAED,IAAI,cAAc;gBAAE,GAAG,CAAC,cAAc,GAAG,cAAc,CAAA;QACzD,CAAC;QAED,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEpC,OAAO,GAAG,CAAA;IACZ,CAAC;CACF,CAAA;
|
|
1
|
+
{"version":3,"file":"CreateWorkflowRun.usecase.js","sourceRoot":"","sources":["../../src/use-cases/CreateWorkflowRun.usecase.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAA;AAS1F,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAGT;IAGA;IALnB,YAEmB,qBAA4C,EAG5C,6BAA4D;QAH5D,0BAAqB,GAArB,qBAAqB,CAAuB;QAG5C,kCAA6B,GAA7B,6BAA6B,CAA+B;IAC5E,CAAC;IAEG,MAAM,CACX,UAAkB,EAClB,KAAc,EACd,OAAkC;QAElC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;QAE3D,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CACnD,OAAO,CAAC,mBAAmB,CAC5B,CAAA;YAED,IAAI,SAAS;gBAAE,GAAG,CAAC,MAAM,GAAG,SAAS,CAAA;QACvC,CAAC;QAED,IAAI,OAAO,EAAE,2BAA2B,EAAE,CAAC;YACzC,GAAG,CAAC,2BAA2B,GAAG,OAAO,CAAC,2BAA2B,CAAA;YAErE,MAAM,cAAc,GAAG,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAChE,OAAO,CAAC,2BAA2B,CACpC,CAAA;YAED,IAAI,cAAc;gBAAE,GAAG,CAAC,cAAc,GAAG,cAAc,CAAA;QACzD,CAAC;QAED,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEpC,OAAO,GAAG,CAAA;IACZ,CAAC;CACF,CAAA;AAtCY,iBAAiB;IAD7B,UAAU,EAAE;IAGR,WAAA,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAA;IAGnC,WAAA,MAAM,CAAC,GAAG,EAAE,CAAC,6BAA6B,CAAC,CAAA;GALnC,iBAAiB,CAsC7B"}
|
|
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
|
-
import { AsyncActivity, AsyncActivityResultFulfilled, AsyncActivityResultPending, AsyncActivityResultRejected, Internals, } from '@t4h.framework/core';
|
|
10
|
+
import { AsyncActivity, AsyncActivityResultFulfilled, AsyncActivityResultPending, AsyncActivityResultRejected, Claim, Internals, } from '@t4h.framework/core';
|
|
11
11
|
import { Inject, Injectable } from 'pleroma';
|
|
12
12
|
import { claims } from '../claims.js';
|
|
13
13
|
import { WorkflowRunActivity, WorkflowRunAsyncActivityPending, } from '../models/WorkflowRunActivity.js';
|
|
@@ -22,41 +22,43 @@ let CreateWorkflowRunAsyncActivity = class CreateWorkflowRunAsyncActivity {
|
|
|
22
22
|
this.workflowRunAsyncActivity = workflowRunAsyncActivity;
|
|
23
23
|
}
|
|
24
24
|
async create(activity, input) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
25
|
+
return await Claim.run(claims, async () => {
|
|
26
|
+
if (!activity.asyncActivity)
|
|
27
|
+
throw new Error(`Activity is not an async activity: ${activity.id}`);
|
|
28
|
+
const Activity = activity.constructable;
|
|
29
|
+
const bootstrap = await Internals.runActivity(Activity, { claims, env }, async (activity) => {
|
|
30
|
+
if (!(activity instanceof AsyncActivity))
|
|
31
|
+
throw new Error(`Activity is not an async activity: ${activity.constructor.name}`);
|
|
32
|
+
return activity.bootstrap(input);
|
|
33
|
+
});
|
|
34
|
+
const asyncActivity = activity.asyncActivity;
|
|
35
|
+
const pending = new WorkflowRunAsyncActivityPending(asyncActivity);
|
|
36
|
+
if (bootstrap instanceof AsyncActivityResultPending) {
|
|
37
|
+
Object.assign(pending, {
|
|
38
|
+
status: 'pending',
|
|
39
|
+
schema: bootstrap.schema,
|
|
40
|
+
timeoutAt: bootstrap.timeoutAt,
|
|
41
|
+
bootstrap,
|
|
42
|
+
});
|
|
43
|
+
asyncActivity.pendingAsyncActivities.push(pending);
|
|
44
|
+
if (bootstrap.timeoutAt)
|
|
45
|
+
this.timeoutScheduler.schedule(pending.id, bootstrap.timeoutAt, () => this.workflowRunAsyncActivity.timeout(asyncActivity, pending));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const isFulfilled = bootstrap instanceof AsyncActivityResultFulfilled;
|
|
49
|
+
const isRejected = bootstrap instanceof AsyncActivityResultRejected;
|
|
50
|
+
if (!isFulfilled && !isRejected)
|
|
51
|
+
throw new Error('Unexpected bootstrap result', { cause: bootstrap });
|
|
52
|
+
const status = isFulfilled ? 'fulfilled' : 'rejected';
|
|
36
53
|
Object.assign(pending, {
|
|
37
|
-
status
|
|
38
|
-
|
|
39
|
-
timeoutAt: bootstrap.timeoutAt,
|
|
40
|
-
bootstrap,
|
|
54
|
+
status,
|
|
55
|
+
bootstrap: new AsyncActivityResultPending(),
|
|
41
56
|
});
|
|
42
57
|
asyncActivity.pendingAsyncActivities.push(pending);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const isFulfilled = bootstrap instanceof AsyncActivityResultFulfilled;
|
|
48
|
-
const isRejected = bootstrap instanceof AsyncActivityResultRejected;
|
|
49
|
-
if (!isFulfilled && !isRejected)
|
|
50
|
-
throw new Error('Unexpected bootstrap result', { cause: bootstrap });
|
|
51
|
-
const status = isFulfilled ? 'fulfilled' : 'rejected';
|
|
52
|
-
Object.assign(pending, {
|
|
53
|
-
status,
|
|
54
|
-
bootstrap: new AsyncActivityResultPending(),
|
|
58
|
+
asyncActivity.status = status;
|
|
59
|
+
activity.output = bootstrap.payload;
|
|
60
|
+
return activity.output;
|
|
55
61
|
});
|
|
56
|
-
asyncActivity.pendingAsyncActivities.push(pending);
|
|
57
|
-
asyncActivity.status = status;
|
|
58
|
-
activity.output = bootstrap.payload;
|
|
59
|
-
return activity.output;
|
|
60
62
|
}
|
|
61
63
|
};
|
|
62
64
|
CreateWorkflowRunAsyncActivity = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateWorkflowRunAsyncActivity.usecase.js","sourceRoot":"","sources":["../../src/use-cases/CreateWorkflowRunAsyncActivity.usecase.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,aAAa,EACb,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,SAAS,GACV,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EACL,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAA;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAA;AACtG,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAA;AAGxC,IAAM,8BAA8B,GAApC,MAAM,8BAA8B;IAGtB;IAGA;IALnB,YAEmB,gBAAyC,EAGzC,wBAAwD;QAHxD,qBAAgB,GAAhB,gBAAgB,CAAyB;QAGzC,6BAAwB,GAAxB,wBAAwB,CAAgC;IACxE,CAAC;IAEG,KAAK,CAAC,MAAM,CAAC,QAA6B,EAAE,KAAc;QAC/D,IAAI,CAAC,QAAQ,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"CreateWorkflowRunAsyncActivity.usecase.js","sourceRoot":"","sources":["../../src/use-cases/CreateWorkflowRunAsyncActivity.usecase.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,8 @@ export declare class NextTickWorkflowRun {
|
|
|
15
15
|
nextTick(runId: string): Promise<void>;
|
|
16
16
|
private run;
|
|
17
17
|
private findWorkflow;
|
|
18
|
+
private linkChildRunsToParentActivity;
|
|
19
|
+
private resolveParentActivity;
|
|
18
20
|
private startPendingChildWorkflows;
|
|
19
21
|
private notifyParentWorkflowRun;
|
|
20
22
|
}
|
|
@@ -8,7 +8,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
10
|
import { randomUUID } from 'node:crypto';
|
|
11
|
-
import { App, AsyncActivity, Internals, PushActivity, PushWaitAsyncActivity, SyncActivity, } from '@t4h.framework/core';
|
|
11
|
+
import { App, AsyncActivity, Claim, Internals, PushActivity, PushWaitAsyncActivity, SyncActivity, } from '@t4h.framework/core';
|
|
12
12
|
import { Inject, Injectable } from 'pleroma';
|
|
13
13
|
import { claims } from '../claims.js';
|
|
14
14
|
import { WorkflowRunActivity } from '../models/WorkflowRunActivity.js';
|
|
@@ -35,13 +35,15 @@ let NextTickWorkflowRun = class NextTickWorkflowRun {
|
|
|
35
35
|
this.context = context;
|
|
36
36
|
}
|
|
37
37
|
async nextTick(runId) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
await Claim.run(claims, async () => {
|
|
39
|
+
const run = this.workflowRunRepository.findById(runId);
|
|
40
|
+
if (!run)
|
|
41
|
+
throw new Error(`Unknown workflow run: ${runId}`);
|
|
42
|
+
if (run.status !== 'running')
|
|
43
|
+
return;
|
|
44
|
+
const activityId = randomUUID();
|
|
45
|
+
await this.context.run({ runId, workflowId: run.workflow, activityId }, () => this.run(run, activityId));
|
|
46
|
+
});
|
|
45
47
|
}
|
|
46
48
|
async run(run, activityId) {
|
|
47
49
|
if (!app)
|
|
@@ -68,6 +70,7 @@ let NextTickWorkflowRun = class NextTickWorkflowRun {
|
|
|
68
70
|
if (pushActivityOrError instanceof PushActivity) {
|
|
69
71
|
const activity = new WorkflowRunActivity(run, pushActivityOrError.activity.constructor, activityId);
|
|
70
72
|
this.workflowRunActivityRepository.save(activity);
|
|
73
|
+
this.linkChildRunsToParentActivity(activity);
|
|
71
74
|
if (pushActivityOrError.activity instanceof SyncActivity) {
|
|
72
75
|
await this.workflowRunSyncActivity.run(activity, pushActivityOrError.input);
|
|
73
76
|
await this.startPendingChildWorkflows(activityId);
|
|
@@ -104,9 +107,23 @@ let NextTickWorkflowRun = class NextTickWorkflowRun {
|
|
|
104
107
|
const index = parseInt(workflowId.slice(1));
|
|
105
108
|
return app.workflows[index];
|
|
106
109
|
}
|
|
110
|
+
linkChildRunsToParentActivity(parentActivity) {
|
|
111
|
+
for (const run of this.workflowRunRepository.findBy(child => child.parentWorkflowRunActivityId === parentActivity.id &&
|
|
112
|
+
!child.parentActivity)) {
|
|
113
|
+
run.parentActivity = parentActivity;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
resolveParentActivity(child) {
|
|
117
|
+
if (child.parentActivity)
|
|
118
|
+
return child.parentActivity;
|
|
119
|
+
if (!child.parentWorkflowRunActivityId)
|
|
120
|
+
return undefined;
|
|
121
|
+
return this.workflowRunActivityRepository.findById(child.parentWorkflowRunActivityId);
|
|
122
|
+
}
|
|
107
123
|
async startPendingChildWorkflows(parentActivityId) {
|
|
108
124
|
const runs = this.workflowRunRepository.findBy(run => {
|
|
109
|
-
if (run.parentActivity?.id !== parentActivityId
|
|
125
|
+
if (run.parentActivity?.id !== parentActivityId &&
|
|
126
|
+
run.parentWorkflowRunActivityId !== parentActivityId)
|
|
110
127
|
return false;
|
|
111
128
|
if (run.status !== 'running')
|
|
112
129
|
return false;
|
|
@@ -122,9 +139,10 @@ let NextTickWorkflowRun = class NextTickWorkflowRun {
|
|
|
122
139
|
async notifyParentWorkflowRun(child, status, output) {
|
|
123
140
|
if (!child.parent)
|
|
124
141
|
return;
|
|
125
|
-
|
|
142
|
+
const parentActivity = this.resolveParentActivity(child);
|
|
143
|
+
if (!parentActivity)
|
|
126
144
|
return;
|
|
127
|
-
const parentAsyncActivity =
|
|
145
|
+
const parentAsyncActivity = parentActivity.asyncActivity;
|
|
128
146
|
if (!parentAsyncActivity)
|
|
129
147
|
return;
|
|
130
148
|
const lastPending = parentAsyncActivity.lastPendingAsyncActivity;
|
|
@@ -132,7 +150,7 @@ let NextTickWorkflowRun = class NextTickWorkflowRun {
|
|
|
132
150
|
return;
|
|
133
151
|
if (lastPending.status !== 'pending')
|
|
134
152
|
return;
|
|
135
|
-
await this.workflowRunAsyncActivity.advance(
|
|
153
|
+
await this.workflowRunAsyncActivity.advance(parentActivity.id, {
|
|
136
154
|
status,
|
|
137
155
|
output,
|
|
138
156
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NextTickWorkflowRun.usecase.js","sourceRoot":"","sources":["../../src/use-cases/NextTickWorkflowRun.usecase.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EACL,GAAG,EACH,aAAa,EACb,SAAS,EACT,YAAY,EACZ,qBAAqB,EACrB,YAAY,GACb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAA;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAA;AACtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,sDAAsD,CAAA;AACpG,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAA;AAG7C,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAGX;IAGA;IAGA;IAGA;IAGA;IAGA;IAjBnB,YAEmB,qBAA4C,EAG5C,6BAA4D,EAG5D,WAA8B,EAG9B,uBAAsD,EAGtD,wBAAwD,EAGxD,OAA8B;QAf9B,0BAAqB,GAArB,qBAAqB,CAAuB;QAG5C,kCAA6B,GAA7B,6BAA6B,CAA+B;QAG5D,gBAAW,GAAX,WAAW,CAAmB;QAG9B,4BAAuB,GAAvB,uBAAuB,CAA+B;QAGtD,6BAAwB,GAAxB,wBAAwB,CAAgC;QAGxD,YAAO,GAAP,OAAO,CAAuB;IAC9C,CAAC;IAEG,KAAK,CAAC,QAAQ,CAAC,KAAa;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"NextTickWorkflowRun.usecase.js","sourceRoot":"","sources":["../../src/use-cases/NextTickWorkflowRun.usecase.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
|
-
import { AsyncActivity, AsyncActivityResultRejected, Internals, } from '@t4h.framework/core';
|
|
10
|
+
import { AsyncActivity, AsyncActivityResultRejected, Claim, Internals, } from '@t4h.framework/core';
|
|
11
11
|
import { Inject, Injectable } from 'pleroma';
|
|
12
12
|
import { CallbackWorkflowRunAsyncActivity } from './CallbackWorkflowRunAsyncActivity.usecase.js';
|
|
13
13
|
import { claims } from '../claims.js';
|
|
@@ -19,15 +19,17 @@ let TimeoutWorkflowRunAsyncActivity = class TimeoutWorkflowRunAsyncActivity {
|
|
|
19
19
|
this.workflowRunAsyncActivityHandler = workflowRunAsyncActivityHandler;
|
|
20
20
|
}
|
|
21
21
|
async timeout(asyncActivity, pending) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
await Claim.run(claims, async () => {
|
|
23
|
+
const Activity = asyncActivity.activity.constructable;
|
|
24
|
+
const result = await Internals.runActivity(new Activity(), { claims, env }, async (activity) => {
|
|
25
|
+
if (!(activity instanceof AsyncActivity))
|
|
26
|
+
throw new Error(`Activity is not an async activity: ${activity.constructor.name}`);
|
|
27
|
+
if (!activity.onTimeout)
|
|
28
|
+
return new AsyncActivityResultRejected({ reason: 'timeout' });
|
|
29
|
+
return activity.onTimeout(pending.bootstrap);
|
|
30
|
+
});
|
|
31
|
+
await this.workflowRunAsyncActivityHandler.callback(pending, asyncActivity.activity, result);
|
|
29
32
|
});
|
|
30
|
-
await this.workflowRunAsyncActivityHandler.callback(pending, asyncActivity.activity, result);
|
|
31
33
|
}
|
|
32
34
|
};
|
|
33
35
|
TimeoutWorkflowRunAsyncActivity = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeoutWorkflowRunAsyncActivity.usecase.js","sourceRoot":"","sources":["../../src/use-cases/TimeoutWorkflowRunAsyncActivity.usecase.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,SAAS,GACV,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,EAAE,gCAAgC,EAAE,MAAM,+CAA+C,CAAA;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAElF,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAA;AAGxC,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;IAGvB;IAFnB,YAEmB,+BAAiE;QAAjE,oCAA+B,GAA/B,+BAA+B,CAAkC;IACjF,CAAC;IAEG,KAAK,CAAC,OAAO,CAClB,aAAuC,EACvC,OAAwC;QAExC,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"TimeoutWorkflowRunAsyncActivity.usecase.js","sourceRoot":"","sources":["../../src/use-cases/TimeoutWorkflowRunAsyncActivity.usecase.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,KAAK,EACL,SAAS,GACV,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,EAAE,gCAAgC,EAAE,MAAM,+CAA+C,CAAA;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAElF,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAA;AAGxC,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;IAGvB;IAFnB,YAEmB,+BAAiE;QAAjE,oCAA+B,GAA/B,+BAA+B,CAAkC;IACjF,CAAC;IAEG,KAAK,CAAC,OAAO,CAClB,aAAuC,EACvC,OAAwC;QAExC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAA;YAErD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CACxC,IAAI,QAAQ,EAAE,EACd,EAAE,MAAM,EAAE,GAAG,EAAE,EACf,KAAK,EAAC,QAAQ,EAAC,EAAE;gBACf,IAAI,CAAC,CAAC,QAAQ,YAAY,aAAa,CAAC;oBACtC,MAAM,IAAI,KAAK,CACb,sCAAsC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAClE,CAAA;gBAEH,IAAI,CAAC,QAAQ,CAAC,SAAS;oBACrB,OAAO,IAAI,2BAA2B,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;gBAE/D,OAAO,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YAC9C,CAAC,CACF,CAAA;YAED,MAAM,IAAI,CAAC,+BAA+B,CAAC,QAAQ,CACjD,OAAO,EACP,aAAa,CAAC,QAAQ,EACtB,MAAM,CACP,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AApCY,+BAA+B;IAD3C,UAAU,EAAE;IAGR,WAAA,MAAM,CAAC,GAAG,EAAE,CAAC,gCAAgC,CAAC,CAAA;GAFtC,+BAA+B,CAoC3C"}
|
|
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
|
-
import { AsyncActivity, Internals } from '@t4h.framework/core';
|
|
10
|
+
import { AsyncActivity, Claim, Internals } from '@t4h.framework/core';
|
|
11
11
|
import { Inject, Injectable } from 'pleroma';
|
|
12
12
|
import { claims } from '../claims.js';
|
|
13
13
|
import { WorkflowRunAsyncActivityFacade } from '../services/WorkflowRunAsyncActivityFacade.service.js';
|
|
@@ -18,22 +18,24 @@ let WorkflowRunAsyncActivity = class WorkflowRunAsyncActivity {
|
|
|
18
18
|
this.workflowRunAsyncActivity = workflowRunAsyncActivity;
|
|
19
19
|
}
|
|
20
20
|
async run(activity) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
21
|
+
await Claim.run(claims, async () => {
|
|
22
|
+
if (!activity.asyncActivity)
|
|
23
|
+
throw new Error(`Activity is not an async activity: ${activity.id}`);
|
|
24
|
+
const asyncActivity = activity.asyncActivity;
|
|
25
|
+
const pending = asyncActivity.lastPendingAsyncActivity;
|
|
26
|
+
if (!pending)
|
|
27
|
+
throw new Error(`No pending state found for async activity: ${activity.id}`);
|
|
28
|
+
const initialPending = asyncActivity.pendingAsyncActivities.find(pending => !pending.previous);
|
|
29
|
+
if (!initialPending)
|
|
30
|
+
throw new Error(`Initial pending not found for async activity: ${activity.id}`);
|
|
31
|
+
const Activity = activity.constructable;
|
|
32
|
+
const result = await Internals.runActivity(new Activity(), { claims, env }, async (activity) => {
|
|
33
|
+
if (!(activity instanceof AsyncActivity))
|
|
34
|
+
throw new Error(`Activity is not an async activity: ${activity.constructor.name}`);
|
|
35
|
+
return activity.advance(pending.payload, initialPending.bootstrap);
|
|
36
|
+
});
|
|
37
|
+
await this.workflowRunAsyncActivity.callback(pending, activity, result);
|
|
35
38
|
});
|
|
36
|
-
await this.workflowRunAsyncActivity.callback(pending, activity, result);
|
|
37
39
|
}
|
|
38
40
|
};
|
|
39
41
|
WorkflowRunAsyncActivity = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowRunAsyncActivity.usecase.js","sourceRoot":"","sources":["../../src/use-cases/WorkflowRunAsyncActivity.usecase.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"WorkflowRunAsyncActivity.usecase.js","sourceRoot":"","sources":["../../src/use-cases/WorkflowRunAsyncActivity.usecase.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAA;AACtG,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAA;AAGxC,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAGhB;IAFnB,YAEmB,wBAAwD;QAAxD,6BAAwB,GAAxB,wBAAwB,CAAgC;IACxE,CAAC;IAEG,KAAK,CAAC,GAAG,CAAC,QAA6B;QAC5C,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YACjC,IAAI,CAAC,QAAQ,CAAC,aAAa;gBACzB,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;YAEtE,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAA;YAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,wBAAwB,CAAA;YAEtD,IAAI,CAAC,OAAO;gBACV,MAAM,IAAI,KAAK,CACb,8CAA8C,QAAQ,CAAC,EAAE,EAAE,CAC5D,CAAA;YAEH,MAAM,cAAc,GAAG,aAAa,CAAC,sBAAsB,CAAC,IAAI,CAC9D,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAC7B,CAAA;YAED,IAAI,CAAC,cAAc;gBACjB,MAAM,IAAI,KAAK,CACb,iDAAiD,QAAQ,CAAC,EAAE,EAAE,CAC/D,CAAA;YAEH,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAA;YAEvC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CACxC,IAAI,QAAQ,EAAE,EACd,EAAE,MAAM,EAAE,GAAG,EAAE,EACf,KAAK,EAAC,QAAQ,EAAC,EAAE;gBACf,IAAI,CAAC,CAAC,QAAQ,YAAY,aAAa,CAAC;oBACtC,MAAM,IAAI,KAAK,CACb,sCAAsC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAClE,CAAA;gBAEH,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;YACpE,CAAC,CACF,CAAA;YAED,MAAM,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QACzE,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AA/CY,wBAAwB;IADpC,UAAU,EAAE;IAGR,WAAA,MAAM,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC,CAAA;GAFpC,wBAAwB,CA+CpC"}
|
|
@@ -4,19 +4,21 @@ 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 { Internals, SyncActivity } from '@t4h.framework/core';
|
|
7
|
+
import { Claim, Internals, SyncActivity } from '@t4h.framework/core';
|
|
8
8
|
import { Injectable } from 'pleroma';
|
|
9
9
|
import { claims } from '../claims.js';
|
|
10
10
|
import { WorkflowRunActivity } from '../models/WorkflowRunActivity.js';
|
|
11
11
|
import { env } from '../workers/app-process.js';
|
|
12
12
|
let WorkflowRunSyncActivity = class WorkflowRunSyncActivity {
|
|
13
13
|
async run(activity, input) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
await Claim.run(claims, async () => {
|
|
15
|
+
const output = await Internals.runActivity(activity.constructable, { claims, env }, async (activity) => {
|
|
16
|
+
if (!(activity instanceof SyncActivity))
|
|
17
|
+
throw new Error(`Activity is not a sync activity: ${activity.constructor.name}`);
|
|
18
|
+
return activity.run(input);
|
|
19
|
+
});
|
|
20
|
+
activity.output = output;
|
|
18
21
|
});
|
|
19
|
-
activity.output = output;
|
|
20
22
|
}
|
|
21
23
|
};
|
|
22
24
|
WorkflowRunSyncActivity = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowRunSyncActivity.usecase.js","sourceRoot":"","sources":["../../src/use-cases/WorkflowRunSyncActivity.usecase.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"WorkflowRunSyncActivity.usecase.js","sourceRoot":"","sources":["../../src/use-cases/WorkflowRunSyncActivity.usecase.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAA;AAGxC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAC3B,KAAK,CAAC,GAAG,CAAC,QAA6B,EAAE,KAAc;QAC5D,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CACxC,QAAQ,CAAC,aAAa,EACtB,EAAE,MAAM,EAAE,GAAG,EAAE,EACf,KAAK,EAAC,QAAQ,EAAC,EAAE;gBACf,IAAI,CAAC,CAAC,QAAQ,YAAY,YAAY,CAAC;oBACrC,MAAM,IAAI,KAAK,CACb,oCAAoC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAChE,CAAA;gBAEH,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC5B,CAAC,CACF,CAAA;YAED,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAnBY,uBAAuB;IADnC,UAAU,EAAE;GACA,uBAAuB,CAmBnC"}
|
|
@@ -14,7 +14,10 @@ if (isForkedEntry) {
|
|
|
14
14
|
if (typeof entrypoint !== 'string')
|
|
15
15
|
throw new Error('Entrypoint is not a string');
|
|
16
16
|
for (const arg of envArgs) {
|
|
17
|
-
const
|
|
17
|
+
const index = arg.indexOf('=');
|
|
18
|
+
if (index === -1)
|
|
19
|
+
continue;
|
|
20
|
+
const [name, value] = [arg.slice(0, index), arg.slice(index + 1)];
|
|
18
21
|
env.set(name, value);
|
|
19
22
|
}
|
|
20
23
|
await Env.run(env, async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-process.js","sourceRoot":"","sources":["../../src/workers/app-process.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,GAAG,EAAY,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAE3D,MAAM,CAAC,IAAI,GAAG,GAAe,IAAI,CAAA;AAEjC,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAA;AAE5C,MAAM,aAAa,GACjB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAElE,IAAI,aAAa,EAAE,CAAC;IAClB,MAAM,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAEtD,IAAI,OAAO,UAAU,KAAK,QAAQ;QAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAE/C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"app-process.js","sourceRoot":"","sources":["../../src/workers/app-process.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@t4h.framework/dev",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Dev server for the T4H Framework",
|
|
5
5
|
"homepage": "https://github.com/tech4humans-brasil/framework/tree/main/packages/dev",
|
|
6
6
|
"bugs": "https://github.com/tech4humans-brasil/framework/issues",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@t4h.framework/http": "^0.3.0",
|
|
43
43
|
"@t4h.framework/orm": "^0.4.0",
|
|
44
44
|
"@t4h.framework/runtime-claims": "^0.1.0",
|
|
45
|
-
"@t4h.framework/sftp": "^0.
|
|
45
|
+
"@t4h.framework/sftp": "^0.5.0",
|
|
46
46
|
"@t4h.framework/smtp": "^0.4.0",
|
|
47
47
|
"mime-types": "^3.0.2",
|
|
48
48
|
"nodemailer": "^8.0.1",
|