solid-logic 1.3.17-f7bdc345 → 1.3.17-fca5749b
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/acl/aclLogic.d.ts +12 -30
- package/lib/acl/aclLogic.d.ts.map +1 -1
- package/lib/acl/aclLogic.js +152 -119
- package/lib/acl/aclLogic.js.map +1 -1
- package/lib/authn/SolidAuthnLogic.d.ts.map +1 -1
- package/lib/authn/SolidAuthnLogic.js +2 -2
- package/lib/authn/SolidAuthnLogic.js.map +1 -1
- package/lib/chat/chatLogic.d.ts +16 -0
- package/lib/chat/chatLogic.d.ts.map +1 -0
- package/lib/chat/{ChatLogic.js → chatLogic.js} +82 -87
- package/lib/chat/chatLogic.js.map +1 -0
- package/lib/inbox/inboxLogic.d.ts +7 -0
- package/lib/inbox/inboxLogic.d.ts.map +1 -0
- package/lib/inbox/{InboxLogic.js → inboxLogic.js} +58 -64
- package/lib/inbox/inboxLogic.js.map +1 -0
- package/lib/index.d.ts +18 -9
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +76 -35
- package/lib/index.js.map +1 -1
- package/lib/logic/CustomError.d.ts +4 -0
- package/lib/logic/CustomError.d.ts.map +1 -1
- package/lib/logic/CustomError.js +17 -1
- package/lib/logic/CustomError.js.map +1 -1
- package/lib/logic/SolidLogic.d.ts +8 -31
- package/lib/logic/SolidLogic.d.ts.map +1 -1
- package/lib/logic/SolidLogic.js +16 -249
- package/lib/logic/SolidLogic.js.map +1 -1
- package/lib/logic/solidLogicSingleton.js +1 -1
- package/lib/logic/solidLogicSingleton.js.map +1 -1
- package/lib/logic/solidLogicSingletonNew.d.ts +67 -0
- package/lib/logic/solidLogicSingletonNew.d.ts.map +1 -0
- package/lib/logic/solidLogicSingletonNew.js +219 -0
- package/lib/logic/solidLogicSingletonNew.js.map +1 -0
- package/lib/profile/profileLogic.d.ts +11 -0
- package/lib/profile/profileLogic.d.ts.map +1 -0
- package/lib/profile/profileLogic.js +246 -0
- package/lib/profile/profileLogic.js.map +1 -0
- package/lib/typeIndex/typeIndexLogic.d.ts +18 -21
- package/lib/typeIndex/typeIndexLogic.d.ts.map +1 -1
- package/lib/typeIndex/typeIndexLogic.js +304 -296
- package/lib/typeIndex/typeIndexLogic.js.map +1 -1
- package/lib/types.d.ts +17 -0
- package/lib/types.d.ts.map +1 -1
- package/lib/util/containerLogic.d.ts +11 -0
- package/lib/util/containerLogic.d.ts.map +1 -0
- package/lib/{profile/ProfileLogic.js → util/containerLogic.js} +53 -44
- package/lib/util/containerLogic.js.map +1 -0
- package/lib/util/ns.d.ts +2 -0
- package/lib/util/ns.d.ts.map +1 -0
- package/lib/util/ns.js +34 -0
- package/lib/util/ns.js.map +1 -0
- package/lib/util/utilityLogic.d.ts +15 -0
- package/lib/util/utilityLogic.d.ts.map +1 -0
- package/lib/util/utilityLogic.js +272 -0
- package/lib/util/utilityLogic.js.map +1 -0
- package/lib/util/utils.d.ts +8 -0
- package/lib/util/utils.d.ts.map +1 -0
- package/lib/util/utils.js +48 -0
- package/lib/util/utils.js.map +1 -0
- package/package.json +1 -1
- package/src/acl/aclLogic.ts +136 -118
- package/src/authn/SolidAuthnLogic.ts +3 -2
- package/src/chat/chatLogic.ts +225 -0
- package/src/inbox/inboxLogic.ts +57 -0
- package/src/index.ts +121 -30
- package/src/logic/CustomError.ts +5 -1
- package/src/logic/SolidLogic.ts +30 -208
- package/src/logic/solidLogicSingleton.ts +1 -1
- package/src/logic/solidLogicSingletonNew.ts +210 -0
- package/src/profile/profileLogic.ts +125 -0
- package/src/typeIndex/typeIndexLogic.ts +175 -182
- package/src/types.ts +7 -3
- package/src/util/containerLogic.ts +54 -0
- package/src/util/ns.ts +5 -0
- package/src/util/utilityLogic.ts +155 -0
- package/src/util/utils.ts +52 -0
- package/test/aclLogic.test.ts +13 -4
- package/test/chatLogic.test.ts +70 -71
- package/test/container.test.ts +56 -0
- package/test/helpers/dataSetup.ts +134 -0
- package/test/helpers/setup.ts +4 -0
- package/test/inboxLogic.test.ts +39 -38
- package/test/logic.test.ts +10 -9
- package/test/profileLogic.test.ts +246 -0
- package/test/typeIndexLogic.test.ts +487 -30
- package/test/utilityLogic.test.ts +172 -126
- package/test/utils.test.ts +32 -0
- package/lib/chat/ChatLogic.d.ts +0 -26
- package/lib/chat/ChatLogic.d.ts.map +0 -1
- package/lib/chat/ChatLogic.js.map +0 -1
- package/lib/chat/determineChatContainer.d.ts +0 -3
- package/lib/chat/determineChatContainer.d.ts.map +0 -1
- package/lib/chat/determineChatContainer.js +0 -12
- package/lib/chat/determineChatContainer.js.map +0 -1
- package/lib/discovery/discoveryLogic.d.ts +0 -37
- package/lib/discovery/discoveryLogic.d.ts.map +0 -1
- package/lib/discovery/discoveryLogic.js +0 -502
- package/lib/discovery/discoveryLogic.js.map +0 -1
- package/lib/inbox/InboxLogic.d.ts +0 -18
- package/lib/inbox/InboxLogic.d.ts.map +0 -1
- package/lib/inbox/InboxLogic.js.map +0 -1
- package/lib/profile/ProfileLogic.d.ts +0 -13
- package/lib/profile/ProfileLogic.d.ts.map +0 -1
- package/lib/profile/ProfileLogic.js.map +0 -1
- package/lib/util/UtilityLogic.d.ts +0 -27
- package/lib/util/UtilityLogic.d.ts.map +0 -1
- package/lib/util/UtilityLogic.js +0 -216
- package/lib/util/UtilityLogic.js.map +0 -1
- package/lib/util/uri.d.ts +0 -3
- package/lib/util/uri.d.ts.map +0 -1
- package/lib/util/uri.js +0 -9
- package/lib/util/uri.js.map +0 -1
- package/src/chat/ChatLogic.ts +0 -244
- package/src/chat/determineChatContainer.ts +0 -14
- package/src/discovery/discoveryLogic.ts +0 -269
- package/src/inbox/InboxLogic.ts +0 -66
- package/src/profile/ProfileLogic.ts +0 -44
- package/src/util/UtilityLogic.ts +0 -144
- package/src/util/uri.ts +0 -5
- package/test/discoveryLogic.test.ts +0 -712
package/lib/acl/aclLogic.d.ts
CHANGED
|
@@ -1,32 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Simple Access Control
|
|
3
|
-
*
|
|
4
|
-
* This function sets up a simple default ACL for a resource, with
|
|
5
|
-
* RWC for the owner, and a specified access (default none) for the public.
|
|
6
|
-
* In all cases owner has read write control.
|
|
7
|
-
* Parameter lists modes allowed to public
|
|
8
|
-
*
|
|
9
|
-
* @param options
|
|
10
|
-
* @param options.public eg ['Read', 'Write']
|
|
11
|
-
*
|
|
12
|
-
* @returns Resolves with aclDoc uri on successful write
|
|
13
|
-
*/
|
|
14
1
|
import { NamedNode } from "rdflib";
|
|
15
|
-
export declare const
|
|
16
|
-
export declare function
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*/
|
|
28
|
-
export declare function genACLText(docURI: string, me: NamedNode, aclURI: string, options?: {
|
|
29
|
-
defaultForNew?: boolean;
|
|
30
|
-
public?: [];
|
|
31
|
-
}): string | undefined;
|
|
2
|
+
export declare const ACL_LINK: NamedNode;
|
|
3
|
+
export declare function createAclLogic(store: any): {
|
|
4
|
+
findAclDocUrl: (url: string) => Promise<any>;
|
|
5
|
+
setACLUserPublic: (docURI: string, me: NamedNode, options: {
|
|
6
|
+
defaultForNew?: boolean;
|
|
7
|
+
public?: [];
|
|
8
|
+
}) => Promise<NamedNode>;
|
|
9
|
+
genACLText: (docURI: string, me: NamedNode, aclURI: string, options?: {
|
|
10
|
+
defaultForNew?: boolean;
|
|
11
|
+
public?: [];
|
|
12
|
+
}) => string | undefined;
|
|
13
|
+
};
|
|
32
14
|
//# sourceMappingURL=aclLogic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aclLogic.d.ts","sourceRoot":"","sources":["../../src/acl/aclLogic.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"aclLogic.d.ts","sourceRoot":"","sources":["../../src/acl/aclLogic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,SAAS,EAA6B,MAAM,QAAQ,CAAA;AAIpE,eAAO,MAAM,QAAQ,WAEpB,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,KAAA;yBAIE,MAAM;+BAuBhC,MAAM,MACV,SAAS,WACJ;QACL,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,MAAM,CAAC,EAAE,EAAE,CAAA;KACd,KACE,QAAQ,SAAS,CAAC;yBAyEb,MAAM,MACV,SAAS,UACL,MAAM,YACL;QACL,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,MAAM,CAAC,EAAE,EAAE,CAAA;KACd,KACE,MAAM,GAAG,SAAS;EAiCxB"}
|
package/lib/acl/aclLogic.js
CHANGED
|
@@ -1,136 +1,169 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* @param options
|
|
11
|
-
* @param options.public eg ['Read', 'Write']
|
|
12
|
-
*
|
|
13
|
-
* @returns Resolves with aclDoc uri on successful write
|
|
14
|
-
*/
|
|
15
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
-
if (k2 === undefined) k2 = k;
|
|
17
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
-
}
|
|
21
|
-
Object.defineProperty(o, k2, desc);
|
|
22
|
-
}) : (function(o, m, k, k2) {
|
|
23
|
-
if (k2 === undefined) k2 = k;
|
|
24
|
-
o[k2] = m[k];
|
|
25
|
-
}));
|
|
26
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
-
}) : function(o, v) {
|
|
29
|
-
o["default"] = v;
|
|
30
|
-
});
|
|
31
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
32
|
-
if (mod && mod.__esModule) return mod;
|
|
33
|
-
var result = {};
|
|
34
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
35
|
-
__setModuleDefault(result, mod);
|
|
36
|
-
return result;
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
37
10
|
};
|
|
38
|
-
var
|
|
39
|
-
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
40
37
|
};
|
|
41
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.
|
|
39
|
+
exports.createAclLogic = exports.ACL_LINK = void 0;
|
|
43
40
|
var rdflib_1 = require("rdflib");
|
|
44
|
-
var
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
var
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
41
|
+
var ns_1 = require("../util/ns");
|
|
42
|
+
exports.ACL_LINK = (0, rdflib_1.sym)("http://www.iana.org/assignments/link-relations/acl");
|
|
43
|
+
function createAclLogic(store) {
|
|
44
|
+
var ns = ns_1.ns;
|
|
45
|
+
function findAclDocUrl(url) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
47
|
+
var doc, docNode;
|
|
48
|
+
return __generator(this, function (_a) {
|
|
49
|
+
switch (_a.label) {
|
|
50
|
+
case 0:
|
|
51
|
+
doc = store.sym(url);
|
|
52
|
+
return [4 /*yield*/, store.fetcher.load(doc)];
|
|
53
|
+
case 1:
|
|
54
|
+
_a.sent();
|
|
55
|
+
docNode = store.any(doc, exports.ACL_LINK);
|
|
56
|
+
if (!docNode) {
|
|
57
|
+
throw new Error("No ACL link discovered for ".concat(url));
|
|
58
|
+
}
|
|
59
|
+
return [2 /*return*/, docNode.value];
|
|
60
|
+
}
|
|
61
|
+
});
|
|
58
62
|
});
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Simple Access Control
|
|
66
|
+
*
|
|
67
|
+
* This function sets up a simple default ACL for a resource, with
|
|
68
|
+
* RWC for the owner, and a specified access (default none) for the public.
|
|
69
|
+
* In all cases owner has read write control.
|
|
70
|
+
* Parameter lists modes allowed to public
|
|
71
|
+
*
|
|
72
|
+
* @param options
|
|
73
|
+
* @param options.public eg ['Read', 'Write']
|
|
74
|
+
*
|
|
75
|
+
* @returns Resolves with aclDoc uri on successful write
|
|
76
|
+
*/
|
|
77
|
+
function setACLUserPublic(docURI, me, options) {
|
|
78
|
+
var aclDoc = store.any(store.sym(docURI), exports.ACL_LINK);
|
|
79
|
+
return Promise.resolve()
|
|
80
|
+
.then(function () {
|
|
81
|
+
if (aclDoc) {
|
|
82
|
+
return aclDoc;
|
|
83
|
+
}
|
|
84
|
+
return fetchACLRel(docURI).catch(function (err) {
|
|
85
|
+
throw new Error("Error fetching rel=ACL header for ".concat(docURI, ": ").concat(err));
|
|
86
|
+
});
|
|
69
87
|
})
|
|
70
|
-
.then(function (
|
|
71
|
-
|
|
72
|
-
|
|
88
|
+
.then(function (aclDoc) {
|
|
89
|
+
var aclText = genACLText(docURI, me, aclDoc.uri, options);
|
|
90
|
+
if (!store.fetcher) {
|
|
91
|
+
throw new Error('Cannot PUT this, store has no fetcher');
|
|
73
92
|
}
|
|
74
|
-
return
|
|
93
|
+
return store.fetcher
|
|
94
|
+
.webOperation('PUT', aclDoc.uri, {
|
|
95
|
+
data: aclText,
|
|
96
|
+
contentType: 'text/turtle'
|
|
97
|
+
})
|
|
98
|
+
.then(function (result) {
|
|
99
|
+
if (!result.ok) {
|
|
100
|
+
throw new Error('Error writing ACL text: ' + result.error);
|
|
101
|
+
}
|
|
102
|
+
return aclDoc;
|
|
103
|
+
});
|
|
75
104
|
});
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
exports.setACLUserPublic = setACLUserPublic;
|
|
79
|
-
/**
|
|
80
|
-
* @param docURI
|
|
81
|
-
* @returns
|
|
82
|
-
*/
|
|
83
|
-
function fetchACLRel(docURI) {
|
|
84
|
-
var fetcher = solidLogicSingleton_1.solidLogicSingleton.store.fetcher;
|
|
85
|
-
if (!fetcher) {
|
|
86
|
-
throw new Error('Cannot fetch ACL rel, store has no fetcher');
|
|
87
105
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
106
|
+
/**
|
|
107
|
+
* @param docURI
|
|
108
|
+
* @returns
|
|
109
|
+
*/
|
|
110
|
+
function fetchACLRel(docURI) {
|
|
111
|
+
var fetcher = store.fetcher;
|
|
112
|
+
if (!fetcher) {
|
|
113
|
+
throw new Error('Cannot fetch ACL rel, store has no fetcher');
|
|
95
114
|
}
|
|
96
|
-
return
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
*/
|
|
107
|
-
function genACLText(docURI, me, aclURI, options) {
|
|
108
|
-
if (options === void 0) { options = {}; }
|
|
109
|
-
var optPublic = options.public || [];
|
|
110
|
-
var g = (0, rdflib_1.graph)();
|
|
111
|
-
var auth = (0, rdflib_1.Namespace)('http://www.w3.org/ns/auth/acl#');
|
|
112
|
-
var a = g.sym("".concat(aclURI, "#a1"));
|
|
113
|
-
var acl = g.sym(aclURI);
|
|
114
|
-
var doc = g.sym(docURI);
|
|
115
|
-
g.add(a, exports.ns.rdf('type'), auth('Authorization'), acl);
|
|
116
|
-
g.add(a, auth('accessTo'), doc, acl);
|
|
117
|
-
if (options.defaultForNew) {
|
|
118
|
-
g.add(a, auth('default'), doc, acl);
|
|
115
|
+
return fetcher.load(docURI).then(function (result) {
|
|
116
|
+
if (!result.ok) {
|
|
117
|
+
throw new Error('fetchACLRel: While loading:' + result.error);
|
|
118
|
+
}
|
|
119
|
+
var aclDoc = store.any(store.sym(docURI), exports.ACL_LINK);
|
|
120
|
+
if (!aclDoc) {
|
|
121
|
+
throw new Error('fetchACLRel: No Link rel=ACL header for ' + docURI);
|
|
122
|
+
}
|
|
123
|
+
return aclDoc;
|
|
124
|
+
});
|
|
119
125
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
126
|
+
/**
|
|
127
|
+
* @param docURI
|
|
128
|
+
* @param me
|
|
129
|
+
* @param aclURI
|
|
130
|
+
* @param options
|
|
131
|
+
*
|
|
132
|
+
* @returns Serialized ACL
|
|
133
|
+
*/
|
|
134
|
+
function genACLText(docURI, me, aclURI, options) {
|
|
135
|
+
if (options === void 0) { options = {}; }
|
|
136
|
+
var optPublic = options.public || [];
|
|
137
|
+
var g = (0, rdflib_1.graph)();
|
|
138
|
+
var auth = (0, rdflib_1.Namespace)('http://www.w3.org/ns/auth/acl#');
|
|
139
|
+
var a = g.sym("".concat(aclURI, "#a1"));
|
|
140
|
+
var acl = g.sym(aclURI);
|
|
141
|
+
var doc = g.sym(docURI);
|
|
142
|
+
g.add(a, ns.rdf('type'), auth('Authorization'), acl);
|
|
127
143
|
g.add(a, auth('accessTo'), doc, acl);
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
144
|
+
if (options.defaultForNew) {
|
|
145
|
+
g.add(a, auth('default'), doc, acl);
|
|
146
|
+
}
|
|
147
|
+
g.add(a, auth('agent'), me, acl);
|
|
148
|
+
g.add(a, auth('mode'), auth('Read'), acl);
|
|
149
|
+
g.add(a, auth('mode'), auth('Write'), acl);
|
|
150
|
+
g.add(a, auth('mode'), auth('Control'), acl);
|
|
151
|
+
if (optPublic.length) {
|
|
152
|
+
a = g.sym("".concat(aclURI, "#a2"));
|
|
153
|
+
g.add(a, ns.rdf('type'), auth('Authorization'), acl);
|
|
154
|
+
g.add(a, auth('accessTo'), doc, acl);
|
|
155
|
+
g.add(a, auth('agentClass'), ns.foaf('Agent'), acl);
|
|
156
|
+
for (var p = 0; p < optPublic.length; p++) {
|
|
157
|
+
g.add(a, auth('mode'), auth(optPublic[p]), acl); // Like 'Read' etc
|
|
158
|
+
}
|
|
131
159
|
}
|
|
160
|
+
return (0, rdflib_1.serialize)(acl, g, aclURI);
|
|
132
161
|
}
|
|
133
|
-
return
|
|
162
|
+
return {
|
|
163
|
+
findAclDocUrl: findAclDocUrl,
|
|
164
|
+
setACLUserPublic: setACLUserPublic,
|
|
165
|
+
genACLText: genACLText
|
|
166
|
+
};
|
|
134
167
|
}
|
|
135
|
-
exports.
|
|
168
|
+
exports.createAclLogic = createAclLogic;
|
|
136
169
|
//# sourceMappingURL=aclLogic.js.map
|
package/lib/acl/aclLogic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aclLogic.js","sourceRoot":"","sources":["../../src/acl/aclLogic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aclLogic.js","sourceRoot":"","sources":["../../src/acl/aclLogic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidAuthnLogic.d.ts","sourceRoot":"","sources":["../../src/authn/SolidAuthnLogic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAO,MAAM,QAAQ,CAAC;AAGnD,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"SolidAuthnLogic.d.ts","sourceRoot":"","sources":["../../src/authn/SolidAuthnLogic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAO,MAAM,QAAQ,CAAC;AAGnD,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE7D,qBAAa,eAAgB,YAAW,UAAU;IAChD,OAAO,CAAC,OAAO,CAAU;gBAEb,gBAAgB,EAAE,OAAO;IAKrC,IAAI,WAAW,IAAG,OAAO,CAAwB;IAEjD,WAAW,IAAI,SAAS,GAAG,IAAI;IAW/B;;;;;;OAMG;IACG,SAAS,CAAC,CAAC,EACf,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,KAAK,CAAC,GAC5C,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC;IAwDhC;;;;;;OAMG;IACH,QAAQ,CACN,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,EAChC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,SAAS,GAAG,IAAI;IAanB;;OAEG;IACH,gBAAgB,CAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,GAAG,IAAI;CAKpF"}
|
|
@@ -124,11 +124,11 @@ var SolidAuthnLogic = /** @class */ (function () {
|
|
|
124
124
|
curUrl = new URL(window.location.href);
|
|
125
125
|
if (curUrl.hash !== postLoginRedirectHash) {
|
|
126
126
|
if (history.pushState) {
|
|
127
|
-
//
|
|
127
|
+
// debug.log('Setting window.location.has using pushState')
|
|
128
128
|
history.pushState(null, document.title, postLoginRedirectHash);
|
|
129
129
|
}
|
|
130
130
|
else {
|
|
131
|
-
//
|
|
131
|
+
// debug.warn('Setting window.location.has using location.hash')
|
|
132
132
|
location.hash = postLoginRedirectHash;
|
|
133
133
|
}
|
|
134
134
|
curUrl.hash = postLoginRedirectHash;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidAuthnLogic.js","sourceRoot":"","sources":["../../src/authn/SolidAuthnLogic.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmD;AACnD,uCAAuD;AACvD,mDAAsC;
|
|
1
|
+
{"version":3,"file":"SolidAuthnLogic.js","sourceRoot":"","sources":["../../src/authn/SolidAuthnLogic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NamedNode } from "rdflib";
|
|
2
|
+
import { CreatedPaneOptions, NewPaneOptions } from "../types";
|
|
3
|
+
export declare function createChatLogic(store: any, profileLogic: any): {
|
|
4
|
+
setAcl: (chatContainer: NamedNode, me: NamedNode, invitee: NamedNode) => Promise<void>;
|
|
5
|
+
addToPrivateTypeIndex: (chatThing: any, me: any) => Promise<void>;
|
|
6
|
+
findChat: (invitee: NamedNode) => Promise<{
|
|
7
|
+
me: any;
|
|
8
|
+
chatContainer: NamedNode;
|
|
9
|
+
exists: boolean;
|
|
10
|
+
}>;
|
|
11
|
+
createChatThing: (chatContainer: NamedNode, me: NamedNode) => Promise<NamedNode>;
|
|
12
|
+
getChat: (invitee: NamedNode, createIfMissing?: boolean) => Promise<NamedNode | null>;
|
|
13
|
+
sendInvite: (invitee: NamedNode, chatThing: NamedNode) => Promise<void>;
|
|
14
|
+
mintNew: (newPaneOptions: NewPaneOptions) => Promise<CreatedPaneOptions>;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=chatLogic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatLogic.d.ts","sourceRoot":"","sources":["../../src/chat/chatLogic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,QAAQ,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAM7D,wBAAgB,eAAe,CAAC,KAAK,KAAA,EAAE,YAAY,KAAA;4BAI5B,SAAS,MACpB,SAAS,WACJ,SAAS,KACnB,QAAQ,IAAI,CAAC;;wBA2EiB,SAAS;;;;;qCAgBvB,SAAS,MACpB,SAAS,KACd,QAAQ,SAAS,CAAC;uBAmER,SAAS,gCAEnB,QAAQ,SAAS,GAAG,IAAI,CAAC;0BAgBO,SAAS,aAAa,SAAS;8BA7EjC,cAAc,KAAG,QAAQ,kBAAkB,CAAC;EA6GhF"}
|