pangea-server 3.3.71 → 3.3.72
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/dist/auth/access-token.class.d.ts +2 -4
- package/dist/auth/auth.helpers.d.ts +4 -12
- package/dist/auth/auth.types.d.ts +1 -1
- package/dist/auth/base-auth.class.d.ts +1 -3
- package/dist/database/database.types.d.ts +1 -5
- package/dist/database/db.class.d.ts +11 -26
- package/dist/database/db.class.js +31 -52
- package/package.json +1 -1
|
@@ -6,10 +6,8 @@ export declare class AccessToken {
|
|
|
6
6
|
getKey(userCtor: UserCtor): string;
|
|
7
7
|
createToken(userCtor: UserCtor, id: ModelId): string;
|
|
8
8
|
verifyToken(token: string): Record<string, ModelId>;
|
|
9
|
-
getTokenData(userCtor: UserCtor, user:
|
|
9
|
+
getTokenData(userCtor: UserCtor, user: User): {
|
|
10
10
|
accessToken: string;
|
|
11
|
-
user:
|
|
12
|
-
omit: never;
|
|
13
|
-
}>;
|
|
11
|
+
user: User;
|
|
14
12
|
};
|
|
15
13
|
}
|
|
@@ -4,22 +4,14 @@ import type { UserCtor, AuthMap } from './auth.types';
|
|
|
4
4
|
type AuthHeader = string | undefined;
|
|
5
5
|
export declare function login<U extends User>(authHeader: AuthHeader, db: Db, accessToken: AccessToken, userCtor: BaseModelCtor<U>, extraWhere?: Where<U>): Promise<{
|
|
6
6
|
accessToken: string;
|
|
7
|
-
user:
|
|
8
|
-
omit: never;
|
|
9
|
-
}>;
|
|
7
|
+
user: User;
|
|
10
8
|
}>;
|
|
11
9
|
export declare function validateAccessToken(authHeader: AuthHeader, db: Db, accessToken: AccessToken, userCtor: UserCtor): Promise<{
|
|
12
10
|
accessToken: string;
|
|
13
|
-
user:
|
|
14
|
-
omit: never;
|
|
15
|
-
}>;
|
|
11
|
+
user: User;
|
|
16
12
|
}>;
|
|
17
|
-
export declare function getUserFromToken(authHeader: AuthHeader, db: Db, accessToken: AccessToken, userCtor: UserCtor): Promise<
|
|
18
|
-
omit: never;
|
|
19
|
-
}> | null> | null;
|
|
13
|
+
export declare function getUserFromToken(authHeader: AuthHeader, db: Db, accessToken: AccessToken, userCtor: UserCtor): Promise<User | null> | null;
|
|
20
14
|
export declare function getUsersFromToken(authHeader: AuthHeader, db: Db, accessToken: AccessToken, authMap: AuthMap): Promise<{
|
|
21
|
-
[k: string]:
|
|
22
|
-
omit: never;
|
|
23
|
-
}> | null;
|
|
15
|
+
[k: string]: User | null;
|
|
24
16
|
}>;
|
|
25
17
|
export {};
|
|
@@ -4,7 +4,7 @@ export type UserCtor = BaseModelCtor<User>;
|
|
|
4
4
|
export type AuthMap = Record<string, UserCtor>;
|
|
5
5
|
export type UserType<AM extends AuthMap> = keyof AM;
|
|
6
6
|
export type AuthUsers<AM extends AuthMap> = {
|
|
7
|
-
[K in keyof AM]:
|
|
7
|
+
[K in keyof AM]: InstanceType<AM[K]> | null;
|
|
8
8
|
};
|
|
9
9
|
export interface AuthCtor<AM extends AuthMap, AU extends AuthUsers<AM>, BA extends BaseAuth<AM>, IR extends any> {
|
|
10
10
|
new (authUsers: AU, initRes?: IR): BA;
|
|
@@ -7,7 +7,5 @@ export declare abstract class BaseAuth<AM extends AuthMap> {
|
|
|
7
7
|
notAllowed(): never;
|
|
8
8
|
isUserAuth<T extends UserType<AM>>(type: T): boolean;
|
|
9
9
|
getUserAuth<T extends UserType<AM>>(type: T): NonNullable<AuthUsers<AM>[T]>;
|
|
10
|
-
getUsersAuth<const T extends readonly UserType<AM>[]>(types: T): { [I in keyof T]:
|
|
11
|
-
omit: never;
|
|
12
|
-
}> | null; };
|
|
10
|
+
getUsersAuth<const T extends readonly UserType<AM>[]>(types: T): { [I in keyof T]: InstanceType<AM[T[I]]> | null; };
|
|
13
11
|
}
|
|
@@ -2,7 +2,7 @@ import * as seq from 'sequelize-typescript';
|
|
|
2
2
|
import { BaseModel } from './models';
|
|
3
3
|
import { Db as _Db } from './db.class';
|
|
4
4
|
import type { OptionalFields, OptionalIfNullish } from 'pangea-helpers';
|
|
5
|
-
import type {
|
|
5
|
+
import type { InferCreationAttributes, CreationOptional, NonAttribute, AbstractDataTypeConstructor, AbstractDataType, Transaction, WhereOptions } from 'sequelize';
|
|
6
6
|
import type { ModelCtor } from 'sequelize-typescript';
|
|
7
7
|
declare global {
|
|
8
8
|
type ModelId = number;
|
|
@@ -16,10 +16,6 @@ declare global {
|
|
|
16
16
|
type Where<BM extends BaseModel> = WhereOptions<BM> & Record<symbol, any>;
|
|
17
17
|
type InsertParams<BM extends BaseModel> = OptionalIfNullish<OptionalIfOptional<StripRelations<OptionalFields<IncludeHidden<Omit<InferCreationAttributes<BM>, '__brand'>>, Exclude<keyof InferCreationAttributes<BM>, '__brand'> & 'id'>>>>;
|
|
18
18
|
type UpdateParams<BM extends BaseModel> = Partial<InsertParams<BM>>;
|
|
19
|
-
type UpdateParamsWithId<BM extends BaseModel> = UpdateParams<BM> & {
|
|
20
|
-
id: ModelId;
|
|
21
|
-
};
|
|
22
|
-
type ModelInstance<BM extends BaseModel> = InferAttributes<BM>;
|
|
23
19
|
type Tx = Transaction;
|
|
24
20
|
type Db = _Db;
|
|
25
21
|
}
|
|
@@ -33,51 +33,36 @@ type AggregateManyConfig = {
|
|
|
33
33
|
group: Group;
|
|
34
34
|
};
|
|
35
35
|
type AggregateManyOptions<BM extends BaseModel> = Omit<FindManyOptions<BM>, 'order'>;
|
|
36
|
+
type Target<BM extends BaseModel> = Filters<BM> | BM;
|
|
36
37
|
export declare class Db {
|
|
37
38
|
private __tx?;
|
|
38
39
|
constructor(tx: Tx);
|
|
39
|
-
findOneOrNull<BM extends BaseModel>(model: BaseModelCtor<BM>, filters: Filters<BM>, options?: FindOneOptions): Promise<
|
|
40
|
-
|
|
41
|
-
}> | null>;
|
|
42
|
-
findOne<BM extends BaseModel>(model: BaseModelCtor<BM>, filters: Filters<BM>, options?: FindOneOptions): Promise<import("sequelize").InferAttributes<BM, {
|
|
43
|
-
omit: never;
|
|
44
|
-
}>>;
|
|
40
|
+
findOneOrNull<BM extends BaseModel>(model: BaseModelCtor<BM>, filters: Filters<BM>, options?: FindOneOptions): Promise<BM | null>;
|
|
41
|
+
findOne<BM extends BaseModel>(model: BaseModelCtor<BM>, filters: Filters<BM>, options?: FindOneOptions): Promise<BM>;
|
|
45
42
|
aggregateOne<BM extends BaseModel>(model: BaseModelCtor<BM>, attributes: Attributes, options?: AggregateOneOptions<BM>): Promise<unknown>;
|
|
46
43
|
private __getFindOneBaseOptions;
|
|
47
|
-
findMany<BM extends BaseModel>(model: BaseModelCtor<BM>, options?: FindManyPagedOptions<BM>): Promise<
|
|
48
|
-
omit: never;
|
|
49
|
-
}>[]>;
|
|
44
|
+
findMany<BM extends BaseModel>(model: BaseModelCtor<BM>, options?: FindManyPagedOptions<BM>): Promise<BM[]>;
|
|
50
45
|
count<BM extends BaseModel>(model: BaseModelCtor<BM>, options?: FindManyOptions<BM>): Promise<number>;
|
|
51
46
|
findManyWithCount<BM extends BaseModel>(model: BaseModelCtor<BM>, options?: FindManyPagedOptions<BM>): Promise<{
|
|
52
|
-
instances:
|
|
53
|
-
omit: never;
|
|
54
|
-
}>[];
|
|
47
|
+
instances: BM[];
|
|
55
48
|
totalCount: number;
|
|
56
49
|
}>;
|
|
57
50
|
aggregateMany<BM extends BaseModel>(model: BaseModelCtor<BM>, config: AggregateManyConfig, options?: AggregateManyOptions<BM>): Promise<unknown[]>;
|
|
58
51
|
private __getFindManyBaseOptions;
|
|
59
|
-
insertOne<BM extends BaseModel>(model: BaseModelCtor<BM>, params: InsertParams<BM>): Promise<
|
|
60
|
-
omit: never;
|
|
61
|
-
}>>;
|
|
52
|
+
insertOne<BM extends BaseModel>(model: BaseModelCtor<BM>, params: InsertParams<BM>): Promise<BM>;
|
|
62
53
|
insertMany<BM extends BaseModel>(model: BaseModelCtor<BM>, data: InsertParams<BM>[]): Promise<number>;
|
|
63
54
|
upsertMany<BM extends BaseModel>(model: BaseModelCtor<BM>, fieldsToUpdate: (keyof BM)[], data: InsertParams<BM>[]): Promise<number>;
|
|
64
|
-
updateOne<BM extends BaseModel>(model: BaseModelCtor<BM>, params:
|
|
65
|
-
updateOne<BM extends BaseModel>(model: BaseModelCtor<BM>, id: ModelId, params: UpdateParams<BM>): Promise<ModelInstance<BM>>;
|
|
55
|
+
updateOne<BM extends BaseModel>(model: BaseModelCtor<BM>, target: Target<BM>, params: UpdateParams<BM>): Promise<BM>;
|
|
66
56
|
updateMany<BM extends BaseModel>(model: BaseModelCtor<BM>, where: Where<BM>, params: UpdateParams<BM>): Promise<number>;
|
|
67
|
-
deleteOne<BM extends BaseModel>(model: BaseModelCtor<BM>,
|
|
68
|
-
omit: never;
|
|
69
|
-
}> | null>;
|
|
57
|
+
deleteOne<BM extends BaseModel>(model: BaseModelCtor<BM>, target: Target<BM>): Promise<BM | null>;
|
|
70
58
|
deleteMany<BM extends BaseModel>(model: BaseModelCtor<BM>, where: Where<BM>): Promise<number>;
|
|
71
|
-
destroyOne<BM extends BaseModel>(model: BaseModelCtor<BM>,
|
|
72
|
-
omit: never;
|
|
73
|
-
}> | null>;
|
|
59
|
+
destroyOne<BM extends BaseModel>(model: BaseModelCtor<BM>, target: Target<BM>): Promise<BM | null>;
|
|
74
60
|
destroyMany<BM extends BaseModel>(model: BaseModelCtor<BM>, where: Where<BM>): Promise<number>;
|
|
75
61
|
private __deleteOne;
|
|
76
62
|
private __deleteMany;
|
|
77
|
-
restoreOne<BM extends BaseModel>(model: BaseModelCtor<BM>,
|
|
78
|
-
omit: never;
|
|
79
|
-
}>>;
|
|
63
|
+
restoreOne<BM extends BaseModel>(model: BaseModelCtor<BM>, target: Target<BM>): Promise<BM>;
|
|
80
64
|
restoreMany<BM extends BaseModel>(model: BaseModelCtor<BM>, where: Where<BM>): Promise<void>;
|
|
65
|
+
private __getInstance;
|
|
81
66
|
query(sql: string | {
|
|
82
67
|
query: string;
|
|
83
68
|
values: unknown[];
|
|
@@ -13,24 +13,18 @@ class Db {
|
|
|
13
13
|
this.__tx = tx;
|
|
14
14
|
}
|
|
15
15
|
// find methods
|
|
16
|
-
|
|
16
|
+
findOneOrNull(model, filters, options = {}) {
|
|
17
17
|
const { scopes, order, paranoid = true } = options;
|
|
18
18
|
const scopedModel = scopes?.length ? model.scope(...scopes) : model;
|
|
19
19
|
const baseOptions = this.__getFindOneBaseOptions(paranoid);
|
|
20
|
-
let instance;
|
|
21
20
|
if (typeof filters === 'number') {
|
|
22
|
-
|
|
21
|
+
return scopedModel.findByPk(filters, { ...baseOptions, ...getInclude(model) });
|
|
23
22
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
if (!instance)
|
|
32
|
-
return null;
|
|
33
|
-
return processInstance(model, instance);
|
|
23
|
+
return scopedModel.findOne({
|
|
24
|
+
...baseOptions,
|
|
25
|
+
...getInclude(model, { where: filters }),
|
|
26
|
+
order: getFinalOrder(order),
|
|
27
|
+
});
|
|
34
28
|
}
|
|
35
29
|
async findOne(model, filters, options = {}) {
|
|
36
30
|
const instance = await this.findOneOrNull(model, filters, options);
|
|
@@ -54,7 +48,6 @@ class Db {
|
|
|
54
48
|
async findMany(model, options = {}) {
|
|
55
49
|
const baseOptions = this.__getFindManyBaseOptions(model, options);
|
|
56
50
|
const { page, pageSize } = options;
|
|
57
|
-
let instances;
|
|
58
51
|
if (page && pageSize) {
|
|
59
52
|
const idRows = await model.findAll({
|
|
60
53
|
...baseOptions,
|
|
@@ -65,12 +58,9 @@ class Db {
|
|
|
65
58
|
limit: pageSize,
|
|
66
59
|
});
|
|
67
60
|
const ids = idRows.map((row) => row.id);
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
instances = await model.findAll(baseOptions);
|
|
61
|
+
return model.findAll({ ...baseOptions, where: { id: { [_1.Ops.in]: ids } } });
|
|
72
62
|
}
|
|
73
|
-
return
|
|
63
|
+
return model.findAll(baseOptions);
|
|
74
64
|
}
|
|
75
65
|
async count(model, options = {}) {
|
|
76
66
|
const baseOptions = this.__getFindManyBaseOptions(model, options);
|
|
@@ -153,12 +143,12 @@ class Db {
|
|
|
153
143
|
return newInstances.length;
|
|
154
144
|
});
|
|
155
145
|
}
|
|
156
|
-
|
|
146
|
+
// update methods
|
|
147
|
+
updateOne(model, target, params) {
|
|
157
148
|
return handleDbError(async () => {
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return this.findOne(model, id);
|
|
149
|
+
const instance = await this.__getInstance(model, target);
|
|
150
|
+
await instance.update(params, { transaction: this.__tx });
|
|
151
|
+
return this.findOne(model, instance.id);
|
|
162
152
|
});
|
|
163
153
|
}
|
|
164
154
|
updateMany(model, where, params) {
|
|
@@ -168,22 +158,23 @@ class Db {
|
|
|
168
158
|
});
|
|
169
159
|
}
|
|
170
160
|
// delete methods
|
|
171
|
-
deleteOne(model,
|
|
172
|
-
return this.__deleteOne(model,
|
|
161
|
+
deleteOne(model, target) {
|
|
162
|
+
return this.__deleteOne(model, target, false);
|
|
173
163
|
}
|
|
174
164
|
deleteMany(model, where) {
|
|
175
165
|
return this.__deleteMany(model, where, false);
|
|
176
166
|
}
|
|
177
|
-
destroyOne(model,
|
|
178
|
-
return this.__deleteOne(model,
|
|
167
|
+
destroyOne(model, target) {
|
|
168
|
+
return this.__deleteOne(model, target, true);
|
|
179
169
|
}
|
|
180
170
|
destroyMany(model, where) {
|
|
181
171
|
return this.__deleteMany(model, where, true);
|
|
182
172
|
}
|
|
183
|
-
__deleteOne(model,
|
|
173
|
+
__deleteOne(model, target, force) {
|
|
184
174
|
return handleDbError(async () => {
|
|
185
|
-
|
|
186
|
-
|
|
175
|
+
const instance = await this.__getInstance(model, target);
|
|
176
|
+
await instance.destroy({ force, transaction: this.__tx });
|
|
177
|
+
return this.findOneOrNull(model, instance.id, { paranoid: false });
|
|
187
178
|
});
|
|
188
179
|
}
|
|
189
180
|
__deleteMany(model, where, force) {
|
|
@@ -192,10 +183,11 @@ class Db {
|
|
|
192
183
|
});
|
|
193
184
|
}
|
|
194
185
|
// restore methods
|
|
195
|
-
restoreOne(model,
|
|
186
|
+
restoreOne(model, target) {
|
|
196
187
|
return handleDbError(async () => {
|
|
197
|
-
await
|
|
198
|
-
|
|
188
|
+
const instance = await this.__getInstance(model, target, false);
|
|
189
|
+
await instance.restore({ transaction: this.__tx });
|
|
190
|
+
return this.findOne(model, instance.id);
|
|
199
191
|
});
|
|
200
192
|
}
|
|
201
193
|
restoreMany(model, where) {
|
|
@@ -204,6 +196,11 @@ class Db {
|
|
|
204
196
|
});
|
|
205
197
|
}
|
|
206
198
|
// helpers methods
|
|
199
|
+
__getInstance(model, target, paranoid = true) {
|
|
200
|
+
if (target && typeof target === 'object' && 'id' in target)
|
|
201
|
+
return target;
|
|
202
|
+
return this.findOne(model, target, { paranoid });
|
|
203
|
+
}
|
|
207
204
|
query(sql) {
|
|
208
205
|
const dbClient = (0, db_client_1.getDbClient)();
|
|
209
206
|
return dbClient.query(sql, { transaction: this.__tx });
|
|
@@ -304,24 +301,6 @@ function getFinalOrder(order, config = {}) {
|
|
|
304
301
|
});
|
|
305
302
|
return [...finalOrder, ...(!config.attributes ? [['createdAt', 'DESC']] : [])];
|
|
306
303
|
}
|
|
307
|
-
function processInstance(model, instance) {
|
|
308
|
-
for (const [relName] of Object.entries(model.Relations)) {
|
|
309
|
-
const relInstance = instance[relName];
|
|
310
|
-
if (!relInstance)
|
|
311
|
-
continue;
|
|
312
|
-
const relModel = model.Relations[relName].getModelFn();
|
|
313
|
-
if (Array.isArray(relInstance)) {
|
|
314
|
-
relInstance.forEach((instance) => processInstance(relModel, instance));
|
|
315
|
-
}
|
|
316
|
-
else {
|
|
317
|
-
processInstance(relModel, relInstance);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
return instance.toJSON();
|
|
321
|
-
}
|
|
322
|
-
function processInstances(model, instances) {
|
|
323
|
-
return instances.map((instance) => processInstance(model, instance));
|
|
324
|
-
}
|
|
325
304
|
async function handleDbError(operation) {
|
|
326
305
|
try {
|
|
327
306
|
return await operation();
|