@peerbit/trusted-network 5.0.5 → 5.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/src/controller.d.ts +4 -4
- package/dist/src/controller.d.ts.map +1 -1
- package/dist/src/controller.js +21 -3
- package/dist/src/controller.js.map +1 -1
- package/dist/src/identity-graph.d.ts +6 -6
- package/dist/src/identity-graph.d.ts.map +1 -1
- package/dist/src/identity-graph.js +1 -1
- package/dist/src/identity-graph.js.map +1 -1
- package/package.json +6 -6
- package/src/controller.ts +31 -6
- package/src/identity-graph.ts +13 -8
package/dist/src/controller.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type PeerId } from "@libp2p/interface";
|
|
2
2
|
import { PublicSignKey } from "@peerbit/crypto";
|
|
3
|
-
import { type CanPerformOperations, type CanRead,
|
|
3
|
+
import { type CanPerformOperations, type CanRead, type DocumentsLike, type Operation } from "@peerbit/document";
|
|
4
4
|
import { type AppendOptions } from "@peerbit/log";
|
|
5
5
|
import { Program } from "@peerbit/program";
|
|
6
6
|
import { type ReplicationOptions } from "@peerbit/shared-log";
|
|
@@ -10,10 +10,10 @@ type IdentityGraphArgs = {
|
|
|
10
10
|
replicate?: ReplicationOptions;
|
|
11
11
|
};
|
|
12
12
|
export declare class IdentityGraph extends Program<IdentityGraphArgs> {
|
|
13
|
-
relationGraph:
|
|
13
|
+
relationGraph: DocumentsLike<IdentityRelation, FromTo>;
|
|
14
14
|
constructor(props?: {
|
|
15
15
|
id?: Uint8Array;
|
|
16
|
-
relationGraph?:
|
|
16
|
+
relationGraph?: DocumentsLike<IdentityRelation, FromTo>;
|
|
17
17
|
});
|
|
18
18
|
canPerform(properties: CanPerformOperations<IdentityRelation>): Promise<boolean>;
|
|
19
19
|
open(options?: IdentityGraphArgs): Promise<void>;
|
|
@@ -27,7 +27,7 @@ type TrustedNetworkArgs = {
|
|
|
27
27
|
};
|
|
28
28
|
export declare class TrustedNetwork extends Program<TrustedNetworkArgs> {
|
|
29
29
|
rootTrust: PublicSignKey;
|
|
30
|
-
trustGraph:
|
|
30
|
+
trustGraph: DocumentsLike<IdentityRelation, FromTo>;
|
|
31
31
|
constructor(props: {
|
|
32
32
|
id?: Uint8Array;
|
|
33
33
|
rootTrust: PublicSignKey | PeerId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACN,aAAa,EAGb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,KAAK,oBAAoB,EACzB,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACN,aAAa,EAGb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,KAAK,oBAAoB,EACzB,KAAK,OAAO,EAEZ,KAAK,aAAa,EAClB,KAAK,SAAS,EAEd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACN,MAAM,EACN,gBAAgB,EAOhB,MAAM,qBAAqB,CAAC;AA8D7B,KAAK,iBAAiB,GAAG;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAC/B,CAAC;AAEF,qBACa,aAAc,SAAQ,OAAO,CAAC,iBAAiB,CAAC;IAE5D,aAAa,EAAE,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;gBAE3C,KAAK,CAAC,EAAE;QACnB,EAAE,CAAC,EAAE,UAAU,CAAC;QAChB,aAAa,CAAC,EAAE,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;KACxD;IAQK,UAAU,CACf,UAAU,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,GAChD,OAAO,CAAC,OAAO,CAAC;IAIb,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB;IAYhC,WAAW,CAChB,EAAE,EAAE,aAAa,GAAG,MAAM,EAC1B,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC;CAWnC;AAED;;GAEG;AAEH,KAAK,kBAAkB,GAAG;IAAE,SAAS,CAAC,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAE7D,qBACa,cAAe,SAAQ,OAAO,CAAC,kBAAkB,CAAC;IAE9D,SAAS,EAAE,aAAa,CAAC;IAGzB,UAAU,EAAE,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;gBAExC,KAAK,EAAE;QAAE,EAAE,CAAC,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,aAAa,GAAG,MAAM,CAAA;KAAE;IAMnE,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB;IAejC,UAAU,CACf,UAAU,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,GAChD,OAAO,CAAC,OAAO,CAAC;IAIb,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAInE,GAAG,CACR,OAAO,EAAE,aAAa,GAAG,MAAM,EAC/B,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC;IAsB7B,WAAW,CAChB,OAAO,EAAE,aAAa,GAAG,MAAM,EAC/B,OAAO,GAAE,aAAa,GAAG,MAAuB;IAIjD,WAAW,CACV,OAAO,EAAE,aAAa,GAAG,MAAM,EAC/B,OAAO,GAAE,aAAa,GAAG,MAAuB;IASjD;;;;;;;;;OASG;IACG,SAAS,CACd,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,aAA8B,GACrC,OAAO,CAAC,OAAO,CAAC;IAmBb,eAAe,CACpB,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,aAA8B,GACrC,OAAO,CAAC,OAAO,CAAC;IAUb,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAU5C,QAAQ,IAAI,MAAM;CAGlB"}
|
package/dist/src/controller.js
CHANGED
|
@@ -40,6 +40,20 @@ import {} from "@peerbit/log";
|
|
|
40
40
|
import { Program } from "@peerbit/program";
|
|
41
41
|
import {} from "@peerbit/shared-log";
|
|
42
42
|
import { FromTo, IdentityRelation, createIdentityGraphStore, getFromByTo, getPathGenerator, getToByFrom, hasPath, getRelation as resolveRelation, } from "./identity-graph.js";
|
|
43
|
+
const openDocumentsLike = async (owner, docs, args) => {
|
|
44
|
+
if (!(docs instanceof Program)) {
|
|
45
|
+
return docs;
|
|
46
|
+
}
|
|
47
|
+
const opened = await owner.node.open(docs, {
|
|
48
|
+
args,
|
|
49
|
+
parent: owner,
|
|
50
|
+
existing: "reuse",
|
|
51
|
+
});
|
|
52
|
+
if (opened instanceof Documents && !opened._clazz) {
|
|
53
|
+
await opened.open(args);
|
|
54
|
+
}
|
|
55
|
+
return opened;
|
|
56
|
+
};
|
|
43
57
|
const coercePublicKey = (publicKey) => {
|
|
44
58
|
return publicKey instanceof PublicSignKey
|
|
45
59
|
? publicKey
|
|
@@ -109,7 +123,7 @@ let IdentityGraph = (() => {
|
|
|
109
123
|
return canPerformByRelation(properties);
|
|
110
124
|
}
|
|
111
125
|
async open(options) {
|
|
112
|
-
await this.relationGraph
|
|
126
|
+
this.relationGraph = await openDocumentsLike(this, this.relationGraph, {
|
|
113
127
|
type: IdentityRelation,
|
|
114
128
|
canPerform: this.canPerform.bind(this),
|
|
115
129
|
replicate: options?.replicate,
|
|
@@ -165,7 +179,7 @@ let TrustedNetwork = (() => {
|
|
|
165
179
|
}
|
|
166
180
|
async open(options) {
|
|
167
181
|
this.trustGraph = this.trustGraph || createIdentityGraphStore();
|
|
168
|
-
await this.trustGraph
|
|
182
|
+
this.trustGraph = await openDocumentsLike(this, this.trustGraph, {
|
|
169
183
|
type: IdentityRelation,
|
|
170
184
|
canPerform: this.canPerform.bind(this),
|
|
171
185
|
replicate: options?.replicate || {
|
|
@@ -218,7 +232,11 @@ let TrustedNetwork = (() => {
|
|
|
218
232
|
if (trustee.equals(this.rootTrust)) {
|
|
219
233
|
return true;
|
|
220
234
|
}
|
|
221
|
-
|
|
235
|
+
const log = this.trustGraph?.log;
|
|
236
|
+
const isReplicating = log && typeof log.isReplicating === "function"
|
|
237
|
+
? await log.isReplicating()
|
|
238
|
+
: false;
|
|
239
|
+
if (isReplicating) {
|
|
222
240
|
return this._isTrustedLocal(trustee, truster);
|
|
223
241
|
}
|
|
224
242
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACN,aAAa,EACb,sBAAsB,EACtB,gBAAgB,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAGN,SAAS,
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { PublicSignKey } from "@peerbit/crypto";
|
|
2
|
-
import { Documents } from "@peerbit/document";
|
|
2
|
+
import { Documents, type DocumentsLike } from "@peerbit/document";
|
|
3
3
|
export type RelationResolver = {
|
|
4
|
-
resolve: (key: PublicSignKey, db:
|
|
4
|
+
resolve: (key: PublicSignKey, db: DocumentsLike<IdentityRelation, FromTo>) => Promise<IdentityRelation[]>;
|
|
5
5
|
next: (relation: IdentityRelation) => PublicSignKey;
|
|
6
6
|
};
|
|
7
7
|
export declare const getFromByTo: RelationResolver;
|
|
8
8
|
export declare const getToByFrom: RelationResolver;
|
|
9
|
-
export declare function getPathGenerator(from: PublicSignKey, db:
|
|
9
|
+
export declare function getPathGenerator(from: PublicSignKey, db: DocumentsLike<IdentityRelation, FromTo>, resolver: RelationResolver): AsyncGenerator<IdentityRelation, void, unknown>;
|
|
10
10
|
/**
|
|
11
11
|
* Get path, to target.
|
|
12
12
|
* @param start
|
|
@@ -14,7 +14,7 @@ export declare function getPathGenerator(from: PublicSignKey, db: Documents<Iden
|
|
|
14
14
|
* @param db
|
|
15
15
|
* @returns
|
|
16
16
|
*/
|
|
17
|
-
export declare const hasPathToTarget: (start: PublicSignKey, target: (key: PublicSignKey) => boolean, db:
|
|
17
|
+
export declare const hasPathToTarget: (start: PublicSignKey, target: (key: PublicSignKey) => boolean, db: DocumentsLike<IdentityRelation, FromTo>, resolver: RelationResolver) => Promise<boolean>;
|
|
18
18
|
export declare abstract class AbstractRelation {
|
|
19
19
|
id: Uint8Array;
|
|
20
20
|
}
|
|
@@ -30,8 +30,8 @@ export declare class IdentityRelation extends AbstractRelation {
|
|
|
30
30
|
initializeId(): void;
|
|
31
31
|
static id(to: PublicSignKey, from: PublicSignKey): Uint8Array<ArrayBufferLike>;
|
|
32
32
|
}
|
|
33
|
-
export declare const hasPath: (start: PublicSignKey, end: PublicSignKey, db:
|
|
34
|
-
export declare const getRelation: (from: PublicSignKey, to: PublicSignKey, db:
|
|
33
|
+
export declare const hasPath: (start: PublicSignKey, end: PublicSignKey, db: DocumentsLike<IdentityRelation, FromTo>, resolver: RelationResolver) => Promise<boolean>;
|
|
34
|
+
export declare const getRelation: (from: PublicSignKey, to: PublicSignKey, db: DocumentsLike<IdentityRelation, FromTo>) => Promise<IdentityRelation | undefined>;
|
|
35
35
|
export declare class FromTo {
|
|
36
36
|
id: Uint8Array;
|
|
37
37
|
from: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-graph.d.ts","sourceRoot":"","sources":["../../src/identity-graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAc,MAAM,iBAAiB,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"identity-graph.d.ts","sourceRoot":"","sources":["../../src/identity-graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAc,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EACN,SAAS,EACT,KAAK,aAAa,EAGlB,MAAM,mBAAmB,CAAC;AAG3B,MAAM,MAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,CACR,GAAG,EAAE,aAAa,EAClB,EAAE,EAAE,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,KACvC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,aAAa,CAAC;CACpD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,gBAmBzB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,gBAmBzB,CAAC;AAEF,wBAAuB,gBAAgB,CACtC,IAAI,EAAE,aAAa,EACnB,EAAE,EAAE,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAC3C,QAAQ,EAAE,gBAAgB,mDAsB1B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC3B,OAAO,aAAa,EACpB,QAAQ,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,EACvC,IAAI,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAC3C,UAAU,gBAAgB,KACxB,OAAO,CAAC,OAAO,CAiBjB,CAAC;AAEF,8BACsB,gBAAgB;IAErC,EAAE,EAAE,UAAU,CAAC;CACf;AAED,qBACa,gBAAiB,SAAQ,gBAAgB;IAErD,KAAK,EAAE,aAAa,CAAC;IAGrB,GAAG,EAAE,aAAa,CAAC;gBAEP,UAAU,CAAC,EAAE;QACxB,EAAE,EAAE,aAAa,CAAC;QAClB,IAAI,EAAE,aAAa,CAAC;KACpB;IASD,IAAI,IAAI,IAAI,aAAa,CAExB;IAED,IAAI,EAAE,IAAI,aAAa,CAEtB;IAED,YAAY;IAIZ,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa;CAGhD;AAED,eAAO,MAAM,OAAO,GACnB,OAAO,aAAa,EACpB,KAAK,aAAa,EAClB,IAAI,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAC3C,UAAU,gBAAgB,KACxB,OAAO,CAAC,OAAO,CAEjB,CAAC;AAEF,eAAO,MAAM,WAAW,GACvB,MAAM,aAAa,EACnB,IAAI,aAAa,EACjB,IAAI,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,KACzC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAEtC,CAAC;AAEF,qBACa,MAAM;IAElB,EAAE,EAAE,UAAU,CAAC;IAGf,IAAI,EAAE,MAAM,CAAC;IAGb,EAAE,EAAE,MAAM,CAAC;gBAEC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,GAAG;CAKnD;AAED,eAAO,MAAM,wBAAwB,GAAI,KAAK,UAAU,6CAGrD,CAAC"}
|
|
@@ -34,7 +34,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
34
34
|
};
|
|
35
35
|
import { field, fixedArray, serialize, variant } from "@dao-xyz/borsh";
|
|
36
36
|
import { PublicSignKey, sha256Sync } from "@peerbit/crypto";
|
|
37
|
-
import { Documents, SearchRequest, StringMatch } from "@peerbit/document";
|
|
37
|
+
import { Documents, SearchRequest, StringMatch, } from "@peerbit/document";
|
|
38
38
|
import { concat } from "uint8arrays";
|
|
39
39
|
export const getFromByTo = {
|
|
40
40
|
resolve: async (to, db) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-graph.js","sourceRoot":"","sources":["../../src/identity-graph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"identity-graph.js","sourceRoot":"","sources":["../../src/identity-graph.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peerbit/trusted-network",
|
|
3
|
-
"version": "5.0
|
|
3
|
+
"version": "5.1.0",
|
|
4
4
|
"description": "Access controller that operates on a DB",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -56,15 +56,15 @@
|
|
|
56
56
|
"@libp2p/interface": "^3.1.0",
|
|
57
57
|
"uint8arrays": "^5.1.0",
|
|
58
58
|
"@peerbit/crypto": "2.4.1",
|
|
59
|
-
"@peerbit/document": "12.
|
|
60
|
-
"@peerbit/log": "5.0.
|
|
61
|
-
"@peerbit/program": "5.
|
|
62
|
-
"@peerbit/shared-log": "12.
|
|
59
|
+
"@peerbit/document": "12.2.0",
|
|
60
|
+
"@peerbit/log": "5.0.6",
|
|
61
|
+
"@peerbit/program": "5.6.0",
|
|
62
|
+
"@peerbit/shared-log": "12.2.0"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@ethersproject/wallet": "^5.8.0",
|
|
66
66
|
"@peerbit/time": "2.3.0",
|
|
67
|
-
"@peerbit/test-utils": "2.3.
|
|
67
|
+
"@peerbit/test-utils": "2.3.15"
|
|
68
68
|
},
|
|
69
69
|
"scripts": {
|
|
70
70
|
"clean": "aegir clean",
|
package/src/controller.ts
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
type CanPerformOperations,
|
|
10
10
|
type CanRead,
|
|
11
11
|
Documents,
|
|
12
|
+
type DocumentsLike,
|
|
12
13
|
type Operation,
|
|
13
14
|
SearchRequest,
|
|
14
15
|
} from "@peerbit/document";
|
|
@@ -26,6 +27,25 @@ import {
|
|
|
26
27
|
getRelation as resolveRelation,
|
|
27
28
|
} from "./identity-graph.js";
|
|
28
29
|
|
|
30
|
+
const openDocumentsLike = async <T, I extends Record<string, any> = any>(
|
|
31
|
+
owner: Program<any, any>,
|
|
32
|
+
docs: DocumentsLike<T, I>,
|
|
33
|
+
args: any,
|
|
34
|
+
): Promise<DocumentsLike<T, I>> => {
|
|
35
|
+
if (!(docs instanceof Program)) {
|
|
36
|
+
return docs;
|
|
37
|
+
}
|
|
38
|
+
const opened = await owner.node.open(docs as Documents<T, I>, {
|
|
39
|
+
args,
|
|
40
|
+
parent: owner as any,
|
|
41
|
+
existing: "reuse",
|
|
42
|
+
});
|
|
43
|
+
if (opened instanceof Documents && !(opened as any)._clazz) {
|
|
44
|
+
await opened.open(args);
|
|
45
|
+
}
|
|
46
|
+
return opened as DocumentsLike<T, I>;
|
|
47
|
+
};
|
|
48
|
+
|
|
29
49
|
const coercePublicKey = (publicKey: PublicSignKey | PeerId) => {
|
|
30
50
|
return publicKey instanceof PublicSignKey
|
|
31
51
|
? publicKey
|
|
@@ -75,11 +95,11 @@ type IdentityGraphArgs = {
|
|
|
75
95
|
@variant("relations")
|
|
76
96
|
export class IdentityGraph extends Program<IdentityGraphArgs> {
|
|
77
97
|
@field({ type: Documents })
|
|
78
|
-
relationGraph:
|
|
98
|
+
relationGraph: DocumentsLike<IdentityRelation, FromTo>;
|
|
79
99
|
|
|
80
100
|
constructor(props?: {
|
|
81
101
|
id?: Uint8Array;
|
|
82
|
-
relationGraph?:
|
|
102
|
+
relationGraph?: DocumentsLike<IdentityRelation, FromTo>;
|
|
83
103
|
}) {
|
|
84
104
|
super();
|
|
85
105
|
if (props) {
|
|
@@ -95,7 +115,7 @@ export class IdentityGraph extends Program<IdentityGraphArgs> {
|
|
|
95
115
|
}
|
|
96
116
|
|
|
97
117
|
async open(options?: IdentityGraphArgs) {
|
|
98
|
-
await this.relationGraph
|
|
118
|
+
this.relationGraph = await openDocumentsLike(this, this.relationGraph, {
|
|
99
119
|
type: IdentityRelation,
|
|
100
120
|
canPerform: this.canPerform.bind(this),
|
|
101
121
|
replicate: options?.replicate,
|
|
@@ -133,7 +153,7 @@ export class TrustedNetwork extends Program<TrustedNetworkArgs> {
|
|
|
133
153
|
rootTrust: PublicSignKey;
|
|
134
154
|
|
|
135
155
|
@field({ type: Documents })
|
|
136
|
-
trustGraph:
|
|
156
|
+
trustGraph: DocumentsLike<IdentityRelation, FromTo>;
|
|
137
157
|
|
|
138
158
|
constructor(props: { id?: Uint8Array; rootTrust: PublicSignKey | PeerId }) {
|
|
139
159
|
super();
|
|
@@ -143,7 +163,7 @@ export class TrustedNetwork extends Program<TrustedNetworkArgs> {
|
|
|
143
163
|
|
|
144
164
|
async open(options?: TrustedNetworkArgs) {
|
|
145
165
|
this.trustGraph = this.trustGraph || createIdentityGraphStore();
|
|
146
|
-
await this.trustGraph
|
|
166
|
+
this.trustGraph = await openDocumentsLike(this, this.trustGraph, {
|
|
147
167
|
type: IdentityRelation,
|
|
148
168
|
canPerform: this.canPerform.bind(this),
|
|
149
169
|
replicate: options?.replicate || {
|
|
@@ -224,7 +244,12 @@ export class TrustedNetwork extends Program<TrustedNetworkArgs> {
|
|
|
224
244
|
if (trustee.equals(this.rootTrust)) {
|
|
225
245
|
return true;
|
|
226
246
|
}
|
|
227
|
-
|
|
247
|
+
const log = (this.trustGraph as any)?.log;
|
|
248
|
+
const isReplicating =
|
|
249
|
+
log && typeof log.isReplicating === "function"
|
|
250
|
+
? await log.isReplicating()
|
|
251
|
+
: false;
|
|
252
|
+
if (isReplicating) {
|
|
228
253
|
return this._isTrustedLocal(trustee, truster);
|
|
229
254
|
} else {
|
|
230
255
|
this.trustGraph.index.search(new SearchRequest({ query: [] }), {
|
package/src/identity-graph.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import { field, fixedArray, serialize, variant } from "@dao-xyz/borsh";
|
|
2
2
|
import { PublicSignKey, sha256Sync } from "@peerbit/crypto";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
Documents,
|
|
5
|
+
type DocumentsLike,
|
|
6
|
+
SearchRequest,
|
|
7
|
+
StringMatch,
|
|
8
|
+
} from "@peerbit/document";
|
|
4
9
|
import { concat } from "uint8arrays";
|
|
5
10
|
|
|
6
11
|
export type RelationResolver = {
|
|
7
12
|
resolve: (
|
|
8
13
|
key: PublicSignKey,
|
|
9
|
-
db:
|
|
14
|
+
db: DocumentsLike<IdentityRelation, FromTo>,
|
|
10
15
|
) => Promise<IdentityRelation[]>;
|
|
11
16
|
next: (relation: IdentityRelation) => PublicSignKey;
|
|
12
17
|
};
|
|
@@ -14,7 +19,7 @@ export type RelationResolver = {
|
|
|
14
19
|
export const getFromByTo: RelationResolver = {
|
|
15
20
|
resolve: async (
|
|
16
21
|
to: PublicSignKey,
|
|
17
|
-
db:
|
|
22
|
+
db: DocumentsLike<IdentityRelation, FromTo>,
|
|
18
23
|
) => {
|
|
19
24
|
return Promise.all(
|
|
20
25
|
await db.index.search(
|
|
@@ -35,7 +40,7 @@ export const getFromByTo: RelationResolver = {
|
|
|
35
40
|
export const getToByFrom: RelationResolver = {
|
|
36
41
|
resolve: async (
|
|
37
42
|
from: PublicSignKey,
|
|
38
|
-
db:
|
|
43
|
+
db: DocumentsLike<IdentityRelation, FromTo>,
|
|
39
44
|
) => {
|
|
40
45
|
return Promise.all(
|
|
41
46
|
await db.index.search(
|
|
@@ -55,7 +60,7 @@ export const getToByFrom: RelationResolver = {
|
|
|
55
60
|
|
|
56
61
|
export async function* getPathGenerator(
|
|
57
62
|
from: PublicSignKey,
|
|
58
|
-
db:
|
|
63
|
+
db: DocumentsLike<IdentityRelation, FromTo>,
|
|
59
64
|
resolver: RelationResolver,
|
|
60
65
|
) {
|
|
61
66
|
let iter = [from];
|
|
@@ -90,7 +95,7 @@ export async function* getPathGenerator(
|
|
|
90
95
|
export const hasPathToTarget = async (
|
|
91
96
|
start: PublicSignKey,
|
|
92
97
|
target: (key: PublicSignKey) => boolean,
|
|
93
|
-
db:
|
|
98
|
+
db: DocumentsLike<IdentityRelation, FromTo>,
|
|
94
99
|
resolver: RelationResolver,
|
|
95
100
|
): Promise<boolean> => {
|
|
96
101
|
if (!db) {
|
|
@@ -157,7 +162,7 @@ export class IdentityRelation extends AbstractRelation {
|
|
|
157
162
|
export const hasPath = async (
|
|
158
163
|
start: PublicSignKey,
|
|
159
164
|
end: PublicSignKey,
|
|
160
|
-
db:
|
|
165
|
+
db: DocumentsLike<IdentityRelation, FromTo>,
|
|
161
166
|
resolver: RelationResolver,
|
|
162
167
|
): Promise<boolean> => {
|
|
163
168
|
return hasPathToTarget(start, (key) => end.equals(key), db, resolver);
|
|
@@ -166,7 +171,7 @@ export const hasPath = async (
|
|
|
166
171
|
export const getRelation = async (
|
|
167
172
|
from: PublicSignKey,
|
|
168
173
|
to: PublicSignKey,
|
|
169
|
-
db:
|
|
174
|
+
db: DocumentsLike<IdentityRelation, FromTo>,
|
|
170
175
|
): Promise<IdentityRelation | undefined> => {
|
|
171
176
|
return db.index.get(new IdentityRelation({ from, to }).id);
|
|
172
177
|
};
|