create-sprint 0.0.58 → 0.0.62
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/dist/generators.js +22 -11
- package/dist/index.js +3 -3
- package/package.json +1 -1
- package/src/generators.ts +22 -11
- package/src/index.ts +3 -3
package/dist/generators.js
CHANGED
|
@@ -9,7 +9,7 @@ export function generateJWTKeys() {
|
|
|
9
9
|
}
|
|
10
10
|
export function getTypeScriptPackageJson(name, telemetry) {
|
|
11
11
|
const deps = {
|
|
12
|
-
"sprint-es": "^0.0.
|
|
12
|
+
"sprint-es": "^0.0.54"
|
|
13
13
|
};
|
|
14
14
|
const devDeps = {
|
|
15
15
|
"@types/node": "^22.0.0",
|
|
@@ -39,7 +39,7 @@ export function getTypeScriptPackageJson(name, telemetry) {
|
|
|
39
39
|
}
|
|
40
40
|
export function getJavaScriptPackageJson(name, telemetry) {
|
|
41
41
|
const deps = {
|
|
42
|
-
"sprint-es": "^0.0.
|
|
42
|
+
"sprint-es": "^0.0.54"
|
|
43
43
|
};
|
|
44
44
|
if (telemetry === "sentry" || telemetry === "glitchtip") {
|
|
45
45
|
deps["@sentry/node"] = "^8.0.0";
|
|
@@ -233,11 +233,12 @@ export const adminUsersController: Handler = (req: SprintRequest, res: SprintRes
|
|
|
233
233
|
});
|
|
234
234
|
};
|
|
235
235
|
|
|
236
|
+
const { privateKey, encryptionSecret } = getJwtFromEnv();
|
|
237
|
+
|
|
236
238
|
export const jwtGenerateController: Handler = (req: SprintRequest, res: SprintResponse) => {
|
|
237
239
|
const { userId, role } = req.body || {};
|
|
238
240
|
|
|
239
241
|
try {
|
|
240
|
-
const { privateKey, encryptionSecret } = getJwtFromEnv();
|
|
241
242
|
const payload = { userId, role: role || "user" };
|
|
242
243
|
const token = signEncrypted(payload, privateKey, encryptionSecret, { expiresIn: "1h" });
|
|
243
244
|
res.json({ token });
|
|
@@ -267,11 +268,12 @@ export const adminUsersController = (req: SprintRequest, res: SprintResponse) =>
|
|
|
267
268
|
});
|
|
268
269
|
};
|
|
269
270
|
|
|
271
|
+
const { privateKey, encryptionSecret } = getJwtFromEnv();
|
|
272
|
+
|
|
270
273
|
export const jwtGenerateController = (req: SprintRequest, res: SprintResponse) => {
|
|
271
274
|
const { userId, role } = req.body || {};
|
|
272
275
|
|
|
273
276
|
try {
|
|
274
|
-
const { privateKey, encryptionSecret } = getJwtFromEnv();
|
|
275
277
|
const payload = { userId, role: role || "user" };
|
|
276
278
|
const token = signEncrypted(payload, privateKey, encryptionSecret, { expiresIn: "1h" });
|
|
277
279
|
res.json({ token });
|
|
@@ -543,14 +545,16 @@ export function getSprintConfigFile(language, telemetry) {
|
|
|
543
545
|
let config = `import type { SprintOptions } from "sprint-es";
|
|
544
546
|
|
|
545
547
|
export const config: SprintOptions = {
|
|
546
|
-
|
|
548
|
+
openapi: {
|
|
549
|
+
/* Generate OpenAPI spec on build - Coming Soon */
|
|
550
|
+
generateOnBuild: false
|
|
551
|
+
}
|
|
547
552
|
};
|
|
548
553
|
|
|
549
554
|
// Add Vite config here if needed
|
|
550
555
|
// export const vite = {
|
|
551
556
|
// build: { ... }
|
|
552
557
|
// };
|
|
553
|
-
|
|
554
558
|
`;
|
|
555
559
|
if (telemetry === "sentry" || telemetry === "glitchtip") {
|
|
556
560
|
config += `import { initTelemetry } from "sprint-es/telemetry";
|
|
@@ -574,7 +578,10 @@ initTelemetry({
|
|
|
574
578
|
return config;
|
|
575
579
|
}
|
|
576
580
|
let config = `export const config = {
|
|
577
|
-
|
|
581
|
+
openapi: {
|
|
582
|
+
/* Generate OpenAPI spec on build - Coming Soon */
|
|
583
|
+
generateOnBuild: false
|
|
584
|
+
}
|
|
578
585
|
};
|
|
579
586
|
`;
|
|
580
587
|
if (telemetry === "sentry" || telemetry === "glitchtip") {
|
|
@@ -603,19 +610,23 @@ initTelemetry({
|
|
|
603
610
|
export function getEnvExample(telemetry) {
|
|
604
611
|
let env = `PORT=5000
|
|
605
612
|
|
|
613
|
+
JWT_PUBLIC_KEY=""
|
|
614
|
+
JWT_PRIVATE_KEY=""
|
|
615
|
+
JWT_ENCRYPTION_SECRET=""
|
|
616
|
+
|
|
606
617
|
# Development: npm run dev (NODE_ENV=development)
|
|
607
618
|
# Production: npm start (NODE_ENV=production)
|
|
608
619
|
`;
|
|
609
620
|
if (telemetry === "sentry" || telemetry === "glitchtip") {
|
|
610
621
|
env += `
|
|
611
622
|
# Sentry / GlitchTip (use GlitchTip DSN for self-hosted)
|
|
612
|
-
SENTRY_DSN=
|
|
623
|
+
SENTRY_DSN=""
|
|
613
624
|
`;
|
|
614
625
|
}
|
|
615
626
|
else if (telemetry === "discord") {
|
|
616
627
|
env += `
|
|
617
628
|
# Discord Webhook URL for error notifications
|
|
618
|
-
DISCORD_TELEMETRY_WEBHOOK_URL=
|
|
629
|
+
DISCORD_TELEMETRY_WEBHOOK_URL=""
|
|
619
630
|
`;
|
|
620
631
|
}
|
|
621
632
|
return env;
|
|
@@ -634,13 +645,13 @@ JWT_ENCRYPTION_SECRET='${crypto.randomBytes(32).toString("hex")}'
|
|
|
634
645
|
if (telemetry === "sentry" || telemetry === "glitchtip") {
|
|
635
646
|
env += `
|
|
636
647
|
# Sentry / GlitchTip
|
|
637
|
-
SENTRY_DSN=
|
|
648
|
+
SENTRY_DSN=""
|
|
638
649
|
`;
|
|
639
650
|
}
|
|
640
651
|
else if (telemetry === "discord") {
|
|
641
652
|
env += `
|
|
642
653
|
# Discord Webhook URL
|
|
643
|
-
DISCORD_TELEMETRY_WEBHOOK_URL=
|
|
654
|
+
DISCORD_TELEMETRY_WEBHOOK_URL=""
|
|
644
655
|
`;
|
|
645
656
|
}
|
|
646
657
|
return env;
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { join } from "path";
|
|
|
5
5
|
import color from "picocolors";
|
|
6
6
|
import * as p from "@clack/prompts";
|
|
7
7
|
import { validateProjectName } from "./validators.js";
|
|
8
|
-
import { getTypeScriptPackageJson, getJavaScriptPackageJson, getTsConfig, getViteConfig, getMainFile, getHomeRoute, getAdminRoute, getHomeController, getAdminController, getInternalAuthMiddleware, getUserAuthMiddleware, getHomeSchema, getAdminSchema, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvDevelopment, getEnvProduction, getExampleCronJob } from "./generators.js";
|
|
8
|
+
import { getTypeScriptPackageJson, getJavaScriptPackageJson, getTsConfig, getViteConfig, getMainFile, getHomeRoute, getAdminRoute, getHomeController, getAdminController, getEnvExample, getInternalAuthMiddleware, getUserAuthMiddleware, getHomeSchema, getAdminSchema, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvDevelopment, getEnvProduction, getExampleCronJob } from "./generators.js";
|
|
9
9
|
export async function writeFile(path, content, options) {
|
|
10
10
|
if (typeof content === "string")
|
|
11
11
|
content = content.trimEnd();
|
|
@@ -184,8 +184,8 @@ async function createProject(projectName, language, telemetry, useDocker) {
|
|
|
184
184
|
await writeFile(join(srcDir, "schemas", "home." + (language === "typescript" ? "ts" : "js")), getHomeSchema(language));
|
|
185
185
|
await writeFile(join(srcDir, "schemas", "admin." + (language === "typescript" ? "ts" : "js")), getAdminSchema(language));
|
|
186
186
|
await writeFile(join(srcDir, "cronjobs", "example." + (language === "typescript" ? "ts" : "js")), getExampleCronJob(language));
|
|
187
|
-
await writeFile(join(targetDir, ".env.development.example"),
|
|
188
|
-
await writeFile(join(targetDir, ".env.production.example"),
|
|
187
|
+
await writeFile(join(targetDir, ".env.development.example"), getEnvExample(telemetry));
|
|
188
|
+
await writeFile(join(targetDir, ".env.production.example"), getEnvExample(telemetry));
|
|
189
189
|
await writeFile(join(targetDir, ".env.development"), getEnvDevelopment(telemetry));
|
|
190
190
|
await writeFile(join(targetDir, ".env.production"), getEnvProduction(telemetry));
|
|
191
191
|
await writeFile(join(targetDir, ".gitignore"), getGitignore());
|
package/package.json
CHANGED
package/src/generators.ts
CHANGED
|
@@ -16,7 +16,7 @@ export function generateJWTKeys(): JWTKeys {
|
|
|
16
16
|
|
|
17
17
|
export function getTypeScriptPackageJson(name: string, telemetry: string) {
|
|
18
18
|
const deps: Record<string, string> = {
|
|
19
|
-
"sprint-es": "^0.0.
|
|
19
|
+
"sprint-es": "^0.0.54"
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
const devDeps: Record<string, string> = {
|
|
@@ -49,7 +49,7 @@ export function getTypeScriptPackageJson(name: string, telemetry: string) {
|
|
|
49
49
|
|
|
50
50
|
export function getJavaScriptPackageJson(name: string, telemetry: string) {
|
|
51
51
|
const deps: Record<string, string> = {
|
|
52
|
-
"sprint-es": "^0.0.
|
|
52
|
+
"sprint-es": "^0.0.54"
|
|
53
53
|
};
|
|
54
54
|
|
|
55
55
|
if (telemetry === "sentry" || telemetry === "glitchtip") {
|
|
@@ -252,11 +252,12 @@ export const adminUsersController: Handler = (req: SprintRequest, res: SprintRes
|
|
|
252
252
|
});
|
|
253
253
|
};
|
|
254
254
|
|
|
255
|
+
const { privateKey, encryptionSecret } = getJwtFromEnv();
|
|
256
|
+
|
|
255
257
|
export const jwtGenerateController: Handler = (req: SprintRequest, res: SprintResponse) => {
|
|
256
258
|
const { userId, role } = req.body || {};
|
|
257
259
|
|
|
258
260
|
try {
|
|
259
|
-
const { privateKey, encryptionSecret } = getJwtFromEnv();
|
|
260
261
|
const payload = { userId, role: role || "user" };
|
|
261
262
|
const token = signEncrypted(payload, privateKey, encryptionSecret, { expiresIn: "1h" });
|
|
262
263
|
res.json({ token });
|
|
@@ -285,11 +286,12 @@ export const adminUsersController = (req: SprintRequest, res: SprintResponse) =>
|
|
|
285
286
|
});
|
|
286
287
|
};
|
|
287
288
|
|
|
289
|
+
const { privateKey, encryptionSecret } = getJwtFromEnv();
|
|
290
|
+
|
|
288
291
|
export const jwtGenerateController = (req: SprintRequest, res: SprintResponse) => {
|
|
289
292
|
const { userId, role } = req.body || {};
|
|
290
293
|
|
|
291
294
|
try {
|
|
292
|
-
const { privateKey, encryptionSecret } = getJwtFromEnv();
|
|
293
295
|
const payload = { userId, role: role || "user" };
|
|
294
296
|
const token = signEncrypted(payload, privateKey, encryptionSecret, { expiresIn: "1h" });
|
|
295
297
|
res.json({ token });
|
|
@@ -570,14 +572,16 @@ export function getSprintConfigFile(language: string, telemetry: string) {
|
|
|
570
572
|
let config = `import type { SprintOptions } from "sprint-es";
|
|
571
573
|
|
|
572
574
|
export const config: SprintOptions = {
|
|
573
|
-
|
|
575
|
+
openapi: {
|
|
576
|
+
/* Generate OpenAPI spec on build - Coming Soon */
|
|
577
|
+
generateOnBuild: false
|
|
578
|
+
}
|
|
574
579
|
};
|
|
575
580
|
|
|
576
581
|
// Add Vite config here if needed
|
|
577
582
|
// export const vite = {
|
|
578
583
|
// build: { ... }
|
|
579
584
|
// };
|
|
580
|
-
|
|
581
585
|
`;
|
|
582
586
|
|
|
583
587
|
if (telemetry === "sentry" || telemetry === "glitchtip") {
|
|
@@ -603,7 +607,10 @@ initTelemetry({
|
|
|
603
607
|
}
|
|
604
608
|
|
|
605
609
|
let config = `export const config = {
|
|
606
|
-
|
|
610
|
+
openapi: {
|
|
611
|
+
/* Generate OpenAPI spec on build - Coming Soon */
|
|
612
|
+
generateOnBuild: false
|
|
613
|
+
}
|
|
607
614
|
};
|
|
608
615
|
`;
|
|
609
616
|
|
|
@@ -634,6 +641,10 @@ initTelemetry({
|
|
|
634
641
|
export function getEnvExample(telemetry: string) {
|
|
635
642
|
let env = `PORT=5000
|
|
636
643
|
|
|
644
|
+
JWT_PUBLIC_KEY=""
|
|
645
|
+
JWT_PRIVATE_KEY=""
|
|
646
|
+
JWT_ENCRYPTION_SECRET=""
|
|
647
|
+
|
|
637
648
|
# Development: npm run dev (NODE_ENV=development)
|
|
638
649
|
# Production: npm start (NODE_ENV=production)
|
|
639
650
|
`;
|
|
@@ -641,12 +652,12 @@ export function getEnvExample(telemetry: string) {
|
|
|
641
652
|
if (telemetry === "sentry" || telemetry === "glitchtip") {
|
|
642
653
|
env += `
|
|
643
654
|
# Sentry / GlitchTip (use GlitchTip DSN for self-hosted)
|
|
644
|
-
SENTRY_DSN=
|
|
655
|
+
SENTRY_DSN=""
|
|
645
656
|
`;
|
|
646
657
|
} else if (telemetry === "discord") {
|
|
647
658
|
env += `
|
|
648
659
|
# Discord Webhook URL for error notifications
|
|
649
|
-
DISCORD_TELEMETRY_WEBHOOK_URL=
|
|
660
|
+
DISCORD_TELEMETRY_WEBHOOK_URL=""
|
|
650
661
|
`;
|
|
651
662
|
}
|
|
652
663
|
|
|
@@ -669,12 +680,12 @@ JWT_ENCRYPTION_SECRET='${crypto.randomBytes(32).toString("hex")}'
|
|
|
669
680
|
if (telemetry === "sentry" || telemetry === "glitchtip") {
|
|
670
681
|
env += `
|
|
671
682
|
# Sentry / GlitchTip
|
|
672
|
-
SENTRY_DSN=
|
|
683
|
+
SENTRY_DSN=""
|
|
673
684
|
`;
|
|
674
685
|
} else if (telemetry === "discord") {
|
|
675
686
|
env += `
|
|
676
687
|
# Discord Webhook URL
|
|
677
|
-
DISCORD_TELEMETRY_WEBHOOK_URL=
|
|
688
|
+
DISCORD_TELEMETRY_WEBHOOK_URL=""
|
|
678
689
|
`;
|
|
679
690
|
}
|
|
680
691
|
|
package/src/index.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { join } from "path";
|
|
|
5
5
|
import color from "picocolors";
|
|
6
6
|
import * as p from "@clack/prompts";
|
|
7
7
|
import { validateProjectName } from "./validators.js";
|
|
8
|
-
import { getTypeScriptPackageJson, getJavaScriptPackageJson, getTsConfig, getViteConfig, getMainFile, getHomeRoute, getAdminRoute, getHomeController, getAdminController, getInternalAuthMiddleware, getUserAuthMiddleware, getHomeSchema, getAdminSchema, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvDevelopment, getEnvProduction, getExampleCronJob } from "./generators.js";
|
|
8
|
+
import { getTypeScriptPackageJson, getJavaScriptPackageJson, getTsConfig, getViteConfig, getMainFile, getHomeRoute, getAdminRoute, getHomeController, getAdminController, getEnvExample, getInternalAuthMiddleware, getUserAuthMiddleware, getHomeSchema, getAdminSchema, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvDevelopment, getEnvProduction, getExampleCronJob } from "./generators.js";
|
|
9
9
|
|
|
10
10
|
export interface CLIOptions {
|
|
11
11
|
projectName?: string;
|
|
@@ -235,8 +235,8 @@ async function createProject(
|
|
|
235
235
|
|
|
236
236
|
await writeFile(join(srcDir, "cronjobs", "example." + (language === "typescript" ? "ts" : "js")), getExampleCronJob(language));
|
|
237
237
|
|
|
238
|
-
await writeFile(join(targetDir, ".env.development.example"),
|
|
239
|
-
await writeFile(join(targetDir, ".env.production.example"),
|
|
238
|
+
await writeFile(join(targetDir, ".env.development.example"), getEnvExample(telemetry));
|
|
239
|
+
await writeFile(join(targetDir, ".env.production.example"), getEnvExample(telemetry));
|
|
240
240
|
|
|
241
241
|
await writeFile(join(targetDir, ".env.development"), getEnvDevelopment(telemetry));
|
|
242
242
|
await writeFile(join(targetDir, ".env.production"), getEnvProduction(telemetry));
|