@antelopejs/dms 0.14.0 → 0.15.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.
Files changed (86) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +1 -1
  3. package/bin/control/journey.mjs +5 -0
  4. package/bin/control/session.mjs +1 -0
  5. package/bin/control/stack.mjs +1 -0
  6. package/dist/config/internal/state.d.ts +7 -0
  7. package/dist/config/internal/state.js +9 -0
  8. package/dist/config/internal/state.js.map +1 -1
  9. package/dist/config/startup-config.d.ts +1 -0
  10. package/dist/config/startup-config.js +11 -0
  11. package/dist/config/startup-config.js.map +1 -1
  12. package/dist/db/index.d.ts +1 -0
  13. package/dist/db/index.js +1 -0
  14. package/dist/db/index.js.map +1 -1
  15. package/dist/db/models/index.d.ts +1 -0
  16. package/dist/db/models/index.js +1 -0
  17. package/dist/db/models/index.js.map +1 -1
  18. package/dist/db/models/setupToken.model.d.ts +29 -0
  19. package/dist/db/models/setupToken.model.js +62 -0
  20. package/dist/db/models/setupToken.model.js.map +1 -0
  21. package/dist/db/setup-token.d.ts +2 -0
  22. package/dist/db/setup-token.js +28 -0
  23. package/dist/db/setup-token.js.map +1 -0
  24. package/dist/db/tables/index.d.ts +1 -0
  25. package/dist/db/tables/index.js +1 -0
  26. package/dist/db/tables/index.js.map +1 -1
  27. package/dist/db/tables/setupToken.table.d.ts +7 -0
  28. package/dist/db/tables/setupToken.table.js +34 -0
  29. package/dist/db/tables/setupToken.table.js.map +1 -0
  30. package/dist/implementations/dms/page/payloads.js +6 -10
  31. package/dist/implementations/dms/page/payloads.js.map +1 -1
  32. package/dist/implementations/dms/page/public-layout.d.ts +2 -0
  33. package/dist/implementations/dms/page/public-layout.js +45 -0
  34. package/dist/implementations/dms/page/public-layout.js.map +1 -0
  35. package/dist/index.d.ts +0 -1
  36. package/dist/index.js +6 -2
  37. package/dist/index.js.map +1 -1
  38. package/dist/pages/settings/users/current-password.js +1 -1
  39. package/dist/pages/settings/users/current-password.js.map +1 -1
  40. package/dist/routes/auth/login.d.ts +1 -1
  41. package/dist/routes/auth/login.js +7 -2
  42. package/dist/routes/auth/login.js.map +1 -1
  43. package/dist/routes/auth/password-hash-upgrade.d.ts +2 -0
  44. package/dist/routes/auth/password-hash-upgrade.js +22 -0
  45. package/dist/routes/auth/password-hash-upgrade.js.map +1 -0
  46. package/dist/routes/authentication.d.ts +2 -0
  47. package/dist/routes/authentication.js +2 -0
  48. package/dist/routes/authentication.js.map +1 -1
  49. package/dist/routes/onboarding.d.ts +3 -1
  50. package/dist/routes/onboarding.js +20 -3
  51. package/dist/routes/onboarding.js.map +1 -1
  52. package/dist/utils/ensure-default-tenant.d.ts +2 -1
  53. package/dist/utils/ensure-default-tenant.js +126 -8
  54. package/dist/utils/ensure-default-tenant.js.map +1 -1
  55. package/dist/validation/onboarding/register-admin.schema.d.ts +5 -0
  56. package/dist/validation/onboarding/register-admin.schema.js +3 -0
  57. package/dist/validation/onboarding/register-admin.schema.js.map +1 -1
  58. package/frontend-vue/layers/dms-core/app/utils/formatter.ts +15 -1
  59. package/frontend-vue/layers/dms-core/i18n/locales/core-en-GB.json +1 -0
  60. package/frontend-vue/layers/dms-core/i18n/locales/core-fr-FR.json +1 -0
  61. package/frontend-vue/layers/dms-core/shared/types/app-config.ts +5 -0
  62. package/frontend-vue/layers/dms-layout/app/app.config.ts +1 -0
  63. package/frontend-vue/layers/dms-layout/app/build/components/layout/DashboardSidebar.vue +9 -9
  64. package/frontend-vue/layers/dms-layout/app/components/layout/AppLogo.vue +1 -0
  65. package/frontend-vue/layers/dms-layout/app/composables/page/useInstalledModules.ts +78 -0
  66. package/frontend-vue/layers/dms-layout/app/custom-pages/modules.vue +5 -24
  67. package/frontend-vue/layers/dms-layout/i18n/locales/layout-en-GB.json +2 -1
  68. package/frontend-vue/layers/dms-layout/i18n/locales/layout-fr-FR.json +2 -1
  69. package/frontend-vue/layers/dms-onboarding/app/components/onboarding/steps/register.vue +21 -1
  70. package/frontend-vue/layers/dms-onboarding/app/custom-pages/onboarding.vue +14 -0
  71. package/frontend-vue/layers/dms-onboarding/i18n/locales/onboarding-en-GB.json +2 -0
  72. package/frontend-vue/layers/dms-onboarding/i18n/locales/onboarding-fr-FR.json +2 -0
  73. package/frontend-vue/layers/dms-ui/app/build/composables/blocks/blockDataState.ts +86 -0
  74. package/frontend-vue/layers/dms-ui/app/build/composables/chart/apexAxes.ts +22 -3
  75. package/frontend-vue/layers/dms-ui/app/build/composables/table-view/tableViewCounts.ts +30 -11
  76. package/frontend-vue/layers/dms-ui/app/build/composables/table-view/tableViewTabs.ts +2 -2
  77. package/frontend-vue/layers/dms-ui/app/components/RecursiveComponent.vue +6 -0
  78. package/frontend-vue/layers/dms-ui/app/components/chart/Chart.vue +17 -1
  79. package/frontend-vue/layers/dms-ui/app/components/chart/ChartCard.vue +22 -2
  80. package/frontend-vue/layers/dms-ui/app/components/kpi/KpiCard.vue +14 -0
  81. package/frontend-vue/layers/dms-ui/app/components/table-view/TableView.vue +14 -1
  82. package/frontend-vue/layers/dms-ui/app/components/top-list/TopListCard.vue +17 -1
  83. package/frontend-vue/layers/dms-ui/app/composables/chart/apexCategoryLabels.ts +12 -10
  84. package/frontend-vue/layers/dms-ui/app/composables/chart/useApexChart.ts +11 -2
  85. package/frontend-vue/layers/dms-ui/app/entries/composables/blocks/blockDataState.ts +1 -0
  86. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -46,7 +46,7 @@ const modules_1 = require("@antelopejs/interface-core/modules");
46
46
  const runtime_1 = require("@antelopejs/interface-core/runtime");
47
47
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
48
48
  const constants_1 = require("@antelopejs/interface-dms/constants");
49
- require("./db");
49
+ const db_1 = require("./db");
50
50
  require("./realtime");
51
51
  require("./implementations/dms-auth/email-templates");
52
52
  require("./pages");
@@ -73,6 +73,7 @@ __exportStar(require("./config"), exports);
73
73
  let cronTasks = [];
74
74
  let staleExportsSweep = Promise.resolve();
75
75
  let defaultTenantProvisioning;
76
+ let provisioningWait = new AbortController();
76
77
  let globalRealtimeConfig;
77
78
  async function construct(config) {
78
79
  const { dev } = await (0, runtime_1.GetRuntimeInfo)();
@@ -157,7 +158,8 @@ function destroy() {
157
158
  function onModulesStarted() {
158
159
  if (defaultTenantProvisioning)
159
160
  return;
160
- defaultTenantProvisioning = (0, utils_1.provisionDefaultTenant)().finally(() => {
161
+ provisioningWait = new AbortController();
162
+ defaultTenantProvisioning = (0, utils_1.provisionDefaultTenant)(provisioningWait.signal).finally(() => {
161
163
  defaultTenantProvisioning = undefined;
162
164
  });
163
165
  }
@@ -167,6 +169,7 @@ async function start() {
167
169
  await (0, interface_database_decorators_1.RegisterSchema)(constants_1.CORE_SCHEMA_NAME);
168
170
  await (0, interface_database_decorators_1.RegisterSchema)(constants_1.TENANT_SCHEMA_NAME);
169
171
  await (0, utils_1.ensureDefaultTenantExists)();
172
+ await (0, db_1.announceSetupToken)();
170
173
  await (0, utils_1.registerExistingTenantInstances)();
171
174
  await (0, hooks_1.SettleHook)(hooks_1.Hook.DATABASE_INITIALIZED);
172
175
  staleExportsSweep = (0, crons_1.runSweepStaleExports)().catch((error) => {
@@ -183,6 +186,7 @@ async function start() {
183
186
  }
184
187
  async function stop() {
185
188
  modules_1.Events.ModulesStarted.unregister(onModulesStarted);
189
+ provisioningWait.abort();
186
190
  await defaultTenantProvisioning;
187
191
  await staleExportsSweep;
188
192
  (0, hooks_1.UnsettleHook)(hooks_1.Hook.DATABASE_INITIALIZED);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ async function assertCurrentPassword(userModel, user, password, now = new Date()
28
28
  (0, interface_api_util_1.assert)(stored?.password, HTTP_BAD_REQUEST, "error.password_not_set");
29
29
  (0, interface_api_util_1.assert)(password, HTTP_BAD_REQUEST, INVALID_CURRENT_PASSWORD);
30
30
  await claimAttempt(stored._id, now);
31
- (0, interface_api_util_1.assert)(stored.testHash("password", password), HTTP_BAD_REQUEST, INVALID_CURRENT_PASSWORD);
31
+ (0, interface_api_util_1.assert)(await stored.testHashAsync("password", password), HTTP_BAD_REQUEST, INVALID_CURRENT_PASSWORD);
32
32
  await (0, interface_database_decorators_1.GetModel)(models_1.SignInAttemptsModel).clearCurrentPasswordAttempts(stored._id);
33
33
  }
34
34
  async function assertCurrentPasswordIfSet(userModel, user, password) {
@@ -1 +1 @@
1
- {"version":3,"file":"current-password.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/current-password.ts"],"names":[],"mappings":";;AA6CA,sDAgBC;AAMD,gEAQC;AA3ED,uEAAwD;AACxD,6FAAqE;AAErE,+CAAyD;AACzD,0CAAuE;AACvE,0CAAsD;AAEtD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,MAAM,wBAAwB,GAAG,gCAAgC,CAAC;AAClE,MAAM,iBAAiB,GAAG,0CAA0C,CAAC;AAErE,SAAS,eAAe,CAAC,KAAa,EAAE,OAAe;IACrD,IAAA,2BAAM,EACJ,KAAK,GAAG,OAAO,IAAI,4BAAoB,EACvC,sBAAsB,EACtB,iBAAiB,CAClB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,GAAS;IACnD,MAAM,QAAQ,GAAG,IAAA,wCAAQ,EAAC,4BAAmB,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,uBAAe,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9E,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9E,MAAM,QAAQ,CAAC,WAAW,CACxB,MAAM,EACN,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,4BAAoB,CAAC,CAC/C,CAAC;IACF,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAaM,KAAK,UAAU,qBAAqB,CACzC,SAAoB,EACpB,IAAU,EACV,QAA4B,EAC5B,GAAG,GAAG,IAAI,IAAI,EAAE;IAEhB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAA,2BAAM,EAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;IACrE,IAAA,2BAAM,EAAC,QAAQ,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;IAC7D,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpC,IAAA,2BAAM,EACJ,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,EACrC,gBAAgB,EAChB,wBAAwB,CACzB,CAAC;IACF,MAAM,IAAA,wCAAQ,EAAC,4BAAmB,CAAC,CAAC,4BAA4B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC/E,CAAC;AAMM,KAAK,UAAU,0BAA0B,CAC9C,SAAoB,EACpB,IAAU,EACV,QAA4B;IAE5B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,QAAQ;QAAE,OAAO;IAC9B,MAAM,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"current-password.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/current-password.ts"],"names":[],"mappings":";;AA6CA,sDAgBC;AAMD,gEAQC;AA3ED,uEAAwD;AACxD,6FAAqE;AAErE,+CAAyD;AACzD,0CAAuE;AACvE,0CAAsD;AAEtD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,MAAM,wBAAwB,GAAG,gCAAgC,CAAC;AAClE,MAAM,iBAAiB,GAAG,0CAA0C,CAAC;AAErE,SAAS,eAAe,CAAC,KAAa,EAAE,OAAe;IACrD,IAAA,2BAAM,EACJ,KAAK,GAAG,OAAO,IAAI,4BAAoB,EACvC,sBAAsB,EACtB,iBAAiB,CAClB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,GAAS;IACnD,MAAM,QAAQ,GAAG,IAAA,wCAAQ,EAAC,4BAAmB,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,uBAAe,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9E,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9E,MAAM,QAAQ,CAAC,WAAW,CACxB,MAAM,EACN,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,4BAAoB,CAAC,CAC/C,CAAC;IACF,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAaM,KAAK,UAAU,qBAAqB,CACzC,SAAoB,EACpB,IAAU,EACV,QAA4B,EAC5B,GAAG,GAAG,IAAI,IAAI,EAAE;IAEhB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAA,2BAAM,EAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;IACrE,IAAA,2BAAM,EAAC,QAAQ,EAAE,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;IAC7D,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpC,IAAA,2BAAM,EACJ,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,EAChD,gBAAgB,EAChB,wBAAwB,CACzB,CAAC;IACF,MAAM,IAAA,wCAAQ,EAAC,4BAAmB,CAAC,CAAC,4BAA4B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC/E,CAAC;AAMM,KAAK,UAAU,0BAA0B,CAC9C,SAAoB,EACpB,IAAU,EACV,QAA4B;IAE5B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,QAAQ;QAAE,OAAO;IAC9B,MAAM,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { SessionModel, UserModel } from "@antelopejs/interface-dms/auth/db";
1
+ import { type SessionModel, type UserModel } from "@antelopejs/interface-dms/auth/db";
2
2
  import type { ClientOrigin } from "../../utils";
3
3
  import { authSchema } from "../../validation";
4
4
  import { type LoginOutcome } from "./session-response";
@@ -2,9 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.login = login;
4
4
  const interface_api_util_1 = require("@antelopejs/interface-api-util");
5
+ const db_1 = require("@antelopejs/interface-dms/auth/db");
5
6
  const hooks_1 = require("../../hooks");
6
7
  const validation_1 = require("../../validation");
7
8
  const utils_1 = require("../../utils");
9
+ const password_hash_upgrade_1 = require("./password-hash-upgrade");
8
10
  const session_response_1 = require("./session-response");
9
11
  const fire_and_forget_1 = require("@antelopejs/interface-dms/utils/fire-and-forget");
10
12
  const HTTP_UNAUTHORIZED = 401;
@@ -14,8 +16,10 @@ async function login(userModel, sessionModel, body, userAgent, origin) {
14
16
  const normalizedEmail = email.toLowerCase();
15
17
  (0, utils_1.assertLoginAllowed)(normalizedEmail, origin.ip);
16
18
  const user = await userModel.getByEmail(normalizedEmail);
17
- const isPasswordValid = !!user && user.testHash("password", password);
18
- if (!isPasswordValid)
19
+ const isPasswordValid = await (user ?? new db_1.User()).testHashAsync("password", password);
20
+ if (isPasswordValid)
21
+ (0, utils_1.assertLoginAllowed)(normalizedEmail, origin.ip);
22
+ else
19
23
  (0, utils_1.recordLoginFailure)(normalizedEmail, origin.ip);
20
24
  (0, interface_api_util_1.assert)(user, HTTP_UNAUTHORIZED, INVALID_CREDENTIALS_MESSAGE);
21
25
  (0, fire_and_forget_1.fireAndForget)(isPasswordValid
@@ -23,6 +27,7 @@ async function login(userModel, sessionModel, body, userAgent, origin) {
23
27
  : (0, hooks_1.recordFailedPassword)(user), "failed password bookkeeping");
24
28
  (0, interface_api_util_1.assert)(isPasswordValid, HTTP_UNAUTHORIZED, INVALID_CREDENTIALS_MESSAGE);
25
29
  (0, utils_1.clearLoginFailures)(normalizedEmail);
30
+ (0, fire_and_forget_1.fireAndForget)((0, password_hash_upgrade_1.upgradePasswordHash)(userModel, user, password), "password hash upgrade");
26
31
  return (0, session_response_1.resolveLoginOutcome)(sessionModel, user, userAgent, origin);
27
32
  }
28
33
  //# sourceMappingURL=login.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/routes/auth/login.ts"],"names":[],"mappings":";;AAmBA,sBA2BC;AA9CD,uEAA0E;AAK1E,uCAAyE;AAEzE,iDAA8C;AAC9C,uCAIqB;AACrB,yDAA4E;AAC5E,qFAAgF;AAEhF,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,2BAA2B,GAAG,2BAA2B,CAAC;AAEzD,KAAK,UAAU,KAAK,CACzB,SAAoB,EACpB,YAA0B,EAC1B,IAAkD,EAClD,SAAiB,EACjB,MAAoB;IAEpB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAA,qCAAgB,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACvD,uBAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAC1B,CAAC;IACF,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAA,0BAAkB,EAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACtE,IAAI,CAAC,eAAe;QAAE,IAAA,0BAAkB,EAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAErE,IAAA,2BAAM,EAAC,IAAI,EAAE,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;IAC7D,IAAA,+BAAa,EACX,eAAe;QACb,CAAC,CAAC,IAAA,4BAAoB,EAAC,IAAI,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC,IAAA,4BAAoB,EAAC,IAAI,CAAC,EAC9B,6BAA6B,CAC9B,CAAC;IACF,IAAA,2BAAM,EAAC,eAAe,EAAE,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;IACxE,IAAA,0BAAkB,EAAC,eAAe,CAAC,CAAC;IAEpC,OAAO,IAAA,sCAAmB,EAAC,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/routes/auth/login.ts"],"names":[],"mappings":";;AAqBA,sBAmCC;AAxDD,uEAA0E;AAC1E,0DAI2C;AAC3C,uCAAyE;AAEzE,iDAA8C;AAC9C,uCAIqB;AACrB,mEAA8D;AAC9D,yDAA4E;AAC5E,qFAAgF;AAEhF,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,2BAA2B,GAAG,2BAA2B,CAAC;AAEzD,KAAK,UAAU,KAAK,CACzB,SAAoB,EACpB,YAA0B,EAC1B,IAAkD,EAClD,SAAiB,EACjB,MAAoB;IAEpB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAA,qCAAgB,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACvD,uBAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAC1B,CAAC;IACF,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAA,0BAAkB,EAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,SAAI,EAAE,CAAC,CAAC,aAAa,CAC9D,UAAU,EACV,QAAQ,CACT,CAAC;IACF,IAAI,eAAe;QAAE,IAAA,0BAAkB,EAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;;QAC/D,IAAA,0BAAkB,EAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAEpD,IAAA,2BAAM,EAAC,IAAI,EAAE,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;IAC7D,IAAA,+BAAa,EACX,eAAe;QACb,CAAC,CAAC,IAAA,4BAAoB,EAAC,IAAI,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC,IAAA,4BAAoB,EAAC,IAAI,CAAC,EAC9B,6BAA6B,CAC9B,CAAC;IACF,IAAA,2BAAM,EAAC,eAAe,EAAE,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;IACxE,IAAA,0BAAkB,EAAC,eAAe,CAAC,CAAC;IACpC,IAAA,+BAAa,EACX,IAAA,2CAAmB,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAC9C,uBAAuB,CACxB,CAAC;IAEF,OAAO,IAAA,sCAAmB,EAAC,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { User, UserModel } from "@antelopejs/interface-dms/auth/db";
2
+ export declare function upgradePasswordHash(userModel: UserModel, user: User, password: string): Promise<void>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.upgradePasswordHash = upgradePasswordHash;
4
+ const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
5
+ const db_1 = require("@antelopejs/interface-dms/auth/db");
6
+ async function upgradePasswordHash(userModel, user, password) {
7
+ if (!user.isHashOutdated("password"))
8
+ return;
9
+ const testedHash = user.password;
10
+ user.password = password;
11
+ const { _internal } = db_1.UserModel.toDatabase(user);
12
+ const storedHashes = { _internal };
13
+ await userModel.table
14
+ .getAll(user.email, "email")
15
+ .filter((row) => row
16
+ .key("_id")
17
+ .eq(user._id)
18
+ .and((0, interface_database_decorators_1.unlockrequest)(db_1.User, row, "password", []).eq(testedHash)))
19
+ .update(storedHashes)
20
+ .run();
21
+ }
22
+ //# sourceMappingURL=password-hash-upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-hash-upgrade.js","sourceRoot":"","sources":["../../../src/routes/auth/password-hash-upgrade.ts"],"names":[],"mappings":";;AAcA,kDAoBC;AAlCD,6FAA0E;AAC1E,0DAAoE;AAa7D,KAAK,UAAU,mBAAmB,CACvC,SAAoB,EACpB,IAAU,EACV,QAAgB;IAEhB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;QAAE,OAAO;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzB,MAAM,EAAE,SAAS,EAAE,GAAG,cAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,YAAY,GAA4C,EAAE,SAAS,EAAE,CAAC;IAC5E,MAAM,SAAS,CAAC,KAAK;SAClB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;SAC3B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACd,GAAG;SACA,GAAG,CAAC,KAAK,CAAC;SACV,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;SACZ,GAAG,CAAC,IAAA,6CAAa,EAAC,SAAI,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAChE;SACA,MAAM,CAAC,YAAY,CAAC;SACpB,GAAG,EAAE,CAAC;AACX,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export * from "./auth/invite";
2
+ export * from "./auth/login";
3
+ export * from "./auth/password-hash-upgrade";
2
4
  export * from "./auth/signup";
3
5
  export * from "./auth/validate-invite-token";
@@ -15,6 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./auth/invite"), exports);
18
+ __exportStar(require("./auth/login"), exports);
19
+ __exportStar(require("./auth/password-hash-upgrade"), exports);
18
20
  __exportStar(require("./auth/signup"), exports);
19
21
  __exportStar(require("./auth/validate-invite-token"), exports);
20
22
  //# sourceMappingURL=authentication.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../src/routes/authentication.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,gDAA8B;AAC9B,+DAA6C"}
1
+ {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../src/routes/authentication.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,+CAA6B;AAC7B,+DAA6C;AAC7C,gDAA8B;AAC9B,+DAA6C"}
@@ -1,13 +1,15 @@
1
1
  import { UserModel } from "@antelopejs/interface-dms/auth/db";
2
- import { SystemStateModel } from "../db";
2
+ import { SetupTokenModel, SystemStateModel } from "../db";
3
3
  import { onboardingRegisterAdminSchema } from "../validation/onboarding";
4
4
  declare const PublicOnboardingController_base: import("@antelopejs/interface-api").ControllerClass<object>;
5
5
  export declare class PublicOnboardingController extends PublicOnboardingController_base {
6
6
  model: SystemStateModel;
7
+ setupTokens: SetupTokenModel;
7
8
  getInformations(userModel: UserModel): Promise<{
8
9
  has_onboarded: boolean;
9
10
  }>;
10
11
  postRegister(userModel: UserModel, body: Parameters<typeof onboardingRegisterAdminSchema.parse>[0]): Promise<string[]>;
12
+ private restoreUnusedToken;
11
13
  private createOwner;
12
14
  private completeOnboarding;
13
15
  }
@@ -41,9 +41,22 @@ class PublicOnboardingController extends (0, interface_api_1.Controller)("/api/o
41
41
  const data = (0, interface_api_util_1.assertValidation)(body, (v) => onboarding_1.onboardingRegisterAdminSchema.parse(v));
42
42
  const users = await userModel.table.slice(0, 1).run();
43
43
  (0, interface_api_util_1.assert)(users.length === 0, 400, "error.admin_already_set");
44
- const insertedIds = await this.createOwner(userModel, data);
45
- await this.completeOnboarding(data);
46
- return insertedIds;
44
+ const spentToken = await this.setupTokens.claim(data.setupToken);
45
+ (0, interface_api_util_1.assert)(spentToken, 403, "error.invalid_setup_token");
46
+ try {
47
+ const insertedIds = await this.createOwner(userModel, data);
48
+ await this.completeOnboarding(data);
49
+ return insertedIds;
50
+ }
51
+ catch (error) {
52
+ await this.restoreUnusedToken(userModel, spentToken);
53
+ throw error;
54
+ }
55
+ }
56
+ async restoreUnusedToken(userModel, spentToken) {
57
+ const users = await userModel.table.slice(0, 1).run();
58
+ if (users.length === 0)
59
+ await this.setupTokens.restore(spentToken);
47
60
  }
48
61
  async createOwner(userModel, data) {
49
62
  const insertedIds = await userModel.insert({
@@ -82,6 +95,10 @@ __decorate([
82
95
  (0, interface_database_decorators_1.Model)(db_2.SystemStateModel),
83
96
  __metadata("design:type", db_2.SystemStateModel)
84
97
  ], PublicOnboardingController.prototype, "model", void 0);
98
+ __decorate([
99
+ (0, interface_database_decorators_1.Model)(db_2.SetupTokenModel),
100
+ __metadata("design:type", db_2.SetupTokenModel)
101
+ ], PublicOnboardingController.prototype, "setupTokens", void 0);
85
102
  __decorate([
86
103
  (0, interface_api_1.Get)("/informations"),
87
104
  __param(0, (0, interface_database_decorators_1.Model)(db_1.UserModel)),
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/routes/onboarding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/routes/onboarding.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
+ import { type ProvisioningLeaseConfig } from "../config";
1
2
  export declare function ensureDefaultTenantExists(): Promise<boolean>;
2
- export declare function provisionDefaultTenant(): Promise<void>;
3
+ export declare function provisionDefaultTenant(signal?: AbortSignal, lease?: ProvisioningLeaseConfig): Promise<void>;
@@ -2,11 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ensureDefaultTenantExists = ensureDefaultTenantExists;
4
4
  exports.provisionDefaultTenant = provisionDefaultTenant;
5
+ const node_crypto_1 = require("node:crypto");
6
+ const node_os_1 = require("node:os");
7
+ const promises_1 = require("node:timers/promises");
5
8
  const logging_1 = require("@antelopejs/interface-core/logging");
6
9
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
7
10
  const constants_1 = require("@antelopejs/interface-dms/constants");
8
11
  const db_1 = require("@antelopejs/interface-dms/db");
9
12
  const tenant_provisioning_1 = require("@antelopejs/interface-dms/tenant-provisioning");
13
+ const config_1 = require("../config");
14
+ const NO_REVISION = { kind: "missing" };
10
15
  function buildDefaultTenant() {
11
16
  const now = new Date();
12
17
  return {
@@ -24,21 +29,134 @@ async function ensureDefaultTenantExists() {
24
29
  logging_1.Logging.Info(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' already exists.`);
25
30
  return false;
26
31
  }
27
- await tenants.insert(buildDefaultTenant());
32
+ try {
33
+ await tenants.insert(buildDefaultTenant());
34
+ }
35
+ catch (error) {
36
+ if (!(await tenants.get(constants_1.DEFAULT_TENANT_ID)))
37
+ throw error;
38
+ logging_1.Logging.Info(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' already exists.`);
39
+ return false;
40
+ }
28
41
  logging_1.Logging.Info(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' created.`);
29
42
  return true;
30
43
  }
31
- async function provisionDefaultTenant() {
32
- try {
33
- const tenants = (0, interface_database_decorators_1.GetModel)(db_1.TenantModel);
34
- const tenant = await tenants.get(constants_1.DEFAULT_TENANT_ID);
35
- if (!tenant?.provisioningPending)
44
+ async function swapLease(expected, patch) {
45
+ const tenants = (0, interface_database_decorators_1.GetModel)(db_1.TenantModel);
46
+ const next = (0, node_crypto_1.randomUUID)();
47
+ const outcome = await tenants.table
48
+ .atomicMutation(constants_1.DEFAULT_TENANT_ID, {
49
+ type: "update",
50
+ revisionField: "provisioningRevision",
51
+ expectedRevision: expected,
52
+ nextRevision: next,
53
+ patch,
54
+ })
55
+ .run();
56
+ if (outcome === "applied")
57
+ return next;
58
+ if (outcome === "not-applied")
59
+ return undefined;
60
+ const stored = await tenants.get(constants_1.DEFAULT_TENANT_ID);
61
+ return stored?.provisioningRevision === next ? next : undefined;
62
+ }
63
+ function holdLease(claimed, renewEveryMs) {
64
+ let token = claimed;
65
+ let renewal = Promise.resolve();
66
+ const renew = async () => {
67
+ if (!token)
36
68
  return;
69
+ try {
70
+ const next = await swapLease(token, {});
71
+ if (next) {
72
+ token = next;
73
+ return;
74
+ }
75
+ const stored = await (0, interface_database_decorators_1.GetModel)(db_1.TenantModel).get(constants_1.DEFAULT_TENANT_ID);
76
+ if (stored?.provisioningRevision !== token)
77
+ token = undefined;
78
+ }
79
+ catch (error) {
80
+ logging_1.Logging.Warn(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' lease renewal failed:`, error);
81
+ }
82
+ };
83
+ const timer = setInterval(() => {
84
+ renewal = renewal.then(renew);
85
+ }, renewEveryMs);
86
+ return {
87
+ async stopRenewing() {
88
+ clearInterval(timer);
89
+ await renewal;
90
+ return token;
91
+ },
92
+ };
93
+ }
94
+ async function provisionUnderLease(claimed, renewEveryMs) {
95
+ const lease = holdLease(claimed, renewEveryMs);
96
+ let failure;
97
+ try {
37
98
  await (0, tenant_provisioning_1.ProvisionTenant)({ tenantId: constants_1.DEFAULT_TENANT_ID, extras: {} });
38
- await tenants.update(constants_1.DEFAULT_TENANT_ID, { provisioningPending: false });
39
99
  }
40
100
  catch (error) {
41
- logging_1.Logging.Error(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' provisioning failed:`, error);
101
+ failure = { error };
102
+ }
103
+ const token = await lease.stopRenewing();
104
+ if (failure) {
105
+ logging_1.Logging.Error(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' provisioning failed:`, failure.error);
106
+ }
107
+ const finished = token &&
108
+ (await swapLease(token, {
109
+ provisioningHolder: null,
110
+ provisioningPending: failure !== undefined,
111
+ }));
112
+ if (!finished) {
113
+ logging_1.Logging.Warn(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' provisioning lease was lost; another replica took over.`);
114
+ }
115
+ return finished !== undefined || failure !== undefined;
116
+ }
117
+ function createStaleWatch(staleAfterMs) {
118
+ let seen;
119
+ return {
120
+ forget() {
121
+ seen = undefined;
122
+ },
123
+ isStale(revision) {
124
+ const now = performance.now();
125
+ if (seen?.revision !== revision)
126
+ seen = undefined;
127
+ seen ??= { revision, at: now };
128
+ return now - seen.at >= staleAfterMs;
129
+ },
130
+ };
131
+ }
132
+ async function advanceLease(watch, renewEveryMs) {
133
+ const tenant = await (0, interface_database_decorators_1.GetModel)(db_1.TenantModel).get(constants_1.DEFAULT_TENANT_ID);
134
+ if (!tenant?.provisioningPending)
135
+ return true;
136
+ const stale = watch.isStale(tenant.provisioningRevision);
137
+ if (tenant.provisioningHolder && !stale)
138
+ return false;
139
+ const claimed = await swapLease(tenant.provisioningRevision ?? NO_REVISION, {
140
+ provisioningHolder: holderName(),
141
+ });
142
+ return claimed !== undefined && provisionUnderLease(claimed, renewEveryMs);
143
+ }
144
+ function holderName() {
145
+ return `${(0, node_os_1.hostname)()}:${process.pid}`;
146
+ }
147
+ async function provisionDefaultTenant(signal = new AbortController().signal, lease = (0, config_1.getProvisioningLeaseConfig)()) {
148
+ const { renewEveryMs, staleAfterMs, pollEveryMs } = lease;
149
+ const watch = createStaleWatch(staleAfterMs);
150
+ while (!signal.aborted) {
151
+ try {
152
+ if (await advanceLease(watch, renewEveryMs))
153
+ return;
154
+ }
155
+ catch (error) {
156
+ watch.forget();
157
+ logging_1.Logging.Warn(`Default tenant '${constants_1.DEFAULT_TENANT_ID}' provisioning lease check failed:`, error);
158
+ }
159
+ await (0, promises_1.setTimeout)(pollEveryMs, undefined, { signal }).catch(() => undefined);
42
160
  }
43
161
  }
44
162
  //# sourceMappingURL=ensure-default-tenant.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-default-tenant.js","sourceRoot":"","sources":["../../src/utils/ensure-default-tenant.ts"],"names":[],"mappings":";;AA0BA,8DAWC;AAUD,wDAcC;AA7DD,gEAA6D;AAC7D,6FAAqE;AACrE,mEAG6C;AAC7C,qDAAwE;AACxE,uFAAgF;AAEhF,SAAS,kBAAkB;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,OAAO;QACL,GAAG,EAAE,6BAAiB;QACtB,IAAI,EAAE,+BAAmB;QACzB,mBAAmB,EAAE,IAAI;QACzB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;AACJ,CAAC;AAQM,KAAK,UAAU,yBAAyB;IAC7C,MAAM,OAAO,GAAG,IAAA,wCAAQ,EAAC,gBAAW,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,6BAAiB,CAAC,CAAC;IACtD,IAAI,QAAQ,EAAE,CAAC;QACb,iBAAO,CAAC,IAAI,CAAC,mBAAmB,6BAAiB,mBAAmB,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC3C,iBAAO,CAAC,IAAI,CAAC,mBAAmB,6BAAiB,YAAY,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC;AACd,CAAC;AAUM,KAAK,UAAU,sBAAsB;IAC1C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,wCAAQ,EAAC,gBAAW,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,6BAAiB,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,mBAAmB;YAAE,OAAO;QAEzC,MAAM,IAAA,qCAAe,EAAC,EAAE,QAAQ,EAAE,6BAAiB,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,MAAM,OAAO,CAAC,MAAM,CAAC,6BAAiB,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iBAAO,CAAC,KAAK,CACX,mBAAmB,6BAAiB,wBAAwB,EAC5D,KAAK,CACN,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ensure-default-tenant.js","sourceRoot":"","sources":["../../src/utils/ensure-default-tenant.ts"],"names":[],"mappings":";;AAuCA,8DAiBC;AAiKD,wDAkBC;AA3OD,6CAAyC;AACzC,qCAAmC;AACnC,mDAA2D;AAC3D,gEAA6D;AAC7D,6FAAqE;AACrE,mEAG6C;AAC7C,qDAAwE;AACxE,uFAAgF;AAChF,sCAGmB;AAKnB,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,SAAS,EAAW,CAAC;AAEjD,SAAS,kBAAkB;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,OAAO;QACL,GAAG,EAAE,6BAAiB;QACtB,IAAI,EAAE,+BAAmB;QACzB,mBAAmB,EAAE,IAAI;QACzB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;AACJ,CAAC;AASM,KAAK,UAAU,yBAAyB;IAC7C,MAAM,OAAO,GAAG,IAAA,wCAAQ,EAAC,gBAAW,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,6BAAiB,CAAC,CAAC;IACtD,IAAI,QAAQ,EAAE,CAAC;QACb,iBAAO,CAAC,IAAI,CAAC,mBAAmB,6BAAiB,mBAAmB,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,6BAAiB,CAAC,CAAC;YAAE,MAAM,KAAK,CAAC;QACzD,iBAAO,CAAC,IAAI,CAAC,mBAAmB,6BAAiB,mBAAmB,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,iBAAO,CAAC,IAAI,CAAC,mBAAmB,6BAAiB,YAAY,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,KAAK,UAAU,SAAS,CACtB,QAAqC,EACrC,KAA0B;IAE1B,MAAM,OAAO,GAAG,IAAA,wCAAQ,EAAC,gBAAW,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,IAAA,wBAAU,GAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK;SAChC,cAAc,CAAC,6BAAiB,EAAE;QACjC,IAAI,EAAE,QAAQ;QACd,aAAa,EAAE,sBAAsB;QACrC,gBAAgB,EAAE,QAAQ;QAC1B,YAAY,EAAE,IAAI;QAClB,KAAK;KACN,CAAC;SACD,GAAG,EAAE,CAAC;IACT,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,OAAO,KAAK,aAAa;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,6BAAiB,CAAC,CAAC;IACpD,OAAO,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAQD,SAAS,SAAS,CAAC,OAAe,EAAE,YAAoB;IACtD,IAAI,KAAK,GAAuB,OAAO,CAAC;IACxC,IAAI,OAAO,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAE/C,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,GAAG,IAAI,CAAC;gBACb,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAA,wCAAQ,EAAC,gBAAW,CAAC,CAAC,GAAG,CAAC,6BAAiB,CAAC,CAAC;YAClE,IAAI,MAAM,EAAE,oBAAoB,KAAK,KAAK;gBAAE,KAAK,GAAG,SAAS,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iBAAO,CAAC,IAAI,CACV,mBAAmB,6BAAiB,yBAAyB,EAC7D,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,EAAE,YAAY,CAAC,CAAC;IAEjB,OAAO;QACL,KAAK,CAAC,YAAY;YAChB,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM,OAAO,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AASD,KAAK,UAAU,mBAAmB,CAChC,OAAe,EACf,YAAoB;IAEpB,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,OAAuC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,IAAA,qCAAe,EAAC,EAAE,QAAQ,EAAE,6BAAiB,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;IACzC,IAAI,OAAO,EAAE,CAAC;QACZ,iBAAO,CAAC,KAAK,CACX,mBAAmB,6BAAiB,wBAAwB,EAC5D,OAAO,CAAC,KAAK,CACd,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GACZ,KAAK;QACL,CAAC,MAAM,SAAS,CAAC,KAAK,EAAE;YACtB,kBAAkB,EAAE,IAAI;YACxB,mBAAmB,EAAE,OAAO,KAAK,SAAS;SAC3C,CAAC,CAAC,CAAC;IACN,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,iBAAO,CAAC,IAAI,CACV,mBAAmB,6BAAiB,2DAA2D,CAChG,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,CAAC;AACzD,CAAC;AAOD,SAAS,gBAAgB,CAAC,YAAoB;IAC5C,IAAI,IAA8D,CAAC;IACnE,OAAO;QACL,MAAM;YACJ,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,QAA4B;YAClC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,IAAI,EAAE,QAAQ,KAAK,QAAQ;gBAAE,IAAI,GAAG,SAAS,CAAC;YAClD,IAAI,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YAC/B,OAAO,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC;QACvC,CAAC;KACF,CAAC;AACJ,CAAC;AAGD,KAAK,UAAU,YAAY,CACzB,KAA0C,EAC1C,YAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,IAAA,wCAAQ,EAAC,gBAAW,CAAC,CAAC,GAAG,CAAC,6BAAiB,CAAC,CAAC;IAClE,IAAI,CAAC,MAAM,EAAE,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,kBAAkB,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,oBAAoB,IAAI,WAAW,EAAE;QAC1E,kBAAkB,EAAE,UAAU,EAAE;KACjC,CAAC,CAAC;IACH,OAAO,OAAO,KAAK,SAAS,IAAI,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,GAAG,IAAA,kBAAQ,GAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACxC,CAAC;AAgBM,KAAK,UAAU,sBAAsB,CAC1C,SAAsB,IAAI,eAAe,EAAE,CAAC,MAAM,EAClD,QAAiC,IAAA,mCAA0B,GAAE;IAE7D,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC1D,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC7C,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,MAAM,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC;gBAAE,OAAO;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,MAAM,EAAE,CAAC;YACf,iBAAO,CAAC,IAAI,CACV,mBAAmB,6BAAiB,oCAAoC,EACxE,KAAK,CACN,CAAC;QACJ,CAAC;QACD,MAAM,IAAA,qBAAK,EAAC,WAAW,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
@@ -4,6 +4,7 @@ export declare const onboardingRegisterAdminSchema: z.ZodEffects<z.ZodObject<{
4
4
  firstName: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
5
5
  lastName: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
6
6
  password: z.ZodString;
7
+ setupToken: z.ZodOptional<z.ZodString>;
7
8
  platformName: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
8
9
  language: z.ZodOptional<z.ZodString>;
9
10
  }, "strip", z.ZodTypeAny, {
@@ -13,6 +14,7 @@ export declare const onboardingRegisterAdminSchema: z.ZodEffects<z.ZodObject<{
13
14
  lastName: string;
14
15
  language?: string | undefined;
15
16
  platformName?: string | undefined;
17
+ setupToken?: string | undefined;
16
18
  }, {
17
19
  email: string;
18
20
  password: string;
@@ -20,10 +22,12 @@ export declare const onboardingRegisterAdminSchema: z.ZodEffects<z.ZodObject<{
20
22
  lastName: string;
21
23
  language?: string | undefined;
22
24
  platformName?: string | undefined;
25
+ setupToken?: string | undefined;
23
26
  }>, {
24
27
  email: string;
25
28
  name: string;
26
29
  password: string;
30
+ setupToken: string | undefined;
27
31
  platformName: string | undefined;
28
32
  language: string | undefined;
29
33
  }, {
@@ -33,5 +37,6 @@ export declare const onboardingRegisterAdminSchema: z.ZodEffects<z.ZodObject<{
33
37
  lastName: string;
34
38
  language?: string | undefined;
35
39
  platformName?: string | undefined;
40
+ setupToken?: string | undefined;
36
41
  }>;
37
42
  export type OnboardingRegisterAdmin = z.output<typeof onboardingRegisterAdminSchema>;
@@ -43,6 +43,7 @@ const password_1 = require("../password");
43
43
  const MAX_NAME_PART_LENGTH = 100;
44
44
  const MAX_PLATFORM_NAME_LENGTH = 120;
45
45
  const MAX_LANGUAGE_TAG_LENGTH = 35;
46
+ const MAX_SETUP_TOKEN_LENGTH = 256;
46
47
  const LANGUAGE_TAG_PATTERN = /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/;
47
48
  function withoutTags(value) {
48
49
  return (0, striptags_1.default)(value).trim();
@@ -58,6 +59,7 @@ exports.onboardingRegisterAdminSchema = z
58
59
  firstName: namePartSchema,
59
60
  lastName: namePartSchema,
60
61
  password: password_1.passwordSchema,
62
+ setupToken: z.string().max(MAX_SETUP_TOKEN_LENGTH).optional(),
61
63
  platformName: z
62
64
  .string()
63
65
  .max(MAX_PLATFORM_NAME_LENGTH)
@@ -73,6 +75,7 @@ exports.onboardingRegisterAdminSchema = z
73
75
  email: (0, striptags_1.default)(data.email),
74
76
  name: `${data.firstName} ${data.lastName}`,
75
77
  password: data.password,
78
+ setupToken: data.setupToken,
76
79
  platformName: data.platformName || undefined,
77
80
  language: data.language,
78
81
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"register-admin.schema.js","sourceRoot":"","sources":["../../../src/validation/onboarding/register-admin.schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAkC;AAClC,uCAAyB;AAEzB,0CAA6C;AAE7C,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,oBAAoB,GAAG,uCAAuC,CAAC;AAErE,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,IAAA,mBAAS,EAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAGD,MAAM,cAAc,GAAG,CAAC;KACrB,MAAM,EAAE;KACR,GAAG,CAAC,oBAAoB,CAAC;KACzB,SAAS,CAAC,WAAW,CAAC;KACtB,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAOd,QAAA,6BAA6B,GAAG,CAAC;KAC3C,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;IAChC,SAAS,EAAE,cAAc;IACzB,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,yBAAc;IACxB,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,GAAG,CAAC,wBAAwB,CAAC;SAC7B,SAAS,CAAC,WAAW,CAAC;SACtB,QAAQ,EAAE;IACb,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,uBAAuB,CAAC;SAC5B,KAAK,CAAC,oBAAoB,CAAC;SAC3B,QAAQ,EAAE;CACd,CAAC;KACD,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpB,KAAK,EAAE,IAAA,mBAAS,EAAC,IAAI,CAAC,KAAK,CAAC;IAC5B,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ;IACvB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,SAAS;IAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ;CACxB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"register-admin.schema.js","sourceRoot":"","sources":["../../../src/validation/onboarding/register-admin.schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAkC;AAClC,uCAAyB;AAEzB,0CAA6C;AAE7C,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,oBAAoB,GAAG,uCAAuC,CAAC;AAErE,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,IAAA,mBAAS,EAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAGD,MAAM,cAAc,GAAG,CAAC;KACrB,MAAM,EAAE;KACR,GAAG,CAAC,oBAAoB,CAAC;KACzB,SAAS,CAAC,WAAW,CAAC;KACtB,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAQd,QAAA,6BAA6B,GAAG,CAAC;KAC3C,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;IAChC,SAAS,EAAE,cAAc;IACzB,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,yBAAc;IACxB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IAC7D,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,GAAG,CAAC,wBAAwB,CAAC;SAC7B,SAAS,CAAC,WAAW,CAAC;SACtB,QAAQ,EAAE;IACb,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,uBAAuB,CAAC;SAC5B,KAAK,CAAC,oBAAoB,CAAC;SAC3B,QAAQ,EAAE;CACd,CAAC;KACD,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpB,KAAK,EAAE,IAAA,mBAAS,EAAC,IAAI,CAAC,KAAK,CAAC;IAC5B,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ;IACvB,UAAU,EAAE,IAAI,CAAC,UAAU;IAC3B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,SAAS;IAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ;CACxB,CAAC,CAAC,CAAC"}
@@ -271,6 +271,20 @@ export function formatNumber(
271
271
  }
272
272
  }
273
273
 
274
+ const CURRENCY_CODE = /^[A-Za-z]{3}$/;
275
+
276
+ /**
277
+ * The currency an amount is written in: `options.currency` when it is an
278
+ * ISO 4217 code, euros otherwise (a missing or malformed code never turns the
279
+ * amount into a bare number).
280
+ */
281
+ function priceCurrency(options: Intl.NumberFormatOptions | undefined): string {
282
+ const code = options?.currency;
283
+ return typeof code === "string" && CURRENCY_CODE.test(code)
284
+ ? code.toUpperCase()
285
+ : DEFAULT_CURRENCY;
286
+ }
287
+
274
288
  /** An amount, in euros unless `options.currency` says otherwise. */
275
289
  export function formatPrice(
276
290
  value: number,
@@ -289,10 +303,10 @@ export function formatPrice(
289
303
  ): Parameters<typeof isNumber>[0] {
290
304
  return formatNumber(value, locale, {
291
305
  style: "currency",
292
- currency: DEFAULT_CURRENCY,
293
306
  minimumFractionDigits: DEFAULT_PRICE_FRACTION_DIGITS,
294
307
  maximumFractionDigits: DEFAULT_PRICE_FRACTION_DIGITS,
295
308
  ...options,
309
+ currency: priceCurrency(options),
296
310
  });
297
311
  }
298
312
 
@@ -64,6 +64,7 @@
64
64
  "invite_used": "This invitation was already used. Please log in.",
65
65
  "onboarding_already_completed": "Onboarding already completed.",
66
66
  "admin_already_set": "An administrator account already exists.",
67
+ "invalid_setup_token": "The setup token is missing or wrong. Use the address in the server log, or the value of DMS_SETUP_TOKEN.",
67
68
  "user_creation_failed": "The user account could not be created. Please try again.",
68
69
  "settings_not_found": "General settings not found.",
69
70
  "token_expired": "The validation code has expired.",
@@ -64,6 +64,7 @@
64
64
  "invite_used": "Cette invitation a déjà été utilisée. Veuillez vous connecter.",
65
65
  "onboarding_already_completed": "L'onboarding a déjà été completé.",
66
66
  "admin_already_set": "Un compte administrateur existe déjà.",
67
+ "invalid_setup_token": "Le jeton d'installation est absent ou incorrect. Utilisez l'adresse affichée dans les logs du serveur, ou la valeur de DMS_SETUP_TOKEN.",
67
68
  "user_creation_failed": "Le compte utilisateur n'a pas pu être créé. Veuillez réessayer.",
68
69
  "settings_not_found": "Les paramètres généraux n'ont pas été trouvés.",
69
70
  "token_expired": "Le code de validation a expiré.",
@@ -14,6 +14,11 @@ export interface DmsLogoSources {
14
14
 
15
15
  /** The logos of an instance, one per place it is drawn. */
16
16
  export interface DmsBrandingLogo {
17
+ /**
18
+ * The name a screen reader announces for the logo: the application's name.
19
+ * Set it with a logo of your own.
20
+ */
21
+ alt?: string;
17
22
  /** The expanded sidebar and the auth pages. */
18
23
  default: DmsLogoSources;
19
24
  /** The icon-only sidebar. */
@@ -30,6 +30,7 @@ function dmsColors(): DmsUiColors {
30
30
 
31
31
  function dmsLogo(): DmsBrandingLogo {
32
32
  return {
33
+ alt: "Antelope DMS",
33
34
  default: {
34
35
  light: "/images/antelope-logo/light.svg",
35
36
  dark: "/images/antelope-logo/dark.svg",