computesdk 1.9.4 → 1.9.6
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/dist/index.d.mts +227 -9
- package/dist/index.d.ts +227 -9
- package/dist/index.js +277 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +265 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -22,20 +22,31 @@ var index_exports = {};
|
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
CommandExitError: () => import_client2.CommandExitError,
|
|
24
24
|
GATEWAY_URL: () => GATEWAY_URL,
|
|
25
|
+
PROVIDER_AUTH: () => PROVIDER_AUTH,
|
|
26
|
+
PROVIDER_DASHBOARD_URLS: () => PROVIDER_DASHBOARD_URLS,
|
|
27
|
+
PROVIDER_ENV_MAP: () => PROVIDER_ENV_MAP,
|
|
25
28
|
PROVIDER_ENV_VARS: () => PROVIDER_ENV_VARS,
|
|
29
|
+
PROVIDER_HEADERS: () => PROVIDER_HEADERS,
|
|
30
|
+
PROVIDER_NAMES: () => PROVIDER_NAMES,
|
|
26
31
|
PROVIDER_PRIORITY: () => PROVIDER_PRIORITY,
|
|
27
32
|
Sandbox: () => import_client.Sandbox,
|
|
28
33
|
autoConfigureCompute: () => autoConfigureCompute,
|
|
34
|
+
buildProviderHeaders: () => buildProviderHeaders,
|
|
29
35
|
calculateBackoff: () => calculateBackoff,
|
|
30
36
|
compute: () => compute,
|
|
31
37
|
createCompute: () => createCompute,
|
|
32
38
|
createProvider: () => createProvider,
|
|
39
|
+
createProviderFromConfig: () => createProviderFromConfig,
|
|
33
40
|
detectProvider: () => detectProvider,
|
|
34
41
|
gateway: () => gateway,
|
|
42
|
+
getMissingEnvVars: () => getMissingEnvVars,
|
|
43
|
+
getProviderConfigFromEnv: () => getProviderConfigFromEnv,
|
|
35
44
|
getProviderHeaders: () => getProviderHeaders,
|
|
36
45
|
handleComputeRequest: () => handleComputeRequest,
|
|
37
46
|
isCommandExitError: () => import_client2.isCommandExitError,
|
|
38
|
-
isGatewayModeEnabled: () => isGatewayModeEnabled
|
|
47
|
+
isGatewayModeEnabled: () => isGatewayModeEnabled,
|
|
48
|
+
isProviderAuthComplete: () => isProviderAuthComplete,
|
|
49
|
+
isValidProvider: () => isValidProvider
|
|
39
50
|
});
|
|
40
51
|
module.exports = __toCommonJS(index_exports);
|
|
41
52
|
|
|
@@ -43,6 +54,159 @@ module.exports = __toCommonJS(index_exports);
|
|
|
43
54
|
var import_client = require("@computesdk/client");
|
|
44
55
|
var import_client2 = require("@computesdk/client");
|
|
45
56
|
|
|
57
|
+
// src/provider-config.ts
|
|
58
|
+
var PROVIDER_AUTH = {
|
|
59
|
+
e2b: [["E2B_API_KEY"]],
|
|
60
|
+
modal: [["MODAL_TOKEN_ID", "MODAL_TOKEN_SECRET"]],
|
|
61
|
+
railway: [["RAILWAY_API_KEY", "RAILWAY_PROJECT_ID", "RAILWAY_ENVIRONMENT_ID"]],
|
|
62
|
+
daytona: [["DAYTONA_API_KEY"]],
|
|
63
|
+
vercel: [
|
|
64
|
+
["VERCEL_OIDC_TOKEN"],
|
|
65
|
+
["VERCEL_TOKEN", "VERCEL_TEAM_ID", "VERCEL_PROJECT_ID"]
|
|
66
|
+
],
|
|
67
|
+
runloop: [["RUNLOOP_API_KEY"]],
|
|
68
|
+
cloudflare: [["CLOUDFLARE_API_TOKEN", "CLOUDFLARE_ACCOUNT_ID"]],
|
|
69
|
+
codesandbox: [["CSB_API_KEY"]],
|
|
70
|
+
blaxel: [["BL_API_KEY", "BL_WORKSPACE"]]
|
|
71
|
+
};
|
|
72
|
+
var PROVIDER_NAMES = Object.keys(PROVIDER_AUTH);
|
|
73
|
+
var PROVIDER_HEADERS = {
|
|
74
|
+
e2b: {
|
|
75
|
+
apiKey: "X-E2B-API-Key"
|
|
76
|
+
},
|
|
77
|
+
modal: {
|
|
78
|
+
tokenId: "X-Modal-Token-Id",
|
|
79
|
+
tokenSecret: "X-Modal-Token-Secret"
|
|
80
|
+
},
|
|
81
|
+
railway: {
|
|
82
|
+
apiToken: "X-Railway-API-Token"
|
|
83
|
+
},
|
|
84
|
+
daytona: {
|
|
85
|
+
apiKey: "X-Daytona-API-Key"
|
|
86
|
+
},
|
|
87
|
+
vercel: {
|
|
88
|
+
oidcToken: "X-Vercel-OIDC-Token",
|
|
89
|
+
token: "X-Vercel-Token",
|
|
90
|
+
teamId: "X-Vercel-Team-Id",
|
|
91
|
+
projectId: "X-Vercel-Project-Id"
|
|
92
|
+
},
|
|
93
|
+
runloop: {
|
|
94
|
+
apiKey: "X-Runloop-API-Key"
|
|
95
|
+
},
|
|
96
|
+
cloudflare: {
|
|
97
|
+
apiToken: "X-Cloudflare-API-Token",
|
|
98
|
+
accountId: "X-Cloudflare-Account-Id"
|
|
99
|
+
},
|
|
100
|
+
codesandbox: {
|
|
101
|
+
apiKey: "X-CSB-API-Key"
|
|
102
|
+
},
|
|
103
|
+
blaxel: {
|
|
104
|
+
apiKey: "X-BL-API-Key",
|
|
105
|
+
workspace: "X-BL-Workspace"
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
var PROVIDER_ENV_MAP = {
|
|
109
|
+
e2b: {
|
|
110
|
+
E2B_API_KEY: "apiKey"
|
|
111
|
+
},
|
|
112
|
+
modal: {
|
|
113
|
+
MODAL_TOKEN_ID: "tokenId",
|
|
114
|
+
MODAL_TOKEN_SECRET: "tokenSecret"
|
|
115
|
+
},
|
|
116
|
+
railway: {
|
|
117
|
+
RAILWAY_API_KEY: "apiToken",
|
|
118
|
+
RAILWAY_PROJECT_ID: "projectId",
|
|
119
|
+
RAILWAY_ENVIRONMENT_ID: "environmentId"
|
|
120
|
+
},
|
|
121
|
+
daytona: {
|
|
122
|
+
DAYTONA_API_KEY: "apiKey"
|
|
123
|
+
},
|
|
124
|
+
vercel: {
|
|
125
|
+
VERCEL_OIDC_TOKEN: "oidcToken",
|
|
126
|
+
VERCEL_TOKEN: "token",
|
|
127
|
+
VERCEL_TEAM_ID: "teamId",
|
|
128
|
+
VERCEL_PROJECT_ID: "projectId"
|
|
129
|
+
},
|
|
130
|
+
runloop: {
|
|
131
|
+
RUNLOOP_API_KEY: "apiKey"
|
|
132
|
+
},
|
|
133
|
+
cloudflare: {
|
|
134
|
+
CLOUDFLARE_API_TOKEN: "apiToken",
|
|
135
|
+
CLOUDFLARE_ACCOUNT_ID: "accountId"
|
|
136
|
+
},
|
|
137
|
+
codesandbox: {
|
|
138
|
+
CSB_API_KEY: "apiKey"
|
|
139
|
+
},
|
|
140
|
+
blaxel: {
|
|
141
|
+
BL_API_KEY: "apiKey",
|
|
142
|
+
BL_WORKSPACE: "workspace"
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
var PROVIDER_DASHBOARD_URLS = {
|
|
146
|
+
e2b: "https://e2b.dev/dashboard",
|
|
147
|
+
modal: "https://modal.com/settings",
|
|
148
|
+
railway: "https://railway.app/account/tokens",
|
|
149
|
+
daytona: "https://daytona.io/dashboard",
|
|
150
|
+
vercel: "https://vercel.com/account/tokens",
|
|
151
|
+
runloop: "https://runloop.ai/dashboard",
|
|
152
|
+
cloudflare: "https://dash.cloudflare.com/profile/api-tokens",
|
|
153
|
+
codesandbox: "https://codesandbox.io/dashboard/settings",
|
|
154
|
+
blaxel: "https://blaxel.ai/dashboard"
|
|
155
|
+
};
|
|
156
|
+
function isValidProvider(name) {
|
|
157
|
+
return name in PROVIDER_AUTH;
|
|
158
|
+
}
|
|
159
|
+
function buildProviderHeaders(provider, config) {
|
|
160
|
+
const headers = {};
|
|
161
|
+
const headerMap = PROVIDER_HEADERS[provider];
|
|
162
|
+
for (const [configKey, headerName] of Object.entries(headerMap)) {
|
|
163
|
+
const value = config[configKey];
|
|
164
|
+
if (value) {
|
|
165
|
+
headers[headerName] = value;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return headers;
|
|
169
|
+
}
|
|
170
|
+
function getProviderConfigFromEnv(provider) {
|
|
171
|
+
const config = {};
|
|
172
|
+
const envMap = PROVIDER_ENV_MAP[provider];
|
|
173
|
+
for (const [envVar, configKey] of Object.entries(envMap)) {
|
|
174
|
+
const value = process.env[envVar];
|
|
175
|
+
if (value) {
|
|
176
|
+
config[configKey] = value;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return config;
|
|
180
|
+
}
|
|
181
|
+
function isProviderAuthComplete(provider) {
|
|
182
|
+
const authOptions = PROVIDER_AUTH[provider];
|
|
183
|
+
for (const option of authOptions) {
|
|
184
|
+
const allPresent = option.every((envVar) => !!process.env[envVar]);
|
|
185
|
+
if (allPresent) return true;
|
|
186
|
+
}
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
function getMissingEnvVars(provider) {
|
|
190
|
+
const authOptions = PROVIDER_AUTH[provider];
|
|
191
|
+
let bestOption = null;
|
|
192
|
+
for (const option of authOptions) {
|
|
193
|
+
const missing = [];
|
|
194
|
+
let presentCount = 0;
|
|
195
|
+
for (const envVar of option) {
|
|
196
|
+
if (process.env[envVar]) {
|
|
197
|
+
presentCount++;
|
|
198
|
+
} else {
|
|
199
|
+
missing.push(envVar);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (missing.length === 0) return [];
|
|
203
|
+
if (!bestOption || presentCount > bestOption.presentCount) {
|
|
204
|
+
bestOption = { presentCount, missing };
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return bestOption?.missing ?? [];
|
|
208
|
+
}
|
|
209
|
+
|
|
46
210
|
// src/constants.ts
|
|
47
211
|
var GATEWAY_URL = "https://gateway.computesdk.com";
|
|
48
212
|
var PROVIDER_PRIORITY = [
|
|
@@ -487,7 +651,7 @@ var gateway = createProvider({
|
|
|
487
651
|
sandbox: {
|
|
488
652
|
create: async (config, options) => {
|
|
489
653
|
const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;
|
|
490
|
-
const result = await gatewayFetch(`${gatewayUrl}/sandbox`, config, {
|
|
654
|
+
const result = await gatewayFetch(`${gatewayUrl}/v1/sandbox`, config, {
|
|
491
655
|
method: "POST",
|
|
492
656
|
body: JSON.stringify(options || {})
|
|
493
657
|
});
|
|
@@ -524,7 +688,7 @@ var gateway = createProvider({
|
|
|
524
688
|
},
|
|
525
689
|
getById: async (config, sandboxId) => {
|
|
526
690
|
const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;
|
|
527
|
-
const result = await gatewayFetch(`${gatewayUrl}/sandbox/${sandboxId}`, config);
|
|
691
|
+
const result = await gatewayFetch(`${gatewayUrl}/v1/sandbox/${sandboxId}`, config);
|
|
528
692
|
if (!result.success || !result.data) {
|
|
529
693
|
return null;
|
|
530
694
|
}
|
|
@@ -554,7 +718,7 @@ var gateway = createProvider({
|
|
|
554
718
|
},
|
|
555
719
|
destroy: async (config, sandboxId) => {
|
|
556
720
|
const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;
|
|
557
|
-
await gatewayFetch(`${gatewayUrl}/sandbox/${sandboxId}`, config, {
|
|
721
|
+
await gatewayFetch(`${gatewayUrl}/v1/sandbox/${sandboxId}`, config, {
|
|
558
722
|
method: "DELETE"
|
|
559
723
|
});
|
|
560
724
|
},
|
|
@@ -772,6 +936,82 @@ Check your COMPUTESDK_GATEWAY_URL environment variable.`
|
|
|
772
936
|
});
|
|
773
937
|
}
|
|
774
938
|
|
|
939
|
+
// src/explicit-config.ts
|
|
940
|
+
function buildProviderHeaders2(config) {
|
|
941
|
+
const headers = {};
|
|
942
|
+
const provider = config.provider;
|
|
943
|
+
const headerMap = PROVIDER_HEADERS[provider];
|
|
944
|
+
const providerConfig = config[provider];
|
|
945
|
+
if (!providerConfig || !headerMap) return headers;
|
|
946
|
+
for (const [configKey, headerName] of Object.entries(headerMap)) {
|
|
947
|
+
const value = providerConfig[configKey];
|
|
948
|
+
if (value) {
|
|
949
|
+
headers[headerName] = value;
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
return headers;
|
|
953
|
+
}
|
|
954
|
+
function validateProviderConfig(config) {
|
|
955
|
+
const provider = config.provider;
|
|
956
|
+
const authOptions = PROVIDER_AUTH[provider];
|
|
957
|
+
const providerConfig = config[provider];
|
|
958
|
+
const dashboardUrl = PROVIDER_DASHBOARD_URLS[provider];
|
|
959
|
+
if (!authOptions) {
|
|
960
|
+
throw new Error(`Unknown provider: ${provider}`);
|
|
961
|
+
}
|
|
962
|
+
for (const option of authOptions) {
|
|
963
|
+
const allPresent = option.every((envVar) => {
|
|
964
|
+
const configField = envVarToConfigField(provider, envVar);
|
|
965
|
+
return providerConfig?.[configField];
|
|
966
|
+
});
|
|
967
|
+
if (allPresent) return;
|
|
968
|
+
}
|
|
969
|
+
const configExample = buildConfigExample(provider, authOptions);
|
|
970
|
+
throw new Error(
|
|
971
|
+
`Missing ${provider} configuration. When using provider: '${provider}', you must provide:
|
|
972
|
+
${configExample}
|
|
973
|
+
|
|
974
|
+
Get your credentials at: ${dashboardUrl}`
|
|
975
|
+
);
|
|
976
|
+
}
|
|
977
|
+
function envVarToConfigField(provider, envVar) {
|
|
978
|
+
return PROVIDER_ENV_MAP[provider]?.[envVar] ?? envVar.toLowerCase();
|
|
979
|
+
}
|
|
980
|
+
function buildConfigExample(provider, authOptions) {
|
|
981
|
+
if (authOptions.length === 1) {
|
|
982
|
+
const fields = authOptions[0].map((envVar) => {
|
|
983
|
+
const field = envVarToConfigField(provider, envVar);
|
|
984
|
+
return `${field}: '...'`;
|
|
985
|
+
});
|
|
986
|
+
return ` ${provider}: { ${fields.join(", ")} }`;
|
|
987
|
+
}
|
|
988
|
+
const options = authOptions.map((option, i) => {
|
|
989
|
+
const fields = option.map((envVar) => {
|
|
990
|
+
const field = envVarToConfigField(provider, envVar);
|
|
991
|
+
return `${field}: '...'`;
|
|
992
|
+
});
|
|
993
|
+
return ` Option ${i + 1}:
|
|
994
|
+
${provider}: { ${fields.join(", ")} }`;
|
|
995
|
+
});
|
|
996
|
+
return options.join("\n\n");
|
|
997
|
+
}
|
|
998
|
+
function createProviderFromConfig(config) {
|
|
999
|
+
if (!config.apiKey) {
|
|
1000
|
+
throw new Error(
|
|
1001
|
+
`Missing ComputeSDK API key. The 'apiKey' field is required.
|
|
1002
|
+
|
|
1003
|
+
Get your API key at: https://computesdk.com/dashboard`
|
|
1004
|
+
);
|
|
1005
|
+
}
|
|
1006
|
+
validateProviderConfig(config);
|
|
1007
|
+
const providerHeaders = buildProviderHeaders2(config);
|
|
1008
|
+
return gateway({
|
|
1009
|
+
apiKey: config.apiKey,
|
|
1010
|
+
provider: config.provider,
|
|
1011
|
+
providerHeaders
|
|
1012
|
+
});
|
|
1013
|
+
}
|
|
1014
|
+
|
|
775
1015
|
// src/compute.ts
|
|
776
1016
|
var ComputeManager = class {
|
|
777
1017
|
constructor() {
|
|
@@ -895,7 +1135,27 @@ var ComputeManager = class {
|
|
|
895
1135
|
return provider;
|
|
896
1136
|
}
|
|
897
1137
|
};
|
|
898
|
-
var
|
|
1138
|
+
var singletonInstance = new ComputeManager();
|
|
1139
|
+
function computeFactory(config) {
|
|
1140
|
+
const provider = createProviderFromConfig(config);
|
|
1141
|
+
return createCompute({ provider });
|
|
1142
|
+
}
|
|
1143
|
+
var compute = new Proxy(
|
|
1144
|
+
computeFactory,
|
|
1145
|
+
{
|
|
1146
|
+
get(_target, prop, _receiver) {
|
|
1147
|
+
const singleton = singletonInstance;
|
|
1148
|
+
const value = singleton[prop];
|
|
1149
|
+
if (typeof value === "function") {
|
|
1150
|
+
return value.bind(singletonInstance);
|
|
1151
|
+
}
|
|
1152
|
+
return value;
|
|
1153
|
+
},
|
|
1154
|
+
apply(_target, _thisArg, args) {
|
|
1155
|
+
return computeFactory(args[0]);
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
1158
|
+
);
|
|
899
1159
|
function createCompute(config) {
|
|
900
1160
|
const manager = new ComputeManager();
|
|
901
1161
|
if (!config) {
|
|
@@ -1135,19 +1395,30 @@ async function handleComputeRequest(paramsOrRequestOrBody, provider) {
|
|
|
1135
1395
|
0 && (module.exports = {
|
|
1136
1396
|
CommandExitError,
|
|
1137
1397
|
GATEWAY_URL,
|
|
1398
|
+
PROVIDER_AUTH,
|
|
1399
|
+
PROVIDER_DASHBOARD_URLS,
|
|
1400
|
+
PROVIDER_ENV_MAP,
|
|
1138
1401
|
PROVIDER_ENV_VARS,
|
|
1402
|
+
PROVIDER_HEADERS,
|
|
1403
|
+
PROVIDER_NAMES,
|
|
1139
1404
|
PROVIDER_PRIORITY,
|
|
1140
1405
|
Sandbox,
|
|
1141
1406
|
autoConfigureCompute,
|
|
1407
|
+
buildProviderHeaders,
|
|
1142
1408
|
calculateBackoff,
|
|
1143
1409
|
compute,
|
|
1144
1410
|
createCompute,
|
|
1145
1411
|
createProvider,
|
|
1412
|
+
createProviderFromConfig,
|
|
1146
1413
|
detectProvider,
|
|
1147
1414
|
gateway,
|
|
1415
|
+
getMissingEnvVars,
|
|
1416
|
+
getProviderConfigFromEnv,
|
|
1148
1417
|
getProviderHeaders,
|
|
1149
1418
|
handleComputeRequest,
|
|
1150
1419
|
isCommandExitError,
|
|
1151
|
-
isGatewayModeEnabled
|
|
1420
|
+
isGatewayModeEnabled,
|
|
1421
|
+
isProviderAuthComplete,
|
|
1422
|
+
isValidProvider
|
|
1152
1423
|
});
|
|
1153
1424
|
//# sourceMappingURL=index.js.map
|