@workflow/next 4.0.1-beta.50 → 4.0.1-beta.51
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/builder-deferred.d.ts +2 -0
- package/dist/builder-deferred.d.ts.map +1 -0
- package/dist/builder-deferred.js +744 -0
- package/dist/builder-deferred.js.map +1 -0
- package/dist/builder-eager.d.ts +2 -0
- package/dist/builder-eager.d.ts.map +1 -0
- package/dist/builder-eager.js +390 -0
- package/dist/builder-eager.js.map +1 -0
- package/dist/builder.d.ts +4 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +18 -381
- package/dist/builder.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +71 -22
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +135 -4
- package/dist/loader.js.map +1 -1
- package/dist/socket-server.d.ts +47 -0
- package/dist/socket-server.d.ts.map +1 -0
- package/dist/socket-server.js +132 -0
- package/dist/socket-server.js.map +1 -0
- package/package.json +4 -4
package/dist/loader.js
CHANGED
|
@@ -1,12 +1,130 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.default = workflowLoader;
|
|
4
|
+
const node_net_1 = require("node:net");
|
|
4
5
|
const node_path_1 = require("node:path");
|
|
5
6
|
const core_1 = require("@swc/core");
|
|
7
|
+
const socket_server_js_1 = require("./socket-server.js");
|
|
6
8
|
// Cache decorator options per working directory to avoid reading tsconfig for every file
|
|
7
9
|
const decoratorOptionsCache = new Map();
|
|
8
10
|
// Cache for shared utilities from @workflow/builders (ESM module loaded dynamically in CommonJS context)
|
|
9
11
|
let cachedBuildersModule = null;
|
|
12
|
+
// Cache socket connection to avoid reconnecting on every file.
|
|
13
|
+
let socketClientPromise = null;
|
|
14
|
+
let socketClient = null;
|
|
15
|
+
function resetSocketClient(cachedSocket) {
|
|
16
|
+
if (cachedSocket && socketClient && socketClient !== cachedSocket) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
socketClientPromise = null;
|
|
20
|
+
socketClient = null;
|
|
21
|
+
}
|
|
22
|
+
async function writeSocketMessage(socket, message) {
|
|
23
|
+
await new Promise((resolve, reject) => {
|
|
24
|
+
socket.write(message, (error) => {
|
|
25
|
+
if (error) {
|
|
26
|
+
reject(error);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
resolve();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function shouldUseSocketDiscovery() {
|
|
34
|
+
return Boolean(process.env.WORKFLOW_SOCKET_PORT && process.env.WORKFLOW_SOCKET_AUTH);
|
|
35
|
+
}
|
|
36
|
+
async function getSocketClient() {
|
|
37
|
+
if (!shouldUseSocketDiscovery()) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
if (socketClient?.destroyed) {
|
|
41
|
+
resetSocketClient(socketClient);
|
|
42
|
+
}
|
|
43
|
+
if (!socketClientPromise) {
|
|
44
|
+
socketClientPromise = (async () => {
|
|
45
|
+
try {
|
|
46
|
+
const socketPort = process.env.WORKFLOW_SOCKET_PORT;
|
|
47
|
+
if (!socketPort) {
|
|
48
|
+
throw new Error('Invariant: no socket port provided for workflow loader');
|
|
49
|
+
}
|
|
50
|
+
const port = Number.parseInt(socketPort, 10);
|
|
51
|
+
if (Number.isNaN(port)) {
|
|
52
|
+
throw new Error(`Invariant: invalid socket port provided: ${socketPort}`);
|
|
53
|
+
}
|
|
54
|
+
const socket = (0, node_net_1.connect)({ port, host: '127.0.0.1' });
|
|
55
|
+
// Wait for connection
|
|
56
|
+
await new Promise((resolve, reject) => {
|
|
57
|
+
const onConnect = () => {
|
|
58
|
+
socket.setNoDelay(true);
|
|
59
|
+
cleanup();
|
|
60
|
+
resolve();
|
|
61
|
+
};
|
|
62
|
+
const onError = (error) => {
|
|
63
|
+
cleanup();
|
|
64
|
+
reject(error);
|
|
65
|
+
};
|
|
66
|
+
const timeout = setTimeout(() => {
|
|
67
|
+
cleanup();
|
|
68
|
+
socket.destroy();
|
|
69
|
+
reject(new Error('Socket connection timeout'));
|
|
70
|
+
}, 1000);
|
|
71
|
+
const cleanup = () => {
|
|
72
|
+
clearTimeout(timeout);
|
|
73
|
+
socket.off('connect', onConnect);
|
|
74
|
+
socket.off('error', onError);
|
|
75
|
+
};
|
|
76
|
+
socket.on('connect', onConnect);
|
|
77
|
+
socket.on('error', onError);
|
|
78
|
+
});
|
|
79
|
+
socket.on('close', () => {
|
|
80
|
+
resetSocketClient(socket);
|
|
81
|
+
});
|
|
82
|
+
socket.on('error', () => {
|
|
83
|
+
resetSocketClient(socket);
|
|
84
|
+
});
|
|
85
|
+
socketClient = socket;
|
|
86
|
+
return socket;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
resetSocketClient();
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
})();
|
|
93
|
+
}
|
|
94
|
+
return socketClientPromise;
|
|
95
|
+
}
|
|
96
|
+
async function notifySocketServer(filename, hasWorkflow, hasStep, hasSerde) {
|
|
97
|
+
if (!shouldUseSocketDiscovery()) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const socket = await getSocketClient();
|
|
101
|
+
if (!socket) {
|
|
102
|
+
throw new Error('Invariant: missing workflow socket connection');
|
|
103
|
+
}
|
|
104
|
+
const authToken = process.env.WORKFLOW_SOCKET_AUTH;
|
|
105
|
+
if (!authToken) {
|
|
106
|
+
throw new Error('Invariant: no socket auth token provided for workflow loader');
|
|
107
|
+
}
|
|
108
|
+
const message = {
|
|
109
|
+
type: 'file-discovered',
|
|
110
|
+
filePath: filename,
|
|
111
|
+
hasWorkflow,
|
|
112
|
+
hasStep,
|
|
113
|
+
hasSerde,
|
|
114
|
+
};
|
|
115
|
+
const serializedMessage = (0, socket_server_js_1.serializeMessage)(message, authToken);
|
|
116
|
+
try {
|
|
117
|
+
await writeSocketMessage(socket, serializedMessage);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
resetSocketClient(socket);
|
|
121
|
+
const reconnectedSocket = await getSocketClient();
|
|
122
|
+
if (!reconnectedSocket) {
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
await writeSocketMessage(reconnectedSocket, serializedMessage);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
10
128
|
async function getBuildersModule() {
|
|
11
129
|
if (cachedBuildersModule) {
|
|
12
130
|
return cachedBuildersModule;
|
|
@@ -48,6 +166,10 @@ async function getModuleSpecifier(filePath, projectRoot) {
|
|
|
48
166
|
const { resolveModuleSpecifier } = await getBuildersModule();
|
|
49
167
|
return resolveModuleSpecifier(filePath, projectRoot).moduleSpecifier;
|
|
50
168
|
}
|
|
169
|
+
async function resolveWorkflowAliasPath(filePath, workingDir) {
|
|
170
|
+
const { resolveWorkflowAliasRelativePath } = await getBuildersModule();
|
|
171
|
+
return resolveWorkflowAliasRelativePath(filePath, workingDir);
|
|
172
|
+
}
|
|
51
173
|
// This loader applies the "use workflow"/"use step"
|
|
52
174
|
// client transformation
|
|
53
175
|
async function workflowLoader(source, sourceMap) {
|
|
@@ -59,6 +181,9 @@ async function workflowLoader(source, sourceMap) {
|
|
|
59
181
|
}
|
|
60
182
|
// Detect workflow patterns in the source code
|
|
61
183
|
const patterns = await detectPatterns(normalizedSource);
|
|
184
|
+
// Always notify discovery tracking, even for `false/false`, so files that
|
|
185
|
+
// previously had workflow/step usage are removed from the tracked sets.
|
|
186
|
+
await notifySocketServer(filename, patterns.hasUseWorkflow, patterns.hasUseStep, patterns.hasSerde);
|
|
62
187
|
// For @workflow SDK packages, only transform files with actual directives,
|
|
63
188
|
// not files that just match serde patterns (which are internal SDK implementation files)
|
|
64
189
|
const isSdkFile = await checkSdkFile(filename);
|
|
@@ -96,10 +221,16 @@ async function workflowLoader(source, sourceMap) {
|
|
|
96
221
|
// Use relative() for files outside working directory
|
|
97
222
|
relativeFilename = (0, node_path_1.relative)(workingDir, filename).replace(/\\/g, '/');
|
|
98
223
|
if (relativeFilename.startsWith('../')) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
224
|
+
const aliasedRelativePath = await resolveWorkflowAliasPath(filename, workingDir);
|
|
225
|
+
if (aliasedRelativePath) {
|
|
226
|
+
relativeFilename = aliasedRelativePath;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
relativeFilename = relativeFilename
|
|
230
|
+
.split('/')
|
|
231
|
+
.filter((part) => part !== '..')
|
|
232
|
+
.join('/');
|
|
233
|
+
}
|
|
103
234
|
}
|
|
104
235
|
}
|
|
105
236
|
// Final safety check - ensure we never pass an absolute path to SWC
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";;AA2OA,iCA0IC;AArXD,uCAAgD;AAChD,yCAAqC;AACrC,oCAAsC;AACtC,yDAA0E;AAK1E,yFAAyF;AACzF,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAqC,CAAC;AAC3E,yGAAyG;AACzG,IAAI,oBAAoB,GAA+C,IAAI,CAAC;AAE5E,+DAA+D;AAC/D,IAAI,mBAAmB,GAAkC,IAAI,CAAC;AAC9D,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC,SAAS,iBAAiB,CAAC,YAAqB;IAC9C,IAAI,YAAY,IAAI,YAAY,IAAI,YAAY,KAAK,YAAY,EAAE,CAAC;QAClE,OAAO;IACT,CAAC;IAED,mBAAmB,GAAG,IAAI,CAAC;IAC3B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAAc,EACd,OAAe;IAEf,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAoB,EAAE,EAAE;YAC7C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB;IAC/B,OAAO,OAAO,CACZ,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CACrE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,YAAY,EAAE,SAAS,EAAE,CAAC;QAC5B,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,mBAAmB,GAAG,CAAC,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;gBACpD,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CACb,wDAAwD,CACzD,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC7C,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,MAAM,IAAI,KAAK,CACb,4CAA4C,UAAU,EAAE,CACzD,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,IAAA,kBAAO,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;gBAEpD,sBAAsB;gBACtB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC1C,MAAM,SAAS,GAAG,GAAG,EAAE;wBACrB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;wBACxB,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAC;oBACF,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;wBAC/B,OAAO,EAAE,CAAC;wBACV,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC,CAAC;oBACF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;wBAC9B,OAAO,EAAE,CAAC;wBACV,MAAM,CAAC,OAAO,EAAE,CAAC;wBACjB,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;oBACjD,CAAC,EAAE,IAAI,CAAC,CAAC;oBACT,MAAM,OAAO,GAAG,GAAG,EAAE;wBACnB,YAAY,CAAC,OAAO,CAAC,CAAC;wBACtB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;wBACjC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC/B,CAAC,CAAC;oBAEF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;oBAChC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBACtB,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBACtB,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBAEH,YAAY,GAAG,MAAM,CAAC;gBACtB,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,iBAAiB,EAAE,CAAC;gBACpB,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,QAAgB,EAChB,WAAoB,EACpB,OAAgB,EAChB,QAAiB;IAEjB,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACnD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAkB;QAC7B,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,QAAQ;QAClB,WAAW;QACX,OAAO;QACP,QAAQ;KACT,CAAC;IACF,MAAM,iBAAiB,GAAG,IAAA,mCAAgB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE/D,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,iBAAiB,GAAG,MAAM,eAAe,EAAE,CAAC;QAClD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,kBAAkB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB;IAG9B,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,4DAA4D;IAC5D,4IAA4I;IAC5I,oBAAoB,GAAG,CAAC,MAAM,IAAI,CAChC,8BAA8B,CAC/B,CAAwC,CAAC;IAC1C,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,UAAkB;IAElB,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,KAAK,IAA+B,EAAE;QACrD,MAAM,EAAE,+BAA+B,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACtE,OAAO,+BAA+B,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC,CAAC,EAAE,CAAC;IAEL,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAc;IAC1C,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC7D,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC9D,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACxD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,QAAgB,EAChB,QAA8B;IAE9B,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC1D,OAAO,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,QAAgB,EAChB,WAAmB;IAEnB,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC7D,OAAO,sBAAsB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,eAAe,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,QAAgB,EAChB,UAAkB;IAElB,MAAM,EAAE,gCAAgC,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACvE,OAAO,gCAAgC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAChE,CAAC;AAED,oDAAoD;AACpD,wBAAwB;AACT,KAAK,UAAU,cAAc,CAI1C,MAAuB,EACvB,SAAc;IAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;IACnC,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAE3C,kEAAkE;IAClE,IAAI,MAAM,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,gBAAgB,CAAC,CAAC;IACxD,0EAA0E;IAC1E,wEAAwE;IACxE,MAAM,kBAAkB,CACtB,QAAQ,EACR,QAAQ,CAAC,cAAc,EACvB,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,QAAQ,CAClB,CAAC;IAEF,2EAA2E;IAC3E,yFAAyF;IACzF,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,SAAS,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QACxC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,gEAAgE;IAChE,IAAI,CAAC,CAAC,MAAM,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,YAAY,GAChB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE5B,6CAA6C;IAC7C,8EAA8E;IAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,oBAAoB,GAAG,UAAU;SACpC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtB,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAExD,yFAAyF;IACzF,MAAM,OAAO,GAAG,oBAAoB,CAAC,WAAW,EAAE,CAAC;IACnD,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;IAEnD,IAAI,gBAAwB,CAAC;IAC7B,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;QACxC,qEAAqE;QACrE,gBAAgB,GAAG,kBAAkB,CAAC,SAAS,CAC7C,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAChC,CAAC;IACJ,CAAC;SAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QACjC,mDAAmD;QACnD,gBAAgB,GAAG,GAAG,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,qDAAqD;QACrD,gBAAgB,GAAG,IAAA,oBAAQ,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEtE,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,mBAAmB,GAAG,MAAM,wBAAwB,CACxD,QAAQ,EACR,UAAU,CACX,CAAC;YACF,IAAI,mBAAmB,EAAE,CAAC;gBACxB,gBAAgB,GAAG,mBAAmB,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,gBAAgB,GAAG,gBAAgB;qBAChC,KAAK,CAAC,GAAG,CAAC;qBACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;qBAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvE,mEAAmE;QACnE,gBAAgB,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,YAAY,CAAC;IACzE,CAAC;IAED,qEAAqE;IACrE,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAE/D,6EAA6E;IAC7E,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEvE,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,IAAA,gBAAS,EAAC,gBAAgB,EAAE;QAC/C,QAAQ,EAAE,gBAAgB;QAC1B,GAAG,EAAE;YACH,MAAM,EAAE;gBACN,GAAG,CAAC,YAAY;oBACd,CAAC,CAAC;wBACE,MAAM,EAAE,YAAY;wBACpB,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAC9B,UAAU,EAAE,gBAAgB,CAAC,UAAU;qBACxC;oBACH,CAAC,CAAC;wBACE,MAAM,EAAE,YAAY;wBACpB,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAC9B,UAAU,EAAE,gBAAgB,CAAC,UAAU;qBACxC,CAAC;aACP;YACD,MAAM,EAAE,QAAQ;YAChB,YAAY,EAAE;gBACZ,OAAO,EAAE;oBACP;wBACE,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC;wBACvC,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE;qBACpC;iBACF;aACF;YACD,SAAS,EAAE;gBACT,KAAK,EAAE;oBACL,OAAO,EAAE,UAAU;iBACpB;gBACD,eAAe,EAAE,gBAAgB,CAAC,eAAe;gBACjD,iBAAiB,EAAE,gBAAgB,CAAC,iBAAiB;aACtD;SACF;QACD,MAAM,EAAE,KAAK;QACb,cAAc,EAAE,SAAS;QACzB,UAAU,EAAE,IAAI;QAChB,oBAAoB,EAAE,IAAI;KAC3B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message types that can be sent between loader and builder
|
|
3
|
+
*/
|
|
4
|
+
export type SocketMessage = {
|
|
5
|
+
type: 'file-discovered';
|
|
6
|
+
filePath: string;
|
|
7
|
+
hasWorkflow: boolean;
|
|
8
|
+
hasStep: boolean;
|
|
9
|
+
hasSerde: boolean;
|
|
10
|
+
} | {
|
|
11
|
+
type: 'trigger-build';
|
|
12
|
+
} | {
|
|
13
|
+
type: 'build-complete';
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for the socket server
|
|
17
|
+
*/
|
|
18
|
+
export interface SocketServerConfig {
|
|
19
|
+
isDevServer: boolean;
|
|
20
|
+
onFileDiscovered: (filePath: string, hasWorkflow: boolean, hasStep: boolean, hasSerde: boolean) => void;
|
|
21
|
+
onTriggerBuild: () => void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Interface for the socket IO instance returned by createSocketServer
|
|
25
|
+
*/
|
|
26
|
+
export interface SocketIO {
|
|
27
|
+
emit(event: 'build-complete'): void;
|
|
28
|
+
getAuthToken(): string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Serialize a message with authentication preamble
|
|
32
|
+
*/
|
|
33
|
+
export declare function serializeMessage(message: SocketMessage, authToken: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Parse and authenticate a message from the socket
|
|
36
|
+
* Returns the parsed message if valid, null otherwise
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseMessage(line: string, authToken: string): SocketMessage | null;
|
|
39
|
+
/**
|
|
40
|
+
* Create a TCP socket server for loader<->builder communication.
|
|
41
|
+
* Returns a SocketIO interface for broadcasting messages and the auth token.
|
|
42
|
+
*
|
|
43
|
+
* SECURITY: Server listens on 127.0.0.1 (localhost only) and uses
|
|
44
|
+
* message authentication to prevent processing of unauthorized messages.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createSocketServer(config: SocketServerConfig): Promise<SocketIO>;
|
|
47
|
+
//# sourceMappingURL=socket-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-server.d.ts","sourceRoot":"","sources":["../src/socket-server.ts"],"names":[],"mappings":"AAiBA;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,CAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,KACd,IAAI,CAAC;IACV,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,YAAY,IAAI,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI,CAoCtB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,QAAQ,CAAC,CA4EnB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serializeMessage = serializeMessage;
|
|
4
|
+
exports.parseMessage = parseMessage;
|
|
5
|
+
exports.createSocketServer = createSocketServer;
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
const node_net_1 = require("node:net");
|
|
8
|
+
/**
|
|
9
|
+
* Magic preamble that must prefix all messages to authenticate them as workflow messages.
|
|
10
|
+
* This prevents accidental processing of messages from port scanners or other local processes.
|
|
11
|
+
*/
|
|
12
|
+
const MESSAGE_PREAMBLE = 'WF:';
|
|
13
|
+
/**
|
|
14
|
+
* Generate a random authentication token for this server session.
|
|
15
|
+
* Clients must include this token in all messages.
|
|
16
|
+
*/
|
|
17
|
+
function generateAuthToken() {
|
|
18
|
+
return (0, node_crypto_1.randomBytes)(16).toString('hex');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Serialize a message with authentication preamble
|
|
22
|
+
*/
|
|
23
|
+
function serializeMessage(message, authToken) {
|
|
24
|
+
return `${MESSAGE_PREAMBLE}${authToken}:${JSON.stringify(message)}\n`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse and authenticate a message from the socket
|
|
28
|
+
* Returns the parsed message if valid, null otherwise
|
|
29
|
+
*/
|
|
30
|
+
function parseMessage(line, authToken) {
|
|
31
|
+
const trimmed = line.trim();
|
|
32
|
+
if (!trimmed) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
// Check for preamble
|
|
36
|
+
if (!trimmed.startsWith(MESSAGE_PREAMBLE)) {
|
|
37
|
+
console.warn('Received message without valid preamble, ignoring');
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
// Extract auth token and payload
|
|
41
|
+
const withoutPreamble = trimmed.slice(MESSAGE_PREAMBLE.length);
|
|
42
|
+
const colonIndex = withoutPreamble.indexOf(':');
|
|
43
|
+
if (colonIndex === -1) {
|
|
44
|
+
console.warn('Received message without auth token separator, ignoring');
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const messageToken = withoutPreamble.slice(0, colonIndex);
|
|
48
|
+
const payload = withoutPreamble.slice(colonIndex + 1);
|
|
49
|
+
// Verify auth token
|
|
50
|
+
if (messageToken !== authToken) {
|
|
51
|
+
console.warn('Received message with invalid auth token, ignoring');
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
// Parse JSON payload
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse(payload);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error('Failed to parse socket message JSON:', error);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create a TCP socket server for loader<->builder communication.
|
|
65
|
+
* Returns a SocketIO interface for broadcasting messages and the auth token.
|
|
66
|
+
*
|
|
67
|
+
* SECURITY: Server listens on 127.0.0.1 (localhost only) and uses
|
|
68
|
+
* message authentication to prevent processing of unauthorized messages.
|
|
69
|
+
*/
|
|
70
|
+
async function createSocketServer(config) {
|
|
71
|
+
const authToken = generateAuthToken();
|
|
72
|
+
const clients = new Set();
|
|
73
|
+
let buildTriggered = false;
|
|
74
|
+
const server = (0, node_net_1.createServer)((socket) => {
|
|
75
|
+
socket.setNoDelay(true);
|
|
76
|
+
clients.add(socket);
|
|
77
|
+
// Send build-complete if build already finished (production mode)
|
|
78
|
+
if (buildTriggered && !config.isDevServer) {
|
|
79
|
+
socket.write(serializeMessage({ type: 'build-complete' }, authToken));
|
|
80
|
+
}
|
|
81
|
+
let buffer = '';
|
|
82
|
+
socket.on('data', (data) => {
|
|
83
|
+
buffer += data.toString();
|
|
84
|
+
// Process complete messages (newline-delimited)
|
|
85
|
+
let newlineIndex = buffer.indexOf('\n');
|
|
86
|
+
while (newlineIndex !== -1) {
|
|
87
|
+
const line = buffer.slice(0, newlineIndex);
|
|
88
|
+
buffer = buffer.slice(newlineIndex + 1);
|
|
89
|
+
newlineIndex = buffer.indexOf('\n');
|
|
90
|
+
const message = parseMessage(line, authToken);
|
|
91
|
+
if (!message) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (message.type === 'file-discovered') {
|
|
95
|
+
config.onFileDiscovered(message.filePath, message.hasWorkflow, message.hasStep, message.hasSerde);
|
|
96
|
+
}
|
|
97
|
+
else if (message.type === 'trigger-build') {
|
|
98
|
+
config.onTriggerBuild();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
socket.on('end', () => {
|
|
103
|
+
clients.delete(socket);
|
|
104
|
+
});
|
|
105
|
+
socket.on('error', (err) => {
|
|
106
|
+
console.error('Socket error:', err);
|
|
107
|
+
clients.delete(socket);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
// Listen on random available port (localhost only)
|
|
111
|
+
await new Promise((resolve) => {
|
|
112
|
+
server.listen(0, '127.0.0.1', () => {
|
|
113
|
+
const address = server.address();
|
|
114
|
+
if (address && typeof address === 'object') {
|
|
115
|
+
process.env.WORKFLOW_SOCKET_PORT = String(address.port);
|
|
116
|
+
process.env.WORKFLOW_SOCKET_AUTH = authToken;
|
|
117
|
+
}
|
|
118
|
+
resolve();
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
return {
|
|
122
|
+
emit: (_event) => {
|
|
123
|
+
buildTriggered = true;
|
|
124
|
+
const message = serializeMessage({ type: 'build-complete' }, authToken);
|
|
125
|
+
for (const client of clients) {
|
|
126
|
+
client.write(message);
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
getAuthToken: () => authToken,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=socket-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-server.js","sourceRoot":"","sources":["../src/socket-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/next",
|
|
3
|
-
"version": "4.0.1-beta.
|
|
3
|
+
"version": "4.0.1-beta.51",
|
|
4
4
|
"description": "Next.js integration for Workflow DevKit",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
"@swc/core": "1.15.3",
|
|
30
30
|
"semver": "7.7.3",
|
|
31
31
|
"watchpack": "2.4.4",
|
|
32
|
-
"@workflow/builders": "4.0.1-beta.
|
|
33
|
-
"@workflow/core": "4.1.0-beta.
|
|
34
|
-
"@workflow/swc-plugin": "4.1.0-beta.
|
|
32
|
+
"@workflow/builders": "4.0.1-beta.46",
|
|
33
|
+
"@workflow/core": "4.1.0-beta.55",
|
|
34
|
+
"@workflow/swc-plugin": "4.1.0-beta.18"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/node": "22.19.0",
|