@blaxel/core 0.2.49-dev.213 → 0.2.49-dev1

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 (243) hide show
  1. package/dist/agents/index.d.ts +15 -0
  2. package/dist/agents/index.js +109 -0
  3. package/dist/authentication/apikey.d.ts +10 -0
  4. package/dist/authentication/apikey.js +24 -0
  5. package/dist/authentication/clientcredentials.d.ts +17 -0
  6. package/dist/authentication/clientcredentials.js +85 -0
  7. package/dist/authentication/credentials.d.ts +6 -0
  8. package/dist/authentication/credentials.js +17 -0
  9. package/dist/authentication/deviceMode.d.ts +15 -0
  10. package/dist/authentication/deviceMode.js +70 -0
  11. package/dist/authentication/index.d.ts +3 -0
  12. package/dist/authentication/index.js +62 -0
  13. package/dist/authentication/types.d.ts +9 -0
  14. package/dist/authentication/types.js +2 -0
  15. package/dist/cache/index.d.ts +1 -0
  16. package/dist/cache/index.js +26 -0
  17. package/dist/cjs/.tsbuildinfo +1 -1
  18. package/dist/cjs/agents/index.js +2 -2
  19. package/dist/cjs/authentication/clientcredentials.js +1 -4
  20. package/dist/cjs/client/responseInterceptor.js +53 -0
  21. package/dist/cjs/client/sdk.gen.js +143 -3
  22. package/dist/cjs/common/autoload.js +7 -0
  23. package/dist/cjs/common/env.js +3 -0
  24. package/dist/cjs/common/internal.js +0 -40
  25. package/dist/cjs/common/settings.js +2 -5
  26. package/dist/cjs/common/version.js +6 -0
  27. package/dist/cjs/common/webhook.js +101 -0
  28. package/dist/cjs/jobs/executions.js +119 -0
  29. package/dist/cjs/jobs/jobs.js +2 -2
  30. package/dist/cjs/sandbox/action.js +2 -1
  31. package/dist/cjs/sandbox/index.js +1 -0
  32. package/dist/cjs/sandbox/interpreter.js +400 -0
  33. package/dist/cjs/sandbox/sandbox.js +10 -67
  34. package/dist/cjs/tools/mcpTool.js +2 -6
  35. package/dist/cjs/types/client/responseInterceptor.d.ts +12 -0
  36. package/dist/cjs/types/client/sdk.gen.d.ts +41 -1
  37. package/dist/cjs/types/client/types.gen.d.ts +599 -16
  38. package/dist/cjs/types/common/internal.d.ts +0 -2
  39. package/dist/cjs/types/common/settings.d.ts +0 -1
  40. package/dist/cjs/types/common/version.d.ts +2 -0
  41. package/dist/cjs/types/common/webhook.d.ts +89 -0
  42. package/dist/cjs/types/jobs/executions.d.ts +42 -0
  43. package/dist/cjs/types/sandbox/client/sdk.gen.d.ts +1 -1
  44. package/dist/cjs/types/sandbox/index.d.ts +1 -0
  45. package/dist/cjs/types/sandbox/interpreter.d.ts +71 -0
  46. package/dist/cjs/types/sandbox/sandbox.d.ts +6 -12
  47. package/dist/cjs/types/sandbox/types.d.ts +0 -3
  48. package/dist/cjs-browser/.tsbuildinfo +1 -1
  49. package/dist/cjs-browser/agents/index.js +2 -2
  50. package/dist/cjs-browser/authentication/clientcredentials.js +1 -4
  51. package/dist/cjs-browser/client/responseInterceptor.js +53 -0
  52. package/dist/cjs-browser/client/sdk.gen.js +143 -3
  53. package/dist/cjs-browser/common/autoload.js +7 -0
  54. package/dist/cjs-browser/common/env.js +3 -0
  55. package/dist/cjs-browser/common/internal.js +0 -40
  56. package/dist/cjs-browser/common/settings.js +2 -5
  57. package/dist/cjs-browser/common/version.js +6 -0
  58. package/dist/cjs-browser/common/webhook.js +101 -0
  59. package/dist/cjs-browser/jobs/executions.js +119 -0
  60. package/dist/cjs-browser/jobs/jobs.js +2 -2
  61. package/dist/cjs-browser/sandbox/action.js +2 -1
  62. package/dist/cjs-browser/sandbox/index.js +1 -0
  63. package/dist/cjs-browser/sandbox/interpreter.js +400 -0
  64. package/dist/cjs-browser/sandbox/sandbox.js +10 -67
  65. package/dist/cjs-browser/tools/mcpTool.js +2 -6
  66. package/dist/cjs-browser/types/client/responseInterceptor.d.ts +12 -0
  67. package/dist/cjs-browser/types/client/sdk.gen.d.ts +41 -1
  68. package/dist/cjs-browser/types/client/types.gen.d.ts +599 -16
  69. package/dist/cjs-browser/types/common/internal.d.ts +0 -2
  70. package/dist/cjs-browser/types/common/settings.d.ts +0 -1
  71. package/dist/cjs-browser/types/common/version.d.ts +2 -0
  72. package/dist/cjs-browser/types/common/webhook.d.ts +89 -0
  73. package/dist/cjs-browser/types/jobs/executions.d.ts +42 -0
  74. package/dist/cjs-browser/types/sandbox/client/sdk.gen.d.ts +1 -1
  75. package/dist/cjs-browser/types/sandbox/index.d.ts +1 -0
  76. package/dist/cjs-browser/types/sandbox/interpreter.d.ts +71 -0
  77. package/dist/cjs-browser/types/sandbox/sandbox.d.ts +6 -12
  78. package/dist/cjs-browser/types/sandbox/types.d.ts +0 -3
  79. package/dist/client/authentication.d.ts +25 -0
  80. package/dist/client/authentication.js +15 -0
  81. package/dist/client/client.d.ts +2 -0
  82. package/dist/client/client.gen.d.ts +12 -0
  83. package/dist/client/client.gen.js +8 -0
  84. package/dist/{cjs/sandbox/websocket/index.js → client/client.js} +1 -1
  85. package/dist/client/index.d.ts +2 -0
  86. package/dist/client/index.js +19 -0
  87. package/dist/client/interceptors.d.ts +3 -0
  88. package/dist/client/interceptors.js +17 -0
  89. package/dist/client/sdk.gen.d.ts +499 -0
  90. package/dist/client/sdk.gen.js +1751 -0
  91. package/dist/client/types.gen.d.ts +4546 -0
  92. package/dist/client/types.gen.js +4 -0
  93. package/dist/common/autoload.d.ts +3 -0
  94. package/dist/common/autoload.js +27 -0
  95. package/dist/common/env.d.ts +5 -0
  96. package/dist/common/env.js +42 -0
  97. package/dist/common/errors.d.ts +1 -0
  98. package/dist/common/errors.js +17 -0
  99. package/dist/common/internal.d.ts +4 -0
  100. package/dist/common/internal.js +188 -0
  101. package/dist/common/internal.test.d.ts +1 -0
  102. package/dist/common/internal.test.js +39 -0
  103. package/dist/common/logger.d.ts +25 -0
  104. package/dist/common/logger.js +69 -0
  105. package/dist/common/node.d.ts +5 -0
  106. package/dist/common/node.js +26 -0
  107. package/dist/common/settings.d.ts +31 -0
  108. package/dist/common/settings.js +170 -0
  109. package/dist/esm/.tsbuildinfo +1 -1
  110. package/dist/esm/agents/index.js +3 -3
  111. package/dist/esm/authentication/clientcredentials.js +1 -4
  112. package/dist/esm/client/responseInterceptor.js +49 -0
  113. package/dist/esm/client/sdk.gen.js +132 -0
  114. package/dist/esm/common/autoload.js +7 -0
  115. package/dist/esm/common/env.js +3 -0
  116. package/dist/esm/common/internal.js +0 -38
  117. package/dist/esm/common/settings.js +2 -5
  118. package/dist/esm/common/version.js +3 -0
  119. package/dist/esm/common/webhook.js +97 -0
  120. package/dist/esm/jobs/executions.js +114 -0
  121. package/dist/esm/jobs/jobs.js +3 -3
  122. package/dist/esm/sandbox/action.js +3 -2
  123. package/dist/esm/sandbox/index.js +1 -0
  124. package/dist/esm/sandbox/interpreter.js +396 -0
  125. package/dist/esm/sandbox/sandbox.js +10 -67
  126. package/dist/esm/tools/mcpTool.js +3 -7
  127. package/dist/esm-browser/.tsbuildinfo +1 -1
  128. package/dist/esm-browser/agents/index.js +3 -3
  129. package/dist/esm-browser/authentication/clientcredentials.js +1 -4
  130. package/dist/esm-browser/client/responseInterceptor.js +49 -0
  131. package/dist/esm-browser/client/sdk.gen.js +132 -0
  132. package/dist/esm-browser/common/autoload.js +7 -0
  133. package/dist/esm-browser/common/env.js +3 -0
  134. package/dist/esm-browser/common/internal.js +0 -38
  135. package/dist/esm-browser/common/settings.js +2 -5
  136. package/dist/esm-browser/common/version.js +3 -0
  137. package/dist/esm-browser/common/webhook.js +97 -0
  138. package/dist/esm-browser/jobs/executions.js +114 -0
  139. package/dist/esm-browser/jobs/jobs.js +3 -3
  140. package/dist/esm-browser/sandbox/action.js +3 -2
  141. package/dist/esm-browser/sandbox/index.js +1 -0
  142. package/dist/esm-browser/sandbox/interpreter.js +396 -0
  143. package/dist/esm-browser/sandbox/sandbox.js +10 -67
  144. package/dist/esm-browser/tools/mcpTool.js +3 -7
  145. package/dist/index.browser.test.d.ts +1 -0
  146. package/dist/index.browser.test.js +45 -0
  147. package/dist/index.d.ts +17 -0
  148. package/dist/index.js +33 -0
  149. package/dist/jobs/index.d.ts +3 -0
  150. package/dist/jobs/index.js +19 -0
  151. package/dist/jobs/jobs.d.ts +13 -0
  152. package/dist/jobs/jobs.js +90 -0
  153. package/dist/jobs/start.d.ts +1 -0
  154. package/dist/jobs/start.js +66 -0
  155. package/dist/jobs/types.d.ts +3 -0
  156. package/dist/jobs/types.js +2 -0
  157. package/dist/mcp/client.d.ts +28 -0
  158. package/dist/mcp/client.js +247 -0
  159. package/dist/{cjs-browser/types/sandbox/websocket → mcp}/index.d.ts +1 -0
  160. package/dist/{cjs-browser/sandbox/websocket → mcp}/index.js +1 -0
  161. package/dist/mcp/server.d.ts +24 -0
  162. package/dist/mcp/server.js +213 -0
  163. package/dist/models/index.d.ts +8 -0
  164. package/dist/models/index.js +31 -0
  165. package/dist/sandbox/action.d.ts +19 -0
  166. package/dist/sandbox/action.js +84 -0
  167. package/dist/sandbox/client/client.gen.d.ts +12 -0
  168. package/dist/sandbox/client/client.gen.js +6 -0
  169. package/dist/sandbox/client/index.d.ts +2 -0
  170. package/dist/sandbox/client/index.js +19 -0
  171. package/dist/sandbox/client/sdk.gen.d.ts +101 -0
  172. package/dist/sandbox/client/sdk.gen.js +289 -0
  173. package/dist/sandbox/client/types.gen.d.ts +578 -0
  174. package/dist/sandbox/client/types.gen.js +3 -0
  175. package/dist/{cjs/types/sandbox/filesystem/filesystem-ws.d.ts → sandbox/filesystem/filesystem.d.ts} +6 -18
  176. package/dist/sandbox/filesystem/filesystem.js +276 -0
  177. package/dist/sandbox/filesystem/index.d.ts +2 -0
  178. package/dist/sandbox/filesystem/index.js +18 -0
  179. package/dist/sandbox/filesystem/types.d.ts +15 -0
  180. package/dist/sandbox/filesystem/types.js +2 -0
  181. package/dist/sandbox/index.d.ts +4 -0
  182. package/dist/sandbox/index.js +36 -0
  183. package/dist/sandbox/network/index.d.ts +1 -0
  184. package/dist/sandbox/network/index.js +17 -0
  185. package/dist/sandbox/network/network.d.ts +5 -0
  186. package/dist/sandbox/network/network.js +10 -0
  187. package/dist/sandbox/preview.d.ts +37 -0
  188. package/dist/sandbox/preview.js +148 -0
  189. package/dist/sandbox/process/index.d.ts +1 -0
  190. package/dist/sandbox/process/index.js +17 -0
  191. package/dist/sandbox/process/process.d.ts +24 -0
  192. package/dist/sandbox/process/process.js +189 -0
  193. package/dist/sandbox/sandbox.d.ts +33 -0
  194. package/dist/sandbox/sandbox.js +178 -0
  195. package/dist/sandbox/session.d.ts +27 -0
  196. package/dist/sandbox/session.js +123 -0
  197. package/dist/sandbox/types.d.ts +51 -0
  198. package/dist/sandbox/types.js +81 -0
  199. package/dist/telemetry/telemetry.d.ts +62 -0
  200. package/dist/telemetry/telemetry.js +80 -0
  201. package/dist/tools/index.d.ts +11 -0
  202. package/dist/tools/index.js +52 -0
  203. package/dist/tools/mcpTool.d.ts +28 -0
  204. package/dist/tools/mcpTool.js +218 -0
  205. package/dist/tools/types.d.ts +8 -0
  206. package/dist/tools/types.js +2 -0
  207. package/dist/tools/zodSchema.d.ts +9 -0
  208. package/dist/tools/zodSchema.js +50 -0
  209. package/dist/volume/index.d.ts +23 -0
  210. package/dist/volume/index.js +113 -0
  211. package/package.json +2 -2
  212. package/dist/cjs/sandbox/codegen/codegen-ws.js +0 -30
  213. package/dist/cjs/sandbox/filesystem/filesystem-ws.js +0 -106
  214. package/dist/cjs/sandbox/network/network-ws.js +0 -12
  215. package/dist/cjs/sandbox/process/process-ws.js +0 -139
  216. package/dist/cjs/sandbox/websocket/client.js +0 -269
  217. package/dist/cjs/types/sandbox/codegen/codegen-ws.d.ts +0 -10
  218. package/dist/cjs/types/sandbox/network/network-ws.d.ts +0 -7
  219. package/dist/cjs/types/sandbox/process/process-ws.d.ts +0 -27
  220. package/dist/cjs/types/sandbox/websocket/client.d.ts +0 -48
  221. package/dist/cjs/types/sandbox/websocket/index.d.ts +0 -1
  222. package/dist/cjs-browser/sandbox/codegen/codegen-ws.js +0 -30
  223. package/dist/cjs-browser/sandbox/filesystem/filesystem-ws.js +0 -106
  224. package/dist/cjs-browser/sandbox/network/network-ws.js +0 -12
  225. package/dist/cjs-browser/sandbox/process/process-ws.js +0 -139
  226. package/dist/cjs-browser/sandbox/websocket/client.js +0 -269
  227. package/dist/cjs-browser/types/sandbox/codegen/codegen-ws.d.ts +0 -10
  228. package/dist/cjs-browser/types/sandbox/filesystem/filesystem-ws.d.ts +0 -35
  229. package/dist/cjs-browser/types/sandbox/network/network-ws.d.ts +0 -7
  230. package/dist/cjs-browser/types/sandbox/process/process-ws.d.ts +0 -27
  231. package/dist/cjs-browser/types/sandbox/websocket/client.d.ts +0 -48
  232. package/dist/esm/sandbox/codegen/codegen-ws.js +0 -26
  233. package/dist/esm/sandbox/filesystem/filesystem-ws.js +0 -102
  234. package/dist/esm/sandbox/network/network-ws.js +0 -8
  235. package/dist/esm/sandbox/process/process-ws.js +0 -135
  236. package/dist/esm/sandbox/websocket/client.js +0 -265
  237. package/dist/esm/sandbox/websocket/index.js +0 -1
  238. package/dist/esm-browser/sandbox/codegen/codegen-ws.js +0 -26
  239. package/dist/esm-browser/sandbox/filesystem/filesystem-ws.js +0 -102
  240. package/dist/esm-browser/sandbox/network/network-ws.js +0 -8
  241. package/dist/esm-browser/sandbox/process/process-ws.js +0 -135
  242. package/dist/esm-browser/sandbox/websocket/client.js +0 -265
  243. package/dist/esm-browser/sandbox/websocket/index.js +0 -1
@@ -0,0 +1,3 @@
1
+ export * from "./jobs.js";
2
+ export * from "./start.js";
3
+ export * from "./types.js";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./jobs.js"), exports);
18
+ __exportStar(require("./start.js"), exports);
19
+ __exportStar(require("./types.js"), exports);
@@ -0,0 +1,13 @@
1
+ declare class BlJob {
2
+ jobName: string;
3
+ constructor(jobName: string);
4
+ get fallbackUrl(): import("url").URL | null;
5
+ get externalUrl(): import("url").URL;
6
+ get internalUrl(): import("url").URL;
7
+ get forcedUrl(): import("url").URL | null;
8
+ get url(): import("url").URL;
9
+ call(url: URL, tasks: Record<string, unknown>[]): Promise<Response>;
10
+ run(tasks: Record<string, unknown>[]): Promise<string>;
11
+ }
12
+ export declare const blJob: (jobName: string) => BlJob;
13
+ export {};
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.blJob = void 0;
4
+ const internal_js_1 = require("../common/internal.js");
5
+ const logger_js_1 = require("../common/logger.js");
6
+ const settings_js_1 = require("../common/settings.js");
7
+ const telemetry_js_1 = require("../telemetry/telemetry.js");
8
+ class BlJob {
9
+ jobName;
10
+ constructor(jobName) {
11
+ this.jobName = jobName;
12
+ }
13
+ get fallbackUrl() {
14
+ if (this.externalUrl != this.url) {
15
+ return this.externalUrl;
16
+ }
17
+ return null;
18
+ }
19
+ get externalUrl() {
20
+ return new URL(`${settings_js_1.settings.runUrl}/${settings_js_1.settings.workspace}/jobs/${this.jobName}`);
21
+ }
22
+ get internalUrl() {
23
+ const hash = (0, internal_js_1.getGlobalUniqueHash)(settings_js_1.settings.workspace, "job", this.jobName);
24
+ return new URL(`${settings_js_1.settings.runInternalProtocol}://bl-${settings_js_1.settings.env}-${hash}.${settings_js_1.settings.runInternalHostname}`);
25
+ }
26
+ get forcedUrl() {
27
+ return (0, internal_js_1.getForcedUrl)('job', this.jobName);
28
+ }
29
+ get url() {
30
+ if (this.forcedUrl)
31
+ return this.forcedUrl;
32
+ if (settings_js_1.settings.runInternalHostname)
33
+ return this.internalUrl;
34
+ return this.externalUrl;
35
+ }
36
+ async call(url, tasks) {
37
+ const body = {
38
+ tasks: tasks
39
+ };
40
+ const response = await fetch(url.toString() + "/executions", {
41
+ method: "POST",
42
+ headers: {
43
+ ...settings_js_1.settings.headers,
44
+ "Content-Type": "application/json",
45
+ },
46
+ body: JSON.stringify(body),
47
+ });
48
+ return response;
49
+ }
50
+ async run(tasks) {
51
+ logger_js_1.logger.debug(`Job Calling: ${this.jobName}`);
52
+ const span = (0, telemetry_js_1.startSpan)(this.jobName, {
53
+ attributes: {
54
+ "job.name": this.jobName,
55
+ "span.type": "job.run",
56
+ },
57
+ isRoot: false,
58
+ });
59
+ try {
60
+ const response = await this.call(this.url, tasks);
61
+ return await response.text();
62
+ }
63
+ catch (err) {
64
+ if (err instanceof Error) {
65
+ if (!this.fallbackUrl) {
66
+ span.setAttribute("job.run.error", err.stack);
67
+ throw err;
68
+ }
69
+ try {
70
+ const response = await this.call(this.fallbackUrl, tasks);
71
+ return await response.text();
72
+ }
73
+ catch (err) {
74
+ if (err instanceof Error) {
75
+ span.setAttribute("job.run.error", err.stack);
76
+ }
77
+ throw err;
78
+ }
79
+ }
80
+ throw err;
81
+ }
82
+ finally {
83
+ span.end();
84
+ }
85
+ }
86
+ }
87
+ const blJob = (jobName) => {
88
+ return new BlJob(jobName);
89
+ };
90
+ exports.blJob = blJob;
@@ -0,0 +1 @@
1
+ export declare const blStartJob: (func: (args: any) => Promise<void>) => void;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.blStartJob = void 0;
4
+ const autoload_js_1 = require("../common/autoload.js");
5
+ const env_js_1 = require("../common/env.js");
6
+ const telemetry_js_1 = require("../telemetry/telemetry.js");
7
+ class BlJobWrapper {
8
+ async getArguments() {
9
+ if (!env_js_1.env.BL_EXECUTION_DATA_URL) {
10
+ const args = this.parseCommandLineArgs();
11
+ return args;
12
+ }
13
+ const response = await fetch(env_js_1.env.BL_EXECUTION_DATA_URL);
14
+ const data = await response.json();
15
+ return data.tasks[this.index] ?? {};
16
+ }
17
+ parseCommandLineArgs() {
18
+ const args = process.argv.slice(2);
19
+ const result = {};
20
+ for (let i = 0; i < args.length; i++) {
21
+ const arg = args[i];
22
+ if (arg.startsWith('--')) {
23
+ const key = arg.slice(2);
24
+ const value = args[i + 1];
25
+ if (value && !value.startsWith('--')) {
26
+ result[key] = value;
27
+ i++;
28
+ }
29
+ else {
30
+ result[key] = 'true';
31
+ }
32
+ }
33
+ }
34
+ return result;
35
+ }
36
+ get indexKey() {
37
+ return env_js_1.env.BL_TASK_KEY ?? "TASK_INDEX";
38
+ }
39
+ get index() {
40
+ return env_js_1.env[this.indexKey] ? Number(env_js_1.env[this.indexKey]) : 0;
41
+ }
42
+ /*
43
+ Run a job defined in a function, it's run in the current process
44
+ */
45
+ async start(func) {
46
+ await (0, autoload_js_1.authenticate)();
47
+ const parsedArgs = await this.getArguments();
48
+ await func(parsedArgs);
49
+ }
50
+ }
51
+ const blStartJob = (func) => {
52
+ const job = new BlJobWrapper();
53
+ job.start(func).then(async () => {
54
+ try {
55
+ await (0, telemetry_js_1.flush)();
56
+ }
57
+ catch (error) {
58
+ console.error('Error flushing telemetry:', error);
59
+ }
60
+ process.exit(0);
61
+ }).catch((error) => {
62
+ console.error('Job execution failed:', error);
63
+ process.exit(1);
64
+ });
65
+ };
66
+ exports.blStartJob = blStartJob;
@@ -0,0 +1,3 @@
1
+ export type ExecutionArgs = {
2
+ [key: number]: any;
3
+ }[];
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,28 @@
1
+ import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
2
+ import { JSONRPCMessage } from "@modelcontextprotocol/sdk/types.js";
3
+ /**
4
+ * Client transport for WebSocket: this will connect to a server over the WebSocket protocol.
5
+ * Works in both browser and Node.js environments.
6
+ */
7
+ export declare class BlaxelMcpClientTransport implements Transport {
8
+ private _socket?;
9
+ private _url;
10
+ private _headers;
11
+ private _isBrowser;
12
+ private _retry_max;
13
+ private _retry_delay;
14
+ onclose?: () => void;
15
+ onerror?: (error: Error) => void;
16
+ onmessage?: (message: JSONRPCMessage) => void;
17
+ constructor(url: string, headers?: Record<string, string>, options?: {
18
+ retry: {
19
+ max?: number;
20
+ delay?: number;
21
+ };
22
+ });
23
+ start(): Promise<void>;
24
+ private _connect;
25
+ get isConnected(): boolean;
26
+ close(): Promise<void>;
27
+ send(message: JSONRPCMessage): Promise<void>;
28
+ }
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BlaxelMcpClientTransport = void 0;
4
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
5
+ const logger_js_1 = require("../common/logger.js");
6
+ const settings_js_1 = require("../common/settings.js");
7
+ // Detect environment
8
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
9
+ const isBrowser = typeof globalThis !== "undefined" && globalThis.window !== undefined;
10
+ // Conditional import for Node.js WebSocket
11
+ let NodeWebSocket;
12
+ if (!isBrowser) {
13
+ try {
14
+ // Dynamic import for Node.js environment
15
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-require-imports
16
+ NodeWebSocket = require("ws");
17
+ }
18
+ catch {
19
+ console.warn("ws is not available in this environment");
20
+ // ws is not available
21
+ }
22
+ }
23
+ //const SUBPROTOCOL = "mcp";
24
+ // Helper function to wait
25
+ const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
26
+ /**
27
+ * Client transport for WebSocket: this will connect to a server over the WebSocket protocol.
28
+ * Works in both browser and Node.js environments.
29
+ */
30
+ class BlaxelMcpClientTransport {
31
+ _socket;
32
+ _url;
33
+ _headers;
34
+ _isBrowser;
35
+ _retry_max;
36
+ _retry_delay;
37
+ onclose;
38
+ onerror;
39
+ onmessage;
40
+ constructor(url, headers, options) {
41
+ this._url = new URL(url.replace("http", "ws"));
42
+ this._retry_max = options?.retry?.max ?? 3;
43
+ this._retry_delay = options?.retry?.delay ?? 1000;
44
+ this._headers = headers ?? {};
45
+ this._isBrowser = isBrowser;
46
+ }
47
+ async start() {
48
+ if (this._socket) {
49
+ throw new Error("Blaxel already started! If using Client class, note that connect() calls start() automatically.");
50
+ }
51
+ let attempts = 0;
52
+ const maxAttempts = Math.max(1, this._retry_max + 1); // Ensure at least 1 attempt
53
+ while (attempts < maxAttempts) {
54
+ try {
55
+ await this._connect();
56
+ return;
57
+ }
58
+ catch (error) {
59
+ attempts++;
60
+ if (error instanceof Error) {
61
+ logger_js_1.logger.warn(error.stack ?? error.message);
62
+ }
63
+ if (attempts >= maxAttempts) {
64
+ throw error;
65
+ }
66
+ logger_js_1.logger.debug(`WebSocket connection attempt ${attempts} failed, retrying in ${this._retry_delay}ms...`);
67
+ await delay(this._retry_delay);
68
+ }
69
+ }
70
+ }
71
+ _connect() {
72
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
73
+ return new Promise((resolve, reject) => {
74
+ try {
75
+ if (this._isBrowser) {
76
+ // Use native browser WebSocket
77
+ const url = `${this._url.toString()}?token=${settings_js_1.settings.token}`;
78
+ this._socket = new WebSocket(url);
79
+ }
80
+ else {
81
+ // Use Node.js WebSocket
82
+ if (!NodeWebSocket) {
83
+ throw new Error("WebSocket library not available in Node.js environment");
84
+ }
85
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
86
+ this._socket = new NodeWebSocket(this._url, {
87
+ //protocols: SUBPROTOCOL,
88
+ headers: this._headers,
89
+ });
90
+ }
91
+ this._socket.onerror = (event) => {
92
+ // Log websocket error with meaningful information instead of raw event
93
+ const errorInfo = {
94
+ type: 'WebSocket Error',
95
+ url: this._url.toString(),
96
+ readyState: this._socket?.readyState,
97
+ browser: this._isBrowser,
98
+ // Extract any available error details from the event
99
+ eventType: event && typeof event === 'object' && 'type' in event
100
+ ? String(event.type)
101
+ : 'unknown',
102
+ // Browser events might have different properties than Node.js
103
+ message: this._isBrowser && event && typeof event === 'object' && 'message' in event
104
+ ? String(event.message)
105
+ : undefined,
106
+ error: !this._isBrowser && event && typeof event === 'object' && 'error' in event
107
+ ? String(event.error)
108
+ : undefined
109
+ };
110
+ logger_js_1.logger.error('WebSocket connection error', errorInfo);
111
+ const error = this._isBrowser
112
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
113
+ ? new Error(`WebSocket error: ${event.message}`)
114
+ : "error" in event
115
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
116
+ ? event.error
117
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
118
+ : new Error(`WebSocket error: ${event.message}`);
119
+ reject(error);
120
+ this.onerror?.(error);
121
+ };
122
+ this._socket.onopen = () => {
123
+ resolve();
124
+ };
125
+ this._socket.onclose = () => {
126
+ this.onclose?.();
127
+ this._socket = undefined;
128
+ };
129
+ this._socket.onmessage = (event) => {
130
+ let message;
131
+ try {
132
+ let dataString;
133
+ if (this._isBrowser) {
134
+ // Browser WebSocket MessageEvent
135
+ const browserEvent = event;
136
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
137
+ dataString = typeof browserEvent.data === "string"
138
+ ? browserEvent.data
139
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
140
+ : browserEvent.data.toString();
141
+ }
142
+ else {
143
+ // Node.js WebSocket MessageEvent
144
+ const nodeEvent = event;
145
+ if (typeof nodeEvent.data === "string") {
146
+ dataString = nodeEvent.data;
147
+ }
148
+ else if (nodeEvent.data instanceof Buffer) {
149
+ dataString = nodeEvent.data.toString("utf-8");
150
+ }
151
+ else {
152
+ throw new Error("Unsupported data type for event.data");
153
+ }
154
+ }
155
+ message = types_js_1.JSONRPCMessageSchema.parse(JSON.parse(dataString));
156
+ }
157
+ catch (error) {
158
+ logger_js_1.logger.error(`Error parsing message: ${
159
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
160
+ typeof event.data === "object"
161
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
162
+ ? JSON.stringify(event.data)
163
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
164
+ : event.data}`);
165
+ this.onerror?.(error);
166
+ return;
167
+ }
168
+ this.onmessage?.(message);
169
+ };
170
+ }
171
+ catch (error) {
172
+ if (error instanceof Error && error.message.includes("ws does not work in the browser")) {
173
+ this._isBrowser = true;
174
+ return this._connect().then(resolve).catch(reject);
175
+ }
176
+ reject(error);
177
+ }
178
+ });
179
+ }
180
+ get isConnected() {
181
+ if (!this._socket)
182
+ return false;
183
+ if (this._isBrowser) {
184
+ return this._socket.readyState === 1; // WebSocket.OPEN = 1
185
+ }
186
+ else {
187
+ return this._socket.readyState === 1; // WebSocket.OPEN = 1
188
+ }
189
+ }
190
+ async close() {
191
+ this._socket?.close();
192
+ this._socket = undefined;
193
+ this.onclose?.();
194
+ return Promise.resolve();
195
+ }
196
+ async send(message) {
197
+ let attempts = 0;
198
+ const maxAttempts = Math.max(1, this._retry_max + 1); // Ensure at least 1 attempt
199
+ while (attempts < maxAttempts) {
200
+ try {
201
+ if (!this._socket || !this.isConnected) {
202
+ if (!this._socket) {
203
+ // Only try to start if socket doesn't exist
204
+ await this.start();
205
+ }
206
+ else {
207
+ throw new Error("WebSocket is not in OPEN state");
208
+ }
209
+ }
210
+ await new Promise((resolve, reject) => {
211
+ try {
212
+ const messageStr = JSON.stringify(message);
213
+ if (this._isBrowser) {
214
+ // Browser WebSocket
215
+ this._socket?.send(messageStr);
216
+ resolve();
217
+ }
218
+ else {
219
+ // Node.js WebSocket
220
+ this._socket?.send(messageStr, (error) => {
221
+ if (error) {
222
+ reject(error);
223
+ }
224
+ else {
225
+ resolve();
226
+ }
227
+ });
228
+ }
229
+ }
230
+ catch (error) {
231
+ reject(error);
232
+ }
233
+ });
234
+ return;
235
+ }
236
+ catch (error) {
237
+ attempts++;
238
+ if (attempts >= maxAttempts) {
239
+ throw error;
240
+ }
241
+ logger_js_1.logger.warn(`WebSocket send attempt ${attempts} failed, retrying in ${this._retry_delay}ms...`);
242
+ await delay(this._retry_delay);
243
+ }
244
+ }
245
+ }
246
+ }
247
+ exports.BlaxelMcpClientTransport = BlaxelMcpClientTransport;
@@ -1 +1,2 @@
1
1
  export * from "./client.js";
2
+ export * from "./server.js";
@@ -15,3 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./client.js"), exports);
18
+ __exportStar(require("./server.js"), exports);
@@ -0,0 +1,24 @@
1
+ import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
2
+ interface JSONRPCMessage {
3
+ jsonrpc: "2.0";
4
+ id?: string | number;
5
+ method?: string;
6
+ params?: Record<string, unknown>;
7
+ }
8
+ export declare class BlaxelMcpServerTransport implements Transport {
9
+ private port;
10
+ private wss;
11
+ private clients;
12
+ onclose?: () => void;
13
+ onerror?: (err: Error) => void;
14
+ private messageHandler?;
15
+ onconnection?: (clientId: string) => void;
16
+ ondisconnection?: (clientId: string) => void;
17
+ set onmessage(handler: ((message: JSONRPCMessage) => void) | undefined);
18
+ constructor(port?: number);
19
+ start(): Promise<void>;
20
+ send(msg: JSONRPCMessage): Promise<void>;
21
+ broadcast(msg: JSONRPCMessage): Promise<void>;
22
+ close(): Promise<void>;
23
+ }
24
+ export {};