@prosopo/database 0.1.17 → 0.1.18

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/database",
3
- "version": "0.1.17",
3
+ "version": "0.1.18",
4
4
  "description": "Prosopo database plugins for provider",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -21,16 +21,17 @@
21
21
  },
22
22
  "homepage": "https://github.com/prosopo/captcha#readme",
23
23
  "dependencies": {
24
- "@prosopo/common": "^0.1.17",
25
- "@prosopo/types": "^0.1.17",
26
- "@prosopo/types-database": "^0.1.17",
24
+ "@prosopo/common": "^0.1.18",
25
+ "@prosopo/types": "^0.1.18",
26
+ "@prosopo/types-database": "^0.1.18",
27
27
  "mongodb": "5.8.0",
28
28
  "mongodb-memory-server": "^8.7.2",
29
29
  "mongoose": "^7.3.3",
30
30
  "zod": "^3.17.9"
31
31
  },
32
32
  "devDependencies": {
33
- "typescript": "^4.9.5"
33
+ "tslib": "^2.6.2",
34
+ "typescript": "^5.1.6"
34
35
  },
35
36
  "sideEffects": false
36
37
  }
@@ -1,7 +0,0 @@
1
- import { ProsopoDatabase as MongoDatabase } from './mongo.js';
2
- import { MongoMemoryDatabase } from './mongoMemory.js';
3
- export declare const Databases: {
4
- mongo: typeof MongoDatabase;
5
- mongoMemory: typeof MongoMemoryDatabase;
6
- };
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/databases/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,eAAe,IAAI,aAAa,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,eAAO,MAAM,SAAS;;;CAGrB,CAAA"}
@@ -1,21 +0,0 @@
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
- import { DatabaseTypes } from '@prosopo/types';
15
- import { ProsopoDatabase as MongoDatabase } from './mongo.js';
16
- import { MongoMemoryDatabase } from './mongoMemory.js';
17
- export const Databases = {
18
- [DatabaseTypes.Values.mongo]: MongoDatabase,
19
- [DatabaseTypes.Values.mongoMemory]: MongoMemoryDatabase,
20
- };
21
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/databases/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,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,eAAe,IAAI,aAAa,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa;IAC3C,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,mBAAmB;CAC1D,CAAA"}
@@ -1,157 +0,0 @@
1
- /// <reference types="mongoose/types/connection.js" />
2
- import { ArgumentTypes, Captcha, CaptchaSolution, CaptchaStates, DatasetBase, DatasetWithIds, DatasetWithIdsAndTree, PendingCaptchaRequest, ScheduledTaskNames, ScheduledTaskResult, ScheduledTaskStatus } from '@prosopo/types';
3
- import { AsyncFactory, Logger } from '@prosopo/common';
4
- import { Database, ScheduledTaskRecord, Tables, UserCommitmentRecord, UserSolutionRecord } from '@prosopo/types-database';
5
- import { DeleteResult } from 'mongodb';
6
- import { Connection } from 'mongoose';
7
- /**
8
- * Returns the Database object through which Providers can put and get captchas
9
- * @param {string} url The database endpoint
10
- * @param {string} dbname The database name
11
- * @return {ProsopoDatabase} Database layer
12
- */
13
- export declare class ProsopoDatabase extends AsyncFactory implements Database {
14
- url: string;
15
- tables?: Tables;
16
- dbname: string;
17
- connection?: Connection;
18
- logger: Logger;
19
- init(url: string, dbname: string, logger: Logger, authSource?: string): Promise<this>;
20
- /**
21
- * @description Connect to the database and set the various tables
22
- */
23
- connect(): Promise<void>;
24
- /** Close connection to the database */
25
- close(): Promise<void>;
26
- /**
27
- * @description Load a dataset to the database
28
- * @param {Dataset} dataset
29
- */
30
- storeDataset(dataset: DatasetWithIdsAndTree): Promise<void>;
31
- /** @description Get a dataset from the database
32
- * @param {string} datasetId
33
- */
34
- getDataset(datasetId: string): Promise<DatasetWithIds>;
35
- /**
36
- * @description Get random captchas that are solved or not solved
37
- * @param {boolean} solved `true` when captcha is solved
38
- * @param {string} datasetId the id of the data set
39
- * @param {number} size the number of records to be returned
40
- */
41
- getRandomCaptcha(solved: boolean, datasetId: ArgumentTypes.Hash, size?: number): Promise<Captcha[] | undefined>;
42
- /**
43
- * @description Get captchas by id
44
- * @param {string[]} captchaId
45
- */
46
- getCaptchaById(captchaId: string[]): Promise<Captcha[] | undefined>;
47
- /**
48
- * @description Update a captcha
49
- * @param {Captcha} captcha
50
- * @param {string} datasetId the id of the data set
51
- */
52
- updateCaptcha(captcha: Captcha, datasetId: ArgumentTypes.Hash): Promise<void>;
53
- /**
54
- * @description Remove captchas
55
- */
56
- removeCaptchas(captchaIds: string[]): Promise<void>;
57
- /**
58
- * @description Get a dataset by Id
59
- */
60
- getDatasetDetails(datasetId: ArgumentTypes.Hash): Promise<DatasetBase>;
61
- /**
62
- * @description Store a Dapp User's captcha solution commitment
63
- */
64
- storeDappUserSolution(captchas: CaptchaSolution[], commit: UserCommitmentRecord): Promise<void>;
65
- /** @description Get processed Dapp User captcha solutions from the user solution table
66
- */
67
- getProcessedDappUserSolutions(): Promise<UserSolutionRecord[]>;
68
- /** @description Get processed Dapp User captcha commitments from the commitments table
69
- */
70
- getProcessedDappUserCommitments(): Promise<UserCommitmentRecord[]>;
71
- /** @description Get Dapp User captcha commitments from the commitments table that have not been batched on-chain
72
- */
73
- getUnbatchedDappUserCommitments(): Promise<UserCommitmentRecord[]>;
74
- /** @description Get Dapp User captcha commitments from the commitments table that have been batched on-chain
75
- */
76
- getBatchedDappUserCommitments(): Promise<UserCommitmentRecord[]>;
77
- /** @description Remove processed Dapp User captcha solutions from the user solution table
78
- */
79
- removeProcessedDappUserSolutions(commitmentIds: string[]): Promise<DeleteResult | undefined>;
80
- /** @description Remove processed Dapp User captcha commitments from the user commitments table
81
- */
82
- removeProcessedDappUserCommitments(commitmentIds: string[]): Promise<DeleteResult | undefined>;
83
- /**
84
- * @description Store a Dapp User's pending record
85
- */
86
- storeDappUserPending(userAccount: string, requestHash: string, salt: string, deadlineTimestamp: number, requestedAtBlock: number): Promise<void>;
87
- /**
88
- * @description Get a Dapp user's pending record
89
- */
90
- getDappUserPending(requestHash: string): Promise<PendingCaptchaRequest>;
91
- /**
92
- * @description Update a Dapp User's pending record
93
- */
94
- updateDappUserPendingStatus(userAccount: string, requestHash: string, approve: boolean): Promise<void>;
95
- /**
96
- * @description Get all unsolved captchas
97
- */
98
- getAllCaptchasByDatasetId(datasetId: string, state?: CaptchaStates): Promise<Captcha[] | undefined>;
99
- /**
100
- * @description Get all dapp user solutions by captchaIds
101
- */
102
- getAllDappUserSolutions(captchaId: string[]): Promise<UserSolutionRecord[] | undefined>;
103
- getDatasetIdWithSolvedCaptchasOfSizeN(solvedCaptchaCount: any): Promise<string>;
104
- getRandomSolvedCaptchasFromSingleDataset(datasetId: string, size: number): Promise<CaptchaSolution[]>;
105
- /**
106
- * @description Get dapp user solution by ID
107
- * @param {string[]} commitmentId
108
- */
109
- getDappUserSolutionById(commitmentId: string): Promise<UserSolutionRecord | undefined>;
110
- /**
111
- * @description Get dapp user commitment by user account
112
- * @param commitmentId
113
- */
114
- getDappUserCommitmentById(commitmentId: string): Promise<UserCommitmentRecord | undefined>;
115
- /**
116
- * @description Get dapp user commitment by user account
117
- * @param {string[]} userAccount
118
- */
119
- getDappUserCommitmentByAccount(userAccount: string): Promise<UserCommitmentRecord[]>;
120
- /**
121
- * @description Approve a dapp user's solution
122
- * @param {string[]} commitmentId
123
- */
124
- approveDappUserCommitment(commitmentId: string): Promise<void>;
125
- /**
126
- * @description Flag a dapp user's solutions as used by calculated solution
127
- * @param {string[]} captchaIds
128
- */
129
- flagProcessedDappUserSolutions(captchaIds: ArgumentTypes.Hash[]): Promise<void>;
130
- /**
131
- * @description Flag dapp users' commitments as used by calculated solution
132
- * @param {string[]} commitmentIds
133
- */
134
- flagProcessedDappUserCommitments(commitmentIds: ArgumentTypes.Hash[]): Promise<void>;
135
- /**
136
- * @description Flag dapp users' commitments as used by calculated solution
137
- * @param {string[]} commitmentIds
138
- */
139
- flagBatchedDappUserCommitments(commitmentIds: ArgumentTypes.Hash[]): Promise<void>;
140
- /**
141
- * @description Get the last batch commit time or return 0 if none
142
- */
143
- getLastBatchCommitTime(): Promise<Date>;
144
- /**
145
- * @description Get a scheduled task status record by task ID and status
146
- */
147
- getScheduledTaskStatus(taskId: string, status: ScheduledTaskStatus): Promise<ScheduledTaskRecord | undefined>;
148
- /**
149
- * @description Get the most recent scheduled task status record for a given task
150
- */
151
- getLastScheduledTaskStatus(task: ScheduledTaskNames, status?: ScheduledTaskStatus): Promise<ScheduledTaskRecord | undefined>;
152
- /**
153
- * @description Store the status of a scheduled task and an optional result
154
- */
155
- storeScheduledTaskStatus(taskId: `0x${string}`, task: ScheduledTaskNames, status: ScheduledTaskStatus, result?: ScheduledTaskResult): Promise<void>;
156
- }
157
- //# sourceMappingURL=mongo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../../src/databases/mongo.ts"],"names":[],"mappings":"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"}
@@ -1,606 +0,0 @@
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
- /* eslint-disable @typescript-eslint/no-non-null-assertion */
15
- import { CaptchaStates, CaptchaStatus, DatasetWithIdsAndTreeSchema, ScheduledTaskNames, ScheduledTaskStatus, } from '@prosopo/types';
16
- import { AsyncFactory, ProsopoEnvError } from '@prosopo/common';
17
- import { CaptchaRecordSchema, DatasetRecordSchema, PendingRecordSchema, ScheduledTaskRecordSchema, ScheduledTaskSchema, SolutionRecordSchema, UserCommitmentRecordSchema, UserCommitmentSchema, UserSolutionRecordSchema, UserSolutionSchema, } from '@prosopo/types-database';
18
- import { ServerApiVersion } from 'mongodb';
19
- import { isHex } from '@polkadot/util';
20
- import mongoose from 'mongoose';
21
- mongoose.set('strictQuery', false);
22
- // mongodb://username:password@127.0.0.1:27017
23
- const DEFAULT_ENDPOINT = 'mongodb://127.0.0.1:27017';
24
- /**
25
- * Returns the Database object through which Providers can put and get captchas
26
- * @param {string} url The database endpoint
27
- * @param {string} dbname The database name
28
- * @return {ProsopoDatabase} Database layer
29
- */
30
- export class ProsopoDatabase extends AsyncFactory {
31
- url;
32
- tables;
33
- dbname;
34
- connection;
35
- logger;
36
- async init(url, dbname, logger, authSource) {
37
- const authSourceString = authSource ? `?authSource=${authSource}` : '';
38
- const separator = url.slice(-1) === '/' ? '' : '/';
39
- this.url = `${url || DEFAULT_ENDPOINT}${separator}${dbname}${authSourceString}`;
40
- this.dbname = dbname;
41
- this.logger = logger;
42
- return this;
43
- }
44
- /**
45
- * @description Connect to the database and set the various tables
46
- */
47
- async connect() {
48
- return new Promise((resolve, reject) => {
49
- if (this.connection) {
50
- resolve();
51
- }
52
- this.logger.info(`Mongo url: ${this.url.replace(/\w+:\w+/, '<Credentials>')}`);
53
- this.connection = mongoose.createConnection(this.url, {
54
- dbName: this.dbname,
55
- serverApi: ServerApiVersion.v1,
56
- });
57
- this.tables = {
58
- captcha: this.connection.models.Captcha || this.connection.model('Captcha', CaptchaRecordSchema),
59
- dataset: this.connection.models.Dataset || this.connection.model('Dataset', DatasetRecordSchema),
60
- solution: this.connection.models.Solution || this.connection.model('Solution', SolutionRecordSchema),
61
- commitment: this.connection.models.UserCommitment ||
62
- this.connection.model('UserCommitment', UserCommitmentRecordSchema),
63
- usersolution: this.connection.models.UserSolution ||
64
- this.connection.model('UserSolution', UserSolutionRecordSchema),
65
- pending: this.connection.models.Pending || this.connection.model('Pending', PendingRecordSchema),
66
- scheduler: this.connection.models.Scheduler || this.connection.model('Scheduler', ScheduledTaskRecordSchema),
67
- };
68
- this.connection.once('open', resolve).on('error', (e) => {
69
- this.logger.warn(`mongoose connection error`);
70
- if (e.message.code === 'ETIMEDOUT') {
71
- this.logger.error(e);
72
- mongoose.connect(this.url);
73
- }
74
- this.logger.error(e);
75
- reject(new ProsopoEnvError(e, 'DATABASE.CONNECT_ERROR', {}, this.url));
76
- });
77
- });
78
- }
79
- /** Close connection to the database */
80
- async close() {
81
- this.logger.info(`Closing connection to ${this.url}`);
82
- // eslint-disable-next-line no-async-promise-executor
83
- await new Promise(async (resolve, reject) => {
84
- mongoose.connection
85
- .close()
86
- .then(() => {
87
- this.logger.info(`Connection to ${this.url} closed`);
88
- resolve();
89
- })
90
- .catch(reject);
91
- });
92
- }
93
- /**
94
- * @description Load a dataset to the database
95
- * @param {Dataset} dataset
96
- */
97
- async storeDataset(dataset) {
98
- try {
99
- const parsedDataset = DatasetWithIdsAndTreeSchema.parse(dataset);
100
- const datasetDoc = {
101
- datasetId: parsedDataset.datasetId,
102
- datasetContentId: parsedDataset.datasetContentId,
103
- format: parsedDataset.format,
104
- contentTree: parsedDataset.contentTree,
105
- solutionTree: parsedDataset.solutionTree,
106
- };
107
- await this.tables?.dataset.updateOne({ datasetId: parsedDataset.datasetId }, { $set: datasetDoc }, { upsert: true });
108
- // put the dataset id on each of the captcha docs and remove the solution
109
- const captchaDocs = parsedDataset.captchas.map(({ solution, ...captcha }, index) => ({
110
- ...captcha,
111
- datasetId: parsedDataset.datasetId,
112
- datasetContentId: parsedDataset.datasetContentId,
113
- index,
114
- solved: !!solution?.length,
115
- }));
116
- // create a bulk upsert operation and execute
117
- if (captchaDocs.length) {
118
- await this.tables?.captcha.bulkWrite(captchaDocs.map((captchaDoc) => ({
119
- updateOne: {
120
- filter: { captchaId: captchaDoc.captchaId },
121
- update: { $set: captchaDoc },
122
- upsert: true,
123
- },
124
- })));
125
- }
126
- // insert any captcha solutions into the solutions collection
127
- const captchaSolutionDocs = parsedDataset.captchas
128
- .filter(({ solution }) => solution?.length)
129
- .map((captcha) => ({
130
- captchaId: captcha.captchaId,
131
- captchaContentId: captcha.captchaContentId,
132
- solution: captcha.solution,
133
- salt: captcha.salt,
134
- datasetId: parsedDataset.datasetId,
135
- datasetContentId: parsedDataset.datasetContentId,
136
- }));
137
- // create a bulk upsert operation and execute
138
- if (captchaSolutionDocs.length) {
139
- await this.tables?.solution.bulkWrite(captchaSolutionDocs.map((captchaSolutionDoc) => ({
140
- updateOne: {
141
- filter: { captchaId: captchaSolutionDoc.captchaId },
142
- update: { $set: captchaSolutionDoc },
143
- upsert: true,
144
- },
145
- })));
146
- }
147
- }
148
- catch (err) {
149
- throw new ProsopoEnvError(err, 'DATABASE.DATASET_LOAD_FAILED');
150
- }
151
- }
152
- /** @description Get a dataset from the database
153
- * @param {string} datasetId
154
- */
155
- async getDataset(datasetId) {
156
- const datasetDoc = await this.tables?.dataset
157
- .findOne({ datasetId: datasetId })
158
- .lean();
159
- if (datasetDoc) {
160
- const { datasetContentId, format, contentTree, solutionTree } = datasetDoc;
161
- const captchas = (await this.tables?.captcha.find({ datasetId }).lean()) || [];
162
- const solutions = (await this.tables?.solution.find({ datasetId }).lean()) || [];
163
- const solutionsKeyed = {};
164
- for (const solution of solutions) {
165
- solutionsKeyed[solution.captchaId] = solution;
166
- }
167
- return {
168
- datasetId,
169
- datasetContentId,
170
- format,
171
- contentTree,
172
- solutionTree,
173
- captchas: captchas.map((captchaDoc) => {
174
- const { captchaId, captchaContentId, items, target, salt, solved } = captchaDoc;
175
- return {
176
- captchaId,
177
- captchaContentId,
178
- solved,
179
- salt,
180
- items,
181
- target,
182
- solution: solved && solutionsKeyed[captchaId] ? solutionsKeyed[captchaId].solution : null,
183
- };
184
- }),
185
- };
186
- }
187
- throw new ProsopoEnvError('DATABASE.DATASET_GET_FAILED', undefined, {}, datasetId);
188
- }
189
- /**
190
- * @description Get random captchas that are solved or not solved
191
- * @param {boolean} solved `true` when captcha is solved
192
- * @param {string} datasetId the id of the data set
193
- * @param {number} size the number of records to be returned
194
- */
195
- async getRandomCaptcha(solved, datasetId, size) {
196
- if (!isHex(datasetId)) {
197
- throw new ProsopoEnvError('DATABASE.INVALID_HASH', this.getRandomCaptcha.name, {}, datasetId);
198
- }
199
- const sampleSize = size ? Math.abs(Math.trunc(size)) : 1;
200
- const cursor = this.tables?.captcha.aggregate([
201
- { $match: { datasetId, solved } },
202
- { $sample: { size: sampleSize } },
203
- {
204
- $project: {
205
- datasetId: 1,
206
- datasetContentId: 1,
207
- captchaId: 1,
208
- captchaContentId: 1,
209
- items: 1,
210
- target: 1,
211
- },
212
- },
213
- ]);
214
- const docs = await cursor;
215
- if (docs && docs.length) {
216
- // drop the _id field
217
- return docs.map(({ _id, ...keepAttrs }) => keepAttrs);
218
- }
219
- throw new ProsopoEnvError('DATABASE.CAPTCHA_GET_FAILED', this.getRandomCaptcha.name, {}, {
220
- solved: solved,
221
- datasetId: datasetId,
222
- size: size,
223
- });
224
- }
225
- /**
226
- * @description Get captchas by id
227
- * @param {string[]} captchaId
228
- */
229
- async getCaptchaById(captchaId) {
230
- const cursor = this.tables?.captcha.find({ captchaId: { $in: captchaId } }).lean();
231
- const docs = await cursor;
232
- if (docs && docs.length) {
233
- // drop the _id field
234
- return docs.map(({ _id, ...keepAttrs }) => keepAttrs);
235
- }
236
- throw new ProsopoEnvError('DATABASE.CAPTCHA_GET_FAILED', this.getCaptchaById.name, {}, captchaId);
237
- }
238
- /**
239
- * @description Update a captcha
240
- * @param {Captcha} captcha
241
- * @param {string} datasetId the id of the data set
242
- */
243
- async updateCaptcha(captcha, datasetId) {
244
- if (!isHex(datasetId)) {
245
- throw new ProsopoEnvError('DATABASE.INVALID_HASH', this.updateCaptcha.name, {}, datasetId);
246
- }
247
- try {
248
- await this.tables?.captcha.updateOne({ datasetId }, { $set: captcha }, { upsert: false });
249
- }
250
- catch (err) {
251
- throw new ProsopoEnvError(err, this.updateCaptcha.name, {}, datasetId);
252
- }
253
- }
254
- /**
255
- * @description Remove captchas
256
- */
257
- async removeCaptchas(captchaIds) {
258
- await this.tables?.captcha.deleteMany({ captchaId: { $in: captchaIds } });
259
- }
260
- /**
261
- * @description Get a dataset by Id
262
- */
263
- async getDatasetDetails(datasetId) {
264
- if (!isHex(datasetId)) {
265
- throw new ProsopoEnvError('DATABASE.INVALID_HASH', this.getDatasetDetails.name, {}, datasetId);
266
- }
267
- const doc = await this.tables?.dataset.findOne({ datasetId }).lean();
268
- if (doc) {
269
- return doc;
270
- }
271
- throw new ProsopoEnvError('DATABASE.DATASET_GET_FAILED', this.getDatasetDetails.name, {}, datasetId);
272
- }
273
- /**
274
- * @description Store a Dapp User's captcha solution commitment
275
- */
276
- async storeDappUserSolution(captchas, commit) {
277
- const commitmentRecord = UserCommitmentSchema.parse(commit);
278
- if (captchas.length) {
279
- await this.tables?.commitment.updateOne({
280
- id: commit.id,
281
- }, commitmentRecord, { upsert: true });
282
- const ops = captchas.map((captcha) => ({
283
- updateOne: {
284
- filter: { commitmentId: commit.id, captchaId: captcha.captchaId },
285
- update: {
286
- $set: {
287
- captchaId: captcha.captchaId,
288
- captchaContentId: captcha.captchaContentId,
289
- salt: captcha.salt,
290
- solution: captcha.solution,
291
- commitmentId: commit.id,
292
- processed: false,
293
- },
294
- },
295
- upsert: true,
296
- },
297
- }));
298
- await this.tables?.usersolution.bulkWrite(ops);
299
- }
300
- }
301
- /** @description Get processed Dapp User captcha solutions from the user solution table
302
- */
303
- async getProcessedDappUserSolutions() {
304
- const docs = await this.tables?.usersolution.find({ processed: true }).lean();
305
- return docs ? docs.map((doc) => UserSolutionSchema.parse(doc)) : [];
306
- }
307
- /** @description Get processed Dapp User captcha commitments from the commitments table
308
- */
309
- async getProcessedDappUserCommitments() {
310
- const docs = await this.tables?.commitment.find({ processed: true }).lean();
311
- return docs ? docs.map((doc) => UserCommitmentSchema.parse(doc)) : [];
312
- }
313
- /** @description Get Dapp User captcha commitments from the commitments table that have not been batched on-chain
314
- */
315
- async getUnbatchedDappUserCommitments() {
316
- const docs = await this.tables?.commitment.find({ batched: false }).lean();
317
- return docs ? docs.map((doc) => UserCommitmentSchema.parse(doc)) : [];
318
- }
319
- /** @description Get Dapp User captcha commitments from the commitments table that have been batched on-chain
320
- */
321
- async getBatchedDappUserCommitments() {
322
- const docs = await this.tables?.commitment.find({ batched: true }).lean();
323
- return docs ? docs.map((doc) => UserCommitmentSchema.parse(doc)) : [];
324
- }
325
- /** @description Remove processed Dapp User captcha solutions from the user solution table
326
- */
327
- async removeProcessedDappUserSolutions(commitmentIds) {
328
- return await this.tables?.usersolution.deleteMany({ processed: true, commitmentId: { $in: commitmentIds } });
329
- }
330
- /** @description Remove processed Dapp User captcha commitments from the user commitments table
331
- */
332
- async removeProcessedDappUserCommitments(commitmentIds) {
333
- return await this.tables?.commitment.deleteMany({ processed: true, id: { $in: commitmentIds } });
334
- }
335
- /**
336
- * @description Store a Dapp User's pending record
337
- */
338
- async storeDappUserPending(userAccount, requestHash, salt, deadlineTimestamp, requestedAtBlock) {
339
- if (!isHex(requestHash)) {
340
- throw new ProsopoEnvError('DATABASE.INVALID_HASH', this.storeDappUserPending.name, {}, requestHash);
341
- }
342
- const pendingRecord = {
343
- accountId: userAccount,
344
- pending: true,
345
- salt,
346
- requestHash,
347
- deadlineTimestamp,
348
- requestedAtBlock,
349
- };
350
- await this.tables?.pending.updateOne({ requestHash: requestHash }, { $set: pendingRecord }, { upsert: true });
351
- }
352
- /**
353
- * @description Get a Dapp user's pending record
354
- */
355
- async getDappUserPending(requestHash) {
356
- if (!isHex(requestHash)) {
357
- throw new ProsopoEnvError('DATABASE.INVALID_HASH', this.getDappUserPending.name, {}, requestHash);
358
- }
359
- const doc = await this.tables?.pending
360
- .findOne({ requestHash: requestHash })
361
- .lean();
362
- if (doc) {
363
- return doc;
364
- }
365
- throw new ProsopoEnvError('DATABASE.PENDING_RECORD_NOT_FOUND', this.getDappUserPending.name);
366
- }
367
- /**
368
- * @description Update a Dapp User's pending record
369
- */
370
- async updateDappUserPendingStatus(userAccount, requestHash, approve) {
371
- if (!isHex(requestHash)) {
372
- throw new ProsopoEnvError('DATABASE.INVALID_HASH', this.updateDappUserPendingStatus.name, {}, requestHash);
373
- }
374
- await this.tables?.pending.updateOne({ requestHash: requestHash }, {
375
- $set: {
376
- accountId: userAccount,
377
- pending: false,
378
- approved: approve,
379
- requestHash,
380
- },
381
- }, { upsert: true });
382
- }
383
- /**
384
- * @description Get all unsolved captchas
385
- */
386
- async getAllCaptchasByDatasetId(datasetId, state) {
387
- const cursor = this.tables?.captcha
388
- .find({
389
- datasetId,
390
- solved: state === CaptchaStates.Solved,
391
- })
392
- .lean();
393
- const docs = await cursor;
394
- if (docs) {
395
- // drop the _id field
396
- return docs.map(({ _id, ...keepAttrs }) => keepAttrs);
397
- }
398
- throw new ProsopoEnvError('DATABASE.CAPTCHA_GET_FAILED');
399
- }
400
- /**
401
- * @description Get all dapp user solutions by captchaIds
402
- */
403
- async getAllDappUserSolutions(captchaId) {
404
- const cursor = this.tables?.usersolution?.find({ captchaId: { $in: captchaId } }).lean();
405
- const docs = await cursor;
406
- if (docs) {
407
- // drop the _id field
408
- return docs.map(({ _id, ...keepAttrs }) => keepAttrs);
409
- }
410
- throw new ProsopoEnvError('DATABASE.SOLUTION_GET_FAILED');
411
- }
412
- async getDatasetIdWithSolvedCaptchasOfSizeN(solvedCaptchaCount) {
413
- const cursor = this.tables?.solution.aggregate([
414
- {
415
- $match: {},
416
- },
417
- {
418
- $group: {
419
- _id: '$datasetId',
420
- count: { $sum: 1 },
421
- },
422
- },
423
- {
424
- $match: {
425
- count: { $gte: solvedCaptchaCount },
426
- },
427
- },
428
- {
429
- $sample: { size: 1 },
430
- },
431
- ]);
432
- const docs = await cursor;
433
- if (docs && docs.length) {
434
- // return the _id field
435
- return docs[0]._id;
436
- }
437
- throw new ProsopoEnvError('DATABASE.DATASET_WITH_SOLUTIONS_GET_FAILED');
438
- }
439
- async getRandomSolvedCaptchasFromSingleDataset(datasetId, size) {
440
- //const datasetId = await this.getDatasetIdWithSolvedCaptchasOfSizeN(size);
441
- if (!isHex(datasetId)) {
442
- throw new ProsopoEnvError('DATABASE.INVALID_HASH', this.getRandomSolvedCaptchasFromSingleDataset.name, {}, datasetId);
443
- }
444
- const sampleSize = size ? Math.abs(Math.trunc(size)) : 1;
445
- const cursor = this.tables?.solution.aggregate([
446
- { $match: { datasetId } },
447
- { $sample: { size: sampleSize } },
448
- {
449
- $project: {
450
- captchaId: 1,
451
- captchaContentId: 1,
452
- solution: 1,
453
- },
454
- },
455
- ]);
456
- const docs = await cursor;
457
- if (docs && docs.length) {
458
- return docs;
459
- }
460
- throw new ProsopoEnvError('DATABASE.SOLUTION_GET_FAILED');
461
- }
462
- /**
463
- * @description Get dapp user solution by ID
464
- * @param {string[]} commitmentId
465
- */
466
- async getDappUserSolutionById(commitmentId) {
467
- const cursor = this.tables?.usersolution
468
- ?.findOne({
469
- commitmentId: commitmentId,
470
- }, { projection: { _id: 0 } })
471
- .lean();
472
- const doc = await cursor;
473
- if (doc) {
474
- return doc;
475
- }
476
- throw new ProsopoEnvError('DATABASE.SOLUTION_GET_FAILED', this.getCaptchaById.name, {}, commitmentId);
477
- }
478
- /**
479
- * @description Get dapp user commitment by user account
480
- * @param commitmentId
481
- */
482
- async getDappUserCommitmentById(commitmentId) {
483
- const commitmentCursor = this.tables?.commitment?.findOne({ id: commitmentId }).lean();
484
- const doc = await commitmentCursor;
485
- return doc ? UserCommitmentSchema.parse(doc) : undefined;
486
- }
487
- /**
488
- * @description Get dapp user commitment by user account
489
- * @param {string[]} userAccount
490
- */
491
- async getDappUserCommitmentByAccount(userAccount) {
492
- const docs = await this.tables?.commitment
493
- ?.find({ userAccount })
494
- .lean();
495
- return docs ? docs : [];
496
- }
497
- /**
498
- * @description Approve a dapp user's solution
499
- * @param {string[]} commitmentId
500
- */
501
- async approveDappUserCommitment(commitmentId) {
502
- try {
503
- await this.tables?.commitment
504
- ?.findOneAndUpdate({ id: commitmentId }, { $set: { status: CaptchaStatus.approved } }, { upsert: false })
505
- .lean();
506
- }
507
- catch (err) {
508
- throw new ProsopoEnvError(err, 'DATABASE.SOLUTION_APPROVE_FAILED', {}, commitmentId);
509
- }
510
- }
511
- /**
512
- * @description Flag a dapp user's solutions as used by calculated solution
513
- * @param {string[]} captchaIds
514
- */
515
- async flagProcessedDappUserSolutions(captchaIds) {
516
- try {
517
- await this.tables?.usersolution
518
- ?.updateMany({ captchaId: { $in: captchaIds } }, { $set: { processed: true } }, { upsert: false })
519
- .lean();
520
- }
521
- catch (err) {
522
- throw new ProsopoEnvError(err, 'DATABASE.SOLUTION_FLAG_FAILED', {}, captchaIds);
523
- }
524
- }
525
- /**
526
- * @description Flag dapp users' commitments as used by calculated solution
527
- * @param {string[]} commitmentIds
528
- */
529
- async flagProcessedDappUserCommitments(commitmentIds) {
530
- try {
531
- const distinctCommitmentIds = [...new Set(commitmentIds)];
532
- await this.tables?.commitment
533
- ?.updateMany({ id: { $in: distinctCommitmentIds } }, { $set: { processed: true } }, { upsert: false })
534
- .lean();
535
- }
536
- catch (err) {
537
- throw new ProsopoEnvError(err, 'DATABASE.COMMITMENT_FLAG_FAILED', {}, commitmentIds);
538
- }
539
- }
540
- /**
541
- * @description Flag dapp users' commitments as used by calculated solution
542
- * @param {string[]} commitmentIds
543
- */
544
- async flagBatchedDappUserCommitments(commitmentIds) {
545
- try {
546
- const distinctCommitmentIds = [...new Set(commitmentIds)];
547
- await this.tables?.commitment
548
- ?.updateMany({ id: { $in: distinctCommitmentIds } }, { $set: { batched: true } }, { upsert: false })
549
- .lean();
550
- }
551
- catch (err) {
552
- throw new ProsopoEnvError(err, 'DATABASE.COMMITMENT_FLAG_FAILED', {}, commitmentIds);
553
- }
554
- }
555
- /**
556
- * @description Get the last batch commit time or return 0 if none
557
- */
558
- async getLastBatchCommitTime() {
559
- const cursor = this.tables?.scheduler
560
- ?.findOne({ processName: ScheduledTaskNames.BatchCommitment, status: ScheduledTaskStatus.Completed })
561
- .sort({ timestamp: -1 });
562
- const doc = await cursor?.lean();
563
- if (doc) {
564
- return doc.datetime;
565
- }
566
- return new Date(0);
567
- }
568
- /**
569
- * @description Get a scheduled task status record by task ID and status
570
- */
571
- async getScheduledTaskStatus(taskId, status) {
572
- const cursor = await this.tables?.scheduler
573
- ?.find({ taskId: taskId, status: status })
574
- .lean();
575
- return cursor ? cursor : undefined;
576
- }
577
- /**
578
- * @description Get the most recent scheduled task status record for a given task
579
- */
580
- async getLastScheduledTaskStatus(task, status) {
581
- const lookup = { processName: task };
582
- if (status) {
583
- lookup['status'] = status;
584
- }
585
- const cursor = await this.tables?.scheduler
586
- ?.findOne(lookup)
587
- .sort({ datetime: -1 })
588
- .lean();
589
- return cursor ? cursor : undefined;
590
- }
591
- /**
592
- * @description Store the status of a scheduled task and an optional result
593
- */
594
- async storeScheduledTaskStatus(taskId, task, status, result) {
595
- const now = new Date();
596
- const doc = ScheduledTaskSchema.parse({
597
- taskId,
598
- processName: task,
599
- datetime: now,
600
- status,
601
- ...(result && { result }),
602
- });
603
- await this.tables?.scheduler.create(doc);
604
- }
605
- }
606
- //# sourceMappingURL=mongo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../src/databases/mongo.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { Logger } from '@prosopo/common';
2
- import { ProsopoDatabase as MongoDatabase } from './mongo.js';
3
- export declare class MongoMemoryDatabase extends MongoDatabase {
4
- init(url: string, dbname: string, logger: Logger, authSource?: string): Promise<this>;
5
- }
6
- //# sourceMappingURL=mongoMemory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongoMemory.d.ts","sourceRoot":"","sources":["../../src/databases/mongoMemory.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,eAAe,IAAI,aAAa,EAAE,MAAM,YAAY,CAAA;AAG7D,qBAAa,mBAAoB,SAAQ,aAAa;IACnC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMvG"}
@@ -1,11 +0,0 @@
1
- import { ProsopoDatabase as MongoDatabase } from './mongo.js';
2
- import { MongoMemoryServer } from 'mongodb-memory-server';
3
- export class MongoMemoryDatabase extends MongoDatabase {
4
- async init(url, dbname, logger, authSource) {
5
- const mongod = await MongoMemoryServer.create();
6
- const mongoMemoryURL = mongod.getUri();
7
- await super.init(mongoMemoryURL, dbname, logger, authSource);
8
- return this;
9
- }
10
- }
11
- //# sourceMappingURL=mongoMemory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongoMemory.js","sourceRoot":"","sources":["../../src/databases/mongoMemory.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,eAAe,IAAI,aAAa,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IACzC,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,MAAc,EAAE,MAAc,EAAE,UAAmB;QAChF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAA;QAC/C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;QACtC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;QAC5D,OAAO,IAAI,CAAA;IACf,CAAC;CACJ"}
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './databases/index.js';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,sBAAsB,CAAA"}
package/dist/index.js DELETED
@@ -1,15 +0,0 @@
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
- export * from './databases/index.js';
15
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/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,sBAAsB,CAAA"}