@prosopo/database 2.0.3 → 2.1.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/base/index.d.ts +3 -0
- package/dist/base/index.d.ts.map +1 -0
- package/dist/base/index.js +3 -0
- package/dist/base/index.js.map +1 -0
- package/dist/base/mongo.d.ts +16 -0
- package/dist/base/mongo.d.ts.map +1 -0
- package/dist/base/mongo.js +89 -0
- package/dist/base/mongo.js.map +1 -0
- package/dist/{databases → base}/mongoMemory.d.ts +3 -2
- package/dist/base/mongoMemory.d.ts.map +1 -0
- package/dist/{databases → base}/mongoMemory.js +7 -10
- package/dist/base/mongoMemory.js.map +1 -0
- package/dist/cjs/base/index.cjs +6 -0
- package/dist/cjs/base/mongo.cjs +97 -0
- package/dist/cjs/{databases → base}/mongoMemory.cjs +7 -10
- package/dist/cjs/databases/captcha.cjs +82 -0
- package/dist/cjs/databases/client.cjs +46 -0
- package/dist/cjs/databases/index.cjs +12 -3
- package/dist/cjs/databases/{mongo.cjs → provider.cjs} +111 -107
- package/dist/cjs/index.cjs +11 -6
- package/dist/databases/captcha.d.ts +16 -0
- package/dist/databases/captcha.d.ts.map +1 -0
- package/dist/databases/captcha.js +75 -0
- package/dist/databases/captcha.js.map +1 -0
- package/dist/databases/client.d.ts +12 -0
- package/dist/databases/client.d.ts.map +1 -0
- package/dist/databases/client.js +42 -0
- package/dist/databases/client.js.map +1 -0
- package/dist/databases/index.d.ts +11 -2
- package/dist/databases/index.d.ts.map +1 -1
- package/dist/databases/index.js +11 -2
- package/dist/databases/index.js.map +1 -1
- package/dist/databases/{mongo.d.ts → provider.d.ts} +27 -19
- package/dist/databases/provider.d.ts.map +1 -0
- package/dist/databases/{mongo.js → provider.js} +123 -100
- package/dist/databases/provider.js.map +1 -0
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/package.json +52 -44
- package/dist/captchaDatabase/captchaDatabase.d.ts +0 -3
- package/dist/captchaDatabase/captchaDatabase.d.ts.map +0 -1
- package/dist/captchaDatabase/captchaDatabase.js +0 -49
- package/dist/captchaDatabase/captchaDatabase.js.map +0 -1
- package/dist/captchaDatabase/index.d.ts +0 -2
- package/dist/captchaDatabase/index.d.ts.map +0 -1
- package/dist/captchaDatabase/index.js +0 -2
- package/dist/captchaDatabase/index.js.map +0 -1
- package/dist/cjs/captchaDatabase/captchaDatabase.cjs +0 -59
- package/dist/cjs/captchaDatabase/index.cjs +0 -4
- package/dist/cjs/eventsDatabase/eventsDatabase.cjs +0 -47
- package/dist/cjs/eventsDatabase/index.cjs +0 -4
- package/dist/databases/mongo.d.ts.map +0 -1
- package/dist/databases/mongo.js.map +0 -1
- package/dist/databases/mongoMemory.d.ts.map +0 -1
- package/dist/databases/mongoMemory.js.map +0 -1
- package/dist/eventsDatabase/eventsDatabase.d.ts +0 -3
- package/dist/eventsDatabase/eventsDatabase.d.ts.map +0 -1
- package/dist/eventsDatabase/eventsDatabase.js +0 -48
- package/dist/eventsDatabase/eventsDatabase.js.map +0 -1
- package/dist/eventsDatabase/index.d.ts +0 -2
- package/dist/eventsDatabase/index.d.ts.map +0 -1
- package/dist/eventsDatabase/index.js +0 -2
- package/dist/eventsDatabase/index.js.map +0 -1
|
@@ -1,29 +1,85 @@
|
|
|
1
1
|
import { isHex } from "@polkadot/util/is";
|
|
2
|
-
import {
|
|
2
|
+
import { ProsopoDBError, ProsopoEnvError, } from "@prosopo/common";
|
|
3
3
|
import { CaptchaStates, CaptchaStatus, DatasetWithIdsAndTreeSchema, } from "@prosopo/types";
|
|
4
|
-
import { CaptchaRecordSchema, DatasetRecordSchema, PendingRecordSchema,
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
4
|
+
import { CaptchaRecordSchema, ClientRecordSchema, DatasetRecordSchema, PendingRecordSchema, PoWCaptchaRecordSchema, ScheduledTaskRecordSchema, ScheduledTaskSchema, SolutionRecordSchema, StoredStatusNames, UserCommitmentRecordSchema, UserCommitmentSchema, UserSolutionRecordSchema, } from "@prosopo/types-database";
|
|
5
|
+
import { MongoDatabase } from "../base/mongo.js";
|
|
6
|
+
var TableNames;
|
|
7
|
+
(function (TableNames) {
|
|
8
|
+
TableNames["captcha"] = "captcha";
|
|
9
|
+
TableNames["dataset"] = "dataset";
|
|
10
|
+
TableNames["solution"] = "solution";
|
|
11
|
+
TableNames["commitment"] = "commitment";
|
|
12
|
+
TableNames["usersolution"] = "usersolution";
|
|
13
|
+
TableNames["pending"] = "pending";
|
|
14
|
+
TableNames["scheduler"] = "scheduler";
|
|
15
|
+
TableNames["powcaptcha"] = "powcaptcha";
|
|
16
|
+
TableNames["client"] = "client";
|
|
17
|
+
})(TableNames || (TableNames = {}));
|
|
18
|
+
const PROVIDER_TABLES = [
|
|
19
|
+
{
|
|
20
|
+
collectionName: TableNames.captcha,
|
|
21
|
+
modelName: "Captcha",
|
|
22
|
+
schema: CaptchaRecordSchema,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
collectionName: TableNames.powcaptcha,
|
|
26
|
+
modelName: "PowCaptcha",
|
|
27
|
+
schema: PoWCaptchaRecordSchema,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
collectionName: TableNames.dataset,
|
|
31
|
+
modelName: "Dataset",
|
|
32
|
+
schema: DatasetRecordSchema,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
collectionName: TableNames.solution,
|
|
36
|
+
modelName: "Solution",
|
|
37
|
+
schema: SolutionRecordSchema,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
collectionName: TableNames.commitment,
|
|
41
|
+
modelName: "UserCommitment",
|
|
42
|
+
schema: UserCommitmentRecordSchema,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
collectionName: TableNames.usersolution,
|
|
46
|
+
modelName: "UserSolution",
|
|
47
|
+
schema: UserSolutionRecordSchema,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
collectionName: TableNames.pending,
|
|
51
|
+
modelName: "Pending",
|
|
52
|
+
schema: PendingRecordSchema,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
collectionName: TableNames.scheduler,
|
|
56
|
+
modelName: "Scheduler",
|
|
57
|
+
schema: ScheduledTaskRecordSchema,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
collectionName: TableNames.client,
|
|
61
|
+
modelName: "Client",
|
|
62
|
+
schema: ClientRecordSchema,
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
export class ProviderDatabase extends MongoDatabase {
|
|
66
|
+
constructor(url, dbname, authSource, logger) {
|
|
67
|
+
super(url, dbname, authSource, logger);
|
|
68
|
+
this.tables = {};
|
|
69
|
+
this.tables = {};
|
|
70
|
+
}
|
|
71
|
+
async connect() {
|
|
72
|
+
await super.connect();
|
|
73
|
+
this.loadTables();
|
|
74
|
+
}
|
|
75
|
+
loadTables() {
|
|
76
|
+
const tables = {};
|
|
77
|
+
PROVIDER_TABLES.map(({ collectionName, modelName, schema }) => {
|
|
78
|
+
if (this.connection) {
|
|
79
|
+
tables[collectionName] = this.connection.model(modelName, schema);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
this.tables = tables;
|
|
27
83
|
}
|
|
28
84
|
getTables() {
|
|
29
85
|
if (!this.tables) {
|
|
@@ -34,67 +90,6 @@ export class ProsopoDatabase extends AsyncFactory {
|
|
|
34
90
|
}
|
|
35
91
|
return this.tables;
|
|
36
92
|
}
|
|
37
|
-
getConnection() {
|
|
38
|
-
if (!this.connection) {
|
|
39
|
-
throw new ProsopoDBError("DATABASE.CONNECTION_UNDEFINED", {
|
|
40
|
-
context: { failedFuncName: this.getConnection.name },
|
|
41
|
-
logger: this.logger,
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
return this.connection;
|
|
45
|
-
}
|
|
46
|
-
async connect() {
|
|
47
|
-
this.logger.info(`Mongo url: ${this.url.replace(/\w+:\w+/, "<Credentials>")}`);
|
|
48
|
-
this.connection = await new Promise((resolve, reject) => {
|
|
49
|
-
const connection = mongoose.createConnection(this.url, {
|
|
50
|
-
dbName: this.dbname,
|
|
51
|
-
serverApi: ServerApiVersion.v1,
|
|
52
|
-
});
|
|
53
|
-
connection.on("open", () => {
|
|
54
|
-
this.logger.info(`Database connection to ${this.url} opened`);
|
|
55
|
-
resolve(connection);
|
|
56
|
-
});
|
|
57
|
-
connection.on("error", (err) => {
|
|
58
|
-
this.logger.error(`Database error: ${err}`);
|
|
59
|
-
reject(err);
|
|
60
|
-
});
|
|
61
|
-
connection.on("connected", () => {
|
|
62
|
-
this.logger.info(`Database connected to ${this.url}`);
|
|
63
|
-
resolve(connection);
|
|
64
|
-
});
|
|
65
|
-
connection.on("disconnected", () => {
|
|
66
|
-
this.logger.info(`Database disconnected from ${this.url}`);
|
|
67
|
-
});
|
|
68
|
-
connection.on("reconnected", () => {
|
|
69
|
-
this.logger.info(`Database reconnected to ${this.url}`);
|
|
70
|
-
resolve(connection);
|
|
71
|
-
});
|
|
72
|
-
connection.on("reconnectFailed", () => {
|
|
73
|
-
this.logger.error(`Database reconnect failed to ${this.url}`);
|
|
74
|
-
});
|
|
75
|
-
connection.on("close", () => {
|
|
76
|
-
this.logger.info(`Database connection to ${this.url} closed`);
|
|
77
|
-
});
|
|
78
|
-
connection.on("fullsetup", () => {
|
|
79
|
-
this.logger.info(`Database connection to ${this.url} is fully setup`);
|
|
80
|
-
resolve(connection);
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
this.tables = {
|
|
84
|
-
captcha: this.connection.model("Captcha", CaptchaRecordSchema),
|
|
85
|
-
powCaptcha: this.connection.model("PowCaptcha", PowCaptchaRecordSchema),
|
|
86
|
-
dataset: this.connection.model("Dataset", DatasetRecordSchema),
|
|
87
|
-
solution: this.connection.model("Solution", SolutionRecordSchema),
|
|
88
|
-
commitment: this.connection.model("UserCommitment", UserCommitmentRecordSchema),
|
|
89
|
-
usersolution: this.connection.model("UserSolution", UserSolutionRecordSchema),
|
|
90
|
-
pending: this.connection.model("Pending", PendingRecordSchema),
|
|
91
|
-
scheduler: this.connection.model("Scheduler", ScheduledTaskRecordSchema),
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
async close() {
|
|
95
|
-
this.logger.debug(`Closing connection to ${this.url}`);
|
|
96
|
-
await this.connection?.close();
|
|
97
|
-
}
|
|
98
93
|
async storeDataset(dataset) {
|
|
99
94
|
try {
|
|
100
95
|
this.logger.debug("Storing dataset in database");
|
|
@@ -106,7 +101,7 @@ export class ProsopoDatabase extends AsyncFactory {
|
|
|
106
101
|
contentTree: parsedDataset.contentTree,
|
|
107
102
|
solutionTree: parsedDataset.solutionTree,
|
|
108
103
|
};
|
|
109
|
-
await this.tables?.
|
|
104
|
+
await this.tables.dataset?.updateOne({ datasetId: parsedDataset.datasetId }, { $set: datasetDoc }, { upsert: true });
|
|
110
105
|
const captchaDocs = parsedDataset.captchas.map(({ solution, ...captcha }, index) => ({
|
|
111
106
|
...captcha,
|
|
112
107
|
datasetId: parsedDataset.datasetId,
|
|
@@ -160,11 +155,16 @@ export class ProsopoDatabase extends AsyncFactory {
|
|
|
160
155
|
return docs ? docs : [];
|
|
161
156
|
}
|
|
162
157
|
async getDataset(datasetId) {
|
|
163
|
-
const datasetDoc = await this.tables?.dataset
|
|
158
|
+
const datasetDoc = await this.tables?.dataset
|
|
159
|
+
.findOne({ datasetId: datasetId })
|
|
160
|
+
.lean();
|
|
164
161
|
if (datasetDoc) {
|
|
165
162
|
const { datasetContentId, format, contentTree, solutionTree } = datasetDoc;
|
|
166
|
-
const captchas = (await this.tables?.captcha.find({ datasetId }).lean()) ||
|
|
167
|
-
|
|
163
|
+
const captchas = (await this.tables?.captcha.find({ datasetId }).lean()) ||
|
|
164
|
+
[];
|
|
165
|
+
const solutions = (await this.tables?.solution
|
|
166
|
+
.find({ datasetId })
|
|
167
|
+
.lean()) || [];
|
|
168
168
|
const solutionsKeyed = {};
|
|
169
169
|
for (const solution of solutions) {
|
|
170
170
|
solutionsKeyed[solution.captchaId] = solution;
|
|
@@ -305,12 +305,13 @@ export class ProsopoDatabase extends AsyncFactory {
|
|
|
305
305
|
await this.tables?.usersolution.bulkWrite(ops);
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
|
-
async storePowCaptchaRecord(challenge, components, difficulty, providerSignature, ipAddress, serverChecked = false, userSubmitted = false, storedStatus = StoredStatusNames.notStored, userSignature) {
|
|
308
|
+
async storePowCaptchaRecord(challenge, components, difficulty, providerSignature, ipAddress, headers, serverChecked = false, userSubmitted = false, storedStatus = StoredStatusNames.notStored, userSignature) {
|
|
309
309
|
const tables = this.getTables();
|
|
310
310
|
const powCaptchaRecord = {
|
|
311
311
|
challenge,
|
|
312
312
|
...components,
|
|
313
313
|
ipAddress,
|
|
314
|
+
headers,
|
|
314
315
|
result: { status: CaptchaStatus.pending },
|
|
315
316
|
userSubmitted,
|
|
316
317
|
serverChecked,
|
|
@@ -320,7 +321,7 @@ export class ProsopoDatabase extends AsyncFactory {
|
|
|
320
321
|
lastUpdatedTimestamp: Date.now(),
|
|
321
322
|
};
|
|
322
323
|
try {
|
|
323
|
-
await tables.
|
|
324
|
+
await tables.powcaptcha.create(powCaptchaRecord);
|
|
324
325
|
this.logger.info("PowCaptcha record added successfully", {
|
|
325
326
|
challenge,
|
|
326
327
|
userSubmitted,
|
|
@@ -356,7 +357,9 @@ export class ProsopoDatabase extends AsyncFactory {
|
|
|
356
357
|
});
|
|
357
358
|
}
|
|
358
359
|
try {
|
|
359
|
-
const record = await this.tables.
|
|
360
|
+
const record = await this.tables.powcaptcha
|
|
361
|
+
.findOne({ challenge })
|
|
362
|
+
.lean();
|
|
360
363
|
if (record) {
|
|
361
364
|
this.logger.info("PowCaptcha record retrieved successfully", {
|
|
362
365
|
challenge,
|
|
@@ -388,7 +391,7 @@ export class ProsopoDatabase extends AsyncFactory {
|
|
|
388
391
|
lastUpdatedTimestamp: timestamp,
|
|
389
392
|
};
|
|
390
393
|
try {
|
|
391
|
-
const updateResult = await tables.
|
|
394
|
+
const updateResult = await tables.powcaptcha.updateOne({ challenge }, {
|
|
392
395
|
$set: update,
|
|
393
396
|
});
|
|
394
397
|
if (updateResult.matchedCount === 0) {
|
|
@@ -468,7 +471,7 @@ export class ProsopoDatabase extends AsyncFactory {
|
|
|
468
471
|
await this.tables?.commitment.updateMany({ id: { $in: commitmentIds } }, { $set: updateDoc }, { upsert: false });
|
|
469
472
|
}
|
|
470
473
|
async getUnstoredDappUserPoWCommitments() {
|
|
471
|
-
const docs = await this.tables?.
|
|
474
|
+
const docs = await this.tables?.powcaptcha
|
|
472
475
|
.find({
|
|
473
476
|
$or: [
|
|
474
477
|
{ storedStatus: { $ne: StoredStatusNames.stored } },
|
|
@@ -482,25 +485,25 @@ export class ProsopoDatabase extends AsyncFactory {
|
|
|
482
485
|
const updateDoc = {
|
|
483
486
|
storedAtTimestamp: Date.now(),
|
|
484
487
|
};
|
|
485
|
-
await this.tables?.
|
|
488
|
+
await this.tables?.powcaptcha.updateMany({ challenge: { $in: challenges } }, { $set: updateDoc }, { upsert: false });
|
|
486
489
|
}
|
|
487
490
|
async markDappUserPoWCommitmentsChecked(challenges) {
|
|
488
491
|
const updateDoc = {
|
|
489
492
|
[StoredStatusNames.serverChecked]: true,
|
|
490
493
|
lastUpdatedTimestamp: Date.now(),
|
|
491
494
|
};
|
|
492
|
-
await this.tables?.
|
|
495
|
+
await this.tables?.powcaptcha.updateMany({ challenge: { $in: challenges } }, {
|
|
493
496
|
$set: updateDoc,
|
|
494
497
|
}, { upsert: false });
|
|
495
498
|
}
|
|
496
499
|
async removeProcessedDappUserSolutions(commitmentIds) {
|
|
497
|
-
return
|
|
500
|
+
return this.tables?.usersolution.deleteMany({
|
|
498
501
|
processed: true,
|
|
499
502
|
commitmentId: { $in: commitmentIds },
|
|
500
503
|
});
|
|
501
504
|
}
|
|
502
505
|
async removeProcessedDappUserCommitments(commitmentIds) {
|
|
503
|
-
return
|
|
506
|
+
return this.tables?.commitment.deleteMany({
|
|
504
507
|
processed: true,
|
|
505
508
|
id: { $in: commitmentIds },
|
|
506
509
|
});
|
|
@@ -531,7 +534,9 @@ export class ProsopoDatabase extends AsyncFactory {
|
|
|
531
534
|
context: { failedFuncName: this.getDappUserPending.name, requestHash },
|
|
532
535
|
});
|
|
533
536
|
}
|
|
534
|
-
const doc = await this.tables?.pending
|
|
537
|
+
const doc = await this.tables?.pending
|
|
538
|
+
.findOne({ requestHash: requestHash })
|
|
539
|
+
.lean();
|
|
535
540
|
if (doc) {
|
|
536
541
|
return doc;
|
|
537
542
|
}
|
|
@@ -759,5 +764,23 @@ export class ProsopoDatabase extends AsyncFactory {
|
|
|
759
764
|
upsert: false,
|
|
760
765
|
});
|
|
761
766
|
}
|
|
767
|
+
async updateClientRecords(clientRecords) {
|
|
768
|
+
const ops = clientRecords.map((record) => {
|
|
769
|
+
const clientRecord = {
|
|
770
|
+
account: record.account,
|
|
771
|
+
settings: record.settings,
|
|
772
|
+
};
|
|
773
|
+
return {
|
|
774
|
+
updateOne: {
|
|
775
|
+
filter: { account: record.account },
|
|
776
|
+
update: {
|
|
777
|
+
$set: clientRecord,
|
|
778
|
+
},
|
|
779
|
+
upsert: true,
|
|
780
|
+
},
|
|
781
|
+
};
|
|
782
|
+
});
|
|
783
|
+
await this.tables?.client.bulkWrite(ops);
|
|
784
|
+
}
|
|
762
785
|
}
|
|
763
|
-
//# sourceMappingURL=
|
|
786
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/databases/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,46 +1,54 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
2
|
+
"name": "@prosopo/database",
|
|
3
|
+
"version": "2.1.0",
|
|
4
|
+
"description": "Prosopo database plugins for provider",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=20",
|
|
9
|
+
"npm": ">=9"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"require": "./dist/cjs/index.cjs"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"test": "echo \"No test specified\"",
|
|
19
|
+
"clean": "tsc --build --clean",
|
|
20
|
+
"build": "tsc --build --verbose",
|
|
21
|
+
"build:cjs": "npx vite --config vite.cjs.config.ts build"
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+ssh://git@github.com/prosopo/captcha.git"
|
|
26
|
+
},
|
|
27
|
+
"author": "Prosopo Limited",
|
|
28
|
+
"license": "Apache-2.0",
|
|
29
|
+
"bugs": {
|
|
30
|
+
"url": "https://github.com/prosopo/captcha/issues"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://github.com/prosopo/captcha#readme",
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@prosopo/common": "2.1.0",
|
|
35
|
+
"@prosopo/config": "2.1.0",
|
|
36
|
+
"@prosopo/types": "2.1.0",
|
|
37
|
+
"@prosopo/types-database": "2.1.0",
|
|
38
|
+
"mongodb": "6.9.0",
|
|
39
|
+
"mongodb-memory-server": "10.0.0",
|
|
40
|
+
"mongoose": "8.6.2"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@vitest/coverage-v8": "2.1.1",
|
|
44
|
+
"concurrently": "9.0.1",
|
|
45
|
+
"npm-run-all": "4.1.5",
|
|
46
|
+
"rimraf": "6.0.1",
|
|
47
|
+
"tslib": "2.7.0",
|
|
48
|
+
"tsx": "4.19.1",
|
|
49
|
+
"typescript": "5.6.2",
|
|
50
|
+
"vite": "5.4.6",
|
|
51
|
+
"vitest": "2.1.1"
|
|
52
|
+
},
|
|
53
|
+
"sideEffects": false
|
|
46
54
|
}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { PoWCaptchaRecord, UserCommitmentRecord } from "@prosopo/types-database";
|
|
2
|
-
export declare const saveCaptchas: (imageCaptchaEvents: UserCommitmentRecord[], powCaptchaEvents: PoWCaptchaRecord[], atlasUri: string) => Promise<void>;
|
|
3
|
-
//# sourceMappingURL=captchaDatabase.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"captchaDatabase.d.ts","sourceRoot":"","sources":["../../src/captchaDatabase/captchaDatabase.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,gBAAgB,EAGhB,oBAAoB,EAGrB,MAAM,yBAAyB,CAAC;AAQjC,eAAO,MAAM,YAAY,uBACH,oBAAoB,EAAE,oBACxB,gBAAgB,EAAE,YAC1B,MAAM,kBAuDjB,CAAC"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { getLoggerDefault } from "@prosopo/common";
|
|
2
|
-
import { PowCaptchaRecordSchema, UserCommitmentRecordSchema, } from "@prosopo/types-database";
|
|
3
|
-
import mongoose from "mongoose";
|
|
4
|
-
const logger = getLoggerDefault();
|
|
5
|
-
let StoredImageCaptcha;
|
|
6
|
-
let StoredPoWCaptcha;
|
|
7
|
-
export const saveCaptchas = async (imageCaptchaEvents, powCaptchaEvents, atlasUri) => {
|
|
8
|
-
const connection = mongoose.createConnection(atlasUri, {
|
|
9
|
-
authSource: "admin",
|
|
10
|
-
});
|
|
11
|
-
await new Promise((resolve, reject) => {
|
|
12
|
-
connection
|
|
13
|
-
.once("open", () => {
|
|
14
|
-
logger.info("Connected to MongoDB Atlas");
|
|
15
|
-
StoredImageCaptcha = connection.model("StoredImageCaptcha", UserCommitmentRecordSchema);
|
|
16
|
-
StoredPoWCaptcha = connection.model("StoredPoWCaptcha", PowCaptchaRecordSchema);
|
|
17
|
-
resolve();
|
|
18
|
-
})
|
|
19
|
-
.on("error", reject);
|
|
20
|
-
});
|
|
21
|
-
if (imageCaptchaEvents.length) {
|
|
22
|
-
const result = await StoredImageCaptcha.bulkWrite(imageCaptchaEvents.map((doc) => {
|
|
23
|
-
const { _id, ...safeDoc } = doc;
|
|
24
|
-
return {
|
|
25
|
-
updateOne: {
|
|
26
|
-
filter: { id: safeDoc.id },
|
|
27
|
-
update: { $set: safeDoc },
|
|
28
|
-
upsert: true,
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
}));
|
|
32
|
-
logger.info("Mongo Saved Image Events", result);
|
|
33
|
-
}
|
|
34
|
-
if (powCaptchaEvents.length) {
|
|
35
|
-
const result = await StoredPoWCaptcha.bulkWrite(powCaptchaEvents.map((doc) => {
|
|
36
|
-
const { _id, ...safeDoc } = doc;
|
|
37
|
-
return {
|
|
38
|
-
updateOne: {
|
|
39
|
-
filter: { challenge: safeDoc.challenge },
|
|
40
|
-
update: { $set: safeDoc },
|
|
41
|
-
upsert: true,
|
|
42
|
-
},
|
|
43
|
-
};
|
|
44
|
-
}));
|
|
45
|
-
logger.info("Mongo Saved PoW Events", result);
|
|
46
|
-
}
|
|
47
|
-
await connection.close();
|
|
48
|
-
};
|
|
49
|
-
//# sourceMappingURL=captchaDatabase.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"captchaDatabase.js","sourceRoot":"","sources":["../../src/captchaDatabase/captchaDatabase.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAEL,sBAAsB,EAItB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;AAElC,IAAI,kBAAwD,CAAC;AAC7D,IAAI,gBAAkD,CAAC;AAEvD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,kBAA0C,EAC1C,gBAAoC,EACpC,QAAgB,EAChB,EAAE;IACF,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE;QACrD,UAAU,EAAE,OAAO;KACpB,CAAC,CAAC;IACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,UAAU;aACP,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YACjB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC1C,kBAAkB,GAAG,UAAU,CAAC,KAAK,CACnC,oBAAoB,EACpB,0BAA0B,CAC3B,CAAC;YACF,gBAAgB,GAAG,UAAU,CAAC,KAAK,CACjC,kBAAkB,EAClB,sBAAsB,CACvB,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,IAAI,kBAAkB,CAAC,MAAM,EAAE;QAC7B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAC/C,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAE7B,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG,CAAC;YAChC,OAAO;gBACL,SAAS,EAAE;oBACT,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;oBAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;oBACzB,MAAM,EAAE,IAAI;iBACb;aACF,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;KACjD;IACD,IAAI,gBAAgB,CAAC,MAAM,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAC7C,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAE3B,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG,CAAC;YAChC,OAAO;gBACL,SAAS,EAAE;oBACT,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;oBACxC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;oBACzB,MAAM,EAAE,IAAI;iBACb;aACF,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;KAC/C;IAED,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/captchaDatabase/index.ts"],"names":[],"mappings":"AAaA,cAAc,sBAAsB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/captchaDatabase/index.ts"],"names":[],"mappings":"AAaA,cAAc,sBAAsB,CAAC"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const common = require("@prosopo/common");
|
|
4
|
-
const typesDatabase = require("@prosopo/types-database");
|
|
5
|
-
const mongoose = require("mongoose");
|
|
6
|
-
const logger = common.getLoggerDefault();
|
|
7
|
-
let StoredImageCaptcha;
|
|
8
|
-
let StoredPoWCaptcha;
|
|
9
|
-
const saveCaptchas = async (imageCaptchaEvents, powCaptchaEvents, atlasUri) => {
|
|
10
|
-
const connection = mongoose.createConnection(atlasUri, {
|
|
11
|
-
authSource: "admin"
|
|
12
|
-
});
|
|
13
|
-
await new Promise((resolve, reject) => {
|
|
14
|
-
connection.once("open", () => {
|
|
15
|
-
logger.info("Connected to MongoDB Atlas");
|
|
16
|
-
StoredImageCaptcha = connection.model(
|
|
17
|
-
"StoredImageCaptcha",
|
|
18
|
-
typesDatabase.UserCommitmentRecordSchema
|
|
19
|
-
);
|
|
20
|
-
StoredPoWCaptcha = connection.model(
|
|
21
|
-
"StoredPoWCaptcha",
|
|
22
|
-
typesDatabase.PowCaptchaRecordSchema
|
|
23
|
-
);
|
|
24
|
-
resolve();
|
|
25
|
-
}).on("error", reject);
|
|
26
|
-
});
|
|
27
|
-
if (imageCaptchaEvents.length) {
|
|
28
|
-
const result = await StoredImageCaptcha.bulkWrite(
|
|
29
|
-
imageCaptchaEvents.map((doc) => {
|
|
30
|
-
const { _id, ...safeDoc } = doc;
|
|
31
|
-
return {
|
|
32
|
-
updateOne: {
|
|
33
|
-
filter: { id: safeDoc.id },
|
|
34
|
-
update: { $set: safeDoc },
|
|
35
|
-
upsert: true
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
})
|
|
39
|
-
);
|
|
40
|
-
logger.info("Mongo Saved Image Events", result);
|
|
41
|
-
}
|
|
42
|
-
if (powCaptchaEvents.length) {
|
|
43
|
-
const result = await StoredPoWCaptcha.bulkWrite(
|
|
44
|
-
powCaptchaEvents.map((doc) => {
|
|
45
|
-
const { _id, ...safeDoc } = doc;
|
|
46
|
-
return {
|
|
47
|
-
updateOne: {
|
|
48
|
-
filter: { challenge: safeDoc.challenge },
|
|
49
|
-
update: { $set: safeDoc },
|
|
50
|
-
upsert: true
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
})
|
|
54
|
-
);
|
|
55
|
-
logger.info("Mongo Saved PoW Events", result);
|
|
56
|
-
}
|
|
57
|
-
await connection.close();
|
|
58
|
-
};
|
|
59
|
-
exports.saveCaptchas = saveCaptchas;
|