@knsdev/node-utils 3.0.0 → 3.2.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.
Files changed (44) hide show
  1. package/README.md +51 -9
  2. package/dist/ECApiCodes.d.ts +1 -1
  3. package/dist/ECApiCodes.d.ts.map +1 -1
  4. package/dist/FBUtils.d.ts +9 -5
  5. package/dist/FBUtils.d.ts.map +1 -1
  6. package/dist/FBUtils.js +13 -7
  7. package/dist/FBUtils.js.map +1 -1
  8. package/dist/HMACUtils.d.ts +5 -2
  9. package/dist/HMACUtils.d.ts.map +1 -1
  10. package/dist/HMACUtils.js +5 -2
  11. package/dist/HMACUtils.js.map +1 -1
  12. package/dist/JwtUtils.d.ts +2 -2
  13. package/dist/JwtUtils.js +2 -2
  14. package/dist/PassUtils.d.ts +11 -6
  15. package/dist/PassUtils.d.ts.map +1 -1
  16. package/dist/PassUtils.js +16 -14
  17. package/dist/PassUtils.js.map +1 -1
  18. package/dist/TurnstileValidator.d.ts +3 -3
  19. package/dist/TurnstileValidator.d.ts.map +1 -1
  20. package/dist/TurnstileValidator.js +4 -4
  21. package/dist/TurnstileValidator.js.map +1 -1
  22. package/dist/express.d.ts +17 -0
  23. package/dist/express.d.ts.map +1 -0
  24. package/dist/express.js +23 -0
  25. package/dist/express.js.map +1 -0
  26. package/dist/getEnvv.d.ts +3 -2
  27. package/dist/getEnvv.d.ts.map +1 -1
  28. package/dist/getEnvv.js +9 -7
  29. package/dist/getEnvv.js.map +1 -1
  30. package/dist/index.d.ts +5 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +5 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/types.d.ts +1 -0
  35. package/dist/types.d.ts.map +1 -1
  36. package/dist/utils.d.ts +25 -0
  37. package/dist/utils.d.ts.map +1 -0
  38. package/dist/utils.js +22 -0
  39. package/dist/utils.js.map +1 -0
  40. package/dist/zod.d.ts +10 -0
  41. package/dist/zod.d.ts.map +1 -1
  42. package/dist/zod.js +13 -4
  43. package/dist/zod.js.map +1 -1
  44. package/package.json +3 -2
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @knsdev/node-utils
2
2
 
3
- TypeScript utilities for Node.js APIs: JWT (HS256), bcrypt passwords, Express cookies, OAuth (Google / Facebook), Cloudflare Turnstile, HMAC, validation helpers, Zod schemas, and small math/random helpers. Published as **ES modules** (`"type": "module"`).
3
+ TypeScript utilities for Node.js APIs: JWT (HS256), bcrypt passwords, Express cookies and small Express helpers, OAuth (Google / Facebook), Cloudflare Turnstile, HMAC, validation helpers, Zod schemas, pagination/sleep helpers, and math/random utilities. Published as **ES modules** (`"type": "module"`).
4
4
 
5
5
  ## Requirements
6
6
 
@@ -15,11 +15,12 @@ pnpm add @knsdev/node-utils
15
15
  npm install @knsdev/node-utils
16
16
  ```
17
17
 
18
- Build from source (for contributors):
18
+ Build from source (for contributors). `build` runs `clean` first so `dist/` never keeps stale files after renames.
19
19
 
20
20
  ```bash
21
21
  pnpm install
22
22
  pnpm run build
23
+ # optional: pnpm run clean
23
24
  ```
24
25
 
25
26
  ## How to import
@@ -58,7 +59,7 @@ const [parsed, parseErr] = tryCatch2(() => JSON.parse('{"a":1}'));
58
59
 
59
60
  ### `getEnvv`
60
61
 
61
- Read `process.env` with a small schema: `string`, `int`, `float`, `boolean`, or `appEnv` (`dev` | `test` | `prod`). Throws a single `Error` listing missing keys and value problems.
62
+ Read `process.env` with a small schema: `string`, `int`, `float`, `boolean`, or `appEnv` (`dev` | `test` | `prod`). On failure, throws one `Error` whose message has up to two sections separated by a line of `================================`: `Not found keys: …` and/or `Value errors: …`.
62
63
 
63
64
  ```ts
64
65
  import { getEnvv } from "@knsdev/node-utils/getEnvv.js";
@@ -110,7 +111,18 @@ if (hashResult.success) {
110
111
  console.log(hashResult.hashedPassword);
111
112
  }
112
113
 
113
- const ok = await PasswordUtils.comparePassword("plain", storedHash);
114
+ const cmp = await PasswordUtils.comparePassword("plain", storedHash);
115
+ if (cmp.success) {
116
+ /* logged in */
117
+ } else {
118
+ /* cmp.error — e.g. BadRequest for wrong password */
119
+ }
120
+
121
+ try {
122
+ await PasswordUtils.comparePasswordOrThrow("plain", storedHash); // true on match; throws on mismatch / bcrypt error
123
+ } catch (e) {
124
+ /* handle */
125
+ }
114
126
 
115
127
  if (!PasswordUtils.validateStrength(pw, 8, 128)) {
116
128
  /* reject */
@@ -147,6 +159,36 @@ function logout(res: Response) {
147
159
  }
148
160
  ```
149
161
 
162
+ ### `express` (helpers)
163
+
164
+ Typed `res.json` wrapper and async route wrapper that forwards errors to `next`.
165
+
166
+ ```ts
167
+ import type { RequestHandler } from "express";
168
+ import { CatchExpress, SendRes } from "@knsdev/node-utils/express.js";
169
+
170
+ type Health = { ok: true };
171
+
172
+ const health: RequestHandler = (req, res) => {
173
+ SendRes<Health>(res, { ok: true });
174
+ };
175
+
176
+ app.get("/health", CatchExpress(health));
177
+ ```
178
+
179
+ ### `utils`
180
+
181
+ `sleep(ms)` and `PageLimit(query)` for list endpoints (page, limit, skip, sort, optional `searchTerm`, remaining keys as `filtersData`).
182
+
183
+ ```ts
184
+ import { PageLimit, sleep } from "@knsdev/node-utils/utils.js";
185
+
186
+ await sleep(500);
187
+
188
+ const { page, limit, skip, sortBy, sortOrder, searchTerm, filtersData } =
189
+ PageLimit(req.query);
190
+ ```
191
+
150
192
  ### `HMACUtils`
151
193
 
152
194
  SHA-256 HMAC (hex) and timing-safe comparison.
@@ -268,12 +310,12 @@ const fromCode = await GoogleUtils.getUserFromCode(
268
310
 
269
311
  ### `FacebookUtils`
270
312
 
271
- Validates a user access token via Graph API `debug_token`, then loads `/me` (POST bodies to avoid putting secrets in query strings). Returns normalized profile or `null`.
313
+ Validates a **Facebook user access token** (not a JWT) via Graph API `debug_token`, then loads `/me`. Requests use POST bodies so tokens and app secrets stay out of query strings. Returns `{ oauth_id, name, email, picture }` or `null`. The Graph API version used by this module is defined in code as a single constant (currently `v19.0`) for easy upgrades.
272
314
 
273
315
  ```ts
274
316
  import { FacebookUtils } from "@knsdev/node-utils/FBUtils.js";
275
317
 
276
- const profile = await FacebookUtils.getUserFromJwt(
318
+ const profile = await FacebookUtils.getUserFromAccessToken(
277
319
  accessToken,
278
320
  process.env.FB_APP_ID!,
279
321
  process.env.FB_APP_SECRET!,
@@ -302,7 +344,7 @@ if (failure) {
302
344
  console.log(success.hostname, success.challenge_ts);
303
345
  }
304
346
 
305
- // Or throw on any failure:
347
+ // Or throw on any failure (last arg is reserved for API stability / future use; pass your app env):
306
348
  const result = await TurnstileValidator.validateOrThrow(
307
349
  secret,
308
350
  tokenFromClient,
@@ -339,7 +381,7 @@ function configure(env: TAppEnvs) {
339
381
 
340
382
  ### `zod` (optional)
341
383
 
342
- Prebuilt Zod schemas aligned with `ECApiCodes` / length constants (password, email, slug, 6-digit codes, Turnstile token, etc.).
384
+ Prebuilt Zod schemas aligned with `CLengths` and machine-friendly error codes (`TZodCodes` / `ECApiCodes` style): `z_PASSWORD`, `z_GENERAL_TOKEN`, `z_CODE_6_DIGITS`, `z_SLUG`, `z_EMAIL`, `z_FIRST_NAME`, `z_LAST_NAME`, `z_TURNSTILE_TOKEN`, `z_LOGOUT_OTHER_SESSIONS`, `z_REMEMBER_ME`.
343
385
 
344
386
  ```ts
345
387
  import { z_EMAIL, z_PASSWORD } from "@knsdev/node-utils/zod.js";
@@ -361,7 +403,7 @@ const LoginBody = z.object({
361
403
  | Google ID token | `jose` |
362
404
  | Passwords | `bcrypt` |
363
405
  | Schemas | `zod` |
364
- | Cookies | `express` (types / `Response`) |
406
+ | Cookies + Express helpers | `express` (types / `Response`) |
365
407
 
366
408
  ---
367
409
 
@@ -1,2 +1,2 @@
1
- export type ECApiCodes = `API_ERROR` | `CREATED` | `UPDATED` | `DELETED` | `FETCHED` | `VALIDATED` | `AUTHENTICATED` | `SUCCESS` | `BAD_REQUEST` | `AUTHORIZED` | `UNAUTHORIZED` | `FORBIDDEN` | `NOT_FOUND` | `INTERNAL_SERVER_ERROR` | `TOO_MANY_REQUESTS` | `JWT__ENCRYPTION_FAILED` | `JWT__INVALID_OR_EXPIRED` | `CAPTCHA__VALIDATION_FAILED` | `PASSWORD__INVALID` | `PASSWORD__MIN_LENGTH` | `PASSWORD__MAX_LENGTH` | `GENERAL_TOKEN__INVALID` | `GENERAL_TOKEN__LENGTH` | `CODE_6_DIGITS__INVALID` | `CODE_6_DIGITS__LENGTH` | `CODE_6_DIGITS__INVALID_FORMAT` | `EMAIL__INVALID` | `EMAIL__MIN_LENGTH` | `EMAIL__MAX_LENGTH` | `FIRST_NAME__INVALID` | `FIRST_NAME__MIN_LENGTH` | `FIRST_NAME__MAX_LENGTH` | `LAST_NAME__INVALID` | `LAST_NAME__MAX_LENGTH` | `TURNSTILE_TOKEN__INVALID` | `TURNSTILE_TOKEN__MIN_LENGTH` | `TURNSTILE_TOKEN__MAX_LENGTH` | `CONFIRM_PASSWORD__DONT_MATCH` | `LOGOUT_OTHER_SESSIONS__INVALID` | `REMEMBER_ME__INVALID` | `SLUG__MIN_LENGTH` | `SLUG__MAX_LENGTH` | `SLUG__NAME__MIN_LENGTH` | `SLUG__NAME__MAX_LENGTH` | `SLUG__DESCRIPTION__MIN_LENGTH` | `SLUG__DESCRIPTION__MAX_LENGTH` | `SLUG__INVALID` | `USERNAME__INVALID` | `USERNAME__MIN_LENGTH` | `USERNAME__MAX_LENGTH` | `DESIGNATION__INVALID` | `DESIGNATION_MAX_LENGTH` | `BIO__INVALID` | `BIO_MAX_LENGTH` | `PROFILE_VISIBILITY__INVALID` | `ID__INVALID`;
1
+ export type ECApiCodes = `API_ERROR` | `CREATED` | `UPDATED` | `DELETED` | `FETCHED` | `VALIDATED` | `AUTHENTICATED` | `SUCCESS` | `BAD_REQUEST` | `AUTHORIZED` | `UNAUTHORIZED` | `FORBIDDEN` | `NOT_FOUND` | `INVALID_PASSWORD_OR_USER_NOT_FOUND` | `INTERNAL_SERVER_ERROR` | `TOO_MANY_REQUESTS` | `JWT__ENCRYPTION_FAILED` | `JWT__INVALID_OR_EXPIRED` | `CAPTCHA__VALIDATION_FAILED` | `PASSWORD__INVALID` | `PASSWORD__MIN_LENGTH` | `PASSWORD__MAX_LENGTH` | `GENERAL_TOKEN__INVALID` | `GENERAL_TOKEN__LENGTH` | `CODE_6_DIGITS__INVALID` | `CODE_6_DIGITS__LENGTH` | `CODE_6_DIGITS__INVALID_FORMAT` | `EMAIL__INVALID` | `EMAIL__MIN_LENGTH` | `EMAIL__MAX_LENGTH` | `FIRST_NAME__INVALID` | `FIRST_NAME__MIN_LENGTH` | `FIRST_NAME__MAX_LENGTH` | `LAST_NAME__INVALID` | `LAST_NAME__MAX_LENGTH` | `TURNSTILE_TOKEN__INVALID` | `TURNSTILE_TOKEN__MIN_LENGTH` | `TURNSTILE_TOKEN__MAX_LENGTH` | `CONFIRM_PASSWORD__DONT_MATCH` | `LOGOUT_OTHER_SESSIONS__INVALID` | `REMEMBER_ME__INVALID` | `SLUG__MIN_LENGTH` | `SLUG__MAX_LENGTH` | `SLUG__NAME__MIN_LENGTH` | `SLUG__NAME__MAX_LENGTH` | `SLUG__DESCRIPTION__MIN_LENGTH` | `SLUG__DESCRIPTION__MAX_LENGTH` | `SLUG__INVALID` | `USERNAME__INVALID` | `USERNAME__MIN_LENGTH` | `USERNAME__MAX_LENGTH` | `DESIGNATION__INVALID` | `DESIGNATION_MAX_LENGTH` | `BIO__INVALID` | `BIO_MAX_LENGTH` | `PROFILE_VISIBILITY__INVALID` | `ID__INVALID`;
2
2
  //# sourceMappingURL=ECApiCodes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ECApiCodes.d.ts","sourceRoot":"","sources":["../src/ECApiCodes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,WAAW,GACnC,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,WAAW,GACX,eAAe,GACf,SAAS,GACT,aAAa,GACb,YAAY,GACZ,cAAc,GACd,WAAW,GACX,WAAW,GACX,uBAAuB,GACvB,mBAAmB,GACnB,wBAAwB,GACxB,yBAAyB,GACzB,4BAA4B,GAC5B,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,wBAAwB,GACxB,uBAAuB,GACvB,wBAAwB,GACxB,uBAAuB,GACvB,+BAA+B,GAC/B,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,qBAAqB,GACrB,wBAAwB,GACxB,wBAAwB,GACxB,oBAAoB,GACpB,uBAAuB,GACvB,0BAA0B,GAC1B,6BAA6B,GAC7B,6BAA6B,GAC7B,8BAA8B,GAC9B,gCAAgC,GAChC,sBAAsB,GACtB,kBAAkB,GAClB,kBAAkB,GAClB,wBAAwB,GACxB,wBAAwB,GACxB,+BAA+B,GAC/B,+BAA+B,GAC/B,eAAe,GACf,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,sBAAsB,GACtB,wBAAwB,GACxB,cAAc,GACd,gBAAgB,GAChB,6BAA6B,GAC7B,aAAa,CAAC"}
1
+ {"version":3,"file":"ECApiCodes.d.ts","sourceRoot":"","sources":["../src/ECApiCodes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,WAAW,GACnC,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,WAAW,GACX,eAAe,GACf,SAAS,GACT,aAAa,GACb,YAAY,GACZ,cAAc,GACd,WAAW,GACX,WAAW,GACX,oCAAoC,GACpC,uBAAuB,GACvB,mBAAmB,GACnB,wBAAwB,GACxB,yBAAyB,GACzB,4BAA4B,GAC5B,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,wBAAwB,GACxB,uBAAuB,GACvB,wBAAwB,GACxB,uBAAuB,GACvB,+BAA+B,GAC/B,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,qBAAqB,GACrB,wBAAwB,GACxB,wBAAwB,GACxB,oBAAoB,GACpB,uBAAuB,GACvB,0BAA0B,GAC1B,6BAA6B,GAC7B,6BAA6B,GAC7B,8BAA8B,GAC9B,gCAAgC,GAChC,sBAAsB,GACtB,kBAAkB,GAClB,kBAAkB,GAClB,wBAAwB,GACxB,wBAAwB,GACxB,+BAA+B,GAC/B,+BAA+B,GAC/B,eAAe,GACf,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,sBAAsB,GACtB,wBAAwB,GACxB,cAAc,GACd,gBAAgB,GAChB,6BAA6B,GAC7B,aAAa,CAAC"}
package/dist/FBUtils.d.ts CHANGED
@@ -1,13 +1,17 @@
1
+ /**
2
+ * Facebook Graph API helpers: validate a user access token and load profile data.
3
+ * Import via: `@knsdev/node-utils/FBUtils.js`.
4
+ */
1
5
  declare class facebookUtils {
2
6
  /**
3
- * Validates a Facebook access token and fetches user profile details.
4
- * Uses POST bodies so tokens and app secrets are not placed in request URLs (fewer access-log leaks).
7
+ * Validates a Facebook **user access token** (not a JWT) and fetches profile details.
8
+ * Calls `debug_token` then `/me` via POST so tokens and app secrets stay out of query strings (fewer access-log leaks).
5
9
  * @param token - Facebook user access token.
6
10
  * @param appId - Facebook application ID.
7
11
  * @param appSecret - Facebook application secret.
8
- * @returns Normalized user profile or `null` if token/profile lookup fails.
12
+ * @returns Normalized user profile or `null` if validation or profile lookup fails.
9
13
  */
10
- readonly getUserFromJwt: (token: string, appId: string, appSecret: string) => Promise<{
14
+ readonly getUserFromAccessToken: (token: string, appId: string, appSecret: string) => Promise<{
11
15
  name: string | undefined;
12
16
  email: string | undefined;
13
17
  picture: string | undefined;
@@ -15,7 +19,7 @@ declare class facebookUtils {
15
19
  } | null>;
16
20
  }
17
21
  /**
18
- * Singleton instance of Facebook OAuth utilities.
22
+ * Singleton instance of {@link facebookUtils}.
19
23
  */
20
24
  export declare const FacebookUtils: facebookUtils;
21
25
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"FBUtils.d.ts","sourceRoot":"","sources":["../src/FBUtils.ts"],"names":[],"mappings":"AAWA,cAAM,aAAa;IAClB;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,GAAU,OAAO,MAAM,EAAE,OAAO,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC;QAC1F,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC,CA4DR;CACD;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,eAAsB,CAAC"}
1
+ {"version":3,"file":"FBUtils.d.ts","sourceRoot":"","sources":["../src/FBUtils.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,cAAM,aAAa;IAClB;;;;;;;OAOG;IACH,QAAQ,CAAC,sBAAsB,GAAU,OAAO,MAAM,EAAE,OAAO,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC;QAClG,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC,CA4DR;CACD;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,eAAsB,CAAC"}
package/dist/FBUtils.js CHANGED
@@ -1,20 +1,26 @@
1
1
  import { tryCatch } from "./tryCatch.js";
2
2
  const FORM_URLENCODED = "application/x-www-form-urlencoded";
3
+ /** Graph API version segment used in `https://graph.facebook.com/{version}/…` URLs. */
4
+ const FB_GRAPH_API_VERSION = "v19.0";
5
+ /**
6
+ * Facebook Graph API helpers: validate a user access token and load profile data.
7
+ * Import via: `@knsdev/node-utils/FBUtils.js`.
8
+ */
3
9
  class facebookUtils {
4
10
  /**
5
- * Validates a Facebook access token and fetches user profile details.
6
- * Uses POST bodies so tokens and app secrets are not placed in request URLs (fewer access-log leaks).
11
+ * Validates a Facebook **user access token** (not a JWT) and fetches profile details.
12
+ * Calls `debug_token` then `/me` via POST so tokens and app secrets stay out of query strings (fewer access-log leaks).
7
13
  * @param token - Facebook user access token.
8
14
  * @param appId - Facebook application ID.
9
15
  * @param appSecret - Facebook application secret.
10
- * @returns Normalized user profile or `null` if token/profile lookup fails.
16
+ * @returns Normalized user profile or `null` if validation or profile lookup fails.
11
17
  */
12
- getUserFromJwt = async (token, appId, appSecret) => {
18
+ getUserFromAccessToken = async (token, appId, appSecret) => {
13
19
  const debugBody = new URLSearchParams({
14
20
  input_token: token,
15
21
  access_token: `${appId}|${appSecret}`,
16
22
  });
17
- const [response, error] = await tryCatch(fetch("https://graph.facebook.com/v19.0/debug_token", {
23
+ const [response, error] = await tryCatch(fetch(`https://graph.facebook.com/${FB_GRAPH_API_VERSION}/debug_token`, {
18
24
  method: "POST",
19
25
  headers: { "Content-Type": FORM_URLENCODED },
20
26
  body: debugBody.toString(),
@@ -38,7 +44,7 @@ class facebookUtils {
38
44
  fields: "id,name,email,picture.type(large)",
39
45
  access_token: token,
40
46
  });
41
- const [user, userError] = await tryCatch(fetch("https://graph.facebook.com/v19.0/me", {
47
+ const [user, userError] = await tryCatch(fetch(`https://graph.facebook.com/${FB_GRAPH_API_VERSION}/me`, {
42
48
  method: "POST",
43
49
  headers: { "Content-Type": FORM_URLENCODED },
44
50
  body: meBody.toString(),
@@ -62,7 +68,7 @@ class facebookUtils {
62
68
  };
63
69
  }
64
70
  /**
65
- * Singleton instance of Facebook OAuth utilities.
71
+ * Singleton instance of {@link facebookUtils}.
66
72
  */
67
73
  export const FacebookUtils = new facebookUtils();
68
74
  //# sourceMappingURL=FBUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FBUtils.js","sourceRoot":"","sources":["../src/FBUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AASzC,MAAM,eAAe,GAAG,mCAAmC,CAAC;AAE5D,MAAM,aAAa;IAClB;;;;;;;OAOG;IACM,cAAc,GAAG,KAAK,EAAE,KAAa,EAAE,KAAa,EAAE,SAAiB,EAKtE,EAAE;QAEX,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;YACrC,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,GAAG,KAAK,IAAI,SAAS,EAAE;SACrC,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,8CAA8C,EAAE;YAC9F,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE;YAC5C,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE;SAC1B,CAAC,CAAC,CAAC;QACJ,IAAI,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyE,CAAC;QAC7G,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACb,CAAC;QAED,2FAA2F;QAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC;YACjE,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,MAAM,EAAE,mCAAmC;YAC3C,YAAY,EAAE,KAAK;SACnB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,qCAAqC,EAAE;YACrF,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE;YAC5C,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;SACvB,CAAC,CAAC,CAAC;QACJ,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAkB,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO;YACN,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,WAAW;YAClC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE;SAC1C,CAAC;IACH,CAAC,CAAA;CACD;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"FBUtils.js","sourceRoot":"","sources":["../src/FBUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AASzC,MAAM,eAAe,GAAG,mCAAmC,CAAC;AAE5D,uFAAuF;AACvF,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAErC;;;GAGG;AACH,MAAM,aAAa;IAClB;;;;;;;OAOG;IACM,sBAAsB,GAAG,KAAK,EAAE,KAAa,EAAE,KAAa,EAAE,SAAiB,EAK9E,EAAE;QAEX,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;YACrC,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,GAAG,KAAK,IAAI,SAAS,EAAE;SACrC,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,8BAA8B,oBAAoB,cAAc,EAAE;YAChH,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE;YAC5C,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE;SAC1B,CAAC,CAAC,CAAC;QACJ,IAAI,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyE,CAAC;QAC7G,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACb,CAAC;QAED,2FAA2F;QAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC;YACjE,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,MAAM,EAAE,mCAAmC;YAC3C,YAAY,EAAE,KAAK;SACnB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,8BAA8B,oBAAoB,KAAK,EAAE;YACvG,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE;YAC5C,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;SACvB,CAAC,CAAC,CAAC;QACJ,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAkB,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO;YACN,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,WAAW;YAClC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE;SAC1C,CAAC;IACH,CAAC,CAAA;CACD;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * HMAC utilities for use across projects.
3
- * Import via: @sajjat/utils/HMACUtils
3
+ * Import via: @knsdev/node-utils/HMACUtils.js
4
4
  */
5
5
  declare class hMACUtils {
6
6
  /**
@@ -34,7 +34,10 @@ declare class hMACUtils {
34
34
  */
35
35
  readonly compare: (a: string | Buffer, b: string | Buffer) => boolean;
36
36
  }
37
+ /**
38
+ * Singleton instance of HMAC utilities.
39
+ * Import via: `@knsdev/node-utils/HMACUtils.js`.
40
+ */
37
41
  export declare const HMACUtils: hMACUtils;
38
- export declare const aaa = 1;
39
42
  export {};
40
43
  //# sourceMappingURL=HMACUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HMACUtils.d.ts","sourceRoot":"","sources":["../src/HMACUtils.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,cAAM,SAAS;IAEd;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAa5G;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,CAE7D;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,GAAI,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,KAAG,OAAO,CAcnE;CACD;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC;AAEzC,eAAO,MAAM,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"HMACUtils.d.ts","sourceRoot":"","sources":["../src/HMACUtils.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,cAAM,SAAS;IAEd;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAa5G;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,CAE7D;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,GAAI,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,KAAG,OAAO,CAcnE;CACD;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,WAAkB,CAAC"}
package/dist/HMACUtils.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { createHmac, timingSafeEqual } from "crypto";
2
2
  /**
3
3
  * HMAC utilities for use across projects.
4
- * Import via: @sajjat/utils/HMACUtils
4
+ * Import via: @knsdev/node-utils/HMACUtils.js
5
5
  */
6
6
  class hMACUtils {
7
7
  /**
@@ -57,6 +57,9 @@ class hMACUtils {
57
57
  }
58
58
  };
59
59
  }
60
+ /**
61
+ * Singleton instance of HMAC utilities.
62
+ * Import via: `@knsdev/node-utils/HMACUtils.js`.
63
+ */
60
64
  export const HMACUtils = new hMACUtils();
61
- export const aaa = 1;
62
65
  //# sourceMappingURL=HMACUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HMACUtils.js","sourceRoot":"","sources":["../src/HMACUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAGrD;;;GAGG;AACH,MAAM,SAAS;IAEd;;;;;OAKG;IACM,IAAI,GAAG,CAAC,MAAc,EAAE,KAAa,EAAgE,EAAE;QAC/G,IAAI,CAAC;YACJ,OAAO;gBACN,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;gBACrC,KAAK,EAAE,IAAI;aACX,CAAC;QACH,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACd,OAAO;gBACN,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAc;aACrB,CAAC;QACH,CAAC;IACF,CAAC,CAAA;IAED;;;;;;;OAOG;IACM,WAAW,GAAG,CAAC,MAAc,EAAE,KAAa,EAAU,EAAE;QAChE,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC,CAAA;IAED;;;;;;OAMG;IACM,OAAO,GAAG,CAAC,CAAkB,EAAE,CAAkB,EAAW,EAAE;QACtE,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAE7D,iDAAiD;YACjD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjC,OAAO,KAAK,CAAC;YACd,CAAC;YAED,OAAO,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC,CAAA;CACD;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAEzC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"HMACUtils.js","sourceRoot":"","sources":["../src/HMACUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAGrD;;;GAGG;AACH,MAAM,SAAS;IAEd;;;;;OAKG;IACM,IAAI,GAAG,CAAC,MAAc,EAAE,KAAa,EAAgE,EAAE;QAC/G,IAAI,CAAC;YACJ,OAAO;gBACN,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;gBACrC,KAAK,EAAE,IAAI;aACX,CAAC;QACH,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACd,OAAO;gBACN,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAc;aACrB,CAAC;QACH,CAAC;IACF,CAAC,CAAA;IAED;;;;;;;OAOG;IACM,WAAW,GAAG,CAAC,MAAc,EAAE,KAAa,EAAU,EAAE;QAChE,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC,CAAA;IAED;;;;;;OAMG;IACM,OAAO,GAAG,CAAC,CAAkB,EAAE,CAAkB,EAAW,EAAE;QACtE,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAE7D,iDAAiD;YACjD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjC,OAAO,KAAK,CAAC;YACd,CAAC;YAED,OAAO,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC,CAAA;CACD;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC"}
@@ -43,8 +43,8 @@ declare class jwtUtils {
43
43
  };
44
44
  }
45
45
  /**
46
- * JWT utilities for use across projects.
47
- * Import via: @sajjat/utils/JwtUtils
46
+ * Singleton instance of JWT utilities.
47
+ * Import via: `@knsdev/node-utils/JwtUtils.js`.
48
48
  */
49
49
  export declare const JwtUtils: jwtUtils;
50
50
  export {};
package/dist/JwtUtils.js CHANGED
@@ -71,8 +71,8 @@ class jwtUtils {
71
71
  };
72
72
  }
73
73
  /**
74
- * JWT utilities for use across projects.
75
- * Import via: @sajjat/utils/JwtUtils
74
+ * Singleton instance of JWT utilities.
75
+ * Import via: `@knsdev/node-utils/JwtUtils.js`.
76
76
  */
77
77
  export const JwtUtils = new jwtUtils();
78
78
  //# sourceMappingURL=JwtUtils.js.map
@@ -24,15 +24,21 @@ declare class passwordUtils {
24
24
  * Compare plain-text password with bcrypt hash.
25
25
  * @param password - Plain-text password.
26
26
  * @param hashedPassword - BCrypt hash.
27
- * @returns `true`/`false` comparison result, or `false` if comparison throws.
27
+ * @returns `{ success: true }` when the password matches; `{ success: false, error }` when it does not (`BadRequest`) or `bcrypt.compare` throws (`InternalServerError`).
28
28
  */
29
- readonly comparePassword: (password: string, hashedPassword: string) => Promise<boolean | null>;
29
+ readonly comparePassword: (password: string, hashedPassword: string) => Promise<{
30
+ success: true;
31
+ } | {
32
+ success: false;
33
+ error: Error;
34
+ }>;
30
35
  /**
31
- * Compare plain-text password with bcrypt hash and throw on failure.
36
+ * Compare plain-text password with bcrypt hash; throw when the password does not match or comparison errors.
32
37
  * @param password - Plain-text password.
33
38
  * @param hashedPassword - BCrypt hash.
34
- * @returns `true` when password matches hash, otherwise `false`.
35
- * @throws {InternalServerError} If comparison fails unexpectedly.
39
+ * @returns `true` when the password matches the hash.
40
+ * @throws {BadRequest} When the password does not match (same error as `comparePassword` failure path).
41
+ * @throws {InternalServerError} When `bcrypt.compare` throws unexpectedly.
36
42
  */
37
43
  readonly comparePasswordOrThrow: (password: string, hashedPassword: string) => Promise<boolean>;
38
44
  /**
@@ -54,6 +60,5 @@ declare class passwordUtils {
54
60
  * Singleton instance of password utilities.
55
61
  */
56
62
  export declare const PasswordUtils: passwordUtils;
57
- export declare const bbbb = 1;
58
63
  export {};
59
64
  //# sourceMappingURL=PassUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PassUtils.d.ts","sourceRoot":"","sources":["../src/PassUtils.ts"],"names":[],"mappings":"AAMA,cAAM,aAAa;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,GACpB,UAAU,MAAM,EAChB,mBAAgC,KAC9B,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAOtF;IAEF;;;;;;OAMG;IACH,QAAQ,CAAC,mBAAmB,GAC3B,UAAU,MAAM,EAChB,mBAAgC,KAC9B,OAAO,CAAC,MAAM,CAAC,CAOhB;IAEF;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,GACvB,UAAU,MAAM,EAChB,gBAAgB,MAAM,KACpB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAOxB;IAEF;;;;;;OAMG;IACH,QAAQ,CAAC,sBAAsB,GAC9B,UAAU,MAAM,EAChB,gBAAgB,MAAM,KACpB,OAAO,CAAC,OAAO,CAAC,CAOjB;IAEF;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAC/B;IAE9D;;;;OAIG;IACH,QAAQ,CAAC,YAAY,GAAI,OAAO,MAAM,KAAG,OAAO,CACI;CACpD;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,eAAsB,CAAC;AAEjD,eAAO,MAAM,IAAI,IAAM,CAAC"}
1
+ {"version":3,"file":"PassUtils.d.ts","sourceRoot":"","sources":["../src/PassUtils.ts"],"names":[],"mappings":"AAKA,cAAM,aAAa;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,GACpB,UAAU,MAAM,EAChB,mBAAgC,KAC9B,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAOtF;IAEF;;;;;;OAMG;IACH,QAAQ,CAAC,mBAAmB,GAC3B,UAAU,MAAM,EAChB,mBAAgC,KAC9B,OAAO,CAAC,MAAM,CAAC,CAOhB;IAEF;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,GACvB,UAAU,MAAM,EAChB,gBAAgB,MAAM,KACpB,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAW9D;IAEF;;;;;;;OAOG;IACH,QAAQ,CAAC,sBAAsB,GAC9B,UAAU,MAAM,EAChB,gBAAgB,MAAM,KACpB,OAAO,CAAC,OAAO,CAAC,CAMjB;IAEF;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAC/B;IAE9D;;;;OAIG;IACH,QAAQ,CAAC,YAAY,GAAI,OAAO,MAAM,KAAG,OAAO,CACI;CACpD;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,eAAsB,CAAC"}
package/dist/PassUtils.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import bcrypt from "bcrypt";
2
- import { InternalServerError } from "./ErrorClasses.js";
3
- import { aaa } from "./HMACUtils.js";
2
+ import { BadRequest, InternalServerError } from "./ErrorClasses.js";
4
3
  const DEFAULT_SALT_ROUNDS = 10;
5
4
  class passwordUtils {
6
5
  /**
@@ -36,30 +35,34 @@ class passwordUtils {
36
35
  * Compare plain-text password with bcrypt hash.
37
36
  * @param password - Plain-text password.
38
37
  * @param hashedPassword - BCrypt hash.
39
- * @returns `true`/`false` comparison result, or `false` if comparison throws.
38
+ * @returns `{ success: true }` when the password matches; `{ success: false, error }` when it does not (`BadRequest`) or `bcrypt.compare` throws (`InternalServerError`).
40
39
  */
41
40
  comparePassword = async (password, hashedPassword) => {
42
41
  try {
43
- return await bcrypt.compare(password, hashedPassword);
42
+ const isOk = await bcrypt.compare(password, hashedPassword);
43
+ if (!isOk) {
44
+ return { success: false, error: new BadRequest('INVALID_PASSWORD_OR_USER_NOT_FOUND') };
45
+ }
46
+ return { success: isOk };
44
47
  }
45
48
  catch {
46
- return false;
49
+ return { success: false, error: new InternalServerError() };
47
50
  }
48
51
  };
49
52
  /**
50
- * Compare plain-text password with bcrypt hash and throw on failure.
53
+ * Compare plain-text password with bcrypt hash; throw when the password does not match or comparison errors.
51
54
  * @param password - Plain-text password.
52
55
  * @param hashedPassword - BCrypt hash.
53
- * @returns `true` when password matches hash, otherwise `false`.
54
- * @throws {InternalServerError} If comparison fails unexpectedly.
56
+ * @returns `true` when the password matches the hash.
57
+ * @throws {BadRequest} When the password does not match (same error as `comparePassword` failure path).
58
+ * @throws {InternalServerError} When `bcrypt.compare` throws unexpectedly.
55
59
  */
56
60
  comparePasswordOrThrow = async (password, hashedPassword) => {
57
- try {
58
- return await bcrypt.compare(password, hashedPassword);
59
- }
60
- catch {
61
- throw new InternalServerError();
61
+ const res = await this.comparePassword(password, hashedPassword);
62
+ if (!res.success) {
63
+ throw res.error;
62
64
  }
65
+ return res.success;
63
66
  };
64
67
  /**
65
68
  * Validate password length boundaries.
@@ -80,5 +83,4 @@ class passwordUtils {
80
83
  * Singleton instance of password utilities.
81
84
  */
82
85
  export const PasswordUtils = new passwordUtils();
83
- export const bbbb = aaa;
84
86
  //# sourceMappingURL=PassUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PassUtils.js","sourceRoot":"","sources":["../src/PassUtils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,MAAM,aAAa;IAClB;;;;;OAKG;IACM,YAAY,GAAG,KAAK,EAC5B,QAAgB,EAChB,UAAU,GAAG,mBAAmB,EACwD,EAAE;QAC1F,IAAI,CAAC;YACJ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;QACnF,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QAClD,CAAC;IACF,CAAC,CAAC;IAEF;;;;;;OAMG;IACM,mBAAmB,GAAG,KAAK,EACnC,QAAgB,EAChB,UAAU,GAAG,mBAAmB,EACd,EAAE;QACpB,IAAI,CAAC;YACJ,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,CAAC;YACN,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACjC,CAAC;IACF,CAAC,CAAC;IAEF;;;;;OAKG;IACM,eAAe,GAAG,KAAK,EAC/B,QAAgB,EAChB,cAAsB,EACI,EAAE;QAC5B,IAAI,CAAC;YACJ,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,CAAC;YACN,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC,CAAC;IAEF;;;;;;OAMG;IACM,sBAAsB,GAAG,KAAK,EACtC,QAAgB,EAChB,cAAsB,EACH,EAAE;QACrB,IAAI,CAAC;YACJ,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,CAAC;YACN,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACjC,CAAC;IACF,CAAC,CAAC;IAEF;;;;;;OAMG;IACM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAE,SAAiB,EAAW,EAAE,CAC/F,QAAQ,CAAC,MAAM,IAAI,SAAS,IAAI,QAAQ,CAAC,MAAM,IAAI,SAAS,CAAC;IAE9D;;;;OAIG;IACM,YAAY,GAAG,CAAC,KAAa,EAAW,EAAE,CAClD,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;AAEjD,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"PassUtils.js","sourceRoot":"","sources":["../src/PassUtils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,MAAM,aAAa;IAClB;;;;;OAKG;IACM,YAAY,GAAG,KAAK,EAC5B,QAAgB,EAChB,UAAU,GAAG,mBAAmB,EACwD,EAAE;QAC1F,IAAI,CAAC;YACJ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;QACnF,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QAClD,CAAC;IACF,CAAC,CAAC;IAEF;;;;;;OAMG;IACM,mBAAmB,GAAG,KAAK,EACnC,QAAgB,EAChB,UAAU,GAAG,mBAAmB,EACd,EAAE;QACpB,IAAI,CAAC;YACJ,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,CAAC;YACN,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACjC,CAAC;IACF,CAAC,CAAC;IAEF;;;;;OAKG;IACM,eAAe,GAAG,KAAK,EAC/B,QAAgB,EAChB,cAAsB,EAC0C,EAAE;QAClE,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,oCAAoC,CAAC,EAAE,CAAC;YACxF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;QACD,MAAM,CAAC;YACN,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC7D,CAAC;IACF,CAAC,CAAC;IAEF;;;;;;;OAOG;IACM,sBAAsB,GAAG,KAAK,EACtC,QAAgB,EAChB,cAAsB,EACH,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,GAAG,CAAC,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,CAAC,OAAO,CAAC;IACpB,CAAC,CAAC;IAEF;;;;;;OAMG;IACM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAE,SAAiB,EAAW,EAAE,CAC/F,QAAQ,CAAC,MAAM,IAAI,SAAS,IAAI,QAAQ,CAAC,MAAM,IAAI,SAAS,CAAC;IAE9D;;;;OAIG;IACM,YAAY,GAAG,CAAC,KAAa,EAAW,EAAE,CAClD,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
@@ -39,15 +39,15 @@ declare class turnstileValidator {
39
39
  * @param remoteip - Optional client IP.
40
40
  * @param options - Optional expected action/hostname and idempotency key.
41
41
  * @param timeout - Request timeout in milliseconds.
42
- * @param APP_ENV - Reserved; forwarded to `validate` for API stability.
42
+ * @param _APP_ENV - Reserved for callers (e.g. future logging policy); forwarded to `validate` for API stability; unused.
43
43
  * @returns Successful Turnstile verification payload.
44
- * @throws {BadRequest} When token validation fails.
44
+ * @throws {BadRequest} With code `CAPTCHA__VALIDATION_FAILED` when token validation fails.
45
45
  */
46
46
  readonly validateOrThrow: (secretKey: string, token: string, remoteip: string | null | undefined, options: {
47
47
  expectedAction?: string;
48
48
  expectedHostname?: string;
49
49
  idempotencyKey?: string;
50
- } | undefined, timeout: number | undefined, APP_ENV: TAppEnvs) => Promise<TurnstileValidationSuccess>;
50
+ } | undefined, timeout: number | undefined, _APP_ENV: TAppEnvs) => Promise<TurnstileValidationSuccess>;
51
51
  }
52
52
  /**
53
53
  * Singleton instance of Turnstile validation utilities.
@@ -1 +1 @@
1
- {"version":3,"file":"TurnstileValidator.d.ts","sourceRoot":"","sources":["../src/TurnstileValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,KAAK,cAAc,GAAG,sBAAsB,GAC3C,gBAAgB,GAChB,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,gBAAgB,CAAC;AAElB,KAAK,wBAAwB,GAAG;IAC/B,SAAS,EAAE,KAAK,CAAC;IACjB,aAAa,EAAE,CACd,cAAc,GACd,sBAAsB,GACtB,sBAAsB,GACtB,wBAAwB,GACxB,wBAAwB,GACxB,aAAa,GACb,sBAAsB,GACtB,gBAAgB,CAChB,EAAE,CAAC;CACJ,CAAC;AAEF,KAAK,0BAA0B,GAAG;IACjC,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE;QACX,cAAc,EAAE,MAAM,CAAC;KACvB,CAAC;CACF,CAAA;AAED,KAAK,yBAAyB,GAAG,CAAC,IAAI,EAAE,wBAAwB,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;AAGvG,cAAM,kBAAkB;IACvB;;;;;;;;;OASG;IACH,QAAQ,CAAC,QAAQ,GAChB,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,UAAU,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,SAAS;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,YAAK,EAC7F,2BAAe,EACf,SAAS,QAAQ,KACf,OAAO,CAAC,yBAAyB,CAAC,CAmFpC;IAED;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,eAAe,GACvB,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,UAAU,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,SAAS;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,YAAK,EAC7F,2BAAe,EACf,SAAS,QAAQ,KACf,OAAO,CAAC,0BAA0B,CAAC,CAMrC;CACD;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
1
+ {"version":3,"file":"TurnstileValidator.d.ts","sourceRoot":"","sources":["../src/TurnstileValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,KAAK,cAAc,GAAG,sBAAsB,GAC3C,gBAAgB,GAChB,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,gBAAgB,CAAC;AAElB,KAAK,wBAAwB,GAAG;IAC/B,SAAS,EAAE,KAAK,CAAC;IACjB,aAAa,EAAE,CACd,cAAc,GACd,sBAAsB,GACtB,sBAAsB,GACtB,wBAAwB,GACxB,wBAAwB,GACxB,aAAa,GACb,sBAAsB,GACtB,gBAAgB,CAChB,EAAE,CAAC;CACJ,CAAC;AAEF,KAAK,0BAA0B,GAAG;IACjC,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE;QACX,cAAc,EAAE,MAAM,CAAC;KACvB,CAAC;CACF,CAAA;AAED,KAAK,yBAAyB,GAAG,CAAC,IAAI,EAAE,wBAAwB,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;AAGvG,cAAM,kBAAkB;IACvB;;;;;;;;;OASG;IACH,QAAQ,CAAC,QAAQ,GAChB,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,UAAU,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,SAAS;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,YAAK,EAC7F,2BAAe,EACf,SAAS,QAAQ,KACf,OAAO,CAAC,yBAAyB,CAAC,CAmFpC;IAED;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,eAAe,GACvB,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,UAAU,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,SAAS;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,YAAK,EAC7F,2BAAe,EACf,UAAU,QAAQ,KAChB,OAAO,CAAC,0BAA0B,CAAC,CAMrC;CACD;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -80,12 +80,12 @@ class turnstileValidator {
80
80
  * @param remoteip - Optional client IP.
81
81
  * @param options - Optional expected action/hostname and idempotency key.
82
82
  * @param timeout - Request timeout in milliseconds.
83
- * @param APP_ENV - Reserved; forwarded to `validate` for API stability.
83
+ * @param _APP_ENV - Reserved for callers (e.g. future logging policy); forwarded to `validate` for API stability; unused.
84
84
  * @returns Successful Turnstile verification payload.
85
- * @throws {BadRequest} When token validation fails.
85
+ * @throws {BadRequest} With code `CAPTCHA__VALIDATION_FAILED` when token validation fails.
86
86
  */
87
- validateOrThrow = async (secretKey, token, remoteip, options = {}, timeout = 10000, APP_ENV) => {
88
- const [result, error] = await this.validate(secretKey, token, remoteip, options, timeout, APP_ENV);
87
+ validateOrThrow = async (secretKey, token, remoteip, options = {}, timeout = 10000, _APP_ENV) => {
88
+ const [result, error] = await this.validate(secretKey, token, remoteip, options, timeout, _APP_ENV);
89
89
  if (error) {
90
90
  throw new BadRequest('CAPTCHA__VALIDATION_FAILED');
91
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TurnstileValidator.js","sourceRoot":"","sources":["../src/TurnstileValidator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TurnstileValidator.js","sourceRoot":"","sources":["../src/TurnstileValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { NextFunction, Request, RequestHandler, Response } from "express";
2
+ import type { NoInfer } from "./types.js";
3
+ /**
4
+ * Send JSON on the response. Requires an explicit generic payload type at the call site.
5
+ * @template T - Response body type (must be provided explicitly).
6
+ * @param res - Express `Response`.
7
+ * @param data - Serializable payload to send as JSON.
8
+ * @returns The result of `res.json(data)`.
9
+ */
10
+ export declare const SendRes: <T = "Error: A generic type parameter is required">(res: Response, data: NoInfer<T>) => Response<any, Record<string, any>>;
11
+ /**
12
+ * Wrap a route handler so rejected promises and thrown errors are passed to `next(error)`.
13
+ * @param fn - Async or sync Express `RequestHandler`.
14
+ * @returns A middleware that runs `fn` inside `try/catch` and forwards failures to `next`.
15
+ */
16
+ export declare const CatchExpress: (fn: RequestHandler) => (req: Request, res: Response, next: NextFunction) => Promise<void>;
17
+ //# sourceMappingURL=express.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../src/express.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,GAAG,6CAA6C,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,uCAAmB,CAAC;AAE9H;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,IAAI,cAAc,MAAY,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,OAAO,CAAC,IAAI,CAOxH,CAAC"}
@@ -0,0 +1,23 @@
1
+ // Express helpers: typed JSON + async error forwarding. Import: `@knsdev/node-utils/express.js`.
2
+ /**
3
+ * Send JSON on the response. Requires an explicit generic payload type at the call site.
4
+ * @template T - Response body type (must be provided explicitly).
5
+ * @param res - Express `Response`.
6
+ * @param data - Serializable payload to send as JSON.
7
+ * @returns The result of `res.json(data)`.
8
+ */
9
+ export const SendRes = (res, data) => res.json(data);
10
+ /**
11
+ * Wrap a route handler so rejected promises and thrown errors are passed to `next(error)`.
12
+ * @param fn - Async or sync Express `RequestHandler`.
13
+ * @returns A middleware that runs `fn` inside `try/catch` and forwards failures to `next`.
14
+ */
15
+ export const CatchExpress = (fn) => async (req, res, next) => {
16
+ try {
17
+ await fn(req, res, next);
18
+ }
19
+ catch (error) {
20
+ next(error);
21
+ }
22
+ };
23
+ //# sourceMappingURL=express.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../src/express.ts"],"names":[],"mappings":"AAGA,iGAAiG;AAEjG;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAoD,GAAa,EAAE,IAAgB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE9H;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAkB,EAAE,EAAE,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAiB,EAAE;IAC5H,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,CAAC;IACb,CAAC;AACF,CAAC,CAAC"}
package/dist/getEnvv.d.ts CHANGED
@@ -12,9 +12,10 @@ type ResolvedEnv<T extends EnvSchema> = {
12
12
  };
13
13
  /**
14
14
  * Resolve and validate environment variables from a schema.
15
- * @param schema - Map of env keys to expected primitive types.
15
+ * @param schema - Map of env keys to expected primitive types (`string`, `int`, `float`, `boolean`, `appEnv`).
16
16
  * @returns Parsed environment object with inferred value types.
17
- * @throws {Error} If required keys are missing or values fail validation.
17
+ * @throws {Error} When any key is missing/empty or any value fails type checks. The message is two sections joined by
18
+ * a line of `================================`: `Not found keys: …` (if applicable) and `Value errors: …` (if applicable).
18
19
  */
19
20
  export declare const getEnvv: <T extends EnvSchema>(schema: T) => ResolvedEnv<T>;
20
21
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"getEnvv.d.ts","sourceRoot":"","sources":["../src/getEnvv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,KAAK,OAAO,GAAG;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC;AAE/C,KAAK,WAAW,CAAC,CAAC,SAAS,SAAS,IAAI;KACtC,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,SAAS,EAAE,QAAQ,CAAC,KAAG,WAAW,CAAC,CAAC,CAiErE,CAAC"}
1
+ {"version":3,"file":"getEnvv.d.ts","sourceRoot":"","sources":["../src/getEnvv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,KAAK,OAAO,GAAG;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC;AAE/C,KAAK,WAAW,CAAC,CAAC,SAAS,SAAS,IAAI;KACtC,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,SAAS,EAAE,QAAQ,CAAC,KAAG,WAAW,CAAC,CAAC,CAgErE,CAAC"}
package/dist/getEnvv.js CHANGED
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Resolve and validate environment variables from a schema.
3
- * @param schema - Map of env keys to expected primitive types.
3
+ * @param schema - Map of env keys to expected primitive types (`string`, `int`, `float`, `boolean`, `appEnv`).
4
4
  * @returns Parsed environment object with inferred value types.
5
- * @throws {Error} If required keys are missing or values fail validation.
5
+ * @throws {Error} When any key is missing/empty or any value fails type checks. The message is two sections joined by
6
+ * a line of `================================`: `Not found keys: …` (if applicable) and `Value errors: …` (if applicable).
6
7
  */
7
8
  export const getEnvv = (schema) => {
8
9
  const result = {};
@@ -57,11 +58,12 @@ export const getEnvv = (schema) => {
57
58
  }
58
59
  }
59
60
  if (notFoundKeys.length + valueErrors.length > 0) {
60
- throw new Error(`
61
- ${notFoundKeys.length > 0 ? `Not found keys: ${notFoundKeys.join(', ')}` : ''}
62
- ================================
63
- ${valueErrors.length > 0 ? `Value errors: ${valueErrors.join(', ')}` : ''}
64
- `);
61
+ const parts = [];
62
+ if (notFoundKeys.length > 0)
63
+ parts.push(`Not found keys: ${notFoundKeys.join(', ')}`);
64
+ if (valueErrors.length > 0)
65
+ parts.push(`Value errors: ${valueErrors.join(', ')}`);
66
+ throw new Error(parts.join('\n================================\n'));
65
67
  }
66
68
  return result;
67
69
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getEnvv.js","sourceRoot":"","sources":["../src/getEnvv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getEnvv.js","sourceRoot":"","sources":["../src/getEnvv.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,11 @@
1
+ /**
2
+ * Convenience barrel re-exporting public modules. Prefer **per-file** imports from `@knsdev/node-utils/<Module>.js` in apps (matches `package.json` `exports`).
3
+ */
1
4
  export { CookieUtils } from "./Cookies.js";
2
5
  export * from "./bnUtils.js";
3
6
  export type { ECApiCodes } from "./ECApiCodes.js";
4
7
  export * from "./ErrorClasses.js";
8
+ export { CatchExpress, SendRes } from "./express.js";
5
9
  export { FacebookUtils } from "./FBUtils.js";
6
10
  export { getEnvv } from "./getEnvv.js";
7
11
  export { GoogleUtils } from "./GoogleUtils.js";
@@ -15,5 +19,6 @@ export * from "./Rand.js";
15
19
  export { tryCatch, tryCatch2 } from "./tryCatch.js";
16
20
  export { TurnstileValidator } from "./TurnstileValidator.js";
17
21
  export type * from "./types.js";
22
+ export { PageLimit, sleep } from "./utils.js";
18
23
  export { validateUUID } from "./validators.js";
19
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,10 @@
1
+ /**
2
+ * Convenience barrel re-exporting public modules. Prefer **per-file** imports from `@knsdev/node-utils/<Module>.js` in apps (matches `package.json` `exports`).
3
+ */
1
4
  export { CookieUtils } from "./Cookies.js";
2
5
  export * from "./bnUtils.js";
3
6
  export * from "./ErrorClasses.js";
7
+ export { CatchExpress, SendRes } from "./express.js";
4
8
  export { FacebookUtils } from "./FBUtils.js";
5
9
  export { getEnvv } from "./getEnvv.js";
6
10
  export { GoogleUtils } from "./GoogleUtils.js";
@@ -13,5 +17,6 @@ export { PasswordUtils } from "./PassUtils.js";
13
17
  export * from "./Rand.js";
14
18
  export { tryCatch, tryCatch2 } from "./tryCatch.js";
15
19
  export { TurnstileValidator } from "./TurnstileValidator.js";
20
+ export { PageLimit, sleep } from "./utils.js";
16
21
  export { validateUUID } from "./validators.js";
17
22
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,cAAc,cAAc,CAAC;AAE7B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,cAAc,cAAc,CAAC;AAE7B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -6,4 +6,5 @@ export type TUserStatuses = 'active' | 'inactive' | 'pending' | 'blocked' | 'del
6
6
  export type TUserGenders = 'male' | 'female' | 'other' | 'prefer_not_to_say';
7
7
  export type TVisibility = 'public' | 'private' | 'protected' | 'hidden';
8
8
  export type TThemes = 'light' | 'dark' | 'system';
9
+ export type NoInfer<T> = [T][T extends unknown ? 0 : never];
9
10
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAC1J,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC1H,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,KAAK,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AACxG,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AACtF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,mBAAmB,CAAC;AAC7E,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AACxE,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAC1J,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC1H,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,KAAK,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AACxG,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AACtF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,mBAAmB,CAAC;AAC7E,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AACxE,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAClD,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Resolve after `ms` milliseconds.
3
+ * @param ms - Delay in milliseconds.
4
+ * @returns A promise that resolves with `undefined` after the delay.
5
+ */
6
+ export declare const sleep: (ms: number) => Promise<unknown>;
7
+ /**
8
+ * Normalize common list-query parameters: page, limit, skip, sort, optional search, and remaining keys as string filters.
9
+ * @param query - Typically `req.query` or a similar flat object (values may be string, number, or undefined).
10
+ * @returns Pagination/sorting fields plus `filtersData` (all other keys coerced to string values).
11
+ */
12
+ export declare const PageLimit: (query: {
13
+ [key: string]: string | number | undefined;
14
+ }) => {
15
+ page: number;
16
+ limit: number;
17
+ skip: number;
18
+ sortBy: string;
19
+ sortOrder: string;
20
+ searchTerm?: string;
21
+ filtersData: {
22
+ [key: string]: string;
23
+ };
24
+ };
25
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,qBAAoD,CAAC;AAErF;;;;GAIG;AACH,eAAO,MAAM,SAAS,GACrB,OAAO;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,KACnD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;CAe7I,CAAA"}
package/dist/utils.js ADDED
@@ -0,0 +1,22 @@
1
+ // Timing and list-query helpers. Import: `@knsdev/node-utils/utils.js`.
2
+ /**
3
+ * Resolve after `ms` milliseconds.
4
+ * @param ms - Delay in milliseconds.
5
+ * @returns A promise that resolves with `undefined` after the delay.
6
+ */
7
+ export const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
8
+ /**
9
+ * Normalize common list-query parameters: page, limit, skip, sort, optional search, and remaining keys as string filters.
10
+ * @param query - Typically `req.query` or a similar flat object (values may be string, number, or undefined).
11
+ * @returns Pagination/sorting fields plus `filtersData` (all other keys coerced to string values).
12
+ */
13
+ export const PageLimit = (query) => {
14
+ const { page: rawPage, limit: rawLimit, sortBy: rawSortBy, sortOrder: rawSortOrder, searchTerm, ...filtersData } = query;
15
+ const page = Number(rawPage || 1);
16
+ const limit = Number(rawLimit || 10);
17
+ const skip = (page - 1) * limit;
18
+ const sortBy = rawSortBy || "created_at";
19
+ const sortOrder = rawSortOrder || "desc";
20
+ return { page, limit, skip, sortBy, sortOrder, searchTerm, filtersData };
21
+ };
22
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAErF;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,KAAqD,EAC2F,EAAE;IAClJ,MAAM,EACL,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,EACvB,UAAU,EACV,GAAG,WAAW,EACd,GAAG,KAAK,CAAC;IACV,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAChC,MAAM,MAAM,GAAG,SAAS,IAAI,YAAY,CAAC;IACzC,MAAM,SAAS,GAAG,YAAY,IAAI,MAAM,CAAC;IACzC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAmJ,CAAA;AAC1N,CAAC,CAAA"}
package/dist/zod.d.ts CHANGED
@@ -1,12 +1,22 @@
1
1
  import { z } from "zod";
2
+ /** Password string within configured min/max length. */
2
3
  export declare const z_PASSWORD: z.ZodString;
4
+ /** Alphanumeric + hyphen/underscore token of fixed length (`CLengths.GENERAL_TOKEN`). */
3
5
  export declare const z_GENERAL_TOKEN: z.ZodString;
6
+ /** Exactly six decimal digits. */
4
7
  export declare const z_CODE_6_DIGITS: z.ZodString;
8
+ /** URL-safe slug: length bounds and `[a-zA-Z0-9-_]` only. */
5
9
  export declare const z_SLUG: z.ZodString;
10
+ /** Email with configured min/max length (beyond Zod’s built-in email check). */
6
11
  export declare const z_EMAIL: z.ZodEmail;
12
+ /** First name within configured length. */
7
13
  export declare const z_FIRST_NAME: z.ZodString;
14
+ /** Last name within configured length. */
8
15
  export declare const z_LAST_NAME: z.ZodString;
16
+ /** Cloudflare Turnstile response token length bounds. */
9
17
  export declare const z_TURNSTILE_TOKEN: z.ZodString;
18
+ /** Boolean flag for “log out other sessions” style fields. */
10
19
  export declare const z_LOGOUT_OTHER_SESSIONS: z.ZodBoolean;
20
+ /** Boolean flag for “remember me” style fields. */
11
21
  export declare const z_REMEMBER_ME: z.ZodBoolean;
12
22
  //# sourceMappingURL=zod.d.ts.map
package/dist/zod.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../src/zod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,UAAU,aAEgC,CAAC;AAExD,eAAO,MAAM,eAAe,aAE4B,CAAC;AAEzD,eAAO,MAAM,eAAe,aAE0B,CAAC;AAEvD,eAAO,MAAM,MAAM,aAG4B,CAAC;AAEhD,eAAO,MAAM,OAAO,YAE6B,CAAA;AAEjD,eAAO,MAAM,YAAY,aAEkC,CAAC;AAE5D,eAAO,MAAM,WAAW,aAEiC,CAAC;AAE1D,eAAO,MAAM,iBAAiB,aAEuC,CAAA;AAErE,eAAO,MAAM,uBAAuB,cACkC,CAAC;AAEvE,eAAO,MAAM,aAAa,cACkC,CAAC"}
1
+ {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../src/zod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,wDAAwD;AACxD,eAAO,MAAM,UAAU,aAEgC,CAAC;AAExD,yFAAyF;AACzF,eAAO,MAAM,eAAe,aAE4B,CAAC;AAEzD,kCAAkC;AAClC,eAAO,MAAM,eAAe,aAE0B,CAAC;AAEvD,6DAA6D;AAC7D,eAAO,MAAM,MAAM,aAG4B,CAAC;AAEhD,gFAAgF;AAChF,eAAO,MAAM,OAAO,YAE6B,CAAC;AAElD,2CAA2C;AAC3C,eAAO,MAAM,YAAY,aAEkC,CAAC;AAE5D,0CAA0C;AAC1C,eAAO,MAAM,WAAW,aAEiC,CAAC;AAE1D,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,aAEuC,CAAC;AAEtE,8DAA8D;AAC9D,eAAO,MAAM,uBAAuB,cAAiD,CAAC;AAEtF,mDAAmD;AACnD,eAAO,MAAM,aAAa,cAAuC,CAAC"}
package/dist/zod.js CHANGED
@@ -1,33 +1,42 @@
1
1
  import { z } from "zod";
2
2
  import { CLengths } from "./CLengths.js";
3
+ // Prebuilt schemas: `CLengths` + `TZodCodes`. Import: `@knsdev/node-utils/zod.js`.
3
4
  const k = (key) => key;
5
+ /** Password string within configured min/max length. */
4
6
  export const z_PASSWORD = z.string(k('PASSWORD__INVALID'))
5
7
  .min(CLengths.PASSWORD.min, k('PASSWORD__MIN_LENGTH'))
6
8
  .max(CLengths.PASSWORD.max, k('PASSWORD__MAX_LENGTH'));
9
+ /** Alphanumeric + hyphen/underscore token of fixed length (`CLengths.GENERAL_TOKEN`). */
7
10
  export const z_GENERAL_TOKEN = z.string(k('GENERAL_TOKEN__INVALID'))
8
11
  .length(CLengths.GENERAL_TOKEN, k('GENERAL_TOKEN__LENGTH'))
9
12
  .regex(/^[a-zA-Z0-9-_]+$/, k('GENERAL_TOKEN__INVALID'));
13
+ /** Exactly six decimal digits. */
10
14
  export const z_CODE_6_DIGITS = z.string(k('CODE_6_DIGITS__INVALID'))
11
15
  .length(CLengths.Code_6_digits, k('CODE_6_DIGITS__LENGTH'))
12
16
  .regex(/^\d{6}$/, k('CODE_6_DIGITS__INVALID_FORMAT'));
17
+ /** URL-safe slug: length bounds and `[a-zA-Z0-9-_]` only. */
13
18
  export const z_SLUG = z.string(k('SLUG__INVALID'))
14
19
  .min(CLengths.SLUG.min, k('SLUG__MIN_LENGTH'))
15
20
  .max(CLengths.SLUG.max, k('SLUG__MAX_LENGTH'))
16
21
  .regex(/^[a-zA-Z0-9-_]+$/, k('SLUG__INVALID'));
22
+ /** Email with configured min/max length (beyond Zod’s built-in email check). */
17
23
  export const z_EMAIL = z.email(k('EMAIL__INVALID'))
18
24
  .min(CLengths.EMAIL.min, k('EMAIL__MIN_LENGTH'))
19
25
  .max(CLengths.EMAIL.max, k('EMAIL__MAX_LENGTH'));
26
+ /** First name within configured length. */
20
27
  export const z_FIRST_NAME = z.string(k('FIRST_NAME__INVALID'))
21
28
  .min(CLengths.FIRST_NAME.min, k('FIRST_NAME__MIN_LENGTH'))
22
29
  .max(CLengths.FIRST_NAME.max, k('FIRST_NAME__MAX_LENGTH'));
30
+ /** Last name within configured length. */
23
31
  export const z_LAST_NAME = z.string(k('LAST_NAME__INVALID'))
24
32
  .min(CLengths.LAST_NAME.min, k('LAST_NAME__MIN_LENGTH'))
25
33
  .max(CLengths.LAST_NAME.max, k('LAST_NAME__MAX_LENGTH'));
34
+ /** Cloudflare Turnstile response token length bounds. */
26
35
  export const z_TURNSTILE_TOKEN = z.string(k('TURNSTILE_TOKEN__INVALID'))
27
36
  .min(CLengths.TURNSTILE_TOKEN.min, k('TURNSTILE_TOKEN__MIN_LENGTH'))
28
37
  .max(CLengths.TURNSTILE_TOKEN.max, k('TURNSTILE_TOKEN__MAX_LENGTH'));
29
- export const z_LOGOUT_OTHER_SESSIONS = z.boolean(k('LOGOUT_OTHER_SESSIONS__INVALID'))
30
- .refine((data) => data === true, k('LOGOUT_OTHER_SESSIONS__INVALID'));
31
- export const z_REMEMBER_ME = z.boolean(k('REMEMBER_ME__INVALID'))
32
- .refine((data) => data === true, k('REMEMBER_ME__INVALID'));
38
+ /** Boolean flag for “log out other sessions” style fields. */
39
+ export const z_LOGOUT_OTHER_SESSIONS = z.boolean(k('LOGOUT_OTHER_SESSIONS__INVALID'));
40
+ /** Boolean flag for “remember me” style fields. */
41
+ export const z_REMEMBER_ME = z.boolean(k('REMEMBER_ME__INVALID'));
33
42
  //# sourceMappingURL=zod.js.map
package/dist/zod.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"zod.js","sourceRoot":"","sources":["../src/zod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zod.js","sourceRoot":"","sources":["../src/zod.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knsdev/node-utils",
3
- "version": "3.0.0",
3
+ "version": "3.2.0",
4
4
  "description": "",
5
5
  "exports": {
6
6
  "./*": {
@@ -9,7 +9,8 @@
9
9
  }
10
10
  },
11
11
  "scripts": {
12
- "build": "tsc",
12
+ "clean": "rm -rf dist",
13
+ "build": "npm run clean && tsc",
13
14
  "dev": "tsc --watch",
14
15
  "check-types": "tsc --noEmit",
15
16
  "prepublishOnly": "npm run build"