@didcid/gatekeeper 0.1.3

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.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -0
  3. package/dist/cjs/abstract-json-BJMq-iEa.cjs +216 -0
  4. package/dist/cjs/db/json-cache.cjs +75 -0
  5. package/dist/cjs/db/json-memory.cjs +29 -0
  6. package/dist/cjs/db/json.cjs +36 -0
  7. package/dist/cjs/db/mongo.cjs +242 -0
  8. package/dist/cjs/db/redis.cjs +291 -0
  9. package/dist/cjs/db/sqlite.cjs +330 -0
  10. package/dist/cjs/errors-DQaog-FG.cjs +34 -0
  11. package/dist/cjs/gatekeeper-client.cjs +369 -0
  12. package/dist/cjs/gatekeeper.cjs +42212 -0
  13. package/dist/cjs/index.cjs +12 -0
  14. package/dist/cjs/node.cjs +40 -0
  15. package/dist/esm/db/abstract-json.js +212 -0
  16. package/dist/esm/db/abstract-json.js.map +1 -0
  17. package/dist/esm/db/json-cache.js +68 -0
  18. package/dist/esm/db/json-cache.js.map +1 -0
  19. package/dist/esm/db/json-memory.js +22 -0
  20. package/dist/esm/db/json-memory.js.map +1 -0
  21. package/dist/esm/db/json.js +29 -0
  22. package/dist/esm/db/json.js.map +1 -0
  23. package/dist/esm/db/mongo.js +236 -0
  24. package/dist/esm/db/mongo.js.map +1 -0
  25. package/dist/esm/db/redis.js +285 -0
  26. package/dist/esm/db/redis.js.map +1 -0
  27. package/dist/esm/db/sqlite.js +305 -0
  28. package/dist/esm/db/sqlite.js.map +1 -0
  29. package/dist/esm/gatekeeper-client.js +363 -0
  30. package/dist/esm/gatekeeper-client.js.map +1 -0
  31. package/dist/esm/gatekeeper.js +1090 -0
  32. package/dist/esm/gatekeeper.js.map +1 -0
  33. package/dist/esm/index.js +4 -0
  34. package/dist/esm/index.js.map +1 -0
  35. package/dist/esm/node.js +8 -0
  36. package/dist/esm/node.js.map +1 -0
  37. package/dist/esm/types.js +2 -0
  38. package/dist/esm/types.js.map +1 -0
  39. package/dist/types/db/abstract-json.d.ts +26 -0
  40. package/dist/types/db/json-cache.d.ts +14 -0
  41. package/dist/types/db/json-memory.d.ts +9 -0
  42. package/dist/types/db/json.d.ts +8 -0
  43. package/dist/types/db/mongo.d.ts +23 -0
  44. package/dist/types/db/redis.d.ts +29 -0
  45. package/dist/types/db/sqlite.d.ts +30 -0
  46. package/dist/types/gatekeeper-client.d.ts +40 -0
  47. package/dist/types/gatekeeper.d.ts +67 -0
  48. package/dist/types/index.d.ts +3 -0
  49. package/dist/types/node.d.ts +7 -0
  50. package/dist/types/types.d.ts +226 -0
  51. package/package.json +128 -0
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var gatekeeperClient = require('./gatekeeper-client.cjs');
4
+ var db_jsonMemory = require('./db/json-memory.cjs');
5
+ require('axios');
6
+ require('./abstract-json-BJMq-iEa.cjs');
7
+ require('./errors-DQaog-FG.cjs');
8
+
9
+
10
+
11
+ exports.GatekeeperClient = gatekeeperClient.default;
12
+ exports.DbJsonMemory = db_jsonMemory.default;
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var gatekeeperClient = require('./gatekeeper-client.cjs');
6
+ var db_jsonMemory = require('./db/json-memory.cjs');
7
+ var gatekeeper = require('./gatekeeper.cjs');
8
+ var db_json = require('./db/json.cjs');
9
+ var db_jsonCache = require('./db/json-cache.cjs');
10
+ var db_mongo = require('./db/mongo.cjs');
11
+ var db_redis = require('./db/redis.cjs');
12
+ var db_sqlite = require('./db/sqlite.cjs');
13
+ require('axios');
14
+ require('./abstract-json-BJMq-iEa.cjs');
15
+ require('./errors-DQaog-FG.cjs');
16
+ require('crypto');
17
+ require('assert');
18
+ require('buffer');
19
+ require('stream');
20
+ require('events');
21
+ require('util');
22
+ require('fs');
23
+ require('path');
24
+ require('os');
25
+ require('canonicalize');
26
+ require('mongodb');
27
+ require('ioredis');
28
+ require('sqlite');
29
+ require('sqlite3');
30
+
31
+
32
+
33
+ exports.GatekeeperClient = gatekeeperClient.default;
34
+ exports.DbJsonMemory = db_jsonMemory.default;
35
+ exports.default = gatekeeper.default;
36
+ exports.DbJson = db_json.default;
37
+ exports.DbJsonCache = db_jsonCache.default;
38
+ exports.DbMongo = db_mongo.default;
39
+ exports.DbRedis = db_redis.default;
40
+ exports.DbSqlite = db_sqlite.default;
@@ -0,0 +1,212 @@
1
+ import { InvalidDIDError } from '@didcid/common/errors';
2
+ export class AbstractJson {
3
+ dataFolder;
4
+ dbName;
5
+ _lock = Promise.resolve();
6
+ runExclusive(fn) {
7
+ const run = async () => await fn();
8
+ const chained = this._lock.then(run, run);
9
+ this._lock = chained.then(() => undefined, () => undefined);
10
+ return chained;
11
+ }
12
+ constructor(name, folder = 'data') {
13
+ this.dataFolder = folder;
14
+ this.dbName = `${this.dataFolder}/${name}.json`;
15
+ }
16
+ async start() {
17
+ return;
18
+ }
19
+ async stop() {
20
+ return;
21
+ }
22
+ splitSuffix(did) {
23
+ if (!did) {
24
+ throw new InvalidDIDError();
25
+ }
26
+ const suffix = did.split(':').pop();
27
+ if (!suffix) {
28
+ throw new InvalidDIDError();
29
+ }
30
+ return suffix;
31
+ }
32
+ async addEvent(did, event) {
33
+ const suffix = this.splitSuffix(did);
34
+ return this.runExclusive(async () => {
35
+ const db = this.loadDb();
36
+ if (!db.ops) {
37
+ db.ops = {};
38
+ }
39
+ // Store operation separately if present
40
+ if (event.opid && event.operation) {
41
+ db.ops[event.opid] = event.operation;
42
+ }
43
+ // Strip operation and store only opid reference
44
+ const { operation, ...strippedEvent } = event;
45
+ if (db.dids[suffix]) {
46
+ db.dids[suffix].push(strippedEvent);
47
+ }
48
+ else {
49
+ db.dids[suffix] = [strippedEvent];
50
+ }
51
+ this.writeDb(db);
52
+ });
53
+ }
54
+ async getEvents(did) {
55
+ try {
56
+ const db = this.loadDb();
57
+ const suffix = this.splitSuffix(did);
58
+ const events = db.dids[suffix] || [];
59
+ // Hydrate operations from ops table
60
+ return events.map(event => {
61
+ if (event.operation) {
62
+ return event;
63
+ }
64
+ if (event.opid && db.ops?.[event.opid]) {
65
+ return { ...event, operation: db.ops[event.opid] };
66
+ }
67
+ return event;
68
+ });
69
+ }
70
+ catch {
71
+ return [];
72
+ }
73
+ }
74
+ async setEvents(did, events) {
75
+ const suffix = this.splitSuffix(did);
76
+ return this.runExclusive(async () => {
77
+ const db = this.loadDb();
78
+ if (!db.ops) {
79
+ db.ops = {};
80
+ }
81
+ // Update operations in ops table if modified, then strip from events
82
+ const strippedEvents = events.map(event => {
83
+ if (event.opid && event.operation) {
84
+ db.ops[event.opid] = event.operation;
85
+ }
86
+ const { operation, ...stripped } = event;
87
+ return stripped;
88
+ });
89
+ db.dids[suffix] = strippedEvents;
90
+ this.writeDb(db);
91
+ });
92
+ }
93
+ async deleteEvents(did) {
94
+ const suffix = this.splitSuffix(did);
95
+ return this.runExclusive(async () => {
96
+ const db = this.loadDb();
97
+ if (db.dids[suffix]) {
98
+ delete db.dids[suffix];
99
+ this.writeDb(db);
100
+ }
101
+ });
102
+ }
103
+ async queueOperation(registry, op) {
104
+ return this.runExclusive(async () => {
105
+ const db = this.loadDb();
106
+ if (!db.queue) {
107
+ db.queue = {};
108
+ }
109
+ if (registry in db.queue) {
110
+ db.queue[registry].push(op);
111
+ }
112
+ else
113
+ db.queue[registry] = [op];
114
+ this.writeDb(db);
115
+ return db.queue[registry].length;
116
+ });
117
+ }
118
+ async getQueue(registry) {
119
+ try {
120
+ const db = this.loadDb();
121
+ if (!db.queue || !db.queue[registry]) {
122
+ return [];
123
+ }
124
+ return db.queue[registry];
125
+ }
126
+ catch {
127
+ return [];
128
+ }
129
+ }
130
+ async clearQueue(registry, batch) {
131
+ return this.runExclusive(async () => {
132
+ try {
133
+ const db = this.loadDb();
134
+ if (!db.queue) {
135
+ return true;
136
+ }
137
+ const oldQueue = db.queue[registry];
138
+ if (!oldQueue) {
139
+ return true;
140
+ }
141
+ db.queue[registry] = oldQueue.filter(item => !batch.some(op => op.signature?.value === item.signature?.value));
142
+ this.writeDb(db);
143
+ return true;
144
+ }
145
+ catch {
146
+ return false;
147
+ }
148
+ });
149
+ }
150
+ async getAllKeys() {
151
+ const db = this.loadDb();
152
+ return Object.keys(db.dids);
153
+ }
154
+ async addBlock(registry, blockInfo) {
155
+ return this.runExclusive(async () => {
156
+ const db = this.loadDb();
157
+ if (!db.blocks) {
158
+ db.blocks = {};
159
+ }
160
+ if (!(registry in db.blocks)) {
161
+ db.blocks[registry] = {};
162
+ }
163
+ db.blocks[registry][blockInfo.hash] = blockInfo;
164
+ this.writeDb(db);
165
+ return true;
166
+ });
167
+ }
168
+ async getBlock(registry, blockId) {
169
+ const db = this.loadDb();
170
+ const registryBlocks = db.blocks?.[registry];
171
+ if (!registryBlocks)
172
+ return null;
173
+ const blockEntries = Object.entries(registryBlocks);
174
+ if (blockEntries.length === 0)
175
+ return null;
176
+ if (blockId === undefined) {
177
+ // Get block with max height
178
+ let maxBlock = null;
179
+ for (const [, block] of blockEntries) {
180
+ if (!maxBlock || block.height > maxBlock.height) {
181
+ maxBlock = block;
182
+ }
183
+ }
184
+ return maxBlock;
185
+ }
186
+ if (typeof blockId === 'number') {
187
+ // Search for block with matching height
188
+ for (const [, block] of blockEntries) {
189
+ if (block.height === blockId)
190
+ return block;
191
+ }
192
+ return null;
193
+ }
194
+ // Lookup by hash (O(1))
195
+ return registryBlocks[blockId] || null;
196
+ }
197
+ async addOperation(opid, op) {
198
+ return this.runExclusive(async () => {
199
+ const db = this.loadDb();
200
+ if (!db.ops) {
201
+ db.ops = {};
202
+ }
203
+ db.ops[opid] = op;
204
+ this.writeDb(db);
205
+ });
206
+ }
207
+ async getOperation(opid) {
208
+ const db = this.loadDb();
209
+ return db.ops?.[opid] ?? null;
210
+ }
211
+ }
212
+ //# sourceMappingURL=abstract-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-json.js","sourceRoot":"","sources":["../../../src/db/abstract-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import fs from 'fs';
2
+ import { AbstractJson } from "./abstract-json.js";
3
+ export default class DbJsonCache extends AbstractJson {
4
+ dbCache = null;
5
+ saveLoopTimeoutId = null;
6
+ constructor(name, folder = 'data') {
7
+ super(name, folder);
8
+ this.loadDb();
9
+ }
10
+ async start() {
11
+ await this.saveLoop();
12
+ }
13
+ async stop() {
14
+ this.saveDb(); // Save the current state one last time
15
+ if (this.saveLoopTimeoutId !== null) {
16
+ clearTimeout(this.saveLoopTimeoutId); // Cancel the next scheduled saveLoop
17
+ this.saveLoopTimeoutId = null; // Reset the timeout ID
18
+ }
19
+ }
20
+ async saveLoop() {
21
+ try {
22
+ this.saveDb();
23
+ console.log(`DID db saved to ${this.dbName}`);
24
+ }
25
+ catch (error) {
26
+ console.error(`Error in saveLoop: ${error}`);
27
+ }
28
+ this.saveLoopTimeoutId = setTimeout(() => this.saveLoop(), 20 * 1000);
29
+ }
30
+ loadDb() {
31
+ if (!this.dbCache) {
32
+ try {
33
+ const raw = fs.readFileSync(this.dbName, 'utf-8');
34
+ const parsed = JSON.parse(raw);
35
+ this.dbCache = JSON.parse(fs.readFileSync(this.dbName, 'utf-8'));
36
+ if (!parsed.dids) {
37
+ throw new Error();
38
+ }
39
+ this.dbCache = parsed;
40
+ }
41
+ catch (err) {
42
+ this.dbCache = { dids: {} };
43
+ this.saveDb();
44
+ }
45
+ }
46
+ return this.dbCache;
47
+ }
48
+ writeDb(db) {
49
+ this.dbCache = db;
50
+ }
51
+ saveDb() {
52
+ if (!fs.existsSync(this.dataFolder)) {
53
+ fs.mkdirSync(this.dataFolder, { recursive: true });
54
+ }
55
+ if (!this.dbCache) {
56
+ this.dbCache = { dids: {} };
57
+ }
58
+ fs.writeFileSync(this.dbName, JSON.stringify(this.dbCache, null, 4));
59
+ }
60
+ async resetDb() {
61
+ if (fs.existsSync(this.dbName)) {
62
+ fs.rmSync(this.dbName);
63
+ }
64
+ this.dbCache = null;
65
+ return this.loadDb();
66
+ }
67
+ }
68
+ //# sourceMappingURL=json-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-cache.js","sourceRoot":"","sources":["../../../src/db/json-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { AbstractJson } from "./abstract-json.js";
2
+ export default class DbJsonMemory extends AbstractJson {
3
+ dbCache = null;
4
+ constructor(name, folder = 'data') {
5
+ super(name, folder);
6
+ this.loadDb();
7
+ }
8
+ loadDb() {
9
+ if (!this.dbCache) {
10
+ this.dbCache = JSON.stringify({ dids: {} });
11
+ }
12
+ return JSON.parse(this.dbCache);
13
+ }
14
+ writeDb(db) {
15
+ this.dbCache = JSON.stringify(db);
16
+ }
17
+ async resetDb() {
18
+ this.dbCache = null;
19
+ return this.loadDb();
20
+ }
21
+ }
22
+ //# sourceMappingURL=json-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-memory.js","sourceRoot":"","sources":["../../../src/db/json-memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,YAAY;IAC1C,OAAO,GAAkB,IAAI,CAAC;IAEtC,YAAY,IAAY,EAAE,SAAiB,MAAM;QAC7C,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAES,MAAM;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAES,OAAO,CAAC,EAAc;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,OAAO;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;CACJ"}
@@ -0,0 +1,29 @@
1
+ import fs from 'fs';
2
+ import { AbstractJson } from "./abstract-json.js";
3
+ export default class DbJson extends AbstractJson {
4
+ constructor(name, folder = 'data') {
5
+ super(name, folder);
6
+ }
7
+ loadDb() {
8
+ try {
9
+ return JSON.parse(fs.readFileSync(this.dbName, 'utf-8'));
10
+ }
11
+ catch (err) {
12
+ const db = { dids: {} };
13
+ this.writeDb(db);
14
+ return db;
15
+ }
16
+ }
17
+ writeDb(db) {
18
+ if (!fs.existsSync(this.dataFolder)) {
19
+ fs.mkdirSync(this.dataFolder, { recursive: true });
20
+ }
21
+ fs.writeFileSync(this.dbName, JSON.stringify(db, null, 4));
22
+ }
23
+ async resetDb() {
24
+ if (fs.existsSync(this.dbName)) {
25
+ fs.rmSync(this.dbName);
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/db/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,YAAY;IAC5C,YAAY,IAAY,EAAE,SAAiB,MAAM;QAC7C,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxB,CAAC;IAES,MAAM;QACZ,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;YACT,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjB,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAES,OAAO,CAAC,EAAc;QAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,OAAO;QACT,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;CACJ"}
@@ -0,0 +1,236 @@
1
+ import { MongoClient } from 'mongodb';
2
+ import { InvalidDIDError } from '@didcid/common/errors';
3
+ const MONGO_NOT_STARTED_ERROR = 'Mongo not started. Call start() first.';
4
+ export default class DbMongo {
5
+ dbName;
6
+ client;
7
+ db;
8
+ constructor(dbName) {
9
+ this.dbName = dbName;
10
+ this.client = null;
11
+ this.db = null;
12
+ }
13
+ splitSuffix(did) {
14
+ if (!did) {
15
+ throw new InvalidDIDError();
16
+ }
17
+ const suffix = did.split(':').pop();
18
+ if (!suffix) {
19
+ throw new InvalidDIDError();
20
+ }
21
+ return suffix;
22
+ }
23
+ async start() {
24
+ this.client = new MongoClient(process.env.ARCHON_MONGODB_URL || 'mongodb://localhost:27017');
25
+ await this.client.connect();
26
+ this.db = this.client.db(this.dbName);
27
+ await this.db.collection('dids').createIndex({ id: 1 });
28
+ await this.db.collection('blocks').createIndex({ registry: 1, height: -1 }); // for latest and height lookups
29
+ await this.db.collection('blocks').createIndex({ registry: 1, hash: 1 }, { unique: true }); // for hash lookup
30
+ await this.db.collection('operations').createIndex({ opid: 1 }, { unique: true });
31
+ }
32
+ async stop() {
33
+ if (this.client) {
34
+ await this.client.close();
35
+ this.client = null;
36
+ this.db = null;
37
+ }
38
+ }
39
+ async resetDb() {
40
+ if (!this.db) {
41
+ throw new Error(MONGO_NOT_STARTED_ERROR);
42
+ }
43
+ await this.db.collection('dids').deleteMany({});
44
+ await this.db.collection('queue').deleteMany({});
45
+ await this.db.collection('operations').deleteMany({});
46
+ }
47
+ async addEvent(did, event) {
48
+ if (!this.db) {
49
+ throw new Error(MONGO_NOT_STARTED_ERROR);
50
+ }
51
+ const id = this.splitSuffix(did);
52
+ // Store operation separately if present
53
+ if (event.opid && event.operation) {
54
+ await this.addOperation(event.opid, event.operation);
55
+ }
56
+ // Strip operation and store only opid reference
57
+ const { operation, ...strippedEvent } = event;
58
+ const result = await this.db.collection('dids').updateOne({ id }, {
59
+ $push: {
60
+ events: { $each: [strippedEvent] }
61
+ }
62
+ }, { upsert: true });
63
+ // Return how many docs were modified
64
+ return result.modifiedCount + (result.upsertedCount ?? 0);
65
+ }
66
+ async setEvents(did, events) {
67
+ if (!this.db) {
68
+ throw new Error(MONGO_NOT_STARTED_ERROR);
69
+ }
70
+ const id = this.splitSuffix(did);
71
+ // Update operations in ops collection if modified, then strip from events
72
+ const strippedEvents = [];
73
+ for (const event of events) {
74
+ if (event.opid && event.operation) {
75
+ await this.addOperation(event.opid, event.operation);
76
+ }
77
+ const { operation, ...stripped } = event;
78
+ strippedEvents.push(stripped);
79
+ }
80
+ await this.db
81
+ .collection('dids')
82
+ .updateOne({ id }, { $set: { events: strippedEvents } }, { upsert: true });
83
+ }
84
+ async getEvents(did) {
85
+ if (!this.db) {
86
+ throw new Error(MONGO_NOT_STARTED_ERROR);
87
+ }
88
+ const id = this.splitSuffix(did);
89
+ try {
90
+ const row = await this.db.collection('dids').findOne({ id });
91
+ const events = row?.events ?? [];
92
+ // Hydrate operations from ops collection
93
+ const hydrated = [];
94
+ for (const event of events) {
95
+ if (event.operation) {
96
+ hydrated.push(event);
97
+ }
98
+ else if (event.opid) {
99
+ const operation = await this.getOperation(event.opid);
100
+ if (operation) {
101
+ hydrated.push({ ...event, operation });
102
+ }
103
+ else {
104
+ hydrated.push(event);
105
+ }
106
+ }
107
+ else {
108
+ hydrated.push(event);
109
+ }
110
+ }
111
+ return hydrated;
112
+ }
113
+ catch {
114
+ return [];
115
+ }
116
+ }
117
+ async deleteEvents(did) {
118
+ if (!this.db) {
119
+ throw new Error(MONGO_NOT_STARTED_ERROR);
120
+ }
121
+ const id = this.splitSuffix(did);
122
+ const result = await this.db.collection('dids').deleteOne({ id });
123
+ return result.deletedCount ?? 0;
124
+ }
125
+ async getAllKeys() {
126
+ if (!this.db) {
127
+ throw new Error(MONGO_NOT_STARTED_ERROR);
128
+ }
129
+ const rows = await this.db.collection('dids').find().toArray();
130
+ return rows.map(row => row.id);
131
+ }
132
+ async queueOperation(registry, op) {
133
+ if (!this.db) {
134
+ throw new Error(MONGO_NOT_STARTED_ERROR);
135
+ }
136
+ const result = await this.db.collection('queue').findOneAndUpdate({ id: registry }, {
137
+ $push: {
138
+ ops: {
139
+ $each: [op]
140
+ }
141
+ }
142
+ }, {
143
+ upsert: true,
144
+ returnDocument: 'after'
145
+ });
146
+ return result?.ops.length ?? 0;
147
+ }
148
+ async getQueue(registry) {
149
+ if (!this.db) {
150
+ throw new Error(MONGO_NOT_STARTED_ERROR);
151
+ }
152
+ try {
153
+ const row = await this.db.collection('queue').findOne({ id: registry });
154
+ return row?.ops ?? [];
155
+ }
156
+ catch {
157
+ return [];
158
+ }
159
+ }
160
+ async clearQueue(registry, batch) {
161
+ if (!this.db) {
162
+ throw new Error(MONGO_NOT_STARTED_ERROR);
163
+ }
164
+ try {
165
+ const hashes = batch
166
+ .map(op => op.signature?.hash)
167
+ .filter((h) => !!h);
168
+ if (hashes.length === 0) {
169
+ return true;
170
+ }
171
+ await this.db
172
+ .collection('queue')
173
+ .updateOne({ id: registry }, { $pull: { ops: { 'signature.hash': { $in: hashes } } } });
174
+ return true;
175
+ }
176
+ catch (error) {
177
+ console.error(error);
178
+ return false;
179
+ }
180
+ }
181
+ async addBlock(registry, blockInfo) {
182
+ if (!this.db) {
183
+ throw new Error(MONGO_NOT_STARTED_ERROR);
184
+ }
185
+ try {
186
+ // Store block info in the "blocks" collection
187
+ await this.db.collection('blocks').updateOne({ registry, hash: blockInfo.hash }, { $set: blockInfo }, { upsert: true });
188
+ return true;
189
+ }
190
+ catch (error) {
191
+ return false;
192
+ }
193
+ }
194
+ async getBlock(registry, blockId) {
195
+ if (!this.db) {
196
+ throw new Error(MONGO_NOT_STARTED_ERROR);
197
+ }
198
+ try {
199
+ const blocks = this.db.collection('blocks');
200
+ let query;
201
+ if (blockId === undefined) {
202
+ // Get block with max height
203
+ query = { registry };
204
+ return await blocks
205
+ .find(query)
206
+ .sort({ height: -1 })
207
+ .limit(1)
208
+ .next(); // more efficient than toArray()[0]
209
+ }
210
+ if (typeof blockId === 'number') {
211
+ query = { registry, height: blockId };
212
+ }
213
+ else {
214
+ query = { registry, hash: blockId };
215
+ }
216
+ return await blocks.findOne(query);
217
+ }
218
+ catch (error) {
219
+ return null;
220
+ }
221
+ }
222
+ async addOperation(opid, op) {
223
+ if (!this.db) {
224
+ throw new Error(MONGO_NOT_STARTED_ERROR);
225
+ }
226
+ await this.db.collection('operations').updateOne({ opid }, { $set: { opid, ...op } }, { upsert: true });
227
+ }
228
+ async getOperation(opid) {
229
+ if (!this.db) {
230
+ throw new Error(MONGO_NOT_STARTED_ERROR);
231
+ }
232
+ const doc = await this.db.collection('operations').findOne({ opid }, { projection: { _id: 0, opid: 0 } });
233
+ return doc;
234
+ }
235
+ }
236
+ //# sourceMappingURL=mongo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../../src/db/mongo.ts"],"names":[],"mappings":"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"}