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.
@@ -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.48"
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.48"
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
- port: process.env.PORT ? parseInt(process.env.PORT) : 3000
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
- port: process.env.PORT ? parseInt(process.env.PORT) : 3000
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"), getEnvDevelopment(telemetry));
188
- await writeFile(join(targetDir, ".env.production.example"), getEnvProduction(telemetry));
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-sprint",
3
- "version": "0.0.58",
3
+ "version": "0.0.62",
4
4
  "description": "Create a new Sprint API project",
5
5
  "type": "module",
6
6
  "bin": {
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.48"
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.48"
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
- port: process.env.PORT ? parseInt(process.env.PORT) : 3000
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
- port: process.env.PORT ? parseInt(process.env.PORT) : 3000
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"), getEnvDevelopment(telemetry));
239
- await writeFile(join(targetDir, ".env.production.example"), getEnvProduction(telemetry));
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));