robodev 0.22.0 → 0.23.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robodev",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "CLI for Robodev Starbase — create, auth, link, and deploy hosted apps",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -11,7 +11,7 @@
11
11
  "@robodev-ai/sdk": "^0.6.0"
12
12
  },
13
13
  "devDependencies": {
14
- "robodev": "^0.22.0",
14
+ "robodev": "^0.23.0",
15
15
  "rulesync": "^8.18.0",
16
16
  "typescript": "^5.9.2"
17
17
  }
@@ -342,6 +342,12 @@ export async function validateAlien(
342
342
  const ALLOWED_PLANET_IMAGE_TYPES = new Set(["image/jpeg", "image/png", "image/webp"]);
343
343
  const MAX_PLANET_IMAGE_BYTES = 2 * 1024 * 1024;
344
344
 
345
+ /** Matches dashboard sanitizeFilename / KEY_RE. */
346
+ function sanitizeFilename(name: string): string {
347
+ const base = name.split(/[/\\]/).pop() ?? "";
348
+ return base.replace(/[^A-Za-z0-9._-]+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "").slice(0, 80);
349
+ }
350
+
345
351
  export async function savePlanetImage(
346
352
  ctx: ApiHandlerContext<unknown, unknown>,
347
353
  file: UploadedFile,
@@ -354,8 +360,9 @@ export async function savePlanetImage(
354
360
  return fail(400, "Unsupported image type");
355
361
  }
356
362
 
357
- const fileName = (file.filename || "image").replaceAll("/", "-");
358
- const key = `planet-images/${ctx.user!.id}/${crypto.randomUUID()}-${fileName}`;
363
+ const fileName = file.filename || "image";
364
+ const safe = sanitizeFilename(fileName) || "image";
365
+ const key = `planet-images/${ctx.user!.id}/${crypto.randomUUID()}-${safe}`;
359
366
  const [row] = await ctx.db
360
367
  .insert(media)
361
368
  .values({
@@ -10,7 +10,7 @@
10
10
  "@robodev-ai/sdk": "^0.6.0"
11
11
  },
12
12
  "devDependencies": {
13
- "robodev": "^0.22.0",
13
+ "robodev": "^0.23.0",
14
14
  "typescript": "^5.9.2"
15
15
  }
16
16
  }
@@ -10,7 +10,7 @@
10
10
  "@robodev-ai/sdk": "^0.6.0"
11
11
  },
12
12
  "devDependencies": {
13
- "robodev": "^0.22.0",
13
+ "robodev": "^0.23.0",
14
14
  "typescript": "^5.9.2"
15
15
  }
16
16
  }
@@ -342,6 +342,12 @@ export async function validateAlien(
342
342
  const ALLOWED_PLANET_IMAGE_TYPES = new Set(["image/jpeg", "image/png", "image/webp"]);
343
343
  const MAX_PLANET_IMAGE_BYTES = 2 * 1024 * 1024;
344
344
 
345
+ /** Matches dashboard sanitizeFilename / KEY_RE. */
346
+ function sanitizeFilename(name: string): string {
347
+ const base = name.split(/[/\\]/).pop() ?? "";
348
+ return base.replace(/[^A-Za-z0-9._-]+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "").slice(0, 80);
349
+ }
350
+
345
351
  export async function savePlanetImage(
346
352
  ctx: ApiHandlerContext<unknown, unknown>,
347
353
  file: UploadedFile,
@@ -354,8 +360,9 @@ export async function savePlanetImage(
354
360
  return fail(400, "Unsupported image type");
355
361
  }
356
362
 
357
- const fileName = (file.filename || "image").replaceAll("/", "-");
358
- const key = `planet-images/${ctx.user!.id}/${crypto.randomUUID()}-${fileName}`;
363
+ const fileName = file.filename || "image";
364
+ const safe = sanitizeFilename(fileName) || "image";
365
+ const key = `planet-images/${ctx.user!.id}/${crypto.randomUUID()}-${safe}`;
359
366
  const [row] = await ctx.db
360
367
  .insert(media)
361
368
  .values({
@@ -11,7 +11,7 @@
11
11
  "@robodev-ai/sdk": "^0.6.0"
12
12
  },
13
13
  "devDependencies": {
14
- "robodev": "^0.22.0",
14
+ "robodev": "^0.23.0",
15
15
  "rulesync": "^8.18.0",
16
16
  "typescript": "^5.9.2"
17
17
  }