@itssergio91/sandman 0.2.1 → 0.3.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/README.md +46 -266
- package/dist/cli/commands/cli-contract.test.d.ts +2 -0
- package/dist/cli/commands/cli-contract.test.d.ts.map +1 -0
- package/dist/cli/commands/cli-contract.test.js +217 -0
- package/dist/cli/commands/cli-contract.test.js.map +1 -0
- package/dist/cli/commands/connect.d.ts +1 -0
- package/dist/cli/commands/connect.d.ts.map +1 -1
- package/dist/cli/commands/connect.js +67 -42
- package/dist/cli/commands/connect.js.map +1 -1
- package/dist/cli/commands/create.d.ts +7 -2
- package/dist/cli/commands/create.d.ts.map +1 -1
- package/dist/cli/commands/create.js +158 -46
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/destroy.d.ts.map +1 -1
- package/dist/cli/commands/destroy.js +27 -23
- package/dist/cli/commands/destroy.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +8 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +124 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/enable.d.ts +1 -2
- package/dist/cli/commands/enable.d.ts.map +1 -1
- package/dist/cli/commands/enable.js +75 -46
- package/dist/cli/commands/enable.js.map +1 -1
- package/dist/cli/commands/init.d.ts +2 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +49 -17
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +25 -18
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/providers.d.ts +6 -0
- package/dist/cli/commands/providers.d.ts.map +1 -0
- package/dist/cli/commands/providers.js +20 -0
- package/dist/cli/commands/providers.js.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +88 -50
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/env-name.d.ts +7 -0
- package/dist/cli/env-name.d.ts.map +1 -0
- package/dist/cli/env-name.js +9 -0
- package/dist/cli/env-name.js.map +1 -0
- package/dist/cli/env-name.test.d.ts +2 -0
- package/dist/cli/env-name.test.d.ts.map +1 -0
- package/dist/cli/env-name.test.js +38 -0
- package/dist/cli/env-name.test.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +43 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +28 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +60 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/output.test.d.ts +2 -0
- package/dist/cli/output.test.d.ts.map +1 -0
- package/dist/cli/output.test.js +78 -0
- package/dist/cli/output.test.js.map +1 -0
- package/dist/cli/reap.d.ts +11 -0
- package/dist/cli/reap.d.ts.map +1 -0
- package/dist/cli/reap.js +32 -0
- package/dist/cli/reap.js.map +1 -0
- package/dist/cli/secrets.d.ts +8 -0
- package/dist/cli/secrets.d.ts.map +1 -0
- package/dist/cli/secrets.js +30 -0
- package/dist/cli/secrets.js.map +1 -0
- package/dist/core/state-store.d.ts +15 -1
- package/dist/core/state-store.d.ts.map +1 -1
- package/dist/core/state-store.js +168 -33
- package/dist/core/state-store.js.map +1 -1
- package/dist/core/state-store.test.js +40 -0
- package/dist/core/state-store.test.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/providers/aws/adapter.d.ts +13 -2
- package/dist/providers/aws/adapter.d.ts.map +1 -1
- package/dist/providers/aws/adapter.js +402 -63
- package/dist/providers/aws/adapter.js.map +1 -1
- package/dist/providers/aws/adapter.test.js +300 -191
- package/dist/providers/aws/adapter.test.js.map +1 -1
- package/dist/providers/base.d.ts +1 -9
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/base.test.js +12 -2
- package/dist/providers/base.test.js.map +1 -1
- package/dist/providers/catalog.d.ts +15 -0
- package/dist/providers/catalog.d.ts.map +1 -0
- package/dist/providers/catalog.js +53 -0
- package/dist/providers/catalog.js.map +1 -0
- package/dist/providers/cloudflare/adapter.d.ts +5 -2
- package/dist/providers/cloudflare/adapter.d.ts.map +1 -1
- package/dist/providers/cloudflare/adapter.js +17 -5
- package/dist/providers/cloudflare/adapter.js.map +1 -1
- package/dist/providers/cloudflare/adapter.test.js +4 -4
- package/dist/providers/cloudflare/adapter.test.js.map +1 -1
- package/dist/providers/enable-result.d.ts +9 -0
- package/dist/providers/enable-result.d.ts.map +1 -0
- package/dist/providers/enable-result.js +26 -0
- package/dist/providers/enable-result.js.map +1 -0
- package/dist/providers/gcp/adapter.d.ts +9 -3
- package/dist/providers/gcp/adapter.d.ts.map +1 -1
- package/dist/providers/gcp/adapter.js +115 -20
- package/dist/providers/gcp/adapter.js.map +1 -1
- package/dist/providers/gcp/adapter.test.js +52 -0
- package/dist/providers/gcp/adapter.test.js.map +1 -1
- package/dist/providers/index.d.ts +5 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +13 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/vercel/adapter.d.ts +5 -2
- package/dist/providers/vercel/adapter.d.ts.map +1 -1
- package/dist/providers/vercel/adapter.js +17 -5
- package/dist/providers/vercel/adapter.js.map +1 -1
- package/dist/providers/vercel/adapter.test.js +4 -4
- package/dist/providers/vercel/adapter.test.js.map +1 -1
- package/dist/types/index.d.ts +40 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/cost-estimator.d.ts +2 -0
- package/dist/utils/cost-estimator.d.ts.map +1 -1
- package/dist/utils/cost-estimator.js +23 -0
- package/dist/utils/cost-estimator.js.map +1 -1
- package/dist/utils/cost-estimator.test.js +16 -1
- package/dist/utils/cost-estimator.test.js.map +1 -1
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +12 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/ttl.d.ts +13 -0
- package/dist/utils/ttl.d.ts.map +1 -0
- package/dist/utils/ttl.js +35 -0
- package/dist/utils/ttl.js.map +1 -0
- package/dist/utils/ttl.test.d.ts +2 -0
- package/dist/utils/ttl.test.d.ts.map +1 -0
- package/dist/utils/ttl.test.js +27 -0
- package/dist/utils/ttl.test.js.map +1 -0
- package/package.json +12 -5
package/README.md
CHANGED
|
@@ -8,74 +8,54 @@
|
|
|
8
8
|
|____/ \__,_|_| |_|\__,_|_| |_| |_|\__,_|_| |_|
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
**Disposable cloud environments in seconds.**
|
|
12
12
|
|
|
13
|
-
Sandman is an open-source CLI that
|
|
13
|
+
Sandman is an open-source CLI that provisions clean, isolated environments on
|
|
14
|
+
AWS, GCP, Cloudflare, and Vercel — no billing setup, IAM wrangling, or API
|
|
15
|
+
configuration. Spin one up for a demo or experiment, tear it down when you're
|
|
16
|
+
done.
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
- **DevTool demos** — a fresh environment for every product demo
|
|
19
|
+
- **AI builders** — test infrastructure without touching production
|
|
20
|
+
- **Rapid prototyping** — go from idea to a running cloud in seconds
|
|
21
|
+
- **Experimentation** — learn cloud services on throwaway infrastructure
|
|
16
22
|
|
|
17
|
-
-
|
|
18
|
-
- AI builders testing infrastructure
|
|
19
|
-
- Rapid prototyping
|
|
20
|
-
- Disposable sandbox environments
|
|
21
|
-
- Infrastructure experimentation
|
|
22
|
-
|
|
23
|
-
Instead of manually configuring billing, IAM, APIs, and services, Sandman spins up a working environment instantly.
|
|
23
|
+
All commands accept `--json` for machine-readable output, built for humans and agents alike.
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
-
##
|
|
28
|
-
|
|
29
|
-
Creating cloud infrastructure manually is slow.
|
|
30
|
-
|
|
31
|
-
Even experienced engineers must:
|
|
32
|
-
|
|
33
|
-
### AWS
|
|
34
|
-
|
|
35
|
-
• configure IAM
|
|
36
|
-
• create VPCs
|
|
37
|
-
• provision compute
|
|
38
|
-
• configure credentials
|
|
27
|
+
## Quick start
|
|
39
28
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
This can take **30–90 minutes**.
|
|
29
|
+
```bash
|
|
30
|
+
sandman init gcp # authenticate and configure credentials
|
|
31
|
+
sandman create demo # provision a new environment
|
|
32
|
+
sandman enable compute storage cloudrun # turn on the services you need
|
|
33
|
+
sandman connect demo # print environment credentials
|
|
34
|
+
sandman destroy demo # delete everything when finished
|
|
35
|
+
```
|
|
48
36
|
|
|
49
|
-
|
|
37
|
+
For AWS, enable services with `sandman enable ec2 s3 lambda`.
|
|
50
38
|
|
|
51
39
|
---
|
|
52
40
|
|
|
53
|
-
##
|
|
54
|
-
|
|
55
|
-
• Create disposable cloud environments
|
|
56
|
-
• Automatic project provisioning
|
|
57
|
-
• Billing configuration helpers
|
|
58
|
-
• Enable common cloud services
|
|
59
|
-
• Credential management
|
|
60
|
-
• Environment teardown
|
|
61
|
-
|
|
62
|
-
Supported providers:
|
|
63
|
-
|
|
64
|
-
- AWS
|
|
65
|
-
- GCP
|
|
66
|
-
|
|
67
|
-
Future support:
|
|
41
|
+
## Commands
|
|
68
42
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
43
|
+
| Command | Description |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| `sandman init <provider>` | Authenticate and configure credentials |
|
|
46
|
+
| `sandman create <name>` | Provision a new environment (supports `--ttl`, `--dry-run`) |
|
|
47
|
+
| `sandman enable <services...>` | Enable services in the environment |
|
|
48
|
+
| `sandman list` | List environments |
|
|
49
|
+
| `sandman status <name>` | Show status, resources, and estimated cost |
|
|
50
|
+
| `sandman connect <name>` | Output environment credentials |
|
|
51
|
+
| `sandman destroy <name>` | Delete the environment and all resources |
|
|
52
|
+
| `sandman providers` | Show the live provider capability matrix |
|
|
53
|
+
| `sandman doctor` | Check init state, auth, and reap expired environments (`--reap`) |
|
|
72
54
|
|
|
73
55
|
---
|
|
74
56
|
|
|
75
57
|
## Installation
|
|
76
58
|
|
|
77
|
-
### Using npm
|
|
78
|
-
|
|
79
59
|
```bash
|
|
80
60
|
npm install -g @itssergio91/sandman
|
|
81
61
|
```
|
|
@@ -88,235 +68,35 @@ npx @itssergio91/sandman
|
|
|
88
68
|
|
|
89
69
|
---
|
|
90
70
|
|
|
91
|
-
## Quick Start
|
|
92
|
-
|
|
93
|
-
Initialize a cloud provider.
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
sandman init gcp
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
Create a sandbox environment.
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
sandman create demo
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
Enable services.
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
sandman enable compute storage cloudrun
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Connect to the environment.
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
sandman connect demo
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Destroy the environment when finished.
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
sandman destroy demo
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## Example Workflow
|
|
126
|
-
|
|
127
|
-
Create a sandbox for testing.
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
sandman init gcp
|
|
131
|
-
sandman create demo-env
|
|
132
|
-
sandman enable compute storage cloudrun
|
|
133
|
-
sandman connect demo-env
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
Run your application or tests against the environment.
|
|
137
|
-
|
|
138
|
-
Then destroy it when finished.
|
|
139
|
-
|
|
140
|
-
```bash
|
|
141
|
-
sandman destroy demo-env
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Commands
|
|
147
|
-
|
|
148
|
-
### Initialize provider
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
sandman init aws
|
|
152
|
-
sandman init gcp
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
Authenticates and configures credentials.
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
### Create environment
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
sandman create <environment-name>
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
Example:
|
|
166
|
-
|
|
167
|
-
```bash
|
|
168
|
-
sandman create demo
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
### Enable services
|
|
174
|
-
|
|
175
|
-
AWS example:
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
sandman enable ec2 s3 lambda
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
GCP example:
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
sandman enable compute storage cloudrun
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
### List environments
|
|
190
|
-
|
|
191
|
-
```bash
|
|
192
|
-
sandman list
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
### Connect environment
|
|
198
|
-
|
|
199
|
-
```bash
|
|
200
|
-
sandman connect <environment-name>
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
Outputs environment credentials.
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
### Destroy environment
|
|
208
|
-
|
|
209
|
-
```bash
|
|
210
|
-
sandman destroy <environment-name>
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
Deletes all associated resources.
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## Architecture
|
|
218
|
-
|
|
219
|
-
Sandman consists of three layers.
|
|
220
|
-
|
|
221
|
-
CLI
|
|
222
|
-
↓
|
|
223
|
-
Provisioning Engine
|
|
224
|
-
↓
|
|
225
|
-
Cloud Provider APIs
|
|
226
|
-
|
|
227
|
-
Components:
|
|
228
|
-
|
|
229
|
-
- CLI layer
|
|
230
|
-
- Provisioning engine
|
|
231
|
-
- Provider adapters
|
|
232
|
-
|
|
233
|
-
---
|
|
234
|
-
|
|
235
71
|
## Providers
|
|
236
72
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
---
|
|
247
|
-
|
|
248
|
-
### GCP
|
|
249
|
-
|
|
250
|
-
Uses Google Cloud APIs to provision:
|
|
251
|
-
|
|
252
|
-
- projects
|
|
253
|
-
- billing connections
|
|
254
|
-
- cloud run
|
|
255
|
-
- storage buckets
|
|
256
|
-
- service accounts
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
## Use Cases
|
|
261
|
-
|
|
262
|
-
### DevTool demos
|
|
263
|
-
|
|
264
|
-
Create disposable environments for product demos.
|
|
265
|
-
|
|
266
|
-
### Rapid experimentation
|
|
73
|
+
| Provider | Status |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| AWS | ✅ Supported |
|
|
76
|
+
| GCP | ✅ Supported |
|
|
77
|
+
| Cloudflare | 🧪 Experimental |
|
|
78
|
+
| Vercel | 🧪 Experimental |
|
|
79
|
+
| DigitalOcean | 🚧 Planned |
|
|
80
|
+
| Render | 🚧 Planned |
|
|
267
81
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
### Learning cloud infrastructure
|
|
271
|
-
|
|
272
|
-
Practice working with cloud services without maintaining long-lived infrastructure.
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
## Project Structure
|
|
277
|
-
|
|
278
|
-
```
|
|
279
|
-
sandman/
|
|
280
|
-
|
|
281
|
-
src/
|
|
282
|
-
cli/
|
|
283
|
-
providers/
|
|
284
|
-
templates/
|
|
285
|
-
utils/
|
|
286
|
-
|
|
287
|
-
docs/
|
|
288
|
-
PRD.md
|
|
289
|
-
|
|
290
|
-
package.json
|
|
291
|
-
```
|
|
82
|
+
Run `sandman providers` to see the live capability matrix.
|
|
292
83
|
|
|
293
84
|
---
|
|
294
85
|
|
|
295
86
|
## Roadmap
|
|
296
87
|
|
|
297
|
-
|
|
88
|
+
- Environment templates
|
|
89
|
+
- Multi-cloud provisioning (Cloudflare / Vercel beyond experimental)
|
|
90
|
+
- GitHub demo environments
|
|
91
|
+
- Local testing environments
|
|
298
92
|
|
|
299
|
-
|
|
300
|
-
• Multi-cloud provisioning
|
|
301
|
-
• GitHub demo environments
|
|
302
|
-
• Local testing environments
|
|
93
|
+
See the [issue tracker](https://github.com/BoringInfraCo/Sandman/issues) for the full list.
|
|
303
94
|
|
|
304
95
|
---
|
|
305
96
|
|
|
306
97
|
## Contributing
|
|
307
98
|
|
|
308
|
-
Pull requests are welcome.
|
|
309
|
-
|
|
310
|
-
To contribute:
|
|
311
|
-
|
|
312
|
-
```bash
|
|
313
|
-
git clone https://github.com/your-org/sandman
|
|
314
|
-
cd sandman
|
|
315
|
-
npm install
|
|
316
|
-
npm run dev
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
---
|
|
99
|
+
Pull requests are welcome. Clone the repo, run `npm install` and `npm test`, and open a PR.
|
|
320
100
|
|
|
321
101
|
## License
|
|
322
102
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-contract.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cli-contract.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { promises as fs } from "fs";
|
|
3
|
+
import { StateStore } from "../../core/state-store.js";
|
|
4
|
+
import { createEnvironment } from "./create.js";
|
|
5
|
+
import { destroyEnvironment } from "./destroy.js";
|
|
6
|
+
import { enableServices } from "./enable.js";
|
|
7
|
+
import { statusEnvironment } from "./status.js";
|
|
8
|
+
import { listProviders } from "./providers.js";
|
|
9
|
+
import { doctor } from "./doctor.js";
|
|
10
|
+
const testConfigPath = "/tmp/sandman-cli-command-tests.json";
|
|
11
|
+
function mockExit() {
|
|
12
|
+
return vi.spyOn(process, "exit").mockImplementation(((code) => {
|
|
13
|
+
throw new Error(`EXIT:${code}`);
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
describe("CLI commands", () => {
|
|
17
|
+
afterEach(async () => {
|
|
18
|
+
vi.restoreAllMocks();
|
|
19
|
+
try {
|
|
20
|
+
await fs.unlink(testConfigPath);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// ignore
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
await fs.unlink(`${testConfigPath}.lock`);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// ignore
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
it("rejects unsafe environment names in JSON mode", async () => {
|
|
33
|
+
const store = new StateStore(testConfigPath);
|
|
34
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
35
|
+
mockExit();
|
|
36
|
+
await expect(createEnvironment("Bad Name", { provider: "aws" }, store, {
|
|
37
|
+
json: true,
|
|
38
|
+
dryRun: true,
|
|
39
|
+
})).rejects.toThrow(/EXIT:1/);
|
|
40
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
41
|
+
expect(parsed.success).toBe(false);
|
|
42
|
+
expect(parsed.code).toBe("INVALID_NAME");
|
|
43
|
+
});
|
|
44
|
+
it("does not hang on destroy --json without -y", async () => {
|
|
45
|
+
const store = new StateStore(testConfigPath);
|
|
46
|
+
await store.saveEnvironment({
|
|
47
|
+
name: "demo",
|
|
48
|
+
provider: "aws",
|
|
49
|
+
status: "active",
|
|
50
|
+
services: [],
|
|
51
|
+
resources: {},
|
|
52
|
+
createdAt: "2026-01-01T00:00:00.000Z",
|
|
53
|
+
updatedAt: "2026-01-01T00:00:00.000Z",
|
|
54
|
+
});
|
|
55
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
56
|
+
mockExit();
|
|
57
|
+
await expect(destroyEnvironment("demo", store, { confirmed: false, json: true })).rejects.toThrow(/EXIT:1/);
|
|
58
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
59
|
+
expect(parsed.code).toBe("CONFIRMATION_REQUIRED");
|
|
60
|
+
expect(parsed.next[0]).toContain("-y");
|
|
61
|
+
});
|
|
62
|
+
it("returns JSON for status when the environment is missing", async () => {
|
|
63
|
+
const store = new StateStore(testConfigPath);
|
|
64
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
65
|
+
mockExit();
|
|
66
|
+
await expect(statusEnvironment("missing", store, { json: true })).rejects.toThrow(/EXIT:1/);
|
|
67
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
68
|
+
expect(parsed.success).toBe(false);
|
|
69
|
+
expect(parsed.code).toBe("NOT_FOUND");
|
|
70
|
+
});
|
|
71
|
+
it("lists valid Cloudflare services instead of crashing", async () => {
|
|
72
|
+
const store = new StateStore(testConfigPath);
|
|
73
|
+
await store.saveEnvironment({
|
|
74
|
+
name: "cf-demo",
|
|
75
|
+
provider: "cloudflare",
|
|
76
|
+
status: "active",
|
|
77
|
+
services: [],
|
|
78
|
+
resources: {},
|
|
79
|
+
createdAt: "2026-01-01T00:00:00.000Z",
|
|
80
|
+
updatedAt: "2026-01-01T00:00:00.000Z",
|
|
81
|
+
});
|
|
82
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
83
|
+
mockExit();
|
|
84
|
+
await expect(enableServices(["not-a-service"], "cf-demo", store, { json: true })).rejects.toThrow(/EXIT:1/);
|
|
85
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
86
|
+
expect(parsed.code).toBe("INVALID_SERVICE");
|
|
87
|
+
expect(parsed.validServices).toContain("workers");
|
|
88
|
+
});
|
|
89
|
+
it("exposes provider maturity for agents", async () => {
|
|
90
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
91
|
+
await listProviders({ json: true });
|
|
92
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
93
|
+
expect(parsed.success).toBe(true);
|
|
94
|
+
const cf = parsed.providers.find((p) => p.id === "cloudflare");
|
|
95
|
+
expect(cf.maturity).toBe("experimental");
|
|
96
|
+
const aws = parsed.providers.find((p) => p.id === "aws");
|
|
97
|
+
expect(aws.maturity).toBe("supported");
|
|
98
|
+
});
|
|
99
|
+
it("allows recreate after destroy via dry-run", async () => {
|
|
100
|
+
const store = new StateStore(testConfigPath);
|
|
101
|
+
await store.saveEnvironment({
|
|
102
|
+
name: "demo",
|
|
103
|
+
provider: "aws",
|
|
104
|
+
status: "destroyed",
|
|
105
|
+
services: [],
|
|
106
|
+
resources: {},
|
|
107
|
+
createdAt: "2026-01-01T00:00:00.000Z",
|
|
108
|
+
updatedAt: "2026-01-01T00:00:00.000Z",
|
|
109
|
+
});
|
|
110
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
111
|
+
await createEnvironment("demo", { provider: "aws" }, store, {
|
|
112
|
+
json: true,
|
|
113
|
+
dryRun: true,
|
|
114
|
+
});
|
|
115
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
116
|
+
expect(parsed.success).toBe(true);
|
|
117
|
+
expect(parsed.dryRun).toBe(true);
|
|
118
|
+
expect(parsed.name).toBe("demo");
|
|
119
|
+
});
|
|
120
|
+
it("rejects recreate when the existing record is still active", async () => {
|
|
121
|
+
const store = new StateStore(testConfigPath);
|
|
122
|
+
await store.saveEnvironment({
|
|
123
|
+
name: "demo",
|
|
124
|
+
provider: "aws",
|
|
125
|
+
status: "active",
|
|
126
|
+
services: [],
|
|
127
|
+
resources: {},
|
|
128
|
+
createdAt: "2026-01-01T00:00:00.000Z",
|
|
129
|
+
updatedAt: "2026-01-01T00:00:00.000Z",
|
|
130
|
+
});
|
|
131
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
132
|
+
mockExit();
|
|
133
|
+
await expect(createEnvironment("demo", { provider: "aws" }, store, {
|
|
134
|
+
json: true,
|
|
135
|
+
dryRun: true,
|
|
136
|
+
})).rejects.toThrow(/EXIT:1/);
|
|
137
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
138
|
+
expect(parsed.code).toBe("ALREADY_EXISTS");
|
|
139
|
+
});
|
|
140
|
+
it("passes the requested region through dry-run create", async () => {
|
|
141
|
+
const store = new StateStore(testConfigPath);
|
|
142
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
143
|
+
await createEnvironment("demo", { provider: "aws", region: "eu-west-1" }, store, { json: true, dryRun: true });
|
|
144
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
145
|
+
expect(parsed.success).toBe(true);
|
|
146
|
+
expect(parsed.region).toBe("eu-west-1");
|
|
147
|
+
});
|
|
148
|
+
it("rejects an invalid create TTL", async () => {
|
|
149
|
+
const store = new StateStore(testConfigPath);
|
|
150
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
151
|
+
mockExit();
|
|
152
|
+
await expect(createEnvironment("demo", { provider: "aws", ttl: "two-hours" }, store, { json: true, dryRun: true })).rejects.toThrow(/EXIT:1/);
|
|
153
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
154
|
+
expect(parsed.code).toBe("INVALID_TTL");
|
|
155
|
+
});
|
|
156
|
+
it("passes ttl, billing, and strict through dry-run create", async () => {
|
|
157
|
+
const store = new StateStore(testConfigPath);
|
|
158
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
159
|
+
await createEnvironment("demo", { provider: "gcp", region: "us-central1", billingAccount: "AAAAAA-BBBBBB-CCCCCC", ttl: "2h" }, store, { json: true, dryRun: true, strict: true });
|
|
160
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
161
|
+
expect(parsed.success).toBe(true);
|
|
162
|
+
expect(parsed.ttl).toBe("2h");
|
|
163
|
+
expect(parsed.expiresAt).toBeDefined();
|
|
164
|
+
expect(parsed.billingAccount).toBe("AAAAAA-BBBBBB-CCCCCC");
|
|
165
|
+
expect(parsed.strict).toBe(true);
|
|
166
|
+
});
|
|
167
|
+
it("reports local-only when enabling lambda on AWS", async () => {
|
|
168
|
+
const store = new StateStore(testConfigPath);
|
|
169
|
+
await store.saveEnvironment({
|
|
170
|
+
name: "demo",
|
|
171
|
+
provider: "aws",
|
|
172
|
+
status: "active",
|
|
173
|
+
services: [],
|
|
174
|
+
resources: { bucketName: "sandman-demo-1", instanceId: "i-1" },
|
|
175
|
+
createdAt: "2026-01-01T00:00:00.000Z",
|
|
176
|
+
updatedAt: "2026-01-01T00:00:00.000Z",
|
|
177
|
+
});
|
|
178
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
179
|
+
await enableServices(["lambda", "s3"], "demo", store, { json: true });
|
|
180
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
181
|
+
expect(parsed.success).toBe(true);
|
|
182
|
+
expect(parsed.mode).toBe("mixed");
|
|
183
|
+
expect(parsed.localOnly).toContain("lambda");
|
|
184
|
+
expect(parsed.provisioned).toContain("s3");
|
|
185
|
+
});
|
|
186
|
+
it("reaps an expired environment on status", async () => {
|
|
187
|
+
const store = new StateStore(testConfigPath);
|
|
188
|
+
await store.saveEnvironment({
|
|
189
|
+
name: "old",
|
|
190
|
+
provider: "cloudflare",
|
|
191
|
+
status: "active",
|
|
192
|
+
services: [],
|
|
193
|
+
resources: {},
|
|
194
|
+
createdAt: "2020-01-01T00:00:00.000Z",
|
|
195
|
+
updatedAt: "2020-01-01T00:00:00.000Z",
|
|
196
|
+
expiresAt: "2020-01-02T00:00:00.000Z",
|
|
197
|
+
ttl: "1h",
|
|
198
|
+
});
|
|
199
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
200
|
+
await statusEnvironment("old", store, { json: true });
|
|
201
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
202
|
+
expect(parsed.reaped).toBe(true);
|
|
203
|
+
expect(parsed.status).toBe("destroyed");
|
|
204
|
+
expect(await store.getEnvironment("old")).toBeUndefined();
|
|
205
|
+
});
|
|
206
|
+
it("prints doctor JSON without requiring cloud auth", async () => {
|
|
207
|
+
const store = new StateStore(testConfigPath);
|
|
208
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
209
|
+
await doctor(store, { json: true });
|
|
210
|
+
const parsed = JSON.parse(String(log.mock.calls[0][0]));
|
|
211
|
+
expect(parsed.success).toBe(true);
|
|
212
|
+
expect(parsed.initialized).toBe(false);
|
|
213
|
+
expect(parsed.configPath).toBe(testConfigPath);
|
|
214
|
+
expect(parsed.auth.VERCEL_TOKEN).toMatch(/set|missing/);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
//# sourceMappingURL=cli-contract.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-contract.test.js","sourceRoot":"","sources":["../../../src/cli/commands/cli-contract.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/connect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/connect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAMvD,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAiGf"}
|