@technomoron/api-server-base 2.0.0-beta.2 → 2.0.0-beta.21
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.txt +81 -28
- package/dist/cjs/api-module.cjs +9 -0
- package/dist/cjs/api-module.d.ts +7 -4
- package/dist/cjs/api-server-base.cjs +607 -99
- package/dist/cjs/api-server-base.d.ts +80 -23
- package/dist/cjs/auth-api/auth-module.d.ts +23 -3
- package/dist/cjs/auth-api/auth-module.js +320 -124
- package/dist/cjs/auth-api/compat-auth-storage.d.ts +7 -5
- package/dist/cjs/auth-api/compat-auth-storage.js +15 -3
- package/dist/cjs/auth-api/mem-auth-store.d.ts +5 -3
- package/dist/cjs/auth-api/mem-auth-store.js +14 -28
- package/dist/cjs/auth-api/module.d.ts +1 -1
- package/dist/cjs/auth-api/sql-auth-store.d.ts +16 -4
- package/dist/cjs/auth-api/sql-auth-store.js +43 -30
- package/dist/cjs/auth-api/storage.d.ts +6 -4
- package/dist/cjs/auth-api/storage.js +15 -5
- package/dist/cjs/auth-api/types.d.ts +7 -2
- package/dist/cjs/auth-api/user-id.d.ts +5 -0
- package/dist/cjs/auth-api/user-id.js +38 -0
- package/dist/cjs/auth-cookie-options.d.ts +11 -0
- package/dist/cjs/auth-cookie-options.js +66 -0
- package/dist/cjs/index.cjs +4 -14
- package/dist/cjs/index.d.ts +4 -9
- package/dist/cjs/oauth/memory.d.ts +6 -0
- package/dist/cjs/oauth/memory.js +44 -11
- package/dist/cjs/oauth/models.d.ts +7 -2
- package/dist/cjs/oauth/models.js +10 -21
- package/dist/cjs/oauth/sequelize.d.ts +10 -48
- package/dist/cjs/oauth/sequelize.js +44 -99
- package/dist/cjs/oauth/types.d.ts +1 -0
- package/dist/cjs/passkey/base.d.ts +2 -0
- package/dist/cjs/passkey/config.d.ts +2 -0
- package/dist/cjs/passkey/config.js +26 -0
- package/dist/cjs/passkey/memory.d.ts +8 -0
- package/dist/cjs/passkey/memory.js +57 -16
- package/dist/cjs/passkey/models.d.ts +13 -4
- package/dist/cjs/passkey/models.js +41 -14
- package/dist/cjs/passkey/sequelize.d.ts +13 -25
- package/dist/cjs/passkey/sequelize.js +68 -153
- package/dist/cjs/passkey/service.d.ts +6 -2
- package/dist/cjs/passkey/service.js +205 -27
- package/dist/cjs/passkey/types.d.ts +18 -9
- package/dist/cjs/sequelize-utils.d.ts +8 -0
- package/dist/cjs/sequelize-utils.js +57 -0
- package/dist/cjs/token/base.d.ts +2 -1
- package/dist/cjs/token/base.js +3 -1
- package/dist/cjs/token/memory.d.ts +10 -0
- package/dist/cjs/token/memory.js +122 -32
- package/dist/cjs/token/sequelize.d.ts +4 -4
- package/dist/cjs/token/sequelize.js +67 -85
- package/dist/cjs/token/types.d.ts +8 -1
- package/dist/cjs/user/base.d.ts +1 -0
- package/dist/cjs/user/base.js +11 -4
- package/dist/cjs/user/memory.d.ts +2 -0
- package/dist/cjs/user/memory.js +9 -10
- package/dist/cjs/user/sequelize.d.ts +7 -2
- package/dist/cjs/user/sequelize.js +19 -32
- package/dist/esm/api-module.d.ts +7 -4
- package/dist/esm/api-module.js +9 -0
- package/dist/esm/api-server-base.d.ts +80 -23
- package/dist/esm/api-server-base.js +608 -100
- package/dist/esm/auth-api/auth-module.d.ts +23 -3
- package/dist/esm/auth-api/auth-module.js +321 -125
- package/dist/esm/auth-api/compat-auth-storage.d.ts +7 -5
- package/dist/esm/auth-api/compat-auth-storage.js +13 -1
- package/dist/esm/auth-api/mem-auth-store.d.ts +5 -3
- package/dist/esm/auth-api/mem-auth-store.js +14 -28
- package/dist/esm/auth-api/module.d.ts +1 -1
- package/dist/esm/auth-api/sql-auth-store.d.ts +16 -4
- package/dist/esm/auth-api/sql-auth-store.js +43 -30
- package/dist/esm/auth-api/storage.d.ts +6 -4
- package/dist/esm/auth-api/storage.js +13 -3
- package/dist/esm/auth-api/types.d.ts +7 -2
- package/dist/esm/auth-api/user-id.d.ts +5 -0
- package/dist/esm/auth-api/user-id.js +32 -0
- package/dist/esm/auth-cookie-options.d.ts +11 -0
- package/dist/esm/auth-cookie-options.js +63 -0
- package/dist/esm/index.d.ts +4 -9
- package/dist/esm/index.js +2 -7
- package/dist/esm/oauth/memory.d.ts +6 -0
- package/dist/esm/oauth/memory.js +44 -11
- package/dist/esm/oauth/models.d.ts +7 -2
- package/dist/esm/oauth/models.js +6 -19
- package/dist/esm/oauth/sequelize.d.ts +10 -48
- package/dist/esm/oauth/sequelize.js +32 -87
- package/dist/esm/oauth/types.d.ts +1 -0
- package/dist/esm/passkey/base.d.ts +2 -0
- package/dist/esm/passkey/config.d.ts +2 -0
- package/dist/esm/passkey/config.js +23 -0
- package/dist/esm/passkey/memory.d.ts +8 -0
- package/dist/esm/passkey/memory.js +57 -16
- package/dist/esm/passkey/models.d.ts +13 -4
- package/dist/esm/passkey/models.js +39 -12
- package/dist/esm/passkey/sequelize.d.ts +13 -25
- package/dist/esm/passkey/sequelize.js +69 -154
- package/dist/esm/passkey/service.d.ts +6 -2
- package/dist/esm/passkey/service.js +173 -28
- package/dist/esm/passkey/types.d.ts +18 -9
- package/dist/esm/sequelize-utils.d.ts +8 -0
- package/dist/esm/sequelize-utils.js +48 -0
- package/dist/esm/token/base.d.ts +2 -1
- package/dist/esm/token/base.js +3 -1
- package/dist/esm/token/memory.d.ts +10 -0
- package/dist/esm/token/memory.js +122 -32
- package/dist/esm/token/sequelize.d.ts +4 -4
- package/dist/esm/token/sequelize.js +67 -85
- package/dist/esm/token/types.d.ts +8 -1
- package/dist/esm/user/base.d.ts +1 -0
- package/dist/esm/user/base.js +11 -4
- package/dist/esm/user/memory.d.ts +2 -0
- package/dist/esm/user/memory.js +9 -10
- package/dist/esm/user/sequelize.d.ts +7 -2
- package/dist/esm/user/sequelize.js +19 -32
- package/docs/swagger/openapi.json +1876 -0
- package/package.json +84 -34
|
@@ -1,24 +1,10 @@
|
|
|
1
|
-
import { DataTypes, Model, Op } from 'sequelize';
|
|
1
|
+
import { DataTypes, Model, Op, UniqueConstraintError } from 'sequelize';
|
|
2
|
+
import { normalizeNumericUserId } from '../auth-api/user-id.js';
|
|
3
|
+
import { integerIdType, tableOptions } from '../sequelize-utils.js';
|
|
2
4
|
import { UserStore } from './base.js';
|
|
3
|
-
const DIALECTS_SUPPORTING_UNSIGNED = new Set(['mysql', 'mariadb']);
|
|
4
|
-
function integerIdType(sequelize) {
|
|
5
|
-
return DIALECTS_SUPPORTING_UNSIGNED.has(sequelize.getDialect()) ? DataTypes.INTEGER.UNSIGNED : DataTypes.INTEGER;
|
|
6
|
-
}
|
|
7
|
-
function userTableOptions(sequelize) {
|
|
8
|
-
const opts = {
|
|
9
|
-
sequelize,
|
|
10
|
-
tableName: 'users',
|
|
11
|
-
timestamps: false
|
|
12
|
-
};
|
|
13
|
-
if (DIALECTS_SUPPORTING_UNSIGNED.has(sequelize.getDialect())) {
|
|
14
|
-
opts.charset = 'utf8mb4';
|
|
15
|
-
opts.collate = 'utf8mb4_unicode_ci';
|
|
16
|
-
}
|
|
17
|
-
return opts;
|
|
18
|
-
}
|
|
19
5
|
export class AuthUserModel extends Model {
|
|
20
6
|
}
|
|
21
|
-
export function initAuthUserModel(sequelize) {
|
|
7
|
+
export function initAuthUserModel(sequelize, options = {}) {
|
|
22
8
|
const idType = integerIdType(sequelize);
|
|
23
9
|
AuthUserModel.init({
|
|
24
10
|
user_id: {
|
|
@@ -42,7 +28,7 @@ export function initAuthUserModel(sequelize) {
|
|
|
42
28
|
allowNull: false
|
|
43
29
|
}
|
|
44
30
|
}, {
|
|
45
|
-
...
|
|
31
|
+
...tableOptions(sequelize, 'users', options.tablePrefix, { timestamps: false })
|
|
46
32
|
});
|
|
47
33
|
return AuthUserModel;
|
|
48
34
|
}
|
|
@@ -58,7 +44,9 @@ export class SequelizeUserStore extends UserStore {
|
|
|
58
44
|
}
|
|
59
45
|
this.Users = options.userModel
|
|
60
46
|
? options.userModel
|
|
61
|
-
: (options.userModelFactory ?? initAuthUserModel)(options.sequelize
|
|
47
|
+
: (options.userModelFactory ?? initAuthUserModel)(options.sequelize, {
|
|
48
|
+
tablePrefix: options.tablePrefix
|
|
49
|
+
});
|
|
62
50
|
this.recordMapper =
|
|
63
51
|
options.recordMapper ??
|
|
64
52
|
((model) => SequelizeUserStore.mapModelToUser(model));
|
|
@@ -107,11 +95,16 @@ export class SequelizeUserStore extends UserStore {
|
|
|
107
95
|
if (providedId !== undefined && providedId !== null && Number.isFinite(providedId)) {
|
|
108
96
|
defaults.user_id = Number(providedId);
|
|
109
97
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
|
|
98
|
+
try {
|
|
99
|
+
const model = await this.Users.create(defaults);
|
|
100
|
+
return this.toUserRecord(model);
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
if (error instanceof UniqueConstraintError) {
|
|
104
|
+
throw new Error(`User with login ${rest.login} or email ${rest.email} already exists`);
|
|
105
|
+
}
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
115
108
|
}
|
|
116
109
|
async upsertUser(input) {
|
|
117
110
|
const normalized = this.normalizeUserInput(input);
|
|
@@ -165,12 +158,6 @@ export class SequelizeUserStore extends UserStore {
|
|
|
165
158
|
};
|
|
166
159
|
}
|
|
167
160
|
normalizeUserId(identifier) {
|
|
168
|
-
|
|
169
|
-
return identifier;
|
|
170
|
-
}
|
|
171
|
-
if (typeof identifier === 'string' && /^\d+$/.test(identifier)) {
|
|
172
|
-
return Number(identifier);
|
|
173
|
-
}
|
|
174
|
-
throw new Error(`Unable to normalise user identifier: ${identifier}`);
|
|
161
|
+
return normalizeNumericUserId(identifier);
|
|
175
162
|
}
|
|
176
163
|
}
|