@aigne/afs-compute-abstraction 1.11.0-beta.10

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.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Instance Mapper Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=instance-mapper.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-mapper.test.d.ts","sourceRoot":"","sources":["../../test/instance-mapper.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Instance Mapper Tests
3
+ */
4
+ import { describe, expect, test } from "bun:test";
5
+ import { mapInstance, mapInstances } from "../src/instance-mapper.js";
6
+ describe("Instance Mapper", () => {
7
+ describe("mapInstance", () => {
8
+ test("maps EC2 instance by kind", () => {
9
+ const entry = {
10
+ id: "ec2://us-east-1/i-123",
11
+ path: "/instances/my-ec2",
12
+ meta: {
13
+ kind: "ec2:instance",
14
+ instanceId: "i-123",
15
+ state: "running",
16
+ instanceType: "t2.micro",
17
+ platformRef: { consoleUrl: "https://console.aws.amazon.com/ec2" },
18
+ },
19
+ };
20
+ const result = mapInstance(entry);
21
+ expect(result.provider).toBe("ec2");
22
+ expect(result.name).toBe("my-ec2");
23
+ });
24
+ test("maps GCE instance by kind", () => {
25
+ const entry = {
26
+ id: "gce://my-project/us-central1-a/my-gce",
27
+ path: "/instances/my-gce",
28
+ meta: {
29
+ kind: "gce:instance",
30
+ status: "RUNNING",
31
+ machineType: "n1-standard-1",
32
+ platformRef: { consoleUrl: "https://console.cloud.google.com/compute" },
33
+ },
34
+ };
35
+ const result = mapInstance(entry);
36
+ expect(result.provider).toBe("gce");
37
+ expect(result.name).toBe("my-gce");
38
+ });
39
+ test("throws error for unknown kind", () => {
40
+ const entry = {
41
+ id: "unknown://id",
42
+ path: "/instances/unknown",
43
+ meta: {
44
+ kind: "unknown:instance",
45
+ },
46
+ };
47
+ expect(() => mapInstance(entry)).toThrow("Unsupported instance kind");
48
+ });
49
+ test("throws error for missing kind", () => {
50
+ const entry = {
51
+ id: "unknown://id",
52
+ path: "/instances/unknown",
53
+ meta: {},
54
+ };
55
+ expect(() => mapInstance(entry)).toThrow("Unsupported instance kind");
56
+ });
57
+ });
58
+ describe("mapInstances", () => {
59
+ test("maps multiple instances", () => {
60
+ const entries = [
61
+ {
62
+ id: "ec2://us-east-1/i-123",
63
+ path: "/instances/ec2-instance",
64
+ meta: {
65
+ kind: "ec2:instance",
66
+ instanceId: "i-123",
67
+ state: "running",
68
+ instanceType: "t2.micro",
69
+ platformRef: { consoleUrl: "https://console.aws.amazon.com/ec2" },
70
+ },
71
+ },
72
+ {
73
+ id: "gce://my-project/us-central1-a/gce-instance",
74
+ path: "/instances/gce-instance",
75
+ meta: {
76
+ kind: "gce:instance",
77
+ status: "RUNNING",
78
+ machineType: "n1-standard-1",
79
+ platformRef: { consoleUrl: "https://console.cloud.google.com/compute" },
80
+ },
81
+ },
82
+ ];
83
+ const result = mapInstances(entries);
84
+ expect(result).toHaveLength(2);
85
+ expect(result[0].provider).toBe("ec2");
86
+ expect(result[1].provider).toBe("gce");
87
+ });
88
+ test("returns empty array for empty input", () => {
89
+ const result = mapInstances([]);
90
+ expect(result).toHaveLength(0);
91
+ });
92
+ test("filters out non-instance entries", () => {
93
+ const entries = [
94
+ {
95
+ id: "ec2://us-east-1/i-123",
96
+ path: "/instances/ec2-instance",
97
+ meta: {
98
+ kind: "ec2:instance",
99
+ instanceId: "i-123",
100
+ state: "running",
101
+ instanceType: "t2.micro",
102
+ platformRef: { consoleUrl: "https://console.aws.amazon.com/ec2" },
103
+ },
104
+ },
105
+ {
106
+ id: "ec2://us-east-1/volumes/vol-123",
107
+ path: "/volumes/my-volume",
108
+ meta: {
109
+ kind: "ec2:volume",
110
+ },
111
+ },
112
+ ];
113
+ const result = mapInstances(entries, { skipUnknown: true });
114
+ expect(result).toHaveLength(1);
115
+ expect(result[0].provider).toBe("ec2");
116
+ });
117
+ });
118
+ });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * EC2 Adapter Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=ec2.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ec2.test.d.ts","sourceRoot":"","sources":["../../../test/providers/ec2.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * EC2 Adapter Tests
3
+ */
4
+ import { describe, expect, test } from "bun:test";
5
+ import { mapEC2Instance } from "../../src/providers/ec2.js";
6
+ describe("EC2 Adapter", () => {
7
+ describe("mapEC2Instance", () => {
8
+ test("maps basic EC2 instance to ComputeInstance", () => {
9
+ const entry = {
10
+ id: "ec2://us-east-1/i-1234567890abcdef0",
11
+ path: "/instances/my-instance",
12
+ meta: {
13
+ kind: "ec2:instance",
14
+ instanceId: "i-1234567890abcdef0",
15
+ state: "running",
16
+ instanceType: "t2.micro",
17
+ privateIp: "10.0.0.5",
18
+ publicIp: "54.123.45.67",
19
+ platformRef: {
20
+ consoleUrl: "https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#InstanceDetails:instanceId=i-1234567890abcdef0",
21
+ },
22
+ },
23
+ };
24
+ const result = mapEC2Instance(entry);
25
+ expect(result.id).toBe("i-1234567890abcdef0");
26
+ expect(result.name).toBe("my-instance");
27
+ expect(result.state).toBe("running");
28
+ expect(result.provider).toBe("ec2");
29
+ expect(result.instanceType).toBe("t2.micro");
30
+ expect(result.privateIp).toBe("10.0.0.5");
31
+ expect(result.publicIp).toBe("54.123.45.67");
32
+ });
33
+ test("maps stopped EC2 instance", () => {
34
+ const entry = {
35
+ id: "ec2://us-east-1/i-123",
36
+ path: "/instances/stopped-instance",
37
+ meta: {
38
+ kind: "ec2:instance",
39
+ instanceId: "i-123",
40
+ state: "stopped",
41
+ instanceType: "t2.small",
42
+ privateIp: "10.0.0.6",
43
+ platformRef: {
44
+ consoleUrl: "https://console.aws.amazon.com/ec2",
45
+ },
46
+ },
47
+ };
48
+ const result = mapEC2Instance(entry);
49
+ expect(result.state).toBe("stopped");
50
+ expect(result.publicIp).toBeUndefined();
51
+ });
52
+ test("maps pending EC2 instance", () => {
53
+ const entry = {
54
+ id: "ec2://us-east-1/i-123",
55
+ path: "/instances/pending-instance",
56
+ meta: {
57
+ kind: "ec2:instance",
58
+ instanceId: "i-123",
59
+ state: "pending",
60
+ instanceType: "t2.micro",
61
+ platformRef: {
62
+ consoleUrl: "https://console.aws.amazon.com/ec2",
63
+ },
64
+ },
65
+ };
66
+ const result = mapEC2Instance(entry);
67
+ expect(result.state).toBe("pending");
68
+ });
69
+ test("maps terminated EC2 instance", () => {
70
+ const entry = {
71
+ id: "ec2://us-east-1/i-123",
72
+ path: "/instances/terminated-instance",
73
+ meta: {
74
+ kind: "ec2:instance",
75
+ instanceId: "i-123",
76
+ state: "terminated",
77
+ instanceType: "t2.micro",
78
+ platformRef: {
79
+ consoleUrl: "https://console.aws.amazon.com/ec2",
80
+ },
81
+ },
82
+ };
83
+ const result = mapEC2Instance(entry);
84
+ expect(result.state).toBe("terminated");
85
+ });
86
+ test("maps shutting-down to stopping", () => {
87
+ const entry = {
88
+ id: "ec2://us-east-1/i-123",
89
+ path: "/instances/shutting-down-instance",
90
+ meta: {
91
+ kind: "ec2:instance",
92
+ instanceId: "i-123",
93
+ state: "shutting-down",
94
+ instanceType: "t2.micro",
95
+ platformRef: {
96
+ consoleUrl: "https://console.aws.amazon.com/ec2",
97
+ },
98
+ },
99
+ };
100
+ const result = mapEC2Instance(entry);
101
+ expect(result.state).toBe("stopping");
102
+ });
103
+ test("includes platformRef with afsPath", () => {
104
+ const entry = {
105
+ id: "ec2://us-east-1/i-123",
106
+ path: "/instances/my-instance",
107
+ meta: {
108
+ kind: "ec2:instance",
109
+ instanceId: "i-123",
110
+ state: "running",
111
+ instanceType: "t2.micro",
112
+ platformRef: {
113
+ consoleUrl: "https://console.aws.amazon.com/ec2",
114
+ },
115
+ },
116
+ };
117
+ const result = mapEC2Instance(entry);
118
+ expect(result.platformRef.consoleUrl).toBe("https://console.aws.amazon.com/ec2");
119
+ expect(result.platformRef.afsPath).toBe("/instances/my-instance");
120
+ });
121
+ test("includes aws metadata passthrough", () => {
122
+ const entry = {
123
+ id: "ec2://us-east-1/i-123",
124
+ path: "/instances/my-instance",
125
+ meta: {
126
+ kind: "ec2:instance",
127
+ instanceId: "i-1234567890abcdef0",
128
+ state: "running",
129
+ instanceType: "t2.micro",
130
+ availabilityZone: "us-east-1a",
131
+ vpcId: "vpc-12345",
132
+ subnetId: "subnet-12345",
133
+ tags: { Name: "my-instance", Environment: "prod" },
134
+ platformRef: {
135
+ consoleUrl: "https://console.aws.amazon.com/ec2",
136
+ },
137
+ },
138
+ };
139
+ const result = mapEC2Instance(entry);
140
+ expect(result.aws).toBeDefined();
141
+ expect(result.aws?.instanceId).toBe("i-1234567890abcdef0");
142
+ expect(result.aws?.availabilityZone).toBe("us-east-1a");
143
+ expect(result.aws?.vpcId).toBe("vpc-12345");
144
+ });
145
+ test("maps launchTime if present", () => {
146
+ const launchTime = "2024-01-01T00:00:00.000Z";
147
+ const entry = {
148
+ id: "ec2://us-east-1/i-123",
149
+ path: "/instances/my-instance",
150
+ meta: {
151
+ kind: "ec2:instance",
152
+ instanceId: "i-123",
153
+ state: "running",
154
+ instanceType: "t2.micro",
155
+ launchTime,
156
+ platformRef: {
157
+ consoleUrl: "https://console.aws.amazon.com/ec2",
158
+ },
159
+ },
160
+ };
161
+ const result = mapEC2Instance(entry);
162
+ expect(result.launchTime).toBeInstanceOf(Date);
163
+ expect(result.launchTime?.toISOString()).toBe(launchTime);
164
+ });
165
+ });
166
+ });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * GCE Adapter Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=gce.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gce.test.d.ts","sourceRoot":"","sources":["../../../test/providers/gce.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * GCE Adapter Tests
3
+ */
4
+ import { describe, expect, test } from "bun:test";
5
+ import { mapGCEInstance } from "../../src/providers/gce.js";
6
+ describe("GCE Adapter", () => {
7
+ describe("mapGCEInstance", () => {
8
+ test("maps basic GCE instance to ComputeInstance", () => {
9
+ const entry = {
10
+ id: "gce://my-project/us-central1-a/my-instance",
11
+ path: "/instances/my-instance",
12
+ meta: {
13
+ kind: "gce:instance",
14
+ status: "RUNNING",
15
+ machineType: "n1-standard-1",
16
+ privateIp: "10.0.0.5",
17
+ publicIp: "35.123.45.67",
18
+ platformRef: {
19
+ consoleUrl: "https://console.cloud.google.com/compute/instancesDetail/zones/us-central1-a/instances/my-instance?project=my-project",
20
+ },
21
+ },
22
+ };
23
+ const result = mapGCEInstance(entry);
24
+ expect(result.id).toBe("gce://my-project/us-central1-a/my-instance");
25
+ expect(result.name).toBe("my-instance");
26
+ expect(result.state).toBe("running");
27
+ expect(result.provider).toBe("gce");
28
+ expect(result.instanceType).toBe("n1-standard-1");
29
+ expect(result.privateIp).toBe("10.0.0.5");
30
+ expect(result.publicIp).toBe("35.123.45.67");
31
+ });
32
+ test("maps STOPPED GCE instance", () => {
33
+ const entry = {
34
+ id: "gce://my-project/us-central1-a/stopped-instance",
35
+ path: "/instances/stopped-instance",
36
+ meta: {
37
+ kind: "gce:instance",
38
+ status: "STOPPED",
39
+ machineType: "n1-standard-1",
40
+ privateIp: "10.0.0.6",
41
+ platformRef: {
42
+ consoleUrl: "https://console.cloud.google.com/compute",
43
+ },
44
+ },
45
+ };
46
+ const result = mapGCEInstance(entry);
47
+ expect(result.state).toBe("stopped");
48
+ expect(result.publicIp).toBeUndefined();
49
+ });
50
+ test("maps PROVISIONING to pending", () => {
51
+ const entry = {
52
+ id: "gce://my-project/us-central1-a/provisioning-instance",
53
+ path: "/instances/provisioning-instance",
54
+ meta: {
55
+ kind: "gce:instance",
56
+ status: "PROVISIONING",
57
+ machineType: "n1-standard-1",
58
+ platformRef: {
59
+ consoleUrl: "https://console.cloud.google.com/compute",
60
+ },
61
+ },
62
+ };
63
+ const result = mapGCEInstance(entry);
64
+ expect(result.state).toBe("pending");
65
+ });
66
+ test("maps STAGING to pending", () => {
67
+ const entry = {
68
+ id: "gce://my-project/us-central1-a/staging-instance",
69
+ path: "/instances/staging-instance",
70
+ meta: {
71
+ kind: "gce:instance",
72
+ status: "STAGING",
73
+ machineType: "n1-standard-1",
74
+ platformRef: {
75
+ consoleUrl: "https://console.cloud.google.com/compute",
76
+ },
77
+ },
78
+ };
79
+ const result = mapGCEInstance(entry);
80
+ expect(result.state).toBe("pending");
81
+ });
82
+ test("maps TERMINATED to terminated", () => {
83
+ const entry = {
84
+ id: "gce://my-project/us-central1-a/terminated-instance",
85
+ path: "/instances/terminated-instance",
86
+ meta: {
87
+ kind: "gce:instance",
88
+ status: "TERMINATED",
89
+ machineType: "n1-standard-1",
90
+ platformRef: {
91
+ consoleUrl: "https://console.cloud.google.com/compute",
92
+ },
93
+ },
94
+ };
95
+ const result = mapGCEInstance(entry);
96
+ expect(result.state).toBe("terminated");
97
+ });
98
+ test("maps STOPPING to stopping", () => {
99
+ const entry = {
100
+ id: "gce://my-project/us-central1-a/stopping-instance",
101
+ path: "/instances/stopping-instance",
102
+ meta: {
103
+ kind: "gce:instance",
104
+ status: "STOPPING",
105
+ machineType: "n1-standard-1",
106
+ platformRef: {
107
+ consoleUrl: "https://console.cloud.google.com/compute",
108
+ },
109
+ },
110
+ };
111
+ const result = mapGCEInstance(entry);
112
+ expect(result.state).toBe("stopping");
113
+ });
114
+ test("maps SUSPENDED to stopped", () => {
115
+ const entry = {
116
+ id: "gce://my-project/us-central1-a/suspended-instance",
117
+ path: "/instances/suspended-instance",
118
+ meta: {
119
+ kind: "gce:instance",
120
+ status: "SUSPENDED",
121
+ machineType: "n1-standard-1",
122
+ platformRef: {
123
+ consoleUrl: "https://console.cloud.google.com/compute",
124
+ },
125
+ },
126
+ };
127
+ const result = mapGCEInstance(entry);
128
+ expect(result.state).toBe("stopped");
129
+ });
130
+ test("includes platformRef with afsPath", () => {
131
+ const entry = {
132
+ id: "gce://my-project/us-central1-a/my-instance",
133
+ path: "/instances/my-instance",
134
+ meta: {
135
+ kind: "gce:instance",
136
+ status: "RUNNING",
137
+ machineType: "n1-standard-1",
138
+ platformRef: {
139
+ consoleUrl: "https://console.cloud.google.com/compute",
140
+ },
141
+ },
142
+ };
143
+ const result = mapGCEInstance(entry);
144
+ expect(result.platformRef.consoleUrl).toBe("https://console.cloud.google.com/compute");
145
+ expect(result.platformRef.afsPath).toBe("/instances/my-instance");
146
+ });
147
+ test("includes gcp metadata passthrough", () => {
148
+ const entry = {
149
+ id: "gce://my-project/us-central1-a/my-instance",
150
+ path: "/instances/my-instance",
151
+ meta: {
152
+ kind: "gce:instance",
153
+ status: "RUNNING",
154
+ machineType: "n1-standard-1",
155
+ zone: "us-central1-a",
156
+ labels: { env: "prod" },
157
+ networkInterfaces: [{ network: "default" }],
158
+ platformRef: {
159
+ consoleUrl: "https://console.cloud.google.com/compute",
160
+ },
161
+ },
162
+ };
163
+ const result = mapGCEInstance(entry);
164
+ expect(result.gcp).toBeDefined();
165
+ expect(result.gcp?.zone).toBe("us-central1-a");
166
+ expect(result.gcp?.labels).toEqual({ env: "prod" });
167
+ });
168
+ test("maps createdAt if present", () => {
169
+ const createdAt = "2024-01-01T00:00:00.000Z";
170
+ const entry = {
171
+ id: "gce://my-project/us-central1-a/my-instance",
172
+ path: "/instances/my-instance",
173
+ meta: {
174
+ kind: "gce:instance",
175
+ status: "RUNNING",
176
+ machineType: "n1-standard-1",
177
+ createdAt,
178
+ platformRef: {
179
+ consoleUrl: "https://console.cloud.google.com/compute",
180
+ },
181
+ },
182
+ };
183
+ const result = mapGCEInstance(entry);
184
+ expect(result.launchTime).toBeInstanceOf(Date);
185
+ expect(result.launchTime?.toISOString()).toBe(createdAt);
186
+ });
187
+ });
188
+ });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Compute Abstraction Types Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../../test/types.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Compute Abstraction Types Tests
3
+ */
4
+ import { describe, expect, test } from "bun:test";
5
+ import { COMPUTE_STATES, computeInstanceSchema } from "../src/types.js";
6
+ describe("ComputeInstance type", () => {
7
+ describe("ComputeInstanceState", () => {
8
+ test("defines all expected states", () => {
9
+ expect(COMPUTE_STATES).toContain("running");
10
+ expect(COMPUTE_STATES).toContain("stopped");
11
+ expect(COMPUTE_STATES).toContain("pending");
12
+ expect(COMPUTE_STATES).toContain("terminated");
13
+ expect(COMPUTE_STATES).toContain("stopping");
14
+ expect(COMPUTE_STATES).toContain("unknown");
15
+ });
16
+ });
17
+ describe("computeInstanceSchema", () => {
18
+ test("validates minimal instance", () => {
19
+ const instance = {
20
+ id: "i-1234567890abcdef0",
21
+ name: "my-instance",
22
+ state: "running",
23
+ provider: "ec2",
24
+ instanceType: "t2.micro",
25
+ platformRef: {
26
+ consoleUrl: "https://console.aws.amazon.com/ec2",
27
+ afsPath: "/instances/my-instance",
28
+ },
29
+ };
30
+ const result = computeInstanceSchema.safeParse(instance);
31
+ expect(result.success).toBe(true);
32
+ });
33
+ test("validates full instance", () => {
34
+ const instance = {
35
+ id: "i-1234567890abcdef0",
36
+ name: "my-instance",
37
+ state: "running",
38
+ provider: "ec2",
39
+ instanceType: "t2.micro",
40
+ vcpus: 1,
41
+ memoryGb: 1,
42
+ publicIp: "54.123.45.67",
43
+ privateIp: "10.0.0.5",
44
+ launchTime: new Date("2024-01-01T00:00:00Z"),
45
+ platformRef: {
46
+ consoleUrl: "https://console.aws.amazon.com/ec2",
47
+ afsPath: "/instances/my-instance",
48
+ },
49
+ aws: {
50
+ instanceId: "i-1234567890abcdef0",
51
+ availabilityZone: "us-east-1a",
52
+ },
53
+ };
54
+ const result = computeInstanceSchema.safeParse(instance);
55
+ expect(result.success).toBe(true);
56
+ });
57
+ test("rejects instance without required fields", () => {
58
+ const instance = {
59
+ id: "i-123",
60
+ // missing name, state, provider, instanceType, platformRef
61
+ };
62
+ const result = computeInstanceSchema.safeParse(instance);
63
+ expect(result.success).toBe(false);
64
+ });
65
+ test("rejects invalid state", () => {
66
+ const instance = {
67
+ id: "i-123",
68
+ name: "my-instance",
69
+ state: "invalid-state",
70
+ provider: "ec2",
71
+ instanceType: "t2.micro",
72
+ platformRef: {
73
+ consoleUrl: "https://console.aws.amazon.com/ec2",
74
+ afsPath: "/instances/my-instance",
75
+ },
76
+ };
77
+ const result = computeInstanceSchema.safeParse(instance);
78
+ expect(result.success).toBe(false);
79
+ });
80
+ test("rejects invalid provider", () => {
81
+ const instance = {
82
+ id: "i-123",
83
+ name: "my-instance",
84
+ state: "running",
85
+ provider: "invalid-provider",
86
+ instanceType: "t2.micro",
87
+ platformRef: {
88
+ consoleUrl: "https://console.aws.amazon.com/ec2",
89
+ afsPath: "/instances/my-instance",
90
+ },
91
+ };
92
+ const result = computeInstanceSchema.safeParse(instance);
93
+ expect(result.success).toBe(false);
94
+ });
95
+ });
96
+ });
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@aigne/afs-compute-abstraction",
3
+ "version": "1.11.0-beta.10",
4
+ "description": "Compute abstraction layer for AFS - unified interface for EC2, GCE instances",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./types": {
14
+ "types": "./dist/types.d.ts",
15
+ "import": "./dist/types.js"
16
+ },
17
+ "./ec2": {
18
+ "types": "./dist/providers/ec2.d.ts",
19
+ "import": "./dist/providers/ec2.js"
20
+ },
21
+ "./gce": {
22
+ "types": "./dist/providers/gce.d.ts",
23
+ "import": "./dist/providers/gce.js"
24
+ }
25
+ },
26
+ "dependencies": {
27
+ "zod": "^4.0.0",
28
+ "@aigne/afs": "1.11.0-beta.10"
29
+ },
30
+ "devDependencies": {
31
+ "@aigne/afs-ec2": "1.11.0-beta.10",
32
+ "@aigne/afs-gce": "1.11.0-beta.10",
33
+ "@aigne/typescript-config": "0.0.0"
34
+ },
35
+ "peerDependencies": {
36
+ "@aigne/afs-ec2": "1.11.0-beta.10",
37
+ "@aigne/afs-gce": "1.11.0-beta.10"
38
+ },
39
+ "peerDependenciesMeta": {
40
+ "@aigne/afs-ec2": {
41
+ "optional": true
42
+ },
43
+ "@aigne/afs-gce": {
44
+ "optional": true
45
+ }
46
+ },
47
+ "files": [
48
+ "dist",
49
+ "LICENSE"
50
+ ],
51
+ "keywords": [
52
+ "afs",
53
+ "compute",
54
+ "ec2",
55
+ "gce",
56
+ "abstraction",
57
+ "cloud"
58
+ ],
59
+ "author": "AIGNE",
60
+ "license": "See LICENSE file",
61
+ "scripts": {
62
+ "build": "tsc",
63
+ "check-types": "tsc --noEmit",
64
+ "test": "bun test"
65
+ }
66
+ }