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.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 compute = new ComputeManager();
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