@pikku/core 0.10.2 → 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 +19 -0
- 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 +23 -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/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/middleware/auth-apikey.d.ts +1 -0
- package/dist/middleware/auth-apikey.js +3 -3
- package/dist/middleware/auth-bearer.d.ts +1 -0
- package/dist/middleware/auth-bearer.js +3 -3
- package/dist/middleware/auth-cookie.d.ts +1 -0
- package/dist/middleware/auth-cookie.js +5 -5
- package/dist/middleware/timeout.d.ts +1 -0
- package/dist/middleware/timeout.js +3 -2
- package/dist/middleware-runner.d.ts +3 -6
- package/dist/middleware-runner.js +11 -11
- package/dist/permissions.d.ts +6 -6
- package/dist/permissions.js +15 -15
- package/dist/pikku-state.d.ts +7 -2
- package/dist/pikku-state.js +4 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +1 -0
- package/dist/services/scheduler-service.d.ts +63 -0
- package/dist/services/scheduler-service.js +6 -0
- package/dist/services/user-session-service.d.ts +7 -3
- package/dist/services/user-session-service.js +8 -1
- package/dist/time-utils.d.ts +14 -0
- package/dist/time-utils.js +62 -0
- package/dist/types/core.types.d.ts +48 -35
- package/dist/types/core.types.js +3 -13
- 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/channel/cli-channel-runner.js +1 -1
- package/dist/wirings/cli/cli-runner.d.ts +5 -5
- package/dist/wirings/cli/cli-runner.js +11 -29
- 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 -14
- package/dist/wirings/queue/queue.types.d.ts +4 -13
- 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 +13 -7
- package/dist/wirings/rpc/rpc-runner.js +50 -26
- package/dist/wirings/rpc/rpc-types.d.ts +1 -0
- 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 +15 -0
- package/dist/wirings/workflow/index.js +14 -0
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +160 -0
- package/dist/wirings/workflow/pikku-workflow-service.js +430 -0
- package/dist/wirings/workflow/workflow-runner.d.ts +34 -0
- package/dist/wirings/workflow/workflow-runner.js +65 -0
- package/dist/wirings/workflow/workflow.types.d.ts +332 -0
- package/dist/wirings/workflow/workflow.types.js +1 -0
- package/package.json +3 -4
- 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 +69 -51
- package/src/handle-error.ts +1 -1
- package/src/index.ts +2 -0
- 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 -15
- package/src/permissions.test.ts +41 -45
- package/src/permissions.ts +21 -20
- package/src/pikku-state.ts +14 -2
- package/src/services/index.ts +1 -0
- package/src/services/scheduler-service.ts +76 -0
- package/src/services/user-session-service.ts +14 -4
- package/src/time-utils.ts +75 -0
- package/src/types/core.types.ts +92 -51
- 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/channel/cli-channel-runner.ts +1 -1
- package/src/wirings/cli/cli-runner.test.ts +7 -7
- package/src/wirings/cli/cli-runner.ts +25 -63
- 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 -24
- package/src/wirings/queue/queue.types.ts +5 -15
- package/src/wirings/rpc/index.ts +1 -1
- package/src/wirings/rpc/rpc-runner.ts +71 -32
- package/src/wirings/rpc/rpc-types.ts +1 -0
- 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 +43 -0
- package/src/wirings/workflow/pikku-workflow-service.ts +746 -0
- package/src/wirings/workflow/workflow-runner.ts +72 -0
- package/src/wirings/workflow/workflow.types.ts +422 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/services/file-channel-store.d.ts +0 -19
- package/dist/services/file-channel-store.js +0 -69
- package/dist/services/file-eventhub-store.d.ts +0 -17
- package/dist/services/file-eventhub-store.js +0 -71
- package/src/services/file-channel-store.ts +0 -86
- package/src/services/file-eventhub-store.ts +0 -90
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
runMiddleware,
|
|
7
7
|
} from './middleware-runner.js'
|
|
8
8
|
import { resetPikkuState } from './pikku-state.js'
|
|
9
|
-
import { CorePikkuMiddleware
|
|
9
|
+
import { CorePikkuMiddleware } from './types/core.types.js'
|
|
10
10
|
|
|
11
11
|
beforeEach(() => {
|
|
12
12
|
resetPikkuState()
|
|
@@ -14,50 +14,39 @@ beforeEach(() => {
|
|
|
14
14
|
|
|
15
15
|
describe('combineMiddleware', () => {
|
|
16
16
|
test('should return empty array when no parameters provided', () => {
|
|
17
|
-
const result = combineMiddleware(
|
|
18
|
-
PikkuWiringTypes.http,
|
|
19
|
-
Math.random().toString()
|
|
20
|
-
)
|
|
17
|
+
const result = combineMiddleware('http', Math.random().toString())
|
|
21
18
|
assert.deepEqual(result, [])
|
|
22
19
|
})
|
|
23
20
|
|
|
24
21
|
test('should return empty array when all parameters are undefined', () => {
|
|
25
|
-
const result = combineMiddleware(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
funcMiddleware: undefined,
|
|
32
|
-
funcTags: undefined,
|
|
33
|
-
}
|
|
34
|
-
)
|
|
22
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
23
|
+
wiringMiddleware: undefined,
|
|
24
|
+
wiringTags: undefined,
|
|
25
|
+
funcMiddleware: undefined,
|
|
26
|
+
funcTags: undefined,
|
|
27
|
+
})
|
|
35
28
|
assert.deepEqual(result, [])
|
|
36
29
|
})
|
|
37
30
|
|
|
38
31
|
test('should combine wiring middleware only', () => {
|
|
39
32
|
const mockMiddleware1: CorePikkuMiddleware = async (
|
|
40
33
|
services,
|
|
41
|
-
|
|
34
|
+
wire,
|
|
42
35
|
next
|
|
43
36
|
) => {
|
|
44
37
|
await next()
|
|
45
38
|
}
|
|
46
39
|
const mockMiddleware2: CorePikkuMiddleware = async (
|
|
47
40
|
services,
|
|
48
|
-
|
|
41
|
+
wire,
|
|
49
42
|
next
|
|
50
43
|
) => {
|
|
51
44
|
await next()
|
|
52
45
|
}
|
|
53
46
|
|
|
54
|
-
const result = combineMiddleware(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
{
|
|
58
|
-
wireMiddleware: [mockMiddleware1, mockMiddleware2],
|
|
59
|
-
}
|
|
60
|
-
)
|
|
47
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
48
|
+
wireMiddleware: [mockMiddleware1, mockMiddleware2],
|
|
49
|
+
})
|
|
61
50
|
|
|
62
51
|
assert.equal(result.length, 2)
|
|
63
52
|
assert.equal(result[0], mockMiddleware1)
|
|
@@ -67,26 +56,22 @@ describe('combineMiddleware', () => {
|
|
|
67
56
|
test('should combine function middleware only', () => {
|
|
68
57
|
const mockMiddleware1: CorePikkuMiddleware = async (
|
|
69
58
|
services,
|
|
70
|
-
|
|
59
|
+
wire,
|
|
71
60
|
next
|
|
72
61
|
) => {
|
|
73
62
|
await next()
|
|
74
63
|
}
|
|
75
64
|
const mockMiddleware2: CorePikkuMiddleware = async (
|
|
76
65
|
services,
|
|
77
|
-
|
|
66
|
+
wire,
|
|
78
67
|
next
|
|
79
68
|
) => {
|
|
80
69
|
await next()
|
|
81
70
|
}
|
|
82
71
|
|
|
83
|
-
const result = combineMiddleware(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
{
|
|
87
|
-
funcMiddleware: [mockMiddleware1, mockMiddleware2],
|
|
88
|
-
}
|
|
89
|
-
)
|
|
72
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
73
|
+
funcMiddleware: [mockMiddleware1, mockMiddleware2],
|
|
74
|
+
})
|
|
90
75
|
|
|
91
76
|
assert.equal(result.length, 2)
|
|
92
77
|
assert.equal(result[0], mockMiddleware1)
|
|
@@ -97,14 +82,14 @@ describe('combineMiddleware', () => {
|
|
|
97
82
|
// Setup tagged middleware
|
|
98
83
|
const wiringTagMiddleware: CorePikkuMiddleware = async (
|
|
99
84
|
services,
|
|
100
|
-
|
|
85
|
+
wire,
|
|
101
86
|
next
|
|
102
87
|
) => {
|
|
103
88
|
await next()
|
|
104
89
|
}
|
|
105
90
|
const funcTagMiddleware: CorePikkuMiddleware = async (
|
|
106
91
|
services,
|
|
107
|
-
|
|
92
|
+
wire,
|
|
108
93
|
next
|
|
109
94
|
) => {
|
|
110
95
|
await next()
|
|
@@ -115,29 +100,25 @@ describe('combineMiddleware', () => {
|
|
|
115
100
|
|
|
116
101
|
const wiringMiddleware: CorePikkuMiddleware = async (
|
|
117
102
|
services,
|
|
118
|
-
|
|
103
|
+
wire,
|
|
119
104
|
next
|
|
120
105
|
) => {
|
|
121
106
|
await next()
|
|
122
107
|
}
|
|
123
108
|
const funcMiddleware: CorePikkuMiddleware = async (
|
|
124
109
|
services,
|
|
125
|
-
|
|
110
|
+
wire,
|
|
126
111
|
next
|
|
127
112
|
) => {
|
|
128
113
|
await next()
|
|
129
114
|
}
|
|
130
115
|
|
|
131
|
-
const result = combineMiddleware(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
{
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
funcInheritedMiddleware: [{ type: 'tag', tag: 'funcTag' }],
|
|
138
|
-
funcMiddleware: [funcMiddleware],
|
|
139
|
-
}
|
|
140
|
-
)
|
|
116
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
117
|
+
wireInheritedMiddleware: [{ type: 'tag', tag: 'wiringTag' }],
|
|
118
|
+
wireMiddleware: [wiringMiddleware],
|
|
119
|
+
funcInheritedMiddleware: [{ type: 'tag', tag: 'funcTag' }],
|
|
120
|
+
funcMiddleware: [funcMiddleware],
|
|
121
|
+
})
|
|
141
122
|
|
|
142
123
|
assert.equal(result.length, 4)
|
|
143
124
|
// Order: wireInheritedMiddleware (tags), wireMiddleware, funcInheritedMiddleware (tags), funcMiddleware
|
|
@@ -150,7 +131,7 @@ describe('combineMiddleware', () => {
|
|
|
150
131
|
test('should handle wiring tags only', () => {
|
|
151
132
|
const taggedMiddleware: CorePikkuMiddleware = async (
|
|
152
133
|
services,
|
|
153
|
-
|
|
134
|
+
wire,
|
|
154
135
|
next
|
|
155
136
|
) => {
|
|
156
137
|
await next()
|
|
@@ -158,13 +139,9 @@ describe('combineMiddleware', () => {
|
|
|
158
139
|
|
|
159
140
|
addMiddleware('testTag', [taggedMiddleware])
|
|
160
141
|
|
|
161
|
-
const result = combineMiddleware(
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
{
|
|
165
|
-
wireInheritedMiddleware: [{ type: 'tag', tag: 'testTag' }],
|
|
166
|
-
}
|
|
167
|
-
)
|
|
142
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
143
|
+
wireInheritedMiddleware: [{ type: 'tag', tag: 'testTag' }],
|
|
144
|
+
})
|
|
168
145
|
|
|
169
146
|
assert.equal(result.length, 1)
|
|
170
147
|
assert.equal(result[0], taggedMiddleware)
|
|
@@ -173,7 +150,7 @@ describe('combineMiddleware', () => {
|
|
|
173
150
|
test('should handle function tags only', () => {
|
|
174
151
|
const taggedMiddleware: CorePikkuMiddleware = async (
|
|
175
152
|
services,
|
|
176
|
-
|
|
153
|
+
wire,
|
|
177
154
|
next
|
|
178
155
|
) => {
|
|
179
156
|
await next()
|
|
@@ -181,47 +158,31 @@ describe('combineMiddleware', () => {
|
|
|
181
158
|
|
|
182
159
|
addMiddleware('funcTestTag', [taggedMiddleware])
|
|
183
160
|
|
|
184
|
-
const result = combineMiddleware(
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
{
|
|
188
|
-
funcInheritedMiddleware: [{ type: 'tag', tag: 'funcTestTag' }],
|
|
189
|
-
}
|
|
190
|
-
)
|
|
161
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
162
|
+
funcInheritedMiddleware: [{ type: 'tag', tag: 'funcTestTag' }],
|
|
163
|
+
})
|
|
191
164
|
|
|
192
165
|
assert.equal(result.length, 1)
|
|
193
166
|
assert.equal(result[0], taggedMiddleware)
|
|
194
167
|
})
|
|
195
168
|
|
|
196
169
|
test('should handle multiple tags', () => {
|
|
197
|
-
const middleware1: CorePikkuMiddleware = async (
|
|
198
|
-
services,
|
|
199
|
-
interaction,
|
|
200
|
-
next
|
|
201
|
-
) => {
|
|
170
|
+
const middleware1: CorePikkuMiddleware = async (services, wire, next) => {
|
|
202
171
|
await next()
|
|
203
172
|
}
|
|
204
|
-
const middleware2: CorePikkuMiddleware = async (
|
|
205
|
-
services,
|
|
206
|
-
interaction,
|
|
207
|
-
next
|
|
208
|
-
) => {
|
|
173
|
+
const middleware2: CorePikkuMiddleware = async (services, wire, next) => {
|
|
209
174
|
await next()
|
|
210
175
|
}
|
|
211
176
|
|
|
212
177
|
addMiddleware('tag1', [middleware1])
|
|
213
178
|
addMiddleware('tag2', [middleware2])
|
|
214
179
|
|
|
215
|
-
const result = combineMiddleware(
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
{ type: 'tag', tag: 'tag2' },
|
|
222
|
-
],
|
|
223
|
-
}
|
|
224
|
-
)
|
|
180
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
181
|
+
wireInheritedMiddleware: [
|
|
182
|
+
{ type: 'tag', tag: 'tag1' },
|
|
183
|
+
{ type: 'tag', tag: 'tag2' },
|
|
184
|
+
],
|
|
185
|
+
})
|
|
225
186
|
|
|
226
187
|
assert.equal(result.length, 2)
|
|
227
188
|
assert.equal(result[0], middleware1)
|
|
@@ -229,29 +190,19 @@ describe('combineMiddleware', () => {
|
|
|
229
190
|
})
|
|
230
191
|
|
|
231
192
|
test('should ignore non-existent tags', () => {
|
|
232
|
-
const middleware: CorePikkuMiddleware = async (
|
|
233
|
-
services,
|
|
234
|
-
interaction,
|
|
235
|
-
next
|
|
236
|
-
) => {
|
|
193
|
+
const middleware: CorePikkuMiddleware = async (services, wire, next) => {
|
|
237
194
|
await next()
|
|
238
195
|
}
|
|
239
196
|
|
|
240
197
|
addMiddleware('existingTag', [middleware])
|
|
241
198
|
|
|
242
|
-
const result = combineMiddleware(
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
],
|
|
250
|
-
funcInheritedMiddleware: [
|
|
251
|
-
{ type: 'tag', tag: 'anotherNonExistentTag' },
|
|
252
|
-
],
|
|
253
|
-
}
|
|
254
|
-
)
|
|
199
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
200
|
+
wireInheritedMiddleware: [
|
|
201
|
+
{ type: 'tag', tag: 'existingTag' },
|
|
202
|
+
{ type: 'tag', tag: 'nonExistentTag' },
|
|
203
|
+
],
|
|
204
|
+
funcInheritedMiddleware: [{ type: 'tag', tag: 'anotherNonExistentTag' }],
|
|
205
|
+
})
|
|
255
206
|
|
|
256
207
|
assert.equal(result.length, 1)
|
|
257
208
|
assert.equal(result[0], middleware)
|
|
@@ -262,20 +213,12 @@ describe('runMiddleware', () => {
|
|
|
262
213
|
test('should deduplicate middleware using Set', async () => {
|
|
263
214
|
const executionOrder: string[] = []
|
|
264
215
|
|
|
265
|
-
const middleware1: CorePikkuMiddleware = async (
|
|
266
|
-
services,
|
|
267
|
-
interaction,
|
|
268
|
-
next
|
|
269
|
-
) => {
|
|
216
|
+
const middleware1: CorePikkuMiddleware = async (services, wire, next) => {
|
|
270
217
|
executionOrder.push('middleware1')
|
|
271
218
|
await next()
|
|
272
219
|
}
|
|
273
220
|
|
|
274
|
-
const middleware2: CorePikkuMiddleware = async (
|
|
275
|
-
services,
|
|
276
|
-
interaction,
|
|
277
|
-
next
|
|
278
|
-
) => {
|
|
221
|
+
const middleware2: CorePikkuMiddleware = async (services, wire, next) => {
|
|
279
222
|
executionOrder.push('middleware2')
|
|
280
223
|
await next()
|
|
281
224
|
}
|
|
@@ -283,7 +226,7 @@ describe('runMiddleware', () => {
|
|
|
283
226
|
await runMiddleware(
|
|
284
227
|
{} as any,
|
|
285
228
|
{} as any,
|
|
286
|
-
combineMiddleware(
|
|
229
|
+
combineMiddleware('rpc', Math.random().toString(), {
|
|
287
230
|
wireMiddleware: [middleware1, middleware2, middleware1, middleware2],
|
|
288
231
|
}),
|
|
289
232
|
async () => {
|
|
@@ -298,21 +241,13 @@ describe('runMiddleware', () => {
|
|
|
298
241
|
test('should execute middleware in correct order', async () => {
|
|
299
242
|
const executionOrder: string[] = []
|
|
300
243
|
|
|
301
|
-
const middleware1: CorePikkuMiddleware = async (
|
|
302
|
-
services,
|
|
303
|
-
interaction,
|
|
304
|
-
next
|
|
305
|
-
) => {
|
|
244
|
+
const middleware1: CorePikkuMiddleware = async (services, wire, next) => {
|
|
306
245
|
executionOrder.push('start1')
|
|
307
246
|
await next()
|
|
308
247
|
executionOrder.push('end1')
|
|
309
248
|
}
|
|
310
249
|
|
|
311
|
-
const middleware2: CorePikkuMiddleware = async (
|
|
312
|
-
services,
|
|
313
|
-
interaction,
|
|
314
|
-
next
|
|
315
|
-
) => {
|
|
250
|
+
const middleware2: CorePikkuMiddleware = async (services, wire, next) => {
|
|
316
251
|
executionOrder.push('start2')
|
|
317
252
|
await next()
|
|
318
253
|
executionOrder.push('end2')
|
|
@@ -349,11 +284,7 @@ describe('runMiddleware', () => {
|
|
|
349
284
|
test('should work without main function', async () => {
|
|
350
285
|
const executionOrder: string[] = []
|
|
351
286
|
|
|
352
|
-
const middleware: CorePikkuMiddleware = async (
|
|
353
|
-
services,
|
|
354
|
-
interaction,
|
|
355
|
-
next
|
|
356
|
-
) => {
|
|
287
|
+
const middleware: CorePikkuMiddleware = async (services, wire, next) => {
|
|
357
288
|
executionOrder.push('middleware')
|
|
358
289
|
await next()
|
|
359
290
|
}
|
package/src/middleware-runner.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { UserSessionService } from './services/user-session-service.js'
|
|
2
1
|
import {
|
|
3
2
|
CoreSingletonServices,
|
|
4
|
-
|
|
3
|
+
PikkuWire,
|
|
5
4
|
CorePikkuMiddleware,
|
|
6
5
|
CorePikkuMiddlewareGroup,
|
|
7
6
|
PikkuWiringTypes,
|
|
@@ -14,7 +13,7 @@ import { freezeDedupe } from './utils.js'
|
|
|
14
13
|
* Runs a chain of middleware functions in sequence before executing the main function.
|
|
15
14
|
*
|
|
16
15
|
* @param services - An object containing services (e.g., singletonServices, userSession, etc.)
|
|
17
|
-
* @param
|
|
16
|
+
* @param wire - The wire context, e.g., { http }.
|
|
18
17
|
* @param middlewares - An array of middleware functions to run.
|
|
19
18
|
* @param main - The main function to execute after all middleware have run.
|
|
20
19
|
* @returns A promise resolving to the result of the main function.
|
|
@@ -28,10 +27,8 @@ import { freezeDedupe } from './utils.js'
|
|
|
28
27
|
* );
|
|
29
28
|
*/
|
|
30
29
|
export const runMiddleware = async <Middleware extends CorePikkuMiddleware>(
|
|
31
|
-
services: CoreSingletonServices
|
|
32
|
-
|
|
33
|
-
},
|
|
34
|
-
interaction: PikkuInteraction,
|
|
30
|
+
services: CoreSingletonServices,
|
|
31
|
+
wire: PikkuWire,
|
|
35
32
|
middlewares: readonly Middleware[],
|
|
36
33
|
main?: () => Promise<unknown>
|
|
37
34
|
): Promise<unknown> => {
|
|
@@ -39,7 +36,7 @@ export const runMiddleware = async <Middleware extends CorePikkuMiddleware>(
|
|
|
39
36
|
let result: any
|
|
40
37
|
const dispatch = async (index: number): Promise<any> => {
|
|
41
38
|
if (middlewares && index < middlewares.length) {
|
|
42
|
-
return await middlewares[index]!(services as any,
|
|
39
|
+
return await middlewares[index]!(services as any, wire, () =>
|
|
43
40
|
dispatch(index + 1)
|
|
44
41
|
)
|
|
45
42
|
} else if (main) {
|
|
@@ -115,13 +112,14 @@ const middlewareCache: Record<
|
|
|
115
112
|
PikkuWiringTypes,
|
|
116
113
|
Record<string, readonly CorePikkuMiddleware[]>
|
|
117
114
|
> = {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
115
|
+
http: {},
|
|
116
|
+
rpc: {},
|
|
117
|
+
channel: {},
|
|
118
|
+
queue: {},
|
|
119
|
+
scheduler: {},
|
|
120
|
+
mcp: {},
|
|
121
|
+
cli: {},
|
|
122
|
+
workflow: {},
|
|
125
123
|
}
|
|
126
124
|
|
|
127
125
|
/**
|
package/src/permissions.test.ts
CHANGED
|
@@ -6,11 +6,7 @@ import {
|
|
|
6
6
|
runPermissions,
|
|
7
7
|
} from './permissions.js'
|
|
8
8
|
import { resetPikkuState } from './pikku-state.js'
|
|
9
|
-
import {
|
|
10
|
-
CoreServices,
|
|
11
|
-
CoreUserSession,
|
|
12
|
-
PikkuWiringTypes,
|
|
13
|
-
} from './types/core.types.js'
|
|
9
|
+
import { CoreServices, CoreUserSession } from './types/core.types.js'
|
|
14
10
|
import { CorePermissionGroup } from './function/functions.types.js'
|
|
15
11
|
|
|
16
12
|
beforeEach(() => {
|
|
@@ -164,10 +160,10 @@ describe('getPermissionsForTags', () => {
|
|
|
164
160
|
describe('runPermissions', () => {
|
|
165
161
|
test('should pass when no permissions are defined', async () => {
|
|
166
162
|
// Should not throw
|
|
167
|
-
await runPermissions(
|
|
168
|
-
|
|
163
|
+
await runPermissions('rpc', Math.random().toString(), {
|
|
164
|
+
services: mockServices,
|
|
165
|
+
wire: {},
|
|
169
166
|
data: {},
|
|
170
|
-
session: mockSession,
|
|
171
167
|
})
|
|
172
168
|
})
|
|
173
169
|
|
|
@@ -180,11 +176,11 @@ describe('runPermissions', () => {
|
|
|
180
176
|
|
|
181
177
|
addPermission('wiringTag', [wiringTagPermission])
|
|
182
178
|
|
|
183
|
-
await runPermissions(
|
|
179
|
+
await runPermissions('rpc', Math.random().toString(), {
|
|
184
180
|
wireInheritedPermissions: [{ type: 'tag', tag: 'wiringTag' }],
|
|
185
|
-
|
|
181
|
+
services: mockServices,
|
|
182
|
+
wire: {},
|
|
186
183
|
data: {},
|
|
187
|
-
session: mockSession,
|
|
188
184
|
})
|
|
189
185
|
|
|
190
186
|
assert.deepEqual(executionOrder, ['wiringTag'])
|
|
@@ -223,14 +219,14 @@ describe('runPermissions', () => {
|
|
|
223
219
|
],
|
|
224
220
|
}
|
|
225
221
|
|
|
226
|
-
await runPermissions(
|
|
222
|
+
await runPermissions('rpc', Math.random().toString(), {
|
|
227
223
|
wireInheritedPermissions: [{ type: 'tag', tag: 'wiringTag' }],
|
|
228
224
|
wirePermissions,
|
|
229
225
|
funcInheritedPermissions: [{ type: 'tag', tag: 'funcTag' }],
|
|
230
226
|
funcPermissions,
|
|
231
|
-
|
|
227
|
+
services: mockServices,
|
|
228
|
+
wire: {},
|
|
232
229
|
data: {},
|
|
233
|
-
session: mockSession,
|
|
234
230
|
})
|
|
235
231
|
|
|
236
232
|
// Order: wireInheritedPermissions (wiringTag) → wirePermissions → funcInheritedPermissions (funcTag) → funcPermissions
|
|
@@ -249,11 +245,11 @@ describe('runPermissions', () => {
|
|
|
249
245
|
addPermission('atLeastOneTestTag', [failingPermission, passingPermission])
|
|
250
246
|
|
|
251
247
|
// Should not throw because at least one permission passes
|
|
252
|
-
await runPermissions(
|
|
248
|
+
await runPermissions('rpc', Math.random().toString(), {
|
|
253
249
|
wireInheritedPermissions: [{ type: 'tag', tag: 'atLeastOneTestTag' }],
|
|
254
|
-
|
|
250
|
+
services: mockServices,
|
|
251
|
+
wire: {},
|
|
255
252
|
data: {},
|
|
256
|
-
session: mockSession,
|
|
257
253
|
})
|
|
258
254
|
})
|
|
259
255
|
|
|
@@ -264,11 +260,11 @@ describe('runPermissions', () => {
|
|
|
264
260
|
addPermission('allFailTestTag', [failingPermission1, failingPermission2])
|
|
265
261
|
|
|
266
262
|
await assert.rejects(
|
|
267
|
-
runPermissions(
|
|
263
|
+
runPermissions('rpc', Math.random().toString(), {
|
|
268
264
|
wireInheritedPermissions: [{ type: 'tag', tag: 'allFailTestTag' }],
|
|
269
|
-
|
|
265
|
+
services: mockServices,
|
|
266
|
+
wire: {},
|
|
270
267
|
data: {},
|
|
271
|
-
session: mockSession,
|
|
272
268
|
}),
|
|
273
269
|
{
|
|
274
270
|
message: 'Permission denied',
|
|
@@ -282,11 +278,11 @@ describe('runPermissions', () => {
|
|
|
282
278
|
}
|
|
283
279
|
|
|
284
280
|
await assert.rejects(
|
|
285
|
-
runPermissions(
|
|
281
|
+
runPermissions('rpc', Math.random().toString(), {
|
|
286
282
|
wirePermissions,
|
|
287
|
-
|
|
283
|
+
services: mockServices,
|
|
284
|
+
wire: {},
|
|
288
285
|
data: {},
|
|
289
|
-
session: mockSession,
|
|
290
286
|
}),
|
|
291
287
|
{
|
|
292
288
|
message: 'Permission denied',
|
|
@@ -300,11 +296,11 @@ describe('runPermissions', () => {
|
|
|
300
296
|
addPermission('funcTag', [failingPermission])
|
|
301
297
|
|
|
302
298
|
await assert.rejects(
|
|
303
|
-
runPermissions(
|
|
299
|
+
runPermissions('rpc', Math.random().toString(), {
|
|
304
300
|
funcInheritedPermissions: [{ type: 'tag', tag: 'funcTag' }],
|
|
305
|
-
|
|
301
|
+
services: mockServices,
|
|
302
|
+
wire: {},
|
|
306
303
|
data: {},
|
|
307
|
-
session: mockSession,
|
|
308
304
|
}),
|
|
309
305
|
{
|
|
310
306
|
message: 'Permission denied',
|
|
@@ -318,11 +314,11 @@ describe('runPermissions', () => {
|
|
|
318
314
|
}
|
|
319
315
|
|
|
320
316
|
await assert.rejects(
|
|
321
|
-
runPermissions(
|
|
317
|
+
runPermissions('rpc', Math.random().toString(), {
|
|
322
318
|
funcPermissions,
|
|
323
|
-
|
|
319
|
+
services: mockServices,
|
|
320
|
+
wire: {},
|
|
324
321
|
data: {},
|
|
325
|
-
session: mockSession,
|
|
326
322
|
}),
|
|
327
323
|
{
|
|
328
324
|
message: 'Permission denied',
|
|
@@ -350,12 +346,12 @@ describe('runPermissions', () => {
|
|
|
350
346
|
}
|
|
351
347
|
|
|
352
348
|
// Should NOT throw because at least one permission (wirePermissions) passes
|
|
353
|
-
await runPermissions(
|
|
349
|
+
await runPermissions('rpc', Math.random().toString(), {
|
|
354
350
|
wireInheritedPermissions: [{ type: 'tag', tag: 'failingWiringTag' }],
|
|
355
351
|
wirePermissions,
|
|
356
|
-
|
|
352
|
+
services: mockServices,
|
|
353
|
+
wire: {},
|
|
357
354
|
data: {},
|
|
358
|
-
session: mockSession,
|
|
359
355
|
})
|
|
360
356
|
|
|
361
357
|
// Both permissions should be evaluated
|
|
@@ -368,11 +364,11 @@ describe('runPermissions', () => {
|
|
|
368
364
|
addPermission('arrayTestTag', arrayPermission)
|
|
369
365
|
|
|
370
366
|
// Should not throw because verifyPermissions handles array properly
|
|
371
|
-
await runPermissions(
|
|
367
|
+
await runPermissions('rpc', Math.random().toString(), {
|
|
372
368
|
wireInheritedPermissions: [{ type: 'tag', tag: 'arrayTestTag' }],
|
|
373
|
-
|
|
369
|
+
services: mockServices,
|
|
370
|
+
wire: {},
|
|
374
371
|
data: {},
|
|
375
|
-
session: mockSession,
|
|
376
372
|
})
|
|
377
373
|
})
|
|
378
374
|
|
|
@@ -384,23 +380,23 @@ describe('runPermissions', () => {
|
|
|
384
380
|
addPermission('objectTestTag', permissionGroup)
|
|
385
381
|
|
|
386
382
|
// Should not throw because verifyPermissions handles objects properly
|
|
387
|
-
await runPermissions(
|
|
383
|
+
await runPermissions('rpc', Math.random().toString(), {
|
|
388
384
|
wireInheritedPermissions: [{ type: 'tag', tag: 'objectTestTag' }],
|
|
389
|
-
|
|
385
|
+
services: mockServices,
|
|
386
|
+
wire: {},
|
|
390
387
|
data: {},
|
|
391
|
-
session: mockSession,
|
|
392
388
|
})
|
|
393
389
|
})
|
|
394
390
|
|
|
395
391
|
test('should pass correct parameters to permission functions', async () => {
|
|
396
392
|
let receivedServices: any
|
|
393
|
+
let receivedWire: any
|
|
397
394
|
let receivedData: any
|
|
398
|
-
let receivedSession: any
|
|
399
395
|
|
|
400
|
-
const testPermission = async (services: any, data: any,
|
|
396
|
+
const testPermission = async (services: any, data: any, wire: any) => {
|
|
401
397
|
receivedServices = services
|
|
402
398
|
receivedData = data
|
|
403
|
-
|
|
399
|
+
receivedWire = wire
|
|
404
400
|
return true
|
|
405
401
|
}
|
|
406
402
|
|
|
@@ -408,15 +404,15 @@ describe('runPermissions', () => {
|
|
|
408
404
|
|
|
409
405
|
addPermission('paramTestTag', [testPermission])
|
|
410
406
|
|
|
411
|
-
await runPermissions(
|
|
407
|
+
await runPermissions('rpc', Math.random().toString(), {
|
|
412
408
|
wireInheritedPermissions: [{ type: 'tag', tag: 'paramTestTag' }],
|
|
413
|
-
|
|
409
|
+
services: mockServices,
|
|
410
|
+
wire: {},
|
|
414
411
|
data: testData,
|
|
415
|
-
session: mockSession,
|
|
416
412
|
})
|
|
417
413
|
|
|
418
414
|
assert.equal(receivedServices, mockServices)
|
|
419
415
|
assert.equal(receivedData, testData)
|
|
420
|
-
assert.
|
|
416
|
+
assert.deepEqual(receivedWire, {})
|
|
421
417
|
})
|
|
422
418
|
})
|