@peerbit/identity-access-controller 3.0.40 → 4.0.0-55cebfe
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/{lib/esm → dist/src}/access.d.ts +5 -3
- package/dist/src/access.d.ts.map +1 -0
- package/{lib/esm → dist/src}/access.js +6 -5
- package/dist/src/access.js.map +1 -0
- package/{lib/esm → dist/src}/acl-db.d.ts +8 -7
- package/dist/src/acl-db.d.ts.map +1 -0
- package/{lib/esm → dist/src}/acl-db.js +50 -17
- package/dist/src/acl-db.js.map +1 -0
- package/{lib/esm → dist/src}/condition.d.ts +2 -1
- package/dist/src/condition.d.ts.map +1 -0
- package/{lib/esm → dist/src}/condition.js +1 -0
- package/dist/src/condition.js.map +1 -0
- package/{lib/esm → dist/src}/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/package.json +67 -40
- package/src/access.ts +7 -7
- package/src/acl-db.ts +69 -36
- package/src/condition.ts +1 -1
- package/lib/esm/access.js.map +0 -1
- package/lib/esm/acl-db.js.map +0 -1
- package/lib/esm/condition.js.map +0 -1
- /package/{lib/esm → dist/src}/index.js +0 -0
- /package/{lib/esm → dist/src}/index.js.map +0 -0
|
@@ -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
|
-
|
|
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():
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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 {
|
|
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 {
|
|
7
|
-
import {
|
|
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(
|
|
18
|
+
canPerform(properties: CanPerformOperations<any>): Promise<boolean>;
|
|
19
19
|
open(properties?: {
|
|
20
|
-
|
|
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 {
|
|
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
|
-
|
|
55
|
-
|
|
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(
|
|
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
|
-
|
|
87
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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":"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"}
|
|
@@ -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"}
|
|
@@ -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
|
-
|
|
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
|
-
|
|
2
|
+
"name": "@peerbit/identity-access-controller",
|
|
3
|
+
"version": "4.0.0-55cebfe",
|
|
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-55cebfe",
|
|
63
|
+
"@peerbit/trusted-network": "4.0.0-55cebfe"
|
|
64
|
+
},
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@peerbit/time": "2.0.7-55cebfe",
|
|
67
|
+
"@peerbit/test-utils": "2.0.34-55cebfe"
|
|
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
|
-
|
|
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():
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} from "@peerbit/
|
|
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
|
-
|
|
14
|
+
IdentityGraph,
|
|
10
15
|
TrustedNetwork,
|
|
16
|
+
createIdentityGraphStore,
|
|
11
17
|
getFromByTo,
|
|
12
|
-
|
|
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 {
|
|
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
|
-
|
|
81
|
-
|
|
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
|
-
|
|
128
|
-
|
|
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
|
|
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?: {
|
|
201
|
+
async open(properties?: { replicate?: ReplicationOptions }) {
|
|
169
202
|
await this.identityGraphController.open({
|
|
170
|
-
|
|
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
|
-
|
|
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
|
package/lib/esm/access.js.map
DELETED
|
@@ -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"}
|
package/lib/esm/acl-db.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acl-db.js","sourceRoot":"","sources":["../../src/acl-db.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/condition.js.map
DELETED
|
@@ -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
|