@mstuercke/api-utils 0.0.45 → 0.0.47
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.
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
-
import { default as useWebSocket, ReadyState } from 'react-use-websocket';
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
3
2
|
export const useWsApi = (wsApiUrl) => {
|
|
4
3
|
const [error, setError] = useState(false);
|
|
5
4
|
const [connected, setConnected] = useState(false);
|
|
@@ -23,28 +22,33 @@ export const useWsApi = (wsApiUrl) => {
|
|
|
23
22
|
setConnected(false);
|
|
24
23
|
options?.onDisconnected?.();
|
|
25
24
|
}, [options]);
|
|
26
|
-
const
|
|
27
|
-
onOpen: () => handleConnected(),
|
|
28
|
-
onError: (error) => handleError(error),
|
|
29
|
-
onClose: () => handleDisconnected(),
|
|
30
|
-
}, !!request);
|
|
31
|
-
// send request
|
|
32
|
-
useEffect(() => {
|
|
25
|
+
const websocket = useMemo(() => {
|
|
33
26
|
if (!route)
|
|
34
|
-
return;
|
|
35
|
-
if (request
|
|
36
|
-
|
|
27
|
+
return null;
|
|
28
|
+
if (!request)
|
|
29
|
+
return null;
|
|
30
|
+
const websocket = new WebSocket(wsApiUrl);
|
|
31
|
+
websocket.onopen = () => {
|
|
32
|
+
websocket.send(JSON.stringify({
|
|
37
33
|
action: route.action,
|
|
38
|
-
request,
|
|
34
|
+
...request,
|
|
39
35
|
}));
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
36
|
+
handleConnected();
|
|
37
|
+
};
|
|
38
|
+
websocket.onmessage = (ev) => {
|
|
39
|
+
if (!ev.data || ev.data === '{}')
|
|
40
|
+
return;
|
|
41
|
+
handleResponse(JSON.parse(ev.data));
|
|
42
|
+
};
|
|
43
|
+
websocket.onerror = (error) => handleError(error);
|
|
44
|
+
websocket.onclose = () => handleDisconnected();
|
|
45
|
+
return websocket;
|
|
46
|
+
}, [route, request]);
|
|
47
|
+
// send request
|
|
43
48
|
useEffect(() => {
|
|
44
|
-
if (!
|
|
49
|
+
if (!route)
|
|
45
50
|
return;
|
|
46
|
-
|
|
47
|
-
}, [lastJsonMessage, getWebSocket, handleResponse]);
|
|
51
|
+
}, [request, route?.action, websocket, request]);
|
|
48
52
|
const sendRequest = useCallback((route, request, options) => {
|
|
49
53
|
setConnected(true);
|
|
50
54
|
setRoute(route);
|
|
@@ -52,9 +56,9 @@ export const useWsApi = (wsApiUrl) => {
|
|
|
52
56
|
setOptions(options);
|
|
53
57
|
}, []);
|
|
54
58
|
const disconnect = useCallback(() => {
|
|
55
|
-
|
|
59
|
+
websocket?.close();
|
|
56
60
|
handleDisconnected?.();
|
|
57
|
-
}, [
|
|
61
|
+
}, [websocket, handleDisconnected]);
|
|
58
62
|
return {
|
|
59
63
|
sendRequest,
|
|
60
64
|
connected,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWsApi.js","sourceRoot":"","sources":["../../../src/ws/client/useWsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"useWsApi.js","sourceRoot":"","sources":["../../../src/ws/client/useWsApi.ts"],"names":[],"mappings":"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"}
|
package/dist/ws/server/WsApi.js
CHANGED
|
@@ -10,22 +10,21 @@ export class WsApi {
|
|
|
10
10
|
}
|
|
11
11
|
async handleRequest(event) {
|
|
12
12
|
const { body } = event;
|
|
13
|
-
const { connectionId, domainName, stage, routeKey } = event.requestContext;
|
|
13
|
+
const { connectionId, domainName, stage, routeKey: action } = event.requestContext;
|
|
14
|
+
if (!action)
|
|
15
|
+
throw 'No routeKey/action';
|
|
14
16
|
if (!connectionId)
|
|
15
17
|
throw 'No connectionId';
|
|
16
18
|
if (!domainName)
|
|
17
19
|
throw 'No domainName';
|
|
18
|
-
if (!
|
|
19
|
-
throw 'No routeKey';
|
|
20
|
-
if (!body)
|
|
20
|
+
if (!body && !['$connect', '$disconnect'].includes(action))
|
|
21
21
|
throw 'No body';
|
|
22
|
-
const action = routeKey;
|
|
23
22
|
const requestHandler = this.requestHandlers[action];
|
|
24
23
|
if (!requestHandler)
|
|
25
24
|
throw `No requestHandler found for action ${action}`;
|
|
26
25
|
const endpoint = `https://${domainName}/${stage}`;
|
|
27
26
|
const ws = new ApiGatewayManagementApiClient({ endpoint });
|
|
28
|
-
await requestHandler(JSON.parse(body), {
|
|
27
|
+
await requestHandler(body && JSON.parse(body), {
|
|
29
28
|
sendResponse: async (response) => {
|
|
30
29
|
await ws.send(new PostToConnectionCommand({
|
|
31
30
|
ConnectionId: connectionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WsApi.js","sourceRoot":"","sources":["../../../src/ws/server/WsApi.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,yCAAyC,CAAC;AAEjD,MAAM,OAAO,KAAK;IACC,eAAe,GAA4D;QAC1F,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;QACnC,aAAa,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;KACvC,CAAC;IAEF,eAAe,CAIb,KAA4C,EAAE,cAA8D;QAC5G,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAA2B;QAC7C,MAAM,EAAC,IAAI,EAAC,GAAG,KAAK,CAAC;QACrB,MAAM,EAAC,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAC,GAAG,KAAK,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"WsApi.js","sourceRoot":"","sources":["../../../src/ws/server/WsApi.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,yCAAyC,CAAC;AAEjD,MAAM,OAAO,KAAK;IACC,eAAe,GAA4D;QAC1F,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;QACnC,aAAa,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;KACvC,CAAC;IAEF,eAAe,CAIb,KAA4C,EAAE,cAA8D;QAC5G,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAA2B;QAC7C,MAAM,EAAC,IAAI,EAAC,GAAG,KAAK,CAAC;QACrB,MAAM,EAAC,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAC,GAAG,KAAK,CAAC,cAAc,CAAC;QAEjF,IAAI,CAAC,MAAM;YAAE,MAAM,oBAAoB,CAAC;QACxC,IAAI,CAAC,YAAY;YAAE,MAAM,iBAAiB,CAAC;QAC3C,IAAI,CAAC,UAAU;YAAE,MAAM,eAAe,CAAC;QACvC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,SAAS,CAAC;QAE5E,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc;YACjB,MAAM,sCAAsC,MAAM,EAAE,CAAC;QAEvD,MAAM,QAAQ,GAAG,WAAW,UAAU,IAAI,KAAK,EAAE,CAAC;QAClD,MAAM,EAAE,GAAG,IAAI,6BAA6B,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC;QACzD,MAAM,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC7C,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAC/B,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC;oBACxC,YAAY,EAAE,YAAY;oBAC1B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;iBAC/B,CAAC,CAAC,CAAC;YACN,CAAC;YACD,eAAe,EAAE,KAAK,IAAI,EAAE;gBAC1B,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,EAAC,YAAY,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;YACD,YAAY;YACZ,QAAQ;SACT,CAAC,CAAC;QAEH,OAAO;YACL,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,EAAE;SACT,CAAC;IACJ,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mstuercke/api-utils",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.47",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/**/*.js",
|
|
@@ -46,13 +46,11 @@
|
|
|
46
46
|
"release": "bun run release.ts"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"path-to-regexp": "^6.2.1"
|
|
50
|
-
"react-use-websocket": "^4.5.0"
|
|
49
|
+
"path-to-regexp": "^6.2.1"
|
|
51
50
|
},
|
|
52
51
|
"peerDependencies": {
|
|
53
52
|
"@aws-sdk/client-apigatewaymanagementapi": "^3.438.0",
|
|
54
|
-
"@types/aws-lambda": "^8.0.0"
|
|
55
|
-
"react": "^18.2.0"
|
|
53
|
+
"@types/aws-lambda": "^8.0.0"
|
|
56
54
|
},
|
|
57
55
|
"devDependencies": {
|
|
58
56
|
"@mstuercke/bun-utils": "^0.0.10",
|