@itssergio91/sandman 0.2.0 → 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 +54 -272
- 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
|
@@ -1,320 +1,102 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/ \_**_| | |
|
|
4
|
-
| (_** ** \_ \_ ** **| |\_ ** **\_ ** \_ _ **
|
|
5
|
-
\_** \ / _` | '_ \ / _` | '_ ` _ \ / _` | '_ \
|
|
6
|
-
\_**_) | (_| | | | | (_| | | | | | | (_| | | | |
|
|
7
|
-
|\_\_\_**/ \__,_|_| |_|\__,_|_| |_| |\_|\__,_|_| |_|
|
|
8
|
-
|
|
9
|
-
Provision disposable cloud environments in seconds.
|
|
10
|
-
|
|
11
|
-
Sandman is an open-source CLI that creates disposable cloud environments for AWS and GCP in seconds.
|
|
12
|
-
|
|
13
|
-
Perfect for:
|
|
14
|
-
|
|
15
|
-
- DevTool demos
|
|
16
|
-
- AI builders testing infrastructure
|
|
17
|
-
- Rapid prototyping
|
|
18
|
-
- Disposable sandbox environments
|
|
19
|
-
- Infrastructure experimentation
|
|
20
|
-
|
|
21
|
-
Instead of manually configuring billing, IAM, APIs, and services, Sandman spins up a working environment instantly.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## Why Sandman?
|
|
26
|
-
|
|
27
|
-
Creating cloud infrastructure manually is slow.
|
|
28
|
-
|
|
29
|
-
Even experienced engineers must:
|
|
30
|
-
|
|
31
|
-
### AWS
|
|
32
|
-
|
|
33
|
-
• configure IAM
|
|
34
|
-
• create VPCs
|
|
35
|
-
• provision compute
|
|
36
|
-
• configure credentials
|
|
37
|
-
|
|
38
|
-
### GCP
|
|
39
|
-
|
|
40
|
-
• create a project
|
|
41
|
-
• connect billing
|
|
42
|
-
• enable APIs
|
|
43
|
-
• configure service accounts
|
|
44
|
-
|
|
45
|
-
This can take **30–90 minutes**.
|
|
46
|
-
|
|
47
|
-
Sandman reduces that to **seconds**.
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## Features
|
|
52
|
-
|
|
53
|
-
• Create disposable cloud environments
|
|
54
|
-
• Automatic project provisioning
|
|
55
|
-
• Billing configuration helpers
|
|
56
|
-
• Enable common cloud services
|
|
57
|
-
• Credential management
|
|
58
|
-
• Environment teardown
|
|
59
|
-
|
|
60
|
-
Supported providers:
|
|
61
|
-
|
|
62
|
-
- AWS
|
|
63
|
-
- GCP
|
|
64
|
-
|
|
65
|
-
Future support:
|
|
66
|
-
|
|
67
|
-
- Cloudflare
|
|
68
|
-
- DigitalOcean
|
|
69
|
-
- Render
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
## Installation
|
|
74
|
-
|
|
75
|
-
### Using npm
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
npm install -g @itssergio91/sandman
|
|
79
|
-
```
|
|
1
|
+
# Sandman
|
|
80
2
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## Quick Start
|
|
90
|
-
|
|
91
|
-
Initialize a cloud provider.
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
sandman init gcp
|
|
3
|
+
```text
|
|
4
|
+
____ _
|
|
5
|
+
/ ___| __ _ _ __ __| |_ __ ___ __ _ _ __
|
|
6
|
+
\___ \ / _` | '_ \ / _` | '_ ` _ \ / _` | '_ \
|
|
7
|
+
___) | (_| | | | | (_| | | | | | | (_| | | | |
|
|
8
|
+
|____/ \__,_|_| |_|\__,_|_| |_| |_|\__,_|_| |_|
|
|
95
9
|
```
|
|
96
10
|
|
|
97
|
-
|
|
11
|
+
**Disposable cloud environments in seconds.**
|
|
98
12
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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.
|
|
102
17
|
|
|
103
|
-
|
|
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
|
|
104
22
|
|
|
105
|
-
|
|
106
|
-
sandman enable compute storage cloudrun
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
Connect to the environment.
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
sandman connect demo
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Destroy the environment when finished.
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
sandman destroy demo
|
|
119
|
-
```
|
|
23
|
+
All commands accept `--json` for machine-readable output, built for humans and agents alike.
|
|
120
24
|
|
|
121
25
|
---
|
|
122
26
|
|
|
123
|
-
##
|
|
124
|
-
|
|
125
|
-
Create a sandbox for testing.
|
|
27
|
+
## Quick start
|
|
126
28
|
|
|
127
29
|
```bash
|
|
128
|
-
sandman init gcp
|
|
129
|
-
sandman create demo
|
|
130
|
-
sandman enable compute storage cloudrun
|
|
131
|
-
sandman connect demo
|
|
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
|
|
132
35
|
```
|
|
133
36
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
Then destroy it when finished.
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
sandman destroy demo-env
|
|
140
|
-
```
|
|
37
|
+
For AWS, enable services with `sandman enable ec2 s3 lambda`.
|
|
141
38
|
|
|
142
39
|
---
|
|
143
40
|
|
|
144
41
|
## Commands
|
|
145
42
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
sandman
|
|
150
|
-
sandman
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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`) |
|
|
154
54
|
|
|
155
55
|
---
|
|
156
56
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
```bash
|
|
160
|
-
sandman create <environment-name>
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
Example:
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
sandman create demo
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
### Enable services
|
|
172
|
-
|
|
173
|
-
AWS example:
|
|
174
|
-
|
|
175
|
-
```bash
|
|
176
|
-
sandman enable ec2 s3 lambda
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
GCP example:
|
|
180
|
-
|
|
181
|
-
```bash
|
|
182
|
-
sandman enable compute storage cloudrun
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
### List environments
|
|
188
|
-
|
|
189
|
-
```bash
|
|
190
|
-
sandman list
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
---
|
|
194
|
-
|
|
195
|
-
### Connect environment
|
|
57
|
+
## Installation
|
|
196
58
|
|
|
197
59
|
```bash
|
|
198
|
-
|
|
60
|
+
npm install -g @itssergio91/sandman
|
|
199
61
|
```
|
|
200
62
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
### Destroy environment
|
|
63
|
+
Or run without installing:
|
|
206
64
|
|
|
207
65
|
```bash
|
|
208
|
-
sandman
|
|
66
|
+
npx @itssergio91/sandman
|
|
209
67
|
```
|
|
210
68
|
|
|
211
|
-
Deletes all associated resources.
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## Architecture
|
|
216
|
-
|
|
217
|
-
Sandman consists of three layers.
|
|
218
|
-
|
|
219
|
-
CLI
|
|
220
|
-
↓
|
|
221
|
-
Provisioning Engine
|
|
222
|
-
↓
|
|
223
|
-
Cloud Provider APIs
|
|
224
|
-
|
|
225
|
-
Components:
|
|
226
|
-
|
|
227
|
-
- CLI layer
|
|
228
|
-
- Provisioning engine
|
|
229
|
-
- Provider adapters
|
|
230
|
-
|
|
231
69
|
---
|
|
232
70
|
|
|
233
71
|
## Providers
|
|
234
72
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
### GCP
|
|
247
|
-
|
|
248
|
-
Uses Google Cloud APIs to provision:
|
|
249
|
-
|
|
250
|
-
- projects
|
|
251
|
-
- billing connections
|
|
252
|
-
- cloud run
|
|
253
|
-
- storage buckets
|
|
254
|
-
- service accounts
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## Use Cases
|
|
259
|
-
|
|
260
|
-
### DevTool demos
|
|
261
|
-
|
|
262
|
-
Create disposable environments for product demos.
|
|
263
|
-
|
|
264
|
-
### Rapid experimentation
|
|
73
|
+
| Provider | Status |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| AWS | ✅ Supported |
|
|
76
|
+
| GCP | ✅ Supported |
|
|
77
|
+
| Cloudflare | 🧪 Experimental |
|
|
78
|
+
| Vercel | 🧪 Experimental |
|
|
79
|
+
| DigitalOcean | 🚧 Planned |
|
|
80
|
+
| Render | 🚧 Planned |
|
|
265
81
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
### Learning cloud infrastructure
|
|
269
|
-
|
|
270
|
-
Practice working with cloud services without maintaining long-lived infrastructure.
|
|
271
|
-
|
|
272
|
-
---
|
|
273
|
-
|
|
274
|
-
## Project Structure
|
|
275
|
-
|
|
276
|
-
```
|
|
277
|
-
sandman/
|
|
278
|
-
|
|
279
|
-
src/
|
|
280
|
-
cli/
|
|
281
|
-
providers/
|
|
282
|
-
templates/
|
|
283
|
-
utils/
|
|
284
|
-
|
|
285
|
-
docs/
|
|
286
|
-
PRD.md
|
|
287
|
-
|
|
288
|
-
package.json
|
|
289
|
-
```
|
|
82
|
+
Run `sandman providers` to see the live capability matrix.
|
|
290
83
|
|
|
291
84
|
---
|
|
292
85
|
|
|
293
86
|
## Roadmap
|
|
294
87
|
|
|
295
|
-
|
|
88
|
+
- Environment templates
|
|
89
|
+
- Multi-cloud provisioning (Cloudflare / Vercel beyond experimental)
|
|
90
|
+
- GitHub demo environments
|
|
91
|
+
- Local testing environments
|
|
296
92
|
|
|
297
|
-
|
|
298
|
-
• Multi-cloud provisioning
|
|
299
|
-
• GitHub demo environments
|
|
300
|
-
• Local testing environments
|
|
93
|
+
See the [issue tracker](https://github.com/BoringInfraCo/Sandman/issues) for the full list.
|
|
301
94
|
|
|
302
95
|
---
|
|
303
96
|
|
|
304
97
|
## Contributing
|
|
305
98
|
|
|
306
|
-
Pull requests are welcome.
|
|
307
|
-
|
|
308
|
-
To contribute:
|
|
309
|
-
|
|
310
|
-
```bash
|
|
311
|
-
git clone https://github.com/your-org/sandman
|
|
312
|
-
cd sandman
|
|
313
|
-
npm install
|
|
314
|
-
npm run dev
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
---
|
|
99
|
+
Pull requests are welcome. Clone the repo, run `npm install` and `npm test`, and open a PR.
|
|
318
100
|
|
|
319
101
|
## License
|
|
320
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"}
|