@tapicker/bridge 1.0.0 → 1.1.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.
Files changed (49) hide show
  1. package/README.md +15 -15
  2. package/dist/bridge/bridge-service.d.ts +1 -1
  3. package/dist/bridge/bridge-service.js +7 -7
  4. package/dist/bridge/control.js +1 -1
  5. package/dist/bridge/export-store.d.ts +35 -0
  6. package/dist/bridge/export-store.js +195 -0
  7. package/dist/bridge/extension-session.d.ts +9 -2
  8. package/dist/bridge/extension-session.js +56 -8
  9. package/dist/cli.js +563 -148
  10. package/dist/commands.d.ts +8 -0
  11. package/dist/commands.js +276 -40
  12. package/dist/constants.d.ts +2 -2
  13. package/dist/constants.js +4 -2
  14. package/dist/http-client.d.ts +24 -0
  15. package/dist/http-client.js +101 -0
  16. package/dist/index.d.ts +4 -4
  17. package/dist/index.js +2 -2
  18. package/dist/mcp.d.ts +4 -3
  19. package/dist/mcp.js +221 -134
  20. package/dist/protocol/schema.d.ts +503 -34
  21. package/dist/protocol/schema.js +396 -15
  22. package/dist/server.d.ts +7 -4
  23. package/dist/server.js +70 -26
  24. package/dist/update-notifier-worker.d.ts +2 -0
  25. package/dist/update-notifier-worker.js +3 -0
  26. package/dist/update-notifier.d.ts +9 -0
  27. package/dist/update-notifier.js +178 -0
  28. package/dist/workflow-watch.d.ts +8 -7
  29. package/dist/workflow-watch.js +39 -29
  30. package/package.json +16 -6
  31. package/docs/cli.md +0 -112
  32. package/docs/http-api.md +0 -149
  33. package/docs/mcp.md +0 -90
  34. package/docs/operations.md +0 -85
  35. package/docs/workflow-watch.md +0 -86
  36. package/src/bridge/bridge-service.ts +0 -291
  37. package/src/bridge/control.ts +0 -281
  38. package/src/bridge/daemon.ts +0 -102
  39. package/src/bridge/extension-session.ts +0 -286
  40. package/src/bridge/pairing-state.ts +0 -92
  41. package/src/cli.ts +0 -1019
  42. package/src/commands.ts +0 -158
  43. package/src/constants.ts +0 -10
  44. package/src/errors.ts +0 -72
  45. package/src/index.ts +0 -35
  46. package/src/mcp.ts +0 -386
  47. package/src/protocol/schema.ts +0 -202
  48. package/src/server.ts +0 -623
  49. package/src/workflow-watch.ts +0 -364
@@ -30,12 +30,20 @@ export const SafeResultSchema = z.union([
30
30
  })
31
31
  .strict(),
32
32
  ]);
33
+ const UserSummarySchema = z
34
+ .object({
35
+ id: z.string().min(1),
36
+ username: z.string().min(1),
37
+ plan: z.enum(['Free', 'Plus', 'Pro']),
38
+ })
39
+ .strip();
33
40
  export const ExtensionHelloInputSchema = z
34
41
  .object({
35
42
  clientId: z.uuid(),
36
43
  clientName: z.string().trim().min(1).max(80),
37
44
  credential: z.string().min(1).optional(),
38
- extensionVersion: z.string().min(1).optional(),
45
+ clientVersion: z.string().min(1).optional(),
46
+ user: UserSummarySchema.optional(),
39
47
  capabilities: z.array(z.string().min(1)).default([]),
40
48
  })
41
49
  .strict();
@@ -62,43 +70,415 @@ export const BridgePairDataSchema = z
62
70
  credential: z.string().min(1),
63
71
  })
64
72
  .strict();
65
- export const TabTargetSchema = z.discriminatedUnion('mode', [
66
- z.object({ mode: z.literal('active') }).strict(),
67
- z.object({ mode: z.literal('new') }).strict(),
68
- z.object({ mode: z.literal('id'), tabId: z.number().int().positive() }).strict(),
69
- ]);
73
+ const WorkflowPathIdSchema = z
74
+ .string()
75
+ .trim()
76
+ .min(1)
77
+ .refine((id) => id !== '.' && id !== '..' && !/[/\\%?#\r\n\t]/.test(id), 'workflowId must be a single URL path segment')
78
+ .describe('Workflow ID returned by workflow_list.');
70
79
  export const WorkflowStartInputSchema = z
71
80
  .object({
72
- workflowId: z.string().min(1),
73
- args: z.record(z.string(), z.unknown()).default({}),
74
- tab: TabTargetSchema.default({ mode: 'active' }),
81
+ workflowId: WorkflowPathIdSchema,
82
+ args: z
83
+ .object({
84
+ isClearData: z
85
+ .boolean()
86
+ .optional()
87
+ .describe('Set true to clear existing data in tables used by this Workflow and its enabled child Workflows.'),
88
+ })
89
+ .catchall(z.unknown())
90
+ .default({}),
75
91
  })
76
92
  .strict();
77
93
  export const WorkflowControlInputSchema = z
78
94
  .object({
95
+ workflowId: z.string().trim().min(1),
96
+ })
97
+ .strict();
98
+ export const WorkflowGuideInputSchema = z.object({ topic: z.string().trim().min(1).default('overview') }).strict();
99
+ export const WorkflowSchemaInputSchema = z
100
+ .object({
101
+ nodeTypes: z
102
+ .array(z.string().min(1))
103
+ .min(1)
104
+ .optional()
105
+ .describe('Node types to use, such as NodeLoop and NodeExtractData. Omit for all supported business nodes.'),
106
+ })
107
+ .strict();
108
+ export const WorkflowValidateInputSchema = z
109
+ .object({
110
+ fragment: z
111
+ .unknown()
112
+ .nonoptional()
113
+ .describe('Parsed version 1 tapicker/nodes or tapicker/workflow document. Use workflow.schema for its shape.'),
114
+ })
115
+ .strict();
116
+ const CommandResultMetadata = { clientId: z.uuid() };
117
+ export const WorkflowListInputSchema = z
118
+ .object({
119
+ scope: z.enum(['own', 'shared', 'pinned']).default('own'),
120
+ name: z.string().optional().describe('Substring filter on Workflow fullname.'),
121
+ host: z
122
+ .string()
123
+ .trim()
124
+ .min(1)
125
+ .max(128)
126
+ .optional()
127
+ .describe('Exact Workflow host filter, such as example.com or localhost:3000, without a scheme or path. Does not include * Workflows unless host is *.'),
128
+ page: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER).default(1),
129
+ pageSize: z.number().int().min(1).max(100).default(20),
130
+ })
131
+ .strict();
132
+ export const WorkflowGetInputSchema = z.object({ workflowId: WorkflowPathIdSchema }).strict();
133
+ export const WorkflowCreateInputSchema = z
134
+ .object({
135
+ name: z.string().trim().min(1).max(64),
136
+ intro: z.string().default(''),
137
+ href: z.string().default(''),
138
+ nodes: z.array(z.unknown()).min(1).describe('Workflow node tree to validate and save.'),
139
+ })
140
+ .strict();
141
+ export const WorkflowUpdateInputSchema = z
142
+ .object({
143
+ workflowId: WorkflowGetInputSchema.shape.workflowId,
144
+ revision: z
145
+ .number()
146
+ .int()
147
+ .positive()
148
+ .max(Number.MAX_SAFE_INTEGER)
149
+ .describe('Revision last read from workflow.get; reconcile conflicts before retrying.'),
150
+ name: z.string().trim().min(1).max(64).optional(),
151
+ intro: z.string().optional(),
152
+ href: z.string().optional(),
153
+ nodes: z.array(z.unknown()).min(1).optional().describe('Complete replacement node tree.'),
154
+ })
155
+ .strict()
156
+ .refine((input) => ['name', 'intro', 'href', 'nodes'].some((key) => input[key] !== undefined), {
157
+ message: 'Provide at least one of name, intro, href or nodes',
158
+ });
159
+ const WorkflowSummarySchema = z
160
+ .object({
161
+ id: z.string().min(1),
162
+ fullname: z.string(),
163
+ intro: z.string(),
164
+ host: z.string(),
165
+ href: z.string(),
166
+ visibility: z.enum(['private', 'shared', 'public']),
167
+ permission: z.enum(['use', 'view', 'edit', 'manage']),
168
+ version: z.string().nullable(),
169
+ revision: z.number().int().positive().optional(),
170
+ deletedAt: z.string().nullable(),
171
+ })
172
+ .strip();
173
+ export const WorkflowListResultSchema = z
174
+ .object({
175
+ ...CommandResultMetadata,
176
+ scope: z.enum(['own', 'shared', 'pinned']),
177
+ page: z.number().int().positive(),
178
+ pageSize: z.number().int().min(1).max(100),
179
+ workflows: z.array(WorkflowSummarySchema).max(100),
180
+ })
181
+ .strip();
182
+ const WorkflowArgumentSchema = z
183
+ .object({
184
+ name: z.string().min(1).describe('Exact key to use in workflow.start args.'),
185
+ type: z.string().min(1),
186
+ label: z.string().optional(),
187
+ placeholder: z.string().optional(),
188
+ options: z.string().optional(),
189
+ required: z.boolean().optional(),
190
+ defaultValue: z.union([z.string(), z.number(), z.boolean()]).optional(),
191
+ })
192
+ .strip();
193
+ export const WorkflowGetResultSchema = z
194
+ .object({
195
+ ...CommandResultMetadata,
196
+ workflow: WorkflowSummarySchema.extend({
197
+ name: z.string(),
198
+ args: z.array(WorkflowArgumentSchema).describe('Available startup arguments for the saved Workflow.'),
199
+ nodes: z.array(z.record(z.string(), z.unknown())).describe('Saved nodes. Empty with use-only permission.'),
200
+ icon: z.string().nullable(),
201
+ }),
202
+ })
203
+ .strip();
204
+ export const WorkflowCreateResultSchema = z
205
+ .object({
206
+ ...CommandResultMetadata,
207
+ workflowId: z.string().min(1),
208
+ workflowName: z.string().min(1),
209
+ revision: z.number().int().positive().optional(),
210
+ })
211
+ .strip();
212
+ export const WorkflowUpdateResultSchema = z
213
+ .object({
214
+ ...CommandResultMetadata,
79
215
  workflowId: z.string().min(1),
216
+ revision: z.number().int().positive(),
217
+ })
218
+ .strip();
219
+ export const WorkflowGuideResultSchema = z
220
+ .object({
221
+ ...CommandResultMetadata,
222
+ topic: z.string().min(1),
223
+ content: z.string(),
224
+ references: z.array(z.object({ href: z.string().min(1), topic: z.string().min(1), anchor: z.string().optional() }).strip()),
225
+ })
226
+ .strip();
227
+ export const WorkflowSchemaResultSchema = z
228
+ .object({
229
+ ...CommandResultMetadata,
230
+ schema: z
231
+ .record(z.string(), z.unknown())
232
+ .describe('Draft 2020-12 JSON Schema for version 1 Workflow documents, including referenced definitions. Defaults are not inserted.'),
233
+ })
234
+ .strip();
235
+ export const WorkflowValidateResultSchema = z.discriminatedUnion('isValid', [
236
+ z
237
+ .object({
238
+ ...CommandResultMetadata,
239
+ isValid: z.literal(true).describe('Whether the document passed static configuration validation.'),
240
+ nodes: z
241
+ .array(z.looseObject({ id: z.string().min(1), type: z.string().min(1), config: z.record(z.string(), z.unknown()) }))
242
+ .min(1)
243
+ .optional()
244
+ .describe('Normalized node copies, returned when the input supplies nodes.'),
245
+ })
246
+ .strip(),
247
+ z
248
+ .object({
249
+ ...CommandResultMetadata,
250
+ isValid: z.literal(false).describe('Whether the document passed static configuration validation.'),
251
+ issues: z
252
+ .array(z
253
+ .object({
254
+ nodeId: z.string().optional(),
255
+ path: z.string(),
256
+ code: z.string().min(1),
257
+ message: z.string(),
258
+ })
259
+ .strip())
260
+ .min(1)
261
+ .describe('Configuration issues to fix using code, path, and optional nodeId before validating again.'),
262
+ })
263
+ .strip(),
264
+ ]);
265
+ export const WorkflowLogLevelSchema = z.enum(['trace', 'debug', 'info', 'warn', 'error']);
266
+ const LogIdSchema = z.number().int().positive().max(Number.MAX_SAFE_INTEGER);
267
+ export const WorkflowLogsInputSchema = z
268
+ .object({
269
+ workflowId: z.string().trim().min(1),
270
+ levels: z.array(WorkflowLogLevelSchema).min(1).optional(),
271
+ limit: z.number().int().min(1).max(500).default(100),
272
+ before: LogIdSchema.optional(),
273
+ after: LogIdSchema.optional(),
274
+ runAt: z.iso.datetime().optional(),
275
+ })
276
+ .strict()
277
+ .refine((input) => input.before === undefined || input.after === undefined, {
278
+ message: 'before and after are mutually exclusive',
279
+ });
280
+ export const WorkflowLogInputSchema = z
281
+ .object({
282
+ workflowId: z.string().trim().min(1),
283
+ logId: LogIdSchema,
284
+ runAt: z.iso.datetime().optional(),
80
285
  })
81
286
  .strict();
287
+ export const WorkflowLogDataSchema = z
288
+ .object({
289
+ id: LogIdSchema,
290
+ workflowId: z.string().min(1),
291
+ timestamp: z.iso.datetime(),
292
+ level: WorkflowLogLevelSchema,
293
+ nodeId: z.string().optional(),
294
+ nodeType: z.string().optional(),
295
+ message: z.string(),
296
+ detailsText: z.string().optional(),
297
+ detailsTruncated: z.boolean(),
298
+ })
299
+ .strip();
300
+ export const WorkflowLogsResultSchema = z
301
+ .object({
302
+ ...CommandResultMetadata,
303
+ workflowId: z.string().min(1),
304
+ runAt: z.iso.datetime().nullable(),
305
+ logs: z.array(WorkflowLogDataSchema).max(500),
306
+ hasMore: z.boolean(),
307
+ })
308
+ .strip();
309
+ export const WorkflowLogResultSchema = z
310
+ .object({
311
+ ...CommandResultMetadata,
312
+ workflowId: z.string().min(1),
313
+ runAt: z.iso.datetime().nullable(),
314
+ log: WorkflowLogDataSchema.extend({ detailsTruncated: z.literal(false) }),
315
+ })
316
+ .strip();
317
+ export const DataListInputSchema = z
318
+ .object({
319
+ tableName: z.string().trim().min(1).optional().describe('Case-insensitive substring of the saved table name.'),
320
+ workflowId: z.string().trim().min(1).optional().describe('Exact ID of the Workflow that owns the table.'),
321
+ page: z.number().int().positive().default(1),
322
+ pageSize: z.number().int().min(1).max(100).default(20),
323
+ })
324
+ .strict()
325
+ .refine(({ page, pageSize }) => Number.isSafeInteger((page - 1) * pageSize), {
326
+ message: 'Page offset is too large',
327
+ });
328
+ export const DataListResultSchema = z
329
+ .object({
330
+ ...CommandResultMetadata,
331
+ page: z.number().int().positive(),
332
+ pageSize: z.number().int().min(1).max(100),
333
+ hasMore: z.boolean(),
334
+ tables: z
335
+ .array(z
336
+ .object({
337
+ tableId: z.string().min(1),
338
+ tableName: z.string(),
339
+ columnNames: z.array(z.string()).describe('Column names in saved table order.'),
340
+ rowCount: z.number().int().nonnegative(),
341
+ workflowId: z.string().min(1).optional(),
342
+ createdAt: z.iso.datetime(),
343
+ updatedAt: z.iso.datetime(),
344
+ })
345
+ .strip())
346
+ .max(100),
347
+ })
348
+ .strip();
82
349
  export const DataInputSchema = z
83
350
  .object({
84
351
  tableId: z.string().trim().min(1).max(128),
85
352
  })
86
353
  .strict();
87
- export const WorkflowLifecycleStateSchema = z.enum(['running', 'paused', 'stopping', 'completed', 'stopped', 'failed']);
354
+ const DataPreviewSampleSchema = z.enum(['oldest', 'latest']);
355
+ export const DataPreviewInputSchema = DataInputSchema.extend({
356
+ sample: DataPreviewSampleSchema.default('oldest').describe('Select the oldest or latest inserted rows.'),
357
+ });
358
+ export const DEFAULT_DATA_PAGE_SIZE = 50;
359
+ export const DataGetInputSchema = DataInputSchema.extend({
360
+ all: z.boolean().optional().describe('Return the entire table. Omit page and pageSize when true.'),
361
+ page: z.number().int().positive().optional().describe('Page number, starting at 1. Defaults to 1.'),
362
+ pageSize: z.number().int().min(1).max(500).optional().describe('Rows per page. Defaults to 50.'),
363
+ }).refine(({ all, page, pageSize }) => all
364
+ ? page === undefined && pageSize === undefined
365
+ : Number.isSafeInteger(((page ?? 1) - 1) * (pageSize ?? DEFAULT_DATA_PAGE_SIZE)), { message: 'Use all without pagination, or provide a valid page and pageSize' });
366
+ export const DataDeleteResultSchema = z
367
+ .object({ ...CommandResultMetadata, tableId: z.string().min(1), tableName: z.string() })
368
+ .strip();
369
+ const DataRowsResultSchema = DataDeleteResultSchema.extend({
370
+ columnNames: z.array(z.string()).describe('Registered column names in table order.'),
371
+ rowCount: z.number().int().nonnegative().describe('Total row count recorded in table metadata.'),
372
+ rows: z.array(z.record(z.string(), z.unknown())),
373
+ });
374
+ export const DataPreviewResultSchema = DataRowsResultSchema.extend({
375
+ rows: DataRowsResultSchema.shape.rows.max(10),
376
+ sample: DataPreviewSampleSchema,
377
+ isTruncated: z.boolean().describe('True if the response size limit omitted one or more sample rows.'),
378
+ });
379
+ export const DataGetResultSchema = z.union([
380
+ // 全量结果忽略新增字段,但出现分页字段时必须按分页结果校验。
381
+ z
382
+ .looseObject({ page: z.never().optional(), pageSize: z.never().optional(), hasMore: z.never().optional() })
383
+ .pipe(DataRowsResultSchema),
384
+ DataRowsResultSchema.extend({
385
+ page: z.number().int().positive(),
386
+ pageSize: z.number().int().min(1).max(500),
387
+ hasMore: z.boolean(),
388
+ }),
389
+ ]);
390
+ const DataExportFormatSchema = z.enum(['xlsx', 'xls', 'csv', 'json', 'xml', 'txt']);
391
+ export const DataExportInputSchema = DataInputSchema.extend({
392
+ format: DataExportFormatSchema.default('csv'),
393
+ });
394
+ export const DataExportReceiptSchema = DataDeleteResultSchema.extend({
395
+ format: DataExportFormatSchema,
396
+ filename: z.string().min(1),
397
+ rowCount: z.number().int().nonnegative(),
398
+ byteSize: z.number().int().nonnegative(),
399
+ });
400
+ export const DataExportResultSchema = DataExportReceiptSchema.strict().extend({
401
+ fileSize: z.string().min(1),
402
+ downloadPath: z.string().regex(/^\/v1\/exports\/[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/),
403
+ expiresAt: z.iso.datetime(),
404
+ });
405
+ export const UserMeInputSchema = z.object({}).strict();
406
+ export const UserMeResultSchema = z
407
+ .object({
408
+ ...CommandResultMetadata,
409
+ user: UserSummarySchema.describe('The current Tapicker account.'),
410
+ })
411
+ .strip();
412
+ export const ExtensionListResultSchema = z
413
+ .object({
414
+ extensions: z.array(z
415
+ .object({
416
+ ready: z.boolean(),
417
+ pairingRequired: z.boolean().optional(),
418
+ clientId: z.uuid().optional(),
419
+ clientName: z.string().optional(),
420
+ clientVersion: z.string().optional(),
421
+ user: UserSummarySchema.optional().describe('The Tapicker account snapshot for a ready Extension.'),
422
+ capabilities: z.array(z.string()),
423
+ })
424
+ .strict()),
425
+ })
426
+ .strict();
427
+ export const WorkflowControlResultSchema = WorkflowControlInputSchema.extend(CommandResultMetadata).strip();
428
+ export const WorkflowProcessStatusSchema = z.enum(['running', 'paused', 'stopping', 'stopped']);
429
+ export const WorkflowProcessReasonSchema = z.enum([
430
+ 'failed',
431
+ 'completed',
432
+ 'interrupted',
433
+ 'workflow_stopped',
434
+ 'user_stopped',
435
+ ]);
88
436
  export const WorkflowStatusDataSchema = z
89
437
  .object({
90
438
  workflowId: z.string().min(1),
91
- state: WorkflowLifecycleStateSchema,
439
+ status: WorkflowProcessStatusSchema,
440
+ reason: WorkflowProcessReasonSchema.optional(),
441
+ runAt: z.iso.datetime().optional(),
442
+ stopAt: z.iso.datetime().optional(),
92
443
  updatedAt: z.iso.datetime(),
93
444
  })
94
- .strict();
445
+ .strip();
95
446
  export const WorkflowStatusEventSchema = z
96
447
  .object({
97
448
  clientId: z.uuid(),
98
449
  ...WorkflowStatusDataSchema.shape,
99
450
  })
100
451
  .strict();
101
- export const WorkflowWatchRequestSchema = z
452
+ export const WorkflowStatusInputSchema = WorkflowControlInputSchema.extend({
453
+ runAt: z.iso.datetime().optional().describe('Require the runAt from a previous status snapshot to match.'),
454
+ includeDataSummary: z.boolean().optional().describe('Include the saved data changes when the run has stopped.'),
455
+ });
456
+ export const WorkflowStatusResultSchema = z
457
+ .object({
458
+ clientId: WorkflowStatusEventSchema.shape.clientId,
459
+ workflowId: WorkflowStatusDataSchema.shape.workflowId,
460
+ workflowName: z.string().min(1).optional(),
461
+ status: WorkflowStatusDataSchema.shape.status,
462
+ reason: WorkflowStatusDataSchema.shape.reason,
463
+ runAt: WorkflowStatusDataSchema.shape.runAt,
464
+ stopAt: WorkflowStatusDataSchema.shape.stopAt,
465
+ createdAt: z.iso.datetime(),
466
+ updatedAt: WorkflowStatusDataSchema.shape.updatedAt,
467
+ dataSummary: z
468
+ .array(z
469
+ .object({
470
+ tableId: z.string().min(1),
471
+ tableName: z.string(),
472
+ insertedCount: z.number().int().nonnegative(),
473
+ updatedCount: z.number().int().nonnegative(),
474
+ deletedCount: z.number().int().nonnegative(),
475
+ })
476
+ .strip())
477
+ .optional(),
478
+ })
479
+ .strip();
480
+ export const WorkflowStatusWatchResultSchema = WorkflowStatusEventSchema.extend({ isTimedOut: z.boolean() });
481
+ export const WorkflowStatusWatchRequestSchema = z
102
482
  .object({
103
483
  clientId: z.uuid().optional(),
104
484
  input: WorkflowControlInputSchema,
@@ -109,9 +489,10 @@ export const WorkflowStartResultSchema = z
109
489
  clientId: z.uuid(),
110
490
  workflowId: z.string().min(1),
111
491
  workflowName: z.string().min(1),
112
- state: z.enum(['accepted', 'starting', 'running']).optional(),
492
+ runAt: z.iso.datetime(),
493
+ state: z.literal('accepted'),
113
494
  })
114
- .strict();
495
+ .strip();
115
496
  export function createEnvelope(type, data, options = {}) {
116
497
  const envelope = {
117
498
  id: options.id ?? randomUUID(),
package/dist/server.d.ts CHANGED
@@ -20,6 +20,8 @@ export declare class BridgeServer {
20
20
  private readonly requestedPort?;
21
21
  private readonly portMax;
22
22
  private readonly token?;
23
+ private readonly exports;
24
+ private exportCleanupTimer?;
23
25
  private readonly corsOrigins;
24
26
  private readonly tls?;
25
27
  private readonly mcpHandler;
@@ -37,7 +39,7 @@ export declare class BridgeServer {
37
39
  port: number;
38
40
  httpUrl: string;
39
41
  wsUrl: string;
40
- workflowWatchWsUrl: string;
42
+ workflowStatusWatchWsUrl: string;
41
43
  mcpUrl: string;
42
44
  }>;
43
45
  close(): Promise<void>;
@@ -46,15 +48,16 @@ export declare class BridgeServer {
46
48
  port: number;
47
49
  httpUrl: string;
48
50
  wsUrl: string;
49
- workflowWatchWsUrl: string;
51
+ workflowStatusWatchWsUrl: string;
50
52
  mcpUrl: string;
51
53
  };
52
54
  private getPorts;
53
55
  private createRuntime;
56
+ private cleanExports;
54
57
  private handleRequest;
55
58
  private assertAuthorized;
56
- private attachWorkflowWatcher;
57
- private sendWorkflowWatchResult;
59
+ private attachWorkflowStatusWatcher;
60
+ private sendWorkflowStatusWatchResult;
58
61
  private publishWorkflowStatus;
59
62
  private getOrigin;
60
63
  private applyCors;