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.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 buildProviderHeaders(config) {
891
+ function buildProviderHeaders2(config) {
739
892
  const headers = {};
740
- switch (config.provider) {
741
- case "e2b":
742
- if (config.e2b?.apiKey) {
743
- headers["X-E2B-API-Key"] = config.e2b.apiKey;
744
- }
745
- break;
746
- case "modal":
747
- if (config.modal?.tokenId) {
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 providerName = config.provider;
768
- switch (providerName) {
769
- case "e2b":
770
- if (!config.e2b?.apiKey) {
771
- throw new Error(
772
- `Missing E2B configuration. When using provider: 'e2b', you must provide:
773
- e2b: { apiKey: 'your-e2b-api-key' }
774
-
775
- Get your API key at: https://e2b.dev/dashboard`
776
- );
777
- }
778
- break;
779
- case "modal":
780
- if (!config.modal?.tokenId || !config.modal?.tokenSecret) {
781
- throw new Error(
782
- `Missing Modal configuration. When using provider: 'modal', you must provide:
783
- modal: { tokenId: '...', tokenSecret: '...' }
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 token at: https://railway.app/account/tokens`
796
- );
797
- }
798
- break;
799
- default: {
800
- const exhaustiveCheck = providerName;
801
- throw new Error(`Unknown provider: ${exhaustiveCheck}`);
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 = buildProviderHeaders(config);
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