jinaga-server 2.1.8 → 2.2.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.
@@ -3,7 +3,9 @@ import { AuthorizationRules, Jinaga, Model } from "jinaga";
3
3
  import { Pool } from "pg";
4
4
  export declare type JinagaServerConfig = {
5
5
  pgStore?: string | Pool;
6
+ pgStoreSchema?: string;
6
7
  pgKeystore?: string | Pool;
8
+ pgKeystoreSchema?: string;
7
9
  httpEndpoint?: string;
8
10
  model?: Model;
9
11
  authorization?: (a: AuthorizationRules) => AuthorizationRules;
@@ -61,7 +61,7 @@ exports.JinagaServer = JinagaServer;
61
61
  function createStore(config, pools) {
62
62
  if (config.pgStore) {
63
63
  const pool = getPool(config.pgStore, pools);
64
- const store = new postgres_store_1.PostgresStore(pool);
64
+ const store = new postgres_store_1.PostgresStore(pool, validateSchema(config.pgStoreSchema));
65
65
  return store;
66
66
  }
67
67
  else {
@@ -86,7 +86,7 @@ function createKeystore(config, pools) {
86
86
  const uriOrPool = config.pgKeystore;
87
87
  if (uriOrPool) {
88
88
  const pool = getPool(uriOrPool, pools);
89
- const keystore = new postgres_keystore_1.PostgresKeystore(pool);
89
+ const keystore = new postgres_keystore_1.PostgresKeystore(pool, validateSchema(config.pgKeystoreSchema));
90
90
  return keystore;
91
91
  }
92
92
  else {
@@ -183,4 +183,15 @@ function withSession(store, keystore, authorizationRules, req, callback) {
183
183
  yield callback(j);
184
184
  });
185
185
  }
186
+ function validateSchema(schema) {
187
+ if (!schema) {
188
+ return "public";
189
+ }
190
+ // Verify that the schema is a valid Postgres schema name.
191
+ // https://www.postgresql.org/docs/9.1/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
192
+ if (!/^[a-z_][a-z0-9_$]*$/.test(schema)) {
193
+ throw new Error(`Invalid schema name: ${schema}. Schema names must start with a letter or underscore, and contain only letters, numbers, and underscores.`);
194
+ }
195
+ return schema;
196
+ }
186
197
  //# sourceMappingURL=jinaga-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jinaga-server.js","sourceRoot":"","sources":["../src/jinaga-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jinaga-server.js","sourceRoot":"","sources":["../src/jinaga-server.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,10 @@ import { FactEnvelope, FactRecord, UserIdentity } from "jinaga";
2
2
  import { Pool } from "pg";
3
3
  import { Keystore } from "../keystore";
4
4
  export declare class PostgresKeystore implements Keystore {
5
+ private schema;
5
6
  private connectionFactory;
6
7
  private cache;
7
- constructor(pool: Pool);
8
+ constructor(pool: Pool, schema: string);
8
9
  getOrCreateUserFact(userIdentity: UserIdentity): Promise<FactRecord>;
9
10
  getOrCreateDeviceFact(deviceIdentity: UserIdentity): Promise<FactRecord>;
10
11
  getUserFact(userIdentity: UserIdentity): Promise<FactRecord>;
@@ -15,7 +15,8 @@ const node_forge_1 = require("node-forge");
15
15
  const connection_1 = require("./connection");
16
16
  ;
17
17
  class PostgresKeystore {
18
- constructor(pool) {
18
+ constructor(pool, schema) {
19
+ this.schema = schema;
19
20
  this.cache = new Map();
20
21
  this.connectionFactory = new connection_1.ConnectionFactory(pool);
21
22
  }
@@ -77,7 +78,7 @@ class PostgresKeystore {
77
78
  }
78
79
  selectKeyPair(connection, userIdentity) {
79
80
  return __awaiter(this, void 0, void 0, function* () {
80
- const { rows } = yield connection.query('SELECT public_key, private_key FROM public.user WHERE provider = $1 AND user_identifier = $2', [userIdentity.provider, userIdentity.id]);
81
+ const { rows } = yield connection.query(`SELECT public_key, private_key FROM ${this.schema}.user WHERE provider = $1 AND user_identifier = $2`, [userIdentity.provider, userIdentity.id]);
81
82
  if (rows.length > 1) {
82
83
  throw new Error('Duplicate entries found in the keystore');
83
84
  }
@@ -104,7 +105,7 @@ class PostgresKeystore {
104
105
  }
105
106
  selectOrInsertKeyPair(connection, userIdentity) {
106
107
  return __awaiter(this, void 0, void 0, function* () {
107
- const { rows } = yield connection.query('SELECT public_key, private_key FROM public.user WHERE provider = $1 AND user_identifier = $2', [userIdentity.provider, userIdentity.id]);
108
+ const { rows } = yield connection.query(`SELECT public_key, private_key FROM ${this.schema}.user WHERE provider = $1 AND user_identifier = $2`, [userIdentity.provider, userIdentity.id]);
108
109
  if (rows.length > 1) {
109
110
  throw new Error('Duplicate entries found in the keystore');
110
111
  }
@@ -124,7 +125,7 @@ class PostgresKeystore {
124
125
  const keypair = node_forge_1.pki.rsa.generateKeyPair({ bits: 2048 });
125
126
  const privatePem = node_forge_1.pki.privateKeyToPem(keypair.privateKey);
126
127
  const publicPem = node_forge_1.pki.publicKeyToPem(keypair.publicKey);
127
- yield connection.query('INSERT INTO public.user (provider, user_identifier, private_key, public_key) VALUES ($1, $2, $3, $4)', [userIdentity.provider, userIdentity.id, privatePem, publicPem]);
128
+ yield connection.query(`INSERT INTO ${this.schema}.user (provider, user_identifier, private_key, public_key) VALUES ($1, $2, $3, $4)`, [userIdentity.provider, userIdentity.id, privatePem, publicPem]);
128
129
  return { publicPem, privatePem };
129
130
  });
130
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"postgres-keystore.js","sourceRoot":"","sources":["../../src/postgres/postgres-keystore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"postgres-keystore.js","sourceRoot":"","sources":["../../src/postgres/postgres-keystore.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,11 @@ import { FactEnvelope, FactFeed, FactPath, FactRecord, FactReference, Feed, Quer
2
2
  import { Pool } from "pg";
3
3
  import { FactTypeMap, RoleMap } from "./maps";
4
4
  export declare class PostgresStore implements Storage {
5
+ private schema;
5
6
  private connectionFactory;
6
7
  private factTypeMap;
7
8
  private roleMap;
8
- constructor(pool: Pool);
9
+ constructor(pool: Pool, schema: string);
9
10
  close(): Promise<void>;
10
11
  save(envelopes: FactEnvelope[]): Promise<FactEnvelope[]>;
11
12
  query(start: FactReference, query: Query): Promise<FactPath[]>;
@@ -53,7 +53,8 @@ function loadFactPath(pathLength, factTypeNames, r) {
53
53
  return path;
54
54
  }
55
55
  class PostgresStore {
56
- constructor(pool) {
56
+ constructor(pool, schema) {
57
+ this.schema = schema;
57
58
  this.factTypeMap = (0, maps_1.emptyFactTypeMap)();
58
59
  this.roleMap = (0, maps_1.emptyRoleMap)();
59
60
  this.connectionFactory = new connection_1.ConnectionFactory(pool);
@@ -69,8 +70,8 @@ class PostgresStore {
69
70
  throw new Error('Attempted to save a fact with no hash or type.');
70
71
  }
71
72
  const { newEnvelopes, factTypes, roles } = yield this.connectionFactory.withTransaction((connection) => __awaiter(this, void 0, void 0, function* () {
72
- const factTypes = yield storeFactTypes(facts, this.factTypeMap, connection);
73
- const existingFacts = yield findExistingFacts(facts, factTypes, connection);
73
+ const factTypes = yield storeFactTypes(facts, this.factTypeMap, connection, this.schema);
74
+ const existingFacts = yield findExistingFacts(facts, factTypes, connection, this.schema);
74
75
  const newFacts = facts.filter(f => !(0, maps_1.hasFact)(existingFacts, f.hash, (0, maps_1.ensureGetFactTypeId)(factTypes, f.type)));
75
76
  if (newFacts.length === 0) {
76
77
  return {
@@ -79,8 +80,8 @@ class PostgresStore {
79
80
  roles: (0, maps_1.emptyRoleMap)()
80
81
  };
81
82
  }
82
- const roles = yield storeRoles(newFacts, factTypes, (0, maps_1.copyRoleMap)(this.roleMap), connection);
83
- const allFacts = yield insertFactsEdgesAndAncestors(newFacts, factTypes, existingFacts, connection, roles);
83
+ const roles = yield storeRoles(newFacts, factTypes, (0, maps_1.copyRoleMap)(this.roleMap), connection, this.schema);
84
+ const allFacts = yield insertFactsEdgesAndAncestors(newFacts, factTypes, existingFacts, connection, roles, this.schema);
84
85
  const newEnvelopes = envelopes.filter(envelope => newFacts.some((0, jinaga_1.factReferenceEquals)(envelope.fact)));
85
86
  if (newEnvelopes.length === 0) {
86
87
  return {
@@ -89,8 +90,8 @@ class PostgresStore {
89
90
  roles
90
91
  };
91
92
  }
92
- const publicKeys = yield storePublicKeys(newEnvelopes, connection);
93
- yield insertSignatures(newEnvelopes, allFacts, factTypes, publicKeys, connection);
93
+ const publicKeys = yield storePublicKeys(newEnvelopes, connection, this.schema);
94
+ yield insertSignatures(newEnvelopes, allFacts, factTypes, publicKeys, connection, this.schema);
94
95
  return {
95
96
  newEnvelopes,
96
97
  factTypes,
@@ -114,7 +115,7 @@ class PostgresStore {
114
115
  try {
115
116
  const factTypes = yield this.loadFactTypesFromSteps(query.steps, start.type);
116
117
  const roleMap = yield this.loadRolesFromSteps(query.steps, factTypes, start.type);
117
- const sqlQuery = (0, sql_1.sqlFromSteps)(start, query.steps, factTypes, roleMap);
118
+ const sqlQuery = (0, sql_1.sqlFromSteps)(start, query.steps, factTypes, roleMap, this.schema);
118
119
  if (!sqlQuery) {
119
120
  throw new Error(`Could not generate SQL for query "${query.toDescriptiveString()}" starting at "${start.type}"`);
120
121
  }
@@ -139,7 +140,7 @@ class PostgresStore {
139
140
  if (start.filter(f => (0, maps_1.getFactTypeId)(factTypes, f.type) === undefined).length > 0) {
140
141
  return [];
141
142
  }
142
- const composer = (0, specification_result_sql_1.resultSqlFromSpecification)(start, specification, factTypes, roleMap);
143
+ const composer = (0, specification_result_sql_1.resultSqlFromSpecification)(start, specification, factTypes, roleMap, this.schema);
143
144
  if (composer === null) {
144
145
  return [];
145
146
  }
@@ -154,7 +155,7 @@ class PostgresStore {
154
155
  return __awaiter(this, void 0, void 0, function* () {
155
156
  const factTypes = yield this.loadFactTypesFromFeed(feed);
156
157
  const roleMap = yield this.loadRolesFromFeed(feed, factTypes);
157
- const sql = (0, specification_sql_1.sqlFromFeed)(feed, bookmark, 100, factTypes, roleMap);
158
+ const sql = (0, specification_sql_1.sqlFromFeed)(feed, this.schema, bookmark, 100, factTypes, roleMap);
158
159
  if (!sql) {
159
160
  return {
160
161
  tuples: [],
@@ -179,7 +180,7 @@ class PostgresStore {
179
180
  .filter(fn_1.distinct);
180
181
  if (unknownFactTypes.length > 0) {
181
182
  const loadedFactTypes = yield this.connectionFactory.with((connection) => __awaiter(this, void 0, void 0, function* () {
182
- return yield loadFactTypes(unknownFactTypes, connection);
183
+ return yield loadFactTypes(unknownFactTypes, connection, this.schema);
183
184
  }));
184
185
  const merged = (0, maps_1.mergeFactTypes)(this.factTypeMap, loadedFactTypes);
185
186
  this.factTypeMap = merged;
@@ -195,7 +196,7 @@ class PostgresStore {
195
196
  .filter(factType => !factTypes.has(factType));
196
197
  if (unknownFactTypes.length > 0) {
197
198
  const loadedFactTypes = yield this.connectionFactory.with((connection) => __awaiter(this, void 0, void 0, function* () {
198
- return yield loadFactTypes(unknownFactTypes, connection);
199
+ return yield loadFactTypes(unknownFactTypes, connection, this.schema);
199
200
  }));
200
201
  const merged = (0, maps_1.mergeFactTypes)(this.factTypeMap, loadedFactTypes);
201
202
  this.factTypeMap = merged;
@@ -211,7 +212,7 @@ class PostgresStore {
211
212
  .filter(factType => !factTypes.has(factType));
212
213
  if (unknownFactTypes.length > 0) {
213
214
  const loadedFactTypes = yield this.connectionFactory.with((connection) => __awaiter(this, void 0, void 0, function* () {
214
- return yield loadFactTypes(unknownFactTypes, connection);
215
+ return yield loadFactTypes(unknownFactTypes, connection, this.schema);
215
216
  }));
216
217
  const merged = (0, maps_1.mergeFactTypes)(this.factTypeMap, loadedFactTypes);
217
218
  this.factTypeMap = merged;
@@ -227,7 +228,7 @@ class PostgresStore {
227
228
  .filter(r => !(0, maps_1.hasRole)(roleMap, r.successor_type_id, r.role));
228
229
  if (unknownRoles.length > 0) {
229
230
  const loadedRoles = yield this.connectionFactory.with((connection) => __awaiter(this, void 0, void 0, function* () {
230
- return yield loadRoles(unknownRoles, roleMap, connection);
231
+ return yield loadRoles(unknownRoles, roleMap, connection, this.schema);
231
232
  }));
232
233
  const merged = (0, maps_1.mergeRoleMaps)(this.roleMap, loadedRoles);
233
234
  this.roleMap = merged;
@@ -248,7 +249,7 @@ class PostgresStore {
248
249
  .filter(r => r.successor_type_id && !(0, maps_1.hasRole)(roleMap, r.successor_type_id, r.role));
249
250
  if (unknownRoles.length > 0) {
250
251
  const loadedRoles = yield this.connectionFactory.with((connection) => __awaiter(this, void 0, void 0, function* () {
251
- return yield loadRoles(unknownRoles, roleMap, connection);
252
+ return yield loadRoles(unknownRoles, roleMap, connection, this.schema);
252
253
  }));
253
254
  const merged = (0, maps_1.mergeRoleMaps)(this.roleMap, loadedRoles);
254
255
  this.roleMap = merged;
@@ -268,7 +269,7 @@ class PostgresStore {
268
269
  .filter(r => r.successor_type_id && !(0, maps_1.hasRole)(roleMap, r.successor_type_id, r.role));
269
270
  if (unknownRoles.length > 0) {
270
271
  const loadedRoles = yield this.connectionFactory.with((connection) => __awaiter(this, void 0, void 0, function* () {
271
- return yield loadRoles(unknownRoles, roleMap, connection);
272
+ return yield loadRoles(unknownRoles, roleMap, connection, this.schema);
272
273
  }));
273
274
  const merged = (0, maps_1.mergeRoleMaps)(this.roleMap, loadedRoles);
274
275
  this.roleMap = merged;
@@ -286,7 +287,7 @@ class PostgresStore {
286
287
  const factValues = references.map((f, i) => `(\$${i * 2 + 1}, \$${i * 2 + 2}::integer)`);
287
288
  const factParameters = (0, fn_1.flatten)(references, (f) => [f.hash, factTypes.get(f.type)]);
288
289
  const sql = 'SELECT f.fact_type_id, f.hash ' +
289
- 'FROM public.fact f ' +
290
+ `FROM ${this.schema}.fact f ` +
290
291
  'JOIN (VALUES ' + factValues.join(', ') + ') AS v (hash, fact_type_id) ' +
291
292
  ' ON v.fact_type_id = f.fact_type_id AND v.hash = f.hash ';
292
293
  const result = yield this.connectionFactory.with((connection) => __awaiter(this, void 0, void 0, function* () {
@@ -305,21 +306,21 @@ class PostgresStore {
305
306
  const factValues = references.map((f, i) => `(\$${i * 2 + 1}, \$${i * 2 + 2}::integer)`);
306
307
  const factParameters = (0, fn_1.flatten)(references, (f) => [f.hash, factTypes.get(f.type)]);
307
308
  const sql = 'SELECT f.fact_type_id, t.name, f.hash, f.data ' +
308
- 'FROM public.fact f ' +
309
- 'JOIN public.fact_type t ' +
309
+ `FROM ${this.schema}.fact f ` +
310
+ `JOIN ${this.schema}.fact_type t ` +
310
311
  ' ON f.fact_type_id = t.fact_type_id ' +
311
312
  'JOIN (VALUES ' + factValues.join(', ') + ') AS v (hash, fact_type_id) ' +
312
313
  ' ON v.fact_type_id = f.fact_type_id AND v.hash = f.hash ' +
313
314
  'UNION ' +
314
315
  'SELECT f2.fact_type_id, t.name, f2.hash, f2.data ' +
315
- 'FROM public.fact f1 ' +
316
+ `FROM ${this.schema}.fact f1 ` +
316
317
  'JOIN (VALUES ' + factValues.join(', ') + ') AS v (hash, fact_type_id) ' +
317
318
  ' ON v.fact_type_id = f1.fact_type_id AND v.hash = f1.hash ' +
318
- 'JOIN public.ancestor a ' +
319
+ `JOIN ${this.schema}.ancestor a ` +
319
320
  ' ON a.fact_id = f1.fact_id ' +
320
- 'JOIN public.fact f2 ' +
321
+ `JOIN ${this.schema}.fact f2 ` +
321
322
  ' ON f2.fact_id = a.ancestor_fact_id ' +
322
- 'JOIN public.fact_type t ' +
323
+ `JOIN ${this.schema}.fact_type t ` +
323
324
  ' ON t.fact_type_id = f2.fact_type_id;';
324
325
  const result = yield this.connectionFactory.with((connection) => __awaiter(this, void 0, void 0, function* () {
325
326
  return yield connection.query(sql, factParameters);
@@ -348,7 +349,7 @@ class PostgresStore {
348
349
  .filter(fn_1.distinct);
349
350
  if (newFactTypes.length > 0) {
350
351
  const loadedFactTypes = yield this.connectionFactory.with((connection) => __awaiter(this, void 0, void 0, function* () {
351
- return yield loadFactTypes(newFactTypes, connection);
352
+ return yield loadFactTypes(newFactTypes, connection, this.schema);
352
353
  }));
353
354
  const mergedFactTypes = (0, maps_1.mergeFactTypes)(factTypes, loadedFactTypes);
354
355
  this.factTypeMap = mergedFactTypes;
@@ -389,7 +390,7 @@ function predecessorTypes(predecessor) {
389
390
  function predecessorCollectionTypes(predecessors) {
390
391
  return Object.keys(predecessors).flatMap(key => predecessorTypes(predecessors[key]));
391
392
  }
392
- function storeFactTypes(facts, factTypes, connection) {
393
+ function storeFactTypes(facts, factTypes, connection, schema) {
393
394
  return __awaiter(this, void 0, void 0, function* () {
394
395
  const newFactTypes = facts
395
396
  .flatMap(fact => [fact.type, ...predecessorCollectionTypes(fact.predecessors)])
@@ -399,14 +400,14 @@ function storeFactTypes(facts, factTypes, connection) {
399
400
  return factTypes;
400
401
  }
401
402
  // Look up existing fact types
402
- const loadedFactTypes = yield loadFactTypes(newFactTypes, connection);
403
+ const loadedFactTypes = yield loadFactTypes(newFactTypes, connection, schema);
403
404
  const remainingNames = newFactTypes.filter(type => !loadedFactTypes.has(type));
404
405
  if (remainingNames.length === 0) {
405
406
  return (0, maps_1.mergeFactTypes)(loadedFactTypes, factTypes);
406
407
  }
407
408
  // Insert new fact types
408
409
  const values = remainingNames.map((name, index) => `($${index + 1})`);
409
- const insertSql = 'INSERT INTO public.fact_type (name) VALUES ' + values.join(', ') +
410
+ const insertSql = `INSERT INTO ${schema}.fact_type (name) VALUES ` + values.join(', ') +
410
411
  ' RETURNING fact_type_id, name;';
411
412
  const { rows: newRows } = yield connection.query(insertSql, remainingNames);
412
413
  if (newRows.length !== remainingNames.length) {
@@ -416,15 +417,15 @@ function storeFactTypes(facts, factTypes, connection) {
416
417
  return allFactTypes;
417
418
  });
418
419
  }
419
- function loadFactTypes(factTypeNames, connection) {
420
+ function loadFactTypes(factTypeNames, connection, schema) {
420
421
  return __awaiter(this, void 0, void 0, function* () {
421
- const lookUpSql = 'SELECT name, fact_type_id FROM public.fact_type WHERE name=ANY($1);';
422
+ const lookUpSql = `SELECT name, fact_type_id FROM ${schema}.fact_type WHERE name=ANY($1);`;
422
423
  const { rows: existingRows } = yield connection.query(lookUpSql, [factTypeNames]);
423
424
  const factTypeIds = existingRows.reduce((map, row) => (0, maps_1.addFactType)(map, row.name, row.fact_type_id), (0, maps_1.emptyFactTypeMap)());
424
425
  return factTypeIds;
425
426
  });
426
427
  }
427
- function storeRoles(facts, factTypes, roleMap, connection) {
428
+ function storeRoles(facts, factTypes, roleMap, connection, schema) {
428
429
  return __awaiter(this, void 0, void 0, function* () {
429
430
  // Find distinct roles
430
431
  const roles = (0, fn_1.flatten)(facts, fact => {
@@ -437,14 +438,14 @@ function storeRoles(facts, factTypes, roleMap, connection) {
437
438
  r.successor_type_id === role.successor_type_id) === index);
438
439
  if (roles.length > 0) {
439
440
  // Look up existing roles
440
- const roleIds = yield loadRoles(roles, roleMap, connection);
441
+ const roleIds = yield loadRoles(roles, roleMap, connection, schema);
441
442
  const remainingRoles = roles.filter(role => !(0, maps_1.hasRole)(roleIds, role.successor_type_id, role.role));
442
443
  if (remainingRoles.length === 0) {
443
444
  return roleIds;
444
445
  }
445
446
  // Insert new roles
446
447
  const remainingRoleValues = remainingRoles.map((role, index) => `($${index * 2 + 1}, $${index * 2 + 2}::integer)`);
447
- const insertSql = 'INSERT INTO public.role (name, defining_fact_type_id) VALUES ' +
448
+ const insertSql = `INSERT INTO ${schema}.role (name, defining_fact_type_id) VALUES ` +
448
449
  remainingRoleValues.join(', ') +
449
450
  ' RETURNING role_id, name, defining_fact_type_id;';
450
451
  const remainingRoleParameters = (0, fn_1.flatten)(remainingRoles, (role) => [
@@ -463,7 +464,7 @@ function storeRoles(facts, factTypes, roleMap, connection) {
463
464
  }
464
465
  });
465
466
  }
466
- function loadRoles(roles, roleMap, connection) {
467
+ function loadRoles(roles, roleMap, connection, schema) {
467
468
  return __awaiter(this, void 0, void 0, function* () {
468
469
  const roleValues = roles.map((role, index) => `($${index * 2 + 1}, $${index * 2 + 2}::integer)`);
469
470
  const roleParameters = (0, fn_1.flatten)(roles, (role) => [
@@ -471,7 +472,7 @@ function loadRoles(roles, roleMap, connection) {
471
472
  role.successor_type_id
472
473
  ]);
473
474
  const lookUpSql = 'SELECT role.name, role.defining_fact_type_id, role.role_id' +
474
- ' FROM public.role' +
475
+ ` FROM ${schema}.role` +
475
476
  ' JOIN (VALUES ' + roleValues.join(', ') + ') AS v (name, defining_fact_type_id)' +
476
477
  ' ON v.name = role.name AND v.defining_fact_type_id = role.defining_fact_type_id;';
477
478
  const { rows } = yield connection.query(lookUpSql, roleParameters);
@@ -479,7 +480,7 @@ function loadRoles(roles, roleMap, connection) {
479
480
  return roleIds;
480
481
  });
481
482
  }
482
- function findExistingFacts(facts, factTypes, connection) {
483
+ function findExistingFacts(facts, factTypes, connection, schema) {
483
484
  return __awaiter(this, void 0, void 0, function* () {
484
485
  if (facts.length > 0) {
485
486
  const factReferences = facts.flatMap(fact => [
@@ -489,7 +490,7 @@ function findExistingFacts(facts, factTypes, connection) {
489
490
  const factValues = factReferences.map((f, i) => `(\$${i * 2 + 1}, \$${i * 2 + 2}::integer)`);
490
491
  const factParameters = factReferences.flatMap((f) => [f.hash, factTypes.get(f.type)]);
491
492
  const sql = 'SELECT fact_id, fact.fact_type_id, fact.hash' +
492
- ' FROM public.fact' +
493
+ ` FROM ${schema}.fact` +
493
494
  ' JOIN (VALUES ' + factValues.join(', ') + ') AS v (hash, fact_type_id)' +
494
495
  ' ON v.fact_type_id = fact.fact_type_id AND v.hash = fact.hash;';
495
496
  const { rows } = yield connection.query(sql, factParameters);
@@ -501,12 +502,12 @@ function findExistingFacts(facts, factTypes, connection) {
501
502
  }
502
503
  });
503
504
  }
504
- function insertFactsEdgesAndAncestors(facts, factTypes, existingFacts, connection, roles) {
505
+ function insertFactsEdgesAndAncestors(facts, factTypes, existingFacts, connection, roles, schema) {
505
506
  return __awaiter(this, void 0, void 0, function* () {
506
507
  if (facts.length === 0) {
507
508
  return (0, maps_1.emptyFactMap)();
508
509
  }
509
- const { sql, parameters } = sqlInsertFacts(facts, roles, factTypes);
510
+ const { sql, parameters } = sqlInsertFacts(facts, roles, factTypes, schema);
510
511
  const { rows } = yield connection.query(sql, parameters);
511
512
  if (rows.length !== facts.length) {
512
513
  throw new Error('Failed to insert all new facts.');
@@ -515,7 +516,7 @@ function insertFactsEdgesAndAncestors(facts, factTypes, existingFacts, connectio
515
516
  return allFacts;
516
517
  });
517
518
  }
518
- function sqlInsertFacts(facts, roles, factTypes) {
519
+ function sqlInsertFacts(facts, roles, factTypes, schema) {
519
520
  const factValues = facts.map((f, i) => `(\$${i * 3 + 1}, \$${i * 3 + 2}::integer, \$${i * 3 + 3}::jsonb)`);
520
521
  const factParameters = (0, fn_1.flatten)(facts, (f) => [f.hash, (0, maps_1.ensureGetFactTypeId)(factTypes, f.type), {
521
522
  fields: f.fields,
@@ -523,18 +524,18 @@ function sqlInsertFacts(facts, roles, factTypes) {
523
524
  }]);
524
525
  const edgeRecords = (0, fn_1.flatten)(facts, fact => (0, edge_record_1.makeEdgeRecords)(fact));
525
526
  if (edgeRecords.length > 0) {
526
- return sqlInsertFactsEdgesAndAncestors(facts, factParameters, edgeRecords, factTypes, roles, factValues);
527
+ return sqlInsertFactsEdgesAndAncestors(facts, factParameters, edgeRecords, factTypes, roles, factValues, schema);
527
528
  }
528
529
  else {
529
530
  return {
530
- sql: 'INSERT INTO public.fact (hash, fact_type_id, data) VALUES ' +
531
+ sql: `INSERT INTO ${schema}.fact (hash, fact_type_id, data) VALUES ` +
531
532
  factValues.join(', ') +
532
533
  ' RETURNING fact_id, hash, fact_type_id;',
533
534
  parameters: factParameters
534
535
  };
535
536
  }
536
537
  }
537
- function sqlInsertFactsEdgesAndAncestors(facts, factParameters, edgeRecords, factTypes, roles, factValues) {
538
+ function sqlInsertFactsEdgesAndAncestors(facts, factParameters, edgeRecords, factTypes, roles, factValues, schema) {
538
539
  let parameterOffset = factParameters.length;
539
540
  const edgeValues = edgeRecords.map((e, i) => `(\$${i * 5 + 1 + parameterOffset}, \$${i * 5 + 2 + parameterOffset}::integer, \$${i * 5 + 3 + parameterOffset}, \$${i * 5 + 4 + parameterOffset}::integer, \$${i * 5 + 5 + parameterOffset}::integer)`);
540
541
  const edgeParameters = (0, fn_1.flatten)(edgeRecords, (e) => {
@@ -573,13 +574,13 @@ new_ancestor AS (
573
574
  AS ev (hash, fact_type_id, ancestor_hash, ancestor_fact_type_id)
574
575
  ),
575
576
  inserted_fact AS (
576
- INSERT INTO public.fact (hash, fact_type_id, data)
577
+ INSERT INTO ${schema}.fact (hash, fact_type_id, data)
577
578
  SELECT hash, fact_type_id, data
578
579
  FROM new_fact
579
580
  RETURNING fact_id, fact_type_id, hash
580
581
  ),
581
582
  inserted_edge AS (
582
- INSERT INTO public.edge
583
+ INSERT INTO ${schema}.edge
583
584
  (role_id, successor_fact_id, predecessor_fact_id)
584
585
  SELECT
585
586
  new_edge.role_id,
@@ -594,7 +595,7 @@ inserted_edge AS (
594
595
  FROM inserted_fact
595
596
  UNION ALL
596
597
  SELECT fact_id, fact_type_id, hash
597
- FROM public.fact
598
+ FROM ${schema}.fact
598
599
  ) AS predecessor
599
600
  ON predecessor.hash = new_edge.predecessor_hash
600
601
  AND predecessor.fact_type_id = new_edge.predecessor_fact_type_id
@@ -613,20 +614,20 @@ ancestor_id AS (
613
614
  FROM inserted_fact
614
615
  UNION ALL
615
616
  SELECT fact_id, fact_type_id, hash
616
- FROM public.fact
617
+ FROM ${schema}.fact
617
618
  ) AS ancestor
618
619
  ON ancestor.hash = new_ancestor.ancestor_hash
619
620
  AND ancestor.fact_type_id = new_ancestor.ancestor_fact_type_id
620
621
  ),
621
622
  inserted_ancestor AS (
622
- INSERT INTO public.ancestor
623
+ INSERT INTO ${schema}.ancestor
623
624
  (fact_id, ancestor_fact_id)
624
625
  SELECT ancestor_id.fact_id, ancestor_id.ancestor_fact_id
625
626
  FROM ancestor_id
626
627
  UNION ALL
627
628
  SELECT ancestor_id.fact_id, ancestor.ancestor_fact_id
628
629
  FROM ancestor_id
629
- JOIN public.ancestor
630
+ JOIN ${schema}.ancestor
630
631
  ON ancestor.fact_id = ancestor_id.ancestor_fact_id
631
632
  ON CONFLICT DO NOTHING
632
633
  )
@@ -662,12 +663,12 @@ function recursivePredecessors(factReference, facts) {
662
663
  return [...predecessorReferences, ...ancestorReferences];
663
664
  });
664
665
  }
665
- function storePublicKeys(envelopes, connection) {
666
+ function storePublicKeys(envelopes, connection, schema) {
666
667
  return __awaiter(this, void 0, void 0, function* () {
667
668
  // Look up existing fact types
668
669
  const publicKeys = (0, fn_1.flatten)(envelopes, e => e.signatures.map(s => s.publicKey))
669
670
  .filter(fn_1.distinct);
670
- const lookUpSql = 'SELECT public_key, public_key_id FROM public.public_key WHERE public_key=ANY($1);';
671
+ const lookUpSql = `SELECT public_key, public_key_id FROM ${schema}.public_key WHERE public_key=ANY($1);`;
671
672
  const { rows: existingRows } = yield connection.query(lookUpSql, [publicKeys]);
672
673
  const publicKeyIds = existingRows.reduce((map, row) => (0, maps_1.addFactType)(map, row.public_key, row.public_key_id), (0, maps_1.emptyPublicKeyMap)());
673
674
  const remainingPublicKeys = publicKeys.filter(pk => !publicKeyIds.has(pk));
@@ -676,7 +677,7 @@ function storePublicKeys(envelopes, connection) {
676
677
  }
677
678
  // Insert new fact types
678
679
  const values = remainingPublicKeys.map((name, index) => `($${index + 1})`);
679
- const insertSql = 'INSERT INTO public.public_key (public_key) VALUES ' + values.join(', ') +
680
+ const insertSql = `INSERT INTO ${schema}.public_key (public_key) VALUES ` + values.join(', ') +
680
681
  ' RETURNING public_key, public_key_id;';
681
682
  const { rows: newRows } = yield connection.query(insertSql, remainingPublicKeys);
682
683
  if (newRows.length !== remainingPublicKeys.length) {
@@ -686,7 +687,7 @@ function storePublicKeys(envelopes, connection) {
686
687
  return allPublicKeyIds;
687
688
  });
688
689
  }
689
- function insertSignatures(envelopes, allFacts, factTypes, publicKey, connection) {
690
+ function insertSignatures(envelopes, allFacts, factTypes, publicKey, connection, schema) {
690
691
  return __awaiter(this, void 0, void 0, function* () {
691
692
  const signatureRecords = (0, fn_1.flatten)(envelopes, envelope => envelope.signatures.map(signature => ({
692
693
  factId: (0, maps_1.getFactId)(allFacts, envelope.fact.hash, (0, maps_1.ensureGetFactTypeId)(factTypes, envelope.fact.type)),
@@ -696,7 +697,7 @@ function insertSignatures(envelopes, allFacts, factTypes, publicKey, connection)
696
697
  if (signatureRecords.length > 0) {
697
698
  const signatureValues = signatureRecords.map((s, i) => `($${i * 3 + 1}::integer, $${i * 3 + 2}::integer, $${i * 3 + 3})`);
698
699
  const signatureParameters = (0, fn_1.flatten)(signatureRecords, s => [s.factId, s.publicKeyId, s.signature]);
699
- const sql = `INSERT INTO public.signature
700
+ const sql = `INSERT INTO ${schema}.signature
700
701
  (fact_id, public_key_id, signature)
701
702
  (SELECT fact_id, public_key_id, signature
702
703
  FROM (VALUES ${signatureValues.join(', ')}) AS v(fact_id, public_key_id, signature))