computesdk 1.9.5 → 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 +140 -9
- package/dist/index.d.ts +140 -9
- package/dist/index.js +225 -61
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +214 -60
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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 = [
|
|
@@ -735,72 +888,63 @@ Check your COMPUTESDK_GATEWAY_URL environment variable.`
|
|
|
735
888
|
}
|
|
736
889
|
|
|
737
890
|
// src/explicit-config.ts
|
|
738
|
-
function
|
|
891
|
+
function buildProviderHeaders2(config) {
|
|
739
892
|
const headers = {};
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
headers["X-Modal-Token-Id"] = config.modal.tokenId;
|
|
749
|
-
}
|
|
750
|
-
if (config.modal?.tokenSecret) {
|
|
751
|
-
headers["X-Modal-Token-Secret"] = config.modal.tokenSecret;
|
|
752
|
-
}
|
|
753
|
-
break;
|
|
754
|
-
case "railway":
|
|
755
|
-
if (config.railway?.apiToken) {
|
|
756
|
-
headers["X-Railway-API-Token"] = config.railway.apiToken;
|
|
757
|
-
}
|
|
758
|
-
break;
|
|
759
|
-
default: {
|
|
760
|
-
const exhaustiveCheck = config.provider;
|
|
761
|
-
throw new Error(`Unknown provider: ${exhaustiveCheck}`);
|
|
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;
|
|
762
901
|
}
|
|
763
902
|
}
|
|
764
903
|
return headers;
|
|
765
904
|
}
|
|
766
905
|
function validateProviderConfig(config) {
|
|
767
|
-
const
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
Get your tokens at: https://modal.com/settings`
|
|
786
|
-
);
|
|
787
|
-
}
|
|
788
|
-
break;
|
|
789
|
-
case "railway":
|
|
790
|
-
if (!config.railway?.apiToken) {
|
|
791
|
-
throw new Error(
|
|
792
|
-
`Missing Railway configuration. When using provider: 'railway', you must provide:
|
|
793
|
-
railway: { apiToken: 'your-railway-token' }
|
|
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}
|
|
794
924
|
|
|
795
|
-
Get your
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
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(", ")} }`;
|
|
803
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");
|
|
804
948
|
}
|
|
805
949
|
function createProviderFromConfig(config) {
|
|
806
950
|
if (!config.apiKey) {
|
|
@@ -811,7 +955,7 @@ Get your API key at: https://computesdk.com/dashboard`
|
|
|
811
955
|
);
|
|
812
956
|
}
|
|
813
957
|
validateProviderConfig(config);
|
|
814
|
-
const providerHeaders =
|
|
958
|
+
const providerHeaders = buildProviderHeaders2(config);
|
|
815
959
|
return gateway({
|
|
816
960
|
apiKey: config.apiKey,
|
|
817
961
|
provider: config.provider,
|
|
@@ -1201,10 +1345,16 @@ async function handleComputeRequest(paramsOrRequestOrBody, provider) {
|
|
|
1201
1345
|
export {
|
|
1202
1346
|
CommandExitError,
|
|
1203
1347
|
GATEWAY_URL,
|
|
1348
|
+
PROVIDER_AUTH,
|
|
1349
|
+
PROVIDER_DASHBOARD_URLS,
|
|
1350
|
+
PROVIDER_ENV_MAP,
|
|
1204
1351
|
PROVIDER_ENV_VARS,
|
|
1352
|
+
PROVIDER_HEADERS,
|
|
1353
|
+
PROVIDER_NAMES,
|
|
1205
1354
|
PROVIDER_PRIORITY,
|
|
1206
1355
|
Sandbox,
|
|
1207
1356
|
autoConfigureCompute,
|
|
1357
|
+
buildProviderHeaders,
|
|
1208
1358
|
calculateBackoff,
|
|
1209
1359
|
compute,
|
|
1210
1360
|
createCompute,
|
|
@@ -1212,9 +1362,13 @@ export {
|
|
|
1212
1362
|
createProviderFromConfig,
|
|
1213
1363
|
detectProvider,
|
|
1214
1364
|
gateway,
|
|
1365
|
+
getMissingEnvVars,
|
|
1366
|
+
getProviderConfigFromEnv,
|
|
1215
1367
|
getProviderHeaders,
|
|
1216
1368
|
handleComputeRequest,
|
|
1217
1369
|
isCommandExitError,
|
|
1218
|
-
isGatewayModeEnabled
|
|
1370
|
+
isGatewayModeEnabled,
|
|
1371
|
+
isProviderAuthComplete,
|
|
1372
|
+
isValidProvider
|
|
1219
1373
|
};
|
|
1220
1374
|
//# sourceMappingURL=index.mjs.map
|