clearauth 0.4.0 → 0.4.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/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **Automatic Cloudflare Workers PBKDF2 Iteration Count** - ClearAuth now automatically detects Cloudflare Workers environment and uses 100,000 PBKDF2 iterations (instead of 600,000) to comply with Cloudflare's WebCrypto PBKDF2 iteration limit. This prevents "iteration counts above 100000 are not supported" errors when using email/password authentication on Cloudflare Workers.
|
|
13
|
+
- Runtime environment detection for Cloudflare Workers
|
|
14
|
+
- Automatic fallback to 100,000 iterations on Cloudflare Workers
|
|
15
|
+
- Maintains 600,000 iterations (OWASP recommended) for other environments
|
|
16
|
+
- No configuration required - works automatically
|
|
17
|
+
- Updated documentation in `CLOUDFLARE.md` with detailed explanation
|
|
18
|
+
- Added JSDoc comments explaining the automatic detection
|
|
19
|
+
|
|
10
20
|
## [0.4.0] - 2026-01-12
|
|
11
21
|
|
|
12
22
|
### Added
|
package/dist/createMechAuth.d.ts
CHANGED
|
@@ -135,6 +135,8 @@ export type CreateClearAuthOptions = {
|
|
|
135
135
|
* ```ts
|
|
136
136
|
* import { createClearAuth, defaultSessionConfig } from 'clearauth'
|
|
137
137
|
*
|
|
138
|
+
* // ClearAuth automatically detects Cloudflare Workers and uses 100,000 PBKDF2 iterations
|
|
139
|
+
* // (instead of the default 600,000) to comply with Cloudflare's WebCrypto limits
|
|
138
140
|
* const config = createClearAuth({
|
|
139
141
|
* secret: env.AUTH_SECRET,
|
|
140
142
|
* baseUrl: 'https://yourdomain.com',
|
package/dist/createMechAuth.js
CHANGED
|
@@ -104,6 +104,8 @@ function isSimpleDatabaseConfig(db) {
|
|
|
104
104
|
* ```ts
|
|
105
105
|
* import { createClearAuth, defaultSessionConfig } from 'clearauth'
|
|
106
106
|
*
|
|
107
|
+
* // ClearAuth automatically detects Cloudflare Workers and uses 100,000 PBKDF2 iterations
|
|
108
|
+
* // (instead of the default 600,000) to comply with Cloudflare's WebCrypto limits
|
|
107
109
|
* const config = createClearAuth({
|
|
108
110
|
* secret: env.AUTH_SECRET,
|
|
109
111
|
* baseUrl: 'https://yourdomain.com',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMechAuth.js","sourceRoot":"","sources":["../src/createMechAuth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAyB,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AAEjE,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS;IACtC,MAAM,EAAE;QACN,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAc;QACxB,IAAI,EAAE,GAAG;KACV;CACO,CAAA;AAEV;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,SAAS;IAC7B,MAAM,EAAE;QACN,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,QAAiB;QAC3B,IAAI,EAAE,GAAG;KACV;CACO,CAAA;AAEV;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU;IACxC,MAAM,EAAE;QACN,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAc;QACxB,IAAI,EAAE,GAAG;KACV;CACO,CAAA;AAgDV;;GAEG;AACH,SAAS,sBAAsB,CAAC,EAAW;IACzC,OAAO,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,IAAI,EAAE,IAAI,QAAQ,IAAI,EAAE,CAAA;AACjF,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"createMechAuth.js","sourceRoot":"","sources":["../src/createMechAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,21 @@ export interface PasswordHasher {
|
|
|
3
3
|
hash(password: string): Promise<string>;
|
|
4
4
|
verify(hash: string, password: string): Promise<boolean>;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* Options for PBKDF2 password hasher
|
|
8
|
+
*
|
|
9
|
+
* Note: ClearAuth automatically detects Cloudflare Workers and uses 100,000 iterations
|
|
10
|
+
* (instead of 600,000) to comply with Cloudflare's WebCrypto PBKDF2 iteration limit.
|
|
11
|
+
* You can override this by explicitly setting the iterations option.
|
|
12
|
+
*/
|
|
6
13
|
export type Pbkdf2PasswordHasherOptions = {
|
|
14
|
+
/** Number of PBKDF2 iterations. Defaults to 600,000 (OWASP recommended) or 100,000 for Cloudflare Workers */
|
|
7
15
|
iterations?: number;
|
|
16
|
+
/** Hash algorithm. Defaults to 'SHA-256' */
|
|
8
17
|
hash?: 'SHA-256' | 'SHA-512';
|
|
18
|
+
/** Salt length in bytes. Defaults to 16 */
|
|
9
19
|
saltLength?: number;
|
|
20
|
+
/** Derived key length in bytes. Defaults to 32 */
|
|
10
21
|
keyLength?: number;
|
|
11
22
|
};
|
|
12
23
|
export declare function createPbkdf2PasswordHasher(options?: Pbkdf2PasswordHasherOptions): PasswordHasher;
|
package/dist/password-hasher.js
CHANGED
|
@@ -30,8 +30,27 @@ async function pbkdf2DeriveKeyBytes(params) {
|
|
|
30
30
|
}, keyMaterial, params.keyLength * 8);
|
|
31
31
|
return new Uint8Array(bits);
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Detect if running in Cloudflare Workers environment
|
|
35
|
+
* Cloudflare Workers have a PBKDF2 iteration limit of 100,000
|
|
36
|
+
*/
|
|
37
|
+
function isCloudflareWorkers() {
|
|
38
|
+
// Check for Cloudflare Workers-specific globals
|
|
39
|
+
// Workers have 'caches' but no 'window' or 'process'
|
|
40
|
+
if (typeof globalThis === 'undefined')
|
|
41
|
+
return false;
|
|
42
|
+
const hasWorkersGlobals = 'caches' in globalThis &&
|
|
43
|
+
'Request' in globalThis &&
|
|
44
|
+
'Response' in globalThis;
|
|
45
|
+
const isNotBrowser = typeof window === 'undefined';
|
|
46
|
+
const isNotNode = typeof process === 'undefined' || !process.versions?.node;
|
|
47
|
+
return hasWorkersGlobals && isNotBrowser && isNotNode;
|
|
48
|
+
}
|
|
33
49
|
export function createPbkdf2PasswordHasher(options = {}) {
|
|
34
|
-
|
|
50
|
+
// Cloudflare Workers limit PBKDF2 to 100,000 iterations
|
|
51
|
+
// Use 100,000 for Cloudflare, 600,000 (OWASP recommended) for other environments
|
|
52
|
+
const defaultIterations = isCloudflareWorkers() ? 100000 : 600000;
|
|
53
|
+
const iterations = options.iterations ?? defaultIterations;
|
|
35
54
|
const hash = options.hash ?? 'SHA-256';
|
|
36
55
|
const saltLength = options.saltLength ?? 16;
|
|
37
56
|
const keyLength = options.keyLength ?? 32;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-hasher.js","sourceRoot":"","sources":["../src/password-hasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"password-hasher.js","sourceRoot":"","sources":["../src/password-hasher.ts"],"names":[],"mappings":"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"}
|