create-sprint 0.0.58 → 0.0.60

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.
@@ -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 });
@@ -603,19 +605,23 @@ initTelemetry({
603
605
  export function getEnvExample(telemetry) {
604
606
  let env = `PORT=5000
605
607
 
608
+ JWT_PUBLIC_KEY=""
609
+ JWT_PRIVATE_KEY=""
610
+ JWT_ENCRYPTION_SECRET=""
611
+
606
612
  # Development: npm run dev (NODE_ENV=development)
607
613
  # Production: npm start (NODE_ENV=production)
608
614
  `;
609
615
  if (telemetry === "sentry" || telemetry === "glitchtip") {
610
616
  env += `
611
617
  # Sentry / GlitchTip (use GlitchTip DSN for self-hosted)
612
- SENTRY_DSN=
618
+ SENTRY_DSN=""
613
619
  `;
614
620
  }
615
621
  else if (telemetry === "discord") {
616
622
  env += `
617
623
  # Discord Webhook URL for error notifications
618
- DISCORD_TELEMETRY_WEBHOOK_URL=
624
+ DISCORD_TELEMETRY_WEBHOOK_URL=""
619
625
  `;
620
626
  }
621
627
  return env;
@@ -634,13 +640,13 @@ JWT_ENCRYPTION_SECRET='${crypto.randomBytes(32).toString("hex")}'
634
640
  if (telemetry === "sentry" || telemetry === "glitchtip") {
635
641
  env += `
636
642
  # Sentry / GlitchTip
637
- SENTRY_DSN=
643
+ SENTRY_DSN=""
638
644
  `;
639
645
  }
640
646
  else if (telemetry === "discord") {
641
647
  env += `
642
648
  # Discord Webhook URL
643
- DISCORD_TELEMETRY_WEBHOOK_URL=
649
+ DISCORD_TELEMETRY_WEBHOOK_URL=""
644
650
  `;
645
651
  }
646
652
  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.60",
4
4
  "description": "Create a new Sprint API project",
5
5
  "type": "module",
6
6
  "bin": {
package/src/generators.ts CHANGED
@@ -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 });
@@ -634,6 +636,10 @@ initTelemetry({
634
636
  export function getEnvExample(telemetry: string) {
635
637
  let env = `PORT=5000
636
638
 
639
+ JWT_PUBLIC_KEY=""
640
+ JWT_PRIVATE_KEY=""
641
+ JWT_ENCRYPTION_SECRET=""
642
+
637
643
  # Development: npm run dev (NODE_ENV=development)
638
644
  # Production: npm start (NODE_ENV=production)
639
645
  `;
@@ -641,12 +647,12 @@ export function getEnvExample(telemetry: string) {
641
647
  if (telemetry === "sentry" || telemetry === "glitchtip") {
642
648
  env += `
643
649
  # Sentry / GlitchTip (use GlitchTip DSN for self-hosted)
644
- SENTRY_DSN=
650
+ SENTRY_DSN=""
645
651
  `;
646
652
  } else if (telemetry === "discord") {
647
653
  env += `
648
654
  # Discord Webhook URL for error notifications
649
- DISCORD_TELEMETRY_WEBHOOK_URL=
655
+ DISCORD_TELEMETRY_WEBHOOK_URL=""
650
656
  `;
651
657
  }
652
658
 
@@ -669,12 +675,12 @@ JWT_ENCRYPTION_SECRET='${crypto.randomBytes(32).toString("hex")}'
669
675
  if (telemetry === "sentry" || telemetry === "glitchtip") {
670
676
  env += `
671
677
  # Sentry / GlitchTip
672
- SENTRY_DSN=
678
+ SENTRY_DSN=""
673
679
  `;
674
680
  } else if (telemetry === "discord") {
675
681
  env += `
676
682
  # Discord Webhook URL
677
- DISCORD_TELEMETRY_WEBHOOK_URL=
683
+ DISCORD_TELEMETRY_WEBHOOK_URL=""
678
684
  `;
679
685
  }
680
686
 
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));