@superblocksteam/sdk 1.14.2 → 1.99.99-next.2

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