@superblocksteam/sdk 2.0.3-next.99 → 2.0.4

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.
Files changed (67) hide show
  1. package/dist/application-build.d.mts +12 -0
  2. package/dist/application-build.d.mts.map +1 -0
  3. package/dist/application-build.mjs +113 -0
  4. package/dist/application-build.mjs.map +1 -0
  5. package/dist/cli-replacement/automatic-upgrades.d.ts +4 -0
  6. package/dist/cli-replacement/automatic-upgrades.d.ts.map +1 -0
  7. package/dist/cli-replacement/automatic-upgrades.js +260 -0
  8. package/dist/cli-replacement/automatic-upgrades.js.map +1 -0
  9. package/dist/cli-replacement/dev.d.mts +1 -6
  10. package/dist/cli-replacement/dev.d.mts.map +1 -1
  11. package/dist/cli-replacement/dev.mjs +75 -2
  12. package/dist/cli-replacement/dev.mjs.map +1 -1
  13. package/dist/client.d.ts +2 -1
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +7 -5
  16. package/dist/client.js.map +1 -1
  17. package/dist/dev-utils/dev-server.d.mts.map +1 -1
  18. package/dist/dev-utils/dev-server.mjs +59 -19
  19. package/dist/dev-utils/dev-server.mjs.map +1 -1
  20. package/dist/dev-utils/dev-tracer.d.ts +1 -1
  21. package/dist/dev-utils/dev-tracer.d.ts.map +1 -1
  22. package/dist/dev-utils/dev-tracer.js +60 -24
  23. package/dist/dev-utils/dev-tracer.js.map +1 -1
  24. package/dist/dev-utils/vite-plugin-react-transform.d.mts.map +1 -1
  25. package/dist/dev-utils/vite-plugin-react-transform.mjs +1 -0
  26. package/dist/dev-utils/vite-plugin-react-transform.mjs.map +1 -1
  27. package/dist/dev-utils/vite-plugin-sb-cdn.d.mts.map +1 -1
  28. package/dist/dev-utils/vite-plugin-sb-cdn.mjs +28 -7
  29. package/dist/dev-utils/vite-plugin-sb-cdn.mjs.map +1 -1
  30. package/dist/index.d.ts +3 -2
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +1 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/socket/handlers.d.ts +2 -2
  35. package/dist/socket/handlers.d.ts.map +1 -1
  36. package/dist/socket/handlers.js.map +1 -1
  37. package/dist/socket/index.d.ts +1 -11
  38. package/dist/socket/index.d.ts.map +1 -1
  39. package/dist/socket/index.js +11 -43
  40. package/dist/socket/index.js.map +1 -1
  41. package/dist/types/common.d.ts +6 -0
  42. package/dist/types/common.d.ts.map +1 -1
  43. package/dist/types/common.js.map +1 -1
  44. package/dist/vite-plugin-inject-sb-ids-transform.d.mts +15 -0
  45. package/dist/vite-plugin-inject-sb-ids-transform.d.mts.map +1 -0
  46. package/dist/vite-plugin-inject-sb-ids-transform.mjs +86 -0
  47. package/dist/vite-plugin-inject-sb-ids-transform.mjs.map +1 -0
  48. package/package.json +26 -6
  49. package/src/application-build.mts +160 -0
  50. package/src/cli-replacement/automatic-upgrades.ts +349 -0
  51. package/src/cli-replacement/dev.mts +102 -10
  52. package/src/client.ts +13 -4
  53. package/src/dev-utils/dev-server.mts +79 -19
  54. package/src/dev-utils/dev-tracer.ts +63 -24
  55. package/src/dev-utils/vite-plugin-react-transform.mts +1 -0
  56. package/src/dev-utils/vite-plugin-sb-cdn.mts +35 -7
  57. package/src/index.ts +4 -1
  58. package/src/socket/handlers.ts +109 -105
  59. package/src/socket/index.ts +21 -101
  60. package/src/types/common.ts +7 -0
  61. package/src/vite-plugin-inject-sb-ids-transform.mts +104 -0
  62. package/tsconfig.tsbuildinfo +1 -1
  63. package/dist/socket/socket.d.ts +0 -61
  64. package/dist/socket/socket.d.ts.map +0 -1
  65. package/dist/socket/socket.js +0 -251
  66. package/dist/socket/socket.js.map +0 -1
  67. package/src/socket/socket.ts +0 -399
@@ -1,61 +0,0 @@
1
- import type { ISocketClient, MethodHandler, MethodHandlers, RequestContextBase, SocketTimeouts, GenericMiddleware } from "../types/index.js";
2
- import type WebSocket from "ws";
3
- interface SocketRequest<Payload = unknown> {
4
- method: string;
5
- payload: Payload;
6
- id: number;
7
- setAuthorization?: string;
8
- }
9
- interface SocketResponse<Payload = unknown> {
10
- id: number;
11
- payload: Payload;
12
- error: SocketError | null;
13
- }
14
- export interface SocketMessage<RequestPayload = unknown, ResponsePayload = unknown> {
15
- request?: SocketRequest<RequestPayload>;
16
- response?: SocketResponse<ResponsePayload>;
17
- }
18
- export interface SocketError {
19
- message: string;
20
- code: number;
21
- }
22
- /**
23
- * ISocket is a class that wraps a WebSocket connection and provides a simple interface for sending and receiving messages.
24
- * ISocket is initialized by both server and client and request/response is called symmetrically.
25
- *
26
- * ISocket handles has two timeout actions:
27
- * 1. Connection timeout: If the connection is not closed after a certain time, the connection is closed.
28
- * - This is useful to prevent a connection from being open indefinitely. This is mainly used in the server side since
29
- * the client side manages connection lifecycle manually.
30
- * 2. No response timeout: If the response is not received after a certain time, the request is timed out.
31
- * - This is mainly used by CLI to handle the case where the server is not responding.
32
- *
33
- * It is expected that timeouts should be relatively sorted in the order of connection timeout > request timeout > no response timeout.
34
- */
35
- export declare class ISocket<ImplementedMethods, CallableMethods, RequestContext extends RequestContextBase> {
36
- private readonly ws;
37
- private readonly requestHandlers;
38
- private readonly globalMiddlewares;
39
- private readonly responseHandler;
40
- private peerAuthorization?;
41
- protected nxtRequestId: number;
42
- private connectionTimeout?;
43
- private logger;
44
- private timeouts?;
45
- constructor(ws: WebSocket, requestHandlers: MethodHandlers<ImplementedMethods, CallableMethods, RequestContext>, globalMiddlewares: GenericMiddleware<CallableMethods, RequestContext>[], timeouts?: SocketTimeouts, logger?: {
46
- error: (message?: string) => void;
47
- });
48
- protected handleMessage(message: SocketMessage): Promise<void>;
49
- protected callHandler<Params, Result, CallableMethods, RequestContext extends RequestContextBase>(handler: MethodHandler<Params, Result, CallableMethods, RequestContext>, params: Params, ctx: RequestContext, client: ISocketClient<CallableMethods>, next: () => Promise<Result>): Promise<Result>;
50
- request<Params, Result>(method: string, params: Params, authorization?: string): Promise<Result>;
51
- protected respond<Result>(requestId: number, result: Result): void;
52
- protected respondError(requestId: number, error: SocketError): void;
53
- private resetConnectionTimeout;
54
- private handleConnectionTimeout;
55
- private resetNoResponseTimeout;
56
- private handleNoResponseTimeout;
57
- close(): void;
58
- }
59
- export declare function createISocketClient<CallableMethods, ImplementedMethods, RequestContext extends RequestContextBase>(socket: ISocket<ImplementedMethods, CallableMethods, RequestContext>): ISocketClient<CallableMethods>;
60
- export {};
61
- //# sourceMappingURL=socket.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/socket/socket.ts"],"names":[],"mappings":"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"}
@@ -1,251 +0,0 @@
1
- import { SocketErrorException } from "../types/index.js";
2
- /**
3
- * ISocket is a class that wraps a WebSocket connection and provides a simple interface for sending and receiving messages.
4
- * ISocket is initialized by both server and client and request/response is called symmetrically.
5
- *
6
- * ISocket handles has two timeout actions:
7
- * 1. Connection timeout: If the connection is not closed after a certain time, the connection is closed.
8
- * - This is useful to prevent a connection from being open indefinitely. This is mainly used in the server side since
9
- * the client side manages connection lifecycle manually.
10
- * 2. No response timeout: If the response is not received after a certain time, the request is timed out.
11
- * - This is mainly used by CLI to handle the case where the server is not responding.
12
- *
13
- * It is expected that timeouts should be relatively sorted in the order of connection timeout > request timeout > no response timeout.
14
- */
15
- export class ISocket {
16
- ws;
17
- requestHandlers;
18
- globalMiddlewares;
19
- responseHandler = new Map();
20
- peerAuthorization;
21
- nxtRequestId;
22
- connectionTimeout;
23
- // pino library not available in shared
24
- logger;
25
- timeouts;
26
- constructor(ws, requestHandlers, globalMiddlewares, timeouts, logger) {
27
- this.ws = ws;
28
- this.requestHandlers = requestHandlers;
29
- this.globalMiddlewares = globalMiddlewares;
30
- this.nxtRequestId = 0;
31
- this.logger = logger ?? { error: console.error };
32
- this.timeouts = timeouts;
33
- // reset connection timeout in each message received. It means connection still active
34
- this.resetConnectionTimeout();
35
- this.ws.addEventListener("message", async (event) => {
36
- const eventData = JSON.parse(event.data.toString());
37
- return this.handleMessage(eventData);
38
- });
39
- }
40
- async handleMessage(message) {
41
- this.resetConnectionTimeout();
42
- if (message.request) {
43
- // Split the method string into parts
44
- const parts = message.request.method.split(".");
45
- let handlers = this.requestHandlers;
46
- for (const part of parts) {
47
- handlers = handlers[part];
48
- if (!handlers) {
49
- return this.respondError(message.request.id, {
50
- code: 2,
51
- message: `unknown method ${message.request.method}`,
52
- });
53
- }
54
- }
55
- if (!Array.isArray(handlers)) {
56
- return this.respondError(message.request.id, {
57
- code: 2,
58
- message: "unknown method",
59
- });
60
- }
61
- handlers = [...this.globalMiddlewares, ...handlers];
62
- if (message.request.setAuthorization) {
63
- this.peerAuthorization = message.request.setAuthorization;
64
- }
65
- const reqCtx = {
66
- peerAuthorization: this.peerAuthorization,
67
- method: message.request.method,
68
- requestId: message.request.id,
69
- };
70
- const client = createISocketClient(this);
71
- const payload = message.request.payload;
72
- let alreadyResponded = false;
73
- const generateNextFn = (idx) => {
74
- let wasCalled = false;
75
- return async () => {
76
- if (alreadyResponded) {
77
- throw new SocketErrorException(4, "next() was called after the response was sent");
78
- }
79
- const handler = handlers[idx];
80
- if (!handler) {
81
- throw new SocketErrorException(5, "cannot call past the last handler in the chain");
82
- }
83
- if (wasCalled) {
84
- throw new SocketErrorException(6, "next() was called multiple times");
85
- }
86
- wasCalled = true;
87
- return this.callHandler(handler, payload, reqCtx, client, generateNextFn(idx + 1));
88
- };
89
- };
90
- let response;
91
- try {
92
- // call the first handler in the chain
93
- response = await generateNextFn(0)();
94
- }
95
- catch (error) {
96
- const socketError = error instanceof SocketErrorException
97
- ? { code: error.code, message: error.message }
98
- : { code: 3, message: error.toString() };
99
- return this.respondError(message.request.id, socketError);
100
- }
101
- this.respond(message.request.id, response);
102
- alreadyResponded = true;
103
- }
104
- else if (message.response && message.response.id) {
105
- const responseHandler = this.responseHandler.get(message.response.id);
106
- if (!responseHandler) {
107
- return;
108
- }
109
- if (message.response.error) {
110
- responseHandler.reject(message.response.error);
111
- }
112
- responseHandler.resolve(message.response.payload);
113
- clearTimeout(responseHandler.timeout);
114
- this.responseHandler.delete(message.response.id);
115
- }
116
- else {
117
- return this.respondError(-1, {
118
- code: 3,
119
- message: "unknown request id",
120
- });
121
- }
122
- }
123
- async callHandler(handler, params, ctx, client, next) {
124
- return handler(params, ctx, client, next);
125
- }
126
- request(method, params, authorization) {
127
- return new Promise((resolve, reject) => {
128
- const requestId = ++this.nxtRequestId;
129
- this.responseHandler.set(requestId, {
130
- resolve: (result) => resolve(result),
131
- reject: (error) => reject(error),
132
- });
133
- const toSend = {
134
- request: {
135
- method,
136
- payload: params,
137
- id: requestId,
138
- setAuthorization: authorization,
139
- },
140
- };
141
- this.ws.send(JSON.stringify(toSend));
142
- this.resetNoResponseTimeout(requestId);
143
- });
144
- }
145
- respond(requestId, result) {
146
- const toSend = {
147
- response: {
148
- payload: result,
149
- id: requestId,
150
- error: null,
151
- },
152
- };
153
- return this.ws.send(JSON.stringify(toSend));
154
- }
155
- respondError(requestId, error) {
156
- const toSend = {
157
- response: {
158
- payload: null,
159
- id: requestId,
160
- error: error,
161
- },
162
- };
163
- return this.ws.send(JSON.stringify(toSend));
164
- }
165
- resetConnectionTimeout() {
166
- if (!this.timeouts?.connectionTimeoutInSeconds) {
167
- return;
168
- }
169
- if (this.connectionTimeout) {
170
- clearTimeout(this.connectionTimeout);
171
- }
172
- // Set a new timeout for the next message
173
- this.connectionTimeout = setTimeout(this.handleConnectionTimeout(), this.timeouts?.connectionTimeoutInSeconds * 1000);
174
- }
175
- handleConnectionTimeout() {
176
- return () => {
177
- this.logger.error(`Connection timed out after ${this.timeouts?.connectionTimeoutInSeconds} seconds`);
178
- this.close();
179
- };
180
- }
181
- resetNoResponseTimeout(requestId) {
182
- if (!this.timeouts?.noResponseTimeoutInSeconds) {
183
- return;
184
- }
185
- const responseHandler = this.responseHandler.get(requestId);
186
- if (!responseHandler) {
187
- return;
188
- }
189
- const noResponseTimeout = responseHandler.timeout;
190
- const reject = responseHandler.reject;
191
- if (responseHandler.timeout) {
192
- clearTimeout(noResponseTimeout);
193
- }
194
- // Set a new timeout for the next message
195
- responseHandler.timeout = setTimeout(this.handleNoResponseTimeout(reject), this.timeouts?.noResponseTimeoutInSeconds * 1000);
196
- }
197
- handleNoResponseTimeout(reject) {
198
- return () => {
199
- const message = `Request timed out after ${this.timeouts?.noResponseTimeoutInSeconds} seconds`;
200
- this.logger.error(message);
201
- reject({ code: 7, message });
202
- };
203
- }
204
- close() {
205
- clearTimeout(this.connectionTimeout);
206
- this.responseHandler.forEach((handler, key) => {
207
- clearTimeout(handler.timeout);
208
- this.logger.error(`Rejecting pending requestId ${key} due to connection close`);
209
- handler.reject({ code: 8, message: "Connection closed" });
210
- });
211
- this.ws.close();
212
- }
213
- }
214
- const proxyTarget = Object.freeze(() => {
215
- /* return nothing */
216
- });
217
- function createIsocketProxy(socket,
218
- // if path is undefined, it means the current object is the root object
219
- path) {
220
- return new Proxy(proxyTarget, {
221
- get(_target, prop) {
222
- const childPath = path ? `${path}.${prop}` : prop;
223
- // sometimes, when `createISocketClient` is called from an async function, JS will implicitly call the `then` method on
224
- // its return value, because promises can be arbitrarily nested
225
- // so return undefined for the `then` method to avoid this
226
- if (childPath === "then") {
227
- return undefined;
228
- }
229
- return createIsocketProxy(socket, childPath);
230
- },
231
- apply(_target, _thisArg, args) {
232
- if (path === undefined) {
233
- throw new Error("The root object is not callable");
234
- }
235
- if (path.endsWith(".apply") &&
236
- args.length === 2 &&
237
- Array.isArray(args[1])) {
238
- path = path.slice(0, -".apply".length);
239
- args = args[1];
240
- }
241
- return socket.request(path, args[0]);
242
- },
243
- });
244
- }
245
- export function createISocketClient(socket) {
246
- return {
247
- close: () => socket.close(),
248
- call: createIsocketProxy(socket, undefined),
249
- };
250
- }
251
- //# sourceMappingURL=socket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/socket/socket.ts"],"names":[],"mappings":"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"}