sandstream-kit 1.5.0 → 1.8.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 +26 -0
- package/dist/bumblebee.js +23 -7
- package/dist/bumblebee.js.map +1 -1
- package/dist/cli.js +97 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.js +7 -1
- package/dist/config.js.map +1 -1
- package/dist/findings-track.d.ts +23 -0
- package/dist/findings-track.js +45 -0
- package/dist/findings-track.js.map +1 -0
- package/dist/heal.d.ts +53 -0
- package/dist/heal.js +119 -0
- package/dist/heal.js.map +1 -0
- package/dist/memory/db.d.ts +10 -0
- package/dist/memory/db.js +17 -1
- package/dist/memory/db.js.map +1 -1
- package/dist/memory/pal.d.ts +28 -0
- package/dist/memory/pal.js +51 -1
- package/dist/memory/pal.js.map +1 -1
- package/dist/service-registry.d.ts +54 -0
- package/dist/service-registry.js +248 -0
- package/dist/service-registry.js.map +1 -0
- package/dist/stack-detector.js +176 -55
- package/dist/stack-detector.js.map +1 -1
- package/dist/toml-generator.d.ts +4 -0
- package/dist/toml-generator.js +55 -99
- package/dist/toml-generator.js.map +1 -1
- package/dist/vault-meta.d.ts +7 -0
- package/dist/vault-meta.js +13 -0
- package/dist/vault-meta.js.map +1 -1
- package/package.json +2 -1
package/dist/toml-generator.js
CHANGED
|
@@ -1,82 +1,5 @@
|
|
|
1
1
|
import { VAULT_META } from "./vault-meta.js";
|
|
2
|
-
|
|
3
|
-
stripe: {
|
|
4
|
-
login: "stripe login",
|
|
5
|
-
check: "stripe config --list",
|
|
6
|
-
secrets: ["STRIPE_SECRET_KEY", "STRIPE_PUBLISHABLE_KEY", "STRIPE_WEBHOOK_SECRET"],
|
|
7
|
-
tool: "stripe",
|
|
8
|
-
},
|
|
9
|
-
supabase: {
|
|
10
|
-
login: "supabase login",
|
|
11
|
-
check: "supabase projects list",
|
|
12
|
-
secrets: ["NEXT_PUBLIC_SUPABASE_URL", "NEXT_PUBLIC_SUPABASE_ANON_KEY", "SUPABASE_SERVICE_ROLE_KEY"],
|
|
13
|
-
tool: "supabase",
|
|
14
|
-
},
|
|
15
|
-
vercel: {
|
|
16
|
-
login: "vercel login",
|
|
17
|
-
check: "vercel whoami",
|
|
18
|
-
secrets: [],
|
|
19
|
-
tool: "vercel",
|
|
20
|
-
},
|
|
21
|
-
expo: {
|
|
22
|
-
login: "eas login",
|
|
23
|
-
check: "eas whoami",
|
|
24
|
-
secrets: ["EXPO_TOKEN"],
|
|
25
|
-
tool: "eas-cli",
|
|
26
|
-
},
|
|
27
|
-
resend: {
|
|
28
|
-
login: "# resend — no CLI login; set RESEND_API_KEY in env",
|
|
29
|
-
check: "# resend — check RESEND_API_KEY is set",
|
|
30
|
-
secrets: ["RESEND_API_KEY", "RESEND_FROM_EMAIL"],
|
|
31
|
-
},
|
|
32
|
-
clerk: {
|
|
33
|
-
login: "# clerk — no CLI login; get keys from https://dashboard.clerk.com",
|
|
34
|
-
check: "# clerk — check CLERK_SECRET_KEY is set",
|
|
35
|
-
secrets: ["CLERK_SECRET_KEY", "NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY"],
|
|
36
|
-
},
|
|
37
|
-
liveblocks: {
|
|
38
|
-
login: "# liveblocks — no CLI login; get keys from https://liveblocks.io/dashboard",
|
|
39
|
-
check: "# liveblocks — check LIVEBLOCKS_SECRET_KEY is set",
|
|
40
|
-
secrets: ["LIVEBLOCKS_SECRET_KEY", "NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEY"],
|
|
41
|
-
},
|
|
42
|
-
trigger: {
|
|
43
|
-
login: "# trigger — no CLI login; get key from https://cloud.trigger.dev",
|
|
44
|
-
check: "# trigger — check TRIGGER_SECRET_KEY is set",
|
|
45
|
-
secrets: ["TRIGGER_SECRET_KEY"],
|
|
46
|
-
},
|
|
47
|
-
inngest: {
|
|
48
|
-
login: "# inngest — no CLI login; get keys from https://app.inngest.com",
|
|
49
|
-
check: "# inngest — check INNGEST_EVENT_KEY is set",
|
|
50
|
-
secrets: ["INNGEST_EVENT_KEY", "INNGEST_SIGNING_KEY"],
|
|
51
|
-
},
|
|
52
|
-
sentry: {
|
|
53
|
-
login: "# sentry — no CLI login; get DSN from https://sentry.io",
|
|
54
|
-
check: "# sentry — check SENTRY_DSN is set",
|
|
55
|
-
secrets: ["SENTRY_DSN", "SENTRY_ORG", "SENTRY_PROJECT", "SENTRY_AUTH_TOKEN"],
|
|
56
|
-
},
|
|
57
|
-
netlify: {
|
|
58
|
-
login: "netlify login",
|
|
59
|
-
check: "netlify status",
|
|
60
|
-
secrets: ["NETLIFY_AUTH_TOKEN", "NETLIFY_SITE_ID"],
|
|
61
|
-
tool: "netlify",
|
|
62
|
-
},
|
|
63
|
-
"cloudflare-pages": {
|
|
64
|
-
login: "wrangler login",
|
|
65
|
-
check: "wrangler whoami",
|
|
66
|
-
secrets: ["CLOUDFLARE_API_TOKEN", "CLOUDFLARE_ACCOUNT_ID"],
|
|
67
|
-
tool: "wrangler",
|
|
68
|
-
},
|
|
69
|
-
typeorm: {
|
|
70
|
-
login: "# typeorm — no CLI login; configure DATABASE_URL",
|
|
71
|
-
check: "# typeorm — check DATABASE_URL is set",
|
|
72
|
-
secrets: ["DATABASE_URL"],
|
|
73
|
-
},
|
|
74
|
-
mongoose: {
|
|
75
|
-
login: "# mongoose — no CLI login; configure MONGODB_URI",
|
|
76
|
-
check: "# mongoose — check MONGODB_URI is set",
|
|
77
|
-
secrets: ["MONGODB_URI"],
|
|
78
|
-
},
|
|
79
|
-
};
|
|
2
|
+
import { SERVICE_BY_ID } from "./service-registry.js";
|
|
80
3
|
const FRAMEWORK_SETUP = {
|
|
81
4
|
nextjs: { install: "pnpm install", dev: "pnpm dev", verify: "pnpm build" },
|
|
82
5
|
remix: { install: "pnpm install", dev: "pnpm dev", verify: "pnpm build" },
|
|
@@ -93,6 +16,11 @@ const FRAMEWORK_SETUP = {
|
|
|
93
16
|
fiber: { install: "go mod download", dev: "go run .", verify: "go build ./..." },
|
|
94
17
|
laravel: { install: "composer install", migrate: "php artisan migrate", verify: "php artisan test" },
|
|
95
18
|
symfony: { install: "composer install", verify: "php bin/console lint:all" },
|
|
19
|
+
// native mobile
|
|
20
|
+
"react-native": { install: "pnpm install", dev: "pnpm start", verify: "pnpm tsc --noEmit" },
|
|
21
|
+
flutter: { install: "flutter pub get", dev: "flutter run", verify: "flutter analyze" },
|
|
22
|
+
ios: { install: "pod install", verify: "swift build" },
|
|
23
|
+
android: { install: "./gradlew dependencies", verify: "./gradlew build" },
|
|
96
24
|
};
|
|
97
25
|
/**
|
|
98
26
|
* Security scanners kit installs by default, keyed by mise tool ref → version.
|
|
@@ -128,21 +56,43 @@ function toolsSection(tools) {
|
|
|
128
56
|
function servicesSection(services) {
|
|
129
57
|
const sections = [];
|
|
130
58
|
for (const svc of services) {
|
|
131
|
-
const
|
|
132
|
-
|
|
59
|
+
const def = SERVICE_BY_ID[svc];
|
|
60
|
+
// Only services with a login/check get a [services.X] block. ORM-only
|
|
61
|
+
// entries (prisma/drizzle) declare just deps+migrate, so they're skipped here.
|
|
62
|
+
if (!def?.login || !def.check)
|
|
133
63
|
continue;
|
|
134
64
|
// Tools are merged into [tools] by generateToml; here we only emit login/check.
|
|
135
|
-
sections.push(`[services.${svc}]\nlogin = "${
|
|
65
|
+
sections.push(`[services.${svc}]\nlogin = "${def.login}"\ncheck = "${def.check}"`);
|
|
136
66
|
}
|
|
137
67
|
return sections.join("\n\n");
|
|
138
68
|
}
|
|
139
|
-
|
|
69
|
+
/** Extract env keys from a `.env.example`/`.env.template` file body —
|
|
70
|
+
* `^KEY=` lines (KEY = upper/underscore/digit). Comments + blanks ignored. */
|
|
71
|
+
export function parseEnvTemplateKeys(content) {
|
|
72
|
+
const keys = [];
|
|
73
|
+
for (const line of content.split("\n")) {
|
|
74
|
+
const m = line.match(/^\s*(?:export\s+)?([A-Z][A-Z0-9_]*)\s*=/);
|
|
75
|
+
if (m)
|
|
76
|
+
keys.push(m[1]);
|
|
77
|
+
}
|
|
78
|
+
return keys;
|
|
79
|
+
}
|
|
80
|
+
function secretsSection(services, store = "1password", extraKeys = []) {
|
|
140
81
|
const allKeys = [];
|
|
82
|
+
const seen = new Set();
|
|
83
|
+
const add = (k) => {
|
|
84
|
+
if (!seen.has(k)) {
|
|
85
|
+
seen.add(k);
|
|
86
|
+
allKeys.push(k);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
141
89
|
for (const svc of services) {
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
allKeys.push(...tmpl.secrets);
|
|
90
|
+
const def = SERVICE_BY_ID[svc];
|
|
91
|
+
def?.secrets?.forEach(add);
|
|
145
92
|
}
|
|
93
|
+
// Keys from an existing .env.example the project already documents (deduped
|
|
94
|
+
// against service-template keys) — so a project's real secret contract is kept.
|
|
95
|
+
extraKeys.forEach(add);
|
|
146
96
|
if (allKeys.length === 0)
|
|
147
97
|
return "";
|
|
148
98
|
const keyLines = allKeys.map((k) => {
|
|
@@ -206,19 +156,25 @@ function setupSection(stack) {
|
|
|
206
156
|
installCmd = "cargo fetch";
|
|
207
157
|
else if (stack.language === "php")
|
|
208
158
|
installCmd = "composer install";
|
|
159
|
+
else if (stack.language === "dart")
|
|
160
|
+
installCmd = frameworkSetup?.install ?? "dart pub get";
|
|
161
|
+
else if (stack.language === "swift")
|
|
162
|
+
installCmd = frameworkSetup?.install ?? "swift build";
|
|
163
|
+
else if (stack.language === "kotlin")
|
|
164
|
+
installCmd = frameworkSetup?.install ?? "./gradlew build";
|
|
209
165
|
else
|
|
210
166
|
installCmd = frameworkSetup?.install ?? "npm install";
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
const hasDrizzle = stack.services.includes("drizzle");
|
|
167
|
+
// First detected service that declares a migrate command wins. Registry order
|
|
168
|
+
// puts supabase before prisma before drizzle, preserving the old precedence.
|
|
214
169
|
let migrateCmd = null;
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
170
|
+
for (const svc of stack.services) {
|
|
171
|
+
const m = SERVICE_BY_ID[svc]?.migrate;
|
|
172
|
+
if (m) {
|
|
173
|
+
migrateCmd = m;
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (!migrateCmd && frameworkSetup?.migrate)
|
|
222
178
|
migrateCmd = frameworkSetup.migrate;
|
|
223
179
|
const verifyCmd = frameworkSetup?.verify ?? null;
|
|
224
180
|
const parts = [`[setup]`, `install = "${installCmd}"`];
|
|
@@ -235,9 +191,9 @@ export function generateToml(stack, options = {}) {
|
|
|
235
191
|
// Merge service tools into tools map
|
|
236
192
|
const tools = { ...stack.tools };
|
|
237
193
|
for (const svc of stack.services) {
|
|
238
|
-
const
|
|
239
|
-
if (
|
|
240
|
-
tools[
|
|
194
|
+
const def = SERVICE_BY_ID[svc];
|
|
195
|
+
if (def?.tool && !tools[def.tool]) {
|
|
196
|
+
tools[def.tool] = "latest";
|
|
241
197
|
}
|
|
242
198
|
}
|
|
243
199
|
// Universal security scanners — mise-provisioned and on by default, so
|
|
@@ -278,7 +234,7 @@ export function generateToml(stack, options = {}) {
|
|
|
278
234
|
: `# Detected: ${stack.language}${stack.services.length ? ` + ${stack.services.join(", ")}` : ""}`, `# Includes default security scanners (semgrep, socket) installed via mise.`, ``);
|
|
279
235
|
const toolsSec = toolsSection(tools);
|
|
280
236
|
const servicesSec = servicesSection(stack.services);
|
|
281
|
-
const secretsSec = secretsSection(stack.services, options.secretsStore ?? "1password");
|
|
237
|
+
const secretsSec = secretsSection(stack.services, options.secretsStore ?? "1password", options.extraSecretKeys ?? []);
|
|
282
238
|
const setupSec = setupSection(stack);
|
|
283
239
|
const parts = [header, toolsSec, servicesSec, secretsSec, setupSec].filter((s) => s.trim().length > 0);
|
|
284
240
|
return parts.join("\n") + "\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toml-generator.js","sourceRoot":"","sources":["../src/toml-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"toml-generator.js","sourceRoot":"","sources":["../src/toml-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/vault-meta.d.ts
CHANGED
|
@@ -35,3 +35,10 @@ export interface VaultMeta {
|
|
|
35
35
|
export declare const VAULT_META: Record<Exclude<SecretsStore, "env">, VaultMeta>;
|
|
36
36
|
/** Vault metadata for a configured `store`, or null for `env` / unknown. */
|
|
37
37
|
export declare function vaultMeta(store: string | undefined): VaultMeta | null;
|
|
38
|
+
/**
|
|
39
|
+
* Detect a secret backend a brownfield repo is already bound to, from its
|
|
40
|
+
* marker files, so `kit init` can pre-select the right store instead of
|
|
41
|
+
* defaulting to 1Password (and hardcoding the wrong one in `--yes` runs).
|
|
42
|
+
* Returns null when nothing recognizable is present.
|
|
43
|
+
*/
|
|
44
|
+
export declare function detectSecretStore(fileExists: (relPath: string) => Promise<boolean>): Promise<SecretsStore | null>;
|
package/dist/vault-meta.js
CHANGED
|
@@ -19,4 +19,17 @@ export function vaultMeta(store) {
|
|
|
19
19
|
return null;
|
|
20
20
|
return VAULT_META[store] ?? null;
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Detect a secret backend a brownfield repo is already bound to, from its
|
|
24
|
+
* marker files, so `kit init` can pre-select the right store instead of
|
|
25
|
+
* defaulting to 1Password (and hardcoding the wrong one in `--yes` runs).
|
|
26
|
+
* Returns null when nothing recognizable is present.
|
|
27
|
+
*/
|
|
28
|
+
export async function detectSecretStore(fileExists) {
|
|
29
|
+
if (await fileExists(".infisical.json"))
|
|
30
|
+
return "infisical";
|
|
31
|
+
if ((await fileExists("doppler.yaml")) || (await fileExists(".doppler.yaml")))
|
|
32
|
+
return "doppler";
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
22
35
|
//# sourceMappingURL=vault-meta.js.map
|
package/dist/vault-meta.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-meta.js","sourceRoot":"","sources":["../src/vault-meta.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAC,MAAM,UAAU,GAAoD;IACzE,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE;IACjF,SAAS,EAAE;QACT,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,gBAAgB;KAC1B;IACD,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE;IACvG,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,uBAAuB,EAAE;IAC3F,KAAK,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE;IAC/E,QAAQ,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,wCAAwC,EAAE;IAC9F,QAAQ,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,mBAAmB,EAAE;IACxE,UAAU,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE;CAC/D,CAAC;AAEF,4EAA4E;AAC5E,MAAM,UAAU,SAAS,CAAC,KAAyB;IACjD,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAQ,UAAwC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AAClE,CAAC"}
|
|
1
|
+
{"version":3,"file":"vault-meta.js","sourceRoot":"","sources":["../src/vault-meta.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAC,MAAM,UAAU,GAAoD;IACzE,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE;IACjF,SAAS,EAAE;QACT,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,gBAAgB;KAC1B;IACD,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE;IACvG,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,uBAAuB,EAAE;IAC3F,KAAK,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE;IAC/E,QAAQ,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,wCAAwC,EAAE;IAC9F,QAAQ,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,mBAAmB,EAAE;IACxE,UAAU,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE;CAC/D,CAAC;AAEF,4EAA4E;AAC5E,MAAM,UAAU,SAAS,CAAC,KAAyB;IACjD,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAQ,UAAwC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAiD;IAEjD,IAAI,MAAM,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAO,WAAW,CAAC;IAC5D,IAAI,CAAC,MAAM,UAAU,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,eAAe,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAChG,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sandstream-kit",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "developer kit. zero LLM, local-first, multi-vault. one command from git clone to working dev environment.",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"funding": "https://buymeacoffee.com/sandstream",
|
|
6
7
|
"type": "module",
|
|
7
8
|
"workspaces": [
|
|
8
9
|
"packages/*"
|