@peerbit/identity-access-controller 3.0.40 → 4.0.0-3a75d6e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { AccessCondition } from "./condition";
1
+ import { AccessCondition } from "./condition.js";
2
2
  export declare enum AccessType {
3
3
  Any = 0,
4
4
  Read = 1,
@@ -6,15 +6,17 @@ export declare enum AccessType {
6
6
  }
7
7
  export declare class AccessData {
8
8
  }
9
+ export declare const ACCESS_TYPE_PROPERTY = "accessTypes";
9
10
  export declare class Access extends AccessData {
10
11
  id: string;
11
- accessTypes: AccessType[];
12
+ [ACCESS_TYPE_PROPERTY]: AccessType[];
12
13
  accessCondition: AccessCondition<any>;
13
14
  constructor(options?: {
14
15
  accessTypes: AccessType[];
15
16
  accessCondition: AccessCondition<any>;
16
17
  });
17
18
  calculateId(): string;
18
- initialize(): Access;
19
+ initialize(): this;
19
20
  assertId(): void;
20
21
  }
22
+ //# sourceMappingURL=access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/access.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,oBAAY,UAAU;IACrB,GAAG,IAAI;IACP,IAAI,IAAI;IACR,KAAK,IAAI;CACT;AAED,qBACa,UAAU;CAAG;AAE1B,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAClD,qBACa,MAAO,SAAQ,UAAU;IAErC,EAAE,EAAE,MAAM,CAAC;IAGX,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC;IAGrC,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;gBAE1B,OAAO,CAAC,EAAE;QACrB,WAAW,EAAE,UAAU,EAAE,CAAC;QAC1B,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;KACtC;IASD,WAAW,IAAI,MAAM;IAUrB,UAAU,IAAI,IAAI;IAKlB,QAAQ;CAQR"}
@@ -8,10 +8,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  var Access_1;
11
- import { field, option, variant, vec } from "@dao-xyz/borsh";
12
- import { serialize } from "@dao-xyz/borsh";
13
- import { AccessCondition } from "./condition";
11
+ var _a;
12
+ import { field, option, serialize, variant, vec } from "@dao-xyz/borsh";
14
13
  import { toBase64 } from "@peerbit/crypto";
14
+ import { AccessCondition } from "./condition.js";
15
15
  export var AccessType;
16
16
  (function (AccessType) {
17
17
  AccessType[AccessType["Any"] = 0] = "Any";
@@ -24,9 +24,10 @@ AccessData = __decorate([
24
24
  variant(0)
25
25
  ], AccessData);
26
26
  export { AccessData };
27
+ export const ACCESS_TYPE_PROPERTY = "accessTypes";
27
28
  let Access = Access_1 = class Access extends AccessData {
28
29
  id;
29
- accessTypes;
30
+ [_a = ACCESS_TYPE_PROPERTY];
30
31
  accessCondition;
31
32
  constructor(options) {
32
33
  super();
@@ -63,7 +64,7 @@ __decorate([
63
64
  __decorate([
64
65
  field({ type: vec("u8") }),
65
66
  __metadata("design:type", Array)
66
- ], Access.prototype, "accessTypes", void 0);
67
+ ], Access.prototype, _a, void 0);
67
68
  __decorate([
68
69
  field({ type: AccessCondition }),
69
70
  __metadata("design:type", AccessCondition)
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/access.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACrB,yCAAO,CAAA;IACP,2CAAQ,CAAA;IACR,6CAAS,CAAA;AACV,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAGM,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,UAAU;IADtB,OAAO,CAAC,CAAC,CAAC;GACE,UAAU,CAAG;;AAE1B,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAE3C,IAAM,MAAM,cAAZ,MAAM,MAAO,SAAQ,UAAU;IAErC,EAAE,CAAS;IAGX,MAAC,oBAAoB,CAAC,CAAe;IAGrC,eAAe,CAAuB;IAEtC,YAAY,OAGX;QACA,KAAK,EAAE,CAAC;QACR,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;YAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QACnB,CAAC;IACF,CAAC;IAED,WAAW;QACV,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,QAAM,EAAE,CAAC;QACvB,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QACzC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACjC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,UAAU;QACT,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ;QACP,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACd,mBAAmB,IAAI,CAAC,EAAE,iBAAiB,YAAY,EAAE,CACzD,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAA;AA3CA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;;kCACvB;AAGX;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;gCACU;AAGrC;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;8BAChB,eAAe;+CAAM;AAR1B,MAAM;IADlB,OAAO,CAAC,CAAC,CAAC;;GACE,MAAM,CA6ClB"}
@@ -1,10 +1,10 @@
1
- import { Documents, TransactionContext, PutOperation, DeleteOperation } from "@peerbit/document";
2
- import { TrustedNetwork, IdentityGraph } from "@peerbit/trusted-network";
3
- import { Access } from "./access";
1
+ import { type PeerId } from "@libp2p/interface";
4
2
  import { PublicSignKey } from "@peerbit/crypto";
3
+ import { type CanPerformOperations, Documents } from "@peerbit/document";
5
4
  import { Program } from "@peerbit/program";
6
- import { PeerId } from "@libp2p/interface";
7
- import { RoleOptions } from "@peerbit/shared-log";
5
+ import { type ReplicationOptions } from "@peerbit/shared-log";
6
+ import { IdentityGraph, TrustedNetwork } from "@peerbit/trusted-network";
7
+ import { Access } from "./access.js";
8
8
  export declare class IdentityAccessController extends Program {
9
9
  access: Documents<Access>;
10
10
  identityGraphController: IdentityGraph;
@@ -15,8 +15,9 @@ export declare class IdentityAccessController extends Program {
15
15
  trustedNetwork?: TrustedNetwork;
16
16
  });
17
17
  canRead(_obj: any, s: PublicSignKey | undefined): Promise<boolean>;
18
- canPerform(_operation: PutOperation<Access> | DeleteOperation, context: TransactionContext<Access>): Promise<boolean>;
18
+ canPerform(properties: CanPerformOperations<any>): Promise<boolean>;
19
19
  open(properties?: {
20
- role?: RoleOptions;
20
+ replicate?: ReplicationOptions;
21
21
  }): Promise<void>;
22
22
  }
23
+ //# sourceMappingURL=acl-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acl-db.d.ts","sourceRoot":"","sources":["../../src/acl-db.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAc,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,KAAK,oBAAoB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAOzE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACN,aAAa,EACb,cAAc,EAId,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAwB,MAAM,EAAc,MAAM,aAAa,CAAC;AAEvE,qBACa,wBAAyB,SAAQ,OAAO;IAEpD,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAG1B,uBAAuB,EAAE,aAAa,CAAC;IAGvC,cAAc,EAAE,cAAc,CAAC;gBAEnB,IAAI,EAAE;QACjB,EAAE,CAAC,EAAE,UAAU,CAAC;QAChB,SAAS,EAAE,aAAa,GAAG,MAAM,CAAC;QAClC,cAAc,CAAC,EAAE,cAAc,CAAC;KAChC;IA6BK,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAiElE,UAAU,CAAC,UAAU,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAqEnE,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,kBAAkB,CAAA;KAAE;CAe1D"}
@@ -8,12 +8,15 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { field, variant } from "@dao-xyz/borsh";
11
+ import {} from "@libp2p/interface";
12
+ import { PublicSignKey, sha256Sync } from "@peerbit/crypto";
11
13
  import { Documents } from "@peerbit/document";
12
- import { getPathGenerator, TrustedNetwork, getFromByTo, IdentityGraph, createIdentityGraphStore } from "@peerbit/trusted-network";
13
- import { Access, AccessType } from "./access";
14
- import { sha256Sync } from "@peerbit/crypto";
14
+ import { Compare, IntegerCompare, Or, SearchRequest, } from "@peerbit/indexer-interface";
15
15
  import { Program } from "@peerbit/program";
16
+ import {} from "@peerbit/shared-log";
17
+ import { IdentityGraph, TrustedNetwork, createIdentityGraphStore, getFromByTo, getPathGenerator, } from "@peerbit/trusted-network";
16
18
  import { concat } from "uint8arrays";
19
+ import { ACCESS_TYPE_PROPERTY, Access, AccessType } from "./access.js";
17
20
  let IdentityAccessController = class IdentityAccessController extends Program {
18
21
  access;
19
22
  identityGraphController;
@@ -24,16 +27,16 @@ let IdentityAccessController = class IdentityAccessController extends Program {
24
27
  throw new Error("Expecting either TrustedNetwork or rootTrust");
25
28
  }
26
29
  this.access = new Documents({
27
- id: opts.id && sha256Sync(concat([opts.id, new Uint8Array([0])]))
30
+ id: opts.id && sha256Sync(concat([opts.id, new Uint8Array([0])])),
28
31
  });
29
32
  this.trustedNetwork = opts.trustedNetwork
30
33
  ? opts.trustedNetwork
31
34
  : new TrustedNetwork({
32
35
  id: opts.id && sha256Sync(concat([opts.id, new Uint8Array([1])])),
33
- rootTrust: opts.rootTrust
36
+ rootTrust: opts.rootTrust,
34
37
  });
35
38
  this.identityGraphController = new IdentityGraph({
36
- relationGraph: createIdentityGraphStore(opts.id && sha256Sync(concat([opts.id, new Uint8Array([2])])))
39
+ relationGraph: createIdentityGraphStore(opts.id && sha256Sync(concat([opts.id, new Uint8Array([2])]))),
37
40
  });
38
41
  }
39
42
  // allow anyone write to the ACL db, but assume entry is invalid until a verifier verifies
@@ -51,8 +54,23 @@ let IdentityAccessController = class IdentityAccessController extends Program {
51
54
  }
52
55
  // Else check whether its trusted by this access controller
53
56
  const canReadCheck = async (key) => {
54
- for (const value of this.access.index.index.values()) {
55
- const access = value.value;
57
+ const accessReadOrAny = await this.access.index.search(new SearchRequest({
58
+ query: [
59
+ new Or([
60
+ new IntegerCompare({
61
+ key: ACCESS_TYPE_PROPERTY,
62
+ compare: Compare.Equal,
63
+ value: AccessType.Any,
64
+ }),
65
+ new IntegerCompare({
66
+ key: ACCESS_TYPE_PROPERTY,
67
+ compare: Compare.Equal,
68
+ value: AccessType.Read,
69
+ }),
70
+ ]),
71
+ ],
72
+ }));
73
+ for (const access of accessReadOrAny) {
56
74
  if (access instanceof Access) {
57
75
  if (access.accessTypes.find((x) => x === AccessType.Any || x === AccessType.Read) !== undefined) {
58
76
  // check condition
@@ -74,7 +92,7 @@ let IdentityAccessController = class IdentityAccessController extends Program {
74
92
  }
75
93
  return false;
76
94
  }
77
- async canPerform(_operation, context) {
95
+ async canPerform(properties) {
78
96
  // TODO, improve, caching etc
79
97
  // Check whether it is trusted by trust web
80
98
  const canPerformByKey = async (key) => {
@@ -83,8 +101,23 @@ let IdentityAccessController = class IdentityAccessController extends Program {
83
101
  }
84
102
  // Else check whether its trusted by this access controller
85
103
  const canPerformCheck = async (key) => {
86
- for (const value of this.access.index.index.values()) {
87
- const access = value.value;
104
+ const accessWritedOrAny = await this.access.index.search(new SearchRequest({
105
+ query: [
106
+ new Or([
107
+ new IntegerCompare({
108
+ key: ACCESS_TYPE_PROPERTY,
109
+ compare: Compare.Equal,
110
+ value: AccessType.Any,
111
+ }),
112
+ new IntegerCompare({
113
+ key: ACCESS_TYPE_PROPERTY,
114
+ compare: Compare.Equal,
115
+ value: AccessType.Write,
116
+ }),
117
+ ]),
118
+ ],
119
+ }));
120
+ for (const access of accessWritedOrAny) {
88
121
  if (access instanceof Access) {
89
122
  if (access.accessTypes.find((x) => x === AccessType.Any || x === AccessType.Write) !== undefined) {
90
123
  // check condition
@@ -106,7 +139,7 @@ let IdentityAccessController = class IdentityAccessController extends Program {
106
139
  }
107
140
  return false;
108
141
  };
109
- for (const key of await context.entry.getPublicKeys()) {
142
+ for (const key of await properties.entry.getPublicKeys()) {
110
143
  if (await canPerformByKey(key)) {
111
144
  return true;
112
145
  }
@@ -115,16 +148,16 @@ let IdentityAccessController = class IdentityAccessController extends Program {
115
148
  }
116
149
  async open(properties) {
117
150
  await this.identityGraphController.open({
118
- role: properties?.role || { type: "replicator", factor: 1 },
119
- canRead: this.canRead.bind(this)
151
+ replicate: properties?.replicate || { factor: 1 },
152
+ canRead: this.canRead.bind(this),
120
153
  });
121
154
  await this.access.open({
122
- role: properties?.role || { type: "replicator", factor: 1 },
155
+ replicate: properties?.replicate || { factor: 1 },
123
156
  type: Access,
124
157
  canPerform: this.canPerform.bind(this),
125
158
  index: {
126
- canRead: this.canRead.bind(this)
127
- }
159
+ canRead: this.canRead.bind(this),
160
+ },
128
161
  });
129
162
  await this.trustedNetwork.open(properties);
130
163
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acl-db.js","sourceRoot":"","sources":["../../src/acl-db.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAA6B,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACN,OAAO,EACP,cAAc,EACd,EAAE,EACF,aAAa,GACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAA2B,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACN,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,gBAAgB,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGhE,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,OAAO;IAEpD,MAAM,CAAoB;IAG1B,uBAAuB,CAAgB;IAGvC,cAAc,CAAiB;IAE/B,YAAY,IAIX;QACA,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC3B,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACjE,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;YACxC,CAAC,CAAC,IAAI,CAAC,cAAc;YACrB,CAAC,CAAC,IAAI,cAAc,CAAC;gBACnB,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,SAAS,EAAE,IAAI,CAAC,SAAS;aACzB,CAAC,CAAC;QACL,IAAI,CAAC,uBAAuB,GAAG,IAAI,aAAa,CAAC;YAChD,aAAa,EAAE,wBAAwB,CACtC,IAAI,CAAC,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC7D;SACD,CAAC,CAAC;IACJ,CAAC;IAED,0FAA0F;IAC1F,gEAAgE;IAEhE,KAAK;IAEL,oBAAoB;IAEpB,KAAK,CAAC,OAAO,CAAC,IAAS,EAAE,CAA4B;QACpD,6BAA6B;QAE7B,IAAI,CAAC,CAAC,EAAE,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;QAED,2CAA2C;QAC3C,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACb,CAAC;QAED,2DAA2D;QAC3D,MAAM,YAAY,GAAG,KAAK,EAAE,GAAkB,EAAE,EAAE;YACjD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CACrD,IAAI,aAAa,CAAC;gBACjB,KAAK,EAAE;oBACN,IAAI,EAAE,CAAC;wBACN,IAAI,cAAc,CAAC;4BAClB,GAAG,EAAE,oBAAoB;4BACzB,OAAO,EAAE,OAAO,CAAC,KAAK;4BACtB,KAAK,EAAE,UAAU,CAAC,GAAG;yBACrB,CAAC;wBACF,IAAI,cAAc,CAAC;4BAClB,GAAG,EAAE,oBAAoB;4BACzB,OAAO,EAAE,OAAO,CAAC,KAAK;4BACtB,KAAK,EAAE,UAAU,CAAC,IAAI;yBACtB,CAAC;qBACF,CAAC;iBACF;aACD,CAAC,CACF,CAAC;YACF,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;gBACtC,IAAI,MAAM,YAAY,MAAM,EAAE,CAAC;oBAC9B,IACC,MAAM,CAAC,WAAW,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,CACpD,KAAK,SAAS,EACd,CAAC;wBACF,kBAAkB;wBAClB,IAAI,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC/C,OAAO,IAAI,CAAC;wBACb,CAAC;wBACD,SAAS;oBACV,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC,CAAC;QAEF,IAAI,MAAM,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,IAAI,KAAK,EAAE,MAAM,YAAY,IAAI,gBAAgB,CAChD,CAAC,EACD,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAC1C,WAAW,CACX,EAAE,CAAC;YACH,IAAI,MAAM,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAqC;QACrD,6BAA6B;QAE7B,2CAA2C;QAC3C,MAAM,eAAe,GAAG,KAAK,EAAE,GAAkB,EAAoB,EAAE;YACtE,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACb,CAAC;YACD,2DAA2D;YAC3D,MAAM,eAAe,GAAG,KAAK,EAAE,GAAkB,EAAE,EAAE;gBACpD,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CACvD,IAAI,aAAa,CAAC;oBACjB,KAAK,EAAE;wBACN,IAAI,EAAE,CAAC;4BACN,IAAI,cAAc,CAAC;gCAClB,GAAG,EAAE,oBAAoB;gCACzB,OAAO,EAAE,OAAO,CAAC,KAAK;gCACtB,KAAK,EAAE,UAAU,CAAC,GAAG;6BACrB,CAAC;4BACF,IAAI,cAAc,CAAC;gCAClB,GAAG,EAAE,oBAAoB;gCACzB,OAAO,EAAE,OAAO,CAAC,KAAK;gCACtB,KAAK,EAAE,UAAU,CAAC,KAAK;6BACvB,CAAC;yBACF,CAAC;qBACF;iBACD,CAAC,CACF,CAAC;gBAEF,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;oBACxC,IAAI,MAAM,YAAY,MAAM,EAAE,CAAC;wBAC9B,IACC,MAAM,CAAC,WAAW,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,UAAU,CAAC,KAAK,CACrD,KAAK,SAAS,EACd,CAAC;4BACF,kBAAkB;4BAClB,IAAI,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC/C,OAAO,IAAI,CAAC;4BACb,CAAC;4BACD,SAAS;wBACV,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC,CAAC;YACF,IAAI,MAAM,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;YACb,CAAC;YACD,IAAI,KAAK,EAAE,MAAM,YAAY,IAAI,gBAAgB,CAChD,GAAG,EACH,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAC1C,WAAW,CACX,EAAE,CAAC;gBACH,IAAI,MAAM,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9C,OAAO,IAAI,CAAC;gBACb,CAAC;YACF,CAAC;YAED,OAAO,KAAK,CAAC;QACd,CAAC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,MAAM,UAAU,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC;YAC1D,IAAI,MAAM,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAA+C;QACzD,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;YACvC,SAAS,EAAE,UAAU,EAAE,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;YACjD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;SAChC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACtB,SAAS,EAAE,UAAU,EAAE,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;YACjD,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,KAAK,EAAE;gBACN,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;aAChC;SACD,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;CACD,CAAA;AA9LA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;8BACnB,SAAS;wDAAS;AAG1B;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BACN,aAAa;yEAAC;AAGvC;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;8BAChB,cAAc;gEAAC;AARnB,wBAAwB;IADpC,OAAO,CAAC,cAAc,CAAC;;GACX,wBAAwB,CAgMpC"}
@@ -1,5 +1,5 @@
1
+ import { type PeerId } from "@libp2p/interface";
1
2
  import { PublicSignKey } from "@peerbit/crypto";
2
- import { PeerId } from "@libp2p/interface";
3
3
  export declare class Network {
4
4
  type: string;
5
5
  rpc: string;
@@ -18,3 +18,4 @@ export declare class PublicKeyAccessCondition<T> extends AccessCondition<T> {
18
18
  });
19
19
  allowed(identity: PublicSignKey): Promise<boolean>;
20
20
  }
21
+ //# sourceMappingURL=condition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition.d.ts","sourceRoot":"","sources":["../../src/condition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAA0B,MAAM,iBAAiB,CAAC;AAQxE,qBACa,OAAO;IAEnB,IAAI,EAAE,MAAM,CAAC;IAGb,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,eAAe,CAAC,CAAC;IACvB,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;CAGpD;AAED,qBACa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;;IAItD,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;CAGpD;AAED,qBACa,wBAAwB,CAAC,CAAC,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;IAElE,GAAG,EAAE,aAAa,CAAC;gBAEP,OAAO,EAAE;QAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAAA;KAAE;IAK9C,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;CAGxD"}
@@ -8,6 +8,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { field, variant } from "@dao-xyz/borsh";
11
+ import {} from "@libp2p/interface";
11
12
  import { PublicSignKey, getPublicKeyFromPeerId } from "@peerbit/crypto";
12
13
  const coercePublicKey = (publicKey) => {
13
14
  return publicKey instanceof PublicSignKey
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition.js","sourceRoot":"","sources":["../../src/condition.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAExE,MAAM,eAAe,GAAG,CAAC,SAAiC,EAAE,EAAE;IAC7D,OAAO,SAAS,YAAY,aAAa;QACxC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC,CAAC;AAGK,IAAM,OAAO,GAAb,MAAM,OAAO;IAEnB,IAAI,CAAS;IAGb,GAAG,CAAS;CACZ,CAAA;AAJA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;qCACb;AAGb;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;oCACd;AALA,OAAO;IADnB,OAAO,CAAC,CAAC,CAAC;GACE,OAAO,CAMnB;;AAED,MAAM,OAAO,eAAe;IAC3B,KAAK,CAAC,OAAO,CAAC,IAAmB;QAChC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;CACD;AAGM,IAAM,kBAAkB,GAAxB,MAAM,kBAAsB,SAAQ,eAAkB;IAC5D;QACC,KAAK,EAAE,CAAC;IACT,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,IAAmB;QAChC,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAA;AAPY,kBAAkB;IAD9B,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;GACH,kBAAkB,CAO9B;;AAGM,IAAM,wBAAwB,GAA9B,MAAM,wBAA4B,SAAQ,eAAkB;IAElE,GAAG,CAAgB;IAEnB,YAAY,OAAwC;QACnD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAuB;QACpC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;CACD,CAAA;AAVA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BAC1B,aAAa;qDAAC;AAFP,wBAAwB;IADpC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;GACH,wBAAwB,CAYpC;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG"}
@@ -1,3 +1,4 @@
1
1
  export * from "./access.js";
2
2
  export * from "./acl-db.js";
3
3
  export * from "./condition.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,42 +1,69 @@
1
1
  {
2
- "name": "@peerbit/identity-access-controller",
3
- "version": "3.0.40",
4
- "description": "Access controller that operates on a DB",
5
- "type": "module",
6
- "sideEffects": false,
7
- "module": "lib/esm/index.js",
8
- "types": "lib/esm/index.d.ts",
9
- "exports": {
10
- "import": "./lib/esm/index.js",
11
- "require": "./lib/cjs/index.js"
12
- },
13
- "files": [
14
- "lib",
15
- "src",
16
- "!src/**/__tests__",
17
- "!lib/**/__tests__",
18
- "LICENSE"
19
- ],
20
- "publishConfig": {
21
- "access": "public"
22
- },
23
- "scripts": {
24
- "clean": "shx rm -rf lib/*",
25
- "build": "yarn clean && tsc -p tsconfig.json",
26
- "test": "node ../../../../node_modules/.bin/jest test -c ../../../../jest.config.ts --runInBand --forceExit",
27
- "test:unit": "node ../../../../node_modules/.bin/jest test -c ../../../../jest.config.unit.ts --runInBand --forceExit",
28
- "test:integration": "node ../node_modules/.bin/jest test -c ../../../../jest.config.integration.ts --runInBand --forceExit"
29
- },
30
- "author": "dao.xyz",
31
- "license": "MIT",
32
- "dependencies": {
33
- "@dao-xyz/borsh": "^5.2.1",
34
- "@peerbit/document": "6.0.7",
35
- "@peerbit/trusted-network": "3.0.40"
36
- },
37
- "devDependencies": {
38
- "@peerbit/test-utils": "^2.0.33",
39
- "@peerbit/time": "^2.0.6"
40
- },
41
- "gitHead": "fcd486b9a5c3b7d94e2ae14f1b06ab2a0f7841ad"
2
+ "name": "@peerbit/identity-access-controller",
3
+ "version": "4.0.0-3a75d6e",
4
+ "description": "Access controller that operates on a DB",
5
+ "sideEffects": false,
6
+ "type": "module",
7
+ "types": "./dist/src/index.d.ts",
8
+ "typesVersions": {
9
+ "*": {
10
+ "*": [
11
+ "*",
12
+ "dist/*",
13
+ "dist/src/*",
14
+ "dist/src/*/index"
15
+ ],
16
+ "src/*": [
17
+ "*",
18
+ "dist/*",
19
+ "dist/src/*",
20
+ "dist/src/*/index"
21
+ ]
22
+ }
23
+ },
24
+ "files": [
25
+ "src",
26
+ "dist",
27
+ "!dist/e2e",
28
+ "!dist/test",
29
+ "!**/*.tsbuildinfo"
30
+ ],
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/src/index.d.ts",
34
+ "import": "./dist/src/index.js"
35
+ }
36
+ },
37
+ "eslintConfig": {
38
+ "extends": "peerbit",
39
+ "parserOptions": {
40
+ "project": true,
41
+ "sourceType": "module"
42
+ },
43
+ "ignorePatterns": [
44
+ "!.aegir.js",
45
+ "test/ts-use",
46
+ "*.d.ts"
47
+ ]
48
+ },
49
+ "publishConfig": {
50
+ "access": "public"
51
+ },
52
+ "scripts": {
53
+ "clean": "aegir clean",
54
+ "build": "aegir build --no-bundle",
55
+ "test": "aegir test --target node",
56
+ "lint": "aegir lint"
57
+ },
58
+ "author": "dao.xyz",
59
+ "license": "MIT",
60
+ "dependencies": {
61
+ "@dao-xyz/borsh": "^5.2.3",
62
+ "@peerbit/document": "7.0.0-3a75d6e",
63
+ "@peerbit/trusted-network": "4.0.0-3a75d6e"
64
+ },
65
+ "devDependencies": {
66
+ "@peerbit/time": "2.0.7-3a75d6e",
67
+ "@peerbit/test-utils": "2.0.34-3a75d6e"
68
+ }
42
69
  }
package/src/access.ts CHANGED
@@ -1,24 +1,24 @@
1
- import { field, option, variant, vec } from "@dao-xyz/borsh";
2
- import { serialize } from "@dao-xyz/borsh";
3
- import { AccessCondition } from "./condition";
1
+ import { field, option, serialize, variant, vec } from "@dao-xyz/borsh";
4
2
  import { toBase64 } from "@peerbit/crypto";
3
+ import { AccessCondition } from "./condition.js";
5
4
 
6
5
  export enum AccessType {
7
6
  Any = 0,
8
7
  Read = 1,
9
- Write = 2
8
+ Write = 2,
10
9
  }
11
10
 
12
11
  @variant(0)
13
12
  export class AccessData {}
14
13
 
14
+ export const ACCESS_TYPE_PROPERTY = "accessTypes";
15
15
  @variant(0)
16
16
  export class Access extends AccessData {
17
17
  @field({ type: option("string") })
18
18
  id: string;
19
19
 
20
20
  @field({ type: vec("u8") })
21
- accessTypes: AccessType[];
21
+ [ACCESS_TYPE_PROPERTY]: AccessType[];
22
22
 
23
23
  @field({ type: AccessCondition })
24
24
  accessCondition: AccessCondition<any>;
@@ -45,7 +45,7 @@ export class Access extends AccessData {
45
45
  return toBase64(serialize(a));
46
46
  }
47
47
 
48
- initialize(): Access {
48
+ initialize(): this {
49
49
  this.id = this.calculateId();
50
50
  return this;
51
51
  }
@@ -54,7 +54,7 @@ export class Access extends AccessData {
54
54
  const calculatedId = this.calculateId();
55
55
  if (this.id !== calculatedId) {
56
56
  throw new Error(
57
- `Invalid id, got ${this.id} but expected ${calculatedId}`
57
+ `Invalid id, got ${this.id} but expected ${calculatedId}`,
58
58
  );
59
59
  }
60
60
  }
package/src/acl-db.ts CHANGED
@@ -1,23 +1,24 @@
1
1
  import { field, variant } from "@dao-xyz/borsh";
2
+ import { type PeerId } from "@libp2p/interface";
3
+ import { PublicSignKey, sha256Sync } from "@peerbit/crypto";
4
+ import { type CanPerformOperations, Documents } from "@peerbit/document";
2
5
  import {
3
- Documents,
4
- TransactionContext,
5
- PutOperation,
6
- DeleteOperation
7
- } from "@peerbit/document";
6
+ Compare,
7
+ IntegerCompare,
8
+ Or,
9
+ SearchRequest,
10
+ } from "@peerbit/indexer-interface";
11
+ import { Program } from "@peerbit/program";
12
+ import { type ReplicationOptions } from "@peerbit/shared-log";
8
13
  import {
9
- getPathGenerator,
14
+ IdentityGraph,
10
15
  TrustedNetwork,
16
+ createIdentityGraphStore,
11
17
  getFromByTo,
12
- IdentityGraph,
13
- createIdentityGraphStore
18
+ getPathGenerator,
14
19
  } from "@peerbit/trusted-network";
15
- import { Access, AccessType } from "./access";
16
- import { PublicSignKey, sha256Sync } from "@peerbit/crypto";
17
- import { Program } from "@peerbit/program";
18
- import { PeerId } from "@libp2p/interface";
19
20
  import { concat } from "uint8arrays";
20
- import { RoleOptions } from "@peerbit/shared-log";
21
+ import { ACCESS_TYPE_PROPERTY, Access, AccessType } from "./access.js";
21
22
 
22
23
  @variant("identity_acl")
23
24
  export class IdentityAccessController extends Program {
@@ -40,19 +41,19 @@ export class IdentityAccessController extends Program {
40
41
  throw new Error("Expecting either TrustedNetwork or rootTrust");
41
42
  }
42
43
  this.access = new Documents({
43
- id: opts.id && sha256Sync(concat([opts.id, new Uint8Array([0])]))
44
+ id: opts.id && sha256Sync(concat([opts.id, new Uint8Array([0])])),
44
45
  });
45
46
 
46
47
  this.trustedNetwork = opts.trustedNetwork
47
48
  ? opts.trustedNetwork
48
49
  : new TrustedNetwork({
49
50
  id: opts.id && sha256Sync(concat([opts.id, new Uint8Array([1])])),
50
- rootTrust: opts.rootTrust
51
+ rootTrust: opts.rootTrust,
51
52
  });
52
53
  this.identityGraphController = new IdentityGraph({
53
54
  relationGraph: createIdentityGraphStore(
54
- opts.id && sha256Sync(concat([opts.id, new Uint8Array([2])]))
55
- )
55
+ opts.id && sha256Sync(concat([opts.id, new Uint8Array([2])])),
56
+ ),
56
57
  });
57
58
  }
58
59
 
@@ -77,12 +78,29 @@ export class IdentityAccessController extends Program {
77
78
 
78
79
  // Else check whether its trusted by this access controller
79
80
  const canReadCheck = async (key: PublicSignKey) => {
80
- for (const value of this.access.index.index.values()) {
81
- const access = value.value;
81
+ const accessReadOrAny = await this.access.index.search(
82
+ new SearchRequest({
83
+ query: [
84
+ new Or([
85
+ new IntegerCompare({
86
+ key: ACCESS_TYPE_PROPERTY,
87
+ compare: Compare.Equal,
88
+ value: AccessType.Any,
89
+ }),
90
+ new IntegerCompare({
91
+ key: ACCESS_TYPE_PROPERTY,
92
+ compare: Compare.Equal,
93
+ value: AccessType.Read,
94
+ }),
95
+ ]),
96
+ ],
97
+ }),
98
+ );
99
+ for (const access of accessReadOrAny) {
82
100
  if (access instanceof Access) {
83
101
  if (
84
102
  access.accessTypes.find(
85
- (x) => x === AccessType.Any || x === AccessType.Read
103
+ (x) => x === AccessType.Any || x === AccessType.Read,
86
104
  ) !== undefined
87
105
  ) {
88
106
  // check condition
@@ -101,7 +119,7 @@ export class IdentityAccessController extends Program {
101
119
  for await (const trustedByKey of getPathGenerator(
102
120
  s,
103
121
  this.identityGraphController.relationGraph,
104
- getFromByTo
122
+ getFromByTo,
105
123
  )) {
106
124
  if (await canReadCheck(trustedByKey.from)) {
107
125
  return true;
@@ -111,10 +129,7 @@ export class IdentityAccessController extends Program {
111
129
  return false;
112
130
  }
113
131
 
114
- async canPerform(
115
- _operation: PutOperation<Access> | DeleteOperation,
116
- context: TransactionContext<Access>
117
- ): Promise<boolean> {
132
+ async canPerform(properties: CanPerformOperations<any>): Promise<boolean> {
118
133
  // TODO, improve, caching etc
119
134
 
120
135
  // Check whether it is trusted by trust web
@@ -124,12 +139,30 @@ export class IdentityAccessController extends Program {
124
139
  }
125
140
  // Else check whether its trusted by this access controller
126
141
  const canPerformCheck = async (key: PublicSignKey) => {
127
- for (const value of this.access.index.index.values()) {
128
- const access = value.value;
142
+ const accessWritedOrAny = await this.access.index.search(
143
+ new SearchRequest({
144
+ query: [
145
+ new Or([
146
+ new IntegerCompare({
147
+ key: ACCESS_TYPE_PROPERTY,
148
+ compare: Compare.Equal,
149
+ value: AccessType.Any,
150
+ }),
151
+ new IntegerCompare({
152
+ key: ACCESS_TYPE_PROPERTY,
153
+ compare: Compare.Equal,
154
+ value: AccessType.Write,
155
+ }),
156
+ ]),
157
+ ],
158
+ }),
159
+ );
160
+
161
+ for (const access of accessWritedOrAny) {
129
162
  if (access instanceof Access) {
130
163
  if (
131
164
  access.accessTypes.find(
132
- (x) => x === AccessType.Any || x === AccessType.Write
165
+ (x) => x === AccessType.Any || x === AccessType.Write,
133
166
  ) !== undefined
134
167
  ) {
135
168
  // check condition
@@ -147,7 +180,7 @@ export class IdentityAccessController extends Program {
147
180
  for await (const trustedByKey of getPathGenerator(
148
181
  key,
149
182
  this.identityGraphController.relationGraph,
150
- getFromByTo
183
+ getFromByTo,
151
184
  )) {
152
185
  if (await canPerformCheck(trustedByKey.from)) {
153
186
  return true;
@@ -157,7 +190,7 @@ export class IdentityAccessController extends Program {
157
190
  return false;
158
191
  };
159
192
 
160
- for (const key of await context.entry.getPublicKeys()) {
193
+ for (const key of await properties.entry.getPublicKeys()) {
161
194
  if (await canPerformByKey(key)) {
162
195
  return true;
163
196
  }
@@ -165,18 +198,18 @@ export class IdentityAccessController extends Program {
165
198
  return false;
166
199
  }
167
200
 
168
- async open(properties?: { role?: RoleOptions }) {
201
+ async open(properties?: { replicate?: ReplicationOptions }) {
169
202
  await this.identityGraphController.open({
170
- role: properties?.role || { type: "replicator", factor: 1 },
171
- canRead: this.canRead.bind(this)
203
+ replicate: properties?.replicate || { factor: 1 },
204
+ canRead: this.canRead.bind(this),
172
205
  });
173
206
  await this.access.open({
174
- role: properties?.role || { type: "replicator", factor: 1 },
207
+ replicate: properties?.replicate || { factor: 1 },
175
208
  type: Access,
176
209
  canPerform: this.canPerform.bind(this),
177
210
  index: {
178
- canRead: this.canRead.bind(this)
179
- }
211
+ canRead: this.canRead.bind(this),
212
+ },
180
213
  });
181
214
  await this.trustedNetwork.open(properties);
182
215
  }
package/src/condition.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { field, variant } from "@dao-xyz/borsh";
2
+ import { type PeerId } from "@libp2p/interface";
2
3
  import { PublicSignKey, getPublicKeyFromPeerId } from "@peerbit/crypto";
3
- import { PeerId } from "@libp2p/interface";
4
4
 
5
5
  const coercePublicKey = (publicKey: PublicSignKey | PeerId) => {
6
6
  return publicKey instanceof PublicSignKey
@@ -1 +0,0 @@
1
- {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/access.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACrB,yCAAO,CAAA;IACP,2CAAQ,CAAA;IACR,6CAAS,CAAA;AACV,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAGM,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,UAAU;IADtB,OAAO,CAAC,CAAC,CAAC;GACE,UAAU,CAAG;;AAGnB,IAAM,MAAM,cAAZ,MAAM,MAAO,SAAQ,UAAU;IAErC,EAAE,CAAS;IAGX,WAAW,CAAe;IAG1B,eAAe,CAAuB;IAEtC,YAAY,OAGX;QACA,KAAK,EAAE,CAAC;QACR,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;YAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QACnB,CAAC;IACF,CAAC;IAED,WAAW;QACV,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,QAAM,EAAE,CAAC;QACvB,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QACzC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACjC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,UAAU;QACT,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ;QACP,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACd,mBAAmB,IAAI,CAAC,EAAE,iBAAiB,YAAY,EAAE,CACzD,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAA;AA3CA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;;kCACvB;AAGX;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;2CACD;AAG1B;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;8BAChB,eAAe;+CAAM;AAR1B,MAAM;IADlB,OAAO,CAAC,CAAC,CAAC;;GACE,MAAM,CA6ClB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"acl-db.js","sourceRoot":"","sources":["../../src/acl-db.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"condition.js","sourceRoot":"","sources":["../../src/condition.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGxE,MAAM,eAAe,GAAG,CAAC,SAAiC,EAAE,EAAE;IAC7D,OAAO,SAAS,YAAY,aAAa;QACxC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC,CAAC;AAGK,IAAM,OAAO,GAAb,MAAM,OAAO;IAEnB,IAAI,CAAS;IAGb,GAAG,CAAS;CACZ,CAAA;AAJA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;qCACb;AAGb;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;oCACd;AALA,OAAO;IADnB,OAAO,CAAC,CAAC,CAAC;GACE,OAAO,CAMnB;;AAED,MAAM,OAAO,eAAe;IAC3B,KAAK,CAAC,OAAO,CAAC,IAAmB;QAChC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;CACD;AAGM,IAAM,kBAAkB,GAAxB,MAAM,kBAAsB,SAAQ,eAAkB;IAC5D;QACC,KAAK,EAAE,CAAC;IACT,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,IAAmB;QAChC,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAA;AAPY,kBAAkB;IAD9B,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;GACH,kBAAkB,CAO9B;;AAGM,IAAM,wBAAwB,GAA9B,MAAM,wBAA4B,SAAQ,eAAkB;IAElE,GAAG,CAAgB;IAEnB,YAAY,OAAwC;QACnD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAuB;QACpC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;CACD,CAAA;AAVA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BAC1B,aAAa;qDAAC;AAFP,wBAAwB;IADpC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;GACH,wBAAwB,CAYpC;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG"}
File without changes
File without changes