@pikku/core 0.12.0 → 0.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/dist/errors/errors.d.ts +6 -0
- package/dist/errors/errors.js +10 -0
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.js +1 -0
- package/dist/function/function-runner.d.ts +3 -3
- package/dist/function/function-runner.js +66 -44
- package/dist/function/functions.types.d.ts +1 -0
- package/dist/handle-error.d.ts +2 -2
- package/dist/handle-error.js +2 -2
- package/dist/index.d.ts +5 -3
- package/dist/index.js +2 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.js +2 -0
- package/dist/middleware/auth-bearer.d.ts +1 -1
- package/dist/middleware/auth-bearer.js +1 -1
- package/dist/middleware/auth-cookie.d.ts +2 -2
- package/dist/middleware/auth-cookie.js +1 -1
- package/dist/middleware/cors.d.ts +2 -2
- package/dist/middleware/cors.js +45 -37
- package/dist/middleware-runner.d.ts +1 -1
- package/dist/middleware-runner.js +1 -0
- package/dist/permissions.d.ts +2 -2
- package/dist/permissions.js +1 -0
- package/dist/pikku-state.d.ts +9 -8
- package/dist/pikku-state.js +34 -17
- package/dist/schema.d.ts +4 -4
- package/dist/schema.js +9 -5
- package/dist/services/ai-agent-runner-service.d.ts +22 -3
- package/dist/services/ai-run-state-service.d.ts +1 -1
- package/dist/services/ai-storage-service.d.ts +1 -1
- package/dist/services/content-service.d.ts +6 -0
- package/dist/services/gateway-service.d.ts +19 -0
- package/dist/services/gopass-secrets.d.ts +1 -1
- package/dist/services/gopass-secrets.js +3 -0
- package/dist/services/in-memory-ai-run-state-service.d.ts +15 -0
- package/dist/services/in-memory-ai-run-state-service.js +44 -0
- package/dist/services/in-memory-trigger-service.d.ts +0 -1
- package/dist/services/in-memory-trigger-service.js +6 -8
- package/dist/services/index.d.ts +5 -2
- package/dist/services/index.js +2 -0
- package/dist/services/local-content.d.ts +2 -1
- package/dist/services/local-content.js +6 -1
- package/dist/services/local-gateway-service.d.ts +22 -0
- package/dist/services/local-gateway-service.js +51 -0
- package/dist/services/local-secrets.d.ts +2 -2
- package/dist/services/local-variables.d.ts +1 -1
- package/dist/services/logger-console.d.ts +2 -1
- package/dist/services/scheduler-service.d.ts +0 -12
- package/dist/services/scheduler-service.js +0 -6
- package/dist/services/scoped-secret-service.d.ts +1 -1
- package/dist/services/trigger-service.d.ts +0 -7
- package/dist/services/user-session-service.d.ts +3 -3
- package/dist/services/workflow-service.d.ts +2 -3
- package/dist/types/core.types.d.ts +27 -19
- package/dist/types/state.types.d.ts +22 -15
- package/dist/utils.d.ts +5 -5
- package/dist/utils.js +12 -9
- package/dist/wirings/ai-agent/ai-agent-assistant-ui.d.ts +5 -0
- package/dist/wirings/ai-agent/ai-agent-assistant-ui.js +168 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +28 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.js +40 -0
- package/dist/wirings/ai-agent/ai-agent-memory.js +13 -2
- package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +4 -5
- package/dist/wirings/ai-agent/ai-agent-prepare.js +80 -31
- package/dist/wirings/ai-agent/ai-agent-registry.d.ts +1 -1
- package/dist/wirings/ai-agent/ai-agent-runner.js +107 -8
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +2 -1
- package/dist/wirings/ai-agent/ai-agent-stream.js +263 -89
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +96 -4
- package/dist/wirings/ai-agent/index.d.ts +3 -1
- package/dist/wirings/ai-agent/index.js +2 -0
- package/dist/wirings/channel/channel-common.d.ts +2 -2
- package/dist/wirings/channel/channel-handler.d.ts +7 -4
- package/dist/wirings/channel/channel-handler.js +15 -5
- package/dist/wirings/channel/channel-middleware-runner.js +1 -0
- package/dist/wirings/channel/channel-runner.d.ts +5 -5
- package/dist/wirings/channel/channel-runner.js +3 -2
- package/dist/wirings/channel/channel-store.d.ts +1 -1
- package/dist/wirings/channel/channel.types.d.ts +10 -6
- package/dist/wirings/channel/index.d.ts +1 -1
- package/dist/wirings/channel/local/local-channel-handler.d.ts +7 -0
- package/dist/wirings/channel/local/local-channel-handler.js +17 -0
- package/dist/wirings/channel/local/local-channel-runner.d.ts +7 -2
- package/dist/wirings/channel/local/local-channel-runner.js +18 -4
- package/dist/wirings/channel/local/local-eventhub-service.d.ts +2 -2
- package/dist/wirings/channel/log-channels.d.ts +1 -1
- package/dist/wirings/channel/pikku-abstract-channel-handler.d.ts +2 -1
- package/dist/wirings/channel/pikku-abstract-channel-handler.js +1 -0
- package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +4 -4
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +26 -20
- package/dist/wirings/cli/channel/cli-channel-runner.d.ts +1 -1
- package/dist/wirings/cli/cli-runner.d.ts +2 -2
- package/dist/wirings/cli/cli-runner.js +3 -0
- package/dist/wirings/cli/cli.types.d.ts +3 -3
- package/dist/wirings/cli/command-parser.d.ts +1 -1
- package/dist/wirings/gateway/gateway-runner.d.ts +24 -0
- package/dist/wirings/gateway/gateway-runner.js +325 -0
- package/dist/wirings/gateway/gateway.types.d.ts +127 -0
- package/dist/wirings/gateway/index.d.ts +2 -0
- package/dist/wirings/gateway/index.js +1 -0
- package/dist/wirings/http/http-runner.d.ts +9 -9
- package/dist/wirings/http/http-runner.js +36 -14
- package/dist/wirings/http/http.types.d.ts +2 -6
- package/dist/wirings/http/log-http-routes.d.ts +1 -1
- package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -1
- package/dist/wirings/http/pikku-fetch-http-response.d.ts +2 -2
- package/dist/wirings/http/pikku-fetch-http-response.js +6 -1
- package/dist/wirings/http/routers/http-router.d.ts +1 -1
- package/dist/wirings/http/routers/path-to-regex.d.ts +2 -2
- package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +1 -1
- package/dist/wirings/mcp/mcp-runner.d.ts +0 -3
- package/dist/wirings/mcp/mcp-runner.js +4 -2
- package/dist/wirings/mcp/mcp.types.d.ts +2 -2
- package/dist/wirings/oauth2/oauth2-client.d.ts +3 -3
- package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +1 -1
- package/dist/wirings/queue/index.d.ts +1 -1
- package/dist/wirings/queue/index.js +1 -1
- package/dist/wirings/queue/queue-runner.d.ts +1 -12
- package/dist/wirings/queue/queue-runner.js +4 -12
- package/dist/wirings/queue/queue.types.d.ts +3 -9
- package/dist/wirings/queue/register-queue-helper.d.ts +2 -2
- package/dist/wirings/queue/register-queue-helper.js +1 -1
- package/dist/wirings/queue/validate-worker-config.d.ts +1 -1
- package/dist/wirings/rpc/index.d.ts +2 -0
- package/dist/wirings/rpc/index.js +1 -0
- package/dist/wirings/rpc/rpc-runner.d.ts +36 -14
- package/dist/wirings/rpc/rpc-runner.js +56 -28
- package/dist/wirings/rpc/rpc-types.d.ts +14 -2
- package/dist/wirings/rpc/wire-addon.d.ts +10 -0
- package/dist/wirings/rpc/wire-addon.js +9 -0
- package/dist/wirings/scheduler/index.d.ts +1 -1
- package/dist/wirings/scheduler/index.js +1 -1
- package/dist/wirings/scheduler/log-schedulers.d.ts +1 -1
- package/dist/wirings/scheduler/scheduler-runner.d.ts +3 -10
- package/dist/wirings/scheduler/scheduler-runner.js +4 -25
- package/dist/wirings/scheduler/scheduler.types.d.ts +2 -2
- package/dist/wirings/trigger/pikku-trigger-service.d.ts +2 -6
- package/dist/wirings/trigger/pikku-trigger-service.js +11 -16
- package/dist/wirings/trigger/trigger-runner.d.ts +1 -5
- package/dist/wirings/trigger/trigger-runner.js +4 -3
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +2 -6
- package/dist/wirings/workflow/pikku-workflow-service.js +20 -29
- package/dist/wirings/workflow/workflow.types.d.ts +2 -2
- package/package.json +4 -2
- package/src/crypto-utils.test.ts +116 -0
- package/src/errors/error.test.ts +143 -2
- package/src/errors/errors.ts +10 -0
- package/src/errors/index.ts +1 -0
- package/src/function/function-runner.test.ts +2 -2
- package/src/function/function-runner.ts +72 -49
- package/src/function/functions.types.ts +1 -0
- package/src/handle-error.test.ts +361 -0
- package/src/handle-error.ts +4 -4
- package/src/index.ts +3 -10
- package/src/internal.ts +6 -0
- package/src/middleware/auth-apikey.test.ts +1 -1
- package/src/middleware/auth-bearer.test.ts +1 -1
- package/src/middleware/auth-bearer.ts +2 -5
- package/src/middleware/auth-cookie.test.ts +1 -1
- package/src/middleware/auth-cookie.ts +3 -5
- package/src/middleware/cors.test.ts +424 -0
- package/src/middleware/cors.ts +14 -6
- package/src/middleware/remote-auth.test.ts +488 -0
- package/src/middleware-runner.test.ts +1 -1
- package/src/middleware-runner.ts +2 -1
- package/src/permissions.test.ts +2 -2
- package/src/permissions.ts +3 -2
- package/src/pikku-state.test.ts +224 -0
- package/src/pikku-state.ts +45 -28
- package/src/schema.test.ts +198 -6
- package/src/schema.ts +11 -7
- package/src/services/ai-agent-runner-service.ts +15 -3
- package/src/services/ai-run-state-service.ts +1 -1
- package/src/services/ai-storage-service.ts +1 -1
- package/src/services/content-service.ts +7 -0
- package/src/services/gateway-service.ts +20 -0
- package/src/services/gopass-secrets.ts +4 -1
- package/src/services/in-memory-ai-run-state-service.ts +73 -0
- package/src/services/in-memory-trigger-service.ts +6 -10
- package/src/services/in-memory-workflow-service.test.ts +351 -0
- package/src/services/index.ts +4 -1
- package/src/services/local-content.ts +9 -3
- package/src/services/local-gateway-service.ts +62 -0
- package/src/services/local-secrets.test.ts +80 -0
- package/src/services/local-secrets.ts +2 -2
- package/src/services/local-variables.test.ts +61 -0
- package/src/services/local-variables.ts +1 -1
- package/src/services/logger-console.test.ts +118 -0
- package/src/services/logger-console.ts +2 -1
- package/src/services/scheduler-service.ts +0 -18
- package/src/services/scoped-secret-service.test.ts +74 -0
- package/src/services/scoped-secret-service.ts +1 -1
- package/src/services/trigger-service.ts +0 -21
- package/src/services/typed-secret-service.test.ts +93 -0
- package/src/services/typed-variables-service.test.ts +73 -0
- package/src/services/user-session-service.test.ts +113 -0
- package/src/services/user-session-service.ts +3 -3
- package/src/services/workflow-service.ts +2 -12
- package/src/time-utils.test.ts +1 -1
- package/src/types/core.types.ts +28 -19
- package/src/types/state.types.ts +32 -15
- package/src/utils.test.ts +350 -0
- package/src/utils.ts +14 -13
- package/src/wirings/ai-agent/ai-agent-assistant-ui.test.ts +363 -0
- package/src/wirings/ai-agent/ai-agent-assistant-ui.ts +238 -0
- package/src/wirings/ai-agent/ai-agent-helpers.test.ts +152 -0
- package/src/wirings/ai-agent/ai-agent-helpers.ts +76 -0
- package/src/wirings/ai-agent/ai-agent-memory.ts +10 -1
- package/src/wirings/ai-agent/ai-agent-model-config.test.ts +115 -0
- package/src/wirings/ai-agent/ai-agent-prepare.ts +98 -46
- package/src/wirings/ai-agent/ai-agent-registry.ts +1 -1
- package/src/wirings/ai-agent/ai-agent-runner.test.ts +245 -3
- package/src/wirings/ai-agent/ai-agent-runner.ts +121 -7
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +430 -24
- package/src/wirings/ai-agent/ai-agent-stream.ts +390 -104
- package/src/wirings/ai-agent/ai-agent.types.ts +91 -4
- package/src/wirings/ai-agent/index.ts +13 -0
- package/src/wirings/channel/channel-common.ts +2 -2
- package/src/wirings/channel/channel-handler.ts +43 -11
- package/src/wirings/channel/channel-middleware-runner.ts +1 -0
- package/src/wirings/channel/channel-runner.ts +6 -6
- package/src/wirings/channel/channel-store.ts +1 -1
- package/src/wirings/channel/channel.types.ts +15 -8
- package/src/wirings/channel/index.ts +1 -0
- package/src/wirings/channel/local/local-channel-handler.ts +26 -0
- package/src/wirings/channel/local/local-channel-runner.test.ts +19 -12
- package/src/wirings/channel/local/local-channel-runner.ts +33 -14
- package/src/wirings/channel/local/local-eventhub-service.test.ts +2 -2
- package/src/wirings/channel/local/local-eventhub-service.ts +2 -2
- package/src/wirings/channel/log-channels.ts +1 -1
- package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +2 -0
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +8 -1
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +38 -33
- package/src/wirings/cli/channel/cli-channel-runner.ts +1 -1
- package/src/wirings/cli/cli-runner.test.ts +1 -1
- package/src/wirings/cli/cli-runner.ts +14 -4
- package/src/wirings/cli/cli.types.ts +3 -3
- package/src/wirings/cli/command-parser.test.ts +1 -1
- package/src/wirings/cli/command-parser.ts +1 -1
- package/src/wirings/gateway/gateway-runner.test.ts +474 -0
- package/src/wirings/gateway/gateway-runner.ts +411 -0
- package/src/wirings/gateway/gateway.types.ts +149 -0
- package/src/wirings/gateway/index.ts +13 -0
- package/src/wirings/http/http-routes.test.ts +1 -1
- package/src/wirings/http/http-runner.test.ts +9 -17
- package/src/wirings/http/http-runner.ts +46 -27
- package/src/wirings/http/http.types.ts +1 -14
- package/src/wirings/http/log-http-routes.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-response.ts +12 -5
- package/src/wirings/http/routers/http-router.ts +1 -1
- package/src/wirings/http/routers/path-to-regex.test.ts +1 -1
- package/src/wirings/http/routers/path-to-regex.ts +4 -3
- package/src/wirings/mcp/mcp-endpoint-registry.ts +5 -1
- package/src/wirings/mcp/mcp-runner.ts +9 -15
- package/src/wirings/mcp/mcp.types.ts +2 -2
- package/src/wirings/oauth2/oauth2-client.ts +3 -3
- package/src/wirings/oauth2/wire-oauth2-credential.ts +1 -1
- package/src/wirings/queue/index.ts +0 -1
- package/src/wirings/queue/queue-runner.test.ts +52 -25
- package/src/wirings/queue/queue-runner.ts +8 -30
- package/src/wirings/queue/queue.types.ts +3 -13
- package/src/wirings/queue/register-queue-helper.ts +3 -5
- package/src/wirings/queue/validate-worker-config.test.ts +108 -0
- package/src/wirings/queue/validate-worker-config.ts +4 -1
- package/src/wirings/rpc/index.ts +2 -0
- package/src/wirings/rpc/rpc-runner.ts +92 -49
- package/src/wirings/rpc/rpc-types.ts +17 -2
- package/src/wirings/rpc/wire-addon.ts +20 -0
- package/src/wirings/scheduler/index.ts +0 -1
- package/src/wirings/scheduler/log-schedulers.ts +1 -1
- package/src/wirings/scheduler/scheduler-runner.test.ts +49 -60
- package/src/wirings/scheduler/scheduler-runner.ts +9 -56
- package/src/wirings/scheduler/scheduler.types.ts +2 -2
- package/src/wirings/secret/validate-secret-definitions.test.ts +140 -0
- package/src/wirings/trigger/pikku-trigger-service.ts +17 -39
- package/src/wirings/trigger/trigger-runner.test.ts +79 -0
- package/src/wirings/trigger/trigger-runner.ts +8 -11
- package/src/wirings/variable/validate-variable-definitions.test.ts +91 -0
- package/src/wirings/workflow/graph/graph-runner.test.ts +14 -22
- package/src/wirings/workflow/graph/template.test.ts +49 -0
- package/src/wirings/workflow/pikku-workflow-service.test.ts +15 -27
- package/src/wirings/workflow/pikku-workflow-service.ts +29 -45
- package/src/wirings/workflow/workflow-helpers.test.ts +129 -0
- package/src/wirings/workflow/workflow.types.ts +2 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/src/wirings/workflow/workflow-utils.ts +0 -0
- /package/dist/{wirings/workflow/workflow-utils.d.ts → services/gateway-service.js} +0 -0
- /package/dist/wirings/{workflow/workflow-utils.js → gateway/gateway.types.js} +0 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
export { agent, agentStream, agentResume, agentApprove, } from './ai-agent-helpers.js';
|
|
1
2
|
export { runAIAgent } from './ai-agent-runner.js';
|
|
2
3
|
export { streamAIAgent, resumeAIAgent } from './ai-agent-stream.js';
|
|
4
|
+
export { createAssistantUIChannel, parseAssistantUIInput, } from './ai-agent-assistant-ui.js';
|
|
3
5
|
export { ToolApprovalRequired, } from './ai-agent-prepare.js';
|
|
4
6
|
export { addAIAgent, approveAIAgent, getAIAgents, getAIAgentsMeta, } from './ai-agent-registry.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CoreSingletonServices, MiddlewareMetadata } from '../../types/core.types.js';
|
|
2
|
-
import { CoreChannel, ChannelMessageMeta } from './channel.types.js';
|
|
1
|
+
import type { CoreSingletonServices, MiddlewareMetadata } from '../../types/core.types.js';
|
|
2
|
+
import type { CoreChannel, ChannelMessageMeta } from './channel.types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Runs a channel lifecycle function (onConnect or onDisconnect) with proper middleware handling.
|
|
5
5
|
*
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import { CoreServices, CoreUserSession } from '../../types/core.types.js';
|
|
2
|
-
import { CoreChannel, PikkuChannelHandler } from './channel.types.js';
|
|
3
|
-
import { SessionService } from '../../services/user-session-service.js';
|
|
4
|
-
export declare const processMessageHandlers: (services: CoreServices, channelConfig: CoreChannel<any, any>, channelHandler: PikkuChannelHandler, userSession?: SessionService<CoreUserSession>) =>
|
|
1
|
+
import type { CoreServices, CoreUserSession } from '../../types/core.types.js';
|
|
2
|
+
import type { BinaryData, CoreChannel, PikkuChannelHandler } from './channel.types.js';
|
|
3
|
+
import type { SessionService } from '../../services/user-session-service.js';
|
|
4
|
+
export declare const processMessageHandlers: (services: CoreServices, channelConfig: CoreChannel<any, any>, channelHandler: PikkuChannelHandler, userSession?: SessionService<CoreUserSession>) => {
|
|
5
|
+
onMessage: (rawData: unknown) => Promise<unknown>;
|
|
6
|
+
onBinaryMessage: ((data: BinaryData) => Promise<BinaryData | void>) | undefined;
|
|
7
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js';
|
|
2
2
|
import { runPikkuFunc } from '../../function/function-runner.js';
|
|
3
|
-
import { createMiddlewareSessionWireProps
|
|
3
|
+
import { createMiddlewareSessionWireProps } from '../../services/user-session-service.js';
|
|
4
4
|
const getChannelMeta = (channelName) => {
|
|
5
5
|
return pikkuState(null, 'channel', 'meta')[channelName];
|
|
6
6
|
};
|
|
@@ -39,7 +39,7 @@ export const processMessageHandlers = (services, channelConfig, channelHandler,
|
|
|
39
39
|
const logger = services.logger;
|
|
40
40
|
const requiresSession = channelConfig.auth !== false;
|
|
41
41
|
const processMessage = async (data, onMessage, routingProperty, routerValue) => {
|
|
42
|
-
if (!validateAuth(requiresSession,
|
|
42
|
+
if (!validateAuth(requiresSession, userSession?.get(), onMessage)) {
|
|
43
43
|
const routeMessage = routingProperty
|
|
44
44
|
? `route '${routingProperty}:${routerValue}'`
|
|
45
45
|
: 'the default message route';
|
|
@@ -91,7 +91,7 @@ export const processMessageHandlers = (services, channelConfig, channelHandler,
|
|
|
91
91
|
},
|
|
92
92
|
});
|
|
93
93
|
};
|
|
94
|
-
|
|
94
|
+
const onMessage = async (rawData) => {
|
|
95
95
|
let result;
|
|
96
96
|
let processed = false;
|
|
97
97
|
// Route-specific handling
|
|
@@ -100,7 +100,7 @@ export const processMessageHandlers = (services, channelConfig, channelHandler,
|
|
|
100
100
|
try {
|
|
101
101
|
messageData = JSON.parse(rawData);
|
|
102
102
|
}
|
|
103
|
-
catch
|
|
103
|
+
catch {
|
|
104
104
|
// Most likely a json error.. ignore
|
|
105
105
|
}
|
|
106
106
|
if (messageData) {
|
|
@@ -130,8 +130,18 @@ export const processMessageHandlers = (services, channelConfig, channelHandler,
|
|
|
130
130
|
}
|
|
131
131
|
if (!processed) {
|
|
132
132
|
logger.error(`No handler found for message in channel ${channelConfig.name} for ${JSON.stringify(rawData)}`);
|
|
133
|
-
logger.error(`Channel ${
|
|
133
|
+
logger.error(`Channel config name: ${channelConfig.name}`);
|
|
134
134
|
}
|
|
135
135
|
return result;
|
|
136
136
|
};
|
|
137
|
+
const onBinaryMessage = channelConfig.onBinaryMessage
|
|
138
|
+
? async (data) => {
|
|
139
|
+
if (!validateAuth(requiresSession, userSession?.get(), channelConfig)) {
|
|
140
|
+
logger.error(`Channel ${channelConfig.name} with id ${channelHandler.getChannel().channelId} requires a session for binary message`);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
return channelConfig.onBinaryMessage(services, data, channelHandler.getChannel());
|
|
144
|
+
}
|
|
145
|
+
: undefined;
|
|
146
|
+
return { onMessage, onBinaryMessage };
|
|
137
147
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { CorePikkuPermission } from '../../function/functions.types.js';
|
|
2
|
-
import { SessionService } from '../../services/user-session-service.js';
|
|
3
|
-
import { CorePikkuMiddleware } from '../../types/core.types.js';
|
|
4
|
-
import { ChannelMeta, CoreChannel, RunChannelOptions, RunChannelParams } from './channel.types.js';
|
|
1
|
+
import type { CorePikkuPermission } from '../../function/functions.types.js';
|
|
2
|
+
import type { SessionService } from '../../services/user-session-service.js';
|
|
3
|
+
import type { CorePikkuMiddleware } from '../../types/core.types.js';
|
|
4
|
+
import type { ChannelMeta, CoreChannel, RunChannelOptions, RunChannelParams } from './channel.types.js';
|
|
5
5
|
/**
|
|
6
6
|
* Adds a channel and registers all functions referenced in it using the
|
|
7
7
|
* function names already stored in the channel metadata
|
|
8
8
|
*/
|
|
9
9
|
export declare const wireChannel: <In, Channel extends string, PikkuPermission extends CorePikkuPermission<In>, PikkuMiddleware extends CorePikkuMiddleware, ChannelFunction>(channel: CoreChannel<In, Channel, PikkuPermission, PikkuMiddleware, ChannelFunction>) => void;
|
|
10
|
-
export declare const openChannel: ({ route,
|
|
10
|
+
export declare const openChannel: ({ route, coerceDataFromSchema, request, }: Pick<CoreChannel<unknown, string>, "route"> & RunChannelParams<unknown> & {
|
|
11
11
|
userSession: SessionService<any>;
|
|
12
12
|
} & RunChannelOptions) => Promise<{
|
|
13
13
|
openingData: unknown;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NotFoundError, PikkuMissingMetaError } from '../../errors/errors.js';
|
|
2
2
|
import { addFunction } from '../../function/function-runner.js';
|
|
3
|
-
import { pikkuState } from '../../pikku-state.js';
|
|
3
|
+
import { pikkuState, getSingletonServices } from '../../pikku-state.js';
|
|
4
4
|
import { coerceTopLevelDataFromSchema, validateSchema } from '../../schema.js';
|
|
5
5
|
import { httpRouter } from '../http/routers/http-router.js';
|
|
6
6
|
/**
|
|
@@ -75,7 +75,8 @@ const getMatchingChannelConfig = (path) => {
|
|
|
75
75
|
meta: channelMeta,
|
|
76
76
|
};
|
|
77
77
|
};
|
|
78
|
-
export const openChannel = async ({ route,
|
|
78
|
+
export const openChannel = async ({ route, coerceDataFromSchema = true, request, }) => {
|
|
79
|
+
const singletonServices = getSingletonServices();
|
|
79
80
|
const matchingChannel = getMatchingChannelConfig(route);
|
|
80
81
|
if (!matchingChannel) {
|
|
81
82
|
singletonServices.logger.info(`Channel not found: ${route}`);
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { PikkuError } from '../../errors/error-handler.js';
|
|
2
|
-
import { HTTPFunctionMetaInputTypes, PikkuHTTPRequest, PikkuHTTPResponse } from '../http/http.types.js';
|
|
3
|
-
import {
|
|
1
|
+
import type { PikkuError } from '../../errors/error-handler.js';
|
|
2
|
+
import type { HTTPFunctionMetaInputTypes, PikkuHTTPRequest, PikkuHTTPResponse } from '../http/http.types.js';
|
|
3
|
+
import type { CorePikkuMiddleware, MiddlewareMetadata, PermissionMetadata } from '../../types/core.types.js';
|
|
4
|
+
export type BinaryData = ArrayBuffer | Uint8Array;
|
|
4
5
|
export type CorePikkuChannelMiddleware<Services = any, Event = unknown> = (services: Services, event: Event, next: (event: Event | Event[] | null) => Promise<void> | void) => Promise<void> | void;
|
|
5
6
|
export type CorePikkuChannelMiddlewareFactory<In = any, Services = any, Event = unknown> = (input: In) => CorePikkuChannelMiddleware<Services, Event>;
|
|
6
|
-
import { CorePermissionGroup, CorePikkuFunction, CorePikkuFunctionConfig, CorePikkuFunctionSessionless, CorePikkuPermission } from '../../function/functions.types.js';
|
|
7
|
+
import type { CorePermissionGroup, CorePikkuFunction, CorePikkuFunctionConfig, CorePikkuFunctionSessionless, CorePikkuPermission } from '../../function/functions.types.js';
|
|
7
8
|
export type RunChannelOptions = Partial<{
|
|
8
9
|
skipUserSession: boolean;
|
|
9
10
|
respondWith404: boolean;
|
|
@@ -13,10 +14,8 @@ export type RunChannelOptions = Partial<{
|
|
|
13
14
|
}>;
|
|
14
15
|
export type RunChannelParams<ChannelData> = {
|
|
15
16
|
channelId: string;
|
|
16
|
-
singletonServices: CoreSingletonServices;
|
|
17
17
|
request?: PikkuHTTPRequest<ChannelData>;
|
|
18
18
|
response?: PikkuHTTPResponse;
|
|
19
|
-
createWireServices?: CreateWireServices;
|
|
20
19
|
};
|
|
21
20
|
export interface ChannelMessageMeta {
|
|
22
21
|
pikkuFuncId: string;
|
|
@@ -38,6 +37,7 @@ export interface ChannelMeta {
|
|
|
38
37
|
disconnect: ChannelMessageMeta | null;
|
|
39
38
|
message: ChannelMessageMeta | null;
|
|
40
39
|
messageWirings: Record<string, Record<string, ChannelMessageMeta>>;
|
|
40
|
+
binary?: boolean | null;
|
|
41
41
|
summary?: string;
|
|
42
42
|
description?: string;
|
|
43
43
|
errors?: string[];
|
|
@@ -69,6 +69,8 @@ export type CoreChannel<ChannelData, Channel extends string, ChannelConnect = Co
|
|
|
69
69
|
channelMiddleware?: Array<CorePikkuChannelMiddleware | CorePikkuChannelMiddlewareFactory>;
|
|
70
70
|
permissions?: CorePermissionGroup<PikkuPermission>;
|
|
71
71
|
auth?: boolean;
|
|
72
|
+
binary?: boolean | null;
|
|
73
|
+
onBinaryMessage?: (services: any, data: BinaryData, channel: PikkuChannel<ChannelData, any>) => Promise<BinaryData | void> | BinaryData | void;
|
|
72
74
|
docs?: Partial<{
|
|
73
75
|
description: string;
|
|
74
76
|
response: string;
|
|
@@ -81,11 +83,13 @@ export interface PikkuChannel<OpeningData, out Out> {
|
|
|
81
83
|
channelId: string;
|
|
82
84
|
openingData: OpeningData;
|
|
83
85
|
send(data: Out, isBinary?: boolean): Promise<void> | void;
|
|
86
|
+
sendBinary(data: BinaryData): Promise<void> | void;
|
|
84
87
|
close(): Promise<void> | void;
|
|
85
88
|
state: 'initial' | 'open' | 'closed';
|
|
86
89
|
}
|
|
87
90
|
export interface PikkuChannelHandler<OpeningData = unknown, Out = unknown> {
|
|
88
91
|
send(message: Out, isBinary?: boolean): Promise<void> | void;
|
|
92
|
+
sendBinary(data: BinaryData): Promise<void> | void;
|
|
89
93
|
getChannel(): PikkuChannel<OpeningData, Out>;
|
|
90
94
|
}
|
|
91
95
|
export type PikkuChannelHandlerFactory<OpeningData = unknown, Out = unknown> = (channelId: string, channelName: string, openingData: OpeningData) => PikkuChannelHandler<OpeningData, Out>;
|
|
@@ -6,5 +6,5 @@ export type { EventHubService } from './eventhub-service.js';
|
|
|
6
6
|
export { ChannelStore } from './channel-store.js';
|
|
7
7
|
export type { Channel } from './channel-store.js';
|
|
8
8
|
export { EventHubStore } from './eventhub-store.js';
|
|
9
|
-
export type { ChannelsMeta, CoreChannel, CorePikkuChannelMiddleware, CorePikkuChannelMiddlewareFactory, ChannelMessageMeta, ChannelMeta, PikkuChannel, PikkuChannelHandlerFactory, } from './channel.types.js';
|
|
9
|
+
export type { BinaryData, ChannelsMeta, CoreChannel, CorePikkuChannelMiddleware, CorePikkuChannelMiddlewareFactory, ChannelMessageMeta, ChannelMeta, PikkuChannel, PikkuChannelHandlerFactory, } from './channel.types.js';
|
|
10
10
|
export { defineChannelRoutes } from './define-channel-routes.js';
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
+
import type { BinaryData } from '../channel.types.js';
|
|
1
2
|
import { PikkuAbstractChannelHandler } from '../pikku-abstract-channel-handler.js';
|
|
2
3
|
export declare class PikkuLocalChannelHandler<OpeningData = unknown, Out = unknown> extends PikkuAbstractChannelHandler<OpeningData, Out> {
|
|
3
4
|
private onMessageCallback?;
|
|
5
|
+
private onBinaryMessageCallback?;
|
|
4
6
|
private openCallBack?;
|
|
5
7
|
private closeCallback?;
|
|
6
8
|
private sendCallback?;
|
|
9
|
+
private sendBinaryCallback?;
|
|
7
10
|
registerOnOpen(callback: () => void): void;
|
|
8
11
|
open(): void;
|
|
9
12
|
registerOnMessage(callback: (data: any) => Promise<unknown>): void;
|
|
10
13
|
message(data: unknown): Promise<unknown>;
|
|
14
|
+
registerOnBinaryMessage(callback: (data: BinaryData) => Promise<BinaryData | void> | BinaryData | void): void;
|
|
15
|
+
binaryMessage(data: BinaryData): Promise<BinaryData | void>;
|
|
11
16
|
registerOnClose(callback: () => void): void;
|
|
12
17
|
close(): void;
|
|
13
18
|
registerOnSend(send: (message: Out) => void): void;
|
|
14
19
|
send(message: Out, isBinary?: boolean): void;
|
|
20
|
+
registerOnSendBinary(send: (data: BinaryData) => void): void;
|
|
21
|
+
sendBinary(data: BinaryData): void;
|
|
15
22
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { PikkuAbstractChannelHandler } from '../pikku-abstract-channel-handler.js';
|
|
2
2
|
export class PikkuLocalChannelHandler extends PikkuAbstractChannelHandler {
|
|
3
3
|
onMessageCallback;
|
|
4
|
+
onBinaryMessageCallback;
|
|
4
5
|
openCallBack;
|
|
5
6
|
closeCallback;
|
|
6
7
|
sendCallback;
|
|
8
|
+
sendBinaryCallback;
|
|
7
9
|
registerOnOpen(callback) {
|
|
8
10
|
this.openCallBack = callback;
|
|
9
11
|
}
|
|
@@ -19,6 +21,12 @@ export class PikkuLocalChannelHandler extends PikkuAbstractChannelHandler {
|
|
|
19
21
|
async message(data) {
|
|
20
22
|
return this.onMessageCallback?.(data);
|
|
21
23
|
}
|
|
24
|
+
registerOnBinaryMessage(callback) {
|
|
25
|
+
this.onBinaryMessageCallback = callback;
|
|
26
|
+
}
|
|
27
|
+
async binaryMessage(data) {
|
|
28
|
+
return this.onBinaryMessageCallback?.(data);
|
|
29
|
+
}
|
|
22
30
|
registerOnClose(callback) {
|
|
23
31
|
this.closeCallback = callback;
|
|
24
32
|
}
|
|
@@ -38,4 +46,13 @@ export class PikkuLocalChannelHandler extends PikkuAbstractChannelHandler {
|
|
|
38
46
|
}
|
|
39
47
|
return this.sendCallback?.(message, isBinary);
|
|
40
48
|
}
|
|
49
|
+
registerOnSendBinary(send) {
|
|
50
|
+
this.sendBinaryCallback = send;
|
|
51
|
+
}
|
|
52
|
+
sendBinary(data) {
|
|
53
|
+
if (!this.sendBinaryCallback) {
|
|
54
|
+
throw new Error('No sendBinary callback registered');
|
|
55
|
+
}
|
|
56
|
+
this.sendBinaryCallback(data);
|
|
57
|
+
}
|
|
41
58
|
}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
import { CoreChannel, RunChannelOptions
|
|
1
|
+
import type { CoreChannel, RunChannelOptions } from '../channel.types.js';
|
|
2
2
|
import { PikkuLocalChannelHandler } from './local-channel-handler.js';
|
|
3
|
-
|
|
3
|
+
import type { PikkuHTTPRequest, PikkuHTTPResponse } from '../../http/http.types.js';
|
|
4
|
+
export declare const runLocalChannel: ({ channelId, request, response, route, skipUserSession, respondWith404, coerceDataFromSchema, logWarningsForStatusCodes, bubbleErrors, }: Partial<Pick<CoreChannel<unknown, any>, "route">> & RunChannelOptions & {
|
|
5
|
+
channelId: string;
|
|
6
|
+
request?: PikkuHTTPRequest;
|
|
7
|
+
response?: PikkuHTTPResponse;
|
|
8
|
+
}) => Promise<PikkuLocalChannelHandler | void>;
|
|
@@ -6,7 +6,10 @@ import { PikkuLocalChannelHandler } from './local-channel-handler.js';
|
|
|
6
6
|
import { handleHTTPError } from '../../../handle-error.js';
|
|
7
7
|
import { PikkuSessionService, createMiddlewareSessionWireProps, } from '../../../services/user-session-service.js';
|
|
8
8
|
import { runChannelLifecycleWithMiddleware } from '../channel-common.js';
|
|
9
|
-
|
|
9
|
+
import { getSingletonServices, getCreateWireServices, } from '../../../pikku-state.js';
|
|
10
|
+
export const runLocalChannel = async ({ channelId, request, response, route, skipUserSession = false, respondWith404 = true, coerceDataFromSchema = true, logWarningsForStatusCodes = [], bubbleErrors = false, }) => {
|
|
11
|
+
const singletonServices = getSingletonServices();
|
|
12
|
+
const createWireServices = getCreateWireServices();
|
|
10
13
|
let wireServices;
|
|
11
14
|
let closedWireServices = false;
|
|
12
15
|
let channelHandler;
|
|
@@ -21,12 +24,10 @@ export const runLocalChannel = async ({ singletonServices, channelId, request, r
|
|
|
21
24
|
;
|
|
22
25
|
({ openingData, channelConfig, meta } = await openChannel({
|
|
23
26
|
channelId,
|
|
24
|
-
createWireServices,
|
|
25
27
|
respondWith404,
|
|
26
28
|
request,
|
|
27
29
|
response,
|
|
28
30
|
route,
|
|
29
|
-
singletonServices,
|
|
30
31
|
skipUserSession,
|
|
31
32
|
coerceDataFromSchema,
|
|
32
33
|
userSession,
|
|
@@ -98,7 +99,7 @@ export const runLocalChannel = async ({ singletonServices, channelId, request, r
|
|
|
98
99
|
}
|
|
99
100
|
await closeServices();
|
|
100
101
|
});
|
|
101
|
-
const onMessage = processMessageHandlers(services, channelConfig, channelHandler, userSession);
|
|
102
|
+
const { onMessage, onBinaryMessage } = processMessageHandlers(services, channelConfig, channelHandler, userSession);
|
|
102
103
|
channelHandler.registerOnMessage(async (data) => {
|
|
103
104
|
try {
|
|
104
105
|
const result = await onMessage(data);
|
|
@@ -109,6 +110,19 @@ export const runLocalChannel = async ({ singletonServices, channelId, request, r
|
|
|
109
110
|
channel.send({ error: e.message || 'Unknown error' });
|
|
110
111
|
}
|
|
111
112
|
});
|
|
113
|
+
if (onBinaryMessage) {
|
|
114
|
+
channelHandler.registerOnBinaryMessage(async (data) => {
|
|
115
|
+
try {
|
|
116
|
+
const result = await onBinaryMessage(data);
|
|
117
|
+
if (result) {
|
|
118
|
+
await channel.sendBinary(result);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
singletonServices.logger.error(`Error handling binary message: ${e.message}`);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
112
126
|
}
|
|
113
127
|
catch (e) {
|
|
114
128
|
handleHTTPError(e, http, channelId, singletonServices.logger, logWarningsForStatusCodes, respondWith404, bubbleErrors);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PikkuChannelHandler } from '../channel.types.js';
|
|
2
|
-
import { EventHubService } from '../eventhub-service.js';
|
|
1
|
+
import type { PikkuChannelHandler } from '../channel.types.js';
|
|
2
|
+
import type { EventHubService } from '../eventhub-service.js';
|
|
3
3
|
/**
|
|
4
4
|
* Implementation of the SubscriptionService interface.
|
|
5
5
|
* Manages subscriptions and publishes messages to subscribers.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PikkuChannel, PikkuChannelHandler } from './channel.types.js';
|
|
1
|
+
import type { BinaryData, PikkuChannel, PikkuChannelHandler } from './channel.types.js';
|
|
2
2
|
export declare abstract class PikkuAbstractChannelHandler<OpeningData = unknown, Out = unknown> implements PikkuChannelHandler<OpeningData, Out> {
|
|
3
3
|
channelId: string;
|
|
4
4
|
channelName: string;
|
|
@@ -6,6 +6,7 @@ export declare abstract class PikkuAbstractChannelHandler<OpeningData = unknown,
|
|
|
6
6
|
protected channel?: PikkuChannel<OpeningData, Out>;
|
|
7
7
|
constructor(channelId: string, channelName: string, openingData: OpeningData);
|
|
8
8
|
abstract send(message: Out, isBinary?: boolean): Promise<void> | void;
|
|
9
|
+
abstract sendBinary(data: BinaryData): Promise<void> | void;
|
|
9
10
|
getChannel(): PikkuChannel<OpeningData, Out>;
|
|
10
11
|
open(): void;
|
|
11
12
|
close(): Promise<void> | void;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { CoreChannel, RunChannelOptions, RunChannelParams, PikkuChannelHandlerFactory } from '../channel.types.js';
|
|
2
|
-
import { ChannelStore } from '../channel-store.js';
|
|
2
|
+
import type { ChannelStore } from '../channel-store.js';
|
|
3
3
|
export interface RunServerlessChannelParams<ChannelData> extends RunChannelParams<ChannelData> {
|
|
4
4
|
channelStore: ChannelStore;
|
|
5
5
|
channelHandlerFactory: PikkuChannelHandlerFactory;
|
|
6
6
|
channelObject?: unknown;
|
|
7
7
|
}
|
|
8
|
-
export declare const runChannelConnect: ({
|
|
9
|
-
export declare const runChannelDisconnect: ({
|
|
10
|
-
export declare const runChannelMessage: ({
|
|
8
|
+
export declare const runChannelConnect: ({ channelId, channelObject, request, response, route, channelStore, channelHandlerFactory, coerceDataFromSchema, logWarningsForStatusCodes, respondWith404, bubbleErrors, }: Pick<CoreChannel<unknown, any>, "route"> & RunChannelOptions & RunServerlessChannelParams<unknown>) => Promise<void>;
|
|
9
|
+
export declare const runChannelDisconnect: ({ channelId, channelStore, channelHandlerFactory, }: RunServerlessChannelParams<unknown>) => Promise<void>;
|
|
10
|
+
export declare const runChannelMessage: ({ channelId, channelStore, channelHandlerFactory, }: RunServerlessChannelParams<unknown>, data: unknown) => Promise<unknown>;
|
|
@@ -4,7 +4,7 @@ import { openChannel } from '../channel-runner.js';
|
|
|
4
4
|
import { createHTTPWire } from '../../http/http-runner.js';
|
|
5
5
|
import { handleHTTPError } from '../../../handle-error.js';
|
|
6
6
|
import { PikkuSessionService, createMiddlewareSessionWireProps, } from '../../../services/user-session-service.js';
|
|
7
|
-
import { pikkuState } from '../../../pikku-state.js';
|
|
7
|
+
import { getSingletonServices, getCreateWireServices, pikkuState, } from '../../../pikku-state.js';
|
|
8
8
|
import { PikkuFetchHTTPRequest } from '../../http/pikku-fetch-http-request.js';
|
|
9
9
|
import { runChannelLifecycleWithMiddleware } from '../channel-common.js';
|
|
10
10
|
const getVariablesForChannel = ({ channelId, channelName, channelHandlerFactory, openingData, }) => {
|
|
@@ -26,7 +26,9 @@ const getVariablesForChannel = ({ channelId, channelName, channelHandlerFactory,
|
|
|
26
26
|
meta,
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
|
-
export const runChannelConnect = async ({
|
|
29
|
+
export const runChannelConnect = async ({ channelId, channelObject, request, response, route, channelStore, channelHandlerFactory, coerceDataFromSchema = true, logWarningsForStatusCodes = [], respondWith404 = true, bubbleErrors = false, }) => {
|
|
30
|
+
const singletonServices = getSingletonServices();
|
|
31
|
+
const createWireServices = getCreateWireServices();
|
|
30
32
|
let wireServices;
|
|
31
33
|
let http;
|
|
32
34
|
if (request instanceof Request) {
|
|
@@ -35,10 +37,8 @@ export const runChannelConnect = async ({ singletonServices, channelId, channelO
|
|
|
35
37
|
const userSession = new PikkuSessionService(channelStore, channelId);
|
|
36
38
|
const { channelConfig, openingData, meta } = await openChannel({
|
|
37
39
|
channelId,
|
|
38
|
-
createWireServices,
|
|
39
40
|
request,
|
|
40
41
|
route,
|
|
41
|
-
singletonServices,
|
|
42
42
|
coerceDataFromSchema,
|
|
43
43
|
userSession,
|
|
44
44
|
});
|
|
@@ -88,7 +88,9 @@ export const runChannelConnect = async ({ singletonServices, channelId, channelO
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
};
|
|
91
|
-
export const runChannelDisconnect = async ({
|
|
91
|
+
export const runChannelDisconnect = async ({ channelId, channelStore, channelHandlerFactory, }) => {
|
|
92
|
+
const singletonServices = getSingletonServices();
|
|
93
|
+
const createWireServices = getCreateWireServices();
|
|
92
94
|
let wireServices;
|
|
93
95
|
// Try to get channel from store. In serverless environments (especially with
|
|
94
96
|
// serverless-offline or worker threads), disconnect can be called multiple times
|
|
@@ -96,26 +98,27 @@ export const runChannelDisconnect = async ({ singletonServices, ...params }) =>
|
|
|
96
98
|
// there's nothing to disconnect, so we can return early.
|
|
97
99
|
let channelData;
|
|
98
100
|
try {
|
|
99
|
-
channelData = await
|
|
101
|
+
channelData = await channelStore.getChannelAndSession(channelId);
|
|
100
102
|
}
|
|
101
|
-
catch
|
|
102
|
-
singletonServices.logger.info(`Channel ${
|
|
103
|
+
catch {
|
|
104
|
+
singletonServices.logger.info(`Channel ${channelId} not found during disconnect - already cleaned up`);
|
|
103
105
|
return;
|
|
104
106
|
}
|
|
105
107
|
const { openingData, channelName, session } = channelData;
|
|
106
108
|
const { channel, channelConfig, meta } = getVariablesForChannel({
|
|
107
|
-
|
|
109
|
+
channelId,
|
|
110
|
+
channelHandlerFactory,
|
|
108
111
|
openingData,
|
|
109
112
|
channelName,
|
|
110
113
|
});
|
|
111
|
-
const userSession = new PikkuSessionService(
|
|
114
|
+
const userSession = new PikkuSessionService(channelStore, channelId);
|
|
112
115
|
userSession.setInitial(session);
|
|
113
116
|
const wire = {
|
|
114
117
|
channel,
|
|
115
118
|
...createMiddlewareSessionWireProps(userSession),
|
|
116
119
|
};
|
|
117
|
-
if (
|
|
118
|
-
wireServices = await
|
|
120
|
+
if (createWireServices) {
|
|
121
|
+
wireServices = await createWireServices(singletonServices, wire);
|
|
119
122
|
}
|
|
120
123
|
const services = {
|
|
121
124
|
...singletonServices,
|
|
@@ -137,27 +140,30 @@ export const runChannelDisconnect = async ({ singletonServices, ...params }) =>
|
|
|
137
140
|
singletonServices.logger.error(`Error handling onDisconnect: ${e.message || e}`);
|
|
138
141
|
}
|
|
139
142
|
}
|
|
140
|
-
await
|
|
143
|
+
await channelStore.removeChannels([channel.channelId]);
|
|
141
144
|
if (wireServices) {
|
|
142
145
|
await closeWireServices(singletonServices.logger, wireServices);
|
|
143
146
|
}
|
|
144
147
|
};
|
|
145
|
-
export const runChannelMessage = async ({
|
|
148
|
+
export const runChannelMessage = async ({ channelId, channelStore, channelHandlerFactory, }, data) => {
|
|
149
|
+
const singletonServices = getSingletonServices();
|
|
150
|
+
const createWireServices = getCreateWireServices();
|
|
146
151
|
let wireServices;
|
|
147
|
-
const { openingData, channelName, session } = await
|
|
152
|
+
const { openingData, channelName, session } = await channelStore.getChannelAndSession(channelId);
|
|
148
153
|
const { channel, channelHandler, channelConfig } = getVariablesForChannel({
|
|
149
|
-
|
|
154
|
+
channelId,
|
|
155
|
+
channelHandlerFactory,
|
|
150
156
|
openingData,
|
|
151
157
|
channelName,
|
|
152
158
|
});
|
|
153
|
-
const userSession = new PikkuSessionService(
|
|
159
|
+
const userSession = new PikkuSessionService(channelStore, channelId);
|
|
154
160
|
userSession.setInitial(session);
|
|
155
161
|
const wire = {
|
|
156
162
|
channel,
|
|
157
163
|
...createMiddlewareSessionWireProps(userSession),
|
|
158
164
|
};
|
|
159
|
-
if (
|
|
160
|
-
wireServices = await
|
|
165
|
+
if (createWireServices) {
|
|
166
|
+
wireServices = await createWireServices(singletonServices, wire);
|
|
161
167
|
}
|
|
162
168
|
const services = {
|
|
163
169
|
...singletonServices,
|
|
@@ -165,7 +171,7 @@ export const runChannelMessage = async ({ singletonServices, ...params }, data)
|
|
|
165
171
|
};
|
|
166
172
|
let response;
|
|
167
173
|
try {
|
|
168
|
-
const onMessage = processMessageHandlers(services, channelConfig, channelHandler, userSession);
|
|
174
|
+
const { onMessage } = processMessageHandlers(services, channelConfig, channelHandler, userSession);
|
|
169
175
|
response = await onMessage(data);
|
|
170
176
|
}
|
|
171
177
|
catch (e) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CorePikkuMiddleware, CoreUserSession } from '../../types/core.types.js';
|
|
2
|
-
import { CoreCLI, CorePikkuCLIRender, CoreCLICommandConfig } from './cli.types.js';
|
|
1
|
+
import type { CorePikkuMiddleware, CoreUserSession } from '../../types/core.types.js';
|
|
2
|
+
import type { CoreCLI, CorePikkuCLIRender, CoreCLICommandConfig } from './cli.types.js';
|
|
3
3
|
import type { CoreSingletonServices, CoreServices, CreateWireServices, CreateConfig, CreateSingletonServices } from '../../types/core.types.js';
|
|
4
4
|
/**
|
|
5
5
|
* CLI command execution error - thrown when CLI execution fails
|
|
@@ -207,6 +207,9 @@ export async function runCLICommand({ program, commandPath, data, singletonServi
|
|
|
207
207
|
await Promise.resolve(renderer(singletonServices, data, undefined));
|
|
208
208
|
}
|
|
209
209
|
},
|
|
210
|
+
sendBinary: () => {
|
|
211
|
+
throw new Error('Binary data is not supported on CLI channels');
|
|
212
|
+
},
|
|
210
213
|
close: () => {
|
|
211
214
|
if (channel) {
|
|
212
215
|
channel.state = 'closed';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CorePikkuMiddleware, CoreSingletonServices, CoreUserSession, CoreServices, MiddlewareMetadata, PermissionMetadata } from '../../types/core.types.js';
|
|
2
|
-
import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuFunction, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
|
|
3
|
-
import { PikkuChannel } from '../channel/channel.types.js';
|
|
1
|
+
import type { CorePikkuMiddleware, CoreSingletonServices, CoreUserSession, CoreServices, MiddlewareMetadata, PermissionMetadata } from '../../types/core.types.js';
|
|
2
|
+
import type { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuFunction, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
|
|
3
|
+
import type { PikkuChannel } from '../channel/channel.types.js';
|
|
4
4
|
/**
|
|
5
5
|
* CLI option definition
|
|
6
6
|
*/
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CoreGateway } from './gateway.types.js';
|
|
2
|
+
import type { CoreSingletonServices } from '../../types/core.types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Register a messaging gateway.
|
|
5
|
+
*
|
|
6
|
+
* `wireGateway` is a meta-wiring that composes existing primitives
|
|
7
|
+
* (`wireHTTP`, `wireChannel`) under the hood. It does not replace them;
|
|
8
|
+
* it layers on top.
|
|
9
|
+
*
|
|
10
|
+
* @param config - Gateway configuration (name, type, adapter, func, middleware, etc.)
|
|
11
|
+
*/
|
|
12
|
+
export declare const wireGateway: (config: CoreGateway) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Create the message handler callback for a listener gateway.
|
|
15
|
+
*
|
|
16
|
+
* Returns a function `(rawData: unknown) => Promise<void>` that can be
|
|
17
|
+
* passed to `adapter.init()`. Used by `LocalGatewayService` (and any
|
|
18
|
+
* other GatewayService implementation) to wire up listener gateways.
|
|
19
|
+
*
|
|
20
|
+
* @param name - Gateway name (for wire.gateway metadata)
|
|
21
|
+
* @param config - The gateway configuration (adapter, func, middleware)
|
|
22
|
+
* @param singletonServices - Singleton services to pass to handler/middleware
|
|
23
|
+
*/
|
|
24
|
+
export declare const createListenerMessageHandler: (name: string, config: CoreGateway, singletonServices: CoreSingletonServices) => ((rawData: unknown) => Promise<void>);
|