altcha-lib 1.4.1 → 2.0.0-beta.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/LICENSE.txt +1 -1
- package/README.md +44 -149
- package/bin/cli.mjs +35 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/cjs/v2/algorithms/argon2id.d.ts +2 -0
- package/dist/cjs/v2/algorithms/argon2id.js +26 -0
- package/dist/cjs/v2/algorithms/pbkdf2.d.ts +2 -0
- package/dist/cjs/v2/algorithms/pbkdf2.js +23 -0
- package/dist/cjs/v2/algorithms/scrypt.d.ts +2 -0
- package/dist/cjs/v2/algorithms/scrypt.js +17 -0
- package/dist/cjs/v2/algorithms/sha.d.ts +2 -0
- package/dist/cjs/v2/algorithms/sha.js +35 -0
- package/dist/cjs/v2/algorithms/web/pbkdf2.d.ts +2 -0
- package/dist/cjs/v2/algorithms/web/pbkdf2.js +19 -0
- package/dist/cjs/v2/algorithms/web/sha.d.ts +2 -0
- package/dist/cjs/v2/algorithms/web/sha.js +23 -0
- package/dist/cjs/v2/capped-map.d.ts +7 -0
- package/dist/cjs/v2/capped-map.js +18 -0
- package/dist/cjs/v2/frameworks/express.d.ts +21 -0
- package/dist/cjs/v2/frameworks/express.js +77 -0
- package/dist/cjs/v2/frameworks/fastify.d.ts +26 -0
- package/dist/cjs/v2/frameworks/fastify.js +88 -0
- package/dist/cjs/v2/frameworks/h3.d.ts +37 -0
- package/dist/cjs/v2/frameworks/h3.js +89 -0
- package/dist/cjs/v2/frameworks/hono.d.ts +99 -0
- package/dist/cjs/v2/frameworks/hono.js +86 -0
- package/dist/cjs/v2/frameworks/nestjs.d.ts +79 -0
- package/dist/cjs/v2/frameworks/nestjs.js +198 -0
- package/dist/cjs/v2/frameworks/nextjs.d.ts +21 -0
- package/dist/cjs/v2/frameworks/nextjs.js +112 -0
- package/dist/cjs/v2/frameworks/shared.d.ts +8 -0
- package/dist/cjs/v2/frameworks/shared.js +121 -0
- package/dist/cjs/v2/frameworks/sveltekit.d.ts +29 -0
- package/dist/cjs/v2/frameworks/sveltekit.js +101 -0
- package/dist/cjs/v2/frameworks/types.d.ts +47 -0
- package/dist/cjs/v2/frameworks/types.js +2 -0
- package/dist/cjs/v2/helpers.d.ts +27 -0
- package/dist/cjs/v2/helpers.js +127 -0
- package/dist/cjs/v2/index.d.ts +19 -0
- package/dist/cjs/v2/index.js +28 -0
- package/dist/cjs/v2/obfuscation.d.ts +11 -0
- package/dist/cjs/v2/obfuscation.js +74 -0
- package/dist/cjs/v2/pow.d.ts +60 -0
- package/dist/cjs/v2/pow.js +286 -0
- package/dist/cjs/v2/server-signature.d.ts +12 -0
- package/dist/cjs/v2/server-signature.js +68 -0
- package/dist/cjs/v2/types.d.ts +277 -0
- package/dist/cjs/v2/types.js +18 -0
- package/dist/cjs/v2/workers/argon2id.js +7 -0
- package/dist/cjs/v2/workers/pbkdf2.js +7 -0
- package/dist/cjs/v2/workers/scrypt.d.ts +1 -0
- package/dist/cjs/v2/workers/scrypt.js +7 -0
- package/dist/cjs/v2/workers/sha.d.ts +1 -0
- package/dist/cjs/v2/workers/sha.js +7 -0
- package/dist/cjs/v2/workers/shared.d.ts +4 -0
- package/dist/cjs/v2/workers/shared.js +32 -0
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -0
- package/dist/esm/v1/types.js +1 -0
- package/dist/esm/v1/worker.d.ts +1 -0
- package/dist/esm/v2/algorithms/argon2id.d.ts +2 -0
- package/dist/esm/v2/algorithms/argon2id.js +20 -0
- package/dist/esm/v2/algorithms/pbkdf2.d.ts +2 -0
- package/dist/esm/v2/algorithms/pbkdf2.js +20 -0
- package/dist/esm/v2/algorithms/scrypt.d.ts +2 -0
- package/dist/esm/v2/algorithms/scrypt.js +14 -0
- package/dist/esm/v2/algorithms/sha.d.ts +2 -0
- package/dist/esm/v2/algorithms/sha.js +32 -0
- package/dist/esm/v2/algorithms/web/pbkdf2.d.ts +2 -0
- package/dist/esm/v2/algorithms/web/pbkdf2.js +16 -0
- package/dist/esm/v2/algorithms/web/sha.d.ts +2 -0
- package/dist/esm/v2/algorithms/web/sha.js +20 -0
- package/dist/esm/v2/capped-map.d.ts +7 -0
- package/dist/esm/v2/capped-map.js +15 -0
- package/dist/esm/v2/frameworks/express.d.ts +21 -0
- package/dist/esm/v2/frameworks/express.js +71 -0
- package/dist/esm/v2/frameworks/fastify.d.ts +26 -0
- package/dist/esm/v2/frameworks/fastify.js +82 -0
- package/dist/esm/v2/frameworks/h3.d.ts +37 -0
- package/dist/esm/v2/frameworks/h3.js +83 -0
- package/dist/esm/v2/frameworks/hono.d.ts +99 -0
- package/dist/esm/v2/frameworks/hono.js +80 -0
- package/dist/esm/v2/frameworks/nestjs.d.ts +79 -0
- package/dist/esm/v2/frameworks/nestjs.js +202 -0
- package/dist/esm/v2/frameworks/nextjs.d.ts +21 -0
- package/dist/esm/v2/frameworks/nextjs.js +106 -0
- package/dist/esm/v2/frameworks/shared.d.ts +8 -0
- package/dist/esm/v2/frameworks/shared.js +117 -0
- package/dist/esm/v2/frameworks/sveltekit.d.ts +29 -0
- package/dist/esm/v2/frameworks/sveltekit.js +95 -0
- package/dist/esm/v2/frameworks/types.d.ts +47 -0
- package/dist/esm/v2/frameworks/types.js +1 -0
- package/dist/esm/v2/helpers.d.ts +27 -0
- package/dist/esm/v2/helpers.js +112 -0
- package/dist/esm/v2/index.d.ts +19 -0
- package/dist/esm/v2/index.js +17 -0
- package/dist/esm/v2/obfuscation.d.ts +11 -0
- package/dist/esm/v2/obfuscation.js +70 -0
- package/dist/esm/v2/pow.d.ts +60 -0
- package/dist/esm/v2/pow.js +281 -0
- package/dist/esm/v2/server-signature.d.ts +12 -0
- package/dist/esm/v2/server-signature.js +63 -0
- package/dist/esm/v2/types.d.ts +277 -0
- package/dist/esm/v2/types.js +15 -0
- package/dist/esm/v2/workers/argon2id.d.ts +1 -0
- package/dist/esm/v2/workers/argon2id.js +5 -0
- package/dist/esm/v2/workers/pbkdf2.d.ts +1 -0
- package/dist/esm/v2/workers/pbkdf2.js +5 -0
- package/dist/esm/v2/workers/scrypt.d.ts +1 -0
- package/dist/esm/v2/workers/scrypt.js +5 -0
- package/dist/esm/v2/workers/sha.d.ts +1 -0
- package/dist/esm/v2/workers/sha.js +5 -0
- package/dist/esm/v2/workers/shared.d.ts +4 -0
- package/dist/esm/v2/workers/shared.js +29 -0
- package/package.json +138 -27
- package/cjs/dist/tsconfig.cjs.tsbuildinfo +0 -1
- package/cjs/package.json +0 -3
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- /package/{cjs/dist → dist/cjs/v1}/helpers.d.ts +0 -0
- /package/{cjs/dist → dist/cjs/v1}/helpers.js +0 -0
- /package/{cjs/dist → dist/cjs/v1}/index.d.ts +0 -0
- /package/{cjs/dist → dist/cjs/v1}/index.js +0 -0
- /package/{cjs/dist → dist/cjs/v1}/types.d.ts +0 -0
- /package/{cjs/dist → dist/cjs/v1}/types.js +0 -0
- /package/{cjs/dist → dist/cjs/v1}/worker.d.ts +0 -0
- /package/{cjs/dist → dist/cjs/v1}/worker.js +0 -0
- /package/dist/{types.js → cjs/v2/workers/argon2id.d.ts} +0 -0
- /package/dist/{worker.d.ts → cjs/v2/workers/pbkdf2.d.ts} +0 -0
- /package/dist/{helpers.d.ts → esm/v1/helpers.d.ts} +0 -0
- /package/dist/{helpers.js → esm/v1/helpers.js} +0 -0
- /package/dist/{index.d.ts → esm/v1/index.d.ts} +0 -0
- /package/dist/{index.js → esm/v1/index.js} +0 -0
- /package/dist/{types.d.ts → esm/v1/types.d.ts} +0 -0
- /package/dist/{worker.js → esm/v1/worker.js} +0 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
export interface Challenge {
|
|
2
|
+
codeChallenge?: CodeChallenge;
|
|
3
|
+
parameters: ChallengeParameters;
|
|
4
|
+
signature?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ChallengeParameters {
|
|
7
|
+
algorithm: string;
|
|
8
|
+
nonce: string;
|
|
9
|
+
salt: string;
|
|
10
|
+
cost: number;
|
|
11
|
+
keyLength: number;
|
|
12
|
+
keyPrefix: string;
|
|
13
|
+
keySignature?: string;
|
|
14
|
+
memoryCost?: number;
|
|
15
|
+
parallelism?: number;
|
|
16
|
+
expiresAt?: number;
|
|
17
|
+
data?: Record<string, string | number | boolean | null>;
|
|
18
|
+
}
|
|
19
|
+
export interface CodeChallenge {
|
|
20
|
+
image: string;
|
|
21
|
+
audio?: string;
|
|
22
|
+
length?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface CreateChallengeOptions {
|
|
25
|
+
/**
|
|
26
|
+
* Key derivation algorithm used for the challenge.
|
|
27
|
+
* Common values: `'PBKDF2/SHA-256'`, `'ARGON2ID'`, `'SCRYPT'`.
|
|
28
|
+
*/
|
|
29
|
+
algorithm: string;
|
|
30
|
+
/**
|
|
31
|
+
* Randomly selected integer used as the starting counter in deterministic mode.
|
|
32
|
+
*/
|
|
33
|
+
counter?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Encoding format for the counter value.
|
|
36
|
+
* V2 uses `'uint32'`; `'string'` is supported for backward compatibility with V1.
|
|
37
|
+
*/
|
|
38
|
+
counterMode?: 'uint32' | 'string';
|
|
39
|
+
/**
|
|
40
|
+
* Algorithm-specific cost parameter controlling computational difficulty
|
|
41
|
+
* (e.g., iteration count for PBKDF2, time cost for Argon2id).
|
|
42
|
+
*/
|
|
43
|
+
cost: number;
|
|
44
|
+
/**
|
|
45
|
+
* Arbitrary key-value metadata embedded in the challenge.
|
|
46
|
+
*/
|
|
47
|
+
data?: Record<string, string | number | boolean | null>;
|
|
48
|
+
/**
|
|
49
|
+
* Algorithm-specific key derivation function used to generate challenge keys.
|
|
50
|
+
*/
|
|
51
|
+
deriveKey: DeriveKeyFunction;
|
|
52
|
+
/**
|
|
53
|
+
* Timestamp in seconds or Date after which the challenge is no longer valid.
|
|
54
|
+
*/
|
|
55
|
+
expiresAt?: number | Date;
|
|
56
|
+
/**
|
|
57
|
+
* HMAC digest algorithm used for signing challenges.
|
|
58
|
+
* Defaults to `'SHA-256'`.
|
|
59
|
+
*/
|
|
60
|
+
hmacAlgorithm?: HmacAlgorithm;
|
|
61
|
+
/**
|
|
62
|
+
* HMAC secret used to sign derived keys in deterministic mode.
|
|
63
|
+
*/
|
|
64
|
+
hmacKeySignatureSecret?: string;
|
|
65
|
+
/**
|
|
66
|
+
* HMAC secret used to sign the challenge payload.
|
|
67
|
+
*/
|
|
68
|
+
hmacSignatureSecret?: string;
|
|
69
|
+
/**
|
|
70
|
+
* Length of the derived key in bytes.
|
|
71
|
+
* Defaults to `32`.
|
|
72
|
+
*/
|
|
73
|
+
keyLength?: number;
|
|
74
|
+
/**
|
|
75
|
+
* Required prefix that the derived key must match for the challenge to be solved.
|
|
76
|
+
*/
|
|
77
|
+
keyPrefix?: string;
|
|
78
|
+
/**
|
|
79
|
+
* Number of bytes from the derived key used as the prefix in deterministic mode.
|
|
80
|
+
* Defaults to `keyLength / 2`.
|
|
81
|
+
*/
|
|
82
|
+
keyPrefixLength?: number;
|
|
83
|
+
/**
|
|
84
|
+
* Algorithm-specific memory cost in KiB (applicable to Argon2id and scrypt).
|
|
85
|
+
*/
|
|
86
|
+
memoryCost?: number;
|
|
87
|
+
/**
|
|
88
|
+
* Algorithm-specific parallelism setting controlling the parallelism
|
|
89
|
+
* (applicable to Argon2id and scrypt).
|
|
90
|
+
*/
|
|
91
|
+
parallelism?: number;
|
|
92
|
+
}
|
|
93
|
+
export type DeriveKeyFunction = (parameters: ChallengeParameters, salt: Uint8Array, password: Uint8Array) => Promise<DeriveKeyFunctionResult>;
|
|
94
|
+
export interface DeriveKeyFunctionResult {
|
|
95
|
+
parameters?: Partial<ChallengeParameters>;
|
|
96
|
+
derivedKey: Uint8Array;
|
|
97
|
+
}
|
|
98
|
+
export declare enum HmacAlgorithm {
|
|
99
|
+
SHA_256 = "SHA-256",
|
|
100
|
+
SHA_384 = "SHA-384",
|
|
101
|
+
SHA_512 = "SHA-512"
|
|
102
|
+
}
|
|
103
|
+
export interface Payload {
|
|
104
|
+
challenge: Omit<Challenge, 'codeChallenge'>;
|
|
105
|
+
solution: Solution;
|
|
106
|
+
}
|
|
107
|
+
export interface PayloadV1 {
|
|
108
|
+
algorithm: string;
|
|
109
|
+
challenge: string;
|
|
110
|
+
number: number;
|
|
111
|
+
salt: string;
|
|
112
|
+
signature?: string;
|
|
113
|
+
took: number;
|
|
114
|
+
}
|
|
115
|
+
export interface SetCookieOptions {
|
|
116
|
+
domain?: string;
|
|
117
|
+
name?: string;
|
|
118
|
+
maxAge?: number;
|
|
119
|
+
path?: string;
|
|
120
|
+
sameSite?: string;
|
|
121
|
+
secure?: boolean;
|
|
122
|
+
}
|
|
123
|
+
export type ServerClassification = 'BAD' | 'GOOD' | 'NEUTRAL';
|
|
124
|
+
export interface ServerSignaturePayload {
|
|
125
|
+
algorithm: string;
|
|
126
|
+
apiKey?: string;
|
|
127
|
+
id?: string;
|
|
128
|
+
signature: string;
|
|
129
|
+
verificationData: string;
|
|
130
|
+
verified: boolean;
|
|
131
|
+
}
|
|
132
|
+
export interface ServerSignatureVerificationData {
|
|
133
|
+
[key: string]: string | unknown;
|
|
134
|
+
classification?: ServerClassification;
|
|
135
|
+
email?: string;
|
|
136
|
+
expire?: number;
|
|
137
|
+
fields?: string[];
|
|
138
|
+
fieldsHash?: string;
|
|
139
|
+
id?: string;
|
|
140
|
+
ipAddress?: string;
|
|
141
|
+
reasons?: string[];
|
|
142
|
+
score?: number;
|
|
143
|
+
time?: number;
|
|
144
|
+
verified?: boolean;
|
|
145
|
+
}
|
|
146
|
+
export interface ServerVerificationResult {
|
|
147
|
+
algorithm?: string;
|
|
148
|
+
apiKey?: string;
|
|
149
|
+
id?: string;
|
|
150
|
+
payload?: string;
|
|
151
|
+
reason?: string;
|
|
152
|
+
score?: number;
|
|
153
|
+
signature?: string;
|
|
154
|
+
verificationData?: string;
|
|
155
|
+
verified?: boolean;
|
|
156
|
+
}
|
|
157
|
+
export interface SolveChallengeOptions {
|
|
158
|
+
/**
|
|
159
|
+
* Challenge object to solve, either decoded from a server payload
|
|
160
|
+
* or as originally returned by `createChallenge`.
|
|
161
|
+
*/
|
|
162
|
+
challenge: Challenge;
|
|
163
|
+
/**
|
|
164
|
+
* AbortController for cancelling the solve operation before completion.
|
|
165
|
+
*/
|
|
166
|
+
controller?: AbortController;
|
|
167
|
+
/**
|
|
168
|
+
* Initial counter value to begin iterating from.
|
|
169
|
+
* Useful for resuming or partitioning work across multiple solvers.
|
|
170
|
+
*/
|
|
171
|
+
counterStart?: number;
|
|
172
|
+
/**
|
|
173
|
+
* Increment between counter attempts.
|
|
174
|
+
* Defaults to `1`.
|
|
175
|
+
*/
|
|
176
|
+
counterStep?: number;
|
|
177
|
+
/**
|
|
178
|
+
* Encoding format for the counter value.
|
|
179
|
+
* V2 uses `'uint32'`; `'string'` is supported for backward compatibility with V1.
|
|
180
|
+
*/
|
|
181
|
+
counterMode?: 'uint32' | 'string';
|
|
182
|
+
/**
|
|
183
|
+
* Algorithm-specific key derivation function used to compute candidate keys
|
|
184
|
+
* for each counter value until a match is found.
|
|
185
|
+
*/
|
|
186
|
+
deriveKey: DeriveKeyFunction;
|
|
187
|
+
/**
|
|
188
|
+
* Maximum time in milliseconds before the solve attempt is aborted.
|
|
189
|
+
* Defaults to `90_000` (90 seconds).
|
|
190
|
+
*/
|
|
191
|
+
timeout?: number;
|
|
192
|
+
}
|
|
193
|
+
export interface Strings {
|
|
194
|
+
ariaLinkLabel: string;
|
|
195
|
+
enterCode: string;
|
|
196
|
+
enterCodeAria: string;
|
|
197
|
+
error: string;
|
|
198
|
+
expired: string;
|
|
199
|
+
footer: string;
|
|
200
|
+
getAudioChallenge: string;
|
|
201
|
+
label: string;
|
|
202
|
+
loading: string;
|
|
203
|
+
reload: string;
|
|
204
|
+
verify: string;
|
|
205
|
+
verificationRequired: string;
|
|
206
|
+
verified: string;
|
|
207
|
+
verifying: string;
|
|
208
|
+
waitAlert: string;
|
|
209
|
+
}
|
|
210
|
+
export declare enum State {
|
|
211
|
+
CODE = "code",
|
|
212
|
+
ERROR = "error",
|
|
213
|
+
VERIFIED = "verified",
|
|
214
|
+
VERIFYING = "verifying",
|
|
215
|
+
UNVERIFIED = "unverified",
|
|
216
|
+
EXPIRED = "expired"
|
|
217
|
+
}
|
|
218
|
+
export interface Solution {
|
|
219
|
+
counter: number;
|
|
220
|
+
derivedKey: string;
|
|
221
|
+
time?: number;
|
|
222
|
+
}
|
|
223
|
+
export interface VerifyOptions {
|
|
224
|
+
concurrency?: number;
|
|
225
|
+
controller?: AbortController;
|
|
226
|
+
minDuration?: number;
|
|
227
|
+
}
|
|
228
|
+
export interface VerifyResult {
|
|
229
|
+
challenge?: Challenge;
|
|
230
|
+
payload: string;
|
|
231
|
+
solution?: Solution;
|
|
232
|
+
}
|
|
233
|
+
export interface VerifyServerSignatureResult extends VerifySolutionResult {
|
|
234
|
+
verificationData?: ServerSignatureVerificationData | null;
|
|
235
|
+
}
|
|
236
|
+
export interface VerifySolutionOptions {
|
|
237
|
+
/**
|
|
238
|
+
* Challenge object to verify against, either decoded from the client payload
|
|
239
|
+
* or as originally returned by `createChallenge`.
|
|
240
|
+
*/
|
|
241
|
+
challenge: Challenge;
|
|
242
|
+
/**
|
|
243
|
+
* Encoding format for the counter value.
|
|
244
|
+
* V2 uses `'uint32'`; `'string'` is supported for backward compatibility with V1.
|
|
245
|
+
*/
|
|
246
|
+
counterMode?: 'uint32' | 'string';
|
|
247
|
+
/**
|
|
248
|
+
* Algorithm-specific key derivation function used to recompute the expected key
|
|
249
|
+
* during verification.
|
|
250
|
+
*/
|
|
251
|
+
deriveKey: DeriveKeyFunction;
|
|
252
|
+
/**
|
|
253
|
+
* HMAC digest algorithm used when verifying challenge signatures.
|
|
254
|
+
* Defaults to `'SHA-256'`.
|
|
255
|
+
*/
|
|
256
|
+
hmacAlgorithm?: HmacAlgorithm;
|
|
257
|
+
/**
|
|
258
|
+
* HMAC secret used to verify derived-key signatures in deterministic mode.
|
|
259
|
+
*/
|
|
260
|
+
hmacKeySignatureSecret?: string;
|
|
261
|
+
/**
|
|
262
|
+
* HMAC secret used to verify the challenge payload signature.
|
|
263
|
+
*/
|
|
264
|
+
hmacSignatureSecret: string;
|
|
265
|
+
/**
|
|
266
|
+
* Solution object to validate, either decoded from the client payload
|
|
267
|
+
* or as returned by `solveChallenge`.
|
|
268
|
+
*/
|
|
269
|
+
solution: Solution;
|
|
270
|
+
}
|
|
271
|
+
export interface VerifySolutionResult {
|
|
272
|
+
expired: boolean;
|
|
273
|
+
invalidSignature: boolean | null;
|
|
274
|
+
invalidSolution: boolean | null;
|
|
275
|
+
time: number;
|
|
276
|
+
verified: boolean;
|
|
277
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export var HmacAlgorithm;
|
|
2
|
+
(function (HmacAlgorithm) {
|
|
3
|
+
HmacAlgorithm["SHA_256"] = "SHA-256";
|
|
4
|
+
HmacAlgorithm["SHA_384"] = "SHA-384";
|
|
5
|
+
HmacAlgorithm["SHA_512"] = "SHA-512";
|
|
6
|
+
})(HmacAlgorithm || (HmacAlgorithm = {}));
|
|
7
|
+
export var State;
|
|
8
|
+
(function (State) {
|
|
9
|
+
State["CODE"] = "code";
|
|
10
|
+
State["ERROR"] = "error";
|
|
11
|
+
State["VERIFIED"] = "verified";
|
|
12
|
+
State["VERIFYING"] = "verifying";
|
|
13
|
+
State["UNVERIFIED"] = "unverified";
|
|
14
|
+
State["EXPIRED"] = "expired";
|
|
15
|
+
})(State || (State = {}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { solveChallenge } from '../pow.js';
|
|
2
|
+
export function handler(options) {
|
|
3
|
+
const { deriveKey } = options;
|
|
4
|
+
let controller = undefined;
|
|
5
|
+
self.onmessage = async (message) => {
|
|
6
|
+
const { challenge, counterMode, counterStart, counterStep, type } = message.data;
|
|
7
|
+
if (type === 'abort') {
|
|
8
|
+
controller?.abort();
|
|
9
|
+
}
|
|
10
|
+
else if (type === 'work') {
|
|
11
|
+
controller = new AbortController();
|
|
12
|
+
let solution;
|
|
13
|
+
try {
|
|
14
|
+
solution = await solveChallenge({
|
|
15
|
+
challenge,
|
|
16
|
+
controller,
|
|
17
|
+
counterStart,
|
|
18
|
+
counterStep,
|
|
19
|
+
deriveKey,
|
|
20
|
+
counterMode,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
return self.postMessage({ error: err });
|
|
25
|
+
}
|
|
26
|
+
self.postMessage(solution);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "altcha-lib",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "A library for creating and verifying ALTCHA challenges
|
|
3
|
+
"version": "2.0.0-beta.1",
|
|
4
|
+
"description": "A lightweight library for creating and verifying ALTCHA challenges on the server.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Daniel Regeci",
|
|
7
7
|
"url": "https://altcha.org"
|
|
@@ -23,55 +23,166 @@
|
|
|
23
23
|
"types": "./dist/index.d.ts",
|
|
24
24
|
"type": "module",
|
|
25
25
|
"scripts": {
|
|
26
|
-
"build": "rimraf dist &&
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"format": "prettier --write './(lib|tests)/**/*'",
|
|
26
|
+
"build": "rimraf dist && tsc -b tsconfig.build.json tsconfig.cjs.json",
|
|
27
|
+
"lint": "eslint ./src/**/*",
|
|
28
|
+
"format": "prettier --write './(src|tests)/**/*'",
|
|
30
29
|
"test": "vitest --run",
|
|
31
|
-
"test:deno": "deno test --allow-read tests/deno.ts",
|
|
32
30
|
"prepare": "husky"
|
|
33
31
|
},
|
|
34
32
|
"files": [
|
|
35
|
-
"cjs",
|
|
36
33
|
"dist"
|
|
37
34
|
],
|
|
35
|
+
"bin": {
|
|
36
|
+
"altcha-lib": "./bin/cli.mjs"
|
|
37
|
+
},
|
|
38
38
|
"exports": {
|
|
39
39
|
".": {
|
|
40
|
-
"types": "./dist/index.d.ts",
|
|
41
|
-
"import": "./dist/index.js",
|
|
42
|
-
"require": "./cjs/
|
|
43
|
-
"default": "./dist/index.js"
|
|
40
|
+
"types": "./dist/esm/v2/index.d.ts",
|
|
41
|
+
"import": "./dist/esm/v2/index.js",
|
|
42
|
+
"require": "./dist/cjs/v2/index.js",
|
|
43
|
+
"default": "./dist/esm/v2/index.js"
|
|
44
|
+
},
|
|
45
|
+
"./algorithms/*": {
|
|
46
|
+
"types": "./dist/esm/v2/algorithms/*.d.ts",
|
|
47
|
+
"import": "./dist/esm/v2/algorithms/*.js",
|
|
48
|
+
"require": "./dist/cjs/v2/algorithms/*.js"
|
|
49
|
+
},
|
|
50
|
+
"./frameworks/*": {
|
|
51
|
+
"types": "./dist/esm/v2/frameworks/*.d.ts",
|
|
52
|
+
"import": "./dist/esm/v2/frameworks/*.js",
|
|
53
|
+
"require": "./dist/cjs/v2/frameworks/*.js"
|
|
54
|
+
},
|
|
55
|
+
"./obfuscation": {
|
|
56
|
+
"types": "./dist/esm/v2/obfuscation.d.ts",
|
|
57
|
+
"import": "./dist/esm/v2/obfuscation.js",
|
|
58
|
+
"require": "./dist/cjs/v2/obfuscation.js"
|
|
59
|
+
},
|
|
60
|
+
"./workers/*": {
|
|
61
|
+
"types": "./dist/esm/v2/workers/*.d.ts",
|
|
62
|
+
"import": "./dist/esm/v2/workers/*.js",
|
|
63
|
+
"require": "./dist/cjs/v2/workers/*.js"
|
|
44
64
|
},
|
|
45
65
|
"./types": {
|
|
46
|
-
"types": "./dist/types.d.ts",
|
|
47
|
-
"import": "./dist/types.js"
|
|
48
|
-
},
|
|
49
|
-
"./
|
|
50
|
-
"types": "./dist/
|
|
51
|
-
"import": "./dist/
|
|
52
|
-
"require": "./cjs/
|
|
53
|
-
"default": "./dist/
|
|
66
|
+
"types": "./dist/esm/v2/types.d.ts",
|
|
67
|
+
"import": "./dist/esm/v2/types.js"
|
|
68
|
+
},
|
|
69
|
+
"./v1": {
|
|
70
|
+
"types": "./dist/esm/v1/index.d.ts",
|
|
71
|
+
"import": "./dist/esm/v1/index.js",
|
|
72
|
+
"require": "./dist/cjs/v1/index.js",
|
|
73
|
+
"default": "./dist/esm/v1/index.js"
|
|
74
|
+
},
|
|
75
|
+
"./v1/types": {
|
|
76
|
+
"types": "./dist/esm/v1/types.d.ts",
|
|
77
|
+
"import": "./dist/esm/v1/types.js"
|
|
78
|
+
},
|
|
79
|
+
"./v1/worker": {
|
|
80
|
+
"types": "./dist/esm/v1/worker.d.ts",
|
|
81
|
+
"import": "./dist/esm/v1/worker.js",
|
|
82
|
+
"require": "./dist/cjs/v1/worker.js",
|
|
83
|
+
"default": "./dist/esm/v1/worker.js"
|
|
54
84
|
}
|
|
55
85
|
},
|
|
56
86
|
"typesVersions": {
|
|
57
87
|
"*": {
|
|
58
88
|
"types": [
|
|
59
|
-
"./dist/types"
|
|
89
|
+
"./dist/esm/v2/types"
|
|
60
90
|
]
|
|
61
91
|
}
|
|
62
92
|
},
|
|
63
93
|
"devDependencies": {
|
|
94
|
+
"@eslint/eslintrc": "^3.3.5",
|
|
95
|
+
"@eslint/js": "^10.0.1",
|
|
96
|
+
"@fastify/cookie": "^11.0.2",
|
|
97
|
+
"@fastify/cors": "^11.2.0",
|
|
98
|
+
"@fastify/formbody": "^8.0.2",
|
|
99
|
+
"@nestjs/common": "^11.1.16",
|
|
100
|
+
"@nestjs/core": "^11.1.16",
|
|
101
|
+
"@nestjs/platform-express": "^11.1.16",
|
|
102
|
+
"@sveltejs/kit": "^2.54.0",
|
|
103
|
+
"@types/cookie-parser": "^1.4.10",
|
|
104
|
+
"@types/cors": "^2.8.19",
|
|
105
|
+
"@types/express": "^5.0.6",
|
|
64
106
|
"@types/node": "^24.10.3",
|
|
107
|
+
"@types/supertest": "^7.2.0",
|
|
65
108
|
"@typescript-eslint/eslint-plugin": "^8.49.0",
|
|
66
|
-
"
|
|
67
|
-
"
|
|
109
|
+
"cookie-parser": "^1.4.7",
|
|
110
|
+
"cors": "^2.8.6",
|
|
111
|
+
"eslint": "^10.0.3",
|
|
112
|
+
"express": "^5.2.1",
|
|
113
|
+
"fastify": "^5.8.2",
|
|
114
|
+
"globals": "^17.4.0",
|
|
115
|
+
"h3": "2.0.1-rc.16",
|
|
116
|
+
"hono": "^4.12.5",
|
|
68
117
|
"husky": "^9.1.7",
|
|
69
|
-
"prettier": "^3.
|
|
70
|
-
"rimraf": "^6.1.
|
|
118
|
+
"prettier": "^3.8.1",
|
|
119
|
+
"rimraf": "^6.1.3",
|
|
120
|
+
"supertest": "^7.2.2",
|
|
71
121
|
"ts-node": "^10.9.2",
|
|
72
122
|
"tsx": "^4.21.0",
|
|
73
123
|
"typescript": "^5.9.3",
|
|
74
|
-
"vite": "^
|
|
75
|
-
"vitest": "^4.0
|
|
124
|
+
"vite": "^8.0.0",
|
|
125
|
+
"vitest": "^4.1.0",
|
|
126
|
+
"web-worker": "^1.5.0"
|
|
127
|
+
},
|
|
128
|
+
"peerDependencies": {
|
|
129
|
+
"@fastify/cookie": "^11.0.0",
|
|
130
|
+
"@fastify/cors": "^11.0.0",
|
|
131
|
+
"@fastify/formbody": "^8.0.0",
|
|
132
|
+
"@nestjs/common": "^10.0.0 || ^11.0.0",
|
|
133
|
+
"@nestjs/core": "^10.0.0 || ^11.0.0",
|
|
134
|
+
"@nestjs/platform-express": "^10.0.0 || ^11.0.0",
|
|
135
|
+
"@sveltejs/kit": "^2.0.0",
|
|
136
|
+
"cookie-parser": "^1.0.0",
|
|
137
|
+
"cors": "^2.0.0",
|
|
138
|
+
"express": "^4.0.0 || ^5.0.0",
|
|
139
|
+
"fastify": "^5.0.0",
|
|
140
|
+
"h3": "^2.0.0",
|
|
141
|
+
"hono": "^4.0.0"
|
|
142
|
+
},
|
|
143
|
+
"peerDependenciesMeta": {
|
|
144
|
+
"@nestjs/common": {
|
|
145
|
+
"optional": true
|
|
146
|
+
},
|
|
147
|
+
"@nestjs/core": {
|
|
148
|
+
"optional": true
|
|
149
|
+
},
|
|
150
|
+
"@nestjs/platform-express": {
|
|
151
|
+
"optional": true
|
|
152
|
+
},
|
|
153
|
+
"@fastify/cookie": {
|
|
154
|
+
"optional": true
|
|
155
|
+
},
|
|
156
|
+
"@fastify/cors": {
|
|
157
|
+
"optional": true
|
|
158
|
+
},
|
|
159
|
+
"@fastify/formbody": {
|
|
160
|
+
"optional": true
|
|
161
|
+
},
|
|
162
|
+
"@sveltejs/kit": {
|
|
163
|
+
"optional": true
|
|
164
|
+
},
|
|
165
|
+
"cookie-parser": {
|
|
166
|
+
"optional": true
|
|
167
|
+
},
|
|
168
|
+
"cors": {
|
|
169
|
+
"optional": true
|
|
170
|
+
},
|
|
171
|
+
"express": {
|
|
172
|
+
"optional": true
|
|
173
|
+
},
|
|
174
|
+
"fastify": {
|
|
175
|
+
"optional": true
|
|
176
|
+
},
|
|
177
|
+
"h3": {
|
|
178
|
+
"optional": true
|
|
179
|
+
},
|
|
180
|
+
"hono": {
|
|
181
|
+
"optional": true
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
"overrides": {
|
|
185
|
+
"cookie": "^1.1.1",
|
|
186
|
+
"file-type": "^21.3.1"
|
|
76
187
|
}
|
|
77
188
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"root":["../../lib/helpers.ts","../../lib/index.ts","../../lib/types.ts","../../lib/worker.ts"],"version":"5.9.3"}
|
package/cjs/package.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"root":["../lib/helpers.ts","../lib/index.ts","../lib/types.ts","../lib/worker.ts"],"version":"5.9.3"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|