@pikku/core 0.12.2 → 0.12.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/crypto-utils.d.ts +10 -0
- package/dist/crypto-utils.js +62 -0
- package/dist/function/function-runner.js +4 -4
- package/dist/function/functions.types.d.ts +26 -1
- package/dist/function/functions.types.js +16 -0
- package/dist/handle-error.d.ts +1 -1
- package/dist/handle-error.js +7 -3
- package/dist/index.d.ts +14 -2
- package/dist/index.js +1 -1
- package/dist/pikku-state.js +3 -1
- package/dist/schema.js +1 -1
- package/dist/services/in-memory-workflow-service.d.ts +22 -3
- package/dist/services/in-memory-workflow-service.js +77 -1
- package/dist/services/workflow-service.d.ts +8 -2
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.js +1 -0
- package/dist/testing/service-tests.d.ts +31 -0
- package/dist/testing/service-tests.js +598 -0
- package/dist/types/core.types.d.ts +9 -1
- package/dist/types/state.types.d.ts +4 -2
- package/dist/utils/hash.d.ts +2 -0
- package/dist/utils/hash.js +23 -0
- package/dist/wirings/ai-agent/agent-dynamic-workflow.d.ts +6 -0
- package/dist/wirings/ai-agent/agent-dynamic-workflow.js +348 -0
- package/dist/wirings/ai-agent/ai-agent-memory.d.ts +1 -1
- package/dist/wirings/ai-agent/ai-agent-memory.js +6 -5
- package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +10 -7
- package/dist/wirings/ai-agent/ai-agent-prepare.js +127 -47
- package/dist/wirings/ai-agent/ai-agent-runner.d.ts +4 -0
- package/dist/wirings/ai-agent/ai-agent-runner.js +381 -27
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +7 -2
- package/dist/wirings/ai-agent/ai-agent-stream.js +109 -46
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +22 -1
- package/dist/wirings/ai-agent/index.d.ts +1 -2
- package/dist/wirings/ai-agent/index.js +1 -2
- package/dist/wirings/channel/channel-handler.js +5 -1
- package/dist/wirings/channel/channel.types.d.ts +1 -7
- package/dist/wirings/channel/local/local-channel-handler.d.ts +1 -1
- package/dist/wirings/channel/local/local-channel-handler.js +5 -3
- package/dist/wirings/channel/local/local-channel-runner.js +14 -4
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +4 -1
- package/dist/wirings/cli/cli-runner.js +10 -2
- package/dist/wirings/cli/cli.types.d.ts +1 -0
- package/dist/wirings/http/http-routes.js +0 -1
- package/dist/wirings/http/http-runner.d.ts +1 -1
- package/dist/wirings/http/http-runner.js +25 -3
- package/dist/wirings/http/http.types.d.ts +3 -11
- package/dist/wirings/http/index.d.ts +2 -1
- package/dist/wirings/http/index.js +1 -0
- package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -0
- package/dist/wirings/http/pikku-fetch-http-request.js +3 -0
- package/dist/wirings/http/pikku-fetch-http-response.d.ts +1 -0
- package/dist/wirings/http/pikku-fetch-http-response.js +4 -4
- package/dist/wirings/http/web-request.d.ts +12 -0
- package/dist/wirings/http/web-request.js +85 -0
- package/dist/wirings/mcp/mcp-endpoint-registry.js +1 -1
- package/dist/wirings/mcp/mcp-runner.js +13 -1
- package/dist/wirings/rpc/rpc-runner.d.ts +30 -6
- package/dist/wirings/rpc/rpc-runner.js +36 -14
- package/dist/wirings/rpc/rpc-types.d.ts +6 -1
- package/dist/wirings/rpc/wire-addon.d.ts +1 -0
- package/dist/wirings/rpc/wire-addon.js +1 -1
- package/dist/wirings/scheduler/scheduler-runner.js +1 -0
- package/dist/wirings/workflow/graph/graph-validation.d.ts +3 -0
- package/dist/wirings/workflow/graph/graph-validation.js +175 -0
- package/dist/wirings/workflow/graph/index.d.ts +1 -0
- package/dist/wirings/workflow/graph/index.js +1 -0
- package/dist/wirings/workflow/index.d.ts +1 -1
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +8 -2
- package/dist/wirings/workflow/pikku-workflow-service.js +1 -2
- package/dist/wirings/workflow/workflow.types.d.ts +10 -1
- package/lcov.info +18891 -0
- package/package.json +4 -2
- package/dist/wirings/ai-agent/ai-agent-assistant-ui.d.ts +0 -5
- package/dist/wirings/ai-agent/ai-agent-assistant-ui.js +0 -168
- package/src/crypto-utils.test.ts +0 -116
- package/src/crypto-utils.ts +0 -99
- package/src/errors/error-handler.ts +0 -62
- package/src/errors/error.test.ts +0 -195
- package/src/errors/errors.ts +0 -374
- package/src/errors/index.ts +0 -2
- package/src/factory-functions.test.ts +0 -109
- package/src/function/function-runner.test.ts +0 -536
- package/src/function/function-runner.ts +0 -365
- package/src/function/functions.types.ts +0 -267
- package/src/function/index.ts +0 -5
- package/src/handle-error.test.ts +0 -361
- package/src/handle-error.ts +0 -65
- package/src/index.ts +0 -104
- package/src/internal.ts +0 -6
- package/src/middleware/auth-apikey.test.ts +0 -363
- package/src/middleware/auth-apikey.ts +0 -47
- package/src/middleware/auth-bearer.test.ts +0 -450
- package/src/middleware/auth-bearer.ts +0 -72
- package/src/middleware/auth-cookie.test.ts +0 -528
- package/src/middleware/auth-cookie.ts +0 -80
- package/src/middleware/cors.test.ts +0 -424
- package/src/middleware/cors.ts +0 -104
- package/src/middleware/index.ts +0 -5
- package/src/middleware/remote-auth.test.ts +0 -488
- package/src/middleware/remote-auth.ts +0 -68
- package/src/middleware/timeout.ts +0 -15
- package/src/middleware-runner.test.ts +0 -418
- package/src/middleware-runner.ts +0 -234
- package/src/permissions.test.ts +0 -434
- package/src/permissions.ts +0 -319
- package/src/pikku-request.ts +0 -23
- package/src/pikku-response.ts +0 -5
- package/src/pikku-state.test.ts +0 -224
- package/src/pikku-state.ts +0 -214
- package/src/run-tests-script.test.ts +0 -49
- package/src/schema.test.ts +0 -249
- package/src/schema.ts +0 -151
- package/src/services/ai-agent-runner-service.ts +0 -41
- package/src/services/ai-run-state-service.ts +0 -20
- package/src/services/ai-storage-service.ts +0 -39
- package/src/services/content-service.ts +0 -76
- package/src/services/deployment-service.ts +0 -22
- package/src/services/gateway-service.ts +0 -20
- package/src/services/gopass-secrets.ts +0 -98
- package/src/services/in-memory-ai-run-state-service.ts +0 -73
- package/src/services/in-memory-trigger-service.ts +0 -64
- package/src/services/in-memory-workflow-service.test.ts +0 -351
- package/src/services/in-memory-workflow-service.ts +0 -395
- package/src/services/index.ts +0 -56
- package/src/services/jwt-service.ts +0 -30
- package/src/services/local-content.ts +0 -120
- package/src/services/local-gateway-service.ts +0 -62
- package/src/services/local-secrets.test.ts +0 -80
- package/src/services/local-secrets.ts +0 -94
- package/src/services/local-variables.test.ts +0 -61
- package/src/services/local-variables.ts +0 -39
- package/src/services/logger-console.test.ts +0 -118
- package/src/services/logger-console.ts +0 -98
- package/src/services/logger.ts +0 -57
- package/src/services/scheduler-service.ts +0 -86
- package/src/services/schema-service.ts +0 -33
- package/src/services/scoped-secret-service.test.ts +0 -74
- package/src/services/scoped-secret-service.ts +0 -41
- package/src/services/secret-service.ts +0 -38
- package/src/services/trigger-service.ts +0 -17
- package/src/services/typed-secret-service.test.ts +0 -93
- package/src/services/typed-secret-service.ts +0 -70
- package/src/services/typed-variables-service.test.ts +0 -73
- package/src/services/typed-variables-service.ts +0 -81
- package/src/services/user-session-service.test.ts +0 -113
- package/src/services/user-session-service.ts +0 -86
- package/src/services/variables-service.ts +0 -11
- package/src/services/workflow-service.ts +0 -84
- package/src/time-utils.test.ts +0 -56
- package/src/time-utils.ts +0 -107
- package/src/types/core.types.ts +0 -470
- package/src/types/state.types.ts +0 -186
- package/src/utils.test.ts +0 -350
- package/src/utils.ts +0 -129
- package/src/version.test.ts +0 -80
- package/src/version.ts +0 -25
- package/src/wirings/ai-agent/ai-agent-assistant-ui.test.ts +0 -363
- package/src/wirings/ai-agent/ai-agent-assistant-ui.ts +0 -238
- package/src/wirings/ai-agent/ai-agent-helpers.test.ts +0 -152
- package/src/wirings/ai-agent/ai-agent-helpers.ts +0 -76
- package/src/wirings/ai-agent/ai-agent-memory.ts +0 -309
- package/src/wirings/ai-agent/ai-agent-model-config.test.ts +0 -115
- package/src/wirings/ai-agent/ai-agent-model-config.ts +0 -43
- package/src/wirings/ai-agent/ai-agent-prepare.ts +0 -522
- package/src/wirings/ai-agent/ai-agent-registry.test.ts +0 -37
- package/src/wirings/ai-agent/ai-agent-registry.ts +0 -82
- package/src/wirings/ai-agent/ai-agent-runner.test.ts +0 -317
- package/src/wirings/ai-agent/ai-agent-runner.ts +0 -251
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +0 -652
- package/src/wirings/ai-agent/ai-agent-stream.ts +0 -1060
- package/src/wirings/ai-agent/ai-agent.types.ts +0 -360
- package/src/wirings/ai-agent/index.ts +0 -41
- package/src/wirings/channel/channel-common.ts +0 -90
- package/src/wirings/channel/channel-handler.ts +0 -241
- package/src/wirings/channel/channel-middleware-runner.ts +0 -120
- package/src/wirings/channel/channel-runner.ts +0 -166
- package/src/wirings/channel/channel-store.ts +0 -29
- package/src/wirings/channel/channel.types.ts +0 -178
- package/src/wirings/channel/define-channel-routes.ts +0 -25
- package/src/wirings/channel/eventhub-service.ts +0 -34
- package/src/wirings/channel/eventhub-store.ts +0 -13
- package/src/wirings/channel/index.ts +0 -24
- package/src/wirings/channel/local/index.ts +0 -3
- package/src/wirings/channel/local/local-channel-handler.ts +0 -79
- package/src/wirings/channel/local/local-channel-runner.test.ts +0 -215
- package/src/wirings/channel/local/local-channel-runner.ts +0 -200
- package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -95
- package/src/wirings/channel/local/local-eventhub-service.ts +0 -101
- package/src/wirings/channel/log-channels.ts +0 -20
- package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +0 -54
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +0 -45
- package/src/wirings/channel/serverless/index.ts +0 -5
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +0 -286
- package/src/wirings/cli/channel/cli-channel-runner.ts +0 -136
- package/src/wirings/cli/channel/index.ts +0 -1
- package/src/wirings/cli/cli-runner.test.ts +0 -403
- package/src/wirings/cli/cli-runner.ts +0 -519
- package/src/wirings/cli/cli.types.ts +0 -357
- package/src/wirings/cli/command-parser.test.ts +0 -445
- package/src/wirings/cli/command-parser.ts +0 -504
- package/src/wirings/cli/define-cli-commands.ts +0 -24
- package/src/wirings/cli/index.ts +0 -19
- package/src/wirings/gateway/gateway-runner.test.ts +0 -474
- package/src/wirings/gateway/gateway-runner.ts +0 -411
- package/src/wirings/gateway/gateway.types.ts +0 -149
- package/src/wirings/gateway/index.ts +0 -13
- package/src/wirings/http/http-routes.test.ts +0 -322
- package/src/wirings/http/http-routes.ts +0 -198
- package/src/wirings/http/http-runner.test.ts +0 -144
- package/src/wirings/http/http-runner.ts +0 -563
- package/src/wirings/http/http.types.ts +0 -378
- package/src/wirings/http/index.ts +0 -25
- package/src/wirings/http/log-http-routes.ts +0 -22
- package/src/wirings/http/pikku-fetch-http-request.test.ts +0 -237
- package/src/wirings/http/pikku-fetch-http-request.ts +0 -166
- package/src/wirings/http/pikku-fetch-http-response.test.ts +0 -82
- package/src/wirings/http/pikku-fetch-http-response.ts +0 -147
- package/src/wirings/http/routers/http-router.ts +0 -13
- package/src/wirings/http/routers/path-to-regex.test.ts +0 -319
- package/src/wirings/http/routers/path-to-regex.ts +0 -126
- package/src/wirings/mcp/index.ts +0 -27
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -389
- package/src/wirings/mcp/mcp-endpoint-registry.ts +0 -159
- package/src/wirings/mcp/mcp-runner.ts +0 -305
- package/src/wirings/mcp/mcp.types.ts +0 -216
- package/src/wirings/node/index.ts +0 -2
- package/src/wirings/node/node.types.ts +0 -23
- package/src/wirings/oauth2/index.ts +0 -3
- package/src/wirings/oauth2/oauth2-client.test.ts +0 -929
- package/src/wirings/oauth2/oauth2-client.ts +0 -335
- package/src/wirings/oauth2/oauth2.types.ts +0 -69
- package/src/wirings/oauth2/wire-oauth2-credential.ts +0 -23
- package/src/wirings/queue/index.ts +0 -31
- package/src/wirings/queue/queue-runner.test.ts +0 -710
- package/src/wirings/queue/queue-runner.ts +0 -192
- package/src/wirings/queue/queue.types.ts +0 -189
- package/src/wirings/queue/register-queue-helper.ts +0 -60
- package/src/wirings/queue/validate-worker-config.test.ts +0 -108
- package/src/wirings/queue/validate-worker-config.ts +0 -116
- package/src/wirings/rpc/index.ts +0 -4
- package/src/wirings/rpc/rpc-runner.ts +0 -439
- package/src/wirings/rpc/rpc-types.ts +0 -51
- package/src/wirings/rpc/wire-addon.ts +0 -20
- package/src/wirings/scheduler/index.ts +0 -11
- package/src/wirings/scheduler/log-schedulers.ts +0 -20
- package/src/wirings/scheduler/scheduler-runner.test.ts +0 -660
- package/src/wirings/scheduler/scheduler-runner.ts +0 -132
- package/src/wirings/scheduler/scheduler.types.ts +0 -53
- package/src/wirings/secret/index.ts +0 -9
- package/src/wirings/secret/secret.types.ts +0 -32
- package/src/wirings/secret/validate-secret-definitions.test.ts +0 -140
- package/src/wirings/secret/validate-secret-definitions.ts +0 -82
- package/src/wirings/trigger/index.ts +0 -10
- package/src/wirings/trigger/pikku-trigger-service.ts +0 -112
- package/src/wirings/trigger/trigger-runner.test.ts +0 -79
- package/src/wirings/trigger/trigger-runner.ts +0 -135
- package/src/wirings/trigger/trigger.types.ts +0 -178
- package/src/wirings/variable/index.ts +0 -8
- package/src/wirings/variable/validate-variable-definitions.test.ts +0 -91
- package/src/wirings/variable/validate-variable-definitions.ts +0 -69
- package/src/wirings/variable/variable.types.ts +0 -22
- package/src/wirings/workflow/dsl/index.ts +0 -31
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +0 -320
- package/src/wirings/workflow/dsl/workflow-runner.ts +0 -28
- package/src/wirings/workflow/graph/graph-node.ts +0 -222
- package/src/wirings/workflow/graph/graph-runner.test.ts +0 -487
- package/src/wirings/workflow/graph/graph-runner.ts +0 -816
- package/src/wirings/workflow/graph/index.ts +0 -14
- package/src/wirings/workflow/graph/template.test.ts +0 -49
- package/src/wirings/workflow/graph/template.ts +0 -42
- package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -29
- package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -104
- package/src/wirings/workflow/index.ts +0 -81
- package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -200
- package/src/wirings/workflow/pikku-workflow-service.ts +0 -1165
- package/src/wirings/workflow/workflow-helpers.test.ts +0 -129
- package/src/wirings/workflow/workflow-helpers.ts +0 -79
- package/src/wirings/workflow/workflow.types.ts +0 -266
- package/tsconfig.json +0 -14
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
import type { PikkuWire, WireServices } from '../../../types/core.types.js'
|
|
2
|
-
import { closeWireServices } from '../../../utils.js'
|
|
3
|
-
import { processMessageHandlers } from '../channel-handler.js'
|
|
4
|
-
import { openChannel } from '../channel-runner.js'
|
|
5
|
-
import type {
|
|
6
|
-
CoreChannel,
|
|
7
|
-
RunChannelOptions,
|
|
8
|
-
RunChannelParams,
|
|
9
|
-
PikkuChannelHandlerFactory,
|
|
10
|
-
} from '../channel.types.js'
|
|
11
|
-
import { createHTTPWire } from '../../http/http-runner.js'
|
|
12
|
-
import type { ChannelStore } from '../channel-store.js'
|
|
13
|
-
import { handleHTTPError } from '../../../handle-error.js'
|
|
14
|
-
import {
|
|
15
|
-
PikkuSessionService,
|
|
16
|
-
createMiddlewareSessionWireProps,
|
|
17
|
-
} from '../../../services/user-session-service.js'
|
|
18
|
-
import {
|
|
19
|
-
getSingletonServices,
|
|
20
|
-
getCreateWireServices,
|
|
21
|
-
pikkuState,
|
|
22
|
-
} from '../../../pikku-state.js'
|
|
23
|
-
import { PikkuFetchHTTPRequest } from '../../http/pikku-fetch-http-request.js'
|
|
24
|
-
import type { PikkuHTTP } from '../../http/http.types.js'
|
|
25
|
-
import { runChannelLifecycleWithMiddleware } from '../channel-common.js'
|
|
26
|
-
|
|
27
|
-
export interface RunServerlessChannelParams<ChannelData>
|
|
28
|
-
extends RunChannelParams<ChannelData> {
|
|
29
|
-
channelStore: ChannelStore
|
|
30
|
-
channelHandlerFactory: PikkuChannelHandlerFactory
|
|
31
|
-
channelObject?: unknown
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const getVariablesForChannel = ({
|
|
35
|
-
channelId,
|
|
36
|
-
channelName,
|
|
37
|
-
channelHandlerFactory,
|
|
38
|
-
openingData,
|
|
39
|
-
}: {
|
|
40
|
-
channelId: string
|
|
41
|
-
channelName: string
|
|
42
|
-
channelHandlerFactory: PikkuChannelHandlerFactory
|
|
43
|
-
openingData?: unknown
|
|
44
|
-
}) => {
|
|
45
|
-
const channels = pikkuState(null, 'channel', 'channels')
|
|
46
|
-
const channelConfig = channels.get(channelName)
|
|
47
|
-
const channelsMeta = pikkuState(null, 'channel', 'meta')
|
|
48
|
-
const meta = channelsMeta[channelName]
|
|
49
|
-
if (!channelConfig) {
|
|
50
|
-
throw new Error(`Channel not found: ${channelName}`)
|
|
51
|
-
}
|
|
52
|
-
if (!meta) {
|
|
53
|
-
throw new Error(`Channel meta not found: ${channelName}`)
|
|
54
|
-
}
|
|
55
|
-
const channelHandler = channelHandlerFactory(
|
|
56
|
-
channelId,
|
|
57
|
-
channelConfig.name,
|
|
58
|
-
openingData
|
|
59
|
-
)
|
|
60
|
-
return {
|
|
61
|
-
channelConfig,
|
|
62
|
-
channelHandler,
|
|
63
|
-
channel: channelHandler.getChannel(),
|
|
64
|
-
meta,
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export const runChannelConnect = async ({
|
|
69
|
-
channelId,
|
|
70
|
-
channelObject,
|
|
71
|
-
request,
|
|
72
|
-
response,
|
|
73
|
-
route,
|
|
74
|
-
channelStore,
|
|
75
|
-
channelHandlerFactory,
|
|
76
|
-
coerceDataFromSchema = true,
|
|
77
|
-
logWarningsForStatusCodes = [],
|
|
78
|
-
respondWith404 = true,
|
|
79
|
-
bubbleErrors = false,
|
|
80
|
-
}: Pick<CoreChannel<unknown, any>, 'route'> &
|
|
81
|
-
RunChannelOptions &
|
|
82
|
-
RunServerlessChannelParams<unknown>) => {
|
|
83
|
-
const singletonServices = getSingletonServices()
|
|
84
|
-
const createWireServices = getCreateWireServices()
|
|
85
|
-
let wireServices: WireServices | undefined
|
|
86
|
-
|
|
87
|
-
let http: PikkuHTTP | undefined
|
|
88
|
-
if (request instanceof Request) {
|
|
89
|
-
http = createHTTPWire(new PikkuFetchHTTPRequest(request), response)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const userSession = new PikkuSessionService(channelStore, channelId)
|
|
93
|
-
|
|
94
|
-
const { channelConfig, openingData, meta } = await openChannel({
|
|
95
|
-
channelId,
|
|
96
|
-
request,
|
|
97
|
-
route,
|
|
98
|
-
coerceDataFromSchema,
|
|
99
|
-
userSession,
|
|
100
|
-
})
|
|
101
|
-
|
|
102
|
-
try {
|
|
103
|
-
await channelStore.addChannel({
|
|
104
|
-
channelId,
|
|
105
|
-
channelName: channelConfig.name,
|
|
106
|
-
openingData,
|
|
107
|
-
channelObject,
|
|
108
|
-
})
|
|
109
|
-
const { channel } = getVariablesForChannel({
|
|
110
|
-
channelId,
|
|
111
|
-
channelHandlerFactory,
|
|
112
|
-
channelName: channelConfig.name,
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
const wire: PikkuWire = {
|
|
116
|
-
channel,
|
|
117
|
-
...createMiddlewareSessionWireProps(userSession),
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (createWireServices) {
|
|
121
|
-
wireServices = await createWireServices(singletonServices, wire)
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const services = {
|
|
125
|
-
...singletonServices,
|
|
126
|
-
...wireServices,
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (channelConfig.onConnect && meta.connect) {
|
|
130
|
-
await runChannelLifecycleWithMiddleware({
|
|
131
|
-
channelConfig,
|
|
132
|
-
meta: meta.connect,
|
|
133
|
-
lifecycleConfig: channelConfig.onConnect,
|
|
134
|
-
lifecycleType: 'connect',
|
|
135
|
-
services,
|
|
136
|
-
channel,
|
|
137
|
-
data: openingData,
|
|
138
|
-
channelMiddlewareMeta: meta.channelMiddleware,
|
|
139
|
-
})
|
|
140
|
-
}
|
|
141
|
-
http?.response?.status(101)
|
|
142
|
-
} catch (e: any) {
|
|
143
|
-
handleHTTPError(
|
|
144
|
-
e,
|
|
145
|
-
http,
|
|
146
|
-
channelId,
|
|
147
|
-
singletonServices.logger,
|
|
148
|
-
logWarningsForStatusCodes,
|
|
149
|
-
respondWith404,
|
|
150
|
-
bubbleErrors
|
|
151
|
-
)
|
|
152
|
-
} finally {
|
|
153
|
-
if (wireServices) {
|
|
154
|
-
await closeWireServices(singletonServices.logger, wireServices)
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
export const runChannelDisconnect = async ({
|
|
160
|
-
channelId,
|
|
161
|
-
channelStore,
|
|
162
|
-
channelHandlerFactory,
|
|
163
|
-
}: RunServerlessChannelParams<unknown>): Promise<void> => {
|
|
164
|
-
const singletonServices = getSingletonServices()
|
|
165
|
-
const createWireServices = getCreateWireServices()
|
|
166
|
-
let wireServices: WireServices | undefined
|
|
167
|
-
|
|
168
|
-
// Try to get channel from store. In serverless environments (especially with
|
|
169
|
-
// serverless-offline or worker threads), disconnect can be called multiple times
|
|
170
|
-
// or after the channel has already been cleaned up. If channel doesn't exist,
|
|
171
|
-
// there's nothing to disconnect, so we can return early.
|
|
172
|
-
let channelData
|
|
173
|
-
try {
|
|
174
|
-
channelData = await channelStore.getChannelAndSession(channelId)
|
|
175
|
-
} catch {
|
|
176
|
-
singletonServices.logger.info(
|
|
177
|
-
`Channel ${channelId} not found during disconnect - already cleaned up`
|
|
178
|
-
)
|
|
179
|
-
return
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
const { openingData, channelName, session } = channelData
|
|
183
|
-
const { channel, channelConfig, meta } = getVariablesForChannel({
|
|
184
|
-
channelId,
|
|
185
|
-
channelHandlerFactory,
|
|
186
|
-
openingData,
|
|
187
|
-
channelName,
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
const userSession = new PikkuSessionService(channelStore, channelId)
|
|
191
|
-
userSession.setInitial(session)
|
|
192
|
-
const wire: PikkuWire = {
|
|
193
|
-
channel,
|
|
194
|
-
...createMiddlewareSessionWireProps(userSession),
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
if (createWireServices) {
|
|
198
|
-
wireServices = await createWireServices(singletonServices, wire)
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const services = {
|
|
202
|
-
...singletonServices,
|
|
203
|
-
...wireServices,
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
if (channelConfig.onDisconnect && meta.disconnect) {
|
|
207
|
-
try {
|
|
208
|
-
await runChannelLifecycleWithMiddleware({
|
|
209
|
-
channelConfig,
|
|
210
|
-
meta: meta.disconnect,
|
|
211
|
-
lifecycleConfig: channelConfig.onDisconnect,
|
|
212
|
-
lifecycleType: 'disconnect',
|
|
213
|
-
services,
|
|
214
|
-
channel,
|
|
215
|
-
channelMiddlewareMeta: meta.channelMiddleware,
|
|
216
|
-
})
|
|
217
|
-
} catch (e: any) {
|
|
218
|
-
singletonServices.logger.error(
|
|
219
|
-
`Error handling onDisconnect: ${e.message || e}`
|
|
220
|
-
)
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
await channelStore.removeChannels([channel.channelId])
|
|
224
|
-
if (wireServices) {
|
|
225
|
-
await closeWireServices(singletonServices.logger, wireServices)
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
export const runChannelMessage = async (
|
|
230
|
-
{
|
|
231
|
-
channelId,
|
|
232
|
-
channelStore,
|
|
233
|
-
channelHandlerFactory,
|
|
234
|
-
}: RunServerlessChannelParams<unknown>,
|
|
235
|
-
data: unknown
|
|
236
|
-
): Promise<unknown> => {
|
|
237
|
-
const singletonServices = getSingletonServices()
|
|
238
|
-
const createWireServices = getCreateWireServices()
|
|
239
|
-
let wireServices: WireServices | undefined
|
|
240
|
-
const { openingData, channelName, session } =
|
|
241
|
-
await channelStore.getChannelAndSession(channelId)
|
|
242
|
-
|
|
243
|
-
const { channel, channelHandler, channelConfig } = getVariablesForChannel({
|
|
244
|
-
channelId,
|
|
245
|
-
channelHandlerFactory,
|
|
246
|
-
openingData,
|
|
247
|
-
channelName,
|
|
248
|
-
})
|
|
249
|
-
|
|
250
|
-
const userSession = new PikkuSessionService(channelStore, channelId)
|
|
251
|
-
userSession.setInitial(session)
|
|
252
|
-
const wire: PikkuWire = {
|
|
253
|
-
channel,
|
|
254
|
-
...createMiddlewareSessionWireProps(userSession),
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
if (createWireServices) {
|
|
258
|
-
wireServices = await createWireServices(singletonServices, wire)
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
const services = {
|
|
262
|
-
...singletonServices,
|
|
263
|
-
...wireServices,
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
let response: unknown
|
|
267
|
-
try {
|
|
268
|
-
const { onMessage } = processMessageHandlers(
|
|
269
|
-
services,
|
|
270
|
-
channelConfig,
|
|
271
|
-
channelHandler,
|
|
272
|
-
userSession
|
|
273
|
-
)
|
|
274
|
-
response = await onMessage(data)
|
|
275
|
-
} catch (e: any) {
|
|
276
|
-
singletonServices.logger.error(
|
|
277
|
-
`Error processing message: ${e.message || e}`
|
|
278
|
-
)
|
|
279
|
-
return { error: e.message || 'Unknown error' }
|
|
280
|
-
} finally {
|
|
281
|
-
if (wireServices) {
|
|
282
|
-
await closeWireServices(singletonServices.logger, wireServices)
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
return response
|
|
286
|
-
}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { pikkuState } from '../../../pikku-state.js'
|
|
2
|
-
import type { CorePikkuCLIRender, CLIMeta } from '../cli.types.js'
|
|
3
|
-
import { generateCommandHelp, parseCLIArguments } from '../command-parser.js'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Default JSON renderer for CLI output
|
|
7
|
-
*/
|
|
8
|
-
const defaultJSONRenderer: CorePikkuCLIRender<any> = (_services, data) => {
|
|
9
|
-
console.log(JSON.stringify(data, null, 2))
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Execute a CLI program via WebSocket channel
|
|
14
|
-
* This is the main entry point for CLI-over-Channel clients
|
|
15
|
-
*/
|
|
16
|
-
export async function executeCLIViaChannel({
|
|
17
|
-
programName,
|
|
18
|
-
pikkuWS,
|
|
19
|
-
args = process.argv.slice(2),
|
|
20
|
-
renderers = {},
|
|
21
|
-
defaultRenderer,
|
|
22
|
-
}: {
|
|
23
|
-
programName: string
|
|
24
|
-
pikkuWS: any // CorePikkuWebsocket instance
|
|
25
|
-
args?: string[]
|
|
26
|
-
renderers?: Record<string, CorePikkuCLIRender<any>>
|
|
27
|
-
defaultRenderer?: CorePikkuCLIRender<any>
|
|
28
|
-
}): Promise<void> {
|
|
29
|
-
// Get CLI metadata from state
|
|
30
|
-
const cliMeta = pikkuState(null, 'cli', 'meta')
|
|
31
|
-
if (!cliMeta || !('programs' in cliMeta)) {
|
|
32
|
-
throw new Error(
|
|
33
|
-
'[PKU342] CLI metadata not found. No CLI wirings were registered. See https://pikku.dev/docs/pikku-cli/errors/pku342 for more information.'
|
|
34
|
-
)
|
|
35
|
-
}
|
|
36
|
-
const allCLIMeta = cliMeta as CLIMeta
|
|
37
|
-
const programMeta = allCLIMeta.programs[programName]
|
|
38
|
-
|
|
39
|
-
if (!programMeta) {
|
|
40
|
-
console.error(`Error: CLI program "${programName}" not found`)
|
|
41
|
-
process.exit(1)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Parse arguments for this specific program
|
|
45
|
-
const parsed = parseCLIArguments(args, programName, allCLIMeta)
|
|
46
|
-
|
|
47
|
-
// Handle help (check after parsing to support subcommand help)
|
|
48
|
-
if (args.includes('--help') || args.includes('-h') || args.length === 0) {
|
|
49
|
-
const helpText = generateCommandHelp(
|
|
50
|
-
programName,
|
|
51
|
-
allCLIMeta,
|
|
52
|
-
parsed.commandPath
|
|
53
|
-
)
|
|
54
|
-
console.log(helpText)
|
|
55
|
-
return
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (parsed.errors.length > 0) {
|
|
59
|
-
// Check if any error is about an unknown command
|
|
60
|
-
const hasUnknownCommand = parsed.errors.some(
|
|
61
|
-
(error) =>
|
|
62
|
-
error.startsWith('Unknown command:') ||
|
|
63
|
-
error.startsWith('Command not found:')
|
|
64
|
-
)
|
|
65
|
-
|
|
66
|
-
if (hasUnknownCommand) {
|
|
67
|
-
// Show help instead of error for unknown commands
|
|
68
|
-
const helpText = generateCommandHelp(
|
|
69
|
-
programName,
|
|
70
|
-
allCLIMeta,
|
|
71
|
-
parsed.commandPath
|
|
72
|
-
)
|
|
73
|
-
console.log(helpText)
|
|
74
|
-
process.exit(1)
|
|
75
|
-
} else {
|
|
76
|
-
// Show errors for other types of errors
|
|
77
|
-
console.error('Errors:')
|
|
78
|
-
parsed.errors.forEach((error) => console.error(` ${error}`))
|
|
79
|
-
process.exit(1)
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Merge positionals and options into single data object
|
|
84
|
-
const data = { ...parsed.positionals, ...parsed.options }
|
|
85
|
-
|
|
86
|
-
// Get the renderer for this command
|
|
87
|
-
const commandId = parsed.commandPath.join('.')
|
|
88
|
-
const renderer =
|
|
89
|
-
renderers[commandId] || defaultRenderer || defaultJSONRenderer
|
|
90
|
-
|
|
91
|
-
return new Promise((resolve, reject) => {
|
|
92
|
-
// Subscribe to responses for this command
|
|
93
|
-
const commandRoute = pikkuWS.getRoute('command')
|
|
94
|
-
|
|
95
|
-
const responseHandler = (response: any) => {
|
|
96
|
-
// Check if this is a control message
|
|
97
|
-
if (
|
|
98
|
-
response?.action === 'cli-control' &&
|
|
99
|
-
response?.event === 'complete'
|
|
100
|
-
) {
|
|
101
|
-
// Server signals command is complete, close the connection client-side
|
|
102
|
-
commandRoute.unsubscribe(commandId, responseHandler)
|
|
103
|
-
pikkuWS.ws.close()
|
|
104
|
-
resolve(undefined)
|
|
105
|
-
return
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Call renderer for any output
|
|
109
|
-
renderer(null as any, response, undefined)
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
commandRoute.subscribe(commandId, responseHandler)
|
|
113
|
-
|
|
114
|
-
// Handle connection close
|
|
115
|
-
pikkuWS.ws.addEventListener('close', () => {
|
|
116
|
-
commandRoute.unsubscribe(commandId, responseHandler)
|
|
117
|
-
resolve(undefined)
|
|
118
|
-
})
|
|
119
|
-
|
|
120
|
-
pikkuWS.ws.addEventListener('error', (error: any) => {
|
|
121
|
-
commandRoute.unsubscribe(commandId, responseHandler)
|
|
122
|
-
reject(error)
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
// Send the command once connected
|
|
126
|
-
if (pikkuWS.ws.readyState === 1) {
|
|
127
|
-
// Already open
|
|
128
|
-
commandRoute.send(commandId, data)
|
|
129
|
-
} else {
|
|
130
|
-
// Wait for open
|
|
131
|
-
pikkuWS.ws.addEventListener('open', () => {
|
|
132
|
-
commandRoute.send(commandId, data)
|
|
133
|
-
})
|
|
134
|
-
}
|
|
135
|
-
})
|
|
136
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { executeCLIViaChannel } from './cli-channel-runner.js'
|