jinaga-server 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -0
- package/dist/authentication/authentication-device.d.ts +3 -1
- package/dist/authentication/authentication-device.js +3 -0
- package/dist/authentication/authentication-device.js.map +1 -1
- package/dist/authentication/authentication-impl.d.ts +3 -2
- package/dist/authentication/authentication-impl.js +3 -0
- package/dist/authentication/authentication-impl.js.map +1 -1
- package/dist/authentication/authentication-session.d.ts +4 -2
- package/dist/authentication/authentication-session.js +7 -2
- package/dist/authentication/authentication-session.js.map +1 -1
- package/dist/authentication.d.ts +5 -4
- package/dist/authentication.js +3 -0
- package/dist/authentication.js.map +1 -1
- package/dist/authorization/authorization-keystore.d.ts +5 -3
- package/dist/authorization/authorization-keystore.js +12 -9
- package/dist/authorization/authorization-keystore.js.map +1 -1
- package/dist/http/feed-cache.d.ts +5 -0
- package/dist/http/feed-cache.js +3 -0
- package/dist/http/feed-cache.js.map +1 -0
- package/dist/http/node-http.js +4 -1
- package/dist/http/node-http.js.map +1 -1
- package/dist/http/router.d.ts +5 -1
- package/dist/http/router.js +157 -24
- package/dist/http/router.js.map +1 -1
- package/dist/jinaga-server.js +6 -4
- package/dist/jinaga-server.js.map +1 -1
- package/dist/memory/memory-feed-cache.d.ts +7 -0
- package/dist/memory/memory-feed-cache.js +17 -0
- package/dist/memory/memory-feed-cache.js.map +1 -0
- package/dist/postgres/postgres-store.d.ts +5 -2
- package/dist/postgres/postgres-store.js +53 -28
- package/dist/postgres/postgres-store.js.map +1 -1
- package/dist/postgres/specification-result-sql.d.ts +11 -4
- package/dist/postgres/specification-result-sql.js +302 -5
- package/dist/postgres/specification-result-sql.js.map +1 -1
- package/dist/postgres/specification-sql.d.ts +14 -3
- package/dist/postgres/specification-sql.js +233 -100
- package/dist/postgres/specification-sql.js.map +1 -1
- package/package.json +2 -2
- package/src/authentication/authentication-device.ts +6 -0
- package/src/authentication/authentication-impl.ts +6 -3
- package/src/authentication/authentication-session.ts +11 -3
- package/src/authentication.ts +18 -5
- package/src/authorization/authorization-keystore.ts +14 -8
- package/src/http/feed-cache.ts +6 -0
- package/src/http/node-http.ts +5 -2
- package/src/http/router.ts +179 -31
- package/src/jinaga-server.ts +11 -9
- package/src/memory/memory-feed-cache.ts +15 -0
- package/src/postgres/postgres-store.ts +59 -31
- package/src/postgres/specification-result-sql.ts +450 -10
- package/src/postgres/specification-sql.ts +335 -115
- package/test/authorization/authorizationSpec.ts +11 -2
- package/test/postgres/postgresSpec.ts +31 -25
- package/test/postgres/postgresSpecificationSpec.ts +40 -68
- package/dist/postgres/query-description-builder.d.ts +0 -13
- package/dist/postgres/query-description-builder.js +0 -104
- package/dist/postgres/query-description-builder.js.map +0 -1
- package/dist/postgres/query-description.d.ts +0 -71
- package/dist/postgres/query-description.js +0 -256
- package/dist/postgres/query-description.js.map +0 -1
- package/src/postgres/query-description-builder.ts +0 -116
- package/src/postgres/query-description.ts +0 -385
|
@@ -1,119 +1,252 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sqlFromSpecification = void 0;
|
|
3
|
+
exports.sqlFromFeed = exports.sqlFromSpecification = void 0;
|
|
4
|
+
const jinaga_1 = require("jinaga");
|
|
4
5
|
const maps_1 = require("./maps");
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
;
|
|
7
|
+
class QueryDescription {
|
|
8
|
+
constructor(inputs, parameters, outputs, edges, notExistsConditions = []) {
|
|
9
|
+
this.inputs = inputs;
|
|
10
|
+
this.parameters = parameters;
|
|
11
|
+
this.outputs = outputs;
|
|
12
|
+
this.edges = edges;
|
|
13
|
+
this.notExistsConditions = notExistsConditions;
|
|
14
|
+
}
|
|
15
|
+
generateSqlQuery(bookmark, limit) {
|
|
16
|
+
const hashes = this.outputs
|
|
17
|
+
.map(output => `f${output.factIndex}.hash as hash${output.factIndex}`)
|
|
18
|
+
.join(", ");
|
|
19
|
+
const factIds = this.outputs
|
|
20
|
+
.map(output => `f${output.factIndex}.fact_id`)
|
|
21
|
+
.join(", ");
|
|
22
|
+
const firstEdge = this.edges[0];
|
|
23
|
+
const predecessorFact = this.inputs.find(i => i.factIndex === firstEdge.predecessorFactIndex);
|
|
24
|
+
const successorFact = this.inputs.find(i => i.factIndex === firstEdge.successorFactIndex);
|
|
25
|
+
const firstFactIndex = predecessorFact ? predecessorFact.factIndex : successorFact.factIndex;
|
|
26
|
+
const writtenFactIndexes = new Set().add(firstFactIndex);
|
|
27
|
+
const joins = generateJoins(this.edges, writtenFactIndexes);
|
|
28
|
+
const inputWhereClauses = this.inputs
|
|
29
|
+
.filter(input => input.factTypeParameter !== 0)
|
|
30
|
+
.map(input => `f${input.factIndex}.fact_type_id = $${input.factTypeParameter} AND f${input.factIndex}.hash = $${input.factHashParameter}`)
|
|
31
|
+
.join(" AND ");
|
|
32
|
+
const notExistsWhereClauses = this.notExistsConditions
|
|
33
|
+
.map(notExistsWhereClause => ` AND NOT EXISTS (${generateNotExistsWhereClause(notExistsWhereClause, writtenFactIndexes)})`)
|
|
34
|
+
.join("");
|
|
35
|
+
const bookmarkParameter = this.parameters.length + 1;
|
|
36
|
+
const limitParameter = bookmarkParameter + 1;
|
|
37
|
+
const sql = `SELECT ${hashes}, sort(array[${factIds}], 'desc') as bookmark FROM public.fact f${firstFactIndex}${joins.join("")} WHERE ${inputWhereClauses}${notExistsWhereClauses} AND sort(array[${factIds}], 'desc') > $${bookmarkParameter} ORDER BY bookmark ASC LIMIT $${limitParameter}`;
|
|
38
|
+
const bookmarkValue = parseBookmark(bookmark);
|
|
39
|
+
return {
|
|
40
|
+
sql,
|
|
41
|
+
parameters: [...this.parameters, bookmarkValue, limit],
|
|
42
|
+
labels: this.outputs.map(output => ({
|
|
43
|
+
type: output.type,
|
|
44
|
+
index: output.factIndex
|
|
45
|
+
})),
|
|
46
|
+
bookmark: "[]"
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function generateJoins(edges, writtenFactIndexes) {
|
|
51
|
+
const joins = [];
|
|
52
|
+
edges.forEach(edge => {
|
|
53
|
+
if (writtenFactIndexes.has(edge.predecessorFactIndex)) {
|
|
54
|
+
if (writtenFactIndexes.has(edge.successorFactIndex)) {
|
|
55
|
+
joins.push(` JOIN public.edge e${edge.edgeIndex}` +
|
|
56
|
+
` ON e${edge.edgeIndex}.predecessor_fact_id = f${edge.predecessorFactIndex}.fact_id` +
|
|
57
|
+
` AND e${edge.edgeIndex}.successor_fact_id = f${edge.successorFactIndex}.fact_id` +
|
|
58
|
+
` AND e${edge.edgeIndex}.role_id = $${edge.roleParameter}`);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
joins.push(` JOIN public.edge e${edge.edgeIndex}` +
|
|
62
|
+
` ON e${edge.edgeIndex}.predecessor_fact_id = f${edge.predecessorFactIndex}.fact_id` +
|
|
63
|
+
` AND e${edge.edgeIndex}.role_id = $${edge.roleParameter}`);
|
|
64
|
+
joins.push(` JOIN public.fact f${edge.successorFactIndex}` +
|
|
65
|
+
` ON f${edge.successorFactIndex}.fact_id = e${edge.edgeIndex}.successor_fact_id`);
|
|
66
|
+
writtenFactIndexes.add(edge.successorFactIndex);
|
|
18
67
|
}
|
|
19
68
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const { queryDescriptions, knownFacts } = this.addEdges(initialQueryDescription, givenFacts, [], "", specification.matches);
|
|
43
|
-
// The final query description represents the complete tuple.
|
|
44
|
-
// Build projections onto that one.
|
|
45
|
-
const finalQueryDescription = queryDescriptions[queryDescriptions.length - 1];
|
|
46
|
-
if (Array.isArray(specification.childProjections)) {
|
|
47
|
-
const queryDescriptionsWithProjections = this.addProjections(finalQueryDescription, knownFacts, specification.childProjections);
|
|
48
|
-
return [...queryDescriptions, ...queryDescriptionsWithProjections];
|
|
69
|
+
else if (writtenFactIndexes.has(edge.successorFactIndex)) {
|
|
70
|
+
joins.push(` JOIN public.edge e${edge.edgeIndex}` +
|
|
71
|
+
` ON e${edge.edgeIndex}.successor_fact_id = f${edge.successorFactIndex}.fact_id` +
|
|
72
|
+
` AND e${edge.edgeIndex}.role_id = $${edge.roleParameter}`);
|
|
73
|
+
joins.push(` JOIN public.fact f${edge.predecessorFactIndex}` +
|
|
74
|
+
` ON f${edge.predecessorFactIndex}.fact_id = e${edge.edgeIndex}.predecessor_fact_id`);
|
|
75
|
+
writtenFactIndexes.add(edge.predecessorFactIndex);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
throw new Error("Neither predecessor nor successor fact has been written");
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return joins;
|
|
82
|
+
}
|
|
83
|
+
function generateNotExistsWhereClause(notExistsWhereClause, outerFactIndexes) {
|
|
84
|
+
const firstEdge = notExistsWhereClause.edges[0];
|
|
85
|
+
const writtenFactIndexes = new Set(outerFactIndexes);
|
|
86
|
+
const firstJoin = [];
|
|
87
|
+
const whereClause = [];
|
|
88
|
+
if (writtenFactIndexes.has(firstEdge.predecessorFactIndex)) {
|
|
89
|
+
if (writtenFactIndexes.has(firstEdge.successorFactIndex)) {
|
|
90
|
+
throw new Error("Not yet implemented");
|
|
49
91
|
}
|
|
50
92
|
else {
|
|
51
|
-
|
|
93
|
+
whereClause.push(`e${firstEdge.edgeIndex}.predecessor_fact_id = f${firstEdge.predecessorFactIndex}.fact_id` +
|
|
94
|
+
` AND e${firstEdge.edgeIndex}.role_id = $${firstEdge.roleParameter}`);
|
|
95
|
+
firstJoin.push(` JOIN public.fact f${firstEdge.successorFactIndex}` +
|
|
96
|
+
` ON f${firstEdge.successorFactIndex}.fact_id = e${firstEdge.edgeIndex}.successor_fact_id`);
|
|
97
|
+
writtenFactIndexes.add(firstEdge.successorFactIndex);
|
|
52
98
|
}
|
|
53
99
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
100
|
+
else if (writtenFactIndexes.has(firstEdge.successorFactIndex)) {
|
|
101
|
+
whereClause.push(`e${firstEdge.edgeIndex}.successor_fact_id = f${firstEdge.successorFactIndex}.fact_id` +
|
|
102
|
+
` AND e${firstEdge.edgeIndex}.role_id = $${firstEdge.roleParameter}`);
|
|
103
|
+
firstJoin.push(` JOIN public.fact f${firstEdge.predecessorFactIndex}` +
|
|
104
|
+
` ON f${firstEdge.predecessorFactIndex}.fact_id = e${firstEdge.edgeIndex}.predecessor_fact_id`);
|
|
105
|
+
writtenFactIndexes.add(firstEdge.predecessorFactIndex);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
throw new Error("Neither predecessor nor successor fact has been written");
|
|
109
|
+
}
|
|
110
|
+
const tailJoins = generateJoins(notExistsWhereClause.edges.slice(1), writtenFactIndexes);
|
|
111
|
+
const joins = firstJoin.concat(tailJoins);
|
|
112
|
+
return `SELECT 1 FROM public.edge e${firstEdge.edgeIndex}${joins.join("")} WHERE ${whereClause.join(" AND ")}`;
|
|
113
|
+
}
|
|
114
|
+
function parseBookmark(bookmark) {
|
|
115
|
+
if (bookmark === undefined || bookmark === null || bookmark === "") {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
return bookmark.split(".").map(str => parseInt(str));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
class DescriptionBuilder {
|
|
123
|
+
constructor(factTypes, roleMap) {
|
|
124
|
+
this.factTypes = factTypes;
|
|
125
|
+
this.roleMap = roleMap;
|
|
126
|
+
}
|
|
127
|
+
isSatisfiable(feed, edges) {
|
|
128
|
+
for (const edge of edges) {
|
|
129
|
+
const successor = feed.facts.find(f => f.factIndex === edge.successorFactIndex);
|
|
130
|
+
if (!successor) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
const predecessor = feed.facts.find(f => f.factIndex === edge.predecessorFactIndex);
|
|
134
|
+
if (!predecessor) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
const successorFactTypeId = (0, maps_1.getFactTypeId)(this.factTypes, successor.factType);
|
|
138
|
+
if (!successorFactTypeId) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
if (!(0, maps_1.getRoleId)(this.roleMap, successorFactTypeId, edge.roleName)) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
const predecessorFactTypeId = (0, maps_1.getFactTypeId)(this.factTypes, predecessor.factType);
|
|
145
|
+
if (!predecessorFactTypeId) {
|
|
146
|
+
return false;
|
|
92
147
|
}
|
|
93
148
|
}
|
|
94
|
-
|
|
95
|
-
return { queryDescriptions, knownFacts };
|
|
149
|
+
return true;
|
|
96
150
|
}
|
|
97
|
-
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
151
|
+
buildDescription(feed) {
|
|
152
|
+
const parameters = [];
|
|
153
|
+
function addParameter(value) {
|
|
154
|
+
parameters.push(value);
|
|
155
|
+
return parameters.length;
|
|
156
|
+
}
|
|
157
|
+
// Allocate parameters for the inputs.
|
|
158
|
+
const inputs = feed.inputs.map(input => this.buildInputDescription(feed, input, addParameter));
|
|
159
|
+
// Allocate parameters for the edge roles.
|
|
160
|
+
const edges = feed.edges.map(edge => this.buildEdgeDescription(feed, edge, addParameter));
|
|
161
|
+
// Allocate parameters for the conditional roles.
|
|
162
|
+
const satisfiableNotExistsConditions = feed.notExistsConditions.filter(condition => this.isSatisfiable(feed, condition.edges));
|
|
163
|
+
const notExistsConditions = satisfiableNotExistsConditions.map(condition => this.buildNotExistsConditionDescription(feed, condition, addParameter));
|
|
164
|
+
const outputs = feed.outputs.map(output => this.buildOutputDescription(feed, output));
|
|
165
|
+
return new QueryDescription(inputs, parameters, outputs, edges, notExistsConditions);
|
|
166
|
+
}
|
|
167
|
+
buildInputDescription(feed, input, addParameter) {
|
|
168
|
+
const fact = feed.facts.find(f => f.factIndex === input.factIndex);
|
|
169
|
+
if (!fact) {
|
|
170
|
+
throw new Error(`Fact not found: ${input.factIndex}`);
|
|
171
|
+
}
|
|
172
|
+
const factTypeId = (0, maps_1.getFactTypeId)(this.factTypes, fact.factType);
|
|
173
|
+
if (!factTypeId) {
|
|
174
|
+
throw new Error(`Fact type not found: ${fact.factType}`);
|
|
175
|
+
}
|
|
176
|
+
const factTypeParameter = addParameter(factTypeId);
|
|
177
|
+
const factHashParameter = addParameter(input.factHash);
|
|
178
|
+
return {
|
|
179
|
+
factIndex: input.factIndex,
|
|
180
|
+
factTypeId,
|
|
181
|
+
factTypeParameter,
|
|
182
|
+
factHash: input.factHash,
|
|
183
|
+
factHashParameter
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
buildEdgeDescription(feed, edge, addParameter) {
|
|
187
|
+
const fact = feed.facts.find(f => f.factIndex === edge.successorFactIndex);
|
|
188
|
+
if (!fact) {
|
|
189
|
+
throw new Error(`Fact not found: ${edge.successorFactIndex}`);
|
|
190
|
+
}
|
|
191
|
+
const factTypeId = (0, maps_1.getFactTypeId)(this.factTypes, fact.factType);
|
|
192
|
+
if (!factTypeId) {
|
|
193
|
+
throw new Error(`Fact type not found: ${fact.factType}`);
|
|
194
|
+
}
|
|
195
|
+
const roleId = (0, maps_1.getRoleId)(this.roleMap, factTypeId, edge.roleName);
|
|
196
|
+
if (!roleId) {
|
|
197
|
+
throw new Error(`Role not found: ${fact.factType}.${edge.roleName}`);
|
|
198
|
+
}
|
|
199
|
+
const roleParameter = addParameter(roleId);
|
|
200
|
+
return {
|
|
201
|
+
edgeIndex: edge.edgeIndex,
|
|
202
|
+
predecessorFactIndex: edge.predecessorFactIndex,
|
|
203
|
+
successorFactIndex: edge.successorFactIndex,
|
|
204
|
+
roleParameter
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
buildOutputDescription(feed, output) {
|
|
208
|
+
const fact = feed.facts.find(f => f.factIndex === output.factIndex);
|
|
209
|
+
if (!fact) {
|
|
210
|
+
throw new Error(`Fact not found: ${output.factIndex}`);
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
factIndex: output.factIndex,
|
|
214
|
+
type: fact.factType
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
buildNotExistsConditionDescription(feed, condition, addParameter) {
|
|
218
|
+
const edges = condition.edges.map(edge => this.buildEdgeDescription(feed, edge, addParameter));
|
|
219
|
+
const notExistsConditions = condition.notExistsConditions.map(condition => this.buildNotExistsConditionDescription(feed, condition, addParameter));
|
|
220
|
+
return {
|
|
221
|
+
edges,
|
|
222
|
+
notExistsConditions
|
|
223
|
+
};
|
|
108
224
|
}
|
|
109
225
|
}
|
|
110
226
|
function sqlFromSpecification(start, bookmarks, limit, specification, factTypes, roleMap) {
|
|
227
|
+
const feeds = (0, jinaga_1.buildFeeds)(start, specification);
|
|
111
228
|
const descriptionBuilder = new DescriptionBuilder(factTypes, roleMap);
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
229
|
+
const feedAndBookmark = feeds.map((feed, index) => ({
|
|
230
|
+
feed,
|
|
231
|
+
bookmark: bookmarks[index]
|
|
232
|
+
}));
|
|
233
|
+
const satisfiableFeedsAndBookmarks = feedAndBookmark.filter(fb => descriptionBuilder.isSatisfiable(fb.feed, fb.feed.edges));
|
|
234
|
+
const sqlQueries = satisfiableFeedsAndBookmarks.map(fb => {
|
|
235
|
+
const description = descriptionBuilder.buildDescription(fb.feed);
|
|
236
|
+
const sql = description.generateSqlQuery(fb.bookmark, limit);
|
|
237
|
+
return sql;
|
|
238
|
+
});
|
|
239
|
+
return sqlQueries;
|
|
117
240
|
}
|
|
118
241
|
exports.sqlFromSpecification = sqlFromSpecification;
|
|
242
|
+
function sqlFromFeed(feed, bookmark, limit, factTypes, roleMap) {
|
|
243
|
+
const descriptionBuilder = new DescriptionBuilder(factTypes, roleMap);
|
|
244
|
+
if (!descriptionBuilder.isSatisfiable(feed, feed.edges)) {
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
const description = descriptionBuilder.buildDescription(feed);
|
|
248
|
+
const sql = description.generateSqlQuery(bookmark, limit);
|
|
249
|
+
return sql;
|
|
250
|
+
}
|
|
251
|
+
exports.sqlFromFeed = sqlFromFeed;
|
|
119
252
|
//# sourceMappingURL=specification-sql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specification-sql.js","sourceRoot":"","sources":["../../src/postgres/specification-sql.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"specification-sql.js","sourceRoot":"","sources":["../../src/postgres/specification-sql.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jinaga-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Application-agnostic back end for web applications",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"express": "^4.18.1",
|
|
46
|
-
"jinaga": "^4.0
|
|
46
|
+
"jinaga": "^4.1.0",
|
|
47
47
|
"node-forge": "^1.3.1",
|
|
48
48
|
"passport": "^0.6.0",
|
|
49
49
|
"pg": "^8.7.1"
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
FactEnvelope,
|
|
4
4
|
FactRecord,
|
|
5
5
|
FactReference,
|
|
6
|
+
Feed,
|
|
6
7
|
Fork,
|
|
7
8
|
LoginResponse,
|
|
8
9
|
Observable,
|
|
@@ -10,6 +11,7 @@ import {
|
|
|
10
11
|
Specification,
|
|
11
12
|
UserIdentity,
|
|
12
13
|
} from "jinaga";
|
|
14
|
+
import { FactFeed } from "jinaga/dist/storage";
|
|
13
15
|
|
|
14
16
|
import { Keystore } from "../keystore";
|
|
15
17
|
import { Authentication } from "./authentication";
|
|
@@ -50,6 +52,10 @@ export class AuthenticationDevice implements Authentication {
|
|
|
50
52
|
return this.inner.read(start, specification);
|
|
51
53
|
}
|
|
52
54
|
|
|
55
|
+
feed(feed: Feed, bookmark: string): Promise<FactFeed> {
|
|
56
|
+
return this.inner.feed(feed, bookmark);
|
|
57
|
+
}
|
|
58
|
+
|
|
53
59
|
whichExist(references: FactReference[]): Promise<FactReference[]> {
|
|
54
60
|
throw new Error("whichExist method not implemented on AuthenticationDevice.");
|
|
55
61
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Channel, FactEnvelope, FactRecord, FactReference, Fork, Observable, Query, Specification, WebClient } from "jinaga";
|
|
1
|
+
import { Channel, FactEnvelope, FactRecord, FactReference, Feed, Fork, Observable, Query, Specification, WebClient } from "jinaga";
|
|
2
|
+
import { FactFeed } from "jinaga/dist/storage";
|
|
2
3
|
|
|
3
4
|
import { Authentication } from "./authentication";
|
|
4
5
|
|
|
@@ -7,8 +8,6 @@ export class Principal {
|
|
|
7
8
|
}
|
|
8
9
|
|
|
9
10
|
export class AuthenticationImpl implements Authentication {
|
|
10
|
-
private principal: Principal;
|
|
11
|
-
|
|
12
11
|
constructor(private inner: Fork, private client: WebClient) {
|
|
13
12
|
}
|
|
14
13
|
|
|
@@ -37,6 +36,10 @@ export class AuthenticationImpl implements Authentication {
|
|
|
37
36
|
return this.inner.read(start, specification);
|
|
38
37
|
}
|
|
39
38
|
|
|
39
|
+
feed(feed: Feed, bookmark: string): Promise<FactFeed> {
|
|
40
|
+
return this.inner.feed(feed, bookmark);
|
|
41
|
+
}
|
|
42
|
+
|
|
40
43
|
whichExist(references: FactReference[]): Promise<FactReference[]> {
|
|
41
44
|
throw new Error("whichExist method not implemented on AuthenticationImpl.");
|
|
42
45
|
}
|
|
@@ -8,10 +8,12 @@ import {
|
|
|
8
8
|
Feed,
|
|
9
9
|
LoginResponse,
|
|
10
10
|
Observable,
|
|
11
|
+
ObservableSource,
|
|
11
12
|
Query,
|
|
12
13
|
Specification,
|
|
13
14
|
UserIdentity,
|
|
14
15
|
} from "jinaga";
|
|
16
|
+
import { FactFeed } from "jinaga/dist/storage";
|
|
15
17
|
|
|
16
18
|
import { Keystore } from "../keystore";
|
|
17
19
|
import { Authentication } from "./authentication";
|
|
@@ -20,7 +22,7 @@ export class AuthenticationSession implements Authentication {
|
|
|
20
22
|
private authorizationEngine: AuthorizationEngine | null;
|
|
21
23
|
|
|
22
24
|
constructor(
|
|
23
|
-
private inner:
|
|
25
|
+
private inner: ObservableSource,
|
|
24
26
|
private keystore: Keystore,
|
|
25
27
|
authorizationRules: AuthorizationRules | null,
|
|
26
28
|
private userIdentity: UserIdentity,
|
|
@@ -65,7 +67,9 @@ export class AuthenticationSession implements Authentication {
|
|
|
65
67
|
async save(envelopes: FactEnvelope[]): Promise<FactEnvelope[]> {
|
|
66
68
|
const userFact = await this.keystore.getUserFact(this.userIdentity);
|
|
67
69
|
const facts = envelopes.map(envelope => envelope.fact);
|
|
68
|
-
const authorizedFacts =
|
|
70
|
+
const authorizedFacts = this.authorizationEngine
|
|
71
|
+
? await this.authorizationEngine.authorizeFacts(facts, userFact)
|
|
72
|
+
: facts;
|
|
69
73
|
const signedFacts = await this.keystore.signFacts(this.userIdentity, authorizedFacts);
|
|
70
74
|
return await this.inner.save(signedFacts);
|
|
71
75
|
}
|
|
@@ -78,6 +82,10 @@ export class AuthenticationSession implements Authentication {
|
|
|
78
82
|
return this.inner.read(start, specification);
|
|
79
83
|
}
|
|
80
84
|
|
|
85
|
+
feed(feed: Feed, bookmark: string): Promise<FactFeed> {
|
|
86
|
+
return this.inner.feed(feed, bookmark);
|
|
87
|
+
}
|
|
88
|
+
|
|
81
89
|
whichExist(references: FactReference[]): Promise<FactReference[]> {
|
|
82
90
|
throw new Error("WhichExist method not implemented on AuthenticationSession.");
|
|
83
91
|
}
|
|
@@ -87,7 +95,7 @@ export class AuthenticationSession implements Authentication {
|
|
|
87
95
|
}
|
|
88
96
|
|
|
89
97
|
addChannel(fact: FactReference, query: Query): Channel {
|
|
90
|
-
return
|
|
98
|
+
return new Channel(async () => {});
|
|
91
99
|
}
|
|
92
100
|
|
|
93
101
|
removeChannel(channel: Channel): void {
|
package/src/authentication.ts
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
FactEnvelope,
|
|
3
|
+
FactRecord,
|
|
4
|
+
FactReference,
|
|
5
|
+
Feed,
|
|
6
|
+
Observable,
|
|
7
|
+
ObservableSource,
|
|
8
|
+
Query,
|
|
9
|
+
Specification,
|
|
10
|
+
WebClient,
|
|
11
|
+
} from "jinaga";
|
|
12
|
+
import { FactFeed } from "jinaga/dist/storage";
|
|
2
13
|
|
|
3
14
|
export class Principal {
|
|
4
15
|
|
|
5
16
|
}
|
|
6
17
|
|
|
7
|
-
export class Authentication implements
|
|
8
|
-
private
|
|
9
|
-
|
|
10
|
-
constructor(private inner: Feed, private client: WebClient) {
|
|
18
|
+
export class Authentication implements ObservableSource {
|
|
19
|
+
constructor(private inner: ObservableSource, private client: WebClient) {
|
|
11
20
|
}
|
|
12
21
|
|
|
13
22
|
async close(): Promise<void> {
|
|
@@ -31,6 +40,10 @@ export class Authentication implements Feed {
|
|
|
31
40
|
return this.inner.read(start, specification);
|
|
32
41
|
}
|
|
33
42
|
|
|
43
|
+
feed(feed: Feed, bookmark: string): Promise<FactFeed> {
|
|
44
|
+
return this.inner.feed(feed, bookmark);
|
|
45
|
+
}
|
|
46
|
+
|
|
34
47
|
whichExist(references: FactReference[]): Promise<FactReference[]> {
|
|
35
48
|
throw new Error("whichExist method not implemented on Authentication.");
|
|
36
49
|
}
|
|
@@ -6,10 +6,12 @@ import {
|
|
|
6
6
|
FactRecord,
|
|
7
7
|
FactReference,
|
|
8
8
|
Feed,
|
|
9
|
+
ObservableSource,
|
|
9
10
|
Query,
|
|
10
11
|
Specification,
|
|
11
12
|
UserIdentity,
|
|
12
13
|
} from "jinaga";
|
|
14
|
+
import { FactFeed } from "jinaga/dist/storage";
|
|
13
15
|
|
|
14
16
|
import { Keystore } from "../keystore";
|
|
15
17
|
|
|
@@ -17,12 +19,12 @@ export class AuthorizationKeystore implements Authorization {
|
|
|
17
19
|
private authorizationEngine: AuthorizationEngine | null;
|
|
18
20
|
|
|
19
21
|
constructor(
|
|
20
|
-
private
|
|
22
|
+
private observableSource: ObservableSource,
|
|
21
23
|
private keystore: Keystore,
|
|
22
24
|
authorizationRules: AuthorizationRules | null) {
|
|
23
25
|
|
|
24
26
|
this.authorizationEngine = authorizationRules &&
|
|
25
|
-
new AuthorizationEngine(authorizationRules,
|
|
27
|
+
new AuthorizationEngine(authorizationRules, observableSource);
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
async getOrCreateUserFact(userIdentity: UserIdentity) {
|
|
@@ -33,25 +35,29 @@ export class AuthorizationKeystore implements Authorization {
|
|
|
33
35
|
signatures: []
|
|
34
36
|
}
|
|
35
37
|
];
|
|
36
|
-
await this.
|
|
38
|
+
await this.observableSource.save(envelopes);
|
|
37
39
|
return userFact;
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
query(userIdentity: UserIdentity, start: FactReference, query: Query) {
|
|
41
|
-
return this.
|
|
43
|
+
return this.observableSource.query(start, query);
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
read(userIdentity: UserIdentity, start: FactReference[], specification: Specification) {
|
|
45
|
-
return this.
|
|
47
|
+
return this.observableSource.read(start, specification);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
feed(userIdentity: UserIdentity, feed: Feed, bookmark: string): Promise<FactFeed> {
|
|
51
|
+
return this.observableSource.feed(feed, bookmark);
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
load(userIdentity: UserIdentity, references: FactReference[]) {
|
|
49
|
-
return this.
|
|
55
|
+
return this.observableSource.load(references);
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
async save(userIdentity: UserIdentity, facts: FactRecord[]) {
|
|
53
59
|
if (!this.authorizationEngine) {
|
|
54
|
-
const envelopes = await this.
|
|
60
|
+
const envelopes = await this.observableSource.save(facts.map(fact => ({
|
|
55
61
|
fact,
|
|
56
62
|
signatures: []
|
|
57
63
|
})));
|
|
@@ -61,7 +67,7 @@ export class AuthorizationKeystore implements Authorization {
|
|
|
61
67
|
const userFact = await this.keystore.getUserFact(userIdentity);
|
|
62
68
|
const authorizedFacts = await this.authorizationEngine.authorizeFacts(facts, userFact);
|
|
63
69
|
const signedFacts = await this.keystore.signFacts(userIdentity, authorizedFacts);
|
|
64
|
-
const envelopes = await this.
|
|
70
|
+
const envelopes = await this.observableSource.save(signedFacts);
|
|
65
71
|
return envelopes.map(envelope => envelope.fact);
|
|
66
72
|
}
|
|
67
73
|
}
|