@allstak/wizard 0.1.5 → 0.1.7

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 CHANGED
@@ -1,147 +1,71 @@
1
1
  # @allstak/wizard
2
2
 
3
- > **v0.1.4** — Unified installation and configuration wizard for AllStak SDKs.
3
+ [![npm version](https://img.shields.io/npm/v/@allstak/wizard)](https://www.npmjs.com/package/@allstak/wizard)
4
+ [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue)](./LICENSE)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue)](https://www.typescriptlang.org/)
4
6
 
5
- A Sentry-Wizard-style CLI that installs and configures AllStak SDKs in
6
- your project with one command where automation is complete, and shows
7
- Manual/light setup guidance where the runtime is Stable but automation is not
8
- finished. Designed to be **honest by default**: runtime stability and wizard
9
- automation maturity are separate claims.
10
-
11
- ## Public SDK Status
12
-
13
- | Integration | Runtime status | Wizard status | Notes |
14
- |-------------|----------------|-------------------|-------|
15
- | `js` (JavaScript / TypeScript) | Stable | Stable | Validated end-to-end; wizard can install and wire init. |
16
- | `react` (Vite or CRA) | Stable | Stable | Validated end-to-end; wizard can install and wire common app entry patterns. |
17
- | `react-native` (Expo + bare RN) | Stable | Manual/light | Runtime is Stable; wizard provides setup guidance. |
18
- | `next` (13+, app + pages router) | Beta | Beta | Runtime is Beta (certification score 32); wizard provides App Router and pages-router onboarding. Edge Runtime and Server Actions are not certified. |
19
- | `java` (Java / Spring Boot) | Beta | Manual/light | Runtime is Beta (certification score 34); wizard provides setup guidance. |
20
- | `python` | Beta | Manual/light | Runtime is Beta (certification score 34); wizard provides setup guidance. |
21
- | `go` | Beta | Manual/light | Runtime is Beta (certification score 33); wizard provides setup guidance. |
22
-
23
- `allstak-wizard list` prints public runtime SDKs and makes wizard maturity
24
- explicit. Manual/light entries are setup guidance, not full automation.
25
-
26
- ## Install + run
7
+ One command to install and configure AllStak in any project.
27
8
 
28
9
  ```bash
29
- # Show help (also fetches and runs the package via npx).
30
- npx @allstak/wizard --help
31
-
32
- # Authenticate against AllStak (email OTP, optional 2FA).
33
- npx @allstak/wizard login
34
-
35
- # Configure your project (auto-detects React / Next / Node).
36
10
  npx @allstak/wizard -i react
37
-
38
- # Verify with a real test event roundtrip.
39
- npx @allstak/wizard doctor --live-probe \
40
- --api-key ask_live_... \
41
- --project-id <project-uuid>
42
11
  ```
43
12
 
44
- Five-minute walkthrough: [`docs/beta/quickstart.md`](./docs/beta/quickstart.md).
13
+ ## Features
45
14
 
46
- ## Authentication
15
+ - **Auto-detection** -- detects your framework and wires the right SDK automatically
16
+ - **Safe mutations** -- every file change is snapshotted and fully reversible
17
+ - **Doctor** -- diagnoses connectivity, config, and integration health in seconds
18
+ - **Dry-run mode** -- preview every change before writing a single file
19
+ - **CI-friendly** -- supports API key auth and `--json` output for automation
20
+ - **Self-hosted ready** -- configurable API, ingest, and dashboard endpoints
47
21
 
48
- Real AllStak auth flow — no fake endpoints. Backed by the verified
49
- `/api/v1/auth/*` endpoints on `api.allstak.sa`.
22
+ ## Quickstart
50
23
 
51
24
  ```bash
52
- allstak-wizard login # email OTP → JWT pair stored in OS keychain
53
- allstak-wizard whoami [--verify] # show current user; --verify round-trips /auth/me
54
- allstak-wizard logout # revoke session + clear local credentials
55
- ```
56
-
57
- Supports:
58
-
59
- - **Email OTP** primary flow (`/api/v1/auth/request-otp` → `/api/v1/auth/verify-otp`).
60
- - **TOTP** second factor when enabled on the account.
61
- - **JWT refresh** with proactive 60s pre-expiry refresh + token rotation.
62
- - **CI mode** via `--api-key` / `ALLSTAK_API_KEY` (skip login entirely).
63
- - **Cross-platform credential storage**: macOS Keychain, Linux Secret
64
- Service (`secret-tool`), AES-256-GCM encrypted-file fallback.
65
-
66
- `--api-key` is for project-scoped data-plane operations (sending events).
67
- The user JWT is for control-plane operations (orgs, projects, doctor). The
68
- two are NOT interchangeable — that mirrors the backend's design.
69
-
70
- ## Commands
71
-
72
- ```
73
- init [-i <integration>] [--api-key|--org|--project|--release|...] [--dry-run] [-y]
74
- doctor [-i <integration>] [--live-probe --api-key --project-id <uuid>]
75
- repair -i <integration> [--dry-run]
76
- uninstall -i <integration> [-y] [--dry-run]
77
- list
78
-
79
- login [--email <e> --code <c>] [--totp <c>]
80
- logout [--local-only]
81
- whoami [--verify]
82
-
83
- orgs list
84
- projects list [--org <id>]
85
- projects create [--name --slug --platform --with-api-key]
86
-
87
- restore list
88
- restore show <id|latest>
89
- restore apply <id|latest> [--files=a,b,c] [--dry-run] [-y]
90
- restore diff <id|latest>
91
-
92
- config validate
93
- config migrate [--dry-run]
94
- ```
25
+ # 1. Authenticate
26
+ npx @allstak/wizard login
95
27
 
96
- Global flags:
28
+ # 2. Install an SDK into your project
29
+ npx @allstak/wizard -i react
97
30
 
31
+ # 3. Verify the setup
32
+ npx @allstak/wizard doctor
98
33
  ```
99
- --debug verbose debug logging
100
- --json machine-readable output to stdout (status text → stderr)
101
- --no-telemetry disable anonymous usage telemetry for this run
102
- --telemetry-debug print the telemetry payload to stderr without sending
103
- ```
104
-
105
- ## Telemetry & privacy
106
34
 
107
- **Default provider is `noopTelemetry`** the wizard does not phone home in
108
- beta. An HTTP provider exists (`httpTelemetry({ endpoint })`) for operators
109
- to wire in once a backend telemetry endpoint is decided on.
110
-
111
- Three independent ways to opt out, any one suffices:
112
-
113
- ```bash
114
- npx @allstak/wizard --no-telemetry ...
115
- ALLSTAK_WIZARD_TELEMETRY=0 npx @allstak/wizard ...
116
- # Or: leave the default noop provider in place (no operator config).
117
- ```
35
+ The wizard installs the SDK, patches your entry files, and configures source maps. Run `doctor` at any time to validate the integration.
118
36
 
119
- Inspect what _would_ be sent:
37
+ ## Supported Integrations
120
38
 
121
- ```bash
122
- npx @allstak/wizard --telemetry-debug -i react --dry-run
123
- ```
39
+ | Integration | Runtime | Wizard |
40
+ |---|---|---|
41
+ | `js` (JavaScript / TypeScript) | Stable | Stable |
42
+ | `react` (Vite or CRA) | Stable | Stable |
43
+ | `react-native` (Expo + bare RN) | Stable | Setup guide |
44
+ | `next` (13+, App + Pages router) | Beta | Beta |
45
+ | `java` (Spring Boot) | Beta | Setup guide |
46
+ | `python` | Beta | Setup guide |
47
+ | `go` | Beta | Setup guide |
124
48
 
125
- The wizard's payload type is the entire on-the-wire contract. We do **NOT**
126
- collect:
49
+ Run `npx @allstak/wizard list` to see all available integrations.
127
50
 
128
- - API keys, DSNs, refresh tokens, OAuth secrets
129
- - Org names, project names, project ids, org ids
130
- - File paths (absolute or relative)
131
- - Env-var values
132
- - Source code, error message text, stack frames
133
- - Email addresses, IP addresses, hostnames
51
+ ## Commands
134
52
 
135
- We do collect: wizard version, command, integration id, stability level,
136
- OS family + major, Node major, package manager, outcome, stage, canonical
137
- error code (no message text), `rollbackTriggered` (boolean), `durationMs`.
53
+ | Command | Description |
54
+ |---|---|
55
+ | `login` | Authenticate via email OTP (with optional TOTP) |
56
+ | `init -i <integration>` | Install and configure an SDK |
57
+ | `doctor` | Run diagnostic checks on your setup |
58
+ | `repair -i <integration>` | Fix a broken integration in place |
59
+ | `uninstall -i <integration>` | Cleanly remove an SDK |
60
+ | `restore list / apply / diff` | Browse and restore file snapshots |
61
+ | `config validate` | Check your project config file |
62
+ | `whoami` | Show the current authenticated user |
138
63
 
139
- Full contract: [`docs/beta/privacy.md`](./docs/beta/privacy.md).
64
+ All commands support `--dry-run`, `--json`, and `--debug`. See `npx @allstak/wizard --help` for the full reference.
140
65
 
141
- ## Config (`allstak.config.{ts,mjs,js,cjs,json}`)
66
+ ## Configuration
142
67
 
143
- Optional project-level config so you don't repeat `--org`, `--project`,
144
- `--host`, etc. on every wizard invocation.
68
+ Create an optional `allstak.config.ts` (or `.mjs`, `.js`, `.cjs`, `.json`) to avoid repeating flags:
145
69
 
146
70
  ```ts
147
71
  import { defineConfig } from '@allstak/wizard/config';
@@ -152,180 +76,63 @@ export default defineConfig({
152
76
  project: 'my-project',
153
77
  environment: 'production',
154
78
  release: process.env.GIT_SHA,
155
- sourceMaps: {
156
- enabled: true,
157
- ignore: ['node_modules'],
158
- },
159
- selfHosted: {
160
- apiHost: 'https://api.allstak.example',
161
- ingestHost: 'https://api.allstak.example',
162
- dashboardHost: 'https://app.allstak.example',
163
- },
79
+ sourceMaps: { enabled: true, ignore: ['node_modules'] },
164
80
  });
165
81
  ```
166
82
 
167
- **Precedence:** `CLI flag > env var > config file > built-in default`.
83
+ Precedence: CLI flag > environment variable > config file > built-in default.
168
84
 
169
- Validate:
85
+ Full reference: [docs/config.md](./docs/beta/config.md)
170
86
 
171
- ```bash
172
- allstak-wizard config validate
173
- ```
87
+ ## Doctor
174
88
 
175
- Migrate to a new schema version:
89
+ Doctor runs a fixed sequence of checks -- auth, reachability, config, integration, event ingest, release linkage, and source maps -- and reports `pass`, `warn`, `fail`, or `skip` with an actionable fix for each.
176
90
 
177
91
  ```bash
178
- allstak-wizard config migrate --dry-run # preview
179
- allstak-wizard config migrate # rewrites .json in place
180
- ```
181
-
182
- Full reference: [`docs/beta/config.md`](./docs/beta/config.md).
92
+ # Offline checks only
93
+ npx @allstak/wizard doctor
183
94
 
184
- ## Doctor (deterministic diagnostics)
185
-
186
- ```bash
187
- allstak-wizard doctor # offline check
188
- allstak-wizard doctor --live-probe \ # send + verify a real event
95
+ # Full live verification (sends a test event and confirms ingestion)
96
+ npx @allstak/wizard doctor --live-probe \
189
97
  --api-key ask_live_... --project-id <uuid>
190
98
  ```
191
99
 
192
- Runs seven named stages in fixed order — `auth → reachability → config →
193
- integration → event-ingest → release-linkage → source-maps`. Each stage
194
- reports `pass`/`warn`/`fail`/`skip` with an actionable fix. Live probe POSTs
195
- to `/ingest/v1/errors`, polls `/api/v1/errors`, and prints the dashboard URL
196
- of the captured event.
100
+ Full reference: [docs/doctor.md](./docs/beta/doctor.md)
197
101
 
198
- Full reference: [`docs/beta/doctor.md`](./docs/beta/doctor.md).
102
+ ## Privacy
199
103
 
200
- SDK reliability and outage behavior are documented in
201
- [`docs/beta/reliability.md`](./docs/beta/reliability.md). Wizard-generated
202
- runtime integrations must be fail-open: AllStak ingest outages should drop or
203
- delay telemetry, not break the host application.
104
+ The wizard collects minimal anonymous usage telemetry (version, command, OS family, outcome). It never collects API keys, file paths, source code, or personally identifiable information.
204
105
 
205
- ## Restore (persistent snapshots)
206
-
207
- Every wizard mutation is captured under
208
- `.allstak-wizard/backups/<id>/manifest.json` plus per-file pre-images.
106
+ Opt out with any of:
209
107
 
210
108
  ```bash
211
- allstak-wizard restore list
212
- allstak-wizard restore show latest
213
- allstak-wizard restore diff latest
214
- allstak-wizard restore apply latest [--files=src/main.tsx]
109
+ npx @allstak/wizard --no-telemetry ...
110
+ ALLSTAK_WIZARD_TELEMETRY=0 npx @allstak/wizard ...
215
111
  ```
216
112
 
217
- Full reference: [`docs/beta/restore.md`](./docs/beta/restore.md).
113
+ Full policy: [docs/privacy.md](./docs/beta/privacy.md)
218
114
 
219
- ## Error codes
220
-
221
- 22 canonical error codes — stable across releases (added; never renamed).
222
- Both human and `--json` output expose `{code, stage, subcode?, message,
223
- hint}`. Catalog: [`docs/errors.md`](./docs/errors.md).
224
-
225
- ```bash
226
- $ allstak-wizard --json -i react -y --skip-deps
227
- {
228
- "outcome": "failure",
229
- "errorCode": "E_AUTH_REQUIRED",
230
- "data": { "error": {
231
- "code": "E_AUTH_REQUIRED",
232
- "stage": "auth",
233
- "subcode": "E_MISSING_KEY",
234
- "message": "...",
235
- "hint": "Pass --api-key or run `allstak login`."
236
- } }
237
- }
238
- ```
115
+ ## Self-Hosted Deployments
239
116
 
240
- Exit codes: `0` success, `2` `WizardError`, `130` user cancellation.
241
-
242
- ## Self-hosted
243
-
244
- Pass `--host`, `--ingest-host`, `--dashboard-host` directly, or set
245
- `selfHosted.*` in `allstak.config.*`. The wizard never assumes
246
- `api.allstak.sa`.
247
-
248
- **Caveat:** `allstak-java-sdk` currently hardcodes its host. Until that
249
- SDK ships a configurable `host` field, the wizard's `--host` flag is a
250
- no-op for `-i java`. Spec for the SDK fix:
251
- [`docs/architecture/v02-java-host-fix-spec.md`](./docs/architecture/v02-java-host-fix-spec.md).
252
-
253
- ## Architecture
254
-
255
- - **Registry** — every integration is an `Integration` object with
256
- `detect`, `plan`, `install`, `patch`, `validate`, `uninstall`, `repair`,
257
- `doctor` methods. New integrations register themselves; the CLI is
258
- integration-agnostic.
259
- - **Transaction** — every file mutation snapshots before write, syntax-
260
- validates after write, and rolls back the entire batch on any failure.
261
- - **Persistent snapshots** — alongside in-memory rollback, every run
262
- writes a backup under `.allstak-wizard/backups/<id>/` for cross-run
263
- recovery via `restore`.
264
- - **Markers** — every injected region wrapped with `>>> allstak-wizard:v1`
265
- markers. Re-runs replace in place (idempotent). `uninstall` removes the
266
- block cleanly.
267
- - **AST patching** — `magicast` (recast under the hood) for JS/TS imports;
268
- managed-block hints for non-AST patches (Vite plugins, Next config).
269
- - **Dry-run** — every command supports `--dry-run`; transaction layer
270
- captures the diff and skips disk writes.
271
- - **Source-map providers** — pluggable abstraction (`vite`, `webpack`,
272
- `next`, `metro`); integrations select a provider by id.
273
- - **Lifecycle hooks** — `beforeInstall`/`afterInstall`/`beforePatch`/
274
- `afterPatch`/`beforeRollback`/`afterRollback`/`beforeUninstall`/
275
- `afterUninstall` for telemetry + plugin extensions.
276
-
277
- Full design docs: [`docs/architecture/`](./docs/architecture/).
278
-
279
- ## Development from source
117
+ Point the wizard at your own AllStak instance:
280
118
 
281
119
  ```bash
282
- cd /path/to/sdks/allstak-wizard
283
- npm install
284
- npm run type-check # tsc --noEmit (clean)
285
- npm test # 157 tests, ~5s
286
- npm run build # emits dist/ with .d.ts + source maps
287
- npx tsx src/cli.ts --help # run from source
288
-
289
- # Smoke against a fixture (no network, no SDK install):
290
- cd fixtures/react-vite
291
- ALLSTAK_API_KEY=ask_test \
292
- npx --prefix ../.. tsx ../../src/cli.ts -i react --dry-run -y --skip-deps
120
+ npx @allstak/wizard -i react \
121
+ --host https://api.allstak.example \
122
+ --ingest-host https://api.allstak.example \
123
+ --dashboard-host https://app.allstak.example
293
124
  ```
294
125
 
295
- ## Testing
296
-
297
- | Status | Count |
298
- |--------|-------|
299
- | Type-check | clean |
300
- | Unit + integration tests | **157 / 157** passing |
301
- | Build | clean (.js + .d.ts + source maps) |
302
-
303
- Tests run on temp-dir fixtures (no network, no real SDK install) and
304
- validate idempotency, rollback, dry-run, restore round-trip, error catalog
305
- coverage, telemetry payload contract, and config migration plumbing.
126
+ Or set `selfHosted` in your config file. See [docs/config.md](./docs/beta/config.md) for details.
306
127
 
307
- ## Roadmap
128
+ ## Links
308
129
 
309
- Beta is shipping intentionally narrow. v0.2 priorities:
310
-
311
- 1. **Bare React Native** — Podfile + Gradle patchers + iOS/Android
312
- validation matrix. Spec:
313
- [`docs/architecture/v02-bare-react-native-spec.md`](./docs/architecture/v02-bare-react-native-spec.md).
314
- 2. **Source-maps end-to-end** — upload + symbolication round-trip against
315
- `/api/v1/sourcemaps/upload`. Spec:
316
- [`docs/architecture/v02-sourcemaps-e2e-spec.md`](./docs/architecture/v02-sourcemaps-e2e-spec.md).
317
- 3. **Astro support** — currently falls through to `js` (env vars only).
318
- 4. **Java SDK host fix** — coordinate with `allstak-java-sdk` to make
319
- host configurable.
320
- 5. **Backend SDK framework wiring** — NestJS `main.ts`, Spring Boot
321
- `application.yml`, Django/FastAPI/Flask/Rails/.NET/Go/PHP entry-point
322
- patching with per-framework fixture validation.
323
- 6. **Telemetry HTTP endpoint** — backend contract pending.
130
+ - [Documentation](https://docs.allstak.sa)
131
+ - [Dashboard](https://app.allstak.sa)
132
+ - [Issues](https://github.com/allstak-io/sdks/issues)
133
+ - [Architecture](./docs/architecture/)
134
+ - [Changelog](./CHANGELOG.md)
324
135
 
325
136
  ## License
326
137
 
327
- Apache-2.0 see [`LICENSE`](./LICENSE).
328
-
329
- ## Issues
330
-
331
- [github.com/allstak-io/sdks/issues](https://github.com/allstak-io/sdks/issues)
138
+ Apache-2.0 -- see [LICENSE](./LICENSE).
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC9D,IAAI,EAAE,QAAQ,CAAC;IACf,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,8FAA8F;IAC9F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yGAAyG;IACzG,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,oBAAoB;IACpB,EAAE,EAAE,OAAO,CAAC;CACb;AAID,wBAAsB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA2E5F"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC9D,IAAI,EAAE,QAAQ,CAAC;IACf,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,8FAA8F;IAC9F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yGAAyG;IACzG,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,oBAAoB;IACpB,EAAE,EAAE,OAAO,CAAC;CACb;AAID,wBAAsB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA6E5F"}
package/dist/api/http.js CHANGED
@@ -60,7 +60,9 @@ export async function apiRequest(host, init) {
60
60
  }
61
61
  }
62
62
  if (res.ok) {
63
- return { status: res.status, data: parsed, ok: true };
63
+ // Backend wraps all responses in { success, data, meta }. Unwrap if present.
64
+ const payload = isEnvelope(parsed) ? parsed.data : parsed;
65
+ return { status: res.status, data: payload, ok: true };
64
66
  }
65
67
  // Normalise backend error envelope.
66
68
  const body = parsed;
@@ -111,6 +113,9 @@ function redactUrl(url) {
111
113
  // Strip any token/api_key query — defensive even though we don't put secrets there.
112
114
  return url.replace(/(token|key|api_key)=[^&]+/gi, '$1=***');
113
115
  }
116
+ function isEnvelope(v) {
117
+ return v != null && typeof v === 'object' && 'success' in v && 'data' in v;
118
+ }
114
119
  function hintFor(code, status) {
115
120
  switch (code) {
116
121
  case 'INVALID_API_KEY':
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,7 @@ export interface BuiltContext {
31
31
  * - allstak.config.* discovery + load
32
32
  * - precedence resolution: CLI > env > config > defaults
33
33
  * - api-key resolution (with apiKeyOptional for read-only commands)
34
+ * - interactive project/key selection when logged in but no key provided
34
35
  * - lifecycle emitter creation
35
36
  */
36
37
  export declare function buildContext(opts: BuildContextOptions): Promise<BuiltContext>;
@@ -1 +1 @@
1
- {"version":3,"file":"_context.d.ts","sourceRoot":"","sources":["../../src/commands/_context.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAA6B,KAAK,oBAAoB,EAAkB,MAAM,oBAAoB,CAAC;AAE1G,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,aAAa,CAAC;IACnB,cAAc,EAAE,oBAAoB,CAAC;IACrC,4EAA4E;IAC5E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8CnF"}
1
+ {"version":3,"file":"_context.d.ts","sourceRoot":"","sources":["../../src/commands/_context.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAA6B,KAAK,oBAAoB,EAAkB,MAAM,oBAAoB,CAAC;AAG1G,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,aAAa,CAAC;IACnB,cAAc,EAAE,oBAAoB,CAAC;IACrC,4EAA4E;IAC5E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6DnF"}
@@ -1,8 +1,11 @@
1
+ import * as p from '@clack/prompts';
1
2
  import { findProjectRoot } from '../util/paths.js';
2
3
  import { detectFramework } from '../detect/index.js';
3
4
  import { LifecycleEmitter } from '../lifecycle/hooks.js';
4
- import { resolveApiKey } from '../api/auth.js';
5
+ import { resolveApiKey, loadUserCredentials } from '../api/auth.js';
6
+ import { listProjects, listApiKeys, createProject, createApiKey } from '../api/projects-client.js';
5
7
  import { loadConfig, resolveConfig } from '../config/index.js';
8
+ import { WizardError } from '../util/errors.js';
6
9
  /**
7
10
  * Shared context factory used by every command. Centralises:
8
11
  * - project-root detection
@@ -10,6 +13,7 @@ import { loadConfig, resolveConfig } from '../config/index.js';
10
13
  * - allstak.config.* discovery + load
11
14
  * - precedence resolution: CLI > env > config > defaults
12
15
  * - api-key resolution (with apiKeyOptional for read-only commands)
16
+ * - interactive project/key selection when logged in but no key provided
13
17
  * - lifecycle emitter creation
14
18
  */
15
19
  export async function buildContext(opts) {
@@ -30,19 +34,34 @@ export async function buildContext(opts) {
30
34
  };
31
35
  const resolvedConfig = resolveConfig(loaded?.config ?? null, cliInputs);
32
36
  let apiKey = '';
37
+ let resolvedProject = resolvedConfig.project ?? 'unknown';
38
+ let resolvedOrg = resolvedConfig.organization ?? 'unknown';
33
39
  try {
34
40
  apiKey = resolveApiKey({ apiKey: opts.apiKey });
35
41
  }
36
42
  catch (err) {
37
- if (!opts.apiKeyOptional)
38
- throw err;
43
+ if (opts.apiKeyOptional) {
44
+ // Read-only commands don't need an API key.
45
+ }
46
+ else {
47
+ // No explicit API key — try interactive project selection via stored credentials.
48
+ const host = resolvedConfig.hosts.api;
49
+ const resolved = await resolveApiKeyInteractively(host);
50
+ if (resolved) {
51
+ apiKey = resolved.apiKey;
52
+ resolvedProject = resolved.projectSlug;
53
+ }
54
+ else {
55
+ throw err;
56
+ }
57
+ }
39
58
  }
40
59
  const ctx = {
41
60
  projectRoot,
42
61
  cwd,
43
62
  apiKey,
44
- org: resolvedConfig.organization ?? 'unknown',
45
- project: resolvedConfig.project ?? 'unknown',
63
+ org: resolvedOrg,
64
+ project: resolvedProject,
46
65
  environment: resolvedConfig.environment,
47
66
  release: resolvedConfig.release,
48
67
  host: resolvedConfig.hosts.api,
@@ -58,4 +77,58 @@ export async function buildContext(opts) {
58
77
  };
59
78
  return { ctx, resolvedConfig, configSource: loaded?.source ?? null };
60
79
  }
80
+ async function resolveApiKeyInteractively(host) {
81
+ const creds = await loadUserCredentials(host);
82
+ if (!creds)
83
+ return null;
84
+ const projects = await listProjects(host, creds.accessToken);
85
+ if (projects.items.length === 0) {
86
+ const shouldCreate = await p.confirm({ message: 'No projects found. Create one?' });
87
+ if (p.isCancel(shouldCreate) || !shouldCreate)
88
+ return null;
89
+ const name = await p.text({
90
+ message: 'Project name:',
91
+ validate: (v) => (v.length >= 2 ? undefined : 'min 2 chars'),
92
+ });
93
+ if (p.isCancel(name))
94
+ return null;
95
+ const nameStr = String(name);
96
+ const slug = nameStr.toLowerCase().replace(/[^a-z0-9-]+/g, '-').replace(/^-|-$/g, '');
97
+ const proj = await createProject(host, creds.accessToken, { name: nameStr, slug });
98
+ const key = await createApiKey(host, creds.accessToken, proj.id, 'wizard-default');
99
+ if (!key.key) {
100
+ throw new WizardError('E_AUTH_REQUIRED', 'Created project but backend did not return an API key.', { subcode: 'E_KEY_CREATE_FAILED' });
101
+ }
102
+ return { apiKey: key.key, projectSlug: proj.slug };
103
+ }
104
+ let projectId;
105
+ let projectSlug;
106
+ if (projects.items.length === 1) {
107
+ projectId = projects.items[0].id;
108
+ projectSlug = projects.items[0].slug;
109
+ }
110
+ else {
111
+ const choice = await p.select({
112
+ message: 'Select a project:',
113
+ options: projects.items.map((proj) => ({
114
+ value: proj.id,
115
+ label: proj.name,
116
+ hint: proj.slug,
117
+ })),
118
+ });
119
+ if (p.isCancel(choice))
120
+ return null;
121
+ projectId = choice;
122
+ projectSlug = projects.items.find((proj) => proj.id === projectId)?.slug ?? 'unknown';
123
+ }
124
+ const keys = await listApiKeys(host, creds.accessToken, projectId);
125
+ if (keys.items.length > 0) {
126
+ // Existing keys don't include the raw value — create a new one.
127
+ }
128
+ const key = await createApiKey(host, creds.accessToken, projectId, 'wizard-default');
129
+ if (!key.key) {
130
+ throw new WizardError('E_AUTH_REQUIRED', 'Backend did not return an API key. Check project API key quota.', { subcode: 'E_KEY_CREATE_FAILED' });
131
+ }
132
+ return { apiKey: key.key, projectSlug };
133
+ }
61
134
  //# sourceMappingURL=_context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_context.js","sourceRoot":"","sources":["../../src/commands/_context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,aAAa,EAA6C,MAAM,oBAAoB,CAAC;AA4B1G;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAyB;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAc;QAC3B,YAAY,EAAE,IAAI,CAAC,GAAG;QACtB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,SAAS;QAClC,OAAO,EAAE,IAAI,CAAC,IAAI;QAClB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,cAAc,EAAE,IAAI,CAAC,cAAc;KACpC,CAAC;IACF,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,SAAS,CAAC,CAAC;IAExE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,MAAM,GAAG,CAAC;IACtC,CAAC;IAED,MAAM,GAAG,GAAkB;QACzB,WAAW;QACX,GAAG;QACH,MAAM;QACN,GAAG,EAAE,cAAc,CAAC,YAAY,IAAI,SAAS;QAC7C,OAAO,EAAE,cAAc,CAAC,OAAO,IAAI,SAAS;QAC5C,WAAW,EAAE,cAAc,CAAC,WAAW;QACvC,OAAO,EAAE,cAAc,CAAC,OAAO;QAC/B,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG;QAC9B,aAAa,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS;QAC7C,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM;QACvC,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,QAAQ;QACR,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;QAC5B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,KAAK;QACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;QAChC,cAAc,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO;QAClD,SAAS,EAAE,IAAI,gBAAgB,EAAE;KAClC,CAAC;IACF,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"_context.js","sourceRoot":"","sources":["../../src/commands/_context.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@allstak/wizard",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "AllStak SDK installation and configuration wizard. Lists public Stable runtimes, fully/assisted-wires JS, React, and Next.js, and keeps manual-light server SDK setup honest.",
5
5
  "type": "module",
6
6
  "bin": {
7
- "allstak-wizard": "./dist/cli.js"
7
+ "allstak-wizard": "./dist/cli.js",
8
+ "allstak": "./dist/cli.js"
8
9
  },
9
10
  "main": "./dist/index.js",
10
11
  "types": "./dist/index.d.ts",