aboutsummaryrefslogtreecommitdiff
path: root/src/util/paths.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/paths.ts')
-rw-r--r--src/util/paths.ts20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/util/paths.ts b/src/util/paths.ts
index 8cd9961..30a1bbd 100644
--- a/src/util/paths.ts
+++ b/src/util/paths.ts
@@ -2,8 +2,20 @@ import { randomUUID } from "node:crypto";
import { tmpdir } from "node:os";
import { join } from "node:path";
-export const screenshotPath = (namespace: string, ext: "png" | "jpeg" = "png"): string =>
- join(tmpdir(), `pi-browser-screenshot-${namespace}-${randomUUID()}.${ext}`);
+const NAMESPACE_RE = /^[a-zA-Z0-9_-]+$/;
-export const pdfPath = (namespace: string): string =>
- join(tmpdir(), `pi-browser-pdf-${namespace}-${randomUUID()}.pdf`);
+const requireValidNamespace = (namespace: string): void => {
+ if (!NAMESPACE_RE.test(namespace)) {
+ throw new Error(`Invalid namespace (must match ${NAMESPACE_RE}): ${JSON.stringify(namespace)}`);
+ }
+};
+
+export const screenshotPath = (namespace: string, ext: "png" | "jpeg" = "png"): string => {
+ requireValidNamespace(namespace);
+ return join(tmpdir(), `pi-browser-screenshot-${namespace}-${randomUUID()}.${ext}`);
+};
+
+export const pdfPath = (namespace: string): string => {
+ requireValidNamespace(namespace);
+ return join(tmpdir(), `pi-browser-pdf-${namespace}-${randomUUID()}.pdf`);
+};