@pikku/core 0.11.1 → 0.11.2
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/CHANGELOG.md +24 -0
- package/dist/errors/error-handler.js +3 -3
- package/dist/function/function-runner.d.ts +4 -3
- package/dist/function/function-runner.js +60 -14
- package/dist/function/functions.types.d.ts +84 -5
- package/dist/function/functions.types.js +41 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/middleware/auth-apikey.d.ts +1 -1
- package/dist/middleware/auth-bearer.d.ts +1 -1
- package/dist/middleware/auth-cookie.d.ts +1 -1
- package/dist/middleware/timeout.d.ts +1 -1
- package/dist/middleware-runner.d.ts +3 -14
- package/dist/middleware-runner.js +8 -8
- package/dist/permissions.d.ts +3 -86
- package/dist/permissions.js +11 -67
- package/dist/pikku-state.d.ts +32 -104
- package/dist/pikku-state.js +140 -66
- package/dist/schema.d.ts +8 -6
- package/dist/schema.js +25 -13
- package/dist/services/workflow-service.d.ts +38 -0
- package/dist/services/workflow-service.js +1 -0
- package/dist/types/core.types.d.ts +12 -4
- package/dist/types/core.types.js +1 -1
- package/dist/types/state.types.d.ts +135 -0
- package/dist/types/state.types.js +1 -0
- package/dist/utils.d.ts +8 -0
- package/dist/utils.js +45 -0
- package/dist/wirings/channel/channel-handler.js +1 -1
- package/dist/wirings/channel/channel-runner.js +5 -5
- package/dist/wirings/channel/log-channels.js +1 -1
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +2 -2
- package/dist/wirings/cli/channel/cli-channel-runner.js +3 -2
- package/dist/wirings/cli/cli-runner.js +10 -10
- package/dist/wirings/cli/cli.types.d.ts +1 -0
- package/dist/wirings/forge-node/forge-node.types.d.ts +120 -0
- package/dist/wirings/forge-node/forge-node.types.js +38 -0
- package/dist/wirings/forge-node/index.d.ts +1 -0
- package/dist/wirings/forge-node/index.js +1 -0
- package/dist/wirings/http/http-runner.d.ts +2 -2
- package/dist/wirings/http/http-runner.js +21 -12
- package/dist/wirings/http/http.types.d.ts +14 -1
- package/dist/wirings/http/log-http-routes.js +1 -1
- package/dist/wirings/http/routers/path-to-regex.js +2 -2
- package/dist/wirings/mcp/mcp-runner.js +21 -21
- package/dist/wirings/queue/queue-runner.js +6 -6
- package/dist/wirings/rpc/index.d.ts +1 -1
- package/dist/wirings/rpc/index.js +1 -1
- package/dist/wirings/rpc/rpc-runner.d.ts +7 -8
- package/dist/wirings/rpc/rpc-runner.js +62 -14
- package/dist/wirings/rpc/rpc-types.d.ts +7 -0
- package/dist/wirings/scheduler/log-schedulers.js +1 -1
- package/dist/wirings/scheduler/scheduler-runner.js +5 -5
- package/dist/wirings/trigger/index.d.ts +2 -0
- package/dist/wirings/trigger/index.js +2 -0
- package/dist/wirings/trigger/trigger-runner.d.ts +29 -0
- package/dist/wirings/trigger/trigger-runner.js +57 -0
- package/dist/wirings/trigger/trigger.types.d.ts +42 -0
- package/dist/wirings/trigger/trigger.types.js +1 -0
- package/dist/wirings/workflow/dsl/index.d.ts +5 -0
- package/dist/wirings/workflow/dsl/index.js +4 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +286 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.js +5 -0
- package/dist/wirings/workflow/dsl/workflow-runner.d.ts +5 -0
- package/dist/wirings/workflow/dsl/workflow-runner.js +22 -0
- package/dist/wirings/workflow/graph/graph-node.d.ts +122 -0
- package/dist/wirings/workflow/graph/graph-node.js +58 -0
- package/dist/wirings/workflow/graph/graph-runner.d.ts +35 -0
- package/dist/wirings/workflow/graph/graph-runner.js +452 -0
- package/dist/wirings/workflow/graph/index.d.ts +3 -0
- package/dist/wirings/workflow/graph/index.js +3 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +95 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.js +15 -0
- package/dist/wirings/workflow/index.d.ts +7 -12
- package/dist/wirings/workflow/index.js +6 -11
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +96 -6
- package/dist/wirings/workflow/pikku-workflow-service.js +230 -103
- package/dist/wirings/workflow/wire-workflow.d.ts +42 -0
- package/dist/wirings/workflow/wire-workflow.js +53 -0
- package/dist/wirings/workflow/workflow-utils.d.ts +23 -0
- package/dist/wirings/workflow/workflow-utils.js +66 -0
- package/dist/wirings/workflow/workflow.types.d.ts +133 -211
- package/package.json +10 -1
- package/src/errors/error-handler.ts +3 -3
- package/src/function/function-runner.test.ts +1 -1
- package/src/function/function-runner.ts +86 -16
- package/src/function/functions.types.ts +126 -4
- package/src/index.ts +10 -5
- package/src/middleware-runner.ts +16 -9
- package/src/permissions.test.ts +28 -86
- package/src/permissions.ts +21 -80
- package/src/pikku-state.ts +156 -201
- package/src/schema.ts +42 -13
- package/src/services/workflow-service.ts +74 -0
- package/src/types/core.types.ts +12 -3
- package/src/types/state.types.ts +195 -0
- package/src/utils.ts +55 -0
- package/src/wirings/channel/channel-handler.ts +1 -1
- package/src/wirings/channel/channel-runner.ts +5 -5
- package/src/wirings/channel/local/local-channel-runner.test.ts +3 -1
- package/src/wirings/channel/log-channels.ts +1 -1
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +2 -2
- package/src/wirings/cli/channel/cli-channel-runner.ts +4 -3
- package/src/wirings/cli/cli-runner.test.ts +19 -19
- package/src/wirings/cli/cli-runner.ts +10 -9
- package/src/wirings/cli/cli.types.ts +1 -0
- package/src/wirings/forge-node/forge-node.types.ts +135 -0
- package/src/wirings/forge-node/index.ts +1 -0
- package/src/wirings/http/http-runner.test.ts +2 -2
- package/src/wirings/http/http-runner.ts +30 -13
- package/src/wirings/http/http.types.ts +14 -0
- package/src/wirings/http/log-http-routes.ts +1 -1
- package/src/wirings/http/routers/path-to-regex.test.ts +30 -19
- package/src/wirings/http/routers/path-to-regex.ts +2 -2
- package/src/wirings/mcp/mcp-runner.ts +21 -21
- package/src/wirings/queue/queue-runner.test.ts +19 -19
- package/src/wirings/queue/queue-runner.ts +6 -6
- package/src/wirings/rpc/index.ts +1 -1
- package/src/wirings/rpc/rpc-runner.ts +88 -22
- package/src/wirings/rpc/rpc-types.ts +8 -0
- package/src/wirings/scheduler/log-schedulers.ts +1 -1
- package/src/wirings/scheduler/scheduler-runner.test.ts +27 -27
- package/src/wirings/scheduler/scheduler-runner.ts +5 -5
- package/src/wirings/trigger/index.ts +2 -0
- package/src/wirings/trigger/trigger-runner.ts +96 -0
- package/src/wirings/trigger/trigger.types.ts +56 -0
- package/src/wirings/workflow/dsl/index.ts +30 -0
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +312 -0
- package/src/wirings/workflow/dsl/workflow-runner.ts +27 -0
- package/src/wirings/workflow/graph/graph-node.ts +227 -0
- package/src/wirings/workflow/graph/graph-runner.ts +694 -0
- package/src/wirings/workflow/graph/index.ts +3 -0
- package/src/wirings/workflow/graph/workflow-graph.types.ts +126 -0
- package/src/wirings/workflow/index.ts +53 -26
- package/src/wirings/workflow/pikku-workflow-service.ts +333 -117
- package/src/wirings/workflow/wire-workflow.ts +94 -0
- package/src/wirings/workflow/workflow-utils.ts +120 -0
- package/src/wirings/workflow/workflow.types.ts +166 -277
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/wirings/workflow/workflow-runner.d.ts +0 -34
- package/dist/wirings/workflow/workflow-runner.js +0 -65
- package/src/function/function-runner.ts.bak +0 -188
- package/src/wirings/workflow/workflow-runner.ts +0 -72
|
@@ -37,7 +37,7 @@ describe('wireScheduler', () => {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
// Set up metadata first
|
|
40
|
-
pikkuState('scheduler', 'meta')['test-task'] = {
|
|
40
|
+
pikkuState(null, 'scheduler', 'meta')['test-task'] = {
|
|
41
41
|
pikkuFuncName: 'scheduler_test-task',
|
|
42
42
|
name: 'test-task',
|
|
43
43
|
schedule: '0 0 * * *',
|
|
@@ -45,7 +45,7 @@ describe('wireScheduler', () => {
|
|
|
45
45
|
|
|
46
46
|
wireScheduler(mockTask)
|
|
47
47
|
|
|
48
|
-
const tasks = pikkuState('scheduler', 'tasks')
|
|
48
|
+
const tasks = pikkuState(null, 'scheduler', 'tasks')
|
|
49
49
|
assert.equal(tasks.has('test-task'), true)
|
|
50
50
|
assert.equal(tasks.get('test-task'), mockTask)
|
|
51
51
|
})
|
|
@@ -80,7 +80,7 @@ describe('wireScheduler', () => {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
// Set up metadata
|
|
83
|
-
pikkuState('scheduler', 'meta')['duplicate-task'] = {
|
|
83
|
+
pikkuState(null, 'scheduler', 'meta')['duplicate-task'] = {
|
|
84
84
|
pikkuFuncName: 'scheduler_duplicate-task',
|
|
85
85
|
name: 'duplicate-task',
|
|
86
86
|
schedule: '0 0 * * *',
|
|
@@ -120,7 +120,7 @@ describe('wireScheduler', () => {
|
|
|
120
120
|
tags: ['scheduled'],
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
pikkuState('scheduler', 'meta')['task-with-middleware'] = {
|
|
123
|
+
pikkuState(null, 'scheduler', 'meta')['task-with-middleware'] = {
|
|
124
124
|
pikkuFuncName: 'scheduler_task-with-middleware',
|
|
125
125
|
name: 'task-with-middleware',
|
|
126
126
|
schedule: '0 0 * * *',
|
|
@@ -128,7 +128,7 @@ describe('wireScheduler', () => {
|
|
|
128
128
|
|
|
129
129
|
wireScheduler(mockTask)
|
|
130
130
|
|
|
131
|
-
const tasks = pikkuState('scheduler', 'tasks')
|
|
131
|
+
const tasks = pikkuState(null, 'scheduler', 'tasks')
|
|
132
132
|
const task = tasks.get('task-with-middleware')
|
|
133
133
|
assert.equal(task?.middleware?.length, 1)
|
|
134
134
|
assert.deepEqual(task?.tags, ['scheduled'])
|
|
@@ -151,12 +151,12 @@ describe('runScheduledTask', () => {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
// Set up metadata and task
|
|
154
|
-
pikkuState('scheduler', 'meta')['simple-task'] = {
|
|
154
|
+
pikkuState(null, 'scheduler', 'meta')['simple-task'] = {
|
|
155
155
|
pikkuFuncName: 'scheduler_simple-task',
|
|
156
156
|
name: 'simple-task',
|
|
157
157
|
schedule: '0 0 * * *',
|
|
158
158
|
}
|
|
159
|
-
pikkuState('function', 'meta')['scheduler_simple-task'] = {
|
|
159
|
+
pikkuState(null, 'function', 'meta')['scheduler_simple-task'] = {
|
|
160
160
|
pikkuFuncName: 'scheduler_simple-task',
|
|
161
161
|
inputSchemaName: null,
|
|
162
162
|
outputSchemaName: null,
|
|
@@ -191,12 +191,12 @@ describe('runScheduledTask', () => {
|
|
|
191
191
|
},
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
-
pikkuState('scheduler', 'meta')['task-with-session'] = {
|
|
194
|
+
pikkuState(null, 'scheduler', 'meta')['task-with-session'] = {
|
|
195
195
|
pikkuFuncName: 'scheduler_task-with-session',
|
|
196
196
|
name: 'task-with-session',
|
|
197
197
|
schedule: '0 0 * * *',
|
|
198
198
|
}
|
|
199
|
-
pikkuState('function', 'meta')['scheduler_task-with-session'] = {
|
|
199
|
+
pikkuState(null, 'function', 'meta')['scheduler_task-with-session'] = {
|
|
200
200
|
pikkuFuncName: 'scheduler_task-with-session',
|
|
201
201
|
inputSchemaName: null,
|
|
202
202
|
outputSchemaName: null,
|
|
@@ -243,7 +243,7 @@ describe('runScheduledTask', () => {
|
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
// Add task but not metadata
|
|
246
|
-
pikkuState('scheduler', 'tasks').set('task-without-meta', mockTask)
|
|
246
|
+
pikkuState(null, 'scheduler', 'tasks').set('task-without-meta', mockTask)
|
|
247
247
|
|
|
248
248
|
const mockLogger = createMockLogger()
|
|
249
249
|
|
|
@@ -273,12 +273,12 @@ describe('runScheduledTask', () => {
|
|
|
273
273
|
},
|
|
274
274
|
}
|
|
275
275
|
|
|
276
|
-
pikkuState('scheduler', 'meta')['skipped-task'] = {
|
|
276
|
+
pikkuState(null, 'scheduler', 'meta')['skipped-task'] = {
|
|
277
277
|
pikkuFuncName: 'scheduler_skipped-task',
|
|
278
278
|
name: 'skipped-task',
|
|
279
279
|
schedule: '0 0 * * *',
|
|
280
280
|
}
|
|
281
|
-
pikkuState('function', 'meta')['scheduler_skipped-task'] = {
|
|
281
|
+
pikkuState(null, 'function', 'meta')['scheduler_skipped-task'] = {
|
|
282
282
|
pikkuFuncName: 'scheduler_skipped-task',
|
|
283
283
|
inputSchemaName: null,
|
|
284
284
|
outputSchemaName: null,
|
|
@@ -316,12 +316,12 @@ describe('runScheduledTask', () => {
|
|
|
316
316
|
},
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
-
pikkuState('scheduler', 'meta')['skipped-task-no-reason'] = {
|
|
319
|
+
pikkuState(null, 'scheduler', 'meta')['skipped-task-no-reason'] = {
|
|
320
320
|
pikkuFuncName: 'scheduler_skipped-task-no-reason',
|
|
321
321
|
name: 'skipped-task-no-reason',
|
|
322
322
|
schedule: '0 0 * * *',
|
|
323
323
|
}
|
|
324
|
-
pikkuState('function', 'meta')['scheduler_skipped-task-no-reason'] = {
|
|
324
|
+
pikkuState(null, 'function', 'meta')['scheduler_skipped-task-no-reason'] = {
|
|
325
325
|
pikkuFuncName: 'scheduler_skipped-task-no-reason',
|
|
326
326
|
inputSchemaName: null,
|
|
327
327
|
outputSchemaName: null,
|
|
@@ -362,12 +362,12 @@ describe('runScheduledTask', () => {
|
|
|
362
362
|
},
|
|
363
363
|
}
|
|
364
364
|
|
|
365
|
-
pikkuState('scheduler', 'meta')['wire-task'] = {
|
|
365
|
+
pikkuState(null, 'scheduler', 'meta')['wire-task'] = {
|
|
366
366
|
pikkuFuncName: 'scheduler_wire-task',
|
|
367
367
|
name: 'wire-task',
|
|
368
368
|
schedule: '*/5 * * * *',
|
|
369
369
|
}
|
|
370
|
-
pikkuState('function', 'meta')['scheduler_wire-task'] = {
|
|
370
|
+
pikkuState(null, 'function', 'meta')['scheduler_wire-task'] = {
|
|
371
371
|
pikkuFuncName: 'scheduler_wire-task',
|
|
372
372
|
inputSchemaName: null,
|
|
373
373
|
outputSchemaName: null,
|
|
@@ -400,12 +400,12 @@ describe('runScheduledTask', () => {
|
|
|
400
400
|
},
|
|
401
401
|
}
|
|
402
402
|
|
|
403
|
-
pikkuState('scheduler', 'meta')['session-services-task'] = {
|
|
403
|
+
pikkuState(null, 'scheduler', 'meta')['session-services-task'] = {
|
|
404
404
|
pikkuFuncName: 'scheduler_session-services-task',
|
|
405
405
|
name: 'session-services-task',
|
|
406
406
|
schedule: '0 0 * * *',
|
|
407
407
|
}
|
|
408
|
-
pikkuState('function', 'meta')['scheduler_session-services-task'] = {
|
|
408
|
+
pikkuState(null, 'function', 'meta')['scheduler_session-services-task'] = {
|
|
409
409
|
pikkuFuncName: 'scheduler_session-services-task',
|
|
410
410
|
inputSchemaName: null,
|
|
411
411
|
outputSchemaName: null,
|
|
@@ -445,12 +445,12 @@ describe('runScheduledTask', () => {
|
|
|
445
445
|
},
|
|
446
446
|
}
|
|
447
447
|
|
|
448
|
-
pikkuState('scheduler', 'meta')['cleanup-task'] = {
|
|
448
|
+
pikkuState(null, 'scheduler', 'meta')['cleanup-task'] = {
|
|
449
449
|
pikkuFuncName: 'scheduler_cleanup-task',
|
|
450
450
|
name: 'cleanup-task',
|
|
451
451
|
schedule: '0 0 * * *',
|
|
452
452
|
}
|
|
453
|
-
pikkuState('function', 'meta')['scheduler_cleanup-task'] = {
|
|
453
|
+
pikkuState(null, 'function', 'meta')['scheduler_cleanup-task'] = {
|
|
454
454
|
pikkuFuncName: 'scheduler_cleanup-task',
|
|
455
455
|
inputSchemaName: null,
|
|
456
456
|
outputSchemaName: null,
|
|
@@ -489,12 +489,12 @@ describe('runScheduledTask', () => {
|
|
|
489
489
|
},
|
|
490
490
|
}
|
|
491
491
|
|
|
492
|
-
pikkuState('scheduler', 'meta')['error-cleanup-task'] = {
|
|
492
|
+
pikkuState(null, 'scheduler', 'meta')['error-cleanup-task'] = {
|
|
493
493
|
pikkuFuncName: 'scheduler_error-cleanup-task',
|
|
494
494
|
name: 'error-cleanup-task',
|
|
495
495
|
schedule: '0 0 * * *',
|
|
496
496
|
}
|
|
497
|
-
pikkuState('function', 'meta')['scheduler_error-cleanup-task'] = {
|
|
497
|
+
pikkuState(null, 'function', 'meta')['scheduler_error-cleanup-task'] = {
|
|
498
498
|
pikkuFuncName: 'scheduler_error-cleanup-task',
|
|
499
499
|
inputSchemaName: null,
|
|
500
500
|
outputSchemaName: null,
|
|
@@ -526,12 +526,12 @@ describe('runScheduledTask', () => {
|
|
|
526
526
|
},
|
|
527
527
|
}
|
|
528
528
|
|
|
529
|
-
pikkuState('scheduler', 'meta')['error-task'] = {
|
|
529
|
+
pikkuState(null, 'scheduler', 'meta')['error-task'] = {
|
|
530
530
|
pikkuFuncName: 'scheduler_error-task',
|
|
531
531
|
name: 'error-task',
|
|
532
532
|
schedule: '0 0 * * *',
|
|
533
533
|
}
|
|
534
|
-
pikkuState('function', 'meta')['scheduler_error-task'] = {
|
|
534
|
+
pikkuState(null, 'function', 'meta')['scheduler_error-task'] = {
|
|
535
535
|
pikkuFuncName: 'scheduler_error-task',
|
|
536
536
|
inputSchemaName: null,
|
|
537
537
|
outputSchemaName: null,
|
|
@@ -573,12 +573,12 @@ describe('runScheduledTask', () => {
|
|
|
573
573
|
middleware: [middleware],
|
|
574
574
|
}
|
|
575
575
|
|
|
576
|
-
pikkuState('scheduler', 'meta')['middleware-task'] = {
|
|
576
|
+
pikkuState(null, 'scheduler', 'meta')['middleware-task'] = {
|
|
577
577
|
pikkuFuncName: 'scheduler_middleware-task',
|
|
578
578
|
name: 'middleware-task',
|
|
579
579
|
schedule: '0 0 * * *',
|
|
580
580
|
}
|
|
581
|
-
pikkuState('function', 'meta')['scheduler_middleware-task'] = {
|
|
581
|
+
pikkuState(null, 'function', 'meta')['scheduler_middleware-task'] = {
|
|
582
582
|
pikkuFuncName: 'scheduler_middleware-task',
|
|
583
583
|
inputSchemaName: null,
|
|
584
584
|
outputSchemaName: null,
|
|
@@ -607,7 +607,7 @@ describe('getScheduledTasks', () => {
|
|
|
607
607
|
},
|
|
608
608
|
}
|
|
609
609
|
|
|
610
|
-
pikkuState('scheduler', 'meta')['test-task'] = {
|
|
610
|
+
pikkuState(null, 'scheduler', 'meta')['test-task'] = {
|
|
611
611
|
pikkuFuncName: 'scheduler_test-task',
|
|
612
612
|
name: 'test-task',
|
|
613
613
|
schedule: '0 0 * * *',
|
|
@@ -34,7 +34,7 @@ export const wireScheduler = <
|
|
|
34
34
|
>(
|
|
35
35
|
scheduledTask: CoreScheduledTask<PikkuFunctionConfig>
|
|
36
36
|
) => {
|
|
37
|
-
const meta = pikkuState('scheduler', 'meta')
|
|
37
|
+
const meta = pikkuState(null, 'scheduler', 'meta')
|
|
38
38
|
const taskMeta = meta[scheduledTask.name]
|
|
39
39
|
if (!taskMeta) {
|
|
40
40
|
throw new Error('Task metadata not found')
|
|
@@ -47,7 +47,7 @@ export const wireScheduler = <
|
|
|
47
47
|
tags: scheduledTask.func.tags,
|
|
48
48
|
})
|
|
49
49
|
|
|
50
|
-
const tasks = pikkuState('scheduler', 'tasks')
|
|
50
|
+
const tasks = pikkuState(null, 'scheduler', 'tasks')
|
|
51
51
|
if (tasks.has(scheduledTask.name)) {
|
|
52
52
|
throw new Error(`Scheduled task already exists: ${scheduledTask.name}`)
|
|
53
53
|
}
|
|
@@ -76,8 +76,8 @@ export async function runScheduledTask({
|
|
|
76
76
|
createWireServices,
|
|
77
77
|
}: RunScheduledTasksParams): Promise<void> {
|
|
78
78
|
let wireServices: any
|
|
79
|
-
const task = pikkuState('scheduler', 'tasks').get(name)
|
|
80
|
-
const meta = pikkuState('scheduler', 'meta')[name]
|
|
79
|
+
const task = pikkuState(null, 'scheduler', 'tasks').get(name)
|
|
80
|
+
const meta = pikkuState(null, 'scheduler', 'meta')[name]
|
|
81
81
|
|
|
82
82
|
const userSession = new PikkuSessionService()
|
|
83
83
|
if (session) {
|
|
@@ -135,5 +135,5 @@ export async function runScheduledTask({
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
export const getScheduledTasks = () => {
|
|
138
|
-
return pikkuState('scheduler', 'tasks')
|
|
138
|
+
return pikkuState(null, 'scheduler', 'tasks')
|
|
139
139
|
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { CoreSingletonServices } from '../../types/core.types.js'
|
|
2
|
+
import type { CoreTrigger, TriggerInstance } from './trigger.types.js'
|
|
3
|
+
import { pikkuState } from '../../pikku-state.js'
|
|
4
|
+
import type { CorePikkuTriggerFunctionConfig } from '../../function/functions.types.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Registers a trigger with the Pikku framework.
|
|
8
|
+
* The trigger will be available for setup via setupTrigger.
|
|
9
|
+
*/
|
|
10
|
+
export const wireTrigger = <
|
|
11
|
+
TConfig = unknown,
|
|
12
|
+
TOutput = unknown,
|
|
13
|
+
TriggerFunctionConfig extends CorePikkuTriggerFunctionConfig<
|
|
14
|
+
TConfig,
|
|
15
|
+
TOutput
|
|
16
|
+
> = CorePikkuTriggerFunctionConfig<TConfig, TOutput>,
|
|
17
|
+
>(
|
|
18
|
+
trigger: CoreTrigger<TConfig, TOutput, TriggerFunctionConfig>
|
|
19
|
+
) => {
|
|
20
|
+
const meta = pikkuState(null, 'trigger', 'meta')
|
|
21
|
+
const triggerMeta = meta[trigger.name]
|
|
22
|
+
if (!triggerMeta) {
|
|
23
|
+
throw new Error(`Trigger metadata not found: ${trigger.name}`)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const triggers = pikkuState(null, 'trigger', 'triggers')
|
|
27
|
+
if (triggers.has(trigger.name)) {
|
|
28
|
+
throw new Error(`Trigger already exists: ${trigger.name}`)
|
|
29
|
+
}
|
|
30
|
+
triggers.set(trigger.name, trigger as any)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Parameters for setting up a trigger
|
|
35
|
+
*/
|
|
36
|
+
export type SetupTriggerParams<TOutput = unknown> = {
|
|
37
|
+
name: string
|
|
38
|
+
singletonServices: CoreSingletonServices
|
|
39
|
+
onTrigger: (data: TOutput) => void | Promise<void>
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Sets up a registered trigger and starts listening for events.
|
|
44
|
+
* Returns a TriggerInstance with a teardown function.
|
|
45
|
+
*/
|
|
46
|
+
export async function setupTrigger<TOutput = unknown>({
|
|
47
|
+
name,
|
|
48
|
+
singletonServices,
|
|
49
|
+
onTrigger,
|
|
50
|
+
}: SetupTriggerParams<TOutput>): Promise<TriggerInstance> {
|
|
51
|
+
const trigger = pikkuState(null, 'trigger', 'triggers').get(name)
|
|
52
|
+
const meta = pikkuState(null, 'trigger', 'meta')[name]
|
|
53
|
+
|
|
54
|
+
if (!trigger) {
|
|
55
|
+
throw new Error(`Trigger not found: ${name}`)
|
|
56
|
+
}
|
|
57
|
+
if (!meta) {
|
|
58
|
+
throw new Error(`Trigger metadata not found: ${name}`)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const wire = {
|
|
62
|
+
trigger: {
|
|
63
|
+
trigger: (data: TOutput) => {
|
|
64
|
+
singletonServices.logger.info(`Trigger fired: ${name}`)
|
|
65
|
+
onTrigger(data)
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
singletonServices.logger.info(`Setting up trigger: ${name}`)
|
|
71
|
+
|
|
72
|
+
const teardown = await trigger.func.func(
|
|
73
|
+
singletonServices,
|
|
74
|
+
trigger.config,
|
|
75
|
+
wire as any
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
name,
|
|
80
|
+
teardown,
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Gets all registered triggers
|
|
86
|
+
*/
|
|
87
|
+
export const getRegisteredTriggers = () => {
|
|
88
|
+
return pikkuState(null, 'trigger', 'triggers')
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Gets trigger metadata
|
|
93
|
+
*/
|
|
94
|
+
export const getTriggerMeta = () => {
|
|
95
|
+
return pikkuState(null, 'trigger', 'meta')
|
|
96
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { CorePikkuTriggerFunctionConfig } from '../../function/functions.types.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The trigger interaction object passed to trigger functions via the wire.
|
|
5
|
+
* Call trigger() to fire the trigger and start a new workflow/execution.
|
|
6
|
+
*/
|
|
7
|
+
export interface PikkuTrigger<TOutput = unknown> {
|
|
8
|
+
trigger: (data: TOutput) => void
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Metadata for registered triggers stored in state.
|
|
13
|
+
*/
|
|
14
|
+
export type TriggerMeta = Record<
|
|
15
|
+
string,
|
|
16
|
+
{
|
|
17
|
+
pikkuFuncName: string
|
|
18
|
+
name: string
|
|
19
|
+
description?: string
|
|
20
|
+
tags?: string[]
|
|
21
|
+
}
|
|
22
|
+
>
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Core trigger definition for registration.
|
|
26
|
+
*
|
|
27
|
+
* @template TConfig - Configuration type
|
|
28
|
+
* @template TOutput - Output type
|
|
29
|
+
*/
|
|
30
|
+
export interface CoreTrigger<
|
|
31
|
+
TConfig = unknown,
|
|
32
|
+
TOutput = unknown,
|
|
33
|
+
TriggerFunctionConfig extends CorePikkuTriggerFunctionConfig<
|
|
34
|
+
TConfig,
|
|
35
|
+
TOutput
|
|
36
|
+
> = CorePikkuTriggerFunctionConfig<TConfig, TOutput>,
|
|
37
|
+
> {
|
|
38
|
+
/** Unique name for this trigger */
|
|
39
|
+
name: string
|
|
40
|
+
/** The trigger function configuration */
|
|
41
|
+
func: TriggerFunctionConfig
|
|
42
|
+
/** Configuration to pass to the trigger function */
|
|
43
|
+
config: TConfig
|
|
44
|
+
/** Optional description */
|
|
45
|
+
description?: string
|
|
46
|
+
/** Optional tags for categorization */
|
|
47
|
+
tags?: string[]
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Represents a trigger instance with teardown capability
|
|
52
|
+
*/
|
|
53
|
+
export interface TriggerInstance {
|
|
54
|
+
name: string
|
|
55
|
+
teardown: () => void | Promise<void>
|
|
56
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSL (Domain Specific Language) workflow exports
|
|
3
|
+
*/
|
|
4
|
+
export { addWorkflow } from './workflow-runner.js'
|
|
5
|
+
|
|
6
|
+
export type {
|
|
7
|
+
WorkflowStepOptions,
|
|
8
|
+
WorkflowWireDoRPC,
|
|
9
|
+
WorkflowWireDoInline,
|
|
10
|
+
WorkflowWireSleep,
|
|
11
|
+
InputSource,
|
|
12
|
+
OutputBinding,
|
|
13
|
+
RpcStepMeta,
|
|
14
|
+
SimpleCondition,
|
|
15
|
+
Condition,
|
|
16
|
+
BranchStepMeta,
|
|
17
|
+
ParallelGroupStepMeta,
|
|
18
|
+
FanoutStepMeta,
|
|
19
|
+
ReturnStepMeta,
|
|
20
|
+
InlineStepMeta,
|
|
21
|
+
SleepStepMeta,
|
|
22
|
+
CancelStepMeta,
|
|
23
|
+
SwitchCaseMeta,
|
|
24
|
+
SwitchStepMeta,
|
|
25
|
+
FilterStepMeta,
|
|
26
|
+
ArrayPredicateStepMeta,
|
|
27
|
+
WorkflowStepMeta,
|
|
28
|
+
WorkflowStepWire,
|
|
29
|
+
PikkuWorkflowWire,
|
|
30
|
+
} from './workflow-dsl.types.js'
|