@pikku/core 0.11.0 → 0.11.1

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 (105) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/dist/errors/errors.d.ts +1 -1
  3. package/dist/errors/errors.js +3 -3
  4. package/dist/function/function-runner.d.ts +6 -7
  5. package/dist/function/function-runner.js +35 -16
  6. package/dist/function/functions.types.d.ts +22 -30
  7. package/dist/function/functions.types.js +9 -6
  8. package/dist/handle-error.d.ts +1 -1
  9. package/dist/handle-error.js +1 -1
  10. package/dist/middleware/auth-apikey.js +3 -3
  11. package/dist/middleware/auth-bearer.js +3 -3
  12. package/dist/middleware/auth-cookie.js +5 -5
  13. package/dist/middleware/timeout.js +3 -2
  14. package/dist/middleware-runner.d.ts +3 -6
  15. package/dist/middleware-runner.js +11 -12
  16. package/dist/permissions.d.ts +6 -6
  17. package/dist/permissions.js +15 -16
  18. package/dist/services/user-session-service.d.ts +7 -3
  19. package/dist/services/user-session-service.js +8 -1
  20. package/dist/types/core.types.d.ts +29 -38
  21. package/dist/types/core.types.js +3 -14
  22. package/dist/utils.d.ts +1 -1
  23. package/dist/utils.js +3 -3
  24. package/dist/wirings/channel/channel-common.js +2 -3
  25. package/dist/wirings/channel/channel-handler.d.ts +3 -2
  26. package/dist/wirings/channel/channel-handler.js +6 -9
  27. package/dist/wirings/channel/channel-runner.d.ts +2 -2
  28. package/dist/wirings/channel/channel.types.d.ts +10 -5
  29. package/dist/wirings/channel/local/local-channel-runner.d.ts +1 -1
  30. package/dist/wirings/channel/local/local-channel-runner.js +19 -26
  31. package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +1 -1
  32. package/dist/wirings/channel/serverless/serverless-channel-runner.js +41 -46
  33. package/dist/wirings/cli/cli-runner.d.ts +5 -5
  34. package/dist/wirings/cli/cli-runner.js +10 -28
  35. package/dist/wirings/cli/cli.types.d.ts +15 -11
  36. package/dist/wirings/http/http-runner.d.ts +6 -6
  37. package/dist/wirings/http/http-runner.js +25 -39
  38. package/dist/wirings/http/http.types.d.ts +5 -10
  39. package/dist/wirings/mcp/mcp-runner.d.ts +2 -2
  40. package/dist/wirings/mcp/mcp-runner.js +12 -19
  41. package/dist/wirings/mcp/mcp.types.d.ts +6 -0
  42. package/dist/wirings/queue/queue-runner.d.ts +3 -3
  43. package/dist/wirings/queue/queue-runner.js +7 -17
  44. package/dist/wirings/queue/queue.types.d.ts +4 -11
  45. package/dist/wirings/rpc/rpc-runner.d.ts +10 -8
  46. package/dist/wirings/rpc/rpc-runner.js +36 -47
  47. package/dist/wirings/scheduler/scheduler-runner.d.ts +3 -3
  48. package/dist/wirings/scheduler/scheduler-runner.js +13 -24
  49. package/dist/wirings/scheduler/scheduler.types.d.ts +3 -8
  50. package/dist/wirings/workflow/index.d.ts +11 -2
  51. package/dist/wirings/workflow/index.js +10 -2
  52. package/dist/wirings/workflow/pikku-workflow-service.d.ts +12 -4
  53. package/dist/wirings/workflow/pikku-workflow-service.js +61 -79
  54. package/dist/wirings/workflow/workflow-runner.d.ts +3 -4
  55. package/dist/wirings/workflow/workflow-runner.js +11 -14
  56. package/dist/wirings/workflow/workflow.types.d.ts +114 -29
  57. package/package.json +2 -2
  58. package/src/errors/errors.ts +3 -3
  59. package/src/factory-functions.test.ts +9 -36
  60. package/src/function/function-runner.test.ts +57 -68
  61. package/src/function/function-runner.ts +51 -28
  62. package/src/function/function-runner.ts.bak +188 -0
  63. package/src/function/functions.types.ts +68 -51
  64. package/src/handle-error.ts +1 -1
  65. package/src/middleware/auth-apikey.test.ts +360 -0
  66. package/src/middleware/auth-apikey.ts +3 -7
  67. package/src/middleware/auth-bearer.test.ts +447 -0
  68. package/src/middleware/auth-bearer.ts +27 -33
  69. package/src/middleware/auth-cookie.test.ts +525 -0
  70. package/src/middleware/auth-cookie.ts +6 -6
  71. package/src/middleware/timeout.ts +4 -2
  72. package/src/middleware-runner.test.ts +58 -127
  73. package/src/middleware-runner.ts +13 -16
  74. package/src/permissions.test.ts +41 -45
  75. package/src/permissions.ts +21 -21
  76. package/src/services/user-session-service.ts +14 -4
  77. package/src/types/core.types.ts +67 -55
  78. package/src/utils.ts +4 -4
  79. package/src/wirings/channel/channel-common.ts +4 -7
  80. package/src/wirings/channel/channel-handler.ts +16 -22
  81. package/src/wirings/channel/channel-runner.ts +2 -2
  82. package/src/wirings/channel/channel.types.ts +14 -11
  83. package/src/wirings/channel/local/local-channel-runner.test.ts +5 -3
  84. package/src/wirings/channel/local/local-channel-runner.ts +23 -38
  85. package/src/wirings/channel/serverless/serverless-channel-runner.ts +51 -77
  86. package/src/wirings/cli/cli-runner.test.ts +7 -7
  87. package/src/wirings/cli/cli-runner.ts +24 -62
  88. package/src/wirings/cli/cli.types.ts +22 -16
  89. package/src/wirings/http/http-runner.test.ts +8 -8
  90. package/src/wirings/http/http-runner.ts +29 -56
  91. package/src/wirings/http/http.types.ts +5 -14
  92. package/src/wirings/mcp/mcp-runner.ts +23 -48
  93. package/src/wirings/mcp/mcp.types.ts +6 -0
  94. package/src/wirings/queue/queue-runner.test.ts +641 -0
  95. package/src/wirings/queue/queue-runner.ts +10 -32
  96. package/src/wirings/queue/queue.types.ts +4 -11
  97. package/src/wirings/rpc/rpc-runner.ts +41 -55
  98. package/src/wirings/scheduler/scheduler-runner.test.ts +627 -0
  99. package/src/wirings/scheduler/scheduler-runner.ts +24 -50
  100. package/src/wirings/scheduler/scheduler.types.ts +3 -9
  101. package/src/wirings/workflow/index.ts +24 -3
  102. package/src/wirings/workflow/pikku-workflow-service.ts +83 -93
  103. package/src/wirings/workflow/workflow-runner.ts +12 -25
  104. package/src/wirings/workflow/workflow.types.ts +144 -54
  105. package/tsconfig.tsbuildinfo +1 -1
@@ -1,6 +1,6 @@
1
1
  import { openChannel } from '../channel-runner.js'
2
- import { createHTTPInteraction } from '../../http/http-runner.js'
3
- import { closeSessionServices } from '../../../utils.js'
2
+ import { createHTTPWire } from '../../http/http-runner.js'
3
+ import { closeWireServices } from '../../../utils.js'
4
4
  import { processMessageHandlers } from '../channel-handler.js'
5
5
  import {
6
6
  CoreChannel,
@@ -8,11 +8,10 @@ import {
8
8
  RunChannelParams,
9
9
  } from '../channel.types.js'
10
10
  import { PikkuLocalChannelHandler } from './local-channel-handler.js'
11
- import { PikkuInteraction, SessionServices } from '../../../types/core.types.js'
11
+ import { PikkuWire, WireServices } from '../../../types/core.types.js'
12
12
  import { handleHTTPError } from '../../../handle-error.js'
13
- import { PikkuUserSessionService } from '../../../services/user-session-service.js'
13
+ import { PikkuSessionService } from '../../../services/user-session-service.js'
14
14
  import { PikkuHTTP } from '../../http/http.types.js'
15
- import { rpcService } from '../../rpc/rpc-runner.js'
16
15
  import { runChannelLifecycleWithMiddleware } from '../channel-common.js'
17
16
 
18
17
  export const runLocalChannel = async ({
@@ -21,7 +20,7 @@ export const runLocalChannel = async ({
21
20
  request,
22
21
  response,
23
22
  route,
24
- createSessionServices,
23
+ createWireServices,
25
24
  skipUserSession = false,
26
25
  respondWith404 = true,
27
26
  coerceDataFromSchema = true,
@@ -30,14 +29,14 @@ export const runLocalChannel = async ({
30
29
  }: Partial<Pick<CoreChannel<unknown, any>, 'route'>> &
31
30
  RunChannelOptions &
32
31
  RunChannelParams<unknown>): Promise<PikkuLocalChannelHandler | void> => {
33
- let sessionServices: SessionServices<typeof singletonServices> | undefined
32
+ let wireServices: WireServices<typeof singletonServices> | undefined
34
33
 
35
34
  let channelHandler: PikkuLocalChannelHandler | undefined
36
- const userSession = new PikkuUserSessionService()
35
+ const userSession = new PikkuSessionService()
37
36
 
38
37
  let http: PikkuHTTP | undefined
39
38
  if (request) {
40
- http = createHTTPInteraction(request, response)
39
+ http = createHTTPWire(request, response)
41
40
  route = http?.request?.path()
42
41
  }
43
42
 
@@ -45,7 +44,7 @@ export const runLocalChannel = async ({
45
44
  try {
46
45
  ;({ openingData, channelConfig, meta } = await openChannel({
47
46
  channelId,
48
- createSessionServices,
47
+ createWireServices,
49
48
  respondWith404,
50
49
  request,
51
50
  response,
@@ -76,28 +75,13 @@ export const runLocalChannel = async ({
76
75
  openingData
77
76
  )
78
77
  const channel = channelHandler.getChannel()
79
- const session = await userSession.get()
80
- if (createSessionServices) {
81
- sessionServices = await createSessionServices(
82
- singletonServices,
83
- { http, channel },
84
- session
85
- )
86
- }
78
+ const wire: PikkuWire = { channel, session: userSession }
87
79
 
88
- const getAllServices = (channel: any, requiresAuth?: boolean) =>
89
- rpcService.injectRPCService(
90
- {
91
- ...singletonServices,
92
- ...sessionServices,
93
- channel,
94
- userSession,
95
- },
96
- interaction,
97
- requiresAuth
98
- )
80
+ if (createWireServices) {
81
+ wireServices = await createWireServices(singletonServices, wire)
82
+ }
99
83
 
100
- const interaction: PikkuInteraction = { channel }
84
+ const services = { ...singletonServices, ...wireServices }
101
85
 
102
86
  channelHandler.registerOnOpen(async () => {
103
87
  if (channelConfig.onConnect && meta.connect) {
@@ -107,7 +91,7 @@ export const runLocalChannel = async ({
107
91
  meta: meta.connect,
108
92
  lifecycleConfig: channelConfig.onConnect,
109
93
  lifecycleType: 'connect',
110
- services: getAllServices(channel, false),
94
+ services,
111
95
  channel,
112
96
  data: openingData,
113
97
  })
@@ -129,7 +113,7 @@ export const runLocalChannel = async ({
129
113
  meta: meta.disconnect,
130
114
  lifecycleConfig: channelConfig.onDisconnect,
131
115
  lifecycleType: 'disconnect',
132
- services: getAllServices(channel, false),
116
+ services,
133
117
  channel,
134
118
  })
135
119
  } catch (e) {
@@ -138,15 +122,16 @@ export const runLocalChannel = async ({
138
122
  }
139
123
  }
140
124
 
141
- if (sessionServices) {
142
- await closeSessionServices(singletonServices.logger, sessionServices)
125
+ if (wireServices) {
126
+ await closeWireServices(singletonServices.logger, wireServices)
143
127
  }
144
128
  })
145
129
 
146
130
  const onMessage = processMessageHandlers(
147
- getAllServices(channel),
131
+ services,
148
132
  channelConfig as any,
149
- channelHandler
133
+ channelHandler,
134
+ userSession
150
135
  )
151
136
  channelHandler.registerOnMessage(async (data) => {
152
137
  try {
@@ -168,8 +153,8 @@ export const runLocalChannel = async ({
168
153
  bubbleErrors
169
154
  )
170
155
  } finally {
171
- if (sessionServices) {
172
- await closeSessionServices(singletonServices.logger, sessionServices)
156
+ if (wireServices) {
157
+ await closeWireServices(singletonServices.logger, wireServices)
173
158
  }
174
159
  }
175
160
  }
@@ -1,5 +1,5 @@
1
- import { PikkuInteraction, SessionServices } from '../../../types/core.types.js'
2
- import { closeSessionServices } from '../../../utils.js'
1
+ import { PikkuWire, WireServices } from '../../../types/core.types.js'
2
+ import { closeWireServices } from '../../../utils.js'
3
3
  import { processMessageHandlers } from '../channel-handler.js'
4
4
  import { openChannel } from '../channel-runner.js'
5
5
  import type {
@@ -8,15 +8,14 @@ import type {
8
8
  RunChannelParams,
9
9
  PikkuChannelHandlerFactory,
10
10
  } from '../channel.types.js'
11
- import { createHTTPInteraction } from '../../http/http-runner.js'
11
+ import { createHTTPWire } from '../../http/http-runner.js'
12
12
  import { ChannelStore } from '../channel-store.js'
13
13
  import { handleHTTPError } from '../../../handle-error.js'
14
- import { PikkuUserSessionService } from '../../../services/user-session-service.js'
14
+ import { PikkuSessionService } from '../../../services/user-session-service.js'
15
15
  import { pikkuState } from '../../../pikku-state.js'
16
16
  import { PikkuFetchHTTPRequest } from '../../http/pikku-fetch-http-request.js'
17
17
  import { PikkuHTTP } from '../../http/http.types.js'
18
18
  import { runChannelLifecycleWithMiddleware } from '../channel-common.js'
19
- import { rpcService } from '../../rpc/rpc-runner.js'
20
19
 
21
20
  export interface RunServerlessChannelParams<ChannelData>
22
21
  extends RunChannelParams<ChannelData> {
@@ -66,7 +65,7 @@ export const runChannelConnect = async ({
66
65
  request,
67
66
  response,
68
67
  route,
69
- createSessionServices,
68
+ createWireServices,
70
69
  channelStore,
71
70
  channelHandlerFactory,
72
71
  coerceDataFromSchema = true,
@@ -76,18 +75,18 @@ export const runChannelConnect = async ({
76
75
  }: Pick<CoreChannel<unknown, any>, 'route'> &
77
76
  RunChannelOptions &
78
77
  RunServerlessChannelParams<unknown>) => {
79
- let sessionServices: SessionServices | undefined
78
+ let wireServices: WireServices | undefined
80
79
 
81
80
  let http: PikkuHTTP | undefined
82
81
  if (request instanceof Request) {
83
- http = createHTTPInteraction(new PikkuFetchHTTPRequest(request), response)
82
+ http = createHTTPWire(new PikkuFetchHTTPRequest(request), response)
84
83
  }
85
84
 
86
- const userSession = new PikkuUserSessionService(channelStore, channelId)
85
+ const userSession = new PikkuSessionService(channelStore, channelId)
87
86
 
88
87
  const { channelConfig, openingData, meta } = await openChannel({
89
88
  channelId,
90
- createSessionServices,
89
+ createWireServices,
91
90
  request,
92
91
  route,
93
92
  singletonServices,
@@ -107,26 +106,17 @@ export const runChannelConnect = async ({
107
106
  channelHandlerFactory,
108
107
  channelName: channelConfig.name,
109
108
  })
110
- if (createSessionServices) {
111
- sessionServices = await createSessionServices(
112
- singletonServices,
113
- { http },
114
- await userSession.get()
115
- )
109
+
110
+ const wire: PikkuWire = { channel, session: userSession }
111
+
112
+ if (createWireServices) {
113
+ wireServices = await createWireServices(singletonServices, wire)
116
114
  }
117
115
 
118
- const interaction: PikkuInteraction = { channel }
119
- const getAllServices = (requiresAuth?: boolean) =>
120
- rpcService.injectRPCService(
121
- {
122
- ...singletonServices,
123
- ...sessionServices,
124
- channel,
125
- userSession,
126
- },
127
- interaction,
128
- requiresAuth
129
- )
116
+ const services = {
117
+ ...singletonServices,
118
+ ...wireServices,
119
+ }
130
120
 
131
121
  if (channelConfig.onConnect && meta.connect) {
132
122
  await runChannelLifecycleWithMiddleware({
@@ -134,7 +124,7 @@ export const runChannelConnect = async ({
134
124
  meta: meta.connect,
135
125
  lifecycleConfig: channelConfig.onConnect,
136
126
  lifecycleType: 'connect',
137
- services: getAllServices(false),
127
+ services,
138
128
  channel,
139
129
  data: openingData,
140
130
  })
@@ -151,8 +141,8 @@ export const runChannelConnect = async ({
151
141
  bubbleErrors
152
142
  )
153
143
  } finally {
154
- if (sessionServices) {
155
- await closeSessionServices(singletonServices.logger, sessionServices)
144
+ if (wireServices) {
145
+ await closeWireServices(singletonServices.logger, wireServices)
156
146
  }
157
147
  }
158
148
  }
@@ -161,7 +151,7 @@ export const runChannelDisconnect = async ({
161
151
  singletonServices,
162
152
  ...params
163
153
  }: RunServerlessChannelParams<unknown>): Promise<void> => {
164
- let sessionServices: SessionServices | undefined
154
+ let wireServices: WireServices | undefined
165
155
 
166
156
  // Try to get channel from store. In serverless environments (especially with
167
157
  // serverless-offline or worker threads), disconnect can be called multiple times
@@ -185,30 +175,21 @@ export const runChannelDisconnect = async ({
185
175
  openingData,
186
176
  channelName,
187
177
  })
188
- const userSession = new PikkuUserSessionService(
178
+ const userSession = new PikkuSessionService(
189
179
  params.channelStore,
190
180
  params.channelId
191
181
  )
192
- if (!sessionServices && params.createSessionServices) {
193
- sessionServices = await params.createSessionServices(
194
- singletonServices,
195
- { channel },
196
- session
197
- )
182
+ userSession.setInitial(session)
183
+ const wire: PikkuWire = { channel, session: userSession }
184
+
185
+ if (!wireServices && params.createWireServices) {
186
+ wireServices = await params.createWireServices(singletonServices, wire)
198
187
  }
199
188
 
200
- const interaction: PikkuInteraction = { channel }
201
- const getAllServices = (requiresAuth?: boolean) =>
202
- rpcService.injectRPCService(
203
- {
204
- ...singletonServices,
205
- ...sessionServices,
206
- channel,
207
- userSession,
208
- },
209
- interaction,
210
- requiresAuth
211
- )
189
+ const services = {
190
+ ...singletonServices,
191
+ ...wireServices,
192
+ }
212
193
 
213
194
  if (channelConfig.onDisconnect && meta.disconnect) {
214
195
  try {
@@ -217,7 +198,7 @@ export const runChannelDisconnect = async ({
217
198
  meta: meta.disconnect,
218
199
  lifecycleConfig: channelConfig.onDisconnect,
219
200
  lifecycleType: 'disconnect',
220
- services: getAllServices(false),
201
+ services,
221
202
  channel,
222
203
  })
223
204
  } catch (e: any) {
@@ -227,8 +208,8 @@ export const runChannelDisconnect = async ({
227
208
  }
228
209
  }
229
210
  await params.channelStore.removeChannels([channel.channelId])
230
- if (sessionServices) {
231
- await closeSessionServices(singletonServices.logger, sessionServices)
211
+ if (wireServices) {
212
+ await closeWireServices(singletonServices.logger, wireServices)
232
213
  }
233
214
  }
234
215
 
@@ -236,7 +217,7 @@ export const runChannelMessage = async (
236
217
  { singletonServices, ...params }: RunServerlessChannelParams<unknown>,
237
218
  data: unknown
238
219
  ): Promise<unknown> => {
239
- let sessionServices: SessionServices | undefined
220
+ let wireServices: WireServices | undefined
240
221
  const { openingData, channelName, session } =
241
222
  await params.channelStore.getChannelAndSession(params.channelId)
242
223
 
@@ -245,36 +226,29 @@ export const runChannelMessage = async (
245
226
  openingData,
246
227
  channelName,
247
228
  })
248
- const userSession = new PikkuUserSessionService(
229
+ const userSession = new PikkuSessionService(
249
230
  params.channelStore,
250
231
  params.channelId
251
232
  )
252
- if (params.createSessionServices) {
253
- sessionServices = await params.createSessionServices(
254
- singletonServices,
255
- { channel },
256
- session
257
- )
233
+ userSession.setInitial(session)
234
+ const wire: PikkuWire = { channel, session: userSession }
235
+
236
+ if (params.createWireServices) {
237
+ wireServices = await params.createWireServices(singletonServices, wire)
258
238
  }
259
239
 
260
- const interaction: PikkuInteraction = { channel }
261
- const getAllServices = () =>
262
- rpcService.injectRPCService(
263
- {
264
- ...singletonServices,
265
- ...sessionServices,
266
- channel,
267
- userSession,
268
- },
269
- interaction
270
- )
240
+ const services = {
241
+ ...singletonServices,
242
+ ...wireServices,
243
+ }
271
244
 
272
245
  let response: unknown
273
246
  try {
274
247
  const onMessage = processMessageHandlers(
275
- getAllServices(),
248
+ services,
276
249
  channelConfig,
277
- channelHandler
250
+ channelHandler,
251
+ userSession
278
252
  )
279
253
  response = await onMessage(data)
280
254
  } catch (e: any) {
@@ -283,8 +257,8 @@ export const runChannelMessage = async (
283
257
  )
284
258
  return { error: e.message || 'Unknown error' }
285
259
  } finally {
286
- if (sessionServices) {
287
- await closeSessionServices(singletonServices.logger, sessionServices)
260
+ if (wireServices) {
261
+ await closeWireServices(singletonServices.logger, wireServices)
288
262
  }
289
263
  }
290
264
  return response
@@ -8,7 +8,7 @@ import { addFunction } from '../../function/function-runner.js'
8
8
 
9
9
  describe('CLI Runner', () => {
10
10
  let singletonServices: any
11
- let createSessionServices: any
11
+ let createWireServices: any
12
12
 
13
13
  beforeEach(() => {
14
14
  resetPikkuState()
@@ -21,7 +21,7 @@ describe('CLI Runner', () => {
21
21
  },
22
22
  }
23
23
 
24
- createSessionServices = async () => ({})
24
+ createWireServices = async () => ({})
25
25
  })
26
26
 
27
27
  afterEach(() => {
@@ -78,7 +78,7 @@ describe('CLI Runner', () => {
78
78
 
79
79
  test('should execute command function with merged data', async () => {
80
80
  let receivedData: any
81
- const testFunc = async (_services: any, data: any) => {
81
+ const testFunc = async (_services: any, data: any, _wire: any) => {
82
82
  receivedData = data
83
83
  return { success: true }
84
84
  }
@@ -136,7 +136,7 @@ describe('CLI Runner', () => {
136
136
 
137
137
  const testMiddleware: CorePikkuMiddleware = async (
138
138
  _services,
139
- _interaction,
139
+ _wire,
140
140
  next
141
141
  ) => {
142
142
  executionOrder.push('middleware')
@@ -199,10 +199,10 @@ describe('CLI Runner', () => {
199
199
 
200
200
  const testMiddleware: CorePikkuMiddleware = async (
201
201
  _services,
202
- interaction,
202
+ wire,
203
203
  next
204
204
  ) => {
205
- cliContext = interaction.cli
205
+ cliContext = wire.cli
206
206
  await next()
207
207
  }
208
208
 
@@ -295,7 +295,7 @@ describe('CLI Runner', () => {
295
295
  commandPath: ['secure'],
296
296
  data: {},
297
297
  singletonServices,
298
- createSessionServices,
298
+ createWireServices,
299
299
  }),
300
300
  /Authentication required/
301
301
  )
@@ -1,13 +1,7 @@
1
1
  import { NotFoundError } from '../../errors/errors.js'
2
2
  import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
3
3
  import { pikkuState } from '../../pikku-state.js'
4
- import {
5
- CorePikkuMiddleware,
6
- CoreUserSession,
7
- SessionServices,
8
- PikkuWiringTypes,
9
- } from '../../types/core.types.js'
10
- import { closeSessionServices } from '../../utils.js'
4
+ import { CorePikkuMiddleware, CoreUserSession } from '../../types/core.types.js'
11
5
  import {
12
6
  CoreCLI,
13
7
  CLICommandMeta,
@@ -20,14 +14,13 @@ import {
20
14
  import type {
21
15
  CoreSingletonServices,
22
16
  CoreServices,
23
- CreateSessionServices,
24
- PikkuInteraction,
17
+ CreateWireServices,
18
+ PikkuWire,
25
19
  CreateConfig,
26
20
  CreateSingletonServices,
27
21
  } from '../../types/core.types.js'
28
22
  import { PikkuChannel } from '../channel/channel.types.js'
29
- import { rpcService } from '../rpc/rpc-runner.js'
30
- import { PikkuUserSessionService } from '../../services/user-session-service.js'
23
+ import { PikkuSessionService } from '../../services/user-session-service.js'
31
24
  import { LocalVariablesService } from '../../services/local-variables.js'
32
25
  import { generateCommandHelp, parseCLIArguments } from './command-parser.js'
33
26
 
@@ -247,13 +240,13 @@ export async function runCLICommand({
247
240
  commandPath,
248
241
  data,
249
242
  singletonServices,
250
- createSessionServices,
243
+ createWireServices,
251
244
  }: {
252
245
  program: string
253
246
  commandPath: string[]
254
247
  data: Record<string, any>
255
248
  singletonServices: CoreSingletonServices
256
- createSessionServices?: CreateSessionServices
249
+ createWireServices?: CreateWireServices
257
250
  }): Promise<any> {
258
251
  // Get the command metadata to find the function name
259
252
  const cliMeta = pikkuState('cli', 'meta')
@@ -329,57 +322,31 @@ export async function runCLICommand({
329
322
  state: 'open',
330
323
  }
331
324
 
332
- const userSession = new PikkuUserSessionService<CoreUserSession>()
333
- let sessionServices: SessionServices | undefined
325
+ const userSession = new PikkuSessionService<CoreUserSession>()
334
326
 
335
- const interaction: PikkuInteraction = {
327
+ const wire: PikkuWire = {
336
328
  cli: {
337
329
  program,
338
330
  command: commandPath,
339
331
  data: pluckedData,
340
332
  channel,
341
333
  },
342
- }
343
-
344
- const getAllServices = async (session?: CoreUserSession) => {
345
- // Create session-specific services for handling the command
346
- sessionServices = await createSessionServices?.(
347
- singletonServices,
348
- interaction,
349
- session
350
- )
351
-
352
- return rpcService.injectRPCService(
353
- {
354
- ...singletonServices,
355
- ...sessionServices,
356
- userSession,
357
- channel,
358
- },
359
- interaction,
360
- false
361
- )
334
+ session: userSession,
362
335
  }
363
336
 
364
337
  try {
365
- const result = await runPikkuFunc(
366
- PikkuWiringTypes.cli,
367
- commandId,
368
- funcName,
369
- {
370
- singletonServices,
371
- getAllServices,
372
- data: pluckedData,
373
- auth: false,
374
- userSession,
375
- inheritedMiddleware: currentCommand.middleware,
376
- wireMiddleware: allWireMiddleware,
377
- inheritedPermissions: currentCommand.permissions,
378
- wirePermissions: undefined,
379
- tags: programData?.tags,
380
- interaction,
381
- }
382
- )
338
+ const result = await runPikkuFunc('cli', commandId, funcName, {
339
+ singletonServices,
340
+ createWireServices,
341
+ data: pluckedData,
342
+ auth: false,
343
+ inheritedMiddleware: currentCommand.middleware,
344
+ wireMiddleware: allWireMiddleware,
345
+ inheritedPermissions: currentCommand.permissions,
346
+ wirePermissions: undefined,
347
+ tags: programData?.tags,
348
+ wire,
349
+ })
383
350
 
384
351
  // Apply renderer one final time with the final output (if renderer exists)
385
352
  if (renderer) {
@@ -392,11 +359,6 @@ export async function runCLICommand({
392
359
  } finally {
393
360
  // Close the channel
394
361
  channel.close()
395
-
396
- // Clean up session services
397
- if (sessionServices) {
398
- await closeSessionServices(singletonServices.logger, sessionServices)
399
- }
400
362
  }
401
363
  }
402
364
 
@@ -428,13 +390,13 @@ export async function executeCLI({
428
390
  args,
429
391
  createConfig,
430
392
  createSingletonServices,
431
- createSessionServices,
393
+ createWireServices,
432
394
  }: {
433
395
  programName: string
434
396
  args?: string[]
435
397
  createConfig: CreateConfig<any, any>
436
398
  createSingletonServices: CreateSingletonServices<any, any>
437
- createSessionServices?: CreateSessionServices<any, any, any>
399
+ createWireServices?: CreateWireServices<any, any, any>
438
400
  }): Promise<void> {
439
401
  if (!args) {
440
402
  throw new Error(
@@ -518,7 +480,7 @@ export async function executeCLI({
518
480
  commandPath: parsed.commandPath,
519
481
  data,
520
482
  singletonServices,
521
- createSessionServices,
483
+ createWireServices,
522
484
  })
523
485
  } catch (error: any) {
524
486
  // Re-throw CLIError as-is