princejs 2.2.3 → 2.2.4

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/db.d.ts CHANGED
@@ -4,6 +4,7 @@ export declare const db: {
4
4
  get: (sql: string, params?: any[]) => unknown;
5
5
  run: (sql: string, params?: any[]) => import("bun:sqlite").Changes;
6
6
  prepare: (sql: string) => import("bun:sqlite").Statement<unknown, import("bun:sqlite").SQLQueryBindings[] | [null] | [string] | [number] | [bigint] | [false] | [true] | [Uint8Array<ArrayBufferLike>] | [Uint8ClampedArray<ArrayBufferLike>] | [Uint16Array<ArrayBufferLike>] | [Uint32Array<ArrayBufferLike>] | [Int8Array<ArrayBufferLike>] | [Int16Array<ArrayBufferLike>] | [Int32Array<ArrayBufferLike>] | [BigUint64Array<ArrayBufferLike>] | [BigInt64Array<ArrayBufferLike>] | [Float16Array<ArrayBufferLike>] | [Float32Array<ArrayBufferLike>] | [Float64Array<ArrayBufferLike>] | [Record<string, string | number | bigint | boolean | NodeJS.TypedArray<ArrayBufferLike> | null>]>;
7
+ transaction: <T>(fn: () => T) => T;
7
8
  close: () => void;
8
9
  };
9
10
  };
package/dist/db.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,EAAE;mBACE,MAAM,SAAS,MAAM;qBAKnB,MAAM,WAAW,GAAG,EAAE;mBAIxB,MAAM,WAAW,GAAG,EAAE;mBAItB,MAAM,WAAW,GAAG,EAAE;uBAIlB,MAAM;;;CAO1B,CAAC"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,EAAE;mBACE,MAAM,SAAS,MAAM;qBAMnB,MAAM,WAAW,GAAG,EAAE;mBAKxB,MAAM,WAAW,GAAG,EAAE;mBAKtB,MAAM,WAAW,GAAG,EAAE;uBAKlB,MAAM;sBAIP,CAAC,MAAO,MAAM,CAAC,KAAG,CAAC;;;CAOtC,CAAC"}
package/dist/db.js CHANGED
@@ -8,16 +8,22 @@ var db = {
8
8
  db2.run(init);
9
9
  return {
10
10
  query: (sql, params) => {
11
- return db2.query(sql).all(params);
11
+ const stmt = db2.prepare(sql);
12
+ return params ? stmt.all(...Array.isArray(params[0]) ? params[0] : params) : stmt.all();
12
13
  },
13
14
  get: (sql, params) => {
14
- return db2.query(sql).get(params);
15
+ const stmt = db2.prepare(sql);
16
+ return params ? stmt.get(...Array.isArray(params[0]) ? params[0] : params) : stmt.get();
15
17
  },
16
18
  run: (sql, params) => {
17
- return db2.run(sql, params);
19
+ const stmt = db2.prepare(sql);
20
+ return params ? stmt.run(...Array.isArray(params[0]) ? params[0] : params) : stmt.run();
18
21
  },
19
22
  prepare: (sql) => {
20
- return db2.query(sql);
23
+ return db2.prepare(sql);
24
+ },
25
+ transaction: (fn) => {
26
+ return db2.transaction(fn)();
21
27
  },
22
28
  close: () => db2.close()
23
29
  };
package/dist/helpers.d.ts CHANGED
@@ -1,9 +1,16 @@
1
1
  import type { PrinceRequest } from "./prince";
2
2
  export declare const cache: (ttl: number) => (handler: any) => (req: PrinceRequest) => Promise<any>;
3
- export declare const email: (to: string, subject: string, html: string) => Promise<void>;
4
- export declare const upload: () => (req: PrinceRequest) => Promise<Response>;
3
+ export declare const email: (to: string, subject: string, html: string) => Promise<unknown>;
4
+ export declare const upload: (options?: {
5
+ maxSize?: number;
6
+ allowedTypes?: string[];
7
+ }) => (req: PrinceRequest) => Promise<Response>;
5
8
  export declare const sse: () => (req: PrinceRequest) => Response;
6
9
  export declare const stream: (handler: (req: PrinceRequest) => AsyncGenerator<string | Uint8Array, void, unknown> | void | Promise<void>, options?: {
7
10
  contentType?: string;
8
11
  }) => (req: PrinceRequest) => Response;
12
+ export declare const sanitize: (input: string, type?: "text" | "html" | "url") => string;
13
+ export declare const validateEnv: (requiredVars: string[]) => Record<string, string>;
14
+ export declare const errorResponse: (message: string, statusCode?: number, details?: any) => Response;
15
+ export declare const successResponse: (data: any, statusCode?: number) => Response;
9
16
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,MAEvB,SAAS,GAAG,MAAY,KAAK,aAAa,iBASnD,CAAC;AAGF,eAAO,MAAM,KAAK,GAAU,IAAI,MAAM,EAAE,SAAS,MAAM,EAAE,MAAM,MAAM,kBAMpE,CAAC;AAGF,eAAO,MAAM,MAAM,SACH,KAAK,aAAa,sBA4CjC,CAAC;AAGF,eAAO,MAAM,GAAG,SACN,KAAK,aAAa,aA0B3B,CAAC;AAgBF,eAAO,MAAM,MAAM,GACjB,SAAS,CAAC,GAAG,EAAE,aAAa,KAAK,cAAc,CAAC,MAAM,GAAG,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC1G,UAAU;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,MAK1B,KAAK,aAAa,aAmD3B,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI9C,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,MAEvB,SAAS,GAAG,MAAY,KAAK,aAAa,iBAWnD,CAAC;AAIF,eAAO,MAAM,KAAK,GAAU,IAAI,MAAM,EAAE,SAAS,MAAM,EAAE,MAAM,MAAM,qBA0BpE,CAAC;AAIF,eAAO,MAAM,MAAM,GAAI,UAAU;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,MAI9D,KAAK,aAAa,sBA4DjC,CAAC;AAGF,eAAO,MAAM,GAAG,SACN,KAAK,aAAa,aA0B3B,CAAC;AAgBF,eAAO,MAAM,MAAM,GACjB,SAAS,CAAC,GAAG,EAAE,aAAa,KAAK,cAAc,CAAC,MAAM,GAAG,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC1G,UAAU;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,MAK1B,KAAK,aAAa,aAmD3B,CAAC;AAIF,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,EAAE,OAAM,MAAM,GAAG,MAAM,GAAG,KAAc,KAAG,MAsBhF,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,cAAc,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAkBzE,CAAC;AAIF,eAAO,MAAM,aAAa,GACxB,SAAS,MAAM,EACf,aAAY,MAAY,EACxB,UAAU,GAAG,KACZ,QAYF,CAAC;AAIF,eAAO,MAAM,eAAe,GAAI,MAAM,GAAG,EAAE,aAAY,MAAY,KAAG,QAYrE,CAAC"}
package/dist/helpers.js CHANGED
@@ -3,7 +3,8 @@
3
3
  var cache = (ttl) => {
4
4
  const store = {};
5
5
  return (handler) => async (req) => {
6
- const key = req.url;
6
+ const url = new URL(req.url);
7
+ const key = url.pathname;
7
8
  const now = Date.now();
8
9
  if (store[key]?.exp > now)
9
10
  return store[key].data;
@@ -14,13 +15,32 @@ var cache = (ttl) => {
14
15
  };
15
16
  };
16
17
  var email = async (to, subject, html) => {
17
- await fetch("https://api.resend.com/emails", {
18
- method: "POST",
19
- headers: { Authorization: `Bearer ${process.env.RESEND_KEY}` },
20
- body: JSON.stringify({ from: "no-reply@princejs.dev", to, subject, html })
21
- });
18
+ const apiKey = process.env.RESEND_KEY;
19
+ if (!apiKey) {
20
+ throw new Error("RESEND_KEY environment variable not configured");
21
+ }
22
+ try {
23
+ const response = await fetch("https://api.resend.com/emails", {
24
+ method: "POST",
25
+ headers: {
26
+ Authorization: `Bearer ${apiKey}`,
27
+ "Content-Type": "application/json"
28
+ },
29
+ body: JSON.stringify({ from: "no-reply@princejs.dev", to, subject, html })
30
+ });
31
+ if (!response.ok) {
32
+ const error = await response.json();
33
+ throw new Error(`Email send failed: ${error.message || response.statusText}`);
34
+ }
35
+ return await response.json();
36
+ } catch (error) {
37
+ console.error("Email service error:", error);
38
+ throw error;
39
+ }
22
40
  };
23
- var upload = () => {
41
+ var upload = (options) => {
42
+ const maxSize = options?.maxSize ?? 5242880;
43
+ const allowedTypes = options?.allowedTypes ?? ["image/jpeg", "image/png", "application/pdf"];
24
44
  return async (req) => {
25
45
  try {
26
46
  const contentType = req.headers.get("content-type") || "";
@@ -32,6 +52,12 @@ var upload = () => {
32
52
  if (!file || !(file instanceof File)) {
33
53
  return new Response(JSON.stringify({ error: "No file provided or invalid file" }), { status: 400, headers: { "Content-Type": "application/json" } });
34
54
  }
55
+ if (file.size > maxSize) {
56
+ return new Response(JSON.stringify({ error: `File too large. Max size: ${maxSize / 1024 / 1024}MB` }), { status: 413, headers: { "Content-Type": "application/json" } });
57
+ }
58
+ if (!allowedTypes.includes(file.type)) {
59
+ return new Response(JSON.stringify({ error: `File type not allowed. Allowed types: ${allowedTypes.join(", ")}` }), { status: 415, headers: { "Content-Type": "application/json" } });
60
+ }
35
61
  const fileInfo = {
36
62
  name: file.name,
37
63
  size: file.size,
@@ -136,10 +162,71 @@ var stream = (handler, options) => {
136
162
  });
137
163
  };
138
164
  };
165
+ var sanitize = (input, type = "text") => {
166
+ if (type === "text") {
167
+ return input.replace(/[<>\"']/g, (char) => ({
168
+ "<": "&lt;",
169
+ ">": "&gt;",
170
+ '"': "&quot;",
171
+ "'": "&#x27;"
172
+ })[char] || char);
173
+ }
174
+ if (type === "url") {
175
+ try {
176
+ const url = new URL(input);
177
+ if (!["http:", "https:"].includes(url.protocol))
178
+ throw new Error("Invalid protocol");
179
+ return url.toString();
180
+ } catch {
181
+ throw new Error("Invalid URL");
182
+ }
183
+ }
184
+ return input;
185
+ };
186
+ var validateEnv = (requiredVars) => {
187
+ const env = {};
188
+ const missing = [];
189
+ for (const key of requiredVars) {
190
+ const value = process.env[key];
191
+ if (!value) {
192
+ missing.push(key);
193
+ } else {
194
+ env[key] = value;
195
+ }
196
+ }
197
+ if (missing.length > 0) {
198
+ throw new Error(`Missing environment variables: ${missing.join(", ")}`);
199
+ }
200
+ return env;
201
+ };
202
+ var errorResponse = (message, statusCode = 500, details) => {
203
+ return new Response(JSON.stringify({
204
+ error: message,
205
+ ...details && { details },
206
+ timestamp: new Date().toISOString()
207
+ }), {
208
+ status: statusCode,
209
+ headers: { "Content-Type": "application/json" }
210
+ });
211
+ };
212
+ var successResponse = (data, statusCode = 200) => {
213
+ return new Response(JSON.stringify({
214
+ success: true,
215
+ data,
216
+ timestamp: new Date().toISOString()
217
+ }), {
218
+ status: statusCode,
219
+ headers: { "Content-Type": "application/json" }
220
+ });
221
+ };
139
222
  export {
223
+ validateEnv,
140
224
  upload,
225
+ successResponse,
141
226
  stream,
142
227
  sse,
228
+ sanitize,
229
+ errorResponse,
143
230
  email,
144
231
  cache
145
232
  };
@@ -15,8 +15,10 @@ export interface LoggerOptions {
15
15
  }
16
16
  export declare const logger: (options?: LoggerOptions) => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
17
17
  export declare const cors: (origin?: string) => (req: any, next: Function) => Promise<any>;
18
- export declare const signJWT: (payload: any, secret: Uint8Array, expiresIn: string) => Promise<string>;
19
- export declare const jwt: (key: Uint8Array) => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
18
+ export declare const signJWT: (payload: any, secret: Uint8Array, expiresIn: string, alg?: string) => Promise<string>;
19
+ export declare const jwt: (key: Uint8Array, options?: {
20
+ algorithms?: string[];
21
+ }) => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
20
22
  export declare const rateLimit: (max: number, window?: number) => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
21
23
  export declare const validate: (schema: z.ZodSchema) => (req: any, next: Function) => Promise<any>;
22
24
  export declare const auth: (options?: {
@@ -58,6 +60,11 @@ export declare const jwks: (jwksUrl: string, options?: {
58
60
  algorithms?: string[];
59
61
  }) => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
60
62
  export declare const trimTrailingSlash: (statusCode?: 301 | 302) => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
63
+ export declare const csrf: (options?: {
64
+ cookieName?: string;
65
+ headerName?: string;
66
+ keyLength?: number;
67
+ }) => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
61
68
  export declare const every: (...middlewares: ((req: PrinceRequest, next: Next) => any)[]) => (req: PrinceRequest, next: Next) => Promise<Response>;
62
69
  export declare const some: (...middlewares: ((req: PrinceRequest, next: Next) => any)[]) => (req: PrinceRequest, next: Next) => Promise<any>;
63
70
  export declare const except: (paths: string | string[], ...middlewares: ((req: PrinceRequest, next: Next) => any)[]) => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}