@pikku/lambda 0.6.3
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 +42 -0
- package/README.md +3 -0
- package/dist/http/anywhere-http.d.ts +3 -0
- package/dist/http/anywhere-http.js +13 -0
- package/dist/http/anywhere-http.js.map +1 -0
- package/dist/http/cors-http.d.ts +3 -0
- package/dist/http/cors-http.js +35 -0
- package/dist/http/cors-http.js.map +1 -0
- package/dist/http/corsless-http.d.ts +3 -0
- package/dist/http/corsless-http.js +9 -0
- package/dist/http/corsless-http.js.map +1 -0
- package/dist/http/general-http-handler.d.ts +5 -0
- package/dist/http/general-http-handler.js +28 -0
- package/dist/http/general-http-handler.js.map +1 -0
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.js +4 -0
- package/dist/http/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/pikku-api-gateway-lambda-request.d.ts +12 -0
- package/dist/pikku-api-gateway-lambda-request.js +24 -0
- package/dist/pikku-api-gateway-lambda-request.js.map +1 -0
- package/dist/pikku-api-gateway-lambda-response.d.ts +15 -0
- package/dist/pikku-api-gateway-lambda-response.js +32 -0
- package/dist/pikku-api-gateway-lambda-response.js.map +1 -0
- package/dist/websocket/index.d.ts +4 -0
- package/dist/websocket/index.js +5 -0
- package/dist/websocket/index.js.map +1 -0
- package/dist/websocket/lambda-channel-handler.d.ts +4 -0
- package/dist/websocket/lambda-channel-handler.js +29 -0
- package/dist/websocket/lambda-channel-handler.js.map +1 -0
- package/dist/websocket/lambda-eventhub-service.d.ts +14 -0
- package/dist/websocket/lambda-eventhub-service.js +27 -0
- package/dist/websocket/lambda-eventhub-service.js.map +1 -0
- package/dist/websocket/utils.d.ts +13 -0
- package/dist/websocket/utils.js +59 -0
- package/dist/websocket/utils.js.map +1 -0
- package/dist/websocket/websocket-connect.d.ts +4 -0
- package/dist/websocket/websocket-connect.js +19 -0
- package/dist/websocket/websocket-connect.js.map +1 -0
- package/dist/websocket/websocket-disconnect.d.ts +4 -0
- package/dist/websocket/websocket-disconnect.js +12 -0
- package/dist/websocket/websocket-disconnect.js.map +1 -0
- package/dist/websocket/websocket-message.d.ts +4 -0
- package/dist/websocket/websocket-message.js +22 -0
- package/dist/websocket/websocket-message.js.map +1 -0
- package/dist/websocket/websocket-types.d.ts +7 -0
- package/dist/websocket/websocket-types.js +2 -0
- package/dist/websocket/websocket-types.js.map +1 -0
- package/package.json +37 -0
- package/run-tests.sh +53 -0
- package/src/http/anywhere-http.ts +39 -0
- package/src/http/cors-http.ts +70 -0
- package/src/http/corsless-http.ts +33 -0
- package/src/http/general-http-handler.ts +59 -0
- package/src/http/index.ts +3 -0
- package/src/index.ts +1 -0
- package/src/pikku-api-gateway-lambda-request.ts +31 -0
- package/src/pikku-api-gateway-lambda-response.ts +41 -0
- package/src/websocket/index.ts +4 -0
- package/src/websocket/lambda-channel-handler.ts +63 -0
- package/src/websocket/lambda-eventhub-service.ts +59 -0
- package/src/websocket/utils.ts +95 -0
- package/src/websocket/websocket-connect.ts +41 -0
- package/src/websocket/websocket-disconnect.ts +35 -0
- package/src/websocket/websocket-message.ts +48 -0
- package/src/websocket/websocket-types.ts +22 -0
- package/tsconfig.json +17 -0
- package/tsconfig.tsbuildinfo +1 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
## 0.6.1
|
|
2
|
+
|
|
3
|
+
## 0.6.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 0a92fa7: refactor: pulling schema into seperate package since ajv doesnt work on cloudflare (also keeps bundle size small!)
|
|
8
|
+
- Updated dependencies [0a92fa7]
|
|
9
|
+
- @pikku/core@0.6.7
|
|
10
|
+
|
|
11
|
+
## 0.6.2
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 09fc52c: feat: adding cloudflare and lambda websockets
|
|
16
|
+
breaking change: moved subscription from channel to services and renamed to event hub
|
|
17
|
+
- adecb52: feat: changes required to get cloudflare functions to work
|
|
18
|
+
- Updated dependencies [09fc52c]
|
|
19
|
+
- Updated dependencies [adecb52]
|
|
20
|
+
- @pikku/core@0.6.3
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- ed45ca9: feat: adding lambda serverless
|
|
25
|
+
- adeb392: feat: more channel improvements, and adding bubble option to runners to avoid all the empty try catches
|
|
26
|
+
- Updated dependencies [ed45ca9]
|
|
27
|
+
- Updated dependencies [adeb392]
|
|
28
|
+
- @pikku/core@0.6.2
|
|
29
|
+
|
|
30
|
+
## 0.0.2 - 28.07.2021
|
|
31
|
+
|
|
32
|
+
Using peer dependencies to avoid version mismatches, which in turn affects lambda and singletons
|
|
33
|
+
|
|
34
|
+
## 0.0.1 - 27.07.2021
|
|
35
|
+
|
|
36
|
+
Chore: Bumping deps
|
|
37
|
+
|
|
38
|
+
## 23.07.2021
|
|
39
|
+
|
|
40
|
+
### Initial Release
|
|
41
|
+
|
|
42
|
+
A package that allows users to call Pikku functions from lambda
|
package/README.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { CoreSingletonServices, CoreServices, CreateSessionServices, CoreUserSession } from '@pikku/core';
|
|
2
|
+
import { APIGatewayProxyEvent } from 'aws-lambda';
|
|
3
|
+
export declare const anywhereHTTP: <SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>>(event: APIGatewayProxyEvent, singletonServices: SingletonServices, createSessionServices: CreateSessionServices<SingletonServices, Services, CoreUserSession>) => Promise<import("aws-lambda").APIGatewayProxyResult>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { generalHTTPHandler } from './general-http-handler.js';
|
|
2
|
+
import { PikkuAPIGatewayLambdaRequest } from '../pikku-api-gateway-lambda-request.js';
|
|
3
|
+
import { PikkuAPIGatewayLambdaResponse } from '../pikku-api-gateway-lambda-response.js';
|
|
4
|
+
export const anywhereHTTP = async (event, singletonServices, createSessionServices) => {
|
|
5
|
+
const request = new PikkuAPIGatewayLambdaRequest(event);
|
|
6
|
+
const response = new PikkuAPIGatewayLambdaResponse();
|
|
7
|
+
if (event.headers.origin) {
|
|
8
|
+
response.setHeader('Access-Control-Allow-Origin', event.headers.origin.toString());
|
|
9
|
+
}
|
|
10
|
+
response.setHeader('Access-Control-Allow-Credentials', true);
|
|
11
|
+
return await generalHTTPHandler(singletonServices, createSessionServices, request, response);
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=anywhere-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anywhere-http.js","sourceRoot":"","sources":["../../src/http/anywhere-http.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAA;AACrF,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAA;AAEvF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAI/B,KAA2B,EAC3B,iBAAoC,EACpC,qBAIC,EACD,EAAE;IACF,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,IAAI,6BAA6B,EAAE,CAAA;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACzB,QAAQ,CAAC,SAAS,CAChB,6BAA6B,EAC7B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAChC,CAAA;IACH,CAAC;IACD,QAAQ,CAAC,SAAS,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAA;IAC5D,OAAO,MAAM,kBAAkB,CAC7B,iBAAiB,EACjB,qBAAqB,EACrB,OAAO,EACP,QAAQ,CACT,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CoreSingletonServices, CoreServices, CreateSessionServices, CoreUserSession } from '@pikku/core';
|
|
2
|
+
import type { APIGatewayProxyEvent } from 'aws-lambda';
|
|
3
|
+
export declare const corsHTTP: <SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession>(event: APIGatewayProxyEvent, allowedOrigins: string[], singletonServices: SingletonServices, createSessionServices: CreateSessionServices<SingletonServices, Services, UserSession>) => Promise<import("aws-lambda").APIGatewayProxyResult>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { generalHTTPHandler } from './general-http-handler.js';
|
|
2
|
+
import { InvalidOriginError } from '@pikku/core/errors';
|
|
3
|
+
import { PikkuAPIGatewayLambdaResponse } from '../pikku-api-gateway-lambda-response.js';
|
|
4
|
+
import { PikkuAPIGatewayLambdaRequest } from '../pikku-api-gateway-lambda-request.js';
|
|
5
|
+
const validateOrigin = (allowsOrigins, logger, event) => {
|
|
6
|
+
const origin = event.headers.origin;
|
|
7
|
+
if (!origin || allowsOrigins.every((domain) => !origin.includes(domain))) {
|
|
8
|
+
logger.error(`
|
|
9
|
+
CORS Error
|
|
10
|
+
- Recieved from origin: ${origin}
|
|
11
|
+
- Expected domain(s): ${allowsOrigins.join(', ')}
|
|
12
|
+
- Host: ${event.headers.host}
|
|
13
|
+
- Path: ${event.path}
|
|
14
|
+
- Headers: ${JSON.stringify(event.headers, null, '\t')}
|
|
15
|
+
`);
|
|
16
|
+
throw new InvalidOriginError();
|
|
17
|
+
}
|
|
18
|
+
return origin;
|
|
19
|
+
};
|
|
20
|
+
export const corsHTTP = async (event, allowedOrigins, singletonServices, createSessionServices) => {
|
|
21
|
+
const request = new PikkuAPIGatewayLambdaRequest(event);
|
|
22
|
+
const response = new PikkuAPIGatewayLambdaResponse();
|
|
23
|
+
let origin = false;
|
|
24
|
+
try {
|
|
25
|
+
origin = validateOrigin(allowedOrigins, singletonServices.logger, event);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
response.setStatus(400);
|
|
29
|
+
response.setJson({ error: 'error.invalid_origin' });
|
|
30
|
+
}
|
|
31
|
+
response.setHeader('Access-Control-Allow-Origin', origin);
|
|
32
|
+
response.setHeader('Access-Control-Allow-Credentials', true);
|
|
33
|
+
return await generalHTTPHandler(singletonServices, createSessionServices, request, response);
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=cors-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors-http.js","sourceRoot":"","sources":["../../src/http/cors-http.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAA;AACvF,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAA;AAErF,MAAM,cAAc,GAAG,CACrB,aAAuB,EACvB,MAAc,EACd,KAA2B,EACnB,EAAE;IACV,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA;IACnC,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC;;8BAEa,MAAM;4BACR,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;cACtC,KAAK,CAAC,OAAO,CAAC,IAAI;cAClB,KAAK,CAAC,IAAI;iBACP,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;GACvD,CAAC,CAAA;QACA,MAAM,IAAI,kBAAkB,EAAE,CAAA;IAChC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAK3B,KAA2B,EAC3B,cAAwB,EACxB,iBAAoC,EACpC,qBAIC,EACD,EAAE;IACF,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,IAAI,6BAA6B,EAAE,CAAA;IAEpD,IAAI,MAAM,GAAmB,KAAK,CAAA;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,cAAc,CAAC,cAAc,EAAE,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,QAAQ,CAAC,SAAS,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAA;IACzD,QAAQ,CAAC,SAAS,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAA;IAE5D,OAAO,MAAM,kBAAkB,CAC7B,iBAAiB,EACjB,qBAAqB,EACrB,OAAO,EACP,QAAQ,CACT,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { APIGatewayProxyEvent } from 'aws-lambda';
|
|
2
|
+
import { CoreServices, CoreSingletonServices, CoreUserSession, CreateSessionServices } from '@pikku/core';
|
|
3
|
+
export declare const corslessHTTP: <SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession>(event: APIGatewayProxyEvent, singletonServices: SingletonServices, createSessionServices: CreateSessionServices<SingletonServices, Services, UserSession>) => Promise<import("aws-lambda").APIGatewayProxyResult>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { generalHTTPHandler } from './general-http-handler.js';
|
|
2
|
+
import { PikkuAPIGatewayLambdaRequest } from '../pikku-api-gateway-lambda-request.js';
|
|
3
|
+
import { PikkuAPIGatewayLambdaResponse } from '../pikku-api-gateway-lambda-response.js';
|
|
4
|
+
export const corslessHTTP = async (event, singletonServices, createSessionServices) => {
|
|
5
|
+
const request = new PikkuAPIGatewayLambdaRequest(event);
|
|
6
|
+
const response = new PikkuAPIGatewayLambdaResponse();
|
|
7
|
+
return await generalHTTPHandler(singletonServices, createSessionServices, request, response);
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=corsless-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corsless-http.js","sourceRoot":"","sources":["../../src/http/corsless-http.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAA;AACrF,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAA;AAEvF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAK/B,KAA2B,EAC3B,iBAAoC,EACpC,qBAIC,EACD,EAAE;IACF,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,IAAI,6BAA6B,EAAE,CAAA;IACpD,OAAO,MAAM,kBAAkB,CAC7B,iBAAiB,EACjB,qBAAqB,EACrB,OAAO,EACP,QAAQ,CACT,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { CoreSingletonServices, CoreServices, CreateSessionServices, CoreUserSession } from '@pikku/core';
|
|
2
|
+
import { APIGatewayProxyResult } from 'aws-lambda';
|
|
3
|
+
import { PikkuAPIGatewayLambdaRequest } from '../pikku-api-gateway-lambda-request.js';
|
|
4
|
+
import { PikkuAPIGatewayLambdaResponse } from '../pikku-api-gateway-lambda-response.js';
|
|
5
|
+
export declare const generalHTTPHandler: <SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession>(singletonServices: SingletonServices, createSessionServices: CreateSessionServices<SingletonServices, Services, UserSession>, request: PikkuAPIGatewayLambdaRequest, response: PikkuAPIGatewayLambdaResponse) => Promise<APIGatewayProxyResult>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { runHTTPRoute } from '@pikku/core/http';
|
|
2
|
+
export const generalHTTPHandler = async (singletonServices, createSessionServices, request, response) => {
|
|
3
|
+
if (request.getMethod() === 'options') {
|
|
4
|
+
response.setHeader('Access-Control-Allow-Headers', 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-Amz-User-Agent');
|
|
5
|
+
response.setHeader('Access-Control-Allow-Methods', 'OPTIONS,DELETE,GET,HEAD,PATCH,POST,PUT');
|
|
6
|
+
response.setStatus(200);
|
|
7
|
+
response.setJson({});
|
|
8
|
+
return response.getLambdaResponse();
|
|
9
|
+
}
|
|
10
|
+
if (request.getPath().includes('health-check')) {
|
|
11
|
+
response.setStatus(200);
|
|
12
|
+
return response.getLambdaResponse();
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
await runHTTPRoute({
|
|
16
|
+
request,
|
|
17
|
+
response,
|
|
18
|
+
singletonServices,
|
|
19
|
+
createSessionServices: createSessionServices,
|
|
20
|
+
route: request.getPath(),
|
|
21
|
+
method: request.getMethod(),
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
}
|
|
26
|
+
return response.getLambdaResponse();
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=general-http-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general-http-handler.js","sourceRoot":"","sources":["../../src/http/general-http-handler.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAK/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAKrC,iBAAoC,EACpC,qBAIC,EACD,OAAqC,EACrC,QAAuC,EACP,EAAE;IAClC,IAAI,OAAO,CAAC,SAAS,EAAE,KAAK,SAAS,EAAE,CAAC;QACtC,QAAQ,CAAC,SAAS,CAChB,8BAA8B,EAC9B,uFAAuF,CACxF,CAAA;QACD,QAAQ,CAAC,SAAS,CAChB,8BAA8B,EAC9B,wCAAwC,CACzC,CAAA;QACD,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACpB,OAAO,QAAQ,CAAC,iBAAiB,EAAE,CAAA;IACrC,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/C,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QACvB,OAAO,QAAQ,CAAC,iBAAiB,EAAE,CAAA;IACrC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,CAAC;YACjB,OAAO;YACP,QAAQ;YACR,iBAAiB;YACjB,qBAAqB,EAAE,qBAA4B;YACnD,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE;YACxB,MAAM,EAAE,OAAO,CAAC,SAAS,EAAS;SACnC,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IAED,OAAO,QAAQ,CAAC,iBAAiB,EAAE,CAAA;AACrC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe,IAAI,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { APIGatewayProxyEvent } from 'aws-lambda';
|
|
2
|
+
import type { HTTPMethod, PikkuQuery } from '@pikku/core/http';
|
|
3
|
+
import { PikkuHTTPAbstractRequest } from '@pikku/core/http/pikku-http-abstract-request';
|
|
4
|
+
export declare class PikkuAPIGatewayLambdaRequest extends PikkuHTTPAbstractRequest {
|
|
5
|
+
protected event: APIGatewayProxyEvent;
|
|
6
|
+
constructor(event: APIGatewayProxyEvent);
|
|
7
|
+
getPath(): string;
|
|
8
|
+
getMethod(): HTTPMethod;
|
|
9
|
+
getBody(): Promise<string | null>;
|
|
10
|
+
getHeader(headerName: string): string | undefined;
|
|
11
|
+
getQuery(): PikkuQuery;
|
|
12
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { PikkuHTTPAbstractRequest } from '@pikku/core/http/pikku-http-abstract-request';
|
|
2
|
+
export class PikkuAPIGatewayLambdaRequest extends PikkuHTTPAbstractRequest {
|
|
3
|
+
event;
|
|
4
|
+
constructor(event) {
|
|
5
|
+
super();
|
|
6
|
+
this.event = event;
|
|
7
|
+
}
|
|
8
|
+
getPath() {
|
|
9
|
+
return this.event.path || '/';
|
|
10
|
+
}
|
|
11
|
+
getMethod() {
|
|
12
|
+
return this.event.httpMethod.toLowerCase();
|
|
13
|
+
}
|
|
14
|
+
async getBody() {
|
|
15
|
+
return this.event.body;
|
|
16
|
+
}
|
|
17
|
+
getHeader(headerName) {
|
|
18
|
+
return this.event.headers[headerName];
|
|
19
|
+
}
|
|
20
|
+
getQuery() {
|
|
21
|
+
return this.event.queryStringParameters || {};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=pikku-api-gateway-lambda-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pikku-api-gateway-lambda-request.js","sourceRoot":"","sources":["../src/pikku-api-gateway-lambda-request.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAA;AAEvF,MAAM,OAAO,4BAA6B,SAAQ,wBAAwB;IAClD;IAAtB,YAAsB,KAA2B;QAC/C,KAAK,EAAE,CAAA;QADa,UAAK,GAAL,KAAK,CAAsB;IAEjD,CAAC;IAEM,OAAO;QAEZ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAA;IAC/B,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,EAAgB,CAAA;IAC1D,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;IAEM,SAAS,CAAC,UAAkB;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACvC,CAAC;IAEM,QAAQ;QAEb,OAAQ,IAAI,CAAC,KAAK,CAAC,qBAAoC,IAAI,EAAE,CAAA;IAC/D,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { JSONValue } from '@pikku/core';
|
|
2
|
+
import { PikkuHTTPAbstractResponse } from '@pikku/core/http/pikku-http-abstract-response';
|
|
3
|
+
import { APIGatewayProxyResult } from 'aws-lambda';
|
|
4
|
+
export declare class PikkuAPIGatewayLambdaResponse extends PikkuHTTPAbstractResponse {
|
|
5
|
+
headers: Record<string, string>;
|
|
6
|
+
private status;
|
|
7
|
+
private body;
|
|
8
|
+
constructor();
|
|
9
|
+
getLambdaResponse(): APIGatewayProxyResult;
|
|
10
|
+
setStatus(status: number): void;
|
|
11
|
+
setHeader(name: string, value: string | boolean | string[]): void;
|
|
12
|
+
setJson(value: JSONValue): void;
|
|
13
|
+
setResponse(response: string | Buffer): void;
|
|
14
|
+
setRedirect(path: string, status: number): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { PikkuHTTPAbstractResponse } from '@pikku/core/http/pikku-http-abstract-response';
|
|
2
|
+
export class PikkuAPIGatewayLambdaResponse extends PikkuHTTPAbstractResponse {
|
|
3
|
+
headers = {};
|
|
4
|
+
status = 200;
|
|
5
|
+
body;
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
}
|
|
9
|
+
getLambdaResponse() {
|
|
10
|
+
return {
|
|
11
|
+
headers: this.headers,
|
|
12
|
+
statusCode: this.status,
|
|
13
|
+
body: this.body,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
setStatus(status) {
|
|
17
|
+
this.status = status;
|
|
18
|
+
}
|
|
19
|
+
setHeader(name, value) {
|
|
20
|
+
this.headers[name] = value.toString();
|
|
21
|
+
}
|
|
22
|
+
setJson(value) {
|
|
23
|
+
this.body = JSON.stringify(value);
|
|
24
|
+
}
|
|
25
|
+
setResponse(response) {
|
|
26
|
+
this.body = response;
|
|
27
|
+
}
|
|
28
|
+
setRedirect(path, status) {
|
|
29
|
+
throw new Error('Method not implemented.');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=pikku-api-gateway-lambda-response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pikku-api-gateway-lambda-response.js","sourceRoot":"","sources":["../src/pikku-api-gateway-lambda-response.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAA;AAGzF,MAAM,OAAO,6BAA8B,SAAQ,yBAAyB;IACnE,OAAO,GAA2B,EAAE,CAAA;IACnC,MAAM,GAAW,GAAG,CAAA;IACpB,IAAI,CAAiB;IAE7B;QACE,KAAK,EAAE,CAAA;IACT,CAAC;IAEM,iBAAiB;QACtB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,MAAM;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAA;IACH,CAAC;IAEM,SAAS,CAAC,MAAc;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAEM,SAAS,CAAC,IAAY,EAAE,KAAkC;QAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;IACvC,CAAC;IAEM,OAAO,CAAC,KAAgB;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAEM,WAAW,CAAC,QAAyB;QAC1C,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;IACtB,CAAC;IAEM,WAAW,CAAC,IAAY,EAAE,MAAc;QAC7C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/websocket/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA"}
|
|
@@ -0,0 +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';
|
|
4
|
+
export declare const createLambdaChannelHandlerFactory: (logger: Logger, channelStore: ChannelStore, callbackAPI: ApiGatewayManagementApiClient) => PikkuChannelHandlerFactory;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { PikkuAbstractChannelHandler, } from '@pikku/core/channel';
|
|
2
|
+
import { sendMessage } from './utils.js';
|
|
3
|
+
class LambdaChannelHandler extends PikkuAbstractChannelHandler {
|
|
4
|
+
logger;
|
|
5
|
+
channelStore;
|
|
6
|
+
callbackAPI;
|
|
7
|
+
constructor(logger, userSession, channelStore, callbackAPI, channelId, channelName, openingData) {
|
|
8
|
+
super(channelId, channelName, userSession, openingData);
|
|
9
|
+
this.logger = logger;
|
|
10
|
+
this.channelStore = channelStore;
|
|
11
|
+
this.callbackAPI = callbackAPI;
|
|
12
|
+
}
|
|
13
|
+
async setUserSession(userSession) {
|
|
14
|
+
this.userSession = userSession;
|
|
15
|
+
await this.channelStore.setUserSession(this.channelId, userSession);
|
|
16
|
+
}
|
|
17
|
+
async send(message, isBinary) {
|
|
18
|
+
if (isBinary) {
|
|
19
|
+
throw new Error('Binary data is not supported on serverless lambdas');
|
|
20
|
+
}
|
|
21
|
+
const data = JSON.stringify(message);
|
|
22
|
+
await sendMessage(this.logger, this.callbackAPI, this.channelId, data);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export const createLambdaChannelHandlerFactory = (logger, channelStore, callbackAPI) => {
|
|
26
|
+
const factory = (channelId, channelName, openingData, userSession) => new LambdaChannelHandler(logger, userSession, channelStore, callbackAPI, channelId, channelName, openingData);
|
|
27
|
+
return factory;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=lambda-channel-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lambda-channel-handler.js","sourceRoot":"","sources":["../../src/websocket/lambda-channel-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,2BAA2B,GAE5B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAIxC,MAAM,oBAIJ,SAAQ,2BAA0D;IAExD;IAEA;IACA;IAJV,YACU,MAAc,EACtB,WAAoC,EAC5B,YAA0B,EAC1B,WAA0C,EAClD,SAAiB,EACjB,WAAmB,EACnB,WAAwB;QAExB,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;QAR/C,WAAM,GAAN,MAAM,CAAQ;QAEd,iBAAY,GAAZ,YAAY,CAAc;QAC1B,gBAAW,GAAX,WAAW,CAA+B;IAMpD,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,WAAwB;QAClD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACrE,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,WAAW,EACX,EAAE,CACF,IAAI,oBAAoB,CACtB,MAAM,EACN,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,EACT,WAAW,EACX,WAAW,CACZ,CAAA;IACH,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ChannelStore, EventHubService, EventHubStore } from '@pikku/core/channel';
|
|
2
|
+
import { Logger } from '@pikku/core/services';
|
|
3
|
+
import { APIGatewayEvent } from 'aws-lambda';
|
|
4
|
+
export declare class LambdaEventHubService<Out = unknown> implements EventHubService<Out> {
|
|
5
|
+
private logger;
|
|
6
|
+
private channelStore;
|
|
7
|
+
private eventHubStore;
|
|
8
|
+
private callbackAPI;
|
|
9
|
+
constructor(logger: Logger, event: APIGatewayEvent, channelStore: ChannelStore, eventHubStore: EventHubStore);
|
|
10
|
+
subscribe(topic: string, channelId: string): Promise<void>;
|
|
11
|
+
unsubscribe(topic: string, channelId: string): Promise<void>;
|
|
12
|
+
publish(topic: string, fromChannelId: string, data: Out, isBinary?: boolean): Promise<void>;
|
|
13
|
+
private sendMessages;
|
|
14
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { getApiGatewayManagementApiClient, sendMessages } from './utils.js';
|
|
2
|
+
export class LambdaEventHubService {
|
|
3
|
+
logger;
|
|
4
|
+
channelStore;
|
|
5
|
+
eventHubStore;
|
|
6
|
+
callbackAPI;
|
|
7
|
+
constructor(logger, event, channelStore, eventHubStore) {
|
|
8
|
+
this.logger = logger;
|
|
9
|
+
this.channelStore = channelStore;
|
|
10
|
+
this.eventHubStore = eventHubStore;
|
|
11
|
+
this.callbackAPI = getApiGatewayManagementApiClient(logger, event);
|
|
12
|
+
}
|
|
13
|
+
async subscribe(topic, channelId) {
|
|
14
|
+
await this.eventHubStore.subscribe(topic, channelId);
|
|
15
|
+
}
|
|
16
|
+
async unsubscribe(topic, channelId) {
|
|
17
|
+
await this.eventHubStore.unsubscribe(topic, channelId);
|
|
18
|
+
}
|
|
19
|
+
async publish(topic, fromChannelId, data, isBinary) {
|
|
20
|
+
const channelIds = await this.eventHubStore.getChannelIdsForTopic(topic);
|
|
21
|
+
await this.sendMessages(channelIds, fromChannelId, data);
|
|
22
|
+
}
|
|
23
|
+
async sendMessages(channelIds, fromChannelId, data, isBinary) {
|
|
24
|
+
await sendMessages(this.logger, this.channelStore, this.callbackAPI, fromChannelId, channelIds, data, isBinary);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=lambda-eventhub-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lambda-eventhub-service.js","sourceRoot":"","sources":["../../src/websocket/lambda-eventhub-service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gCAAgC,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI3E,MAAM,OAAO,qBAAqB;IAMtB;IAEA;IACA;IANF,WAAW,CAA+B;IAElD,YACU,MAAc,EACtB,KAAsB,EACd,YAA0B,EAC1B,aAA4B;QAH5B,WAAM,GAAN,MAAM,CAAQ;QAEd,iBAAY,GAAZ,YAAY,CAAc;QAC1B,kBAAa,GAAb,aAAa,CAAe;QAEpC,IAAI,CAAC,WAAW,GAAG,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,SAAiB;QAC9C,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,SAAiB;QAChD,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,OAAO,CACX,KAAa,EACb,aAAqB,EACrB,IAAS,EACT,QAAkB;QAElB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;QACxE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;IAC1D,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,UAAoB,EACpB,aAAqB,EACrB,IAAS,EACT,QAAkB;QAElB,MAAM,YAAY,CAChB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,WAAW,EAChB,aAAa,EACb,UAAU,EACV,IAAI,EACJ,QAAQ,CACT,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
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';
|
|
5
|
+
export declare const sendMessage: (logger: Logger, callbackAPI: ApiGatewayManagementApiClient, ConnectionId: string, Data: string) => Promise<boolean>;
|
|
6
|
+
export declare const sendMessages: (logger: Logger, channelStore: ChannelStore, callbackAPI: ApiGatewayManagementApiClient, fromChannelId: string, channelIds: string[], data: unknown, isBinary?: boolean) => Promise<void>;
|
|
7
|
+
export declare const getApiGatewayManagementApiClient: (logger: Logger, event: APIGatewayEvent) => ApiGatewayManagementApiClient;
|
|
8
|
+
export declare const getServerlessDependencies: (logger: Logger, channelStore: ChannelStore, event: APIGatewayEvent) => {
|
|
9
|
+
channelId: string;
|
|
10
|
+
callbackAPI: ApiGatewayManagementApiClient;
|
|
11
|
+
channelHandlerFactory: import("@pikku/core/channel").PikkuChannelHandlerFactory;
|
|
12
|
+
channelStore: ChannelStore<unknown, unknown, unknown, import("@pikku/core/channel").Channel<unknown, unknown, unknown>>;
|
|
13
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ApiGatewayManagementApiClient, PostToConnectionCommand, } from '@aws-sdk/client-apigatewaymanagementapi';
|
|
2
|
+
import { createLambdaChannelHandlerFactory } from './lambda-channel-handler.js';
|
|
3
|
+
export const sendMessage = async (logger, callbackAPI, ConnectionId, Data) => {
|
|
4
|
+
try {
|
|
5
|
+
await callbackAPI.send(new PostToConnectionCommand({ ConnectionId, Data }));
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
catch (e) {
|
|
9
|
+
logger.error(e.message);
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
export const sendMessages = async (logger, channelStore, callbackAPI, fromChannelId, channelIds, data, isBinary) => {
|
|
14
|
+
if (isBinary) {
|
|
15
|
+
throw new Error('Binary data is not supported on serverless lambdas');
|
|
16
|
+
}
|
|
17
|
+
const staleWebsockets = [];
|
|
18
|
+
const Data = JSON.stringify(data);
|
|
19
|
+
await Promise.all(channelIds.map(async (channelId) => {
|
|
20
|
+
if (channelId !== fromChannelId) {
|
|
21
|
+
const success = await sendMessage(logger, callbackAPI, channelId, Data);
|
|
22
|
+
if (!success) {
|
|
23
|
+
staleWebsockets.push(channelId);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}));
|
|
27
|
+
if (staleWebsockets.length > 0) {
|
|
28
|
+
await channelStore.removeChannels(staleWebsockets);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
export const getApiGatewayManagementApiClient = (logger, event) => {
|
|
32
|
+
let endpoint;
|
|
33
|
+
if (process.env.IS_OFFLINE) {
|
|
34
|
+
logger.info('Assuming serverless offline mode due to IS_OFFLINE');
|
|
35
|
+
endpoint = `http://localhost:3001`;
|
|
36
|
+
}
|
|
37
|
+
else if (event.requestContext.domainName?.includes('amazonaws.com')) {
|
|
38
|
+
logger.info('Assuming we are using the default endpoint mode due to amazonaws.com domain');
|
|
39
|
+
endpoint = `https://${event.requestContext.domainName}/${event.requestContext.stage}`;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
logger.info('Assuming we are using a custom domain mode');
|
|
43
|
+
endpoint = `https://${event.requestContext.domainName}`;
|
|
44
|
+
}
|
|
45
|
+
return new ApiGatewayManagementApiClient({
|
|
46
|
+
apiVersion: '2018-11-29',
|
|
47
|
+
endpoint,
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
export const getServerlessDependencies = (logger, channelStore, event) => {
|
|
51
|
+
const channelId = event.requestContext.connectionId;
|
|
52
|
+
if (!channelId) {
|
|
53
|
+
throw new Error('No connectionId found in requestContext');
|
|
54
|
+
}
|
|
55
|
+
const callbackAPI = getApiGatewayManagementApiClient(logger, event);
|
|
56
|
+
const channelHandlerFactory = createLambdaChannelHandlerFactory(logger, channelStore, callbackAPI);
|
|
57
|
+
return { channelId, callbackAPI, channelHandlerFactory, channelStore };
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/websocket/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CoreSingletonServices, CoreServices, CoreUserSession } from '@pikku/core';
|
|
2
|
+
import { APIGatewayEvent, APIGatewayProxyResult } from 'aws-lambda';
|
|
3
|
+
import { WebsocketParams } from './websocket-types.js';
|
|
4
|
+
export declare const connectWebsocket: <SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession>(event: APIGatewayEvent, { singletonServices, createSessionServices, channelStore, }: WebsocketParams<SingletonServices, Services, UserSession>) => Promise<APIGatewayProxyResult>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { PikkuAPIGatewayLambdaResponse } from '../pikku-api-gateway-lambda-response.js';
|
|
2
|
+
import { runChannelConnect } from '@pikku/core/channel/serverless';
|
|
3
|
+
import { getServerlessDependencies } from './utils.js';
|
|
4
|
+
import { PikkuAPIGatewayLambdaRequest } from '../pikku-api-gateway-lambda-request.js';
|
|
5
|
+
export const connectWebsocket = async (event, { singletonServices, createSessionServices, channelStore, }) => {
|
|
6
|
+
const runnerParams = getServerlessDependencies(singletonServices.logger, channelStore, event);
|
|
7
|
+
const request = new PikkuAPIGatewayLambdaRequest(event);
|
|
8
|
+
const response = new PikkuAPIGatewayLambdaResponse();
|
|
9
|
+
await runChannelConnect({
|
|
10
|
+
...runnerParams,
|
|
11
|
+
request,
|
|
12
|
+
response,
|
|
13
|
+
singletonServices: singletonServices,
|
|
14
|
+
createSessionServices: createSessionServices,
|
|
15
|
+
route: event.path || '/',
|
|
16
|
+
});
|
|
17
|
+
return response.getLambdaResponse();
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=websocket-connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-connect.js","sourceRoot":"","sources":["../../src/websocket/websocket-connect.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAA;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAEtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAA;AAErF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAKnC,KAAsB,EACtB,EACE,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,GAC8C,EAC5B,EAAE;IAClC,MAAM,YAAY,GAAG,yBAAyB,CAC5C,iBAAiB,CAAC,MAAM,EACxB,YAAY,EACZ,KAAK,CACN,CAAA;IACD,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,IAAI,6BAA6B,EAAE,CAAA;IACpD,MAAM,iBAAiB,CAAC;QACtB,GAAG,YAAY;QACf,OAAO;QACP,QAAQ;QACR,iBAAiB,EAAE,iBAAwB;QAC3C,qBAAqB,EAAE,qBAA4B;QACnD,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;KACzB,CAAC,CAAA;IACF,OAAO,QAAQ,CAAC,iBAAiB,EAAE,CAAA;AACrC,CAAC,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CoreSingletonServices, CoreServices, CoreUserSession } from '@pikku/core';
|
|
2
|
+
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
|
|
3
|
+
import { WebsocketParams } from './websocket-types.js';
|
|
4
|
+
export declare const disconnectWebsocket: <SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession>(event: APIGatewayProxyEvent, { singletonServices, createSessionServices, channelStore, }: WebsocketParams<SingletonServices, Services, UserSession>) => Promise<APIGatewayProxyResult>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { runChannelDisconnect } from '@pikku/core/channel/serverless';
|
|
2
|
+
import { getServerlessDependencies } from './utils.js';
|
|
3
|
+
export const disconnectWebsocket = async (event, { singletonServices, createSessionServices, channelStore, }) => {
|
|
4
|
+
const runnerParams = getServerlessDependencies(singletonServices.logger, channelStore, event);
|
|
5
|
+
await runChannelDisconnect({
|
|
6
|
+
...runnerParams,
|
|
7
|
+
singletonServices: singletonServices,
|
|
8
|
+
createSessionServices: createSessionServices,
|
|
9
|
+
});
|
|
10
|
+
return { statusCode: 200, body: '' };
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=websocket-disconnect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-disconnect.js","sourceRoot":"","sources":["../../src/websocket/websocket-disconnect.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAGrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAGtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAKtC,KAA2B,EAC3B,EACE,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,GAC8C,EAC5B,EAAE;IAClC,MAAM,YAAY,GAAG,yBAAyB,CAC5C,iBAAiB,CAAC,MAAM,EACxB,YAAY,EACZ,KAAK,CACN,CAAA;IACD,MAAM,oBAAoB,CAAC;QACzB,GAAG,YAAY;QACf,iBAAiB,EAAE,iBAAwB;QAC3C,qBAAqB,EAAE,qBAA4B;KACpD,CAAC,CAAA;IACF,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;AACtC,CAAC,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CoreSingletonServices, CoreServices, CoreUserSession } from '@pikku/core';
|
|
2
|
+
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
|
|
3
|
+
import { WebsocketParams } from './websocket-types.js';
|
|
4
|
+
export declare const processWebsocketMessage: <SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession>(event: APIGatewayProxyEvent, { singletonServices, createSessionServices, channelStore, }: WebsocketParams<SingletonServices, Services, UserSession>) => Promise<APIGatewayProxyResult>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { runChannelMessage } from '@pikku/core/channel/serverless';
|
|
2
|
+
import { PikkuAPIGatewayLambdaResponse } from '../pikku-api-gateway-lambda-response.js';
|
|
3
|
+
import { getServerlessDependencies } from './utils.js';
|
|
4
|
+
export const processWebsocketMessage = async (event, { singletonServices, createSessionServices, channelStore, }) => {
|
|
5
|
+
const runnerParams = getServerlessDependencies(singletonServices.logger, channelStore, event);
|
|
6
|
+
const response = new PikkuAPIGatewayLambdaResponse();
|
|
7
|
+
try {
|
|
8
|
+
const result = await runChannelMessage({
|
|
9
|
+
...runnerParams,
|
|
10
|
+
singletonServices: singletonServices,
|
|
11
|
+
createSessionServices: createSessionServices,
|
|
12
|
+
}, event.body);
|
|
13
|
+
if (result) {
|
|
14
|
+
response.setJson(result);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
catch (e) {
|
|
18
|
+
console.error(e);
|
|
19
|
+
}
|
|
20
|
+
return response.getLambdaResponse();
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=websocket-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-message.js","sourceRoot":"","sources":["../../src/websocket/websocket-message.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAElE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAA;AACvF,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAGtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAK1C,KAA2B,EAC3B,EACE,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,GAC8C,EAC5B,EAAE;IAClC,MAAM,YAAY,GAAG,yBAAyB,CAC5C,iBAAiB,CAAC,MAAM,EACxB,YAAY,EACZ,KAAK,CACN,CAAA;IACD,MAAM,QAAQ,GAAG,IAAI,6BAA6B,EAAE,CAAA;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC;YACE,GAAG,YAAY;YACf,iBAAiB,EAAE,iBAAwB;YAC3C,qBAAqB,EAAE,qBAA4B;SACpD,EACD,KAAK,CAAC,IAAI,CACX,CAAA;QACD,IAAI,MAAM,EAAE,CAAC;YAEX,QAAQ,CAAC,OAAO,CAAC,MAAa,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAEX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,QAAQ,CAAC,iBAAiB,EAAE,CAAA;AACrC,CAAC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CoreSingletonServices, CoreServices, CoreUserSession, CreateSessionServices, MakeRequired } from '@pikku/core';
|
|
2
|
+
import { ChannelStore } from '@pikku/core/channel';
|
|
3
|
+
export type WebsocketParams<SingletonServices extends CoreSingletonServices, Services extends CoreServices<SingletonServices>, UserSession extends CoreUserSession> = {
|
|
4
|
+
channelStore: ChannelStore;
|
|
5
|
+
singletonServices: MakeRequired<SingletonServices, 'eventHub'>;
|
|
6
|
+
createSessionServices?: CreateSessionServices<SingletonServices, Services, UserSession>;
|
|
7
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-types.js","sourceRoot":"","sources":["../../src/websocket/websocket-types.ts"],"names":[],"mappings":""}
|