@prosopo/datasets 1.0.2 → 2.0.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.
- package/dist/captcha/captcha.d.ts +3 -3
- package/dist/captcha/captcha.d.ts.map +1 -1
- package/dist/captcha/captcha.js +49 -37
- package/dist/captcha/captcha.js.map +1 -1
- package/dist/captcha/dataset.d.ts +2 -2
- package/dist/captcha/dataset.d.ts.map +1 -1
- package/dist/captcha/dataset.js +15 -13
- package/dist/captcha/dataset.js.map +1 -1
- package/dist/captcha/index.d.ts +4 -4
- package/dist/captcha/index.d.ts.map +1 -1
- package/dist/captcha/index.js +4 -4
- package/dist/captcha/index.js.map +1 -1
- package/dist/captcha/merkle.d.ts +2 -1
- package/dist/captcha/merkle.d.ts.map +1 -1
- package/dist/captcha/merkle.js +22 -5
- package/dist/captcha/merkle.js.map +1 -1
- package/dist/captcha/util.d.ts.map +1 -1
- package/dist/captcha/util.js +9 -4
- package/dist/captcha/util.js.map +1 -1
- package/dist/cjs/captcha/captcha.cjs +56 -42
- package/dist/cjs/captcha/dataset.cjs +14 -9
- package/dist/cjs/captcha/merkle.cjs +22 -3
- package/dist/cjs/captcha/util.cjs +7 -2
- package/dist/cjs/tests/mocks/data/captchas.cjs +6 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/tests/captcha.test.js +149 -138
- package/dist/tests/captcha.test.js.map +1 -1
- package/dist/tests/dataset.test.js +53 -51
- package/dist/tests/dataset.test.js.map +1 -1
- package/dist/tests/merkle.test.js +86 -51
- package/dist/tests/merkle.test.js.map +1 -1
- package/dist/tests/mocks/data/captchas.d.ts +1 -1
- package/dist/tests/mocks/data/captchas.d.ts.map +1 -1
- package/dist/tests/mocks/data/captchas.js +608 -606
- package/dist/tests/mocks/data/captchas.js.map +1 -1
- package/dist/tests/mocks/data/captchas1.json +108 -27
- package/dist/tests/mocks/data/captchas2.json +144 -36
- package/dist/tests/mocks/data/captchas3.json +108 -27
- package/dist/tests/mocks/data/captchas4.json +108 -27
- package/package.json +66 -76
- package/vite.cjs.config.ts +3 -3
- package/vite.test.config.ts +12 -12
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AssetsResolver, Captcha, CaptchaSolution, CaptchaWithoutId, DatasetRaw, HashedItem, HashedSolution, Item, RawSolution } from
|
|
1
|
+
import { type AssetsResolver, type Captcha, type CaptchaSolution, type CaptchaWithoutId, type DatasetRaw, type HashedItem, type HashedSolution, type Item, type RawSolution } from "@prosopo/types";
|
|
2
2
|
export declare const NO_SOLUTION_VALUE = "NO_SOLUTION";
|
|
3
3
|
export declare function parseCaptchaDataset(datasetJSON: JSON): DatasetRaw;
|
|
4
4
|
export declare function parseAndSortCaptchaSolutions(captchaJSON: CaptchaSolution[]): CaptchaSolution[];
|
|
@@ -10,11 +10,11 @@ export declare function sortAndComputeHashes(received: CaptchaSolution[], stored
|
|
|
10
10
|
hash: string;
|
|
11
11
|
}[];
|
|
12
12
|
export declare function compareCaptchaSolutions(received: CaptchaSolution[], stored: Captcha[]): boolean;
|
|
13
|
-
export declare function computeCaptchaHash(captcha: CaptchaWithoutId, includeSolution: boolean
|
|
13
|
+
export declare function computeCaptchaHash(captcha: CaptchaWithoutId, includeSolution: boolean, includeSalt: boolean, sortItemHashes: boolean): string;
|
|
14
14
|
export declare function getSolutionValueToHash(solution?: HashedSolution[] | RawSolution[]): number[] | string[];
|
|
15
15
|
export declare function computeItemHash(item: Item): Promise<HashedItem>;
|
|
16
16
|
export declare function matchItemsToSolutions(solutions: RawSolution[] | HashedSolution[], items: HashedItem[] | undefined): HashedSolution[];
|
|
17
17
|
export declare function computeCaptchaSolutionHash(captcha: CaptchaSolution): string;
|
|
18
|
-
export declare function computePendingRequestHash(captchaIds: string[], userAccount: string, salt: string): string;
|
|
18
|
+
export declare function computePendingRequestHash(captchaIds: string[], userAccount: string | number[], salt: string): string;
|
|
19
19
|
export declare function parseCaptchaAssets(item: Item, assetsResolver: AssetsResolver | undefined): Item;
|
|
20
20
|
//# sourceMappingURL=captcha.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../src/captcha/captcha.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../src/captcha/captcha.ts"],"names":[],"mappings":"AAoBA,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,OAAO,EACZ,KAAK,eAAe,EAEpB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAEf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,MAAM,gBAAgB,CAAC;AAIxB,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAO/C,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,IAAI,GAAG,UAAU,CA+BjE;AAOD,wBAAgB,4BAA4B,CAC3C,WAAW,EAAE,eAAe,EAAE,GAC5B,eAAe,EAAE,CAWnB;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAEtE;AAED,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,OAAO,EAAE,GACf;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CA2BvC;AAQD,wBAAgB,uBAAuB,CACtC,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,OAAO,EAAE,GACf,OAAO,CAOT;AAUD,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,gBAAgB,EACzB,eAAe,EAAE,OAAO,EACxB,WAAW,EAAE,OAAO,EACpB,cAAc,EAAE,OAAO,GACrB,MAAM,CA0BR;AAMD,wBAAgB,sBAAsB,CACrC,QAAQ,CAAC,EAAE,cAAc,EAAE,GAAG,WAAW,EAAE,uBAG3C;AAMD,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAQrE;AAQD,wBAAgB,qBAAqB,CACpC,SAAS,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE,EAC3C,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,GAC7B,cAAc,EAAE,CAsBlB;AAOD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,eAAe,UAOlE;AASD,wBAAgB,yBAAyB,CACxC,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAC9B,IAAI,EAAE,MAAM,GACV,MAAM,CAER;AAOD,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,IAAI,EACV,cAAc,EAAE,cAAc,GAAG,SAAS,GACxC,IAAI,CAKN"}
|
package/dist/captcha/captcha.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ProsopoDatasetError, ProsopoEnvError, hexHash, hexHashArray } from
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
export const NO_SOLUTION_VALUE =
|
|
1
|
+
import { isHex } from "@polkadot/util";
|
|
2
|
+
import { ProsopoDatasetError, ProsopoEnvError, hexHash, hexHashArray, } from "@prosopo/common";
|
|
3
|
+
import { CaptchaSolutionArraySchema, DatasetWithNumericSolutionSchema, } from "@prosopo/types";
|
|
4
|
+
import { at } from "@prosopo/util";
|
|
5
|
+
import { downloadImage } from "./util.js";
|
|
6
|
+
export const NO_SOLUTION_VALUE = "NO_SOLUTION";
|
|
7
7
|
export function parseCaptchaDataset(datasetJSON) {
|
|
8
8
|
try {
|
|
9
9
|
const result = DatasetWithNumericSolutionSchema.parse(datasetJSON);
|
|
@@ -12,8 +12,12 @@ export function parseCaptchaDataset(datasetJSON) {
|
|
|
12
12
|
captchas: result.captchas.map((captcha) => {
|
|
13
13
|
return {
|
|
14
14
|
...captcha,
|
|
15
|
-
solution: captcha.solution
|
|
16
|
-
|
|
15
|
+
solution: captcha.solution
|
|
16
|
+
? matchItemsToSolutions(captcha.solution, captcha.items)
|
|
17
|
+
: [],
|
|
18
|
+
unlabelled: captcha.unlabelled
|
|
19
|
+
? matchItemsToSolutions(captcha.unlabelled, captcha.items)
|
|
20
|
+
: [],
|
|
17
21
|
};
|
|
18
22
|
}),
|
|
19
23
|
};
|
|
@@ -28,7 +32,9 @@ export function parseCaptchaDataset(datasetJSON) {
|
|
|
28
32
|
return result2;
|
|
29
33
|
}
|
|
30
34
|
catch (err) {
|
|
31
|
-
throw new ProsopoDatasetError(
|
|
35
|
+
throw new ProsopoDatasetError("DATASET.DATASET_PARSE_ERROR", {
|
|
36
|
+
context: { error: err },
|
|
37
|
+
});
|
|
32
38
|
}
|
|
33
39
|
}
|
|
34
40
|
export function parseAndSortCaptchaSolutions(captchaJSON) {
|
|
@@ -39,7 +45,9 @@ export function parseAndSortCaptchaSolutions(captchaJSON) {
|
|
|
39
45
|
}));
|
|
40
46
|
}
|
|
41
47
|
catch (err) {
|
|
42
|
-
throw new ProsopoDatasetError(
|
|
48
|
+
throw new ProsopoDatasetError("DATASET.SOLUTION_PARSE_ERROR", {
|
|
49
|
+
context: { error: err },
|
|
50
|
+
});
|
|
43
51
|
}
|
|
44
52
|
}
|
|
45
53
|
export function captchaSort(a, b) {
|
|
@@ -48,10 +56,10 @@ export function captchaSort(a, b) {
|
|
|
48
56
|
export function sortAndComputeHashes(received, stored) {
|
|
49
57
|
received.sort(captchaSort);
|
|
50
58
|
stored.sort(captchaSort);
|
|
51
|
-
return stored.map(({ salt, items = [], target =
|
|
59
|
+
return stored.map(({ salt, items = [], target = "", captchaId, solved }, index) => {
|
|
52
60
|
const item = at(received, index);
|
|
53
|
-
if (captchaId
|
|
54
|
-
throw new ProsopoEnvError(
|
|
61
|
+
if (captchaId !== item.captchaId) {
|
|
62
|
+
throw new ProsopoEnvError("CAPTCHA.ID_MISMATCH");
|
|
55
63
|
}
|
|
56
64
|
return {
|
|
57
65
|
hash: computeCaptchaHash({
|
|
@@ -71,73 +79,77 @@ export function compareCaptchaSolutions(received, stored) {
|
|
|
71
79
|
}
|
|
72
80
|
return false;
|
|
73
81
|
}
|
|
74
|
-
export function computeCaptchaHash(captcha, includeSolution
|
|
82
|
+
export function computeCaptchaHash(captcha, includeSolution, includeSalt, sortItemHashes) {
|
|
75
83
|
try {
|
|
76
84
|
const itemHashes = captcha.items.map((item, index) => {
|
|
77
85
|
if (item.hash) {
|
|
78
86
|
return item.hash;
|
|
79
87
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
+
throw new ProsopoDatasetError("CAPTCHA.MISSING_ITEM_HASH", {
|
|
89
|
+
context: {
|
|
90
|
+
computeCaptchaHashName: computeCaptchaHash.name,
|
|
91
|
+
index,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
88
94
|
});
|
|
89
95
|
return hexHashArray([
|
|
90
96
|
captcha.target,
|
|
91
97
|
...(includeSolution ? getSolutionValueToHash(captcha.solution) : []),
|
|
92
|
-
includeSalt ? captcha.salt :
|
|
98
|
+
includeSalt ? captcha.salt : "",
|
|
93
99
|
sortItemHashes ? itemHashes.sort() : itemHashes,
|
|
94
100
|
]);
|
|
95
101
|
}
|
|
96
102
|
catch (err) {
|
|
97
|
-
throw new ProsopoDatasetError(
|
|
103
|
+
throw new ProsopoDatasetError("DATASET.HASH_ERROR", {
|
|
104
|
+
context: { error: err },
|
|
105
|
+
});
|
|
98
106
|
}
|
|
99
107
|
}
|
|
100
108
|
export function getSolutionValueToHash(solution) {
|
|
101
109
|
return solution !== undefined ? solution.sort() : [NO_SOLUTION_VALUE];
|
|
102
110
|
}
|
|
103
111
|
export async function computeItemHash(item) {
|
|
104
|
-
if (item.type ===
|
|
112
|
+
if (item.type === "text") {
|
|
105
113
|
return { ...item, hash: hexHash(item.data) };
|
|
106
114
|
}
|
|
107
|
-
|
|
115
|
+
if (item.type === "image") {
|
|
108
116
|
return { ...item, hash: hexHash(await downloadImage(item.data)) };
|
|
109
117
|
}
|
|
110
|
-
|
|
111
|
-
throw new ProsopoDatasetError('CAPTCHA.INVALID_ITEM_FORMAT');
|
|
112
|
-
}
|
|
118
|
+
throw new ProsopoDatasetError("CAPTCHA.INVALID_ITEM_FORMAT");
|
|
113
119
|
}
|
|
114
120
|
export function matchItemsToSolutions(solutions, items) {
|
|
115
121
|
if (!items) {
|
|
116
122
|
return [];
|
|
117
123
|
}
|
|
118
124
|
return solutions.map((solution) => {
|
|
119
|
-
if (typeof solution ===
|
|
125
|
+
if (typeof solution === "string" && isHex(solution)) {
|
|
120
126
|
if (!items?.some((item) => item.hash === solution)) {
|
|
121
|
-
throw new ProsopoDatasetError(
|
|
127
|
+
throw new ProsopoDatasetError("CAPTCHA.INVALID_ITEM_HASH");
|
|
122
128
|
}
|
|
123
129
|
return solution;
|
|
124
130
|
}
|
|
125
|
-
|
|
131
|
+
if (typeof solution === "number") {
|
|
126
132
|
const item = at(items, solution);
|
|
127
133
|
return item.hash;
|
|
128
134
|
}
|
|
129
|
-
|
|
130
|
-
throw new ProsopoDatasetError('CAPTCHA.INVALID_SOLUTION_TYPE');
|
|
131
|
-
}
|
|
135
|
+
throw new ProsopoDatasetError("CAPTCHA.INVALID_SOLUTION_TYPE");
|
|
132
136
|
});
|
|
133
137
|
}
|
|
134
138
|
export function computeCaptchaSolutionHash(captcha) {
|
|
135
|
-
return hexHashArray([
|
|
139
|
+
return hexHashArray([
|
|
140
|
+
captcha.captchaId,
|
|
141
|
+
captcha.captchaContentId,
|
|
142
|
+
[...captcha.solution].sort(),
|
|
143
|
+
captcha.salt,
|
|
144
|
+
]);
|
|
136
145
|
}
|
|
137
146
|
export function computePendingRequestHash(captchaIds, userAccount, salt) {
|
|
138
147
|
return hexHashArray([...captchaIds.sort(), userAccount, salt]);
|
|
139
148
|
}
|
|
140
149
|
export function parseCaptchaAssets(item, assetsResolver) {
|
|
141
|
-
return {
|
|
150
|
+
return {
|
|
151
|
+
...item,
|
|
152
|
+
data: assetsResolver?.resolveAsset(item.data).getURL() || item.data,
|
|
153
|
+
};
|
|
142
154
|
}
|
|
143
155
|
//# sourceMappingURL=captcha.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/captcha/captcha.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/captcha/captcha.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Captcha, Dataset, DatasetRaw } from
|
|
2
|
-
import { CaptchaMerkleTree } from
|
|
1
|
+
import type { Captcha, Dataset, DatasetRaw } from "@prosopo/types";
|
|
2
|
+
import { CaptchaMerkleTree } from "./merkle.js";
|
|
3
3
|
export declare function hashDatasetItems(datasetRaw: Dataset | DatasetRaw): Promise<Promise<Captcha>[]>;
|
|
4
4
|
export declare function validateDatasetContent(datasetOriginal: Dataset): Promise<boolean>;
|
|
5
5
|
export declare function buildDataset(datasetRaw: DatasetRaw): Promise<Dataset>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../src/captcha/dataset.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../src/captcha/dataset.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,OAAO,EAEP,OAAO,EACP,UAAU,EACV,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIhD,wBAAsB,gBAAgB,CACrC,UAAU,EAAE,OAAO,GAAG,UAAU,GAC9B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAU7B;AAMD,wBAAsB,sBAAsB,CAC3C,eAAe,EAAE,OAAO,GACtB,OAAO,CAAC,OAAO,CAAC,CAwBlB;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB3E;AAED,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,OAAO,EACxB,WAAW,EAAE,OAAO,EACpB,cAAc,EAAE,OAAO,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAY5B;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAgB1E"}
|
package/dist/captcha/dataset.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
const logger = getLogger(
|
|
1
|
+
import { ProsopoEnvError, getLogger } from "@prosopo/common";
|
|
2
|
+
import { at } from "@prosopo/util";
|
|
3
|
+
import { computeCaptchaHash, computeItemHash, matchItemsToSolutions, } from "./captcha.js";
|
|
4
|
+
import { CaptchaMerkleTree } from "./merkle.js";
|
|
5
|
+
const logger = getLogger("Info", "dataset.ts");
|
|
6
6
|
export async function hashDatasetItems(datasetRaw) {
|
|
7
7
|
return datasetRaw.captchas.map(async (captcha) => {
|
|
8
8
|
const items = await Promise.all(captcha.items.map(async (item) => computeItemHash(item)));
|
|
@@ -20,20 +20,20 @@ export async function validateDatasetContent(datasetOriginal) {
|
|
|
20
20
|
captchas,
|
|
21
21
|
};
|
|
22
22
|
const hashes = dataset.captchas.map((captcha) => {
|
|
23
|
-
const captchaRaw = datasetOriginal.captchas.find((captchaRaw) =>
|
|
23
|
+
const captchaRaw = datasetOriginal.captchas.find((captchaRaw) => "captchaId" in captchaRaw
|
|
24
|
+
? captchaRaw.captchaId === captcha.captchaId
|
|
25
|
+
: false);
|
|
24
26
|
if (captchaRaw) {
|
|
25
27
|
return captcha.items.every((item, index) => item.hash === at(captchaRaw.items, index).hash);
|
|
26
28
|
}
|
|
27
|
-
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
29
|
+
return false;
|
|
30
30
|
});
|
|
31
31
|
return hashes.every((hash) => hash);
|
|
32
32
|
}
|
|
33
33
|
export async function buildDataset(datasetRaw) {
|
|
34
|
-
logger.debug(
|
|
34
|
+
logger.debug("Adding solution hashes to dataset");
|
|
35
35
|
const dataset = await addSolutionHashesToDataset(datasetRaw);
|
|
36
|
-
logger.debug(
|
|
36
|
+
logger.debug("Building dataset merkle trees");
|
|
37
37
|
const contentTree = await buildCaptchaTree(dataset, false, false, true);
|
|
38
38
|
const solutionTree = await buildCaptchaTree(dataset, true, true, false);
|
|
39
39
|
dataset.captchas = dataset.captchas.map((captcha, index) => ({
|
|
@@ -58,7 +58,7 @@ export async function buildCaptchaTree(dataset, includeSolution, includeSalt, so
|
|
|
58
58
|
return tree;
|
|
59
59
|
}
|
|
60
60
|
catch (err) {
|
|
61
|
-
throw new ProsopoEnvError(
|
|
61
|
+
throw new ProsopoEnvError("DATASET.HASH_ERROR");
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
export function addSolutionHashesToDataset(datasetRaw) {
|
|
@@ -66,7 +66,9 @@ export function addSolutionHashesToDataset(datasetRaw) {
|
|
|
66
66
|
return {
|
|
67
67
|
...captcha,
|
|
68
68
|
items: captcha.items,
|
|
69
|
-
...(captcha.solution !== undefined && {
|
|
69
|
+
...(captcha.solution !== undefined && {
|
|
70
|
+
solution: matchItemsToSolutions(captcha.solution, captcha.items),
|
|
71
|
+
}),
|
|
70
72
|
};
|
|
71
73
|
});
|
|
72
74
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset.js","sourceRoot":"","sources":["../../src/captcha/dataset.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataset.js","sourceRoot":"","sources":["../../src/captcha/dataset.ts"],"names":[],"mappings":"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"}
|
package/dist/captcha/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
export * from "./captcha.js";
|
|
2
|
+
export * from "./merkle.js";
|
|
3
|
+
export * from "./util.js";
|
|
4
|
+
export * from "./dataset.js";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/captcha/index.ts"],"names":[],"mappings":"AAaA,cAAc,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/captcha/index.ts"],"names":[],"mappings":"AAaA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
|
package/dist/captcha/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
export * from "./captcha.js";
|
|
2
|
+
export * from "./merkle.js";
|
|
3
|
+
export * from "./util.js";
|
|
4
|
+
export * from "./dataset.js";
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/captcha/index.ts"],"names":[],"mappings":"AAaA,cAAc,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/captcha/index.ts"],"names":[],"mappings":"AAaA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
|
package/dist/captcha/merkle.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MerkleLayer, MerkleLeaf, MerkleNodeInterface, MerkleProof } from
|
|
1
|
+
import type { MerkleLayer, MerkleLeaf, MerkleNodeInterface, MerkleProof } from "@prosopo/types";
|
|
2
2
|
declare class MerkleNode implements MerkleNodeInterface {
|
|
3
3
|
hash: string;
|
|
4
4
|
parent: string | null;
|
|
@@ -9,6 +9,7 @@ export declare class CaptchaMerkleTree {
|
|
|
9
9
|
layers: MerkleLayer[];
|
|
10
10
|
root: MerkleNode | undefined;
|
|
11
11
|
constructor();
|
|
12
|
+
getRoot(): MerkleNode;
|
|
12
13
|
build(leaves: string[]): void;
|
|
13
14
|
buildMerkleTree(leaves: MerkleNode[]): MerkleNode[];
|
|
14
15
|
createParent(leftChild: MerkleNode, rightChild: MerkleNode): MerkleNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../../src/captcha/merkle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../../src/captcha/merkle.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,WAAW,EAEX,MAAM,gBAAgB,CAAC;AAGxB,cAAM,UAAW,YAAW,mBAAmB;IAC9C,IAAI,EAAE,MAAM,CAAC;IAEb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEV,IAAI,EAAE,MAAM;CAIxB;AAED,qBAAa,iBAAiB;IAC7B,MAAM,EAAE,UAAU,EAAE,CAAC;IAErB,MAAM,EAAE,WAAW,EAAE,CAAC;IAEtB,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;;IAO7B,OAAO;IAYP,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE;IAetB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE;IA+BnD,YAAY,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU;IASvE,KAAK,CAAC,QAAQ,EAAE,UAAU,GAAG,WAAW;CAsCxC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAmBzE"}
|
package/dist/captcha/merkle.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ProsopoError, hexHashArray } from
|
|
2
|
-
import { at } from
|
|
1
|
+
import { ProsopoError, hexHashArray } from "@prosopo/common";
|
|
2
|
+
import { at } from "@prosopo/util";
|
|
3
3
|
class MerkleNode {
|
|
4
4
|
constructor(hash) {
|
|
5
5
|
this.hash = hash;
|
|
@@ -11,6 +11,17 @@ export class CaptchaMerkleTree {
|
|
|
11
11
|
this.leaves = [];
|
|
12
12
|
this.layers = [];
|
|
13
13
|
}
|
|
14
|
+
getRoot() {
|
|
15
|
+
if (this.root === undefined) {
|
|
16
|
+
throw new ProsopoError("DATASET.MERKLE_ERROR", {
|
|
17
|
+
context: {
|
|
18
|
+
error: "root undefined",
|
|
19
|
+
failedFuncName: this.getRoot.name,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return this.root;
|
|
24
|
+
}
|
|
14
25
|
build(leaves) {
|
|
15
26
|
if (this.layers.length) {
|
|
16
27
|
this.layers = [];
|
|
@@ -35,7 +46,9 @@ export class CaptchaMerkleTree {
|
|
|
35
46
|
while (leafIndex < numLeaves) {
|
|
36
47
|
const leftChild = leaves[leafIndex];
|
|
37
48
|
if (leftChild === undefined) {
|
|
38
|
-
throw new ProsopoError(
|
|
49
|
+
throw new ProsopoError("DEVELOPER.GENERAL", {
|
|
50
|
+
context: { error: "leftChild undefined" },
|
|
51
|
+
});
|
|
39
52
|
}
|
|
40
53
|
const rightChild = leafIndex + 1 < numLeaves ? at(leaves, leafIndex + 1) : leftChild;
|
|
41
54
|
const parentNode = this.createParent(leftChild, rightChild);
|
|
@@ -58,8 +71,12 @@ export class CaptchaMerkleTree {
|
|
|
58
71
|
while (layerNum < this.layers.length - 1) {
|
|
59
72
|
const layer = this.layers[layerNum];
|
|
60
73
|
if (layer === undefined) {
|
|
61
|
-
throw new ProsopoError(
|
|
62
|
-
context: {
|
|
74
|
+
throw new ProsopoError("DATASET.MERKLE_ERROR", {
|
|
75
|
+
context: {
|
|
76
|
+
error: "layer undefined",
|
|
77
|
+
failedFuncName: this.proof.name,
|
|
78
|
+
layerNum,
|
|
79
|
+
},
|
|
63
80
|
});
|
|
64
81
|
}
|
|
65
82
|
const leafIndex = layer.indexOf(leafHash);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../src/captcha/merkle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../src/captcha/merkle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/captcha/util.ts"],"names":[],"mappings":"AAeA,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/captcha/util.ts"],"names":[],"mappings":"AAeA,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAkBpE"}
|
package/dist/captcha/util.js
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
import { ProsopoDatasetError, ProsopoEnvError } from
|
|
1
|
+
import { ProsopoDatasetError, ProsopoEnvError } from "@prosopo/common";
|
|
2
2
|
export async function downloadImage(url) {
|
|
3
3
|
try {
|
|
4
4
|
const response = await fetch(url);
|
|
5
5
|
if (!response.ok) {
|
|
6
|
-
throw new ProsopoDatasetError(
|
|
7
|
-
context: {
|
|
6
|
+
throw new ProsopoDatasetError("API.BAD_REQUEST", {
|
|
7
|
+
context: {
|
|
8
|
+
error: `Network response was not ok, status: ${response.status}`,
|
|
9
|
+
url,
|
|
10
|
+
},
|
|
8
11
|
});
|
|
9
12
|
}
|
|
10
13
|
const buffer = await response.arrayBuffer();
|
|
11
14
|
return new Uint8Array(buffer);
|
|
12
15
|
}
|
|
13
16
|
catch (err) {
|
|
14
|
-
throw new ProsopoEnvError(
|
|
17
|
+
throw new ProsopoEnvError("DATABASE.IMAGE_GET_FAILED", {
|
|
18
|
+
context: { error: err },
|
|
19
|
+
});
|
|
15
20
|
}
|
|
16
21
|
}
|
|
17
22
|
//# sourceMappingURL=util.js.map
|
package/dist/captcha/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/captcha/util.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/captcha/util.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC9C,IAAI;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YACjB,MAAM,IAAI,mBAAmB,CAAC,iBAAiB,EAAE;gBAChD,OAAO,EAAE;oBACR,KAAK,EAAE,wCAAwC,QAAQ,CAAC,MAAM,EAAE;oBAChE,GAAG;iBACH;aACD,CAAC,CAAC;SACH;QACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;KAC9B;IAAC,OAAO,GAAG,EAAE;QACb,MAAM,IAAI,eAAe,CAAC,2BAA2B,EAAE;YACtD,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;SACvB,CAAC,CAAC;KACH;AACF,CAAC"}
|