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.mjs
CHANGED
|
@@ -5,6 +5,159 @@ import {
|
|
|
5
5
|
isCommandExitError
|
|
6
6
|
} from "@computesdk/client";
|
|
7
7
|
|
|
8
|
+
// src/provider-config.ts
|
|
9
|
+
var PROVIDER_AUTH = {
|
|
10
|
+
e2b: [["E2B_API_KEY"]],
|
|
11
|
+
modal: [["MODAL_TOKEN_ID", "MODAL_TOKEN_SECRET"]],
|
|
12
|
+
railway: [["RAILWAY_API_KEY", "RAILWAY_PROJECT_ID", "RAILWAY_ENVIRONMENT_ID"]],
|
|
13
|
+
daytona: [["DAYTONA_API_KEY"]],
|
|
14
|
+
vercel: [
|
|
15
|
+
["VERCEL_OIDC_TOKEN"],
|
|
16
|
+
["VERCEL_TOKEN", "VERCEL_TEAM_ID", "VERCEL_PROJECT_ID"]
|
|
17
|
+
],
|
|
18
|
+
runloop: [["RUNLOOP_API_KEY"]],
|
|
19
|
+
cloudflare: [["CLOUDFLARE_API_TOKEN", "CLOUDFLARE_ACCOUNT_ID"]],
|
|
20
|
+
codesandbox: [["CSB_API_KEY"]],
|
|
21
|
+
blaxel: [["BL_API_KEY", "BL_WORKSPACE"]]
|
|
22
|
+
};
|
|
23
|
+
var PROVIDER_NAMES = Object.keys(PROVIDER_AUTH);
|
|
24
|
+
var PROVIDER_HEADERS = {
|
|
25
|
+
e2b: {
|
|
26
|
+
apiKey: "X-E2B-API-Key"
|
|
27
|
+
},
|
|
28
|
+
modal: {
|
|
29
|
+
tokenId: "X-Modal-Token-Id",
|
|
30
|
+
tokenSecret: "X-Modal-Token-Secret"
|
|
31
|
+
},
|
|
32
|
+
railway: {
|
|
33
|
+
apiToken: "X-Railway-API-Token"
|
|
34
|
+
},
|
|
35
|
+
daytona: {
|
|
36
|
+
apiKey: "X-Daytona-API-Key"
|
|
37
|
+
},
|
|
38
|
+
vercel: {
|
|
39
|
+
oidcToken: "X-Vercel-OIDC-Token",
|
|
40
|
+
token: "X-Vercel-Token",
|
|
41
|
+
teamId: "X-Vercel-Team-Id",
|
|
42
|
+
projectId: "X-Vercel-Project-Id"
|
|
43
|
+
},
|
|
44
|
+
runloop: {
|
|
45
|
+
apiKey: "X-Runloop-API-Key"
|
|
46
|
+
},
|
|
47
|
+
cloudflare: {
|
|
48
|
+
apiToken: "X-Cloudflare-API-Token",
|
|
49
|
+
accountId: "X-Cloudflare-Account-Id"
|
|
50
|
+
},
|
|
51
|
+
codesandbox: {
|
|
52
|
+
apiKey: "X-CSB-API-Key"
|
|
53
|
+
},
|
|
54
|
+
blaxel: {
|
|
55
|
+
apiKey: "X-BL-API-Key",
|
|
56
|
+
workspace: "X-BL-Workspace"
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
var PROVIDER_ENV_MAP = {
|
|
60
|
+
e2b: {
|
|
61
|
+
E2B_API_KEY: "apiKey"
|
|
62
|
+
},
|
|
63
|
+
modal: {
|
|
64
|
+
MODAL_TOKEN_ID: "tokenId",
|
|
65
|
+
MODAL_TOKEN_SECRET: "tokenSecret"
|
|
66
|
+
},
|
|
67
|
+
railway: {
|
|
68
|
+
RAILWAY_API_KEY: "apiToken",
|
|
69
|
+
RAILWAY_PROJECT_ID: "projectId",
|
|
70
|
+
RAILWAY_ENVIRONMENT_ID: "environmentId"
|
|
71
|
+
},
|
|
72
|
+
daytona: {
|
|
73
|
+
DAYTONA_API_KEY: "apiKey"
|
|
74
|
+
},
|
|
75
|
+
vercel: {
|
|
76
|
+
VERCEL_OIDC_TOKEN: "oidcToken",
|
|
77
|
+
VERCEL_TOKEN: "token",
|
|
78
|
+
VERCEL_TEAM_ID: "teamId",
|
|
79
|
+
VERCEL_PROJECT_ID: "projectId"
|
|
80
|
+
},
|
|
81
|
+
runloop: {
|
|
82
|
+
RUNLOOP_API_KEY: "apiKey"
|
|
83
|
+
},
|
|
84
|
+
cloudflare: {
|
|
85
|
+
CLOUDFLARE_API_TOKEN: "apiToken",
|
|
86
|
+
CLOUDFLARE_ACCOUNT_ID: "accountId"
|
|
87
|
+
},
|
|
88
|
+
codesandbox: {
|
|
89
|
+
CSB_API_KEY: "apiKey"
|
|
90
|
+
},
|
|
91
|
+
blaxel: {
|
|
92
|
+
BL_API_KEY: "apiKey",
|
|
93
|
+
BL_WORKSPACE: "workspace"
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
var PROVIDER_DASHBOARD_URLS = {
|
|
97
|
+
e2b: "https://e2b.dev/dashboard",
|
|
98
|
+
modal: "https://modal.com/settings",
|
|
99
|
+
railway: "https://railway.app/account/tokens",
|
|
100
|
+
daytona: "https://daytona.io/dashboard",
|
|
101
|
+
vercel: "https://vercel.com/account/tokens",
|
|
102
|
+
runloop: "https://runloop.ai/dashboard",
|
|
103
|
+
cloudflare: "https://dash.cloudflare.com/profile/api-tokens",
|
|
104
|
+
codesandbox: "https://codesandbox.io/dashboard/settings",
|
|
105
|
+
blaxel: "https://blaxel.ai/dashboard"
|
|
106
|
+
};
|
|
107
|
+
function isValidProvider(name) {
|
|
108
|
+
return name in PROVIDER_AUTH;
|
|
109
|
+
}
|
|
110
|
+
function buildProviderHeaders(provider, config) {
|
|
111
|
+
const headers = {};
|
|
112
|
+
const headerMap = PROVIDER_HEADERS[provider];
|
|
113
|
+
for (const [configKey, headerName] of Object.entries(headerMap)) {
|
|
114
|
+
const value = config[configKey];
|
|
115
|
+
if (value) {
|
|
116
|
+
headers[headerName] = value;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return headers;
|
|
120
|
+
}
|
|
121
|
+
function getProviderConfigFromEnv(provider) {
|
|
122
|
+
const config = {};
|
|
123
|
+
const envMap = PROVIDER_ENV_MAP[provider];
|
|
124
|
+
for (const [envVar, configKey] of Object.entries(envMap)) {
|
|
125
|
+
const value = process.env[envVar];
|
|
126
|
+
if (value) {
|
|
127
|
+
config[configKey] = value;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return config;
|
|
131
|
+
}
|
|
132
|
+
function isProviderAuthComplete(provider) {
|
|
133
|
+
const authOptions = PROVIDER_AUTH[provider];
|
|
134
|
+
for (const option of authOptions) {
|
|
135
|
+
const allPresent = option.every((envVar) => !!process.env[envVar]);
|
|
136
|
+
if (allPresent) return true;
|
|
137
|
+
}
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
function getMissingEnvVars(provider) {
|
|
141
|
+
const authOptions = PROVIDER_AUTH[provider];
|
|
142
|
+
let bestOption = null;
|
|
143
|
+
for (const option of authOptions) {
|
|
144
|
+
const missing = [];
|
|
145
|
+
let presentCount = 0;
|
|
146
|
+
for (const envVar of option) {
|
|
147
|
+
if (process.env[envVar]) {
|
|
148
|
+
presentCount++;
|
|
149
|
+
} else {
|
|
150
|
+
missing.push(envVar);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (missing.length === 0) return [];
|
|
154
|
+
if (!bestOption || presentCount > bestOption.presentCount) {
|
|
155
|
+
bestOption = { presentCount, missing };
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return bestOption?.missing ?? [];
|
|
159
|
+
}
|
|
160
|
+
|
|
8
161
|
// src/constants.ts
|
|
9
162
|
var GATEWAY_URL = "https://gateway.computesdk.com";
|
|
10
163
|
var PROVIDER_PRIORITY = [
|
|
@@ -449,7 +602,7 @@ var gateway = createProvider({
|
|
|
449
602
|
sandbox: {
|
|
450
603
|
create: async (config, options) => {
|
|
451
604
|
const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;
|
|
452
|
-
const result = await gatewayFetch(`${gatewayUrl}/sandbox`, config, {
|
|
605
|
+
const result = await gatewayFetch(`${gatewayUrl}/v1/sandbox`, config, {
|
|
453
606
|
method: "POST",
|
|
454
607
|
body: JSON.stringify(options || {})
|
|
455
608
|
});
|
|
@@ -486,7 +639,7 @@ var gateway = createProvider({
|
|
|
486
639
|
},
|
|
487
640
|
getById: async (config, sandboxId) => {
|
|
488
641
|
const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;
|
|
489
|
-
const result = await gatewayFetch(`${gatewayUrl}/sandbox/${sandboxId}`, config);
|
|
642
|
+
const result = await gatewayFetch(`${gatewayUrl}/v1/sandbox/${sandboxId}`, config);
|
|
490
643
|
if (!result.success || !result.data) {
|
|
491
644
|
return null;
|
|
492
645
|
}
|
|
@@ -516,7 +669,7 @@ var gateway = createProvider({
|
|
|
516
669
|
},
|
|
517
670
|
destroy: async (config, sandboxId) => {
|
|
518
671
|
const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;
|
|
519
|
-
await gatewayFetch(`${gatewayUrl}/sandbox/${sandboxId}`, config, {
|
|
672
|
+
await gatewayFetch(`${gatewayUrl}/v1/sandbox/${sandboxId}`, config, {
|
|
520
673
|
method: "DELETE"
|
|
521
674
|
});
|
|
522
675
|
},
|
|
@@ -734,6 +887,82 @@ Check your COMPUTESDK_GATEWAY_URL environment variable.`
|
|
|
734
887
|
});
|
|
735
888
|
}
|
|
736
889
|
|
|
890
|
+
// src/explicit-config.ts
|
|
891
|
+
function buildProviderHeaders2(config) {
|
|
892
|
+
const headers = {};
|
|
893
|
+
const provider = config.provider;
|
|
894
|
+
const headerMap = PROVIDER_HEADERS[provider];
|
|
895
|
+
const providerConfig = config[provider];
|
|
896
|
+
if (!providerConfig || !headerMap) return headers;
|
|
897
|
+
for (const [configKey, headerName] of Object.entries(headerMap)) {
|
|
898
|
+
const value = providerConfig[configKey];
|
|
899
|
+
if (value) {
|
|
900
|
+
headers[headerName] = value;
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
return headers;
|
|
904
|
+
}
|
|
905
|
+
function validateProviderConfig(config) {
|
|
906
|
+
const provider = config.provider;
|
|
907
|
+
const authOptions = PROVIDER_AUTH[provider];
|
|
908
|
+
const providerConfig = config[provider];
|
|
909
|
+
const dashboardUrl = PROVIDER_DASHBOARD_URLS[provider];
|
|
910
|
+
if (!authOptions) {
|
|
911
|
+
throw new Error(`Unknown provider: ${provider}`);
|
|
912
|
+
}
|
|
913
|
+
for (const option of authOptions) {
|
|
914
|
+
const allPresent = option.every((envVar) => {
|
|
915
|
+
const configField = envVarToConfigField(provider, envVar);
|
|
916
|
+
return providerConfig?.[configField];
|
|
917
|
+
});
|
|
918
|
+
if (allPresent) return;
|
|
919
|
+
}
|
|
920
|
+
const configExample = buildConfigExample(provider, authOptions);
|
|
921
|
+
throw new Error(
|
|
922
|
+
`Missing ${provider} configuration. When using provider: '${provider}', you must provide:
|
|
923
|
+
${configExample}
|
|
924
|
+
|
|
925
|
+
Get your credentials at: ${dashboardUrl}`
|
|
926
|
+
);
|
|
927
|
+
}
|
|
928
|
+
function envVarToConfigField(provider, envVar) {
|
|
929
|
+
return PROVIDER_ENV_MAP[provider]?.[envVar] ?? envVar.toLowerCase();
|
|
930
|
+
}
|
|
931
|
+
function buildConfigExample(provider, authOptions) {
|
|
932
|
+
if (authOptions.length === 1) {
|
|
933
|
+
const fields = authOptions[0].map((envVar) => {
|
|
934
|
+
const field = envVarToConfigField(provider, envVar);
|
|
935
|
+
return `${field}: '...'`;
|
|
936
|
+
});
|
|
937
|
+
return ` ${provider}: { ${fields.join(", ")} }`;
|
|
938
|
+
}
|
|
939
|
+
const options = authOptions.map((option, i) => {
|
|
940
|
+
const fields = option.map((envVar) => {
|
|
941
|
+
const field = envVarToConfigField(provider, envVar);
|
|
942
|
+
return `${field}: '...'`;
|
|
943
|
+
});
|
|
944
|
+
return ` Option ${i + 1}:
|
|
945
|
+
${provider}: { ${fields.join(", ")} }`;
|
|
946
|
+
});
|
|
947
|
+
return options.join("\n\n");
|
|
948
|
+
}
|
|
949
|
+
function createProviderFromConfig(config) {
|
|
950
|
+
if (!config.apiKey) {
|
|
951
|
+
throw new Error(
|
|
952
|
+
`Missing ComputeSDK API key. The 'apiKey' field is required.
|
|
953
|
+
|
|
954
|
+
Get your API key at: https://computesdk.com/dashboard`
|
|
955
|
+
);
|
|
956
|
+
}
|
|
957
|
+
validateProviderConfig(config);
|
|
958
|
+
const providerHeaders = buildProviderHeaders2(config);
|
|
959
|
+
return gateway({
|
|
960
|
+
apiKey: config.apiKey,
|
|
961
|
+
provider: config.provider,
|
|
962
|
+
providerHeaders
|
|
963
|
+
});
|
|
964
|
+
}
|
|
965
|
+
|
|
737
966
|
// src/compute.ts
|
|
738
967
|
var ComputeManager = class {
|
|
739
968
|
constructor() {
|
|
@@ -857,7 +1086,27 @@ var ComputeManager = class {
|
|
|
857
1086
|
return provider;
|
|
858
1087
|
}
|
|
859
1088
|
};
|
|
860
|
-
var
|
|
1089
|
+
var singletonInstance = new ComputeManager();
|
|
1090
|
+
function computeFactory(config) {
|
|
1091
|
+
const provider = createProviderFromConfig(config);
|
|
1092
|
+
return createCompute({ provider });
|
|
1093
|
+
}
|
|
1094
|
+
var compute = new Proxy(
|
|
1095
|
+
computeFactory,
|
|
1096
|
+
{
|
|
1097
|
+
get(_target, prop, _receiver) {
|
|
1098
|
+
const singleton = singletonInstance;
|
|
1099
|
+
const value = singleton[prop];
|
|
1100
|
+
if (typeof value === "function") {
|
|
1101
|
+
return value.bind(singletonInstance);
|
|
1102
|
+
}
|
|
1103
|
+
return value;
|
|
1104
|
+
},
|
|
1105
|
+
apply(_target, _thisArg, args) {
|
|
1106
|
+
return computeFactory(args[0]);
|
|
1107
|
+
}
|
|
1108
|
+
}
|
|
1109
|
+
);
|
|
861
1110
|
function createCompute(config) {
|
|
862
1111
|
const manager = new ComputeManager();
|
|
863
1112
|
if (!config) {
|
|
@@ -1096,19 +1345,30 @@ async function handleComputeRequest(paramsOrRequestOrBody, provider) {
|
|
|
1096
1345
|
export {
|
|
1097
1346
|
CommandExitError,
|
|
1098
1347
|
GATEWAY_URL,
|
|
1348
|
+
PROVIDER_AUTH,
|
|
1349
|
+
PROVIDER_DASHBOARD_URLS,
|
|
1350
|
+
PROVIDER_ENV_MAP,
|
|
1099
1351
|
PROVIDER_ENV_VARS,
|
|
1352
|
+
PROVIDER_HEADERS,
|
|
1353
|
+
PROVIDER_NAMES,
|
|
1100
1354
|
PROVIDER_PRIORITY,
|
|
1101
1355
|
Sandbox,
|
|
1102
1356
|
autoConfigureCompute,
|
|
1357
|
+
buildProviderHeaders,
|
|
1103
1358
|
calculateBackoff,
|
|
1104
1359
|
compute,
|
|
1105
1360
|
createCompute,
|
|
1106
1361
|
createProvider,
|
|
1362
|
+
createProviderFromConfig,
|
|
1107
1363
|
detectProvider,
|
|
1108
1364
|
gateway,
|
|
1365
|
+
getMissingEnvVars,
|
|
1366
|
+
getProviderConfigFromEnv,
|
|
1109
1367
|
getProviderHeaders,
|
|
1110
1368
|
handleComputeRequest,
|
|
1111
1369
|
isCommandExitError,
|
|
1112
|
-
isGatewayModeEnabled
|
|
1370
|
+
isGatewayModeEnabled,
|
|
1371
|
+
isProviderAuthComplete,
|
|
1372
|
+
isValidProvider
|
|
1113
1373
|
};
|
|
1114
1374
|
//# sourceMappingURL=index.mjs.map
|