@prosopo/datasets 0.2.13 → 0.2.15

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.
@@ -1,16 +1,6 @@
1
1
  import { AssetsResolver, Captcha, CaptchaSolution, CaptchaWithoutId, DatasetRaw, HashedItem, HashedSolution, Item, RawSolution } from '@prosopo/types';
2
2
  export declare const NO_SOLUTION_VALUE = "NO_SOLUTION";
3
- /**
4
- * Parse a dataset
5
- * @return {JSON} captcha dataset, stored in JSON
6
- * @param datasetJSON
7
- */
8
3
  export declare function parseCaptchaDataset(datasetJSON: JSON): DatasetRaw;
9
- /**
10
- * Make sure captcha solutions are in the correct format
11
- * @param {JSON} captchaJSON captcha solutions received from the api
12
- * @return {CaptchaSolution[]} an array of parsed and sorted captcha solutions
13
- */
14
4
  export declare function parseAndSortCaptchaSolutions(captchaJSON: CaptchaSolution[]): CaptchaSolution[];
15
5
  export declare function captchaSort<T extends {
16
6
  captchaId: string;
@@ -19,56 +9,13 @@ export declare function sortAndComputeHashes(received: CaptchaSolution[], stored
19
9
  captchaId: string;
20
10
  hash: string;
21
11
  }[];
22
- /**
23
- * Take an array of CaptchaSolutions and Captchas and check if the solutions are the same for each pair
24
- * @param {CaptchaSolution[]} received
25
- * @param {Captcha[]} stored
26
- * @return {boolean}
27
- */
28
12
  export declare function compareCaptchaSolutions(received: CaptchaSolution[], stored: Captcha[]): boolean;
29
- /**
30
- * Compute the hash of various types of captcha
31
- * @param {Captcha} captcha
32
- * @param {boolean} includeSolution
33
- * @param {boolean} includeSalt
34
- * @param {boolean} sortItemHashes
35
- * @return {string} the hex string hash
36
- */
37
13
  export declare function computeCaptchaHash(captcha: CaptchaWithoutId, includeSolution: boolean | undefined, includeSalt: boolean | undefined, sortItemHashes: boolean): string;
38
- /** Return the sorted solution value or ['NO_SOLUTION'] if there is no solution. Ensures that an empty array is a valid
39
- * solution
40
- * @param solution
41
- */
42
14
  export declare function getSolutionValueToHash(solution?: HashedSolution[] | RawSolution[]): number[] | string[];
43
- /** Compute the hash of a captcha item, downloading the image if necessary
44
- * @param {Item} item
45
- * @return {Promise<HashedItem>} the hex string hash of the item
46
- */
47
15
  export declare function computeItemHash(item: Item): Promise<HashedItem>;
48
- /**
49
- * Converts an indexed captcha solution to a hashed captcha solution or simply returns the hash if it is already hashed
50
- * @return {HashedSolution[]}
51
- * @param {RawSolution[] | HashedSolution[]} solutions
52
- * @param {Item[]} items
53
- */
54
16
  export declare function matchItemsToSolutions(solutions: RawSolution[] | HashedSolution[], items: HashedItem[] | undefined): HashedSolution[];
55
- /**
56
- * Create a unique solution commitment
57
- * @param {CaptchaSolution} captcha
58
- * @return {string} the hex string hash
59
- */
60
17
  export declare function computeCaptchaSolutionHash(captcha: CaptchaSolution): string;
61
- /**
62
- * Compute hash for an array of captcha ids, userAccount, and salt, which serves as the identifier for a pending request
63
- * @param {string[]} captchaIds
64
- * @param {string} userAccount
65
- * @param {string} salt
66
- * @return {string}
67
- */
68
18
  export declare function computePendingRequestHash(captchaIds: string[], userAccount: string, salt: string): string;
69
- /**
70
- * Parse the image items in a captcha and pass back a URI if they exist
71
- */
72
19
  export declare function parseCaptchaAssets(item: Item, assetsResolver: AssetsResolver | undefined): {
73
20
  path: string;
74
21
  type: import("@prosopo/types").CaptchaItemTypes;
@@ -1 +1 @@
1
- {"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../src/captcha/captcha.ts"],"names":[],"mappings":"AAaA,OAAO,EACH,cAAc,EACd,OAAO,EACP,eAAe,EAEf,gBAAgB,EAChB,UAAU,EAEV,UAAU,EACV,cAAc,EACd,IAAI,EACJ,WAAW,EACd,MAAM,gBAAgB,CAAA;AAKvB,eAAO,MAAM,iBAAiB,gBAAgB,CAAA;AAE9C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,IAAI,GAAG,UAAU,CAqBjE;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAU9F;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAEtE;AAED,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,OAAO,EAAE,GAClB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAyBvC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAO/F;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,eAAe,qBAAQ,EACvB,WAAW,qBAAQ,EACnB,cAAc,EAAE,OAAO,GACxB,MAAM,CAqBR;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,GAAG,WAAW,EAAE,uBAEjF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAQrE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACjC,SAAS,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE,EAC3C,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,GAChC,cAAc,EAAE,CAoBlB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,eAAe,UAElE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,GAAG,SAAS;;;;;EAExF"}
1
+ {"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../src/captcha/captcha.ts"],"names":[],"mappings":"AAaA,OAAO,EACH,cAAc,EACd,OAAO,EACP,eAAe,EAEf,gBAAgB,EAChB,UAAU,EAEV,UAAU,EACV,cAAc,EACd,IAAI,EACJ,WAAW,EACd,MAAM,gBAAgB,CAAA;AAMvB,eAAO,MAAM,iBAAiB,gBAAgB,CAAA;AAO9C,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,IAAI,GAAG,UAAU,CAsBjE;AAOD,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAU9F;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAEtE;AAED,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,OAAO,EAAE,GAClB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAyBvC;AAQD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAO/F;AAUD,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,eAAe,qBAAQ,EACvB,WAAW,qBAAQ,EACnB,cAAc,EAAE,OAAO,GACxB,MAAM,CAqBR;AAMD,wBAAgB,sBAAsB,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,GAAG,WAAW,EAAE,uBAEjF;AAMD,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAQrE;AAQD,wBAAgB,qBAAqB,CACjC,SAAS,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE,EAC3C,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,GAChC,cAAc,EAAE,CAsBlB;AAOD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,eAAe,UAElE;AASD,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzG;AAKD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,GAAG,SAAS;;;;;EAExF"}
@@ -1,26 +1,9 @@
1
- // Copyright 2021-2023 Prosopo (UK) Ltd.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
1
  import { CaptchaSolutionArraySchema, DatasetWithNumericSolutionSchema, } from '@prosopo/types';
15
2
  import { ProsopoEnvError, hexHash, hexHashArray } from '@prosopo/common';
16
3
  import { at } from '@prosopo/util';
17
4
  import { downloadImage } from './util.js';
5
+ import { isHex } from '@polkadot/util';
18
6
  export const NO_SOLUTION_VALUE = 'NO_SOLUTION';
19
- /**
20
- * Parse a dataset
21
- * @return {JSON} captcha dataset, stored in JSON
22
- * @param datasetJSON
23
- */
24
7
  export function parseCaptchaDataset(datasetJSON) {
25
8
  try {
26
9
  const result = DatasetWithNumericSolutionSchema.parse(datasetJSON);
@@ -48,11 +31,6 @@ export function parseCaptchaDataset(datasetJSON) {
48
31
  throw new ProsopoEnvError(err);
49
32
  }
50
33
  }
51
- /**
52
- * Make sure captcha solutions are in the correct format
53
- * @param {JSON} captchaJSON captcha solutions received from the api
54
- * @return {CaptchaSolution[]} an array of parsed and sorted captcha solutions
55
- */
56
34
  export function parseAndSortCaptchaSolutions(captchaJSON) {
57
35
  try {
58
36
  return CaptchaSolutionArraySchema.parse(captchaJSON).map((captcha) => ({
@@ -61,7 +39,6 @@ export function parseAndSortCaptchaSolutions(captchaJSON) {
61
39
  }));
62
40
  }
63
41
  catch (err) {
64
- // TODO fix / improve error handling
65
42
  throw new ProsopoEnvError(err);
66
43
  }
67
44
  }
@@ -87,12 +64,6 @@ export function sortAndComputeHashes(received, stored) {
87
64
  };
88
65
  });
89
66
  }
90
- /**
91
- * Take an array of CaptchaSolutions and Captchas and check if the solutions are the same for each pair
92
- * @param {CaptchaSolution[]} received
93
- * @param {Captcha[]} stored
94
- * @return {boolean}
95
- */
96
67
  export function compareCaptchaSolutions(received, stored) {
97
68
  if (received.length && stored.length && received.length === stored.length) {
98
69
  const hashes = sortAndComputeHashes(received, stored);
@@ -100,14 +71,6 @@ export function compareCaptchaSolutions(received, stored) {
100
71
  }
101
72
  return false;
102
73
  }
103
- /**
104
- * Compute the hash of various types of captcha
105
- * @param {Captcha} captcha
106
- * @param {boolean} includeSolution
107
- * @param {boolean} includeSalt
108
- * @param {boolean} sortItemHashes
109
- * @return {string} the hex string hash
110
- */
111
74
  export function computeCaptchaHash(captcha, includeSolution = false, includeSalt = false, sortItemHashes) {
112
75
  try {
113
76
  const itemHashes = captcha.items.map((item, index) => {
@@ -120,29 +83,18 @@ export function computeCaptchaHash(captcha, includeSolution = false, includeSalt
120
83
  });
121
84
  return hexHashArray([
122
85
  captcha.target,
123
- // empty array hashes as empty string, undefined solution results in the array [`NO_SOLUTION`]
124
- // [undefined] also hashes as empty string, which is why we don't use it
125
86
  ...(includeSolution ? getSolutionValueToHash(captcha.solution) : []),
126
87
  includeSalt ? captcha.salt : '',
127
88
  sortItemHashes ? itemHashes.sort() : itemHashes,
128
89
  ]);
129
90
  }
130
91
  catch (err) {
131
- // TODO fix / improve error handling
132
92
  throw new ProsopoEnvError(err);
133
93
  }
134
94
  }
135
- /** Return the sorted solution value or ['NO_SOLUTION'] if there is no solution. Ensures that an empty array is a valid
136
- * solution
137
- * @param solution
138
- */
139
95
  export function getSolutionValueToHash(solution) {
140
96
  return solution !== undefined ? solution.sort() : [NO_SOLUTION_VALUE];
141
97
  }
142
- /** Compute the hash of a captcha item, downloading the image if necessary
143
- * @param {Item} item
144
- * @return {Promise<HashedItem>} the hex string hash of the item
145
- */
146
98
  export async function computeItemHash(item) {
147
99
  if (item.type === 'text') {
148
100
  return { ...item, hash: hexHash(item.data) };
@@ -154,54 +106,32 @@ export async function computeItemHash(item) {
154
106
  throw new ProsopoEnvError('CAPTCHA.INVALID_ITEM_FORMAT');
155
107
  }
156
108
  }
157
- /**
158
- * Converts an indexed captcha solution to a hashed captcha solution or simply returns the hash if it is already hashed
159
- * @return {HashedSolution[]}
160
- * @param {RawSolution[] | HashedSolution[]} solutions
161
- * @param {Item[]} items
162
- */
163
109
  export function matchItemsToSolutions(solutions, items) {
164
110
  if (!items) {
165
111
  return [];
166
112
  }
167
113
  return solutions.map((solution) => {
168
- if (typeof solution === 'string') {
169
- // solution must already be a hash
170
- // check that solution is in items array
114
+ if (typeof solution === 'string' && isHex(solution)) {
171
115
  if (!items?.some((item) => item.hash === solution)) {
172
116
  throw new ProsopoEnvError('CAPTCHA.INVALID_ITEM_HASH');
173
117
  }
174
118
  return solution;
175
119
  }
176
- // else solution must be a number
177
- // so lookup the item at that index
178
- const item = at(items, solution);
179
- // get the hash of the item
180
- const hash = item.hash;
181
- return hash;
120
+ else if (typeof solution === 'number') {
121
+ const item = at(items, solution);
122
+ return item.hash;
123
+ }
124
+ else {
125
+ throw new ProsopoEnvError('CAPTCHA.INVALID_SOLUTION_TYPE');
126
+ }
182
127
  });
183
128
  }
184
- /**
185
- * Create a unique solution commitment
186
- * @param {CaptchaSolution} captcha
187
- * @return {string} the hex string hash
188
- */
189
129
  export function computeCaptchaSolutionHash(captcha) {
190
130
  return hexHashArray([captcha.captchaId, captcha.captchaContentId, [...captcha.solution].sort(), captcha.salt]);
191
131
  }
192
- /**
193
- * Compute hash for an array of captcha ids, userAccount, and salt, which serves as the identifier for a pending request
194
- * @param {string[]} captchaIds
195
- * @param {string} userAccount
196
- * @param {string} salt
197
- * @return {string}
198
- */
199
132
  export function computePendingRequestHash(captchaIds, userAccount, salt) {
200
133
  return hexHashArray([...captchaIds.sort(), userAccount, salt]);
201
134
  }
202
- /**
203
- * Parse the image items in a captcha and pass back a URI if they exist
204
- */
205
135
  export function parseCaptchaAssets(item, assetsResolver) {
206
136
  return { ...item, path: assetsResolver?.resolveAsset(item.data).getURL() || item.data };
207
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/captcha/captcha.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/captcha/captcha.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,8 @@
1
1
  import { Captcha, Dataset, DatasetRaw } from '@prosopo/types';
2
2
  import { CaptchaMerkleTree } from './merkle.js';
3
3
  export declare function hashDatasetItems(datasetRaw: Dataset | DatasetRaw): Promise<Promise<Captcha>[]>;
4
- /**
5
- * Take a dataset and hash all the items, making sure that the existing captchaIds and item hashes are correct
6
- * @param datasetOriginal
7
- */
8
4
  export declare function validateDatasetContent(datasetOriginal: Dataset): Promise<boolean>;
9
5
  export declare function buildDataset(datasetRaw: DatasetRaw): Promise<Dataset>;
10
6
  export declare function buildCaptchaTree(dataset: Dataset, includeSolution: boolean, includeSalt: boolean, sortItemHashes: boolean): Promise<CaptchaMerkleTree>;
11
- export declare function addSolutionHashesToDataset(datasetRaw: DatasetRaw): Promise<Dataset>;
7
+ export declare function addSolutionHashesToDataset(datasetRaw: DatasetRaw): Dataset;
12
8
  //# sourceMappingURL=dataset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../src/captcha/dataset.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAoB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAO/C,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAQpG;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBvF;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB3E;AAED,wBAAsB,gBAAgB,CAClC,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,OAAO,EACxB,WAAW,EAAE,OAAO,EACpB,cAAc,EAAE,OAAO,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAY5B;AAED,wBAAsB,0BAA0B,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBzF"}
1
+ {"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../src/captcha/dataset.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAoB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAO/C,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAQpG;AAMD,wBAAsB,sBAAsB,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBvF;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB3E;AAED,wBAAsB,gBAAgB,CAClC,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,OAAO,EACxB,WAAW,EAAE,OAAO,EACpB,cAAc,EAAE,OAAO,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAY5B;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAc1E"}
@@ -12,10 +12,6 @@ export async function hashDatasetItems(datasetRaw) {
12
12
  };
13
13
  });
14
14
  }
15
- /**
16
- * Take a dataset and hash all the items, making sure that the existing captchaIds and item hashes are correct
17
- * @param datasetOriginal
18
- */
19
15
  export async function validateDatasetContent(datasetOriginal) {
20
16
  const captchaPromises = await hashDatasetItems(datasetOriginal);
21
17
  const captchas = await Promise.all(captchaPromises);
@@ -23,8 +19,6 @@ export async function validateDatasetContent(datasetOriginal) {
23
19
  ...datasetOriginal,
24
20
  captchas,
25
21
  };
26
- // compare each of the Item hashes in each of the captchas in the dataset to each of the item hashes in each of the
27
- // captchas in datasetOriginal
28
22
  const hashes = dataset.captchas.map((captcha) => {
29
23
  const captchaRaw = datasetOriginal.captchas.find((captchaRaw) => 'captchaId' in captchaRaw ? captchaRaw.captchaId === captcha.captchaId : false);
30
24
  if (captchaRaw) {
@@ -37,9 +31,9 @@ export async function validateDatasetContent(datasetOriginal) {
37
31
  return hashes.every((hash) => hash);
38
32
  }
39
33
  export async function buildDataset(datasetRaw) {
40
- logger.info(`Adding solution hashes to dataset`);
34
+ logger.debug(`Adding solution hashes to dataset`);
41
35
  const dataset = await addSolutionHashesToDataset(datasetRaw);
42
- logger.info(`Building dataset merkle trees`);
36
+ logger.debug(`Building dataset merkle trees`);
43
37
  const contentTree = await buildCaptchaTree(dataset, false, false, true);
44
38
  const solutionTree = await buildCaptchaTree(dataset, true, true, false);
45
39
  dataset.captchas = dataset.captchas.map((captcha, index) => ({
@@ -67,16 +61,14 @@ export async function buildCaptchaTree(dataset, includeSolution, includeSalt, so
67
61
  throw new ProsopoEnvError('DATASET.HASH_ERROR');
68
62
  }
69
63
  }
70
- export async function addSolutionHashesToDataset(datasetRaw) {
71
- const captchaPromises = datasetRaw.captchas.map(async (captcha) => {
64
+ export function addSolutionHashesToDataset(datasetRaw) {
65
+ const captchas = datasetRaw.captchas.map((captcha) => {
72
66
  return {
73
67
  ...captcha,
74
68
  items: captcha.items,
75
- // some captcha challenges will not have a solution
76
69
  ...(captcha.solution !== undefined && { solution: matchItemsToSolutions(captcha.solution, captcha.items) }),
77
70
  };
78
71
  });
79
- const captchas = await Promise.all(captchaPromises);
80
72
  return {
81
73
  ...datasetRaw,
82
74
  captchas,
@@ -1 +1 @@
1
- {"version":3,"file":"dataset.js","sourceRoot":"","sources":["../../src/captcha/dataset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dataset.js","sourceRoot":"","sources":["../../src/captcha/dataset.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,3 @@
1
- // Copyright 2021-2023 Prosopo (UK) Ltd.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
1
  export * from './captcha.js';
15
2
  export * from './merkle.js';
16
3
  export * from './util.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/captcha/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/captcha/index.ts"],"names":[],"mappings":"AAaA,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA"}
@@ -12,7 +12,6 @@ export class CaptchaMerkleTree {
12
12
  this.layers = [];
13
13
  }
14
14
  build(leaves) {
15
- // allow rebuild
16
15
  if (this.layers.length) {
17
16
  this.layers = [];
18
17
  }
@@ -26,7 +25,6 @@ export class CaptchaMerkleTree {
26
25
  this.root = this.buildMerkleTree(this.leaves)[0];
27
26
  }
28
27
  buildMerkleTree(leaves) {
29
- // Builds the Merkle tree from a list of leaves. In case of an odd number of leaves, the last leaf is duplicated.
30
28
  const numLeaves = leaves.length;
31
29
  if (numLeaves === 1) {
32
30
  return leaves;
@@ -63,15 +61,11 @@ export class CaptchaMerkleTree {
63
61
  throw new Error('layer undefined');
64
62
  }
65
63
  const leafIndex = layer.indexOf(leafHash);
66
- // if layer 0 leaf index is 3, it should be partnered with 2: [L0,L1],[L2,L3],[L3,L4],...
67
- // layer one pairs looks like [L0L1, L2L3], [L3L4, L5L6],...etc
68
64
  let partnerIndex = leafIndex % 2 && leafIndex > 0 ? leafIndex - 1 : leafIndex + 1;
69
- // if there are an odd number of leaves in the layer, the last leaf is duplicated
70
65
  if (partnerIndex > layer.length - 1) {
71
66
  partnerIndex = leafIndex;
72
67
  }
73
68
  const pair = [leafHash];
74
- // determine whether the leaf sits on the left or the right of its partner
75
69
  const partner = at(layer, partnerIndex);
76
70
  if (partnerIndex > leafIndex) {
77
71
  pair.push(partner);
@@ -1 +1 @@
1
- {"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../src/captcha/merkle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../src/captcha/merkle.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,3 @@
1
- // Copyright 2021-2023 Prosopo (UK) Ltd.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
1
  import { ProsopoEnvError } from '@prosopo/common';
15
2
  export async function downloadImage(url) {
16
3
  try {
@@ -22,7 +9,6 @@ export async function downloadImage(url) {
22
9
  return new Uint8Array(buffer);
23
10
  }
24
11
  catch (error) {
25
- // TODO fix/improve error handling
26
12
  throw new ProsopoEnvError(error);
27
13
  }
28
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/captcha/util.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC3C,IAAI;QACA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;SAC7E;QACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;QAC3C,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;KAChC;IAAC,OAAO,KAAK,EAAE;QACZ,kCAAkC;QAClC,MAAM,IAAI,eAAe,CAAC,KAAc,CAAC,CAAA;KAC5C;AACL,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/captcha/util.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC3C,IAAI;QACA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;SAC7E;QACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;QAC3C,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;KAChC;IAAC,OAAO,KAAK,EAAE;QAEZ,MAAM,IAAI,eAAe,CAAC,KAAc,CAAC,CAAA;KAC5C;AACL,CAAC"}
@@ -4,6 +4,7 @@ const types = require("@prosopo/types");
4
4
  const common = require("@prosopo/common");
5
5
  const util = require("@prosopo/util");
6
6
  const util$1 = require("./util.cjs");
7
+ const util$2 = require("@polkadot/util");
7
8
  const NO_SOLUTION_VALUE = "NO_SOLUTION";
8
9
  function parseCaptchaDataset(datasetJSON) {
9
10
  try {
@@ -113,15 +114,17 @@ function matchItemsToSolutions(solutions, items) {
113
114
  return [];
114
115
  }
115
116
  return solutions.map((solution) => {
116
- if (typeof solution === "string") {
117
- if (!(items == null ? void 0 : items.some((item2) => item2.hash === solution))) {
117
+ if (typeof solution === "string" && util$2.isHex(solution)) {
118
+ if (!(items == null ? void 0 : items.some((item) => item.hash === solution))) {
118
119
  throw new common.ProsopoEnvError("CAPTCHA.INVALID_ITEM_HASH");
119
120
  }
120
121
  return solution;
122
+ } else if (typeof solution === "number") {
123
+ const item = util.at(items, solution);
124
+ return item.hash;
125
+ } else {
126
+ throw new common.ProsopoEnvError("CAPTCHA.INVALID_SOLUTION_TYPE");
121
127
  }
122
- const item = util.at(items, solution);
123
- const hash = item.hash;
124
- return hash;
125
128
  });
126
129
  }
127
130
  function computeCaptchaSolutionHash(captcha) {
@@ -35,9 +35,9 @@ async function validateDatasetContent(datasetOriginal) {
35
35
  }
36
36
  async function buildDataset(datasetRaw) {
37
37
  var _a, _b;
38
- logger.info(`Adding solution hashes to dataset`);
38
+ logger.debug(`Adding solution hashes to dataset`);
39
39
  const dataset = await addSolutionHashesToDataset(datasetRaw);
40
- logger.info(`Building dataset merkle trees`);
40
+ logger.debug(`Building dataset merkle trees`);
41
41
  const contentTree = await buildCaptchaTree(dataset, false, false, true);
42
42
  const solutionTree = await buildCaptchaTree(dataset, true, true, false);
43
43
  dataset.captchas = dataset.captchas.map(
@@ -71,8 +71,8 @@ async function buildCaptchaTree(dataset, includeSolution, includeSalt, sortItemH
71
71
  throw new common.ProsopoEnvError("DATASET.HASH_ERROR");
72
72
  }
73
73
  }
74
- async function addSolutionHashesToDataset(datasetRaw) {
75
- const captchaPromises = datasetRaw.captchas.map(async (captcha$1) => {
74
+ function addSolutionHashesToDataset(datasetRaw) {
75
+ const captchas = datasetRaw.captchas.map((captcha$1) => {
76
76
  return {
77
77
  ...captcha$1,
78
78
  items: captcha$1.items,
@@ -80,7 +80,6 @@ async function addSolutionHashesToDataset(datasetRaw) {
80
80
  ...captcha$1.solution !== void 0 && { solution: captcha.matchItemsToSolutions(captcha$1.solution, captcha$1.items) }
81
81
  };
82
82
  });
83
- const captchas = await Promise.all(captchaPromises);
84
83
  return {
85
84
  ...datasetRaw,
86
85
  captchas
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  require("./captcha/index.cjs");
4
+ const captchas = require("./tests/mocks/data/captchas.cjs");
4
5
  const captcha = require("./captcha/captcha.cjs");
5
6
  const merkle = require("./captcha/merkle.cjs");
6
7
  const util = require("./captcha/util.cjs");
7
8
  const dataset = require("./captcha/dataset.cjs");
9
+ exports.datasetWithIndexSolutions = captchas.datasetWithIndexSolutions;
10
+ exports.datasetWithSolutionHashes = captchas.datasetWithSolutionHashes;
8
11
  exports.NO_SOLUTION_VALUE = captcha.NO_SOLUTION_VALUE;
9
12
  exports.captchaSort = captcha.captchaSort;
10
13
  exports.compareCaptchaSolutions = captcha.compareCaptchaSolutions;