@rudderjs/hash 0.0.7 → 1.0.1

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/README.md CHANGED
@@ -25,8 +25,8 @@ export default {
25
25
  }
26
26
 
27
27
  // bootstrap/providers.ts
28
- import { hash } from '@rudderjs/hash'
29
- export default [hash(configs.hash), ...]
28
+ import { HashProvider } from '@rudderjs/hash'
29
+ export default [HashProvider]
30
30
  ```
31
31
 
32
32
  ## Usage
@@ -0,0 +1,66 @@
1
+ # @rudderjs/hash
2
+
3
+ ## Overview
4
+
5
+ One-way password hashing — bcrypt (default, pure JS via `bcryptjs`, no native build) and argon2 (optional peer, native). Provides the `Hash` facade with `make`, `check`, and `needsRehash`. **Required peer of `@rudderjs/auth`** — `EloquentUserProvider.validateCredentials()` calls `hashCheck()` internally, and `HashProvider` must appear before `AuthProvider` in the providers array.
6
+
7
+ ## Key Patterns
8
+
9
+ ### Setup
10
+
11
+ ```ts
12
+ // config/hash.ts
13
+ export default {
14
+ driver: 'bcrypt',
15
+ bcrypt: { rounds: 12 },
16
+ argon2: { memory: 65536, time: 3, threads: 4 },
17
+ } satisfies HashConfig
18
+
19
+ // bootstrap/providers.ts — HashProvider MUST come before AuthProvider
20
+ import { HashProvider } from '@rudderjs/hash'
21
+ import { AuthProvider } from '@rudderjs/auth'
22
+
23
+ export default [
24
+ HashProvider,
25
+ AuthProvider,
26
+ ]
27
+ ```
28
+
29
+ ### Usage
30
+
31
+ ```ts
32
+ import { Hash } from '@rudderjs/hash'
33
+
34
+ const hashed = await Hash.make('password') // hash on register/password-change
35
+ const valid = await Hash.check('password', hashed) // verify on login
36
+
37
+ if (Hash.needsRehash(hashed)) {
38
+ // Rounds changed since this hash was made — rehash after successful login
39
+ const upgraded = await Hash.make('password')
40
+ await User.update(user.id, { password: upgraded })
41
+ }
42
+ ```
43
+
44
+ ### Bcrypt (default)
45
+
46
+ Uses `bcryptjs` — pure JavaScript, no native compilation. Slower than native bcrypt but works everywhere Node runs (including Bun, Deno, Cloudflare Workers). Default rounds: 12.
47
+
48
+ ### Argon2 (optional)
49
+
50
+ Install the peer: `pnpm add argon2`. Faster for the same security level, but requires native build (fails on runtimes without native bindings).
51
+
52
+ ## Common Pitfalls
53
+
54
+ - **`HashProvider` after `AuthProvider` in providers array.** Auth's `validateCredentials` looks up `Hash` at boot; if `HashProvider` hasn't run yet, auth throws. Order matters.
55
+ - **`argon2` not installed.** The driver lazy-loads the SDK. Set `driver: 'argon2'` without installing → error on first `Hash.make()`.
56
+ - **Mixing drivers across environments.** A hash generated with bcrypt won't verify with argon2 (different algorithm). Pick one driver per deployment; use `needsRehash()` + re-hash-on-login to migrate gradually.
57
+ - **Rounds tuning.** 12 is a reasonable default for 2026. Going below 10 is insecure; going above 14 gets visibly slow on every login. Benchmark on your hardware before changing.
58
+ - **Hashing non-passwords.** `@rudderjs/hash` is for passwords specifically (one-way, intentionally slow). For API tokens, use `@rudderjs/crypt` (symmetric encryption) or SHA-256 hashing as appropriate — Passport uses SHA-256 for client secrets and JWT signing for tokens.
59
+
60
+ ## Key Imports
61
+
62
+ ```ts
63
+ import { HashProvider, Hash } from '@rudderjs/hash'
64
+
65
+ import type { HashConfig } from '@rudderjs/hash'
66
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rudderjs/hash",
3
- "version": "0.0.7",
3
+ "version": "1.0.1",
4
4
  "rudderjs": {
5
5
  "provider": "HashProvider",
6
6
  "stage": "infrastructure"
@@ -13,7 +13,8 @@
13
13
  },
14
14
  "type": "module",
15
15
  "files": [
16
- "dist"
16
+ "dist",
17
+ "boost"
17
18
  ],
18
19
  "main": "./dist/index.js",
19
20
  "types": "./dist/index.d.ts",
@@ -25,7 +26,7 @@
25
26
  },
26
27
  "dependencies": {
27
28
  "bcryptjs": "^2.4.3",
28
- "@rudderjs/core": "0.1.1"
29
+ "@rudderjs/core": "^1.1.2"
29
30
  },
30
31
  "optionalDependencies": {
31
32
  "argon2": "^0.41.0"