@technomoron/api-server-base 2.0.0-beta.2 → 2.0.0-beta.20

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.
Files changed (115) hide show
  1. package/README.txt +81 -28
  2. package/dist/cjs/api-module.cjs +9 -0
  3. package/dist/cjs/api-module.d.ts +7 -4
  4. package/dist/cjs/api-server-base.cjs +607 -99
  5. package/dist/cjs/api-server-base.d.ts +80 -23
  6. package/dist/cjs/auth-api/auth-module.d.ts +23 -3
  7. package/dist/cjs/auth-api/auth-module.js +320 -124
  8. package/dist/cjs/auth-api/compat-auth-storage.d.ts +7 -5
  9. package/dist/cjs/auth-api/compat-auth-storage.js +15 -3
  10. package/dist/cjs/auth-api/mem-auth-store.d.ts +5 -3
  11. package/dist/cjs/auth-api/mem-auth-store.js +14 -28
  12. package/dist/cjs/auth-api/module.d.ts +1 -1
  13. package/dist/cjs/auth-api/sql-auth-store.d.ts +16 -4
  14. package/dist/cjs/auth-api/sql-auth-store.js +43 -30
  15. package/dist/cjs/auth-api/storage.d.ts +6 -4
  16. package/dist/cjs/auth-api/storage.js +15 -5
  17. package/dist/cjs/auth-api/types.d.ts +7 -2
  18. package/dist/cjs/auth-api/user-id.d.ts +5 -0
  19. package/dist/cjs/auth-api/user-id.js +38 -0
  20. package/dist/cjs/auth-cookie-options.d.ts +11 -0
  21. package/dist/cjs/auth-cookie-options.js +66 -0
  22. package/dist/cjs/index.cjs +4 -14
  23. package/dist/cjs/index.d.ts +4 -9
  24. package/dist/cjs/oauth/memory.d.ts +6 -0
  25. package/dist/cjs/oauth/memory.js +44 -11
  26. package/dist/cjs/oauth/models.d.ts +7 -2
  27. package/dist/cjs/oauth/models.js +10 -21
  28. package/dist/cjs/oauth/sequelize.d.ts +10 -48
  29. package/dist/cjs/oauth/sequelize.js +44 -99
  30. package/dist/cjs/oauth/types.d.ts +1 -0
  31. package/dist/cjs/passkey/base.d.ts +2 -0
  32. package/dist/cjs/passkey/config.d.ts +2 -0
  33. package/dist/cjs/passkey/config.js +26 -0
  34. package/dist/cjs/passkey/memory.d.ts +8 -0
  35. package/dist/cjs/passkey/memory.js +57 -16
  36. package/dist/cjs/passkey/models.d.ts +13 -4
  37. package/dist/cjs/passkey/models.js +41 -14
  38. package/dist/cjs/passkey/sequelize.d.ts +13 -25
  39. package/dist/cjs/passkey/sequelize.js +68 -153
  40. package/dist/cjs/passkey/service.d.ts +6 -2
  41. package/dist/cjs/passkey/service.js +205 -27
  42. package/dist/cjs/passkey/types.d.ts +18 -9
  43. package/dist/cjs/sequelize-utils.d.ts +8 -0
  44. package/dist/cjs/sequelize-utils.js +57 -0
  45. package/dist/cjs/token/base.d.ts +2 -1
  46. package/dist/cjs/token/base.js +3 -1
  47. package/dist/cjs/token/memory.d.ts +10 -0
  48. package/dist/cjs/token/memory.js +122 -32
  49. package/dist/cjs/token/sequelize.d.ts +4 -4
  50. package/dist/cjs/token/sequelize.js +67 -85
  51. package/dist/cjs/token/types.d.ts +8 -1
  52. package/dist/cjs/user/base.d.ts +1 -0
  53. package/dist/cjs/user/base.js +11 -4
  54. package/dist/cjs/user/memory.d.ts +2 -0
  55. package/dist/cjs/user/memory.js +9 -10
  56. package/dist/cjs/user/sequelize.d.ts +7 -2
  57. package/dist/cjs/user/sequelize.js +19 -32
  58. package/dist/esm/api-module.d.ts +7 -4
  59. package/dist/esm/api-module.js +9 -0
  60. package/dist/esm/api-server-base.d.ts +80 -23
  61. package/dist/esm/api-server-base.js +608 -100
  62. package/dist/esm/auth-api/auth-module.d.ts +23 -3
  63. package/dist/esm/auth-api/auth-module.js +321 -125
  64. package/dist/esm/auth-api/compat-auth-storage.d.ts +7 -5
  65. package/dist/esm/auth-api/compat-auth-storage.js +13 -1
  66. package/dist/esm/auth-api/mem-auth-store.d.ts +5 -3
  67. package/dist/esm/auth-api/mem-auth-store.js +14 -28
  68. package/dist/esm/auth-api/module.d.ts +1 -1
  69. package/dist/esm/auth-api/sql-auth-store.d.ts +16 -4
  70. package/dist/esm/auth-api/sql-auth-store.js +43 -30
  71. package/dist/esm/auth-api/storage.d.ts +6 -4
  72. package/dist/esm/auth-api/storage.js +13 -3
  73. package/dist/esm/auth-api/types.d.ts +7 -2
  74. package/dist/esm/auth-api/user-id.d.ts +5 -0
  75. package/dist/esm/auth-api/user-id.js +32 -0
  76. package/dist/esm/auth-cookie-options.d.ts +11 -0
  77. package/dist/esm/auth-cookie-options.js +63 -0
  78. package/dist/esm/index.d.ts +4 -9
  79. package/dist/esm/index.js +2 -7
  80. package/dist/esm/oauth/memory.d.ts +6 -0
  81. package/dist/esm/oauth/memory.js +44 -11
  82. package/dist/esm/oauth/models.d.ts +7 -2
  83. package/dist/esm/oauth/models.js +6 -19
  84. package/dist/esm/oauth/sequelize.d.ts +10 -48
  85. package/dist/esm/oauth/sequelize.js +32 -87
  86. package/dist/esm/oauth/types.d.ts +1 -0
  87. package/dist/esm/passkey/base.d.ts +2 -0
  88. package/dist/esm/passkey/config.d.ts +2 -0
  89. package/dist/esm/passkey/config.js +23 -0
  90. package/dist/esm/passkey/memory.d.ts +8 -0
  91. package/dist/esm/passkey/memory.js +57 -16
  92. package/dist/esm/passkey/models.d.ts +13 -4
  93. package/dist/esm/passkey/models.js +39 -12
  94. package/dist/esm/passkey/sequelize.d.ts +13 -25
  95. package/dist/esm/passkey/sequelize.js +69 -154
  96. package/dist/esm/passkey/service.d.ts +6 -2
  97. package/dist/esm/passkey/service.js +173 -28
  98. package/dist/esm/passkey/types.d.ts +18 -9
  99. package/dist/esm/sequelize-utils.d.ts +8 -0
  100. package/dist/esm/sequelize-utils.js +48 -0
  101. package/dist/esm/token/base.d.ts +2 -1
  102. package/dist/esm/token/base.js +3 -1
  103. package/dist/esm/token/memory.d.ts +10 -0
  104. package/dist/esm/token/memory.js +122 -32
  105. package/dist/esm/token/sequelize.d.ts +4 -4
  106. package/dist/esm/token/sequelize.js +67 -85
  107. package/dist/esm/token/types.d.ts +8 -1
  108. package/dist/esm/user/base.d.ts +1 -0
  109. package/dist/esm/user/base.js +11 -4
  110. package/dist/esm/user/memory.d.ts +2 -0
  111. package/dist/esm/user/memory.js +9 -10
  112. package/dist/esm/user/sequelize.d.ts +7 -2
  113. package/dist/esm/user/sequelize.js +19 -32
  114. package/docs/swagger/openapi.json +1876 -0
  115. package/package.json +81 -32
@@ -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
- ...userTableOptions(sequelize)
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
- const [model] = await this.Users.findOrCreate({
111
- where: { login: rest.login },
112
- defaults: defaults
113
- });
114
- return this.toUserRecord(model);
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
- if (typeof identifier === 'number' && Number.isFinite(identifier)) {
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
  }