@pikku/lambda 0.12.0 → 0.12.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 +18 -0
- package/dist/http/run-fetch.d.ts +2 -3
- package/dist/http/run-fetch.js +2 -5
- package/dist/http/run-fetch.js.map +1 -1
- package/dist/queue/sqs-worker.d.ts +3 -3
- package/dist/queue/sqs-worker.js +5 -11
- package/dist/queue/sqs-worker.js.map +1 -1
- package/dist/websocket/lambda-channel-handler.d.ts +3 -3
- package/dist/websocket/lambda-channel-handler.js +1 -1
- package/dist/websocket/lambda-channel-handler.js.map +1 -1
- package/dist/websocket/lambda-eventhub-service.d.ts +3 -3
- package/dist/websocket/utils.d.ts +5 -5
- package/dist/websocket/utils.js +3 -1
- package/dist/websocket/utils.js.map +1 -1
- package/dist/websocket/websocket-connect.d.ts +3 -4
- package/dist/websocket/websocket-connect.js +2 -4
- package/dist/websocket/websocket-connect.js.map +1 -1
- package/dist/websocket/websocket-disconnect.d.ts +3 -4
- package/dist/websocket/websocket-disconnect.js +3 -7
- package/dist/websocket/websocket-disconnect.js.map +1 -1
- package/dist/websocket/websocket-message.d.ts +3 -4
- package/dist/websocket/websocket-message.js +3 -7
- package/dist/websocket/websocket-message.js.map +1 -1
- package/dist/websocket/websocket-types.d.ts +2 -5
- package/package.json +4 -4
- package/src/http/run-fetch.ts +3 -20
- package/src/queue/sqs-worker.ts +8 -17
- package/src/websocket/lambda-channel-handler.ts +5 -5
- package/src/websocket/lambda-eventhub-service.ts +4 -4
- package/src/websocket/utils.ts +5 -4
- package/src/websocket/websocket-connect.ts +5 -24
- package/src/websocket/websocket-disconnect.ts +6 -27
- package/src/websocket/websocket-message.ts +6 -32
- package/src/websocket/websocket-types.ts +2 -18
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
## 0.12.0
|
|
2
2
|
|
|
3
|
+
## 0.12.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 62a8725: Update `@types/aws-lambda` peer and dev dependency to `^8.10.161` to resolve a `Duplicate identifier 'HttpResponseStream'` TypeScript error that appeared when bundling alongside other AWS SDK packages.
|
|
8
|
+
- Updated dependencies [62a8725]
|
|
9
|
+
- Updated dependencies [a3bdb0d]
|
|
10
|
+
- Updated dependencies [e0349ff]
|
|
11
|
+
- Updated dependencies [62a8725]
|
|
12
|
+
- Updated dependencies [e04531f]
|
|
13
|
+
- Updated dependencies [62a8725]
|
|
14
|
+
- Updated dependencies [a83efb8]
|
|
15
|
+
- Updated dependencies [8eed717]
|
|
16
|
+
- Updated dependencies [62a8725]
|
|
17
|
+
- Updated dependencies [62a8725]
|
|
18
|
+
- Updated dependencies [62a8725]
|
|
19
|
+
- @pikku/core@0.12.1
|
|
20
|
+
|
|
3
21
|
### New Features
|
|
4
22
|
|
|
5
23
|
- `createWireServices` and `createConfig` are now optional
|
package/dist/http/run-fetch.d.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare const runFetch: <SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession>(singletonServices: SingletonServices, createWireServices: CreateWireServices<SingletonServices, Services, UserSession> | undefined, event: APIGatewayEvent) => Promise<APIGatewayProxyResult>;
|
|
1
|
+
import type { APIGatewayEvent, APIGatewayProxyResult } from 'aws-lambda';
|
|
2
|
+
export declare const runFetch: (event: APIGatewayEvent) => Promise<APIGatewayProxyResult>;
|
package/dist/http/run-fetch.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PikkuFetchHTTPResponse, fetchData } from '@pikku/core/http';
|
|
2
2
|
import { responseToLambdaResult } from '../response-converter.js';
|
|
3
3
|
import { lambdaEventToRequest } from '../request-converter.js';
|
|
4
|
-
export const runFetch = async (
|
|
4
|
+
export const runFetch = async (event) => {
|
|
5
5
|
const request = lambdaEventToRequest(event);
|
|
6
6
|
const response = new PikkuFetchHTTPResponse();
|
|
7
7
|
if (request.method === 'options') {
|
|
@@ -11,10 +11,7 @@ export const runFetch = async (singletonServices, createWireServices, event) =>
|
|
|
11
11
|
return responseToLambdaResult(response.toResponse());
|
|
12
12
|
}
|
|
13
13
|
try {
|
|
14
|
-
await fetchData(request, response
|
|
15
|
-
singletonServices,
|
|
16
|
-
createWireServices: createWireServices,
|
|
17
|
-
});
|
|
14
|
+
await fetchData(request, response);
|
|
18
15
|
}
|
|
19
16
|
catch {
|
|
20
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-fetch.js","sourceRoot":"","sources":["../../src/http/run-fetch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-fetch.js","sourceRoot":"","sources":["../../src/http/run-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE9D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,KAAsB,EACU,EAAE;IAClC,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAA;IAE7C,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,QAAQ,CAAC,MAAM,CACb,8BAA8B,EAC9B,uFAAuF,CACxF,CAAA;QACD,QAAQ,CAAC,MAAM,CACb,8BAA8B,EAC9B,wCAAwC,CACzC,CAAA;QACD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACpB,OAAO,sBAAsB,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IAED,OAAO,sBAAsB,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;AACtD,CAAC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SQSBatchResponse, SQSEvent, SQSRecord } from 'aws-lambda';
|
|
2
|
-
import type {
|
|
1
|
+
import type { SQSBatchResponse, SQSEvent, SQSRecord } from 'aws-lambda';
|
|
2
|
+
import type { Logger } from '@pikku/core/services';
|
|
3
3
|
import type { QueueJob } from '@pikku/core/queue';
|
|
4
4
|
export declare function mapSQSRecordToQueueJob(record: SQSRecord, maxAttempts?: number): QueueJob;
|
|
5
|
-
export declare const runSQSQueueWorker: (
|
|
5
|
+
export declare const runSQSQueueWorker: (logger: Logger, event: SQSEvent) => Promise<SQSBatchResponse>;
|
package/dist/queue/sqs-worker.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { runQueueJob, QueueJobFailedError, QueueJobDiscardedError, } from '@pikku/core/queue';
|
|
2
2
|
export function mapSQSRecordToQueueJob(record, maxAttempts) {
|
|
3
3
|
let data;
|
|
4
4
|
try {
|
|
@@ -33,25 +33,19 @@ export function mapSQSRecordToQueueJob(record, maxAttempts) {
|
|
|
33
33
|
};
|
|
34
34
|
return job;
|
|
35
35
|
}
|
|
36
|
-
export const runSQSQueueWorker = async (
|
|
36
|
+
export const runSQSQueueWorker = async (logger, event) => {
|
|
37
37
|
console.log(JSON.stringify(event, null, 2));
|
|
38
38
|
const jobs = event.Records.map(mapSQSRecordToQueueJob);
|
|
39
|
-
const runJob = createQueueJobRunner({
|
|
40
|
-
singletonServices,
|
|
41
|
-
createWireServices,
|
|
42
|
-
});
|
|
43
39
|
const results = await Promise.allSettled(jobs.map(async (job) => {
|
|
44
40
|
try {
|
|
45
|
-
return await
|
|
46
|
-
job,
|
|
47
|
-
});
|
|
41
|
+
return await runQueueJob({ job });
|
|
48
42
|
}
|
|
49
43
|
catch (error) {
|
|
50
44
|
if (error instanceof QueueJobFailedError) {
|
|
51
45
|
throw error;
|
|
52
46
|
}
|
|
53
47
|
else if (error instanceof QueueJobDiscardedError) {
|
|
54
|
-
|
|
48
|
+
logger.info(`SQS job ${job.id} discarded: ${error.message}`);
|
|
55
49
|
return;
|
|
56
50
|
}
|
|
57
51
|
throw error;
|
|
@@ -59,7 +53,7 @@ export const runSQSQueueWorker = async (singletonServices, createWireServices, e
|
|
|
59
53
|
}));
|
|
60
54
|
results.forEach((result, index) => {
|
|
61
55
|
if (result.status === 'rejected') {
|
|
62
|
-
|
|
56
|
+
logger.error(`Failed to process SQS message ${jobs[index].id}:`, result.reason);
|
|
63
57
|
}
|
|
64
58
|
});
|
|
65
59
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqs-worker.js","sourceRoot":"","sources":["../../src/queue/sqs-worker.ts"],"names":[],"mappings":"AACA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"sqs-worker.js","sourceRoot":"","sources":["../../src/queue/sqs-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChannelStore, PikkuChannelHandlerFactory } from '@pikku/core/channel';
|
|
2
|
-
import { ApiGatewayManagementApiClient } from '@aws-sdk/client-apigatewaymanagementapi';
|
|
3
|
-
import { Logger } from '@pikku/core/services';
|
|
1
|
+
import type { ChannelStore, PikkuChannelHandlerFactory } from '@pikku/core/channel';
|
|
2
|
+
import type { ApiGatewayManagementApiClient } from '@aws-sdk/client-apigatewaymanagementapi';
|
|
3
|
+
import type { Logger } from '@pikku/core/services';
|
|
4
4
|
export declare const createLambdaChannelHandlerFactory: (logger: Logger, channelStore: ChannelStore, callbackAPI: ApiGatewayManagementApiClient) => PikkuChannelHandlerFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda-channel-handler.js","sourceRoot":"","sources":["../../src/websocket/lambda-channel-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lambda-channel-handler.js","sourceRoot":"","sources":["../../src/websocket/lambda-channel-handler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAIxC,MAAM,oBAIJ,SAAQ,2BAA6C;IAE3C;IACA;IAFV,YACU,MAAc,EACd,WAA0C,EAClD,SAAiB,EACjB,WAAmB,EACnB,WAAwB;QAExB,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;QANlC,WAAM,GAAN,MAAM,CAAQ;QACd,gBAAW,GAAX,WAAW,CAA+B;IAMpD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,OAAY,EAAE,QAAkB;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;QACvE,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACpC,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACxE,CAAC;CACF;AAED,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC/C,MAAc,EACd,YAA0B,EAC1B,WAA0C,EAC1C,EAAE;IACF,MAAM,OAAO,GAA+B,CAC1C,SAAS,EACT,WAAW,EACX,WAAW,EACX,EAAE,CACF,IAAI,oBAAoB,CACtB,MAAM,EACN,WAAW,EACX,SAAS,EACT,WAAW,EACX,WAAW,CACZ,CAAA;IACH,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ChannelStore, EventHubService, EventHubStore } from '@pikku/core/channel';
|
|
2
|
-
import { Logger } from '@pikku/core/services';
|
|
3
|
-
import { APIGatewayEvent } from 'aws-lambda';
|
|
1
|
+
import type { ChannelStore, EventHubService, EventHubStore } from '@pikku/core/channel';
|
|
2
|
+
import type { Logger } from '@pikku/core/services';
|
|
3
|
+
import type { APIGatewayEvent } from 'aws-lambda';
|
|
4
4
|
export declare class LambdaEventHubService<EventTopics extends Record<string, any> = {}> implements EventHubService<EventTopics> {
|
|
5
5
|
private logger;
|
|
6
6
|
private channelStore;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { ApiGatewayManagementApiClient } from '@aws-sdk/client-apigatewaymanagementapi';
|
|
2
|
-
import { Logger } from '@pikku/core/services';
|
|
3
|
-
import { APIGatewayEvent } from 'aws-lambda';
|
|
4
|
-
import { ChannelStore } from '@pikku/core/channel';
|
|
2
|
+
import type { Logger } from '@pikku/core/services';
|
|
3
|
+
import type { APIGatewayEvent } from 'aws-lambda';
|
|
4
|
+
import type { ChannelStore } from '@pikku/core/channel';
|
|
5
5
|
export declare const sendMessage: (logger: Logger, callbackAPI: ApiGatewayManagementApiClient, ConnectionId: string, Data: string) => Promise<boolean>;
|
|
6
6
|
export declare const sendMessages: (logger: Logger, channelStore: ChannelStore, callbackAPI: ApiGatewayManagementApiClient, fromChannelId: string, channelIds: string[], data: unknown, isBinary?: boolean) => Promise<void>;
|
|
7
7
|
export declare const getApiGatewayManagementApiClient: (logger: Logger, event: APIGatewayEvent) => ApiGatewayManagementApiClient;
|
|
8
|
-
export declare const getServerlessDependencies: (
|
|
8
|
+
export declare const getServerlessDependencies: (channelStore: ChannelStore, event: APIGatewayEvent) => {
|
|
9
9
|
channelId: string;
|
|
10
10
|
callbackAPI: ApiGatewayManagementApiClient;
|
|
11
11
|
channelHandlerFactory: import("@pikku/core/channel").PikkuChannelHandlerFactory;
|
|
12
|
-
channelStore: ChannelStore<unknown, unknown, import("@pikku/core
|
|
12
|
+
channelStore: ChannelStore<unknown, unknown, import("@pikku/core").CoreUserSession, import("@pikku/core/channel").Channel<unknown, unknown>>;
|
|
13
13
|
};
|
package/dist/websocket/utils.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ApiGatewayManagementApiClient, PostToConnectionCommand, } from '@aws-sdk/client-apigatewaymanagementapi';
|
|
2
|
+
import { getSingletonServices } from '@pikku/core';
|
|
2
3
|
import { createLambdaChannelHandlerFactory } from './lambda-channel-handler.js';
|
|
3
4
|
export const sendMessage = async (logger, callbackAPI, ConnectionId, Data) => {
|
|
4
5
|
try {
|
|
@@ -47,7 +48,8 @@ export const getApiGatewayManagementApiClient = (logger, event) => {
|
|
|
47
48
|
endpoint,
|
|
48
49
|
});
|
|
49
50
|
};
|
|
50
|
-
export const getServerlessDependencies = (
|
|
51
|
+
export const getServerlessDependencies = (channelStore, event) => {
|
|
52
|
+
const { logger } = getSingletonServices();
|
|
51
53
|
const channelId = event.requestContext.connectionId;
|
|
52
54
|
if (!channelId) {
|
|
53
55
|
throw new Error('No connectionId found in requestContext');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/websocket/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,yCAAyC,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/websocket/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export declare const connectWebsocket: <SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession>(event: APIGatewayEvent, { singletonServices, createWireServices, channelStore, }: WebsocketParams<SingletonServices, Services, UserSession>) => Promise<APIGatewayProxyResult>;
|
|
1
|
+
import type { APIGatewayEvent, APIGatewayProxyResult } from 'aws-lambda';
|
|
2
|
+
import type { WebsocketParams } from './websocket-types.js';
|
|
3
|
+
export declare const connectWebsocket: (event: APIGatewayEvent, { channelStore }: WebsocketParams) => Promise<APIGatewayProxyResult>;
|
|
@@ -3,16 +3,14 @@ import { responseToLambdaResult } from '../response-converter.js';
|
|
|
3
3
|
import { runChannelConnect } from '@pikku/core/channel/serverless';
|
|
4
4
|
import { getServerlessDependencies } from './utils.js';
|
|
5
5
|
import { lambdaEventToRequest } from '../request-converter.js';
|
|
6
|
-
export const connectWebsocket = async (event, {
|
|
7
|
-
const runnerParams = getServerlessDependencies(
|
|
6
|
+
export const connectWebsocket = async (event, { channelStore }) => {
|
|
7
|
+
const runnerParams = getServerlessDependencies(channelStore, event);
|
|
8
8
|
const request = new PikkuFetchHTTPRequest(lambdaEventToRequest(event));
|
|
9
9
|
const response = new PikkuFetchHTTPResponse();
|
|
10
10
|
await runChannelConnect({
|
|
11
11
|
...runnerParams,
|
|
12
12
|
request,
|
|
13
13
|
response,
|
|
14
|
-
singletonServices: singletonServices,
|
|
15
|
-
createWireServices: createWireServices,
|
|
16
14
|
route: event.path || '/',
|
|
17
15
|
});
|
|
18
16
|
return responseToLambdaResult(response.toResponse());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-connect.js","sourceRoot":"","sources":["../../src/websocket/websocket-connect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"websocket-connect.js","sourceRoot":"","sources":["../../src/websocket/websocket-connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAEhF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,KAAsB,EACtB,EAAE,YAAY,EAAmB,EACD,EAAE;IAClC,MAAM,YAAY,GAAG,yBAAyB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;IACnE,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAA;IACtE,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAA;IAC7C,MAAM,iBAAiB,CAAC;QACtB,GAAG,YAAY;QACf,OAAO;QACP,QAAQ;QACR,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;KACzB,CAAC,CAAA;IACF,OAAO,sBAAsB,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;AACtD,CAAC,CAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export declare const disconnectWebsocket: <SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession>(event: APIGatewayProxyEvent, { singletonServices, createWireServices, channelStore, }: WebsocketParams<SingletonServices, Services, UserSession>) => Promise<APIGatewayProxyResult>;
|
|
1
|
+
import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
|
|
2
|
+
import type { WebsocketParams } from './websocket-types.js';
|
|
3
|
+
export declare const disconnectWebsocket: (event: APIGatewayProxyEvent, { channelStore }: WebsocketParams) => Promise<APIGatewayProxyResult>;
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { runChannelDisconnect } from '@pikku/core/channel/serverless';
|
|
2
2
|
import { getServerlessDependencies } from './utils.js';
|
|
3
|
-
export const disconnectWebsocket = async (event, {
|
|
4
|
-
const runnerParams = getServerlessDependencies(
|
|
5
|
-
await runChannelDisconnect(
|
|
6
|
-
...runnerParams,
|
|
7
|
-
singletonServices: singletonServices,
|
|
8
|
-
createWireServices: createWireServices,
|
|
9
|
-
});
|
|
3
|
+
export const disconnectWebsocket = async (event, { channelStore }) => {
|
|
4
|
+
const runnerParams = getServerlessDependencies(channelStore, event);
|
|
5
|
+
await runChannelDisconnect(runnerParams);
|
|
10
6
|
return { statusCode: 200, body: '' };
|
|
11
7
|
};
|
|
12
8
|
//# sourceMappingURL=websocket-disconnect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-disconnect.js","sourceRoot":"","sources":["../../src/websocket/websocket-disconnect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"websocket-disconnect.js","sourceRoot":"","sources":["../../src/websocket/websocket-disconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAGrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAGtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,KAA2B,EAC3B,EAAE,YAAY,EAAmB,EACD,EAAE;IAClC,MAAM,YAAY,GAAG,yBAAyB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;IACnE,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAA;IACxC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;AACtC,CAAC,CAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export declare const processWebsocketMessage: <SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession>(event: APIGatewayProxyEvent, { singletonServices, createWireServices, channelStore, }: WebsocketParams<SingletonServices, Services, UserSession>) => Promise<APIGatewayProxyResult>;
|
|
1
|
+
import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
|
|
2
|
+
import type { WebsocketParams } from './websocket-types.js';
|
|
3
|
+
export declare const processWebsocketMessage: (event: APIGatewayProxyEvent, { channelStore }: WebsocketParams) => Promise<APIGatewayProxyResult>;
|
|
@@ -2,15 +2,11 @@ import { PikkuFetchHTTPResponse } from '@pikku/core/http';
|
|
|
2
2
|
import { runChannelMessage } from '@pikku/core/channel/serverless';
|
|
3
3
|
import { getServerlessDependencies } from './utils.js';
|
|
4
4
|
import { responseToLambdaResult } from '../response-converter.js';
|
|
5
|
-
export const processWebsocketMessage = async (event, {
|
|
6
|
-
const runnerParams = getServerlessDependencies(
|
|
5
|
+
export const processWebsocketMessage = async (event, { channelStore }) => {
|
|
6
|
+
const runnerParams = getServerlessDependencies(channelStore, event);
|
|
7
7
|
const response = new PikkuFetchHTTPResponse();
|
|
8
8
|
try {
|
|
9
|
-
const result = await runChannelMessage(
|
|
10
|
-
...runnerParams,
|
|
11
|
-
singletonServices: singletonServices,
|
|
12
|
-
createWireServices: createWireServices,
|
|
13
|
-
}, event.body);
|
|
9
|
+
const result = await runChannelMessage(runnerParams, event.body);
|
|
14
10
|
if (result) {
|
|
15
11
|
response.json(result);
|
|
16
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-message.js","sourceRoot":"","sources":["../../src/websocket/websocket-message.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"websocket-message.js","sourceRoot":"","sources":["../../src/websocket/websocket-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAElE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC1C,KAA2B,EAC3B,EAAE,YAAY,EAAmB,EACD,EAAE;IAClC,MAAM,YAAY,GAAG,yBAAyB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;IACnE,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAA;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAChE,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CAAC,MAAa,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,sBAAsB,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;AACtD,CAAC,CAAA"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export type WebsocketParams<SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession> = {
|
|
1
|
+
import type { ChannelStore } from '@pikku/core/channel';
|
|
2
|
+
export type WebsocketParams = {
|
|
4
3
|
channelStore: ChannelStore;
|
|
5
|
-
singletonServices: SingletonServices;
|
|
6
|
-
createWireServices?: CreateWireServices<SingletonServices, Services, UserSession>;
|
|
7
4
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pikku/lambda",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "yasser.fadl@gmail.com",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"@aws-sdk/client-apigatewaymanagementapi": "^3.713.0",
|
|
26
|
-
"@pikku/core": "^0.12.
|
|
27
|
-
"@types/aws-lambda": "^8.10.
|
|
26
|
+
"@pikku/core": "^0.12.1",
|
|
27
|
+
"@types/aws-lambda": "^8.10.161"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@aws-sdk/client-apigatewaymanagementapi": "^3.985.0",
|
|
31
|
-
"@types/aws-lambda": "^8.10.
|
|
31
|
+
"@types/aws-lambda": "^8.10.161",
|
|
32
32
|
"typescript": "^5.9.3"
|
|
33
33
|
},
|
|
34
34
|
"engines": {
|
package/src/http/run-fetch.ts
CHANGED
|
@@ -1,23 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CoreSingletonServices,
|
|
3
|
-
CoreServices,
|
|
4
|
-
CreateWireServices,
|
|
5
|
-
CoreUserSession,
|
|
6
|
-
} from '@pikku/core'
|
|
7
1
|
import { PikkuFetchHTTPResponse, fetchData } from '@pikku/core/http'
|
|
8
|
-
import { APIGatewayEvent, APIGatewayProxyResult } from 'aws-lambda'
|
|
2
|
+
import type { APIGatewayEvent, APIGatewayProxyResult } from 'aws-lambda'
|
|
9
3
|
import { responseToLambdaResult } from '../response-converter.js'
|
|
10
4
|
import { lambdaEventToRequest } from '../request-converter.js'
|
|
11
5
|
|
|
12
|
-
export const runFetch = async
|
|
13
|
-
SingletonServices extends CoreSingletonServices,
|
|
14
|
-
Services extends CoreServices<SingletonServices>,
|
|
15
|
-
UserSession extends CoreUserSession,
|
|
16
|
-
>(
|
|
17
|
-
singletonServices: SingletonServices,
|
|
18
|
-
createWireServices:
|
|
19
|
-
| CreateWireServices<SingletonServices, Services, UserSession>
|
|
20
|
-
| undefined,
|
|
6
|
+
export const runFetch = async (
|
|
21
7
|
event: APIGatewayEvent
|
|
22
8
|
): Promise<APIGatewayProxyResult> => {
|
|
23
9
|
const request = lambdaEventToRequest(event)
|
|
@@ -37,10 +23,7 @@ export const runFetch = async <
|
|
|
37
23
|
}
|
|
38
24
|
|
|
39
25
|
try {
|
|
40
|
-
await fetchData(request, response
|
|
41
|
-
singletonServices,
|
|
42
|
-
createWireServices: createWireServices as any,
|
|
43
|
-
})
|
|
26
|
+
await fetchData(request, response)
|
|
44
27
|
} catch {
|
|
45
28
|
// Error should have already been handled by fetch
|
|
46
29
|
}
|
package/src/queue/sqs-worker.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { SQSBatchResponse, SQSEvent, SQSRecord } from 'aws-lambda'
|
|
1
|
+
import type { SQSBatchResponse, SQSEvent, SQSRecord } from 'aws-lambda'
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
runQueueJob,
|
|
4
4
|
QueueJobFailedError,
|
|
5
5
|
QueueJobDiscardedError,
|
|
6
6
|
} from '@pikku/core/queue'
|
|
7
|
-
import type {
|
|
7
|
+
import type { Logger } from '@pikku/core/services'
|
|
8
8
|
import type { QueueJob, QueueJobStatus } from '@pikku/core/queue'
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -57,34 +57,25 @@ export function mapSQSRecordToQueueJob(
|
|
|
57
57
|
* Create an SQS handler that processes queue jobs using Pikku
|
|
58
58
|
*/
|
|
59
59
|
export const runSQSQueueWorker = async (
|
|
60
|
-
|
|
61
|
-
createWireServices: CreateWireServices<any, any, any> | undefined,
|
|
60
|
+
logger: Logger,
|
|
62
61
|
event: SQSEvent
|
|
63
62
|
): Promise<SQSBatchResponse> => {
|
|
64
63
|
console.log(JSON.stringify(event, null, 2))
|
|
65
64
|
const jobs = event.Records.map(mapSQSRecordToQueueJob)
|
|
66
|
-
const runJob = createQueueJobRunner({
|
|
67
|
-
singletonServices,
|
|
68
|
-
createWireServices,
|
|
69
|
-
})
|
|
70
65
|
|
|
71
66
|
// Process all jobs in parallel
|
|
72
67
|
const results = await Promise.allSettled(
|
|
73
68
|
jobs.map(async (job) => {
|
|
74
69
|
try {
|
|
75
|
-
return await
|
|
76
|
-
job,
|
|
77
|
-
})
|
|
70
|
+
return await runQueueJob({ job })
|
|
78
71
|
} catch (error: unknown) {
|
|
79
72
|
if (error instanceof QueueJobFailedError) {
|
|
80
73
|
// Let SQS handle this as a failed job (will go to retry or DLQ)
|
|
81
74
|
throw error
|
|
82
75
|
} else if (error instanceof QueueJobDiscardedError) {
|
|
83
76
|
// For SQS, discarding means completing successfully (no retry)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
)
|
|
87
|
-
return // Successfully "completed" by discarding
|
|
77
|
+
logger.info(`SQS job ${job.id} discarded: ${error.message}`)
|
|
78
|
+
return
|
|
88
79
|
}
|
|
89
80
|
throw error
|
|
90
81
|
}
|
|
@@ -94,7 +85,7 @@ export const runSQSQueueWorker = async (
|
|
|
94
85
|
// Log any failures but don't throw (SQS will handle retries)
|
|
95
86
|
results.forEach((result, index) => {
|
|
96
87
|
if (result.status === 'rejected') {
|
|
97
|
-
|
|
88
|
+
logger.error(
|
|
98
89
|
`Failed to process SQS message ${jobs[index]!.id}:`,
|
|
99
90
|
result.reason
|
|
100
91
|
)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { CoreUserSession } from '@pikku/core'
|
|
2
|
-
import {
|
|
1
|
+
import type { CoreUserSession } from '@pikku/core'
|
|
2
|
+
import type {
|
|
3
3
|
ChannelStore,
|
|
4
|
-
PikkuAbstractChannelHandler,
|
|
5
4
|
PikkuChannelHandlerFactory,
|
|
6
5
|
} from '@pikku/core/channel'
|
|
6
|
+
import { PikkuAbstractChannelHandler } from '@pikku/core/channel'
|
|
7
7
|
import { sendMessage } from './utils.js'
|
|
8
|
-
import { ApiGatewayManagementApiClient } from '@aws-sdk/client-apigatewaymanagementapi'
|
|
9
|
-
import { Logger } from '@pikku/core/services'
|
|
8
|
+
import type { ApiGatewayManagementApiClient } from '@aws-sdk/client-apigatewaymanagementapi'
|
|
9
|
+
import type { Logger } from '@pikku/core/services'
|
|
10
10
|
|
|
11
11
|
class LambdaChannelHandler<
|
|
12
12
|
UserSession extends CoreUserSession = CoreUserSession,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { ApiGatewayManagementApiClient } from '@aws-sdk/client-apigatewaymanagementapi'
|
|
2
|
-
import {
|
|
1
|
+
import type { ApiGatewayManagementApiClient } from '@aws-sdk/client-apigatewaymanagementapi'
|
|
2
|
+
import type {
|
|
3
3
|
ChannelStore,
|
|
4
4
|
EventHubService,
|
|
5
5
|
EventHubStore,
|
|
6
6
|
} from '@pikku/core/channel'
|
|
7
7
|
import { getApiGatewayManagementApiClient, sendMessages } from './utils.js'
|
|
8
|
-
import { Logger } from '@pikku/core/services'
|
|
9
|
-
import { APIGatewayEvent } from 'aws-lambda'
|
|
8
|
+
import type { Logger } from '@pikku/core/services'
|
|
9
|
+
import type { APIGatewayEvent } from 'aws-lambda'
|
|
10
10
|
|
|
11
11
|
export class LambdaEventHubService<EventTopics extends Record<string, any> = {}>
|
|
12
12
|
implements EventHubService<EventTopics>
|
package/src/websocket/utils.ts
CHANGED
|
@@ -2,10 +2,11 @@ import {
|
|
|
2
2
|
ApiGatewayManagementApiClient,
|
|
3
3
|
PostToConnectionCommand,
|
|
4
4
|
} from '@aws-sdk/client-apigatewaymanagementapi'
|
|
5
|
-
import { Logger } from '@pikku/core/services'
|
|
6
|
-
import {
|
|
5
|
+
import type { Logger } from '@pikku/core/services'
|
|
6
|
+
import { getSingletonServices } from '@pikku/core'
|
|
7
|
+
import type { APIGatewayEvent } from 'aws-lambda'
|
|
7
8
|
import { createLambdaChannelHandlerFactory } from './lambda-channel-handler.js'
|
|
8
|
-
import { ChannelStore } from '@pikku/core/channel'
|
|
9
|
+
import type { ChannelStore } from '@pikku/core/channel'
|
|
9
10
|
|
|
10
11
|
export const sendMessage = async (
|
|
11
12
|
logger: Logger,
|
|
@@ -77,10 +78,10 @@ export const getApiGatewayManagementApiClient = (
|
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
export const getServerlessDependencies = (
|
|
80
|
-
logger: Logger,
|
|
81
81
|
channelStore: ChannelStore,
|
|
82
82
|
event: APIGatewayEvent
|
|
83
83
|
) => {
|
|
84
|
+
const { logger } = getSingletonServices()
|
|
84
85
|
const channelId = event.requestContext.connectionId
|
|
85
86
|
if (!channelId) {
|
|
86
87
|
throw new Error('No connectionId found in requestContext')
|
|
@@ -1,41 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CoreSingletonServices,
|
|
3
|
-
CoreServices,
|
|
4
|
-
CoreUserSession,
|
|
5
|
-
} from '@pikku/core'
|
|
6
1
|
import { PikkuFetchHTTPRequest, PikkuFetchHTTPResponse } from '@pikku/core/http'
|
|
7
|
-
import { APIGatewayEvent, APIGatewayProxyResult } from 'aws-lambda'
|
|
2
|
+
import type { APIGatewayEvent, APIGatewayProxyResult } from 'aws-lambda'
|
|
8
3
|
import { responseToLambdaResult } from '../response-converter.js'
|
|
9
4
|
import { runChannelConnect } from '@pikku/core/channel/serverless'
|
|
10
5
|
import { getServerlessDependencies } from './utils.js'
|
|
11
|
-
import { WebsocketParams } from './websocket-types.js'
|
|
6
|
+
import type { WebsocketParams } from './websocket-types.js'
|
|
12
7
|
import { lambdaEventToRequest } from '../request-converter.js'
|
|
13
8
|
|
|
14
|
-
export const connectWebsocket = async
|
|
15
|
-
SingletonServices extends CoreSingletonServices,
|
|
16
|
-
Services extends CoreServices<SingletonServices>,
|
|
17
|
-
UserSession extends CoreUserSession,
|
|
18
|
-
>(
|
|
9
|
+
export const connectWebsocket = async (
|
|
19
10
|
event: APIGatewayEvent,
|
|
20
|
-
{
|
|
21
|
-
singletonServices,
|
|
22
|
-
createWireServices,
|
|
23
|
-
channelStore,
|
|
24
|
-
}: WebsocketParams<SingletonServices, Services, UserSession>
|
|
11
|
+
{ channelStore }: WebsocketParams
|
|
25
12
|
): Promise<APIGatewayProxyResult> => {
|
|
26
|
-
const runnerParams = getServerlessDependencies(
|
|
27
|
-
singletonServices.logger,
|
|
28
|
-
channelStore,
|
|
29
|
-
event
|
|
30
|
-
)
|
|
13
|
+
const runnerParams = getServerlessDependencies(channelStore, event)
|
|
31
14
|
const request = new PikkuFetchHTTPRequest(lambdaEventToRequest(event))
|
|
32
15
|
const response = new PikkuFetchHTTPResponse()
|
|
33
16
|
await runChannelConnect({
|
|
34
17
|
...runnerParams,
|
|
35
18
|
request,
|
|
36
19
|
response,
|
|
37
|
-
singletonServices: singletonServices as any,
|
|
38
|
-
createWireServices: createWireServices as any,
|
|
39
20
|
route: event.path || '/',
|
|
40
21
|
})
|
|
41
22
|
return responseToLambdaResult(response.toResponse())
|
|
@@ -1,35 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CoreSingletonServices,
|
|
3
|
-
CoreServices,
|
|
4
|
-
CoreUserSession,
|
|
5
|
-
} from '@pikku/core'
|
|
6
1
|
import { runChannelDisconnect } from '@pikku/core/channel/serverless'
|
|
7
|
-
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda'
|
|
2
|
+
import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda'
|
|
8
3
|
|
|
9
4
|
import { getServerlessDependencies } from './utils.js'
|
|
10
|
-
import { WebsocketParams } from './websocket-types.js'
|
|
5
|
+
import type { WebsocketParams } from './websocket-types.js'
|
|
11
6
|
|
|
12
|
-
export const disconnectWebsocket = async
|
|
13
|
-
SingletonServices extends CoreSingletonServices,
|
|
14
|
-
Services extends CoreServices<SingletonServices>,
|
|
15
|
-
UserSession extends CoreUserSession,
|
|
16
|
-
>(
|
|
7
|
+
export const disconnectWebsocket = async (
|
|
17
8
|
event: APIGatewayProxyEvent,
|
|
18
|
-
{
|
|
19
|
-
singletonServices,
|
|
20
|
-
createWireServices,
|
|
21
|
-
channelStore,
|
|
22
|
-
}: WebsocketParams<SingletonServices, Services, UserSession>
|
|
9
|
+
{ channelStore }: WebsocketParams
|
|
23
10
|
): Promise<APIGatewayProxyResult> => {
|
|
24
|
-
const runnerParams = getServerlessDependencies(
|
|
25
|
-
|
|
26
|
-
channelStore,
|
|
27
|
-
event
|
|
28
|
-
)
|
|
29
|
-
await runChannelDisconnect({
|
|
30
|
-
...runnerParams,
|
|
31
|
-
singletonServices: singletonServices as any,
|
|
32
|
-
createWireServices: createWireServices as any,
|
|
33
|
-
})
|
|
11
|
+
const runnerParams = getServerlessDependencies(channelStore, event)
|
|
12
|
+
await runChannelDisconnect(runnerParams)
|
|
34
13
|
return { statusCode: 200, body: '' }
|
|
35
14
|
}
|
|
@@ -1,48 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CoreSingletonServices,
|
|
3
|
-
CoreServices,
|
|
4
|
-
CoreUserSession,
|
|
5
|
-
} from '@pikku/core'
|
|
6
1
|
import { PikkuFetchHTTPResponse } from '@pikku/core/http'
|
|
7
2
|
import { runChannelMessage } from '@pikku/core/channel/serverless'
|
|
8
|
-
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda'
|
|
3
|
+
import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda'
|
|
9
4
|
import { getServerlessDependencies } from './utils.js'
|
|
10
|
-
import { WebsocketParams } from './websocket-types.js'
|
|
5
|
+
import type { WebsocketParams } from './websocket-types.js'
|
|
11
6
|
import { responseToLambdaResult } from '../response-converter.js'
|
|
12
7
|
|
|
13
|
-
export const processWebsocketMessage = async
|
|
14
|
-
SingletonServices extends CoreSingletonServices,
|
|
15
|
-
Services extends CoreServices<SingletonServices>,
|
|
16
|
-
UserSession extends CoreUserSession,
|
|
17
|
-
>(
|
|
8
|
+
export const processWebsocketMessage = async (
|
|
18
9
|
event: APIGatewayProxyEvent,
|
|
19
|
-
{
|
|
20
|
-
singletonServices,
|
|
21
|
-
createWireServices,
|
|
22
|
-
channelStore,
|
|
23
|
-
}: WebsocketParams<SingletonServices, Services, UserSession>
|
|
10
|
+
{ channelStore }: WebsocketParams
|
|
24
11
|
): Promise<APIGatewayProxyResult> => {
|
|
25
|
-
const runnerParams = getServerlessDependencies(
|
|
26
|
-
singletonServices.logger,
|
|
27
|
-
channelStore,
|
|
28
|
-
event
|
|
29
|
-
)
|
|
12
|
+
const runnerParams = getServerlessDependencies(channelStore, event)
|
|
30
13
|
const response = new PikkuFetchHTTPResponse()
|
|
31
14
|
try {
|
|
32
|
-
const result = await runChannelMessage(
|
|
33
|
-
{
|
|
34
|
-
...runnerParams,
|
|
35
|
-
singletonServices: singletonServices as any,
|
|
36
|
-
createWireServices: createWireServices as any,
|
|
37
|
-
},
|
|
38
|
-
event.body
|
|
39
|
-
)
|
|
15
|
+
const result = await runChannelMessage(runnerParams, event.body)
|
|
40
16
|
if (result) {
|
|
41
|
-
// TODO: Support non json
|
|
42
17
|
response.json(result as any)
|
|
43
18
|
}
|
|
44
19
|
} catch (e) {
|
|
45
|
-
// Error should have already been handled by fetch
|
|
46
20
|
console.error(e)
|
|
47
21
|
}
|
|
48
22
|
return responseToLambdaResult(response.toResponse())
|
|
@@ -1,21 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CoreSingletonServices,
|
|
3
|
-
CoreServices,
|
|
4
|
-
CoreUserSession,
|
|
5
|
-
CreateWireServices,
|
|
6
|
-
} from '@pikku/core'
|
|
7
|
-
import { ChannelStore } from '@pikku/core/channel'
|
|
1
|
+
import type { ChannelStore } from '@pikku/core/channel'
|
|
8
2
|
|
|
9
|
-
export type WebsocketParams
|
|
10
|
-
SingletonServices extends CoreSingletonServices,
|
|
11
|
-
Services extends CoreServices<SingletonServices>,
|
|
12
|
-
UserSession extends CoreUserSession,
|
|
13
|
-
> = {
|
|
3
|
+
export type WebsocketParams = {
|
|
14
4
|
channelStore: ChannelStore
|
|
15
|
-
singletonServices: SingletonServices
|
|
16
|
-
createWireServices?: CreateWireServices<
|
|
17
|
-
SingletonServices,
|
|
18
|
-
Services,
|
|
19
|
-
UserSession
|
|
20
|
-
>
|
|
21
5
|
}
|