@computesdk/namespace 1.1.33 → 1.2.0

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 CHANGED
@@ -1,16 +1,10 @@
1
- import * as _computesdk_provider from '@computesdk/provider';
1
+ import * as computesdk from 'computesdk';
2
+ import { ComputeConfig } from '@computesdk/provider';
2
3
 
3
4
  /**
4
- * Namespace Provider - Factory-based Implementation
5
+ * Namespace provider configuration
5
6
  */
6
- /**
7
- * Namespace sandbox interface
8
- */
9
- interface NamespaceSandbox {
10
- instanceId: string;
11
- name: string;
12
- }
13
- interface NamespaceConfig {
7
+ interface NamespaceConfig extends ComputeConfig {
14
8
  /** Namespace API token - if not provided, will fallback to NSC_TOKEN environment variable */
15
9
  token?: string;
16
10
  /** Virtual CPU cores for the instance */
@@ -26,13 +20,36 @@ interface NamespaceConfig {
26
20
  /** Reason for destroying instances (default: "ComputeSDK cleanup") */
27
21
  destroyReason?: string;
28
22
  }
29
- declare const getAndValidateCredentials: (config: NamespaceConfig) => {
30
- token: string;
31
- };
32
- declare const fetchNamespace: (token: string, endpoint: string, options?: RequestInit) => Promise<any>;
33
23
  /**
34
- * Create a Namespace provider instance using the factory pattern
24
+ * Namespace compute factory - creates configured compute instances
25
+ *
26
+ * Namespace is an infrastructure provider that becomes a full sandbox provider
27
+ * via the ComputeSDK gateway. The gateway provisions Namespace instances with the
28
+ * daemon pre-installed, enabling full sandbox capabilities.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * import { namespace } from '@computesdk/namespace';
33
+ *
34
+ * const compute = namespace({
35
+ * token: 'nsc_xxx'
36
+ * });
37
+ *
38
+ * // Full compute API available (routes through gateway)
39
+ * const sandbox = await compute.sandbox.create();
40
+ *
41
+ * // Execute code
42
+ * const result = await sandbox.runCode('console.log("Hello from Namespace!")');
43
+ * console.log(result.stdout);
44
+ *
45
+ * // Filesystem operations
46
+ * await sandbox.filesystem.writeFile('/tmp/test.txt', 'Hello!');
47
+ * const content = await sandbox.filesystem.readFile('/tmp/test.txt');
48
+ *
49
+ * // Cleanup
50
+ * await sandbox.destroy();
51
+ * ```
35
52
  */
36
- declare const namespace: (config: NamespaceConfig) => _computesdk_provider.Provider<NamespaceSandbox, any, any>;
53
+ declare const namespace: (config: NamespaceConfig) => computesdk.CallableCompute;
37
54
 
38
- export { type NamespaceConfig, fetchNamespace, getAndValidateCredentials, namespace };
55
+ export { type NamespaceConfig, namespace };
package/dist/index.d.ts CHANGED
@@ -1,16 +1,10 @@
1
- import * as _computesdk_provider from '@computesdk/provider';
1
+ import * as computesdk from 'computesdk';
2
+ import { ComputeConfig } from '@computesdk/provider';
2
3
 
3
4
  /**
4
- * Namespace Provider - Factory-based Implementation
5
+ * Namespace provider configuration
5
6
  */
6
- /**
7
- * Namespace sandbox interface
8
- */
9
- interface NamespaceSandbox {
10
- instanceId: string;
11
- name: string;
12
- }
13
- interface NamespaceConfig {
7
+ interface NamespaceConfig extends ComputeConfig {
14
8
  /** Namespace API token - if not provided, will fallback to NSC_TOKEN environment variable */
15
9
  token?: string;
16
10
  /** Virtual CPU cores for the instance */
@@ -26,13 +20,36 @@ interface NamespaceConfig {
26
20
  /** Reason for destroying instances (default: "ComputeSDK cleanup") */
27
21
  destroyReason?: string;
28
22
  }
29
- declare const getAndValidateCredentials: (config: NamespaceConfig) => {
30
- token: string;
31
- };
32
- declare const fetchNamespace: (token: string, endpoint: string, options?: RequestInit) => Promise<any>;
33
23
  /**
34
- * Create a Namespace provider instance using the factory pattern
24
+ * Namespace compute factory - creates configured compute instances
25
+ *
26
+ * Namespace is an infrastructure provider that becomes a full sandbox provider
27
+ * via the ComputeSDK gateway. The gateway provisions Namespace instances with the
28
+ * daemon pre-installed, enabling full sandbox capabilities.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * import { namespace } from '@computesdk/namespace';
33
+ *
34
+ * const compute = namespace({
35
+ * token: 'nsc_xxx'
36
+ * });
37
+ *
38
+ * // Full compute API available (routes through gateway)
39
+ * const sandbox = await compute.sandbox.create();
40
+ *
41
+ * // Execute code
42
+ * const result = await sandbox.runCode('console.log("Hello from Namespace!")');
43
+ * console.log(result.stdout);
44
+ *
45
+ * // Filesystem operations
46
+ * await sandbox.filesystem.writeFile('/tmp/test.txt', 'Hello!');
47
+ * const content = await sandbox.filesystem.readFile('/tmp/test.txt');
48
+ *
49
+ * // Cleanup
50
+ * await sandbox.destroy();
51
+ * ```
35
52
  */
36
- declare const namespace: (config: NamespaceConfig) => _computesdk_provider.Provider<NamespaceSandbox, any, any>;
53
+ declare const namespace: (config: NamespaceConfig) => computesdk.CallableCompute;
37
54
 
38
- export { type NamespaceConfig, fetchNamespace, getAndValidateCredentials, namespace };
55
+ export { type NamespaceConfig, namespace };
package/dist/index.js CHANGED
@@ -20,197 +20,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
- fetchNamespace: () => fetchNamespace,
24
- getAndValidateCredentials: () => getAndValidateCredentials,
25
23
  namespace: () => namespace
26
24
  });
27
25
  module.exports = __toCommonJS(index_exports);
28
26
  var import_provider = require("@computesdk/provider");
29
- var getAndValidateCredentials = (config) => {
30
- const token = config.token || typeof process !== "undefined" && process.env?.NSC_TOKEN || "";
31
- if (!token) {
32
- throw new Error(
33
- "Missing Namespace token. Provide token in config or set NSC_TOKEN environment variable."
34
- );
35
- }
36
- return { token };
37
- };
38
- var API_ENDPOINTS = {
39
- CREATE_INSTANCE: "/namespace.cloud.compute.v1beta.ComputeService/CreateInstance",
40
- DESCRIBE_INSTANCE: "/namespace.cloud.compute.v1beta.ComputeService/DescribeInstance",
41
- LIST_INSTANCES: "/namespace.cloud.compute.v1beta.ComputeService/ListInstances",
42
- DESTROY_INSTANCE: "/namespace.cloud.compute.v1beta.ComputeService/DestroyInstance"
43
- };
44
- var handleApiErrors = (response) => {
45
- if (response.error) {
46
- throw new Error(`Namespace API error: ${response.error}`);
47
- }
48
- };
49
- var fetchNamespace = async (token, endpoint, options = {}) => {
50
- const response = await fetch(`https://us.compute.namespaceapis.com${endpoint}`, {
51
- ...options,
52
- headers: {
53
- "Content-Type": "application/json",
54
- "Authorization": `Bearer ${token}`,
55
- ...options.headers
56
- }
57
- });
58
- if (!response.ok) {
59
- throw new Error(`Namespace API error: ${response.status} ${response.statusText}`);
60
- }
61
- const data = await response.json();
62
- handleApiErrors(data);
63
- return data;
64
- };
65
- var namespace = (0, import_provider.defineProvider)({
66
- name: "namespace",
67
- methods: {
68
- sandbox: {
69
- // Collection operations (compute.sandbox.*)
70
- create: async (config, options) => {
71
- const { token } = getAndValidateCredentials(config);
72
- try {
73
- const getImageRef = (runtime) => {
74
- return runtime === "node" ? "node:alpine" : "python:alpine";
75
- };
76
- const requestBody = {
77
- shape: {
78
- virtual_cpu: config.virtualCpu || 2,
79
- memory_megabytes: config.memoryMegabytes || 4096,
80
- machine_arch: config.machineArch || "amd64",
81
- os: config.os || "linux"
82
- },
83
- containers: [{
84
- name: "main-container",
85
- image_ref: getImageRef(options?.runtime),
86
- args: ["sleep", "300"]
87
- }],
88
- documented_purpose: config.documentedPurpose || "ComputeSDK sandbox"
89
- };
90
- const responseData = await fetchNamespace(token, API_ENDPOINTS.CREATE_INSTANCE, {
91
- method: "POST",
92
- body: JSON.stringify(requestBody)
93
- });
94
- if (!responseData.metadata?.instanceId) {
95
- throw new Error(`Instance ID is undefined. Full response object: ${JSON.stringify(responseData, null, 2)}`);
96
- }
97
- const instanceId = responseData.metadata.instanceId;
98
- const instanceName = `instance-${instanceId}`;
99
- const namespaceSandbox = {
100
- instanceId,
101
- name: instanceName
102
- };
103
- return {
104
- sandbox: namespaceSandbox,
105
- sandboxId: instanceId
106
- };
107
- } catch (error) {
108
- throw new Error(
109
- `Failed to create Namespace instance: ${error instanceof Error ? error.message : String(error)}`
110
- );
111
- }
112
- },
113
- getById: async (config, sandboxId) => {
114
- const { token } = getAndValidateCredentials(config);
115
- try {
116
- const requestBody = {
117
- instance_id: sandboxId
118
- };
119
- const responseData = await fetchNamespace(token, API_ENDPOINTS.DESCRIBE_INSTANCE, {
120
- method: "POST",
121
- body: JSON.stringify(requestBody)
122
- });
123
- if (!responseData.metadata?.instanceId) {
124
- throw new Error("Instance data is missing from Namespace response");
125
- }
126
- const instanceId = responseData.metadata.instanceId;
127
- const instanceName = `instance-${instanceId}`;
128
- const namespaceSandbox = {
129
- instanceId,
130
- name: instanceName
131
- };
132
- return {
133
- sandbox: namespaceSandbox,
134
- sandboxId: instanceId
135
- };
136
- } catch (error) {
137
- if (error instanceof Error && error.message.includes("404 Not Found")) {
138
- return null;
139
- }
140
- throw new Error(
141
- `Failed to get Namespace instance: ${error instanceof Error ? error.message : String(error)}`
142
- );
143
- }
144
- },
145
- list: async (config) => {
146
- const { token } = getAndValidateCredentials(config);
147
- try {
148
- const responseData = await fetchNamespace(token, API_ENDPOINTS.LIST_INSTANCES, {
149
- method: "POST",
150
- body: JSON.stringify({})
151
- });
152
- const instances = responseData?.instances || [];
153
- const namespaceSandboxes = instances.map((instanceData) => {
154
- const instanceId = instanceData.instanceId || instanceData.metadata?.instanceId;
155
- if (!instanceId) {
156
- console.warn("Instance missing instanceId:", instanceData);
157
- return null;
158
- }
159
- const instanceName = `instance-${instanceId}`;
160
- const namespaceSandbox = {
161
- instanceId,
162
- name: instanceName
163
- };
164
- return {
165
- sandbox: namespaceSandbox,
166
- sandboxId: instanceId
167
- };
168
- }).filter(Boolean);
169
- return namespaceSandboxes;
170
- } catch (error) {
171
- throw new Error(
172
- `Failed to list Namespace instances: ${error instanceof Error ? error.message : String(error)}`
173
- );
174
- }
175
- },
176
- destroy: async (config, sandboxId) => {
177
- const { token } = getAndValidateCredentials(config);
178
- try {
179
- const requestBody = {
180
- instance_id: sandboxId,
181
- reason: config.destroyReason || "ComputeSDK cleanup"
182
- };
183
- const data = await fetchNamespace(token, API_ENDPOINTS.DESTROY_INSTANCE, {
184
- method: "POST",
185
- body: JSON.stringify(requestBody)
186
- });
187
- if (data.error) {
188
- console.warn(`Namespace destroy warning: ${data.error}`);
189
- }
190
- } catch (error) {
191
- console.warn(`Namespace destroy warning: ${error instanceof Error ? error.message : String(error)}`);
192
- }
193
- },
194
- // Instance operations (minimal stubs - not implemented yet)
195
- runCode: async (_sandbox, _code, _runtime) => {
196
- throw new Error("Namespace runCode method not implemented yet");
197
- },
198
- runCommand: async (_sandbox, _command, _options) => {
199
- throw new Error("Namespace runCommand method not implemented yet");
200
- },
201
- getInfo: async (_sandbox) => {
202
- throw new Error("Namespace getInfo method not implemented yet");
203
- },
204
- getUrl: async (_sandbox, _options) => {
205
- throw new Error("Namespace getUrl method not implemented yet");
206
- }
207
- }
208
- }
27
+ var namespace = (0, import_provider.defineCompute)({
28
+ provider: "namespace"
209
29
  });
210
30
  // Annotate the CommonJS export names for ESM import in node:
211
31
  0 && (module.exports = {
212
- fetchNamespace,
213
- getAndValidateCredentials,
214
32
  namespace
215
33
  });
216
34
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Namespace Provider - Factory-based Implementation\n */\n\nimport { defineProvider } from '@computesdk/provider';\n\nimport type { Runtime, CodeResult, CommandResult, SandboxInfo, CreateSandboxOptions, FileEntry, RunCommandOptions } from '@computesdk/provider';\n\n/**\n * Namespace sandbox interface\n */\ninterface NamespaceSandbox {\n instanceId: string;\n name: string;\n}\n\nexport interface NamespaceConfig {\n /** Namespace API token - if not provided, will fallback to NSC_TOKEN environment variable */\n token?: string;\n /** Virtual CPU cores for the instance */\n virtualCpu?: number;\n /** Memory in megabytes for the instance */\n memoryMegabytes?: number;\n /** Machine architecture (default: amd64) */\n machineArch?: string;\n /** Operating system (default: linux) */\n os?: string;\n /** Documented purpose for the instance */\n documentedPurpose?: string;\n /** Reason for destroying instances (default: \"ComputeSDK cleanup\") */\n destroyReason?: string;\n}\n\nexport const getAndValidateCredentials = (config: NamespaceConfig) => {\n const token = config.token || (typeof process !== 'undefined' && process.env?.NSC_TOKEN) || '';\n\n if (!token) {\n throw new Error(\n 'Missing Namespace token. Provide token in config or set NSC_TOKEN environment variable.'\n );\n }\n\n return { token };\n};\n\nconst API_ENDPOINTS = {\n CREATE_INSTANCE: '/namespace.cloud.compute.v1beta.ComputeService/CreateInstance',\n DESCRIBE_INSTANCE: '/namespace.cloud.compute.v1beta.ComputeService/DescribeInstance',\n LIST_INSTANCES: '/namespace.cloud.compute.v1beta.ComputeService/ListInstances',\n DESTROY_INSTANCE: '/namespace.cloud.compute.v1beta.ComputeService/DestroyInstance'\n};\n\nconst handleApiErrors = (response: any) => {\n if (response.error) {\n throw new Error(`Namespace API error: ${response.error}`);\n }\n};\n\nexport const fetchNamespace = async (\n token: string, \n endpoint: string,\n options: RequestInit = {}\n) => {\n \n const response = await fetch(`https://us.compute.namespaceapis.com${endpoint}`, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${token}`,\n ...options.headers\n }\n });\n\n if (!response.ok) {\n throw new Error(`Namespace API error: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n\n // Standard error handling for all operations\n handleApiErrors(data);\n\n return data;\n};\n\n/**\n * Create a Namespace provider instance using the factory pattern\n */\nexport const namespace = defineProvider<NamespaceSandbox, NamespaceConfig>({\n name: 'namespace',\n methods: {\n sandbox: {\n // Collection operations (compute.sandbox.*)\n create: async (config: NamespaceConfig, options?: CreateSandboxOptions) => {\n const { token } = getAndValidateCredentials(config);\n\n try {\n // Get image based on runtime\n const getImageRef = (runtime?: Runtime) => {\n return runtime === 'node' ? 'node:alpine' : 'python:alpine';\n };\n\n const requestBody = {\n shape: {\n virtual_cpu: config.virtualCpu || 2,\n memory_megabytes: config.memoryMegabytes || 4096,\n machine_arch: config.machineArch || 'amd64',\n os: config.os || 'linux'\n },\n containers: [{\n name: 'main-container',\n image_ref: getImageRef(options?.runtime),\n args: ['sleep', '300']\n }],\n documented_purpose: config.documentedPurpose || 'ComputeSDK sandbox'\n };\n\n const responseData = await fetchNamespace(token, API_ENDPOINTS.CREATE_INSTANCE, {\n method: 'POST',\n body: JSON.stringify(requestBody)\n });\n \n // Extract instance ID from the Namespace API response structure\n if (!responseData.metadata?.instanceId) {\n throw new Error(`Instance ID is undefined. Full response object: ${JSON.stringify(responseData, null, 2)}`);\n }\n\n const instanceId = responseData.metadata.instanceId;\n const instanceName = `instance-${instanceId}`;\n\n const namespaceSandbox: NamespaceSandbox = {\n instanceId,\n name: instanceName,\n };\n\n return {\n sandbox: namespaceSandbox,\n sandboxId: instanceId\n };\n } catch (error) {\n throw new Error(\n `Failed to create Namespace instance: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n },\n\n getById: async (config: NamespaceConfig, sandboxId: string) => {\n const { token } = getAndValidateCredentials(config);\n\n try {\n const requestBody = {\n instance_id: sandboxId\n };\n\n const responseData = await fetchNamespace(token, API_ENDPOINTS.DESCRIBE_INSTANCE, {\n method: 'POST',\n body: JSON.stringify(requestBody)\n });\n \n // Extract instance ID from the Namespace API response structure\n if (!responseData.metadata?.instanceId) {\n throw new Error('Instance data is missing from Namespace response');\n }\n\n const instanceId = responseData.metadata.instanceId;\n const instanceName = `instance-${instanceId}`;\n\n const namespaceSandbox: NamespaceSandbox = {\n instanceId,\n name: instanceName,\n };\n\n return {\n sandbox: namespaceSandbox,\n sandboxId: instanceId\n };\n } catch (error) {\n // Handle 404 errors by returning null (instance not found)\n if (error instanceof Error && error.message.includes('404 Not Found')) {\n return null;\n }\n \n throw new Error(\n `Failed to get Namespace instance: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n },\n \n list: async (config: NamespaceConfig) => {\n const { token } = getAndValidateCredentials(config);\n\n try {\n const responseData = await fetchNamespace(token, API_ENDPOINTS.LIST_INSTANCES, {\n method: 'POST',\n body: JSON.stringify({})\n });\n \n // Extract instances from the response\n const instances = responseData?.instances || [];\n \n // Transform each instance into the expected format\n const namespaceSandboxes = instances.map((instanceData: any) => {\n // For list response, instanceId is directly in the instance object, not in metadata\n const instanceId = instanceData.instanceId || instanceData.metadata?.instanceId;\n if (!instanceId) {\n console.warn('Instance missing instanceId:', instanceData);\n return null;\n }\n \n const instanceName = `instance-${instanceId}`;\n\n const namespaceSandbox: NamespaceSandbox = {\n instanceId,\n name: instanceName,\n };\n\n return {\n sandbox: namespaceSandbox,\n sandboxId: instanceId\n };\n }).filter(Boolean); // Remove any null entries\n\n return namespaceSandboxes;\n } catch (error) {\n throw new Error(\n `Failed to list Namespace instances: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n },\n\n destroy: async (config: NamespaceConfig, sandboxId: string) => {\n const { token } = getAndValidateCredentials(config);\n\n try {\n const requestBody = {\n instance_id: sandboxId,\n reason: config.destroyReason || \"ComputeSDK cleanup\"\n };\n\n const data = await fetchNamespace(token, API_ENDPOINTS.DESTROY_INSTANCE, {\n method: 'POST',\n body: JSON.stringify(requestBody)\n });\n \n if (data.error) {\n // Log errors but don't throw for destroy operations\n console.warn(`Namespace destroy warning: ${data.error}`);\n }\n } catch (error) {\n // For destroy operations, we typically don't throw if the instance is already gone\n console.warn(`Namespace destroy warning: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n\n // Instance operations (minimal stubs - not implemented yet)\n runCode: async (_sandbox: NamespaceSandbox, _code: string, _runtime?: Runtime) => {\n throw new Error('Namespace runCode method not implemented yet');\n },\n\n runCommand: async (_sandbox: NamespaceSandbox, _command: string, _options?: RunCommandOptions) => {\n throw new Error('Namespace runCommand method not implemented yet');\n },\n\n getInfo: async (_sandbox: NamespaceSandbox) => {\n throw new Error('Namespace getInfo method not implemented yet');\n },\n\n getUrl: async (_sandbox: NamespaceSandbox, _options: { port: number; protocol?: string }) => {\n throw new Error('Namespace getUrl method not implemented yet');\n },\n\n },\n },\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Namespace Provider - Compute Factory\n *\n * Provides a first-class Namespace provider experience by routing all operations\n * through the ComputeSDK gateway. The gateway handles infrastructure provisioning\n * via @computesdk/gateway and installs the daemon for full sandbox capabilities.\n */\n\nimport { defineCompute, type ComputeConfig } from '@computesdk/provider';\n\n/**\n * Namespace provider configuration\n */\nexport interface NamespaceConfig extends ComputeConfig {\n /** Namespace API token - if not provided, will fallback to NSC_TOKEN environment variable */\n token?: string;\n /** Virtual CPU cores for the instance */\n virtualCpu?: number;\n /** Memory in megabytes for the instance */\n memoryMegabytes?: number;\n /** Machine architecture (default: amd64) */\n machineArch?: string;\n /** Operating system (default: linux) */\n os?: string;\n /** Documented purpose for the instance */\n documentedPurpose?: string;\n /** Reason for destroying instances (default: \"ComputeSDK cleanup\") */\n destroyReason?: string;\n}\n\n/**\n * Namespace compute factory - creates configured compute instances\n *\n * Namespace is an infrastructure provider that becomes a full sandbox provider\n * via the ComputeSDK gateway. The gateway provisions Namespace instances with the\n * daemon pre-installed, enabling full sandbox capabilities.\n *\n * @example\n * ```typescript\n * import { namespace } from '@computesdk/namespace';\n *\n * const compute = namespace({\n * token: 'nsc_xxx'\n * });\n *\n * // Full compute API available (routes through gateway)\n * const sandbox = await compute.sandbox.create();\n *\n * // Execute code\n * const result = await sandbox.runCode('console.log(\"Hello from Namespace!\")');\n * console.log(result.stdout);\n *\n * // Filesystem operations\n * await sandbox.filesystem.writeFile('/tmp/test.txt', 'Hello!');\n * const content = await sandbox.filesystem.readFile('/tmp/test.txt');\n *\n * // Cleanup\n * await sandbox.destroy();\n * ```\n */\nexport const namespace = defineCompute<NamespaceConfig>({\n provider: 'namespace'\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,sBAAkD;AAoD3C,IAAM,gBAAY,+BAA+B;AAAA,EACtD,UAAU;AACZ,CAAC;","names":[]}
package/dist/index.mjs CHANGED
@@ -1,189 +1,9 @@
1
1
  // src/index.ts
2
- import { defineProvider } from "@computesdk/provider";
3
- var getAndValidateCredentials = (config) => {
4
- const token = config.token || typeof process !== "undefined" && process.env?.NSC_TOKEN || "";
5
- if (!token) {
6
- throw new Error(
7
- "Missing Namespace token. Provide token in config or set NSC_TOKEN environment variable."
8
- );
9
- }
10
- return { token };
11
- };
12
- var API_ENDPOINTS = {
13
- CREATE_INSTANCE: "/namespace.cloud.compute.v1beta.ComputeService/CreateInstance",
14
- DESCRIBE_INSTANCE: "/namespace.cloud.compute.v1beta.ComputeService/DescribeInstance",
15
- LIST_INSTANCES: "/namespace.cloud.compute.v1beta.ComputeService/ListInstances",
16
- DESTROY_INSTANCE: "/namespace.cloud.compute.v1beta.ComputeService/DestroyInstance"
17
- };
18
- var handleApiErrors = (response) => {
19
- if (response.error) {
20
- throw new Error(`Namespace API error: ${response.error}`);
21
- }
22
- };
23
- var fetchNamespace = async (token, endpoint, options = {}) => {
24
- const response = await fetch(`https://us.compute.namespaceapis.com${endpoint}`, {
25
- ...options,
26
- headers: {
27
- "Content-Type": "application/json",
28
- "Authorization": `Bearer ${token}`,
29
- ...options.headers
30
- }
31
- });
32
- if (!response.ok) {
33
- throw new Error(`Namespace API error: ${response.status} ${response.statusText}`);
34
- }
35
- const data = await response.json();
36
- handleApiErrors(data);
37
- return data;
38
- };
39
- var namespace = defineProvider({
40
- name: "namespace",
41
- methods: {
42
- sandbox: {
43
- // Collection operations (compute.sandbox.*)
44
- create: async (config, options) => {
45
- const { token } = getAndValidateCredentials(config);
46
- try {
47
- const getImageRef = (runtime) => {
48
- return runtime === "node" ? "node:alpine" : "python:alpine";
49
- };
50
- const requestBody = {
51
- shape: {
52
- virtual_cpu: config.virtualCpu || 2,
53
- memory_megabytes: config.memoryMegabytes || 4096,
54
- machine_arch: config.machineArch || "amd64",
55
- os: config.os || "linux"
56
- },
57
- containers: [{
58
- name: "main-container",
59
- image_ref: getImageRef(options?.runtime),
60
- args: ["sleep", "300"]
61
- }],
62
- documented_purpose: config.documentedPurpose || "ComputeSDK sandbox"
63
- };
64
- const responseData = await fetchNamespace(token, API_ENDPOINTS.CREATE_INSTANCE, {
65
- method: "POST",
66
- body: JSON.stringify(requestBody)
67
- });
68
- if (!responseData.metadata?.instanceId) {
69
- throw new Error(`Instance ID is undefined. Full response object: ${JSON.stringify(responseData, null, 2)}`);
70
- }
71
- const instanceId = responseData.metadata.instanceId;
72
- const instanceName = `instance-${instanceId}`;
73
- const namespaceSandbox = {
74
- instanceId,
75
- name: instanceName
76
- };
77
- return {
78
- sandbox: namespaceSandbox,
79
- sandboxId: instanceId
80
- };
81
- } catch (error) {
82
- throw new Error(
83
- `Failed to create Namespace instance: ${error instanceof Error ? error.message : String(error)}`
84
- );
85
- }
86
- },
87
- getById: async (config, sandboxId) => {
88
- const { token } = getAndValidateCredentials(config);
89
- try {
90
- const requestBody = {
91
- instance_id: sandboxId
92
- };
93
- const responseData = await fetchNamespace(token, API_ENDPOINTS.DESCRIBE_INSTANCE, {
94
- method: "POST",
95
- body: JSON.stringify(requestBody)
96
- });
97
- if (!responseData.metadata?.instanceId) {
98
- throw new Error("Instance data is missing from Namespace response");
99
- }
100
- const instanceId = responseData.metadata.instanceId;
101
- const instanceName = `instance-${instanceId}`;
102
- const namespaceSandbox = {
103
- instanceId,
104
- name: instanceName
105
- };
106
- return {
107
- sandbox: namespaceSandbox,
108
- sandboxId: instanceId
109
- };
110
- } catch (error) {
111
- if (error instanceof Error && error.message.includes("404 Not Found")) {
112
- return null;
113
- }
114
- throw new Error(
115
- `Failed to get Namespace instance: ${error instanceof Error ? error.message : String(error)}`
116
- );
117
- }
118
- },
119
- list: async (config) => {
120
- const { token } = getAndValidateCredentials(config);
121
- try {
122
- const responseData = await fetchNamespace(token, API_ENDPOINTS.LIST_INSTANCES, {
123
- method: "POST",
124
- body: JSON.stringify({})
125
- });
126
- const instances = responseData?.instances || [];
127
- const namespaceSandboxes = instances.map((instanceData) => {
128
- const instanceId = instanceData.instanceId || instanceData.metadata?.instanceId;
129
- if (!instanceId) {
130
- console.warn("Instance missing instanceId:", instanceData);
131
- return null;
132
- }
133
- const instanceName = `instance-${instanceId}`;
134
- const namespaceSandbox = {
135
- instanceId,
136
- name: instanceName
137
- };
138
- return {
139
- sandbox: namespaceSandbox,
140
- sandboxId: instanceId
141
- };
142
- }).filter(Boolean);
143
- return namespaceSandboxes;
144
- } catch (error) {
145
- throw new Error(
146
- `Failed to list Namespace instances: ${error instanceof Error ? error.message : String(error)}`
147
- );
148
- }
149
- },
150
- destroy: async (config, sandboxId) => {
151
- const { token } = getAndValidateCredentials(config);
152
- try {
153
- const requestBody = {
154
- instance_id: sandboxId,
155
- reason: config.destroyReason || "ComputeSDK cleanup"
156
- };
157
- const data = await fetchNamespace(token, API_ENDPOINTS.DESTROY_INSTANCE, {
158
- method: "POST",
159
- body: JSON.stringify(requestBody)
160
- });
161
- if (data.error) {
162
- console.warn(`Namespace destroy warning: ${data.error}`);
163
- }
164
- } catch (error) {
165
- console.warn(`Namespace destroy warning: ${error instanceof Error ? error.message : String(error)}`);
166
- }
167
- },
168
- // Instance operations (minimal stubs - not implemented yet)
169
- runCode: async (_sandbox, _code, _runtime) => {
170
- throw new Error("Namespace runCode method not implemented yet");
171
- },
172
- runCommand: async (_sandbox, _command, _options) => {
173
- throw new Error("Namespace runCommand method not implemented yet");
174
- },
175
- getInfo: async (_sandbox) => {
176
- throw new Error("Namespace getInfo method not implemented yet");
177
- },
178
- getUrl: async (_sandbox, _options) => {
179
- throw new Error("Namespace getUrl method not implemented yet");
180
- }
181
- }
182
- }
2
+ import { defineCompute } from "@computesdk/provider";
3
+ var namespace = defineCompute({
4
+ provider: "namespace"
183
5
  });
184
6
  export {
185
- fetchNamespace,
186
- getAndValidateCredentials,
187
7
  namespace
188
8
  };
189
9
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Namespace Provider - Factory-based Implementation\n */\n\nimport { defineProvider } from '@computesdk/provider';\n\nimport type { Runtime, CodeResult, CommandResult, SandboxInfo, CreateSandboxOptions, FileEntry, RunCommandOptions } from '@computesdk/provider';\n\n/**\n * Namespace sandbox interface\n */\ninterface NamespaceSandbox {\n instanceId: string;\n name: string;\n}\n\nexport interface NamespaceConfig {\n /** Namespace API token - if not provided, will fallback to NSC_TOKEN environment variable */\n token?: string;\n /** Virtual CPU cores for the instance */\n virtualCpu?: number;\n /** Memory in megabytes for the instance */\n memoryMegabytes?: number;\n /** Machine architecture (default: amd64) */\n machineArch?: string;\n /** Operating system (default: linux) */\n os?: string;\n /** Documented purpose for the instance */\n documentedPurpose?: string;\n /** Reason for destroying instances (default: \"ComputeSDK cleanup\") */\n destroyReason?: string;\n}\n\nexport const getAndValidateCredentials = (config: NamespaceConfig) => {\n const token = config.token || (typeof process !== 'undefined' && process.env?.NSC_TOKEN) || '';\n\n if (!token) {\n throw new Error(\n 'Missing Namespace token. Provide token in config or set NSC_TOKEN environment variable.'\n );\n }\n\n return { token };\n};\n\nconst API_ENDPOINTS = {\n CREATE_INSTANCE: '/namespace.cloud.compute.v1beta.ComputeService/CreateInstance',\n DESCRIBE_INSTANCE: '/namespace.cloud.compute.v1beta.ComputeService/DescribeInstance',\n LIST_INSTANCES: '/namespace.cloud.compute.v1beta.ComputeService/ListInstances',\n DESTROY_INSTANCE: '/namespace.cloud.compute.v1beta.ComputeService/DestroyInstance'\n};\n\nconst handleApiErrors = (response: any) => {\n if (response.error) {\n throw new Error(`Namespace API error: ${response.error}`);\n }\n};\n\nexport const fetchNamespace = async (\n token: string, \n endpoint: string,\n options: RequestInit = {}\n) => {\n \n const response = await fetch(`https://us.compute.namespaceapis.com${endpoint}`, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${token}`,\n ...options.headers\n }\n });\n\n if (!response.ok) {\n throw new Error(`Namespace API error: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n\n // Standard error handling for all operations\n handleApiErrors(data);\n\n return data;\n};\n\n/**\n * Create a Namespace provider instance using the factory pattern\n */\nexport const namespace = defineProvider<NamespaceSandbox, NamespaceConfig>({\n name: 'namespace',\n methods: {\n sandbox: {\n // Collection operations (compute.sandbox.*)\n create: async (config: NamespaceConfig, options?: CreateSandboxOptions) => {\n const { token } = getAndValidateCredentials(config);\n\n try {\n // Get image based on runtime\n const getImageRef = (runtime?: Runtime) => {\n return runtime === 'node' ? 'node:alpine' : 'python:alpine';\n };\n\n const requestBody = {\n shape: {\n virtual_cpu: config.virtualCpu || 2,\n memory_megabytes: config.memoryMegabytes || 4096,\n machine_arch: config.machineArch || 'amd64',\n os: config.os || 'linux'\n },\n containers: [{\n name: 'main-container',\n image_ref: getImageRef(options?.runtime),\n args: ['sleep', '300']\n }],\n documented_purpose: config.documentedPurpose || 'ComputeSDK sandbox'\n };\n\n const responseData = await fetchNamespace(token, API_ENDPOINTS.CREATE_INSTANCE, {\n method: 'POST',\n body: JSON.stringify(requestBody)\n });\n \n // Extract instance ID from the Namespace API response structure\n if (!responseData.metadata?.instanceId) {\n throw new Error(`Instance ID is undefined. Full response object: ${JSON.stringify(responseData, null, 2)}`);\n }\n\n const instanceId = responseData.metadata.instanceId;\n const instanceName = `instance-${instanceId}`;\n\n const namespaceSandbox: NamespaceSandbox = {\n instanceId,\n name: instanceName,\n };\n\n return {\n sandbox: namespaceSandbox,\n sandboxId: instanceId\n };\n } catch (error) {\n throw new Error(\n `Failed to create Namespace instance: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n },\n\n getById: async (config: NamespaceConfig, sandboxId: string) => {\n const { token } = getAndValidateCredentials(config);\n\n try {\n const requestBody = {\n instance_id: sandboxId\n };\n\n const responseData = await fetchNamespace(token, API_ENDPOINTS.DESCRIBE_INSTANCE, {\n method: 'POST',\n body: JSON.stringify(requestBody)\n });\n \n // Extract instance ID from the Namespace API response structure\n if (!responseData.metadata?.instanceId) {\n throw new Error('Instance data is missing from Namespace response');\n }\n\n const instanceId = responseData.metadata.instanceId;\n const instanceName = `instance-${instanceId}`;\n\n const namespaceSandbox: NamespaceSandbox = {\n instanceId,\n name: instanceName,\n };\n\n return {\n sandbox: namespaceSandbox,\n sandboxId: instanceId\n };\n } catch (error) {\n // Handle 404 errors by returning null (instance not found)\n if (error instanceof Error && error.message.includes('404 Not Found')) {\n return null;\n }\n \n throw new Error(\n `Failed to get Namespace instance: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n },\n \n list: async (config: NamespaceConfig) => {\n const { token } = getAndValidateCredentials(config);\n\n try {\n const responseData = await fetchNamespace(token, API_ENDPOINTS.LIST_INSTANCES, {\n method: 'POST',\n body: JSON.stringify({})\n });\n \n // Extract instances from the response\n const instances = responseData?.instances || [];\n \n // Transform each instance into the expected format\n const namespaceSandboxes = instances.map((instanceData: any) => {\n // For list response, instanceId is directly in the instance object, not in metadata\n const instanceId = instanceData.instanceId || instanceData.metadata?.instanceId;\n if (!instanceId) {\n console.warn('Instance missing instanceId:', instanceData);\n return null;\n }\n \n const instanceName = `instance-${instanceId}`;\n\n const namespaceSandbox: NamespaceSandbox = {\n instanceId,\n name: instanceName,\n };\n\n return {\n sandbox: namespaceSandbox,\n sandboxId: instanceId\n };\n }).filter(Boolean); // Remove any null entries\n\n return namespaceSandboxes;\n } catch (error) {\n throw new Error(\n `Failed to list Namespace instances: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n },\n\n destroy: async (config: NamespaceConfig, sandboxId: string) => {\n const { token } = getAndValidateCredentials(config);\n\n try {\n const requestBody = {\n instance_id: sandboxId,\n reason: config.destroyReason || \"ComputeSDK cleanup\"\n };\n\n const data = await fetchNamespace(token, API_ENDPOINTS.DESTROY_INSTANCE, {\n method: 'POST',\n body: JSON.stringify(requestBody)\n });\n \n if (data.error) {\n // Log errors but don't throw for destroy operations\n console.warn(`Namespace destroy warning: ${data.error}`);\n }\n } catch (error) {\n // For destroy operations, we typically don't throw if the instance is already gone\n console.warn(`Namespace destroy warning: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n\n // Instance operations (minimal stubs - not implemented yet)\n runCode: async (_sandbox: NamespaceSandbox, _code: string, _runtime?: Runtime) => {\n throw new Error('Namespace runCode method not implemented yet');\n },\n\n runCommand: async (_sandbox: NamespaceSandbox, _command: string, _options?: RunCommandOptions) => {\n throw new Error('Namespace runCommand method not implemented yet');\n },\n\n getInfo: async (_sandbox: NamespaceSandbox) => {\n throw new Error('Namespace getInfo method not implemented yet');\n },\n\n getUrl: async (_sandbox: NamespaceSandbox, _options: { port: number; protocol?: string }) => {\n throw new Error('Namespace getUrl method not implemented yet');\n },\n\n },\n },\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Namespace Provider - Compute Factory\n *\n * Provides a first-class Namespace provider experience by routing all operations\n * through the ComputeSDK gateway. The gateway handles infrastructure provisioning\n * via @computesdk/gateway and installs the daemon for full sandbox capabilities.\n */\n\nimport { defineCompute, type ComputeConfig } from '@computesdk/provider';\n\n/**\n * Namespace provider configuration\n */\nexport interface NamespaceConfig extends ComputeConfig {\n /** Namespace API token - if not provided, will fallback to NSC_TOKEN environment variable */\n token?: string;\n /** Virtual CPU cores for the instance */\n virtualCpu?: number;\n /** Memory in megabytes for the instance */\n memoryMegabytes?: number;\n /** Machine architecture (default: amd64) */\n machineArch?: string;\n /** Operating system (default: linux) */\n os?: string;\n /** Documented purpose for the instance */\n documentedPurpose?: string;\n /** Reason for destroying instances (default: \"ComputeSDK cleanup\") */\n destroyReason?: string;\n}\n\n/**\n * Namespace compute factory - creates configured compute instances\n *\n * Namespace is an infrastructure provider that becomes a full sandbox provider\n * via the ComputeSDK gateway. The gateway provisions Namespace instances with the\n * daemon pre-installed, enabling full sandbox capabilities.\n *\n * @example\n * ```typescript\n * import { namespace } from '@computesdk/namespace';\n *\n * const compute = namespace({\n * token: 'nsc_xxx'\n * });\n *\n * // Full compute API available (routes through gateway)\n * const sandbox = await compute.sandbox.create();\n *\n * // Execute code\n * const result = await sandbox.runCode('console.log(\"Hello from Namespace!\")');\n * console.log(result.stdout);\n *\n * // Filesystem operations\n * await sandbox.filesystem.writeFile('/tmp/test.txt', 'Hello!');\n * const content = await sandbox.filesystem.readFile('/tmp/test.txt');\n *\n * // Cleanup\n * await sandbox.destroy();\n * ```\n */\nexport const namespace = defineCompute<NamespaceConfig>({\n provider: 'namespace'\n});\n"],"mappings":";AAQA,SAAS,qBAAyC;AAoD3C,IAAM,YAAY,cAA+B;AAAA,EACtD,UAAU;AACZ,CAAC;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@computesdk/namespace",
3
- "version": "1.1.33",
3
+ "version": "1.2.0",
4
4
  "description": "Namespace provider for ComputeSDK - cloud-native sandboxes with optional GPU support",
5
5
  "author": "ComputeSDK Team",
6
6
  "license": "MIT",
@@ -18,8 +18,8 @@
18
18
  "dist"
19
19
  ],
20
20
  "dependencies": {
21
- "@computesdk/provider": "1.0.26",
22
- "computesdk": "2.2.0"
21
+ "@computesdk/provider": "1.0.27",
22
+ "computesdk": "2.2.1"
23
23
  },
24
24
  "keywords": [
25
25
  "computesdk",