@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.
Files changed (143) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/errors/error-handler.js +3 -3
  3. package/dist/function/function-runner.d.ts +4 -3
  4. package/dist/function/function-runner.js +60 -14
  5. package/dist/function/functions.types.d.ts +84 -5
  6. package/dist/function/functions.types.js +41 -1
  7. package/dist/index.d.ts +6 -2
  8. package/dist/index.js +5 -2
  9. package/dist/middleware/auth-apikey.d.ts +1 -1
  10. package/dist/middleware/auth-bearer.d.ts +1 -1
  11. package/dist/middleware/auth-cookie.d.ts +1 -1
  12. package/dist/middleware/timeout.d.ts +1 -1
  13. package/dist/middleware-runner.d.ts +3 -14
  14. package/dist/middleware-runner.js +8 -8
  15. package/dist/permissions.d.ts +3 -86
  16. package/dist/permissions.js +11 -67
  17. package/dist/pikku-state.d.ts +32 -104
  18. package/dist/pikku-state.js +140 -66
  19. package/dist/schema.d.ts +8 -6
  20. package/dist/schema.js +25 -13
  21. package/dist/services/workflow-service.d.ts +38 -0
  22. package/dist/services/workflow-service.js +1 -0
  23. package/dist/types/core.types.d.ts +12 -4
  24. package/dist/types/core.types.js +1 -1
  25. package/dist/types/state.types.d.ts +135 -0
  26. package/dist/types/state.types.js +1 -0
  27. package/dist/utils.d.ts +8 -0
  28. package/dist/utils.js +45 -0
  29. package/dist/wirings/channel/channel-handler.js +1 -1
  30. package/dist/wirings/channel/channel-runner.js +5 -5
  31. package/dist/wirings/channel/log-channels.js +1 -1
  32. package/dist/wirings/channel/serverless/serverless-channel-runner.js +2 -2
  33. package/dist/wirings/cli/channel/cli-channel-runner.js +3 -2
  34. package/dist/wirings/cli/cli-runner.js +10 -10
  35. package/dist/wirings/cli/cli.types.d.ts +1 -0
  36. package/dist/wirings/forge-node/forge-node.types.d.ts +120 -0
  37. package/dist/wirings/forge-node/forge-node.types.js +38 -0
  38. package/dist/wirings/forge-node/index.d.ts +1 -0
  39. package/dist/wirings/forge-node/index.js +1 -0
  40. package/dist/wirings/http/http-runner.d.ts +2 -2
  41. package/dist/wirings/http/http-runner.js +21 -12
  42. package/dist/wirings/http/http.types.d.ts +14 -1
  43. package/dist/wirings/http/log-http-routes.js +1 -1
  44. package/dist/wirings/http/routers/path-to-regex.js +2 -2
  45. package/dist/wirings/mcp/mcp-runner.js +21 -21
  46. package/dist/wirings/queue/queue-runner.js +6 -6
  47. package/dist/wirings/rpc/index.d.ts +1 -1
  48. package/dist/wirings/rpc/index.js +1 -1
  49. package/dist/wirings/rpc/rpc-runner.d.ts +7 -8
  50. package/dist/wirings/rpc/rpc-runner.js +62 -14
  51. package/dist/wirings/rpc/rpc-types.d.ts +7 -0
  52. package/dist/wirings/scheduler/log-schedulers.js +1 -1
  53. package/dist/wirings/scheduler/scheduler-runner.js +5 -5
  54. package/dist/wirings/trigger/index.d.ts +2 -0
  55. package/dist/wirings/trigger/index.js +2 -0
  56. package/dist/wirings/trigger/trigger-runner.d.ts +29 -0
  57. package/dist/wirings/trigger/trigger-runner.js +57 -0
  58. package/dist/wirings/trigger/trigger.types.d.ts +42 -0
  59. package/dist/wirings/trigger/trigger.types.js +1 -0
  60. package/dist/wirings/workflow/dsl/index.d.ts +5 -0
  61. package/dist/wirings/workflow/dsl/index.js +4 -0
  62. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +286 -0
  63. package/dist/wirings/workflow/dsl/workflow-dsl.types.js +5 -0
  64. package/dist/wirings/workflow/dsl/workflow-runner.d.ts +5 -0
  65. package/dist/wirings/workflow/dsl/workflow-runner.js +22 -0
  66. package/dist/wirings/workflow/graph/graph-node.d.ts +122 -0
  67. package/dist/wirings/workflow/graph/graph-node.js +58 -0
  68. package/dist/wirings/workflow/graph/graph-runner.d.ts +35 -0
  69. package/dist/wirings/workflow/graph/graph-runner.js +452 -0
  70. package/dist/wirings/workflow/graph/index.d.ts +3 -0
  71. package/dist/wirings/workflow/graph/index.js +3 -0
  72. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +95 -0
  73. package/dist/wirings/workflow/graph/workflow-graph.types.js +15 -0
  74. package/dist/wirings/workflow/index.d.ts +7 -12
  75. package/dist/wirings/workflow/index.js +6 -11
  76. package/dist/wirings/workflow/pikku-workflow-service.d.ts +96 -6
  77. package/dist/wirings/workflow/pikku-workflow-service.js +230 -103
  78. package/dist/wirings/workflow/wire-workflow.d.ts +42 -0
  79. package/dist/wirings/workflow/wire-workflow.js +53 -0
  80. package/dist/wirings/workflow/workflow-utils.d.ts +23 -0
  81. package/dist/wirings/workflow/workflow-utils.js +66 -0
  82. package/dist/wirings/workflow/workflow.types.d.ts +133 -211
  83. package/package.json +10 -1
  84. package/src/errors/error-handler.ts +3 -3
  85. package/src/function/function-runner.test.ts +1 -1
  86. package/src/function/function-runner.ts +86 -16
  87. package/src/function/functions.types.ts +126 -4
  88. package/src/index.ts +10 -5
  89. package/src/middleware-runner.ts +16 -9
  90. package/src/permissions.test.ts +28 -86
  91. package/src/permissions.ts +21 -80
  92. package/src/pikku-state.ts +156 -201
  93. package/src/schema.ts +42 -13
  94. package/src/services/workflow-service.ts +74 -0
  95. package/src/types/core.types.ts +12 -3
  96. package/src/types/state.types.ts +195 -0
  97. package/src/utils.ts +55 -0
  98. package/src/wirings/channel/channel-handler.ts +1 -1
  99. package/src/wirings/channel/channel-runner.ts +5 -5
  100. package/src/wirings/channel/local/local-channel-runner.test.ts +3 -1
  101. package/src/wirings/channel/log-channels.ts +1 -1
  102. package/src/wirings/channel/serverless/serverless-channel-runner.ts +2 -2
  103. package/src/wirings/cli/channel/cli-channel-runner.ts +4 -3
  104. package/src/wirings/cli/cli-runner.test.ts +19 -19
  105. package/src/wirings/cli/cli-runner.ts +10 -9
  106. package/src/wirings/cli/cli.types.ts +1 -0
  107. package/src/wirings/forge-node/forge-node.types.ts +135 -0
  108. package/src/wirings/forge-node/index.ts +1 -0
  109. package/src/wirings/http/http-runner.test.ts +2 -2
  110. package/src/wirings/http/http-runner.ts +30 -13
  111. package/src/wirings/http/http.types.ts +14 -0
  112. package/src/wirings/http/log-http-routes.ts +1 -1
  113. package/src/wirings/http/routers/path-to-regex.test.ts +30 -19
  114. package/src/wirings/http/routers/path-to-regex.ts +2 -2
  115. package/src/wirings/mcp/mcp-runner.ts +21 -21
  116. package/src/wirings/queue/queue-runner.test.ts +19 -19
  117. package/src/wirings/queue/queue-runner.ts +6 -6
  118. package/src/wirings/rpc/index.ts +1 -1
  119. package/src/wirings/rpc/rpc-runner.ts +88 -22
  120. package/src/wirings/rpc/rpc-types.ts +8 -0
  121. package/src/wirings/scheduler/log-schedulers.ts +1 -1
  122. package/src/wirings/scheduler/scheduler-runner.test.ts +27 -27
  123. package/src/wirings/scheduler/scheduler-runner.ts +5 -5
  124. package/src/wirings/trigger/index.ts +2 -0
  125. package/src/wirings/trigger/trigger-runner.ts +96 -0
  126. package/src/wirings/trigger/trigger.types.ts +56 -0
  127. package/src/wirings/workflow/dsl/index.ts +30 -0
  128. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +312 -0
  129. package/src/wirings/workflow/dsl/workflow-runner.ts +27 -0
  130. package/src/wirings/workflow/graph/graph-node.ts +227 -0
  131. package/src/wirings/workflow/graph/graph-runner.ts +694 -0
  132. package/src/wirings/workflow/graph/index.ts +3 -0
  133. package/src/wirings/workflow/graph/workflow-graph.types.ts +126 -0
  134. package/src/wirings/workflow/index.ts +53 -26
  135. package/src/wirings/workflow/pikku-workflow-service.ts +333 -117
  136. package/src/wirings/workflow/wire-workflow.ts +94 -0
  137. package/src/wirings/workflow/workflow-utils.ts +120 -0
  138. package/src/wirings/workflow/workflow.types.ts +166 -277
  139. package/tsconfig.tsbuildinfo +1 -1
  140. package/dist/wirings/workflow/workflow-runner.d.ts +0 -34
  141. package/dist/wirings/workflow/workflow-runner.js +0 -65
  142. package/src/function/function-runner.ts.bak +0 -188
  143. 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,2 @@
1
+ export * from './trigger.types.js'
2
+ export * from './trigger-runner.js'
@@ -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'