@webiny/api-websockets-aws 6.5.0-beta.0 → 6.5.0-beta.10
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/handler/headers.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const getEventBody = (event)=>{
|
|
2
2
|
if (!event.body) return {};
|
|
3
|
-
if ("object" == typeof event.body) return event.body;
|
|
4
|
-
if ("string" == typeof event.body) try {
|
|
3
|
+
else if ("object" == typeof event.body) return event.body;
|
|
4
|
+
else if ("string" == typeof event.body) try {
|
|
5
5
|
return JSON.parse(event.body);
|
|
6
6
|
} catch (ex) {
|
|
7
7
|
console.log(ex.message);
|
package/handler/headers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler/headers.js","sources":["../../src/handler/headers.ts"],"sourcesContent":["import type { WebsocketsRunner } from \"@webiny/api-websockets/exports/api.js\";\nimport type { IAwsWebsocketsIncomingEvent } from \"~/handler/types.js\";\n\nconst getEventBody = (event: IAwsWebsocketsIncomingEvent): WebsocketsRunner.EventData => {\n if (!event.body) {\n return {};\n } else if (typeof event.body === \"object\") {\n return event.body;\n } else if (typeof event.body === \"string\") {\n try {\n return JSON.parse(event.body);\n } catch (ex) {\n console.log(ex.message);\n return {};\n }\n }\n console.log(\"Unexpected event.body type:\", typeof event.body);\n return {};\n};\n\nconst getToken = (\n body: WebsocketsRunner.EventData,\n event: IAwsWebsocketsIncomingEvent\n): string | null => {\n return body?.token || event.queryStringParameters?.token || null;\n};\n\nconst getTenant = (\n body: WebsocketsRunner.EventData,\n event: IAwsWebsocketsIncomingEvent\n): string => {\n return body?.tenant || event.queryStringParameters?.tenant || \"root\";\n};\n\nexport const getEventValues = (event: IAwsWebsocketsIncomingEvent) => {\n const body = getEventBody(event);\n\n const token = getToken(body, event);\n const tenant = getTenant(body, event);\n return {\n tenant,\n token,\n endpoint: \"manage\"\n };\n};\n"],"names":["getEventBody","event","JSON","ex","console","getToken","body","getTenant","getEventValues","token","tenant"],"mappings":"AAGA,MAAMA,eAAe,CAACC;IAClB,IAAI,CAACA,MAAM,IAAI,EACX,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"handler/headers.js","sources":["../../src/handler/headers.ts"],"sourcesContent":["import type { WebsocketsRunner } from \"@webiny/api-websockets/exports/api.js\";\nimport type { IAwsWebsocketsIncomingEvent } from \"~/handler/types.js\";\n\nconst getEventBody = (event: IAwsWebsocketsIncomingEvent): WebsocketsRunner.EventData => {\n if (!event.body) {\n return {};\n } else if (typeof event.body === \"object\") {\n return event.body;\n } else if (typeof event.body === \"string\") {\n try {\n return JSON.parse(event.body);\n } catch (ex) {\n console.log(ex.message);\n return {};\n }\n }\n console.log(\"Unexpected event.body type:\", typeof event.body);\n return {};\n};\n\nconst getToken = (\n body: WebsocketsRunner.EventData,\n event: IAwsWebsocketsIncomingEvent\n): string | null => {\n return body?.token || event.queryStringParameters?.token || null;\n};\n\nconst getTenant = (\n body: WebsocketsRunner.EventData,\n event: IAwsWebsocketsIncomingEvent\n): string => {\n return body?.tenant || event.queryStringParameters?.tenant || \"root\";\n};\n\nexport const getEventValues = (event: IAwsWebsocketsIncomingEvent) => {\n const body = getEventBody(event);\n\n const token = getToken(body, event);\n const tenant = getTenant(body, event);\n return {\n tenant,\n token,\n endpoint: \"manage\"\n };\n};\n"],"names":["getEventBody","event","JSON","ex","console","getToken","body","getTenant","getEventValues","token","tenant"],"mappings":"AAGA,MAAMA,eAAe,CAACC;IAClB,IAAI,CAACA,MAAM,IAAI,EACX,OAAO,CAAC;SACL,IAAI,AAAsB,YAAtB,OAAOA,MAAM,IAAI,EACxB,OAAOA,MAAM,IAAI;SACd,IAAI,AAAsB,YAAtB,OAAOA,MAAM,IAAI,EACxB,IAAI;QACA,OAAOC,KAAK,KAAK,CAACD,MAAM,IAAI;IAChC,EAAE,OAAOE,IAAI;QACTC,QAAQ,GAAG,CAACD,GAAG,OAAO;QACtB,OAAO,CAAC;IACZ;IAEJC,QAAQ,GAAG,CAAC,+BAA+B,OAAOH,MAAM,IAAI;IAC5D,OAAO,CAAC;AACZ;AAEA,MAAMI,WAAW,CACbC,MACAL,QAEOK,MAAM,SAASL,MAAM,qBAAqB,EAAE,SAAS;AAGhE,MAAMM,YAAY,CACdD,MACAL,QAEOK,MAAM,UAAUL,MAAM,qBAAqB,EAAE,UAAU;AAG3D,MAAMO,iBAAiB,CAACP;IAC3B,MAAMK,OAAON,aAAaC;IAE1B,MAAMQ,QAAQJ,SAASC,MAAML;IAC7B,MAAMS,SAASH,UAAUD,MAAML;IAC/B,OAAO;QACHS;QACAD;QACA,UAAU;IACd;AACJ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-websockets-aws",
|
|
3
|
-
"version": "6.5.0-beta.
|
|
3
|
+
"version": "6.5.0-beta.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -16,29 +16,29 @@
|
|
|
16
16
|
},
|
|
17
17
|
"license": "MIT",
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@webiny/api": "6.5.0-beta.
|
|
20
|
-
"@webiny/api-websockets": "6.5.0-beta.
|
|
21
|
-
"@webiny/aws-sdk": "6.5.0-beta.
|
|
22
|
-
"@webiny/error": "6.5.0-beta.
|
|
23
|
-
"@webiny/handler": "6.5.0-beta.
|
|
24
|
-
"@webiny/handler-aws": "6.5.0-beta.
|
|
25
|
-
"@webiny/plugins": "6.5.0-beta.
|
|
26
|
-
"@webiny/utils": "6.5.0-beta.
|
|
27
|
-
"type-fest": "5.
|
|
28
|
-
"zod": "4.
|
|
19
|
+
"@webiny/api": "6.5.0-beta.10",
|
|
20
|
+
"@webiny/api-websockets": "6.5.0-beta.10",
|
|
21
|
+
"@webiny/aws-sdk": "6.5.0-beta.10",
|
|
22
|
+
"@webiny/error": "6.5.0-beta.10",
|
|
23
|
+
"@webiny/handler": "6.5.0-beta.10",
|
|
24
|
+
"@webiny/handler-aws": "6.5.0-beta.10",
|
|
25
|
+
"@webiny/plugins": "6.5.0-beta.10",
|
|
26
|
+
"@webiny/utils": "6.5.0-beta.10",
|
|
27
|
+
"type-fest": "5.10.0",
|
|
28
|
+
"zod": "4.6.5"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@webiny/api-core": "6.5.0-beta.
|
|
32
|
-
"@webiny/api-headless-cms": "6.5.0-beta.
|
|
33
|
-
"@webiny/build-tools": "6.5.0-beta.
|
|
34
|
-
"@webiny/handler-db": "6.5.0-beta.
|
|
35
|
-
"@webiny/handler-graphql": "6.5.0-beta.
|
|
36
|
-
"@webiny/project-utils": "6.5.0-beta.
|
|
31
|
+
"@webiny/api-core": "6.5.0-beta.10",
|
|
32
|
+
"@webiny/api-headless-cms": "6.5.0-beta.10",
|
|
33
|
+
"@webiny/build-tools": "6.5.0-beta.10",
|
|
34
|
+
"@webiny/handler-db": "6.5.0-beta.10",
|
|
35
|
+
"@webiny/handler-graphql": "6.5.0-beta.10",
|
|
36
|
+
"@webiny/project-utils": "6.5.0-beta.10",
|
|
37
37
|
"graphql": "16.14.2",
|
|
38
38
|
"rimraf": "6.1.3",
|
|
39
|
-
"type-fest": "5.
|
|
39
|
+
"type-fest": "5.10.0",
|
|
40
40
|
"typescript": "7.0.2",
|
|
41
|
-
"vitest": "
|
|
41
|
+
"vitest": "5.0.3"
|
|
42
42
|
},
|
|
43
43
|
"publishConfig": {
|
|
44
44
|
"access": "public"
|
|
@@ -42,7 +42,7 @@ const validation = zod.object({
|
|
|
42
42
|
}).optional()
|
|
43
43
|
}).superRefine((output, context)=>{
|
|
44
44
|
if (output.requestContext.eventType !== WebsocketsEventRequestContextEventType.message) return;
|
|
45
|
-
if (output.body) return;
|
|
45
|
+
else if (output.body) return;
|
|
46
46
|
context.addIssue({
|
|
47
47
|
path: [
|
|
48
48
|
"body"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator/AwsWebsocketsEventValidator.js","sources":["../../src/validator/AwsWebsocketsEventValidator.ts"],"sourcesContent":["import zod from \"zod\";\nimport { WebsocketsEventValidator, WebsocketsRunner } from \"@webiny/api-websockets/exports/api.js\";\nimport { WebsocketsEventRequestContextEventType } from \"~/handler/types.js\";\nimport { createZodError } from \"@webiny/utils\";\n\nconst eventTypeMap: Record<WebsocketsEventRequestContextEventType, WebsocketsRunner.EventType> = {\n [WebsocketsEventRequestContextEventType.message]: \"message\",\n [WebsocketsEventRequestContextEventType.connect]: \"connect\",\n [WebsocketsEventRequestContextEventType.disconnect]: \"disconnect\"\n};\n\nconst routeKeyMap: Record<string, string> = {\n $connect: \"connect\",\n $disconnect: \"disconnect\",\n $default: \"default\"\n};\n\nconst validation = zod\n .object({\n headers: zod.looseObject({}).optional(),\n requestContext: zod.object({\n connectionId: zod.string(),\n stage: zod.string(),\n connectedAt: zod.number(),\n domainName: zod.string(),\n eventType: zod.enum([\n WebsocketsEventRequestContextEventType.connect,\n WebsocketsEventRequestContextEventType.message,\n WebsocketsEventRequestContextEventType.disconnect\n ]),\n routeKey: zod.string()\n }),\n body: zod\n .string()\n .transform<WebsocketsRunner.EventData>((value, context) => {\n if (!value) {\n return undefined;\n }\n try {\n return JSON.parse(value);\n } catch (ex) {\n console.error(`Failed body validation: ${ex.message}`);\n console.log(`Body: ${value}`);\n context.addIssue({\n path: [],\n message: `Invalid JSON: ${ex.message}`,\n code: zod.ZodIssueCode.custom,\n fatal: true\n });\n }\n })\n .optional()\n })\n .superRefine((output, context) => {\n if (output.requestContext.eventType !== WebsocketsEventRequestContextEventType.message) {\n return;\n } else if (output.body) {\n return;\n }\n context.addIssue({\n path: [\"body\"],\n message: \"There must be a body defined when having a message event.\",\n code: zod.ZodIssueCode.custom,\n fatal: true\n });\n });\n\nconst bodyValidation = zod\n .looseObject({\n token: zod.string(),\n tenant: zod.string(),\n messageId: zod.string().nullish(),\n action: zod.string(),\n data: zod.looseObject({}).nullish()\n })\n .optional();\n\nexport class AwsWebsocketsEventValidator implements WebsocketsEventValidator.Interface {\n public async validate<T extends WebsocketsRunner.EventData = WebsocketsRunner.EventData>(\n input: unknown\n ): Promise<WebsocketsRunner.Event<T>> {\n const result = await validation.safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n const bodyResult = await bodyValidation.safeParseAsync(result.data.body);\n if (!bodyResult.success) {\n throw createZodError(bodyResult.error);\n }\n\n const rc = result.data.requestContext;\n\n return {\n headers: result.data.headers as Record<string, string>,\n context: {\n connectionId: rc.connectionId,\n connectedAt: rc.connectedAt,\n host: rc.domainName,\n eventType: eventTypeMap[rc.eventType as WebsocketsEventRequestContextEventType],\n route: routeKeyMap[rc.routeKey] || rc.routeKey,\n endpoint: `https://${rc.domainName}/${rc.stage}`\n },\n body: {\n ...((bodyResult.data || {}) as T)\n }\n };\n }\n}\n"],"names":["eventTypeMap","WebsocketsEventRequestContextEventType","routeKeyMap","validation","zod","value","context","JSON","ex","console","output","bodyValidation","AwsWebsocketsEventValidator","input","result","createZodError","bodyResult","rc"],"mappings":";;;AAKA,MAAMA,eAA2F;IAC7F,CAACC,uCAAuC,OAAO,CAAC,EAAE;IAClD,CAACA,uCAAuC,OAAO,CAAC,EAAE;IAClD,CAACA,uCAAuC,UAAU,CAAC,EAAE;AACzD;AAEA,MAAMC,cAAsC;IACxC,UAAU;IACV,aAAa;IACb,UAAU;AACd;AAEA,MAAMC,aAAaC,IAAAA,MACR,CAAC;IACJ,SAASA,IAAI,WAAW,CAAC,CAAC,GAAG,QAAQ;IACrC,gBAAgBA,IAAI,MAAM,CAAC;QACvB,cAAcA,IAAI,MAAM;QACxB,OAAOA,IAAI,MAAM;QACjB,aAAaA,IAAI,MAAM;QACvB,YAAYA,IAAI,MAAM;QACtB,WAAWA,GAAG,CAAHA,OAAQ,CAAC;YAChBH,uCAAuC,OAAO;YAC9CA,uCAAuC,OAAO;YAC9CA,uCAAuC,UAAU;SACpD;QACD,UAAUG,IAAI,MAAM;IACxB;IACA,MAAMA,IAAAA,MACK,GACN,SAAS,CAA6B,CAACC,OAAOC;QAC3C,IAAI,CAACD,OACD;QAEJ,IAAI;YACA,OAAOE,KAAK,KAAK,CAACF;QACtB,EAAE,OAAOG,IAAI;YACTC,QAAQ,KAAK,CAAC,CAAC,wBAAwB,EAAED,GAAG,OAAO,EAAE;YACrDC,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAEJ,OAAO;YAC5BC,QAAQ,QAAQ,CAAC;gBACb,MAAM,EAAE;gBACR,SAAS,CAAC,cAAc,EAAEE,GAAG,OAAO,EAAE;gBACtC,MAAMJ,IAAI,YAAY,CAAC,MAAM;gBAC7B,OAAO;YACX;QACJ;IACJ,GACC,QAAQ;AACjB,GACC,WAAW,CAAC,CAACM,QAAQJ;IAClB,IAAII,OAAO,cAAc,CAAC,SAAS,KAAKT,uCAAuC,OAAO,EAClF;
|
|
1
|
+
{"version":3,"file":"validator/AwsWebsocketsEventValidator.js","sources":["../../src/validator/AwsWebsocketsEventValidator.ts"],"sourcesContent":["import zod from \"zod\";\nimport { WebsocketsEventValidator, WebsocketsRunner } from \"@webiny/api-websockets/exports/api.js\";\nimport { WebsocketsEventRequestContextEventType } from \"~/handler/types.js\";\nimport { createZodError } from \"@webiny/utils\";\n\nconst eventTypeMap: Record<WebsocketsEventRequestContextEventType, WebsocketsRunner.EventType> = {\n [WebsocketsEventRequestContextEventType.message]: \"message\",\n [WebsocketsEventRequestContextEventType.connect]: \"connect\",\n [WebsocketsEventRequestContextEventType.disconnect]: \"disconnect\"\n};\n\nconst routeKeyMap: Record<string, string> = {\n $connect: \"connect\",\n $disconnect: \"disconnect\",\n $default: \"default\"\n};\n\nconst validation = zod\n .object({\n headers: zod.looseObject({}).optional(),\n requestContext: zod.object({\n connectionId: zod.string(),\n stage: zod.string(),\n connectedAt: zod.number(),\n domainName: zod.string(),\n eventType: zod.enum([\n WebsocketsEventRequestContextEventType.connect,\n WebsocketsEventRequestContextEventType.message,\n WebsocketsEventRequestContextEventType.disconnect\n ]),\n routeKey: zod.string()\n }),\n body: zod\n .string()\n .transform<WebsocketsRunner.EventData>((value, context) => {\n if (!value) {\n return undefined;\n }\n try {\n return JSON.parse(value);\n } catch (ex) {\n console.error(`Failed body validation: ${ex.message}`);\n console.log(`Body: ${value}`);\n context.addIssue({\n path: [],\n message: `Invalid JSON: ${ex.message}`,\n code: zod.ZodIssueCode.custom,\n fatal: true\n });\n }\n })\n .optional()\n })\n .superRefine((output, context) => {\n if (output.requestContext.eventType !== WebsocketsEventRequestContextEventType.message) {\n return;\n } else if (output.body) {\n return;\n }\n context.addIssue({\n path: [\"body\"],\n message: \"There must be a body defined when having a message event.\",\n code: zod.ZodIssueCode.custom,\n fatal: true\n });\n });\n\nconst bodyValidation = zod\n .looseObject({\n token: zod.string(),\n tenant: zod.string(),\n messageId: zod.string().nullish(),\n action: zod.string(),\n data: zod.looseObject({}).nullish()\n })\n .optional();\n\nexport class AwsWebsocketsEventValidator implements WebsocketsEventValidator.Interface {\n public async validate<T extends WebsocketsRunner.EventData = WebsocketsRunner.EventData>(\n input: unknown\n ): Promise<WebsocketsRunner.Event<T>> {\n const result = await validation.safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n const bodyResult = await bodyValidation.safeParseAsync(result.data.body);\n if (!bodyResult.success) {\n throw createZodError(bodyResult.error);\n }\n\n const rc = result.data.requestContext;\n\n return {\n headers: result.data.headers as Record<string, string>,\n context: {\n connectionId: rc.connectionId,\n connectedAt: rc.connectedAt,\n host: rc.domainName,\n eventType: eventTypeMap[rc.eventType as WebsocketsEventRequestContextEventType],\n route: routeKeyMap[rc.routeKey] || rc.routeKey,\n endpoint: `https://${rc.domainName}/${rc.stage}`\n },\n body: {\n ...((bodyResult.data || {}) as T)\n }\n };\n }\n}\n"],"names":["eventTypeMap","WebsocketsEventRequestContextEventType","routeKeyMap","validation","zod","value","context","JSON","ex","console","output","bodyValidation","AwsWebsocketsEventValidator","input","result","createZodError","bodyResult","rc"],"mappings":";;;AAKA,MAAMA,eAA2F;IAC7F,CAACC,uCAAuC,OAAO,CAAC,EAAE;IAClD,CAACA,uCAAuC,OAAO,CAAC,EAAE;IAClD,CAACA,uCAAuC,UAAU,CAAC,EAAE;AACzD;AAEA,MAAMC,cAAsC;IACxC,UAAU;IACV,aAAa;IACb,UAAU;AACd;AAEA,MAAMC,aAAaC,IAAAA,MACR,CAAC;IACJ,SAASA,IAAI,WAAW,CAAC,CAAC,GAAG,QAAQ;IACrC,gBAAgBA,IAAI,MAAM,CAAC;QACvB,cAAcA,IAAI,MAAM;QACxB,OAAOA,IAAI,MAAM;QACjB,aAAaA,IAAI,MAAM;QACvB,YAAYA,IAAI,MAAM;QACtB,WAAWA,GAAG,CAAHA,OAAQ,CAAC;YAChBH,uCAAuC,OAAO;YAC9CA,uCAAuC,OAAO;YAC9CA,uCAAuC,UAAU;SACpD;QACD,UAAUG,IAAI,MAAM;IACxB;IACA,MAAMA,IAAAA,MACK,GACN,SAAS,CAA6B,CAACC,OAAOC;QAC3C,IAAI,CAACD,OACD;QAEJ,IAAI;YACA,OAAOE,KAAK,KAAK,CAACF;QACtB,EAAE,OAAOG,IAAI;YACTC,QAAQ,KAAK,CAAC,CAAC,wBAAwB,EAAED,GAAG,OAAO,EAAE;YACrDC,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAEJ,OAAO;YAC5BC,QAAQ,QAAQ,CAAC;gBACb,MAAM,EAAE;gBACR,SAAS,CAAC,cAAc,EAAEE,GAAG,OAAO,EAAE;gBACtC,MAAMJ,IAAI,YAAY,CAAC,MAAM;gBAC7B,OAAO;YACX;QACJ;IACJ,GACC,QAAQ;AACjB,GACC,WAAW,CAAC,CAACM,QAAQJ;IAClB,IAAII,OAAO,cAAc,CAAC,SAAS,KAAKT,uCAAuC,OAAO,EAClF;SACG,IAAIS,OAAO,IAAI,EAClB;IAEJJ,QAAQ,QAAQ,CAAC;QACb,MAAM;YAAC;SAAO;QACd,SAAS;QACT,MAAMF,IAAI,YAAY,CAAC,MAAM;QAC7B,OAAO;IACX;AACJ;AAEJ,MAAMO,iBAAiBP,IAAAA,WACP,CAAC;IACT,OAAOA,IAAI,MAAM;IACjB,QAAQA,IAAI,MAAM;IAClB,WAAWA,IAAI,MAAM,GAAG,OAAO;IAC/B,QAAQA,IAAI,MAAM;IAClB,MAAMA,IAAI,WAAW,CAAC,CAAC,GAAG,OAAO;AACrC,GACC,QAAQ;AAEN,MAAMQ;IACT,MAAa,SACTC,KAAc,EACoB;QAClC,MAAMC,SAAS,MAAMX,WAAW,cAAc,CAACU;QAC/C,IAAI,CAACC,OAAO,OAAO,EACf,MAAMC,eAAeD,OAAO,KAAK;QAErC,MAAME,aAAa,MAAML,eAAe,cAAc,CAACG,OAAO,IAAI,CAAC,IAAI;QACvE,IAAI,CAACE,WAAW,OAAO,EACnB,MAAMD,eAAeC,WAAW,KAAK;QAGzC,MAAMC,KAAKH,OAAO,IAAI,CAAC,cAAc;QAErC,OAAO;YACH,SAASA,OAAO,IAAI,CAAC,OAAO;YAC5B,SAAS;gBACL,cAAcG,GAAG,YAAY;gBAC7B,aAAaA,GAAG,WAAW;gBAC3B,MAAMA,GAAG,UAAU;gBACnB,WAAWjB,YAAY,CAACiB,GAAG,SAAS,CAA2C;gBAC/E,OAAOf,WAAW,CAACe,GAAG,QAAQ,CAAC,IAAIA,GAAG,QAAQ;gBAC9C,UAAU,CAAC,QAAQ,EAAEA,GAAG,UAAU,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE;YACpD;YACA,MAAM;gBACF,GAAKD,WAAW,IAAI,IAAI,CAAC,CAAC;YAC9B;QACJ;IACJ;AACJ"}
|