@balena/pinejs 17.1.0-build-joshbwlng-tasks-149b21c81ddf7cbb2a934500dc16e0b5ed4c74a7-1 → 17.1.0-build-model-based-typings-a10277597a28577bcb204b378925c9df795a10e8-1
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/.pinejs-cache.json +1 -1
- package/.versionbot/CHANGELOG.yml +232 -7
- package/CHANGELOG.md +71 -3
- package/out/config-loader/env.d.ts +0 -4
- package/out/config-loader/env.js +1 -5
- package/out/config-loader/env.js.map +1 -1
- package/out/data-server/sbvr-server.js +3 -2
- package/out/data-server/sbvr-server.js.map +1 -1
- package/out/database-layer/db.d.ts +0 -3
- package/out/database-layer/db.js +0 -17
- package/out/database-layer/db.js.map +1 -1
- package/out/http-transactions/transactions.js +1 -6
- package/out/http-transactions/transactions.js.map +1 -1
- package/out/migrator/migrations.d.ts +113 -0
- package/out/migrator/migrations.js +3 -0
- package/out/migrator/migrations.js.map +1 -0
- package/out/migrator/sync.d.ts +17 -0
- package/out/migrator/sync.js +39 -40
- package/out/migrator/sync.js.map +1 -1
- package/out/sbvr-api/abstract-sql.js +1 -1
- package/out/sbvr-api/abstract-sql.js.map +1 -1
- package/out/sbvr-api/dev.d.ts +41 -0
- package/out/sbvr-api/dev.js +3 -0
- package/out/sbvr-api/dev.js.map +1 -0
- package/out/sbvr-api/hooks.d.ts +26 -26
- package/out/sbvr-api/hooks.js.map +1 -1
- package/out/sbvr-api/odata-response.js +3 -3
- package/out/sbvr-api/odata-response.js.map +1 -1
- package/out/sbvr-api/permissions.d.ts +26 -2
- package/out/sbvr-api/permissions.js +41 -42
- package/out/sbvr-api/permissions.js.map +1 -1
- package/out/sbvr-api/sbvr-utils.d.ts +46 -6
- package/out/sbvr-api/sbvr-utils.js +44 -44
- package/out/sbvr-api/sbvr-utils.js.map +1 -1
- package/out/sbvr-api/uri-parser.js +1 -1
- package/out/sbvr-api/uri-parser.js.map +1 -1
- package/out/sbvr-api/user.d.ts +467 -0
- package/out/sbvr-api/user.js +3 -0
- package/out/sbvr-api/user.js.map +1 -0
- package/out/server-glue/module.d.ts +0 -1
- package/out/server-glue/module.js +1 -4
- package/out/server-glue/module.js.map +1 -1
- package/package.json +18 -19
- package/src/config-loader/env.ts +1 -6
- package/src/data-server/sbvr-server.js +3 -2
- package/src/database-layer/db.ts +0 -25
- package/src/http-transactions/transactions.js +1 -6
- package/src/migrator/migrations.ts +120 -0
- package/src/migrator/sync.ts +46 -41
- package/src/sbvr-api/abstract-sql.ts +1 -1
- package/src/sbvr-api/dev.ts +44 -0
- package/src/sbvr-api/hooks.ts +21 -18
- package/src/sbvr-api/odata-response.ts +3 -4
- package/src/sbvr-api/permissions.ts +52 -46
- package/src/sbvr-api/sbvr-utils.ts +90 -53
- package/src/sbvr-api/uri-parser.ts +1 -1
- package/src/sbvr-api/user.ts +421 -0
- package/src/server-glue/module.ts +0 -3
- package/out/tasks/common.d.ts +0 -4
- package/out/tasks/common.js +0 -13
- package/out/tasks/common.js.map +0 -1
- package/out/tasks/index.d.ts +0 -8
- package/out/tasks/index.js +0 -142
- package/out/tasks/index.js.map +0 -1
- package/out/tasks/tasks.sbvr +0 -60
- package/out/tasks/types.d.ts +0 -38
- package/out/tasks/types.js +0 -10
- package/out/tasks/types.js.map +0 -1
- package/out/tasks/worker.d.ts +0 -16
- package/out/tasks/worker.js +0 -228
- package/out/tasks/worker.js.map +0 -1
- package/src/tasks/common.ts +0 -14
- package/src/tasks/index.ts +0 -158
- package/src/tasks/tasks.sbvr +0 -60
- package/src/tasks/types.ts +0 -58
- package/src/tasks/worker.ts +0 -281
@@ -2,6 +2,7 @@ import type * as Express from 'express';
|
|
2
2
|
import type * as Db from '../database-layer/db';
|
3
3
|
import type { Model } from '../config-loader/config-loader';
|
4
4
|
import type { AnyObject, RequiredField } from './common-types';
|
5
|
+
import type { Resource } from '@balena/abstract-sql-to-typescript';
|
5
6
|
|
6
7
|
// Augment the Express typings
|
7
8
|
declare global {
|
@@ -32,6 +33,7 @@ import {
|
|
32
33
|
} from '@balena/odata-to-abstract-sql';
|
33
34
|
import sbvrTypes from '@balena/sbvr-types';
|
34
35
|
import deepFreeze = require('deep-freeze');
|
36
|
+
import type { AnyResource, Params } from 'pinejs-client-core';
|
35
37
|
import { PinejsClientCore, type PromiseResultTypes } from 'pinejs-client-core';
|
36
38
|
|
37
39
|
import { ExtendedSBVRParser } from '../extended-sbvr-parser/extended-sbvr-parser';
|
@@ -40,9 +42,9 @@ import * as asyncMigrator from '../migrator/async';
|
|
40
42
|
import * as syncMigrator from '../migrator/sync';
|
41
43
|
import { generateODataMetadata } from '../odata-metadata/odata-metadata-generator';
|
42
44
|
|
45
|
+
import type DevModel from './dev';
|
43
46
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
44
47
|
const devModel = require('./dev.sbvr');
|
45
|
-
import * as tasks from '../tasks';
|
46
48
|
import * as permissions from './permissions';
|
47
49
|
import {
|
48
50
|
BadRequestError,
|
@@ -78,7 +80,6 @@ export {
|
|
78
80
|
addPureHook,
|
79
81
|
addSideEffectHook,
|
80
82
|
} from './hooks';
|
81
|
-
export { addTaskHandler } from '../tasks';
|
82
83
|
|
83
84
|
import memoizeWeak = require('memoizee/weak');
|
84
85
|
import * as controlFlow from './control-flow';
|
@@ -712,7 +713,7 @@ export const executeModels = async (
|
|
712
713
|
},
|
713
714
|
});
|
714
715
|
}
|
715
|
-
const result =
|
716
|
+
const result = await api.dev.get({
|
716
717
|
resource: 'model',
|
717
718
|
passthrough: {
|
718
719
|
tx,
|
@@ -725,7 +726,7 @@ export const executeModels = async (
|
|
725
726
|
model_type: modelType,
|
726
727
|
},
|
727
728
|
},
|
728
|
-
})
|
729
|
+
});
|
729
730
|
|
730
731
|
let method: SupportedMethod = 'POST';
|
731
732
|
let uri = '/dev/model';
|
@@ -775,7 +776,7 @@ export const postExecuteModels = async (tx: Db.Tx): Promise<void> => {
|
|
775
776
|
// Hence, skipped migrations from earlier models are not set as executed as the `migration` table is missing
|
776
777
|
// Here the skipped migrations that haven't been set properly are covered
|
777
778
|
// This is mostly an edge case when running on an empty database schema and migrations model hasn't been executed, yet.
|
778
|
-
// One
|
779
|
+
// One specifc case are tests to run tests against migrated and unmigrated database states
|
779
780
|
|
780
781
|
for (const modelKey of Object.keys(models)) {
|
781
782
|
const pendingToSetExecutedMigrations =
|
@@ -785,9 +786,6 @@ export const postExecuteModels = async (tx: Db.Tx): Promise<void> => {
|
|
785
786
|
await setExecutedMigrations(tx, modelKey, pendingToSetExecutedMigrations);
|
786
787
|
}
|
787
788
|
}
|
788
|
-
|
789
|
-
// Initialize task worker and create required hooks
|
790
|
-
await tasks.setup(db);
|
791
789
|
};
|
792
790
|
|
793
791
|
const cleanupModel = (vocab: string) => {
|
@@ -1007,7 +1005,16 @@ export type Passthrough = AnyObject & {
|
|
1007
1005
|
tx?: Db.Tx;
|
1008
1006
|
};
|
1009
1007
|
|
1010
|
-
export class PinejsClient
|
1008
|
+
export class PinejsClient<
|
1009
|
+
M extends {
|
1010
|
+
[key in keyof M]: Resource;
|
1011
|
+
} = {
|
1012
|
+
[key in string]: {
|
1013
|
+
Read: AnyObject;
|
1014
|
+
Write: AnyObject;
|
1015
|
+
};
|
1016
|
+
},
|
1017
|
+
> extends PinejsClientCore<unknown, M> {
|
1011
1018
|
public async _request({
|
1012
1019
|
method,
|
1013
1020
|
url,
|
@@ -1025,11 +1032,37 @@ export class PinejsClient extends PinejsClientCore {
|
|
1025
1032
|
}) {
|
1026
1033
|
return (await runURI(method, url, body, tx, req, custom)) as object;
|
1027
1034
|
}
|
1035
|
+
|
1036
|
+
public post<TResource extends keyof M & string>(
|
1037
|
+
params: {
|
1038
|
+
resource: TResource;
|
1039
|
+
options: Params<M[TResource]>['options'] & { returnResource: false };
|
1040
|
+
} & Params<M[TResource]>, // TODO: This should use the primary key rather than hardcoding `id`
|
1041
|
+
): Promise<Pick<M[TResource]['Read'], 'id'>>;
|
1042
|
+
public post<TResource extends keyof M & string>(
|
1043
|
+
params: {
|
1044
|
+
resource: TResource;
|
1045
|
+
options?: Params<M[TResource]>['options'] & { returnResource?: true };
|
1046
|
+
} & Params<M[TResource]>,
|
1047
|
+
): Promise<M[TResource]['Read']>;
|
1048
|
+
/**
|
1049
|
+
* @deprecated POSTing via `url` is deprecated
|
1050
|
+
*/
|
1051
|
+
public post<T extends Resource = AnyResource>(
|
1052
|
+
params: {
|
1053
|
+
resource?: undefined;
|
1054
|
+
url: NonNullable<Params<T>['url']>;
|
1055
|
+
} & Params<T>,
|
1056
|
+
): Promise<T>;
|
1057
|
+
public post(params: Params<AnyResource>): Promise<AnyObject> {
|
1058
|
+
return super.post(params as Parameters<PinejsClient['post']>[0]);
|
1059
|
+
}
|
1028
1060
|
}
|
1029
1061
|
|
1030
|
-
export
|
1062
|
+
export interface API {
|
1031
1063
|
[vocab: string]: PinejsClient;
|
1032
|
-
}
|
1064
|
+
}
|
1065
|
+
export const api = {} as API;
|
1033
1066
|
export const logger: {
|
1034
1067
|
[vocab: string]: Console;
|
1035
1068
|
} = {};
|
@@ -1136,8 +1169,8 @@ const getIdField = (
|
|
1136
1169
|
// TODO: Should resolveSynonym also be using the finalAbstractSqlModel?
|
1137
1170
|
getFinalAbstractSqlModel(request).tables[resolveSynonym(request)].idField;
|
1138
1171
|
|
1139
|
-
export const getAffectedIds = async (
|
1140
|
-
args: HookArgs & {
|
1172
|
+
export const getAffectedIds = async <Vocab extends string>(
|
1173
|
+
args: HookArgs<Vocab> & {
|
1141
1174
|
tx: Db.Tx;
|
1142
1175
|
},
|
1143
1176
|
): Promise<number[]> => {
|
@@ -1159,11 +1192,11 @@ export const getAffectedIds = async (
|
|
1159
1192
|
return request.affectedIds;
|
1160
1193
|
};
|
1161
1194
|
|
1162
|
-
const $getAffectedIds = async ({
|
1195
|
+
const $getAffectedIds = async <Vocab extends string>({
|
1163
1196
|
req,
|
1164
1197
|
request,
|
1165
1198
|
tx,
|
1166
|
-
}: HookArgs & {
|
1199
|
+
}: HookArgs<Vocab> & {
|
1167
1200
|
tx: Db.Tx;
|
1168
1201
|
}): Promise<number[]> => {
|
1169
1202
|
if (!['PATCH', 'DELETE'].includes(request.method)) {
|
@@ -1947,47 +1980,51 @@ const runDelete = async (
|
|
1947
1980
|
return undefined;
|
1948
1981
|
};
|
1949
1982
|
|
1983
|
+
export interface API {
|
1984
|
+
[devModelConfig.apiRoot]: PinejsClient<DevModel>;
|
1985
|
+
}
|
1986
|
+
const devModelConfig = {
|
1987
|
+
apiRoot: 'dev',
|
1988
|
+
modelText: devModel,
|
1989
|
+
logging: {
|
1990
|
+
log: false,
|
1991
|
+
},
|
1992
|
+
migrations: {
|
1993
|
+
'11.0.0-modified-at': `
|
1994
|
+
ALTER TABLE "model"
|
1995
|
+
ADD COLUMN IF NOT EXISTS "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;
|
1996
|
+
`,
|
1997
|
+
'15.0.0-data-types': async ($tx, sbvrUtils) => {
|
1998
|
+
switch (sbvrUtils.db.engine) {
|
1999
|
+
case 'mysql':
|
2000
|
+
await $tx.executeSql(`\
|
2001
|
+
ALTER TABLE "model"
|
2002
|
+
MODIFY "model value" JSON NOT NULL;
|
2003
|
+
|
2004
|
+
UPDATE "model"
|
2005
|
+
SET "model value" = CAST('{"value":' || CAST("model value" AS CHAR) || '}' AS JSON)
|
2006
|
+
WHERE "model type" IN ('se', 'odataMetadata')
|
2007
|
+
AND CAST("model value" AS CHAR) LIKE '"%';`);
|
2008
|
+
break;
|
2009
|
+
case 'postgres':
|
2010
|
+
await $tx.executeSql(`\
|
2011
|
+
ALTER TABLE "model"
|
2012
|
+
ALTER COLUMN "model value" SET DATA TYPE JSONB USING "model value"::JSONB;
|
2013
|
+
|
2014
|
+
UPDATE "model"
|
2015
|
+
SET "model value" = CAST('{"value":' || CAST("model value" AS TEXT) || '}' AS JSON)
|
2016
|
+
WHERE "model type" IN ('se', 'odataMetadata')
|
2017
|
+
AND CAST("model value" AS TEXT) LIKE '"%';`);
|
2018
|
+
break;
|
2019
|
+
// No need to migrate for websql
|
2020
|
+
}
|
2021
|
+
},
|
2022
|
+
},
|
2023
|
+
} as const satisfies ExecutableModel;
|
1950
2024
|
export const executeStandardModels = async (tx: Db.Tx): Promise<void> => {
|
1951
2025
|
try {
|
1952
2026
|
// dev model must run first
|
1953
|
-
await executeModel(tx,
|
1954
|
-
apiRoot: 'dev',
|
1955
|
-
modelText: devModel,
|
1956
|
-
logging: {
|
1957
|
-
log: false,
|
1958
|
-
},
|
1959
|
-
migrations: {
|
1960
|
-
'11.0.0-modified-at': `
|
1961
|
-
ALTER TABLE "model"
|
1962
|
-
ADD COLUMN IF NOT EXISTS "modified at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;
|
1963
|
-
`,
|
1964
|
-
'15.0.0-data-types': async ($tx, sbvrUtils) => {
|
1965
|
-
switch (sbvrUtils.db.engine) {
|
1966
|
-
case 'mysql':
|
1967
|
-
await $tx.executeSql(`\
|
1968
|
-
ALTER TABLE "model"
|
1969
|
-
MODIFY "model value" JSON NOT NULL;
|
1970
|
-
|
1971
|
-
UPDATE "model"
|
1972
|
-
SET "model value" = CAST('{"value":' || CAST("model value" AS CHAR) || '}' AS JSON)
|
1973
|
-
WHERE "model type" IN ('se', 'odataMetadata')
|
1974
|
-
AND CAST("model value" AS CHAR) LIKE '"%';`);
|
1975
|
-
break;
|
1976
|
-
case 'postgres':
|
1977
|
-
await $tx.executeSql(`\
|
1978
|
-
ALTER TABLE "model"
|
1979
|
-
ALTER COLUMN "model value" SET DATA TYPE JSONB USING "model value"::JSONB;
|
1980
|
-
|
1981
|
-
UPDATE "model"
|
1982
|
-
SET "model value" = CAST('{"value":' || CAST("model value" AS TEXT) || '}' AS JSON)
|
1983
|
-
WHERE "model type" IN ('se', 'odataMetadata')
|
1984
|
-
AND CAST("model value" AS TEXT) LIKE '"%';`);
|
1985
|
-
break;
|
1986
|
-
// No need to migrate for websql
|
1987
|
-
}
|
1988
|
-
},
|
1989
|
-
},
|
1990
|
-
});
|
2027
|
+
await executeModel(tx, devModelConfig);
|
1991
2028
|
await executeModels(tx, permissions.config.models);
|
1992
2029
|
console.info('Successfully executed standard models.');
|
1993
2030
|
} catch (err: any) {
|
@@ -420,7 +420,7 @@ export const translateUri = <
|
|
420
420
|
request = { ...request };
|
421
421
|
request.values = new Proxy(request.values, {
|
422
422
|
set: (obj: ODataRequest['values'], prop: string, value) => {
|
423
|
-
if (!Object.
|
423
|
+
if (!Object.hasOwn(obj, prop)) {
|
424
424
|
sbvrUtils.logger[request.vocabulary].warn(
|
425
425
|
`Assigning a new request.values property '${prop}' however it will be ignored`,
|
426
426
|
);
|
@@ -0,0 +1,421 @@
|
|
1
|
+
import type { Types } from '@balena/abstract-sql-to-typescript';
|
2
|
+
|
3
|
+
export interface Permission {
|
4
|
+
Read: {
|
5
|
+
created_at: Types['Date Time']['Read'];
|
6
|
+
modified_at: Types['Date Time']['Read'];
|
7
|
+
id: Types['Serial']['Read'];
|
8
|
+
name: Types['Text']['Read'];
|
9
|
+
is_of__role?: Array<RoleHasPermission['Read']>;
|
10
|
+
is_of__user?: Array<UserHasPermission['Read']>;
|
11
|
+
is_of__api_key?: Array<ApiKeyHasPermission['Read']>;
|
12
|
+
user__has__permission?: Array<UserHasPermission['Read']>;
|
13
|
+
user_permission?: Array<UserHasPermission['Read']>;
|
14
|
+
};
|
15
|
+
Write: {
|
16
|
+
created_at: Types['Date Time']['Write'];
|
17
|
+
modified_at: Types['Date Time']['Write'];
|
18
|
+
id: Types['Serial']['Write'];
|
19
|
+
name: Types['Text']['Write'];
|
20
|
+
};
|
21
|
+
}
|
22
|
+
|
23
|
+
export interface Role {
|
24
|
+
Read: {
|
25
|
+
created_at: Types['Date Time']['Read'];
|
26
|
+
modified_at: Types['Date Time']['Read'];
|
27
|
+
id: Types['Serial']['Read'];
|
28
|
+
name: Types['Text']['Read'];
|
29
|
+
role__has__permission?: Array<RoleHasPermission['Read']>;
|
30
|
+
user__has__role?: Array<UserHasRole['Read']>;
|
31
|
+
user_role?: Array<UserHasRole['Read']>;
|
32
|
+
is_of__user?: Array<UserHasRole['Read']>;
|
33
|
+
is_of__api_key?: Array<ApiKeyHasRole['Read']>;
|
34
|
+
};
|
35
|
+
Write: {
|
36
|
+
created_at: Types['Date Time']['Write'];
|
37
|
+
modified_at: Types['Date Time']['Write'];
|
38
|
+
id: Types['Serial']['Write'];
|
39
|
+
name: Types['Text']['Write'];
|
40
|
+
};
|
41
|
+
}
|
42
|
+
|
43
|
+
export interface RoleHasPermission {
|
44
|
+
Read: {
|
45
|
+
created_at: Types['Date Time']['Read'];
|
46
|
+
modified_at: Types['Date Time']['Read'];
|
47
|
+
role: { __id: Role['Read']['id'] } | [Role['Read']];
|
48
|
+
permission: { __id: Permission['Read']['id'] } | [Permission['Read']];
|
49
|
+
id: Types['Serial']['Read'];
|
50
|
+
is_of__role: { __id: Role['Read']['id'] } | [Role['Read']];
|
51
|
+
};
|
52
|
+
Write: {
|
53
|
+
created_at: Types['Date Time']['Write'];
|
54
|
+
modified_at: Types['Date Time']['Write'];
|
55
|
+
role: Role['Write']['id'];
|
56
|
+
permission: Permission['Write']['id'];
|
57
|
+
id: Types['Serial']['Write'];
|
58
|
+
};
|
59
|
+
}
|
60
|
+
|
61
|
+
export interface Actor {
|
62
|
+
Read: {
|
63
|
+
created_at: Types['Date Time']['Read'];
|
64
|
+
modified_at: Types['Date Time']['Read'];
|
65
|
+
id: Types['Serial']['Read'];
|
66
|
+
is_of__user?: Array<User['Read']>;
|
67
|
+
api_key?: Array<ApiKey['Read']>;
|
68
|
+
};
|
69
|
+
Write: {
|
70
|
+
created_at: Types['Date Time']['Write'];
|
71
|
+
modified_at: Types['Date Time']['Write'];
|
72
|
+
id: Types['Serial']['Write'];
|
73
|
+
};
|
74
|
+
}
|
75
|
+
|
76
|
+
export interface User {
|
77
|
+
Read: {
|
78
|
+
created_at: Types['Date Time']['Read'];
|
79
|
+
modified_at: Types['Date Time']['Read'];
|
80
|
+
id: Types['Serial']['Read'];
|
81
|
+
actor: { __id: Actor['Read']['id'] } | [Actor['Read']];
|
82
|
+
username: Types['Short Text']['Read'];
|
83
|
+
password: Types['Hashed']['Read'];
|
84
|
+
user__has__role?: Array<UserHasRole['Read']>;
|
85
|
+
user_role?: Array<UserHasRole['Read']>;
|
86
|
+
user__has__permission?: Array<UserHasPermission['Read']>;
|
87
|
+
user_permission?: Array<UserHasPermission['Read']>;
|
88
|
+
};
|
89
|
+
Write: {
|
90
|
+
created_at: Types['Date Time']['Write'];
|
91
|
+
modified_at: Types['Date Time']['Write'];
|
92
|
+
id: Types['Serial']['Write'];
|
93
|
+
actor: Actor['Write']['id'];
|
94
|
+
username: Types['Short Text']['Write'];
|
95
|
+
password: Types['Hashed']['Write'];
|
96
|
+
};
|
97
|
+
}
|
98
|
+
|
99
|
+
export interface UserHasRole {
|
100
|
+
Read: {
|
101
|
+
created_at: Types['Date Time']['Read'];
|
102
|
+
modified_at: Types['Date Time']['Read'];
|
103
|
+
user: { __id: User['Read']['id'] } | [User['Read']];
|
104
|
+
role: { __id: Role['Read']['id'] } | [Role['Read']];
|
105
|
+
id: Types['Serial']['Read'];
|
106
|
+
expiry_date: Types['Date Time']['Read'] | null;
|
107
|
+
is_of__user: { __id: User['Read']['id'] } | [User['Read']];
|
108
|
+
};
|
109
|
+
Write: {
|
110
|
+
created_at: Types['Date Time']['Write'];
|
111
|
+
modified_at: Types['Date Time']['Write'];
|
112
|
+
user: User['Write']['id'];
|
113
|
+
role: Role['Write']['id'];
|
114
|
+
id: Types['Serial']['Write'];
|
115
|
+
expiry_date: Types['Date Time']['Write'] | null;
|
116
|
+
};
|
117
|
+
}
|
118
|
+
|
119
|
+
export interface UserHasPermission {
|
120
|
+
Read: {
|
121
|
+
created_at: Types['Date Time']['Read'];
|
122
|
+
modified_at: Types['Date Time']['Read'];
|
123
|
+
user: { __id: User['Read']['id'] } | [User['Read']];
|
124
|
+
permission: { __id: Permission['Read']['id'] } | [Permission['Read']];
|
125
|
+
id: Types['Serial']['Read'];
|
126
|
+
expiry_date: Types['Date Time']['Read'] | null;
|
127
|
+
is_of__user: { __id: User['Read']['id'] } | [User['Read']];
|
128
|
+
};
|
129
|
+
Write: {
|
130
|
+
created_at: Types['Date Time']['Write'];
|
131
|
+
modified_at: Types['Date Time']['Write'];
|
132
|
+
user: User['Write']['id'];
|
133
|
+
permission: Permission['Write']['id'];
|
134
|
+
id: Types['Serial']['Write'];
|
135
|
+
expiry_date: Types['Date Time']['Write'] | null;
|
136
|
+
};
|
137
|
+
}
|
138
|
+
|
139
|
+
export interface ApiKey {
|
140
|
+
Read: {
|
141
|
+
created_at: Types['Date Time']['Read'];
|
142
|
+
modified_at: Types['Date Time']['Read'];
|
143
|
+
id: Types['Serial']['Read'];
|
144
|
+
key: Types['Short Text']['Read'];
|
145
|
+
expiry_date: Types['Date Time']['Read'] | null;
|
146
|
+
is_of__actor: { __id: Actor['Read']['id'] } | [Actor['Read']];
|
147
|
+
name: Types['Text']['Read'] | null;
|
148
|
+
description: Types['Text']['Read'] | null;
|
149
|
+
api_key__has__role?: Array<ApiKeyHasRole['Read']>;
|
150
|
+
api_key__has__permission?: Array<ApiKeyHasPermission['Read']>;
|
151
|
+
};
|
152
|
+
Write: {
|
153
|
+
created_at: Types['Date Time']['Write'];
|
154
|
+
modified_at: Types['Date Time']['Write'];
|
155
|
+
id: Types['Serial']['Write'];
|
156
|
+
key: Types['Short Text']['Write'];
|
157
|
+
expiry_date: Types['Date Time']['Write'] | null;
|
158
|
+
is_of__actor: Actor['Write']['id'];
|
159
|
+
name: Types['Text']['Write'] | null;
|
160
|
+
description: Types['Text']['Write'] | null;
|
161
|
+
};
|
162
|
+
}
|
163
|
+
|
164
|
+
export interface ApiKeyHasRole {
|
165
|
+
Read: {
|
166
|
+
created_at: Types['Date Time']['Read'];
|
167
|
+
modified_at: Types['Date Time']['Read'];
|
168
|
+
api_key: { __id: ApiKey['Read']['id'] } | [ApiKey['Read']];
|
169
|
+
role: { __id: Role['Read']['id'] } | [Role['Read']];
|
170
|
+
id: Types['Serial']['Read'];
|
171
|
+
is_of__api_key: { __id: ApiKey['Read']['id'] } | [ApiKey['Read']];
|
172
|
+
};
|
173
|
+
Write: {
|
174
|
+
created_at: Types['Date Time']['Write'];
|
175
|
+
modified_at: Types['Date Time']['Write'];
|
176
|
+
api_key: ApiKey['Write']['id'];
|
177
|
+
role: Role['Write']['id'];
|
178
|
+
id: Types['Serial']['Write'];
|
179
|
+
};
|
180
|
+
}
|
181
|
+
|
182
|
+
export interface ApiKeyHasPermission {
|
183
|
+
Read: {
|
184
|
+
created_at: Types['Date Time']['Read'];
|
185
|
+
modified_at: Types['Date Time']['Read'];
|
186
|
+
api_key: { __id: ApiKey['Read']['id'] } | [ApiKey['Read']];
|
187
|
+
permission: { __id: Permission['Read']['id'] } | [Permission['Read']];
|
188
|
+
id: Types['Serial']['Read'];
|
189
|
+
is_of__api_key: { __id: ApiKey['Read']['id'] } | [ApiKey['Read']];
|
190
|
+
};
|
191
|
+
Write: {
|
192
|
+
created_at: Types['Date Time']['Write'];
|
193
|
+
modified_at: Types['Date Time']['Write'];
|
194
|
+
api_key: ApiKey['Write']['id'];
|
195
|
+
permission: Permission['Write']['id'];
|
196
|
+
id: Types['Serial']['Write'];
|
197
|
+
};
|
198
|
+
}
|
199
|
+
|
200
|
+
export interface Permission {
|
201
|
+
Read: {
|
202
|
+
created_at: Types['Date Time']['Read'];
|
203
|
+
modified_at: Types['Date Time']['Read'];
|
204
|
+
id: Types['Serial']['Read'];
|
205
|
+
name: Types['Text']['Read'];
|
206
|
+
is_of__role?: Array<RoleHasPermission['Read']>;
|
207
|
+
is_of__user?: Array<UserHasPermission['Read']>;
|
208
|
+
is_of__api_key?: Array<ApiKeyHasPermission['Read']>;
|
209
|
+
user__has__permission?: Array<UserHasPermission['Read']>;
|
210
|
+
user_permission?: Array<UserHasPermission['Read']>;
|
211
|
+
};
|
212
|
+
Write: {
|
213
|
+
created_at: Types['Date Time']['Write'];
|
214
|
+
modified_at: Types['Date Time']['Write'];
|
215
|
+
id: Types['Serial']['Write'];
|
216
|
+
name: Types['Text']['Write'];
|
217
|
+
};
|
218
|
+
}
|
219
|
+
|
220
|
+
export interface Role {
|
221
|
+
Read: {
|
222
|
+
created_at: Types['Date Time']['Read'];
|
223
|
+
modified_at: Types['Date Time']['Read'];
|
224
|
+
id: Types['Serial']['Read'];
|
225
|
+
name: Types['Text']['Read'];
|
226
|
+
role__has__permission?: Array<RoleHasPermission['Read']>;
|
227
|
+
user__has__role?: Array<UserHasRole['Read']>;
|
228
|
+
user_role?: Array<UserHasRole['Read']>;
|
229
|
+
is_of__user?: Array<UserHasRole['Read']>;
|
230
|
+
is_of__api_key?: Array<ApiKeyHasRole['Read']>;
|
231
|
+
};
|
232
|
+
Write: {
|
233
|
+
created_at: Types['Date Time']['Write'];
|
234
|
+
modified_at: Types['Date Time']['Write'];
|
235
|
+
id: Types['Serial']['Write'];
|
236
|
+
name: Types['Text']['Write'];
|
237
|
+
};
|
238
|
+
}
|
239
|
+
|
240
|
+
export interface RoleHasPermission {
|
241
|
+
Read: {
|
242
|
+
created_at: Types['Date Time']['Read'];
|
243
|
+
modified_at: Types['Date Time']['Read'];
|
244
|
+
role: { __id: Role['Read']['id'] } | [Role['Read']];
|
245
|
+
permission: { __id: Permission['Read']['id'] } | [Permission['Read']];
|
246
|
+
id: Types['Serial']['Read'];
|
247
|
+
is_of__role: { __id: Role['Read']['id'] } | [Role['Read']];
|
248
|
+
};
|
249
|
+
Write: {
|
250
|
+
created_at: Types['Date Time']['Write'];
|
251
|
+
modified_at: Types['Date Time']['Write'];
|
252
|
+
role: Role['Write']['id'];
|
253
|
+
permission: Permission['Write']['id'];
|
254
|
+
id: Types['Serial']['Write'];
|
255
|
+
};
|
256
|
+
}
|
257
|
+
|
258
|
+
export interface Actor {
|
259
|
+
Read: {
|
260
|
+
created_at: Types['Date Time']['Read'];
|
261
|
+
modified_at: Types['Date Time']['Read'];
|
262
|
+
id: Types['Serial']['Read'];
|
263
|
+
is_of__user?: Array<User['Read']>;
|
264
|
+
api_key?: Array<ApiKey['Read']>;
|
265
|
+
};
|
266
|
+
Write: {
|
267
|
+
created_at: Types['Date Time']['Write'];
|
268
|
+
modified_at: Types['Date Time']['Write'];
|
269
|
+
id: Types['Serial']['Write'];
|
270
|
+
};
|
271
|
+
}
|
272
|
+
|
273
|
+
export interface User {
|
274
|
+
Read: {
|
275
|
+
created_at: Types['Date Time']['Read'];
|
276
|
+
modified_at: Types['Date Time']['Read'];
|
277
|
+
id: Types['Serial']['Read'];
|
278
|
+
actor: { __id: Actor['Read']['id'] } | [Actor['Read']];
|
279
|
+
username: Types['Short Text']['Read'];
|
280
|
+
password: Types['Hashed']['Read'];
|
281
|
+
user__has__role?: Array<UserHasRole['Read']>;
|
282
|
+
user_role?: Array<UserHasRole['Read']>;
|
283
|
+
user__has__permission?: Array<UserHasPermission['Read']>;
|
284
|
+
user_permission?: Array<UserHasPermission['Read']>;
|
285
|
+
};
|
286
|
+
Write: {
|
287
|
+
created_at: Types['Date Time']['Write'];
|
288
|
+
modified_at: Types['Date Time']['Write'];
|
289
|
+
id: Types['Serial']['Write'];
|
290
|
+
actor: Actor['Write']['id'];
|
291
|
+
username: Types['Short Text']['Write'];
|
292
|
+
password: Types['Hashed']['Write'];
|
293
|
+
};
|
294
|
+
}
|
295
|
+
|
296
|
+
export interface UserHasRole {
|
297
|
+
Read: {
|
298
|
+
created_at: Types['Date Time']['Read'];
|
299
|
+
modified_at: Types['Date Time']['Read'];
|
300
|
+
user: { __id: User['Read']['id'] } | [User['Read']];
|
301
|
+
role: { __id: Role['Read']['id'] } | [Role['Read']];
|
302
|
+
id: Types['Serial']['Read'];
|
303
|
+
expiry_date: Types['Date Time']['Read'] | null;
|
304
|
+
is_of__user: { __id: User['Read']['id'] } | [User['Read']];
|
305
|
+
};
|
306
|
+
Write: {
|
307
|
+
created_at: Types['Date Time']['Write'];
|
308
|
+
modified_at: Types['Date Time']['Write'];
|
309
|
+
user: User['Write']['id'];
|
310
|
+
role: Role['Write']['id'];
|
311
|
+
id: Types['Serial']['Write'];
|
312
|
+
expiry_date: Types['Date Time']['Write'] | null;
|
313
|
+
};
|
314
|
+
}
|
315
|
+
|
316
|
+
export interface UserHasPermission {
|
317
|
+
Read: {
|
318
|
+
created_at: Types['Date Time']['Read'];
|
319
|
+
modified_at: Types['Date Time']['Read'];
|
320
|
+
user: { __id: User['Read']['id'] } | [User['Read']];
|
321
|
+
permission: { __id: Permission['Read']['id'] } | [Permission['Read']];
|
322
|
+
id: Types['Serial']['Read'];
|
323
|
+
expiry_date: Types['Date Time']['Read'] | null;
|
324
|
+
is_of__user: { __id: User['Read']['id'] } | [User['Read']];
|
325
|
+
};
|
326
|
+
Write: {
|
327
|
+
created_at: Types['Date Time']['Write'];
|
328
|
+
modified_at: Types['Date Time']['Write'];
|
329
|
+
user: User['Write']['id'];
|
330
|
+
permission: Permission['Write']['id'];
|
331
|
+
id: Types['Serial']['Write'];
|
332
|
+
expiry_date: Types['Date Time']['Write'] | null;
|
333
|
+
};
|
334
|
+
}
|
335
|
+
|
336
|
+
export interface ApiKey {
|
337
|
+
Read: {
|
338
|
+
created_at: Types['Date Time']['Read'];
|
339
|
+
modified_at: Types['Date Time']['Read'];
|
340
|
+
id: Types['Serial']['Read'];
|
341
|
+
key: Types['Short Text']['Read'];
|
342
|
+
expiry_date: Types['Date Time']['Read'] | null;
|
343
|
+
is_of__actor: { __id: Actor['Read']['id'] } | [Actor['Read']];
|
344
|
+
name: Types['Text']['Read'] | null;
|
345
|
+
description: Types['Text']['Read'] | null;
|
346
|
+
api_key__has__role?: Array<ApiKeyHasRole['Read']>;
|
347
|
+
api_key__has__permission?: Array<ApiKeyHasPermission['Read']>;
|
348
|
+
};
|
349
|
+
Write: {
|
350
|
+
created_at: Types['Date Time']['Write'];
|
351
|
+
modified_at: Types['Date Time']['Write'];
|
352
|
+
id: Types['Serial']['Write'];
|
353
|
+
key: Types['Short Text']['Write'];
|
354
|
+
expiry_date: Types['Date Time']['Write'] | null;
|
355
|
+
is_of__actor: Actor['Write']['id'];
|
356
|
+
name: Types['Text']['Write'] | null;
|
357
|
+
description: Types['Text']['Write'] | null;
|
358
|
+
};
|
359
|
+
}
|
360
|
+
|
361
|
+
export interface ApiKeyHasRole {
|
362
|
+
Read: {
|
363
|
+
created_at: Types['Date Time']['Read'];
|
364
|
+
modified_at: Types['Date Time']['Read'];
|
365
|
+
api_key: { __id: ApiKey['Read']['id'] } | [ApiKey['Read']];
|
366
|
+
role: { __id: Role['Read']['id'] } | [Role['Read']];
|
367
|
+
id: Types['Serial']['Read'];
|
368
|
+
is_of__api_key: { __id: ApiKey['Read']['id'] } | [ApiKey['Read']];
|
369
|
+
};
|
370
|
+
Write: {
|
371
|
+
created_at: Types['Date Time']['Write'];
|
372
|
+
modified_at: Types['Date Time']['Write'];
|
373
|
+
api_key: ApiKey['Write']['id'];
|
374
|
+
role: Role['Write']['id'];
|
375
|
+
id: Types['Serial']['Write'];
|
376
|
+
};
|
377
|
+
}
|
378
|
+
|
379
|
+
export interface ApiKeyHasPermission {
|
380
|
+
Read: {
|
381
|
+
created_at: Types['Date Time']['Read'];
|
382
|
+
modified_at: Types['Date Time']['Read'];
|
383
|
+
api_key: { __id: ApiKey['Read']['id'] } | [ApiKey['Read']];
|
384
|
+
permission: { __id: Permission['Read']['id'] } | [Permission['Read']];
|
385
|
+
id: Types['Serial']['Read'];
|
386
|
+
is_of__api_key: { __id: ApiKey['Read']['id'] } | [ApiKey['Read']];
|
387
|
+
};
|
388
|
+
Write: {
|
389
|
+
created_at: Types['Date Time']['Write'];
|
390
|
+
modified_at: Types['Date Time']['Write'];
|
391
|
+
api_key: ApiKey['Write']['id'];
|
392
|
+
permission: Permission['Write']['id'];
|
393
|
+
id: Types['Serial']['Write'];
|
394
|
+
};
|
395
|
+
}
|
396
|
+
|
397
|
+
export default interface $Model {
|
398
|
+
permission: Permission;
|
399
|
+
role: Role;
|
400
|
+
role__has__permission: RoleHasPermission;
|
401
|
+
actor: Actor;
|
402
|
+
user: User;
|
403
|
+
user__has__role: UserHasRole;
|
404
|
+
user__has__permission: UserHasPermission;
|
405
|
+
api_key: ApiKey;
|
406
|
+
api_key__has__role: ApiKeyHasRole;
|
407
|
+
api_key__has__permission: ApiKeyHasPermission;
|
408
|
+
permission$sbvr__compiler: Permission;
|
409
|
+
role$sbvr__compiler: Role;
|
410
|
+
role__has__permission$sbvr__compiler: RoleHasPermission;
|
411
|
+
actor$sbvr__compiler: Actor;
|
412
|
+
user$sbvr__compiler: User;
|
413
|
+
user__has__role$sbvr__compiler: UserHasRole;
|
414
|
+
user__has__permission$sbvr__compiler: UserHasPermission;
|
415
|
+
api_key$sbvr__compiler: ApiKey;
|
416
|
+
api_key__has__role$sbvr__compiler: ApiKeyHasRole;
|
417
|
+
api_key__has__permission$sbvr__compiler: ApiKeyHasPermission;
|
418
|
+
// Synonyms
|
419
|
+
user_role: UserHasRole;
|
420
|
+
user_permission: UserHasPermission;
|
421
|
+
}
|
@@ -6,7 +6,6 @@ import * as dbModule from '../database-layer/db';
|
|
6
6
|
import * as configLoader from '../config-loader/config-loader';
|
7
7
|
import * as migrator from '../migrator/sync';
|
8
8
|
import type * as migratorUtils from '../migrator/utils';
|
9
|
-
import * as tasks from '../tasks';
|
10
9
|
|
11
10
|
import * as sbvrUtils from '../sbvr-api/sbvr-utils';
|
12
11
|
import { PINEJS_ADVISORY_LOCK } from '../config-loader/env';
|
@@ -20,7 +19,6 @@ export * as errors from '../sbvr-api/errors';
|
|
20
19
|
export * as env from '../config-loader/env';
|
21
20
|
export * as types from '../sbvr-api/common-types';
|
22
21
|
export * as hooks from '../sbvr-api/hooks';
|
23
|
-
export * as tasks from '../tasks';
|
24
22
|
export * as webResourceHandler from '../webresource-handler';
|
25
23
|
export type { configLoader as ConfigLoader };
|
26
24
|
export type { migratorUtils as Migrator };
|
@@ -65,7 +63,6 @@ export const init = async <T extends string>(
|
|
65
63
|
await sbvrUtils.setup(app, db);
|
66
64
|
const cfgLoader = await configLoader.setup(app);
|
67
65
|
await cfgLoader.loadConfig(migrator.config);
|
68
|
-
await cfgLoader.loadConfig(tasks.config);
|
69
66
|
|
70
67
|
const promises: Array<Promise<void>> = [];
|
71
68
|
if (process.env.SBVR_SERVER_ENABLED) {
|