@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.
- package/CHANGELOG.md +11 -1
- package/dist/errors/errors.d.ts +1 -1
- package/dist/errors/errors.js +3 -3
- package/dist/function/function-runner.d.ts +6 -7
- package/dist/function/function-runner.js +35 -16
- package/dist/function/functions.types.d.ts +22 -30
- package/dist/function/functions.types.js +9 -6
- package/dist/handle-error.d.ts +1 -1
- package/dist/handle-error.js +1 -1
- package/dist/middleware/auth-apikey.js +3 -3
- package/dist/middleware/auth-bearer.js +3 -3
- package/dist/middleware/auth-cookie.js +5 -5
- package/dist/middleware/timeout.js +3 -2
- package/dist/middleware-runner.d.ts +3 -6
- package/dist/middleware-runner.js +11 -12
- package/dist/permissions.d.ts +6 -6
- package/dist/permissions.js +15 -16
- package/dist/services/user-session-service.d.ts +7 -3
- package/dist/services/user-session-service.js +8 -1
- package/dist/types/core.types.d.ts +29 -38
- package/dist/types/core.types.js +3 -14
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +3 -3
- package/dist/wirings/channel/channel-common.js +2 -3
- package/dist/wirings/channel/channel-handler.d.ts +3 -2
- package/dist/wirings/channel/channel-handler.js +6 -9
- package/dist/wirings/channel/channel-runner.d.ts +2 -2
- package/dist/wirings/channel/channel.types.d.ts +10 -5
- package/dist/wirings/channel/local/local-channel-runner.d.ts +1 -1
- package/dist/wirings/channel/local/local-channel-runner.js +19 -26
- package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +1 -1
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +41 -46
- package/dist/wirings/cli/cli-runner.d.ts +5 -5
- package/dist/wirings/cli/cli-runner.js +10 -28
- package/dist/wirings/cli/cli.types.d.ts +15 -11
- package/dist/wirings/http/http-runner.d.ts +6 -6
- package/dist/wirings/http/http-runner.js +25 -39
- package/dist/wirings/http/http.types.d.ts +5 -10
- package/dist/wirings/mcp/mcp-runner.d.ts +2 -2
- package/dist/wirings/mcp/mcp-runner.js +12 -19
- package/dist/wirings/mcp/mcp.types.d.ts +6 -0
- package/dist/wirings/queue/queue-runner.d.ts +3 -3
- package/dist/wirings/queue/queue-runner.js +7 -17
- package/dist/wirings/queue/queue.types.d.ts +4 -11
- package/dist/wirings/rpc/rpc-runner.d.ts +10 -8
- package/dist/wirings/rpc/rpc-runner.js +36 -47
- package/dist/wirings/scheduler/scheduler-runner.d.ts +3 -3
- package/dist/wirings/scheduler/scheduler-runner.js +13 -24
- package/dist/wirings/scheduler/scheduler.types.d.ts +3 -8
- package/dist/wirings/workflow/index.d.ts +11 -2
- package/dist/wirings/workflow/index.js +10 -2
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +12 -4
- package/dist/wirings/workflow/pikku-workflow-service.js +61 -79
- package/dist/wirings/workflow/workflow-runner.d.ts +3 -4
- package/dist/wirings/workflow/workflow-runner.js +11 -14
- package/dist/wirings/workflow/workflow.types.d.ts +114 -29
- package/package.json +2 -2
- package/src/errors/errors.ts +3 -3
- package/src/factory-functions.test.ts +9 -36
- package/src/function/function-runner.test.ts +57 -68
- package/src/function/function-runner.ts +51 -28
- package/src/function/function-runner.ts.bak +188 -0
- package/src/function/functions.types.ts +68 -51
- package/src/handle-error.ts +1 -1
- package/src/middleware/auth-apikey.test.ts +360 -0
- package/src/middleware/auth-apikey.ts +3 -7
- package/src/middleware/auth-bearer.test.ts +447 -0
- package/src/middleware/auth-bearer.ts +27 -33
- package/src/middleware/auth-cookie.test.ts +525 -0
- package/src/middleware/auth-cookie.ts +6 -6
- package/src/middleware/timeout.ts +4 -2
- package/src/middleware-runner.test.ts +58 -127
- package/src/middleware-runner.ts +13 -16
- package/src/permissions.test.ts +41 -45
- package/src/permissions.ts +21 -21
- package/src/services/user-session-service.ts +14 -4
- package/src/types/core.types.ts +67 -55
- package/src/utils.ts +4 -4
- package/src/wirings/channel/channel-common.ts +4 -7
- package/src/wirings/channel/channel-handler.ts +16 -22
- package/src/wirings/channel/channel-runner.ts +2 -2
- package/src/wirings/channel/channel.types.ts +14 -11
- package/src/wirings/channel/local/local-channel-runner.test.ts +5 -3
- package/src/wirings/channel/local/local-channel-runner.ts +23 -38
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +51 -77
- package/src/wirings/cli/cli-runner.test.ts +7 -7
- package/src/wirings/cli/cli-runner.ts +24 -62
- package/src/wirings/cli/cli.types.ts +22 -16
- package/src/wirings/http/http-runner.test.ts +8 -8
- package/src/wirings/http/http-runner.ts +29 -56
- package/src/wirings/http/http.types.ts +5 -14
- package/src/wirings/mcp/mcp-runner.ts +23 -48
- package/src/wirings/mcp/mcp.types.ts +6 -0
- package/src/wirings/queue/queue-runner.test.ts +641 -0
- package/src/wirings/queue/queue-runner.ts +10 -32
- package/src/wirings/queue/queue.types.ts +4 -11
- package/src/wirings/rpc/rpc-runner.ts +41 -55
- package/src/wirings/scheduler/scheduler-runner.test.ts +627 -0
- package/src/wirings/scheduler/scheduler-runner.ts +24 -50
- package/src/wirings/scheduler/scheduler.types.ts +3 -9
- package/src/wirings/workflow/index.ts +24 -3
- package/src/wirings/workflow/pikku-workflow-service.ts +83 -93
- package/src/wirings/workflow/workflow-runner.ts +12 -25
- package/src/wirings/workflow/workflow.types.ts +144 -54
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { openChannel } from '../channel-runner.js'
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
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 {
|
|
11
|
+
import { PikkuWire, WireServices } from '../../../types/core.types.js'
|
|
12
12
|
import { handleHTTPError } from '../../../handle-error.js'
|
|
13
|
-
import {
|
|
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
|
-
|
|
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
|
|
32
|
+
let wireServices: WireServices<typeof singletonServices> | undefined
|
|
34
33
|
|
|
35
34
|
let channelHandler: PikkuLocalChannelHandler | undefined
|
|
36
|
-
const userSession = new
|
|
35
|
+
const userSession = new PikkuSessionService()
|
|
37
36
|
|
|
38
37
|
let http: PikkuHTTP | undefined
|
|
39
38
|
if (request) {
|
|
40
|
-
http =
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
89
|
-
|
|
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
|
|
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
|
|
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
|
|
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 (
|
|
142
|
-
await
|
|
125
|
+
if (wireServices) {
|
|
126
|
+
await closeWireServices(singletonServices.logger, wireServices)
|
|
143
127
|
}
|
|
144
128
|
})
|
|
145
129
|
|
|
146
130
|
const onMessage = processMessageHandlers(
|
|
147
|
-
|
|
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 (
|
|
172
|
-
await
|
|
156
|
+
if (wireServices) {
|
|
157
|
+
await closeWireServices(singletonServices.logger, wireServices)
|
|
173
158
|
}
|
|
174
159
|
}
|
|
175
160
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
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
|
|
78
|
+
let wireServices: WireServices | undefined
|
|
80
79
|
|
|
81
80
|
let http: PikkuHTTP | undefined
|
|
82
81
|
if (request instanceof Request) {
|
|
83
|
-
http =
|
|
82
|
+
http = createHTTPWire(new PikkuFetchHTTPRequest(request), response)
|
|
84
83
|
}
|
|
85
84
|
|
|
86
|
-
const userSession = new
|
|
85
|
+
const userSession = new PikkuSessionService(channelStore, channelId)
|
|
87
86
|
|
|
88
87
|
const { channelConfig, openingData, meta } = await openChannel({
|
|
89
88
|
channelId,
|
|
90
|
-
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
|
119
|
-
|
|
120
|
-
|
|
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
|
|
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 (
|
|
155
|
-
await
|
|
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
|
|
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
|
|
178
|
+
const userSession = new PikkuSessionService(
|
|
189
179
|
params.channelStore,
|
|
190
180
|
params.channelId
|
|
191
181
|
)
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
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
|
|
201
|
-
|
|
202
|
-
|
|
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
|
|
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 (
|
|
231
|
-
await
|
|
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
|
|
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
|
|
229
|
+
const userSession = new PikkuSessionService(
|
|
249
230
|
params.channelStore,
|
|
250
231
|
params.channelId
|
|
251
232
|
)
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
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
|
|
261
|
-
|
|
262
|
-
|
|
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
|
-
|
|
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 (
|
|
287
|
-
await
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
202
|
+
wire,
|
|
203
203
|
next
|
|
204
204
|
) => {
|
|
205
|
-
cliContext =
|
|
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
|
-
|
|
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
|
-
|
|
24
|
-
|
|
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 {
|
|
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
|
-
|
|
243
|
+
createWireServices,
|
|
251
244
|
}: {
|
|
252
245
|
program: string
|
|
253
246
|
commandPath: string[]
|
|
254
247
|
data: Record<string, any>
|
|
255
248
|
singletonServices: CoreSingletonServices
|
|
256
|
-
|
|
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
|
|
333
|
-
let sessionServices: SessionServices | undefined
|
|
325
|
+
const userSession = new PikkuSessionService<CoreUserSession>()
|
|
334
326
|
|
|
335
|
-
const
|
|
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
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
483
|
+
createWireServices,
|
|
522
484
|
})
|
|
523
485
|
} catch (error: any) {
|
|
524
486
|
// Re-throw CLIError as-is
|