@antelopejs/interface-dms 0.13.3 → 0.14.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 (208) hide show
  1. package/CHANGELOG.md +231 -2
  2. package/README.md +9 -9
  3. package/dist/auth/db/models/sessions.model.d.ts +3 -3
  4. package/dist/auth/db/models/userExternalIdentities.model.d.ts +3 -3
  5. package/dist/auth/db/models/users.model.d.ts +3 -3
  6. package/dist/auth/db/tables/users.table.d.ts +3 -3
  7. package/dist/base/activity-feed.d.ts +2 -2
  8. package/dist/base/block-registry/types.d.ts +1 -1
  9. package/dist/base/chart-schemas.d.ts +70 -70
  10. package/dist/base/chart.d.ts +1 -1
  11. package/dist/base/data-types/default/choices.d.ts +1 -1
  12. package/dist/base/data-types/default/choices.js +3 -6
  13. package/dist/base/data-types/default/choices.js.map +1 -1
  14. package/dist/base/data-types/default/inputs.d.ts +1 -1
  15. package/dist/base/data-types/default/numbers.d.ts +2 -1
  16. package/dist/base/data-types/default/numbers.js +4 -3
  17. package/dist/base/data-types/default/numbers.js.map +1 -1
  18. package/dist/base/data-types/default/relations.d.ts +0 -6
  19. package/dist/base/data-types/default/relations.js +0 -1
  20. package/dist/base/data-types/default/relations.js.map +1 -1
  21. package/dist/base/data-types/default-types.d.ts +0 -1
  22. package/dist/base/data-types/default-types.js +0 -2
  23. package/dist/base/data-types/default-types.js.map +1 -1
  24. package/dist/base/data-types/index.js +0 -1
  25. package/dist/base/data-types/index.js.map +1 -1
  26. package/dist/base/data-types/internal/relation-endpoints.js +5 -3
  27. package/dist/base/data-types/internal/relation-endpoints.js.map +1 -1
  28. package/dist/base/data-types/internal/table-view-meta-slot.d.ts +17 -0
  29. package/dist/base/data-types/internal/table-view-meta-slot.js +25 -0
  30. package/dist/base/data-types/internal/table-view-meta-slot.js.map +1 -0
  31. package/dist/base/empty-state.d.ts +1 -1
  32. package/dist/base/export-jobs.d.ts +47 -19
  33. package/dist/base/export-jobs.js +39 -4
  34. package/dist/base/export-jobs.js.map +1 -1
  35. package/dist/base/form-schema.d.ts +0 -1
  36. package/dist/base/form-schema.js +12 -12
  37. package/dist/base/form-schema.js.map +1 -1
  38. package/dist/base/grid.js +1 -1
  39. package/dist/base/grid.js.map +1 -1
  40. package/dist/base/guard.d.ts +4 -4
  41. package/dist/base/guard.js +1 -1
  42. package/dist/base/guard.js.map +1 -1
  43. package/dist/base/helpers/file-refs.js +4 -6
  44. package/dist/base/helpers/file-refs.js.map +1 -1
  45. package/dist/base/internal/chart.d.ts +1 -1
  46. package/dist/base/internal/chart.js +1 -1
  47. package/dist/base/internal/chart.js.map +1 -1
  48. package/dist/base/internal/export-jobs.d.ts +11 -0
  49. package/dist/base/internal/export-jobs.js +11 -0
  50. package/dist/base/internal/export-jobs.js.map +1 -1
  51. package/dist/base/internal/form-block-schema.d.ts +1 -1
  52. package/dist/base/internal/form-block-schema.js +1 -1
  53. package/dist/base/internal/form-block-schema.js.map +1 -1
  54. package/dist/base/key-value-list.d.ts +6 -6
  55. package/dist/base/meter.d.ts +1 -1
  56. package/dist/base/placeholder.js +1 -1
  57. package/dist/base/placeholder.js.map +1 -1
  58. package/dist/base/searchable.d.ts +3 -3
  59. package/dist/base/searchable.js.map +1 -1
  60. package/dist/base/stack.js +1 -1
  61. package/dist/base/stack.js.map +1 -1
  62. package/dist/base/tab.js +1 -1
  63. package/dist/base/tab.js.map +1 -1
  64. package/dist/base/table-view/data-functions.d.ts +10 -11
  65. package/dist/base/table-view/data-functions.js.map +1 -1
  66. package/dist/base/table-view/factory.js +2 -0
  67. package/dist/base/table-view/factory.js.map +1 -1
  68. package/dist/base/table-view/internal/archive-filter.d.ts +21 -0
  69. package/dist/base/table-view/internal/archive-filter.js +48 -0
  70. package/dist/base/table-view/internal/archive-filter.js.map +1 -0
  71. package/dist/base/table-view/internal/auth.d.ts +2 -2
  72. package/dist/base/table-view/internal/auth.js +1 -3
  73. package/dist/base/table-view/internal/auth.js.map +1 -1
  74. package/dist/base/table-view/internal/column-conditions.js.map +1 -1
  75. package/dist/base/table-view/internal/data-functions.d.ts +2 -2
  76. package/dist/base/table-view/internal/factory-lifecycle-created.js +3 -2
  77. package/dist/base/table-view/internal/factory-lifecycle-created.js.map +1 -1
  78. package/dist/base/table-view/internal/footer.js +21 -13
  79. package/dist/base/table-view/internal/footer.js.map +1 -1
  80. package/dist/base/table-view/internal/guards.d.ts +1 -1
  81. package/dist/base/table-view/internal/guards.js +11 -8
  82. package/dist/base/table-view/internal/guards.js.map +1 -1
  83. package/dist/base/table-view/internal/meta-helpers.js +3 -2
  84. package/dist/base/table-view/internal/meta-helpers.js.map +1 -1
  85. package/dist/base/table-view/internal/nav-badges.js +1 -3
  86. package/dist/base/table-view/internal/nav-badges.js.map +1 -1
  87. package/dist/base/table-view/internal/option-views.d.ts +7 -4
  88. package/dist/base/table-view/internal/row-actions-schema.d.ts +6 -6
  89. package/dist/base/table-view/meta.d.ts +5 -5
  90. package/dist/base/table-view/meta.js +6 -2
  91. package/dist/base/table-view/meta.js.map +1 -1
  92. package/dist/base/table-view/routes.d.ts +39 -12
  93. package/dist/base/table-view/routes.js +0 -1
  94. package/dist/base/table-view/routes.js.map +1 -1
  95. package/dist/base/table-view/schema.d.ts +127 -127
  96. package/dist/base/top-list-card.d.ts +4 -4
  97. package/dist/component-options/data-type.d.ts +2 -1
  98. package/dist/component-options/data-type.js +1 -1
  99. package/dist/component-options/data-type.js.map +1 -1
  100. package/dist/component-slots.js +1 -1
  101. package/dist/component-slots.js.map +1 -1
  102. package/dist/connection-access.d.ts +46 -0
  103. package/dist/connection-access.js +73 -0
  104. package/dist/connection-access.js.map +1 -0
  105. package/dist/data-controllers/members.d.ts +15 -2
  106. package/dist/data-controllers/roles.d.ts +15 -2
  107. package/dist/db/internal/exportJobs.model.d.ts +3 -3
  108. package/dist/db/internal/inviteResolutions.model.d.ts +16 -3
  109. package/dist/db/internal/inviteResolutions.model.js +38 -0
  110. package/dist/db/internal/inviteResolutions.model.js.map +1 -1
  111. package/dist/db/internal/tenantLifecycle.model.d.ts +4 -4
  112. package/dist/db/internal/tenantLifecycle.model.js +2 -3
  113. package/dist/db/internal/tenantLifecycle.model.js.map +1 -1
  114. package/dist/db/models/roles.model.d.ts +3 -3
  115. package/dist/db/models/tenantMembers.model.d.ts +3 -3
  116. package/dist/db/models/tenants.model.d.ts +3 -3
  117. package/dist/db/models/user_invites.model.d.ts +18 -3
  118. package/dist/db/models/user_invites.model.js +28 -0
  119. package/dist/db/models/user_invites.model.js.map +1 -1
  120. package/dist/db/tables/user_invites.table.d.ts +6 -1
  121. package/dist/db/tables/user_invites.table.js +3 -0
  122. package/dist/db/tables/user_invites.table.js.map +1 -1
  123. package/dist/index.d.ts +1 -1
  124. package/dist/index.js +3 -2
  125. package/dist/index.js.map +1 -1
  126. package/dist/internal/component-slots.js +1 -1
  127. package/dist/internal/component-slots.js.map +1 -1
  128. package/dist/internal/invite-content.d.ts +8 -0
  129. package/dist/internal/invite-content.js +36 -0
  130. package/dist/internal/invite-content.js.map +1 -0
  131. package/dist/internal/invite-resolution.js +5 -2
  132. package/dist/internal/invite-resolution.js.map +1 -1
  133. package/dist/internal/tenant-ownership.d.ts +5 -4
  134. package/dist/internal/tenant-ownership.js +5 -4
  135. package/dist/internal/tenant-ownership.js.map +1 -1
  136. package/dist/invite-extensions/internal/delivery.d.ts +3 -2
  137. package/dist/invite-extensions/internal/delivery.js +3 -2
  138. package/dist/invite-extensions/internal/delivery.js.map +1 -1
  139. package/dist/invite-resolution.d.ts +5 -1
  140. package/dist/invite-resolution.js +10 -26
  141. package/dist/invite-resolution.js.map +1 -1
  142. package/dist/invites.d.ts +5 -0
  143. package/dist/invites.js +58 -1
  144. package/dist/invites.js.map +1 -1
  145. package/dist/notifications/internal.d.ts +0 -1
  146. package/dist/notifications/internal.js +0 -1
  147. package/dist/notifications/internal.js.map +1 -1
  148. package/dist/notifications/sendable.d.ts +1 -2
  149. package/dist/notifications/sendable.js +1 -12
  150. package/dist/notifications/sendable.js.map +1 -1
  151. package/dist/notifications/types.d.ts +1 -4
  152. package/dist/page/categories.d.ts +6 -0
  153. package/dist/page/categories.js +10 -3
  154. package/dist/page/categories.js.map +1 -1
  155. package/dist/page/controllers.d.ts +6 -9
  156. package/dist/page/controllers.js +5 -6
  157. package/dist/page/controllers.js.map +1 -1
  158. package/dist/page/internal/categories.js +43 -32
  159. package/dist/page/internal/categories.js.map +1 -1
  160. package/dist/page/internal/category-resolution.d.ts +31 -0
  161. package/dist/page/internal/category-resolution.js +63 -0
  162. package/dist/page/internal/category-resolution.js.map +1 -0
  163. package/dist/page/internal/metadata-extension-contributions.js +1 -2
  164. package/dist/page/internal/metadata-extension-contributions.js.map +1 -1
  165. package/dist/page/internal/metadata-info.js +19 -7
  166. package/dist/page/internal/metadata-info.js.map +1 -1
  167. package/dist/page/internal/metadata-layout.d.ts +3 -2
  168. package/dist/page/internal/metadata-layout.js.map +1 -1
  169. package/dist/page/internal/metadata-lifecycle.js +1 -4
  170. package/dist/page/internal/metadata-lifecycle.js.map +1 -1
  171. package/dist/page/internal/metadata-publish.js +7 -6
  172. package/dist/page/internal/metadata-publish.js.map +1 -1
  173. package/dist/page/internal/metadata-registration.js +8 -6
  174. package/dist/page/internal/metadata-registration.js.map +1 -1
  175. package/dist/page/internal/page-controller.d.ts +18 -0
  176. package/dist/page/internal/page-controller.js +36 -0
  177. package/dist/page/internal/page-controller.js.map +1 -0
  178. package/dist/page/metadata.d.ts +3 -3
  179. package/dist/page/metadata.js +4 -2
  180. package/dist/page/metadata.js.map +1 -1
  181. package/dist/page/types.d.ts +8 -2
  182. package/dist/page.d.ts +1 -1
  183. package/dist/page.js +2 -1
  184. package/dist/page.js.map +1 -1
  185. package/dist/permissions.d.ts +2 -1
  186. package/dist/permissions.js +5 -2
  187. package/dist/permissions.js.map +1 -1
  188. package/dist/tenant-provisioning.js +1 -1
  189. package/dist/tenant-provisioning.js.map +1 -1
  190. package/dist/types.d.ts +7 -3
  191. package/docs/1.core/11.modules-and-dynamic-menus.md +3 -3
  192. package/docs/1.core/2.pages-and-modules.md +2 -1
  193. package/docs/1.core/4.permissions.md +2 -2
  194. package/docs/1.core/5.tenancy.md +1 -1
  195. package/docs/1.core/6.invites.md +3 -1
  196. package/docs/2.auth/2.authentication.md +1 -1
  197. package/docs/2.auth/3.tokens-and-sessions.md +1 -1
  198. package/docs/3.base/1.introduction.md +1 -1
  199. package/docs/3.base/14.table-events-and-helpers.md +1 -1
  200. package/docs/3.base/15.table-sources-and-gates.md +14 -2
  201. package/docs/3.base/3.forms.md +1 -1
  202. package/docs/3.base/4.tables.md +1 -1
  203. package/docs/3.base/5.charts-and-widgets.md +3 -3
  204. package/docs/3.base/8.data-types.md +1 -1
  205. package/docs/3.base/9.helpers.md +16 -5
  206. package/docs/4.notifications/3.sending.md +0 -11
  207. package/docs/index.md +1 -1
  208. package/package.json +11 -11
@@ -12,7 +12,12 @@ export declare class UserInvite extends Table {
12
12
  token: string;
13
13
  asTenantOwner: boolean;
14
14
  expiresAt: Date;
15
- /** A replacement is actionable only after its creating resolution completes. */
15
+ /**
16
+ * Id of the resolution that created this invitation as a replacement, which
17
+ * is actionable only once that resolution completes. Empty for an invitation
18
+ * created without one: unique with `email`, so concurrent invitations of one
19
+ * email keep a single row.
20
+ */
16
21
  creationResolutionId?: string;
17
22
  /**
18
23
  * Id of the user who sent the invitation, or last resent it. `null` for an
@@ -14,6 +14,7 @@ const interface_database_decorators_1 = require("@antelopejs/interface-database-
14
14
  const constants_1 = require("../../constants");
15
15
  const roles_table_1 = require("./roles.table");
16
16
  exports.USER_INVITES_TABLE_NAME = "user_invites";
17
+ const PENDING_INVITE_INDEX = "email_creationResolutionId";
17
18
  let UserInvite = class UserInvite extends interface_database_decorators_1.Table {
18
19
  };
19
20
  exports.UserInvite = UserInvite;
@@ -28,6 +29,7 @@ __decorate([
28
29
  __metadata("design:type", Date)
29
30
  ], UserInvite.prototype, "createdAt", void 0);
30
31
  __decorate([
32
+ (0, interface_database_decorators_1.Index)({ group: PENDING_INVITE_INDEX, unique: true }),
31
33
  (0, interface_database_decorators_1.Index)({ crossInstance: true }),
32
34
  (0, interface_database_decorators_1.Field)("string"),
33
35
  __metadata("design:type", String)
@@ -64,6 +66,7 @@ __decorate([
64
66
  __metadata("design:type", Date)
65
67
  ], UserInvite.prototype, "expiresAt", void 0);
66
68
  __decorate([
69
+ (0, interface_database_decorators_1.Index)({ group: PENDING_INVITE_INDEX, unique: true }),
67
70
  (0, interface_database_decorators_1.Field)("string"),
68
71
  __metadata("design:type", String)
69
72
  ], UserInvite.prototype, "creationResolutionId", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"user_invites.table.js","sourceRoot":"","sources":["../../../src/db/tables/user_invites.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAOmD;AACnD,+CAAqD;AAErD,+CAAqC;AAExB,QAAA,uBAAuB,GAAG,cAAc,CAAC;AAG/C,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,qCAAK;CAuDpC,CAAA;AAvDY,gCAAU;AAEb;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uCACI;AAKZ;IAHP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;6CAAC;AAIhB;IAFP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACM;AAGd;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CACiB;AAGzB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CACgB;AAIxB;IAFP,IAAA,qCAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;IACjB,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;6CACb;AAGpB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CACS;AAIjB;IAFP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACM;AAGd;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;iDACc;AAIvB;IAFP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;6CAAC;AAIhB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;wDACsB;AAO9B;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CACkB;AAQ1B;IADP,IAAA,qCAAK,EAAC,KAAK,CAAC;;8CACsC;qBAtDxC,UAAU;IADtB,IAAA,6CAAa,EAAC,+BAAuB,EAAE,8BAAkB,CAAC;GAC9C,UAAU,CAuDtB"}
1
+ {"version":3,"file":"user_invites.table.js","sourceRoot":"","sources":["../../../src/db/tables/user_invites.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAOmD;AACnD,+CAAqD;AAErD,+CAAqC;AAExB,QAAA,uBAAuB,GAAG,cAAc,CAAC;AACtD,MAAM,oBAAoB,GAAG,4BAA4B,CAAC;AAGnD,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,qCAAK;CA8DpC,CAAA;AA9DY,gCAAU;AAEb;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uCACI;AAKZ;IAHP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;6CAAC;AAKhB;IAHP,IAAA,qCAAK,EAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACpD,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACM;AAGd;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CACiB;AAGzB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CACgB;AAIxB;IAFP,IAAA,qCAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;IACjB,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;6CACb;AAGpB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CACS;AAIjB;IAFP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACM;AAGd;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;iDACc;AAIvB;IAFP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;6CAAC;AAUhB;IAFP,IAAA,qCAAK,EAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACpD,IAAA,qCAAK,EAAC,QAAQ,CAAC;;wDACsB;AAO9B;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CACkB;AAQ1B;IADP,IAAA,qCAAK,EAAC,KAAK,CAAC;;8CACsC;qBA7DxC,UAAU;IADtB,IAAA,6CAAa,EAAC,+BAAuB,EAAE,8BAAkB,CAAC;GAC9C,UAAU,CA8DtB"}
package/dist/index.d.ts CHANGED
@@ -8,7 +8,7 @@ export { InviteAcceptHandler, InviteCleanupContext, InviteCleanupHandler, Invite
8
8
  export * from "./invite-resolution";
9
9
  export { CreateUserInviteTokenOptions, CreateUserInviteTokenResult, INVITE_EXPIRY_DAYS, INVITE_TOKEN_LENGTH, InviteUserToTenantOptions, InviteUserToTenantResult, createUserInviteToken, inviteUserToTenant, inviteeDisplayName, } from "./invites";
10
10
  export { LayoutBannerComponentInfo, LayoutBannerContext, LayoutBannerInfo, LayoutBannerScope, LayoutBannerTextInfo, LayoutBannerVariant, LayoutBannerVisibility, RegisterLayoutBanner, } from "./layout-banners";
11
- export { AddFrontendModule, AddFrontendModuleOptions, Category, CategoryInfo, ClearPageLayoutBySlug, DynamicMenuItem, DynamicMenuProviderInfo, DynamicMenuResolver, FrontendModuleContext, FrontendModuleFunction, FrontendModuleMetadata, FrontendModuleOptions, FrontendModuleRegistration, FrontendModuleValue, FrontendRendererMetadata, GetComponentPermissionIds, GetFrontendModules, GetPageLayoutBySlug, GetPermissionId, GetRegisteredPageIds, MODULE_URL_PREFIX, MaybePromise, MenuItemQuery, MenuItemStatus, MenuItemType, MenuItemVariant, MenuOptions, ModuleCatalogContext, ModuleInfo, ModuleReadoutLine, ModuleReadoutTone, ModuleStatus, NotifyMenuChanged, PAGE_ROUTE_PREFIX, PageController, PageExtensionComponent, PageExtensionInfo, PageInfo, PageLayout, PageLayoutHandler, PageLayoutRequest, PageMetadata, PageSetupCleanup, PageSetupContext, PageSetupFunction, PageValidation, RegisterDynamicMenuProvider, RegisterModule, RegisterPage, RegisterPageExtension, RootCategory, RootPageController, isInsideModule, modulesCategory, pageRoutePath, pagesCategory, settingsCategory, } from "./page";
11
+ export { AddFrontendModule, AddFrontendModuleOptions, Category, CategoryInfo, ClearPageLayoutBySlug, DynamicMenuItem, DynamicMenuProviderInfo, DynamicMenuResolver, FrontendModuleContext, FrontendModuleFunction, FrontendModuleMetadata, FrontendModuleOptions, FrontendModuleRegistration, FrontendModuleValue, FrontendRendererMetadata, GetComponentPermissionIds, GetFrontendModules, GetPageLayoutBySlug, GetPermissionId, GetRegisteredPageIds, MODULE_URL_PREFIX, MaybePromise, MenuItemQuery, MenuItemStatus, MenuItemType, MenuItemVariant, MenuOptions, ModuleCatalogContext, ModuleInfo, ModuleReadoutLine, ModuleReadoutTone, ModuleStatus, NotifyMenuChanged, PAGE_ROUTE_PREFIX, PageController, PageExtensionComponent, PageExtensionInfo, PageInfo, PageLayout, PageLayoutHandler, PageLayoutRequest, PageMetadata, PageSetupCleanup, PageSetupContext, PageSetupFunction, PageValidation, RegisterDynamicMenuProvider, RegisterModule, RegisterPage, RegisterPageExtension, RootCategory, RootPageController, isInsideModule, isOwnerOnly, modulesCategory, pageRoutePath, pagesCategory, settingsCategory, } from "./page";
12
12
  export { GetEffectiveUserPermissions, GetPermission, GetPermissions, GetUserPermissions, HasAnyPermission, HasPermission, IsModuleScopedPermission, MarkModuleScopedPermission, Permission, PermissionTree, RegisterPermission, UnmarkModuleScopedPermission, UnregisterPermission, } from "./permissions";
13
13
  export { ApplyPermissionsResolvers, PermissionsResolverContext, PermissionsResolverFn, PermissionsResolverInfo, PermissionsResolverPreview, RegisterPermissionsResolver, } from "./permissions-resolver";
14
14
  export { QuickAction, QuickActionCategory, QuickActionCategoryInfo, QuickActionInfo, QuickActionPageTarget, QuickActionTarget, } from "./quick-actions";
package/dist/index.js CHANGED
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.UnregisterPermission = exports.UnmarkModuleScopedPermission = exports.RegisterPermission = exports.MarkModuleScopedPermission = exports.IsModuleScopedPermission = exports.HasPermission = exports.HasAnyPermission = exports.GetUserPermissions = exports.GetPermissions = exports.GetPermission = exports.GetEffectiveUserPermissions = exports.settingsCategory = exports.pagesCategory = exports.pageRoutePath = exports.modulesCategory = exports.isInsideModule = exports.RootPageController = exports.RootCategory = exports.RegisterPageExtension = exports.RegisterPage = exports.RegisterModule = exports.RegisterDynamicMenuProvider = exports.PageMetadata = exports.PageController = exports.PAGE_ROUTE_PREFIX = exports.NotifyMenuChanged = exports.MODULE_URL_PREFIX = exports.GetRegisteredPageIds = exports.GetPermissionId = exports.GetPageLayoutBySlug = exports.GetFrontendModules = exports.GetComponentPermissionIds = exports.ClearPageLayoutBySlug = exports.Category = exports.AddFrontendModule = exports.RegisterLayoutBanner = exports.LayoutBannerVariant = exports.LayoutBannerScope = exports.inviteeDisplayName = exports.inviteUserToTenant = exports.createUserInviteToken = exports.INVITE_TOKEN_LENGTH = exports.INVITE_EXPIRY_DAYS = exports.RegisterInviteExtension = exports.authenticateTenantRequest = exports.AuthUserWithPermission = exports.AuthTenantOwner = exports.AuthTenantMember = exports.SaveComponentFiles = exports.GetAttachmentValidationMetadata = void 0;
18
- exports.StampUploadFieldTokens = exports.SignUploadToken = exports.RegisterTenantAccessGate = exports.CheckTenantAccess = exports.AssertTenantAccess = exports.SubscribeMessage = exports.RegisterPageTopic = exports.PublishMessage = exports.QuickActionCategory = exports.QuickAction = exports.RegisterPermissionsResolver = exports.ApplyPermissionsResolvers = void 0;
17
+ exports.UnmarkModuleScopedPermission = exports.RegisterPermission = exports.MarkModuleScopedPermission = exports.IsModuleScopedPermission = exports.HasPermission = exports.HasAnyPermission = exports.GetUserPermissions = exports.GetPermissions = exports.GetPermission = exports.GetEffectiveUserPermissions = exports.settingsCategory = exports.pagesCategory = exports.pageRoutePath = exports.modulesCategory = exports.isOwnerOnly = exports.isInsideModule = exports.RootPageController = exports.RootCategory = exports.RegisterPageExtension = exports.RegisterPage = exports.RegisterModule = exports.RegisterDynamicMenuProvider = exports.PageMetadata = exports.PageController = exports.PAGE_ROUTE_PREFIX = exports.NotifyMenuChanged = exports.MODULE_URL_PREFIX = exports.GetRegisteredPageIds = exports.GetPermissionId = exports.GetPageLayoutBySlug = exports.GetFrontendModules = exports.GetComponentPermissionIds = exports.ClearPageLayoutBySlug = exports.Category = exports.AddFrontendModule = exports.RegisterLayoutBanner = exports.LayoutBannerVariant = exports.LayoutBannerScope = exports.inviteeDisplayName = exports.inviteUserToTenant = exports.createUserInviteToken = exports.INVITE_TOKEN_LENGTH = exports.INVITE_EXPIRY_DAYS = exports.RegisterInviteExtension = exports.authenticateTenantRequest = exports.AuthUserWithPermission = exports.AuthTenantOwner = exports.AuthTenantMember = exports.SaveComponentFiles = exports.GetAttachmentValidationMetadata = void 0;
18
+ exports.StampUploadFieldTokens = exports.SignUploadToken = exports.RegisterTenantAccessGate = exports.CheckTenantAccess = exports.AssertTenantAccess = exports.SubscribeMessage = exports.RegisterPageTopic = exports.PublishMessage = exports.QuickActionCategory = exports.QuickAction = exports.RegisterPermissionsResolver = exports.ApplyPermissionsResolvers = exports.UnregisterPermission = void 0;
19
19
  var attachments_1 = require("./attachments");
20
20
  Object.defineProperty(exports, "GetAttachmentValidationMetadata", { enumerable: true, get: function () { return attachments_1.GetAttachmentValidationMetadata; } });
21
21
  Object.defineProperty(exports, "SaveComponentFiles", { enumerable: true, get: function () { return attachments_1.SaveComponentFiles; } });
@@ -62,6 +62,7 @@ Object.defineProperty(exports, "RegisterPageExtension", { enumerable: true, get:
62
62
  Object.defineProperty(exports, "RootCategory", { enumerable: true, get: function () { return page_1.RootCategory; } });
63
63
  Object.defineProperty(exports, "RootPageController", { enumerable: true, get: function () { return page_1.RootPageController; } });
64
64
  Object.defineProperty(exports, "isInsideModule", { enumerable: true, get: function () { return page_1.isInsideModule; } });
65
+ Object.defineProperty(exports, "isOwnerOnly", { enumerable: true, get: function () { return page_1.isOwnerOnly; } });
65
66
  Object.defineProperty(exports, "modulesCategory", { enumerable: true, get: function () { return page_1.modulesCategory; } });
66
67
  Object.defineProperty(exports, "pageRoutePath", { enumerable: true, get: function () { return page_1.pageRoutePath; } });
67
68
  Object.defineProperty(exports, "pagesCategory", { enumerable: true, get: function () { return page_1.pagesCategory; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,6CAMuB;AAFrB,8HAAA,+BAA+B,OAAA;AAC/B,iHAAA,kBAAkB,OAAA;AAEpB,8CAA4B;AAC5B,oDAAkC;AAClC,8CAA4B;AAC5B,mCAOkB;AANhB,0GAAA,gBAAgB,OAAA;AAChB,yGAAA,eAAe,OAAA;AACf,gHAAA,sBAAsB,OAAA;AAGtB,mHAAA,yBAAyB,OAAA;AAE3B,0CAAwB;AACxB,yDAW6B;AAD3B,4HAAA,uBAAuB,OAAA;AAEzB,sDAAoC;AACpC,qCAUmB;AAPjB,6GAAA,kBAAkB,OAAA;AAClB,8GAAA,mBAAmB,OAAA;AAGnB,gHAAA,qBAAqB,OAAA;AACrB,6GAAA,kBAAkB,OAAA;AAClB,6GAAA,kBAAkB,OAAA;AAEpB,mDAS0B;AALxB,mHAAA,iBAAiB,OAAA;AAEjB,qHAAA,mBAAmB,OAAA;AAEnB,sHAAA,oBAAoB,OAAA;AAEtB,+BA0DgB;AAzDd,yGAAA,iBAAiB,OAAA;AAEjB,gGAAA,QAAQ,OAAA;AAER,6GAAA,qBAAqB,OAAA;AAWrB,iHAAA,yBAAyB,OAAA;AACzB,0GAAA,kBAAkB,OAAA;AAClB,2GAAA,mBAAmB,OAAA;AACnB,uGAAA,eAAe,OAAA;AACf,4GAAA,oBAAoB,OAAA;AACpB,yGAAA,iBAAiB,OAAA;AAYjB,yGAAA,iBAAiB,OAAA;AACjB,yGAAA,iBAAiB,OAAA;AACjB,sGAAA,cAAc,OAAA;AAOd,oGAAA,YAAY,OAAA;AAKZ,mHAAA,2BAA2B,OAAA;AAC3B,sGAAA,cAAc,OAAA;AACd,oGAAA,YAAY,OAAA;AACZ,6GAAA,qBAAqB,OAAA;AACrB,oGAAA,YAAY,OAAA;AACZ,0GAAA,kBAAkB,OAAA;AAClB,sGAAA,cAAc,OAAA;AACd,uGAAA,eAAe,OAAA;AACf,qGAAA,aAAa,OAAA;AACb,qGAAA,aAAa,OAAA;AACb,wGAAA,gBAAgB,OAAA;AAElB,6CAcuB;AAbrB,0HAAA,2BAA2B,OAAA;AAC3B,4GAAA,aAAa,OAAA;AACb,6GAAA,cAAc,OAAA;AACd,iHAAA,kBAAkB,OAAA;AAClB,+GAAA,gBAAgB,OAAA;AAChB,4GAAA,aAAa,OAAA;AACb,uHAAA,wBAAwB,OAAA;AACxB,yHAAA,0BAA0B,OAAA;AAG1B,iHAAA,kBAAkB,OAAA;AAClB,2HAAA,4BAA4B,OAAA;AAC5B,mHAAA,oBAAoB,OAAA;AAEtB,+DAOgC;AAN9B,iIAAA,yBAAyB,OAAA;AAKzB,mIAAA,2BAA2B,OAAA;AAE7B,iDAOyB;AANvB,4GAAA,WAAW,OAAA;AACX,oHAAA,mBAAmB,OAAA;AAMrB,uCAQoB;AAPlB,0GAAA,cAAc,OAAA;AAId,6GAAA,iBAAiB,OAAA;AACjB,4GAAA,gBAAgB,OAAA;AAGlB,oDAAkC;AAClC,mDAAiC;AACjC,iDAOyB;AANvB,mHAAA,kBAAkB,OAAA;AAClB,kHAAA,iBAAiB,OAAA;AACjB,yHAAA,wBAAwB,OAAA;AAK1B,kDAAgC;AAChC,qDAAmC;AACnC,qDAAmC;AACnC,wDAAsC;AACtC,0CAAwB;AACxB,qCAAoE;AAA3D,0GAAA,eAAe,OAAA;AAAE,iHAAA,sBAAsB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,6CAMuB;AAFrB,8HAAA,+BAA+B,OAAA;AAC/B,iHAAA,kBAAkB,OAAA;AAEpB,8CAA4B;AAC5B,oDAAkC;AAClC,8CAA4B;AAC5B,mCAOkB;AANhB,0GAAA,gBAAgB,OAAA;AAChB,yGAAA,eAAe,OAAA;AACf,gHAAA,sBAAsB,OAAA;AAGtB,mHAAA,yBAAyB,OAAA;AAE3B,0CAAwB;AACxB,yDAW6B;AAD3B,4HAAA,uBAAuB,OAAA;AAEzB,sDAAoC;AACpC,qCAUmB;AAPjB,6GAAA,kBAAkB,OAAA;AAClB,8GAAA,mBAAmB,OAAA;AAGnB,gHAAA,qBAAqB,OAAA;AACrB,6GAAA,kBAAkB,OAAA;AAClB,6GAAA,kBAAkB,OAAA;AAEpB,mDAS0B;AALxB,mHAAA,iBAAiB,OAAA;AAEjB,qHAAA,mBAAmB,OAAA;AAEnB,sHAAA,oBAAoB,OAAA;AAEtB,+BA2DgB;AA1Dd,yGAAA,iBAAiB,OAAA;AAEjB,gGAAA,QAAQ,OAAA;AAER,6GAAA,qBAAqB,OAAA;AAWrB,iHAAA,yBAAyB,OAAA;AACzB,0GAAA,kBAAkB,OAAA;AAClB,2GAAA,mBAAmB,OAAA;AACnB,uGAAA,eAAe,OAAA;AACf,4GAAA,oBAAoB,OAAA;AACpB,yGAAA,iBAAiB,OAAA;AAYjB,yGAAA,iBAAiB,OAAA;AACjB,yGAAA,iBAAiB,OAAA;AACjB,sGAAA,cAAc,OAAA;AAOd,oGAAA,YAAY,OAAA;AAKZ,mHAAA,2BAA2B,OAAA;AAC3B,sGAAA,cAAc,OAAA;AACd,oGAAA,YAAY,OAAA;AACZ,6GAAA,qBAAqB,OAAA;AACrB,oGAAA,YAAY,OAAA;AACZ,0GAAA,kBAAkB,OAAA;AAClB,sGAAA,cAAc,OAAA;AACd,mGAAA,WAAW,OAAA;AACX,uGAAA,eAAe,OAAA;AACf,qGAAA,aAAa,OAAA;AACb,qGAAA,aAAa,OAAA;AACb,wGAAA,gBAAgB,OAAA;AAElB,6CAcuB;AAbrB,0HAAA,2BAA2B,OAAA;AAC3B,4GAAA,aAAa,OAAA;AACb,6GAAA,cAAc,OAAA;AACd,iHAAA,kBAAkB,OAAA;AAClB,+GAAA,gBAAgB,OAAA;AAChB,4GAAA,aAAa,OAAA;AACb,uHAAA,wBAAwB,OAAA;AACxB,yHAAA,0BAA0B,OAAA;AAG1B,iHAAA,kBAAkB,OAAA;AAClB,2HAAA,4BAA4B,OAAA;AAC5B,mHAAA,oBAAoB,OAAA;AAEtB,+DAOgC;AAN9B,iIAAA,yBAAyB,OAAA;AAKzB,mIAAA,2BAA2B,OAAA;AAE7B,iDAOyB;AANvB,4GAAA,WAAW,OAAA;AACX,oHAAA,mBAAmB,OAAA;AAMrB,uCAQoB;AAPlB,0GAAA,cAAc,OAAA;AAId,6GAAA,iBAAiB,OAAA;AACjB,4GAAA,gBAAgB,OAAA;AAGlB,oDAAkC;AAClC,mDAAiC;AACjC,iDAOyB;AANvB,mHAAA,kBAAkB,OAAA;AAClB,kHAAA,iBAAiB,OAAA;AACjB,yHAAA,wBAAwB,OAAA;AAK1B,kDAAgC;AAChC,qDAAmC;AACnC,qDAAmC;AACnC,wDAAsC;AACtC,0CAAwB;AACxB,qCAAoE;AAA3D,0GAAA,eAAe,OAAA;AAAE,iHAAA,sBAAsB,OAAA"}
@@ -23,7 +23,7 @@ exports.COMPONENT_SLOT_KEY = "slotId";
23
23
  * sits above this one in the layering, and the walker tests resolve forms built
24
24
  * by `Form`, so the two cannot drift apart.
25
25
  */
26
- const SLOT_FORM_COMPONENT_NAME = "dms-form";
26
+ const SLOT_FORM_COMPONENT_NAME = "dms-form-block";
27
27
  /** @internal */
28
28
  exports.slotResolvers = new Map();
29
29
  function isSlotFormOptions(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"component-slots.js","sourceRoot":"","sources":["../../src/internal/component-slots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-slots.js","sourceRoot":"","sources":["../../src/internal/component-slots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { UserInvite } from "../db/tables/user_invites.table";
2
+ /**
3
+ * Whether two invitations carry the same content, ignoring their id, token
4
+ * and dates.
5
+ *
6
+ * @internal
7
+ */
8
+ export declare function isSameInviteContent(left: UserInvite | null | undefined, right: UserInvite | null | undefined): boolean;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSameInviteContent = isSameInviteContent;
4
+ const node_util_1 = require("node:util");
5
+ /**
6
+ * The invitation's content as plain data.
7
+ *
8
+ * `roles_ids` and `extensions` reach this comparison as per-context views when
9
+ * the caller lives in another module, and `isDeepStrictEqual` refuses two views
10
+ * holding the same values, which would report a faithful retry as a conflict.
11
+ */
12
+ function inviteContent(invite) {
13
+ if (!invite)
14
+ return null;
15
+ return JSON.stringify([
16
+ invite.email,
17
+ invite.firstname,
18
+ invite.lastname,
19
+ invite.language,
20
+ invite.roles_ids,
21
+ invite.asTenantOwner,
22
+ invite.extensions,
23
+ ]);
24
+ }
25
+ /**
26
+ * Whether two invitations carry the same content, ignoring their id, token
27
+ * and dates.
28
+ *
29
+ * @internal
30
+ */
31
+ function isSameInviteContent(left, right) {
32
+ const leftContent = inviteContent(left);
33
+ const rightContent = inviteContent(right);
34
+ return (0, node_util_1.isDeepStrictEqual)(leftContent === null ? null : JSON.parse(leftContent), rightContent === null ? null : JSON.parse(rightContent));
35
+ }
36
+ //# sourceMappingURL=invite-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invite-content.js","sourceRoot":"","sources":["../../src/internal/invite-content.ts"],"names":[],"mappings":";;AA6BA,kDAUC;AAvCD,yCAA8C;AAG9C;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,MAAqC;IAC1D,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,MAAM,CAAC,KAAK;QACZ,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,QAAQ;QACf,MAAM,CAAC,QAAQ;QACf,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,aAAa;QACpB,MAAM,CAAC,UAAU;KAClB,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CACjC,IAAmC,EACnC,KAAoC;IAEpC,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,IAAA,6BAAiB,EACtB,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EACrD,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CACxD,CAAC;AACJ,CAAC"}
@@ -30,8 +30,11 @@ async function completeAdmittedInviteResolution(resolution) {
30
30
  const current = await model.get(resolution._id);
31
31
  if (!current)
32
32
  throw new Error("Invite decision disappeared");
33
- if (current.completed)
33
+ const invites = (0, interface_database_decorators_1.GetModel)(user_invites_model_1.UserInviteModel, current.tenantId);
34
+ if (current.completed) {
35
+ await invites.delete(current.invite._id);
34
36
  return;
37
+ }
35
38
  requireExtensions(current);
36
39
  if (current.reason === "accepted")
37
40
  await deliverAcceptance(current);
@@ -44,7 +47,7 @@ async function completeAdmittedInviteResolution(resolution) {
44
47
  deliveryId: current._id,
45
48
  });
46
49
  await (0, invite_replacement_1.ensureInviteReplacement)(current);
47
- await (0, interface_database_decorators_1.GetModel)(user_invites_model_1.UserInviteModel, current.tenantId).delete(current.invite._id);
50
+ await invites.delete(current.invite._id);
48
51
  await model.update(current._id, { completed: true });
49
52
  }
50
53
  //# sourceMappingURL=invite-resolution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"invite-resolution.js","sourceRoot":"","sources":["../../src/internal/invite-resolution.ts"],"names":[],"mappings":";;AAmCA,4EAoBC;AAvDD,6FAAqE;AACrE,oFAAgF;AAEhF,wEAAkE;AAClE,oCAA8C;AAC9C,qEAA8E;AAC9E,qEAAiF;AACjF,2DAA6D;AAC7D,6DAA+D;AAE/D,SAAS,iBAAiB,CAAC,UAA4B;IACrD,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,IAAA,+BAAoB,GAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CACzD,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,MAAM;QAChB,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,UAA4B;IAC3D,MAAM,MAAM,GAAG,MAAM,IAAA,0CAAsB,EAAC,UAAU,CAAC,CAAC;IACxD,MAAM,IAAA,kCAAuB,EAC3B,UAAU,CAAC,MAAM,CAAC,UAAU,EAC5B,MAAM,EACN;QACE,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;QAC9B,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG;QAC/B,UAAU,EAAE,UAAU,CAAC,GAAG;KAC3B,EACD,EAAE,cAAc,EAAE,IAAI,EAAE,CACzB,CAAC;AACJ,CAAC;AAED,2FAA2F;AACpF,KAAK,UAAU,gCAAgC,CACpD,UAA4B;IAE5B,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,SAAS;QAAE,OAAO;IAC9B,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;QAAE,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,IAAA,oBAAY,EAAC,YAAI,CAAC,cAAc,EAAE;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QAC5B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;QAC3B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;QACrC,UAAU,EAAE,OAAO,CAAC,GAAG;KACxB,CAAC,CAAC;IACH,MAAM,IAAA,4CAAuB,EAAC,OAAO,CAAC,CAAC;IACvC,MAAM,IAAA,wCAAQ,EAAC,oCAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7E,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"invite-resolution.js","sourceRoot":"","sources":["../../src/internal/invite-resolution.ts"],"names":[],"mappings":";;AAmCA,4EAwBC;AA3DD,6FAAqE;AACrE,oFAAgF;AAEhF,wEAAkE;AAClE,oCAA8C;AAC9C,qEAA8E;AAC9E,qEAAiF;AACjF,2DAA6D;AAC7D,6DAA+D;AAE/D,SAAS,iBAAiB,CAAC,UAA4B;IACrD,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,IAAA,+BAAoB,GAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CACzD,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,MAAM;QAChB,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,UAA4B;IAC3D,MAAM,MAAM,GAAG,MAAM,IAAA,0CAAsB,EAAC,UAAU,CAAC,CAAC;IACxD,MAAM,IAAA,kCAAuB,EAC3B,UAAU,CAAC,MAAM,CAAC,UAAU,EAC5B,MAAM,EACN;QACE,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;QAC9B,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG;QAC/B,UAAU,EAAE,UAAU,CAAC,GAAG;KAC3B,EACD,EAAE,cAAc,EAAE,IAAI,EAAE,CACzB,CAAC;AACJ,CAAC;AAED,2FAA2F;AACpF,KAAK,UAAU,gCAAgC,CACpD,UAA4B;IAE5B,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAA,wCAAQ,EAAC,oCAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IACD,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;QAAE,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,IAAA,oBAAY,EAAC,YAAI,CAAC,cAAc,EAAE;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QAC5B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;QAC3B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;QACrC,UAAU,EAAE,OAAO,CAAC,GAAG;KACxB,CAAC,CAAC;IACH,MAAM,IAAA,4CAAuB,EAAC,OAAO,CAAC,CAAC;IACvC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC"}
@@ -6,10 +6,11 @@ import type { TenantMembershipPatch } from "../tenant-ownership";
6
6
  */
7
7
  export declare function applyAdmittedTenantOwnership(userModel: UserModel, userId: string, tenantId: string, patch: TenantMembershipPatch): Promise<void>;
8
8
  /**
9
- * Compatibility shim: in non-SaaS mode, the legacy `users.owner` boolean is
10
- * kept in sync with `TenantMember.isTenantOwner` on the default tenant. This
11
- * is a no-op in SaaS mode (where `users.owner` reflects platform ownership
12
- * separately, see `RegisterSaasMode`) and outside the default tenant.
9
+ * Outside SaaS mode the default tenant's owners are the platform owners, so
10
+ * this copies `TenantMember.isTenantOwner` on the default tenant onto
11
+ * `users.owner`. It does nothing in SaaS mode (where `users.owner` reflects
12
+ * platform ownership separately, see `RegisterSaasMode`) and outside the
13
+ * default tenant.
13
14
  *
14
15
  * @internal
15
16
  */
@@ -75,10 +75,11 @@ async function applyAdmittedTenantOwnership(userModel, userId, tenantId, patch)
75
75
  }
76
76
  }
77
77
  /**
78
- * Compatibility shim: in non-SaaS mode, the legacy `users.owner` boolean is
79
- * kept in sync with `TenantMember.isTenantOwner` on the default tenant. This
80
- * is a no-op in SaaS mode (where `users.owner` reflects platform ownership
81
- * separately, see `RegisterSaasMode`) and outside the default tenant.
78
+ * Outside SaaS mode the default tenant's owners are the platform owners, so
79
+ * this copies `TenantMember.isTenantOwner` on the default tenant onto
80
+ * `users.owner`. It does nothing in SaaS mode (where `users.owner` reflects
81
+ * platform ownership separately, see `RegisterSaasMode`) and outside the
82
+ * default tenant.
82
83
  *
83
84
  * @internal
84
85
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-ownership.js","sourceRoot":"","sources":["../../src/internal/tenant-ownership.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tenant-ownership.js","sourceRoot":"","sources":["../../src/internal/tenant-ownership.ts"],"names":[],"mappings":"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"}
@@ -25,8 +25,9 @@ export declare function CollectInviteExtensionPayloads(body: unknown): InviteExt
25
25
  * Hand each extension the payload its invitation carried, now that the invitee
26
26
  * is a member of the tenant.
27
27
  *
28
- * Legacy delivery logs failures. Durable delivery requests retryOnFailure:
29
- * invalid stored payloads and failed handlers then keep the decision pending.
28
+ * Without retryOnFailure, a failure is logged and the call resolves. Durable
29
+ * delivery requests retryOnFailure: invalid stored payloads and failed handlers
30
+ * then keep the decision pending.
30
31
  *
31
32
  * @internal
32
33
  */
@@ -40,8 +40,9 @@ body) {
40
40
  * Hand each extension the payload its invitation carried, now that the invitee
41
41
  * is a member of the tenant.
42
42
  *
43
- * Legacy delivery logs failures. Durable delivery requests retryOnFailure:
44
- * invalid stored payloads and failed handlers then keep the decision pending.
43
+ * Without retryOnFailure, a failure is logged and the call resolves. Durable
44
+ * delivery requests retryOnFailure: invalid stored payloads and failed handlers
45
+ * then keep the decision pending.
45
46
  *
46
47
  * @internal
47
48
  */
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../src/invite-extensions/internal/delivery.ts"],"names":[],"mappings":";;AAkCA,wEAcC;AAWD,0DAmBC;AAYD,0DAoBC;AA7GD,qDAK0B;AAC1B,yCAA6E;AAQ7E;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,8BAA8B;AAC5C,sMAAsM;AACtM,IAAa;IAEb,MAAM,MAAM,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAA,wBAAO,EAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxC,IAAA,iCAAgB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,uBAAuB,CAC3C,QAAoD,EACpD,MAAoB,EACpB,OAA+B,EAC/B,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,4BAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,oCAAyB,EAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC,MAAM;QAC3C,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,uBAAuB,CAC3C,QAAoD,EACpD,OAA6B,EAC7B,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,SAAS;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAClB,IAAA,4BAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,EAC3C,OAAO,CACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,oCAAyB,EAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC,MAAM;QAC3C,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../src/invite-extensions/internal/delivery.ts"],"names":[],"mappings":";;AAkCA,wEAcC;AAYD,0DAmBC;AAYD,0DAoBC;AA9GD,qDAK0B;AAC1B,yCAA6E;AAQ7E;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,8BAA8B;AAC5C,sMAAsM;AACtM,IAAa;IAEb,MAAM,MAAM,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAA,wBAAO,EAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxC,IAAA,iCAAgB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,uBAAuB,CAC3C,QAAoD,EACpD,MAAoB,EACpB,OAA+B,EAC/B,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,4BAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,oCAAyB,EAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC,MAAM;QAC3C,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,uBAAuB,CAC3C,QAAoD,EACpD,OAA6B,EAC7B,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,SAAS;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAClB,IAAA,4BAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,EAC3C,OAAO,CACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,oCAAyB,EAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC,MAAM;QAC3C,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;AAChE,CAAC"}
@@ -6,7 +6,11 @@ export type ResolveInviteInput = Omit<InviteDecision, "extensionKeys">;
6
6
  export declare function loadInviteForAction(tenantId: string, inviteId: string): Promise<UserInvite | undefined>;
7
7
  /** Rejects actions on a replacement until its creating hooks complete. */
8
8
  export declare function assertInviteReady(tenantId: string, invite: UserInvite): Promise<void>;
9
- /** Chooses one permanent outcome; all competing lifecycle paths must use this before effects. */
9
+ /**
10
+ * Chooses one permanent outcome; all competing lifecycle paths must use this before effects.
11
+ * A new replacement is refused with HTTP 409 unless its invite is the only invite of its email,
12
+ * so a fresh invite that lost a concurrent creation is withdrawn, never replaced.
13
+ */
10
14
  export declare function decideInvite(input: ResolveInviteInput): Promise<InviteResolution>;
11
15
  /** Replays durable effects. Contributor callbacks must deduplicate by deliveryId; failures retain the snapshot. */
12
16
  export declare function completeInviteResolution(resolution: InviteResolution): Promise<void>;
@@ -4,7 +4,6 @@ exports.loadInviteForAction = loadInviteForAction;
4
4
  exports.assertInviteReady = assertInviteReady;
5
5
  exports.decideInvite = decideInvite;
6
6
  exports.completeInviteResolution = completeInviteResolution;
7
- const node_util_1 = require("node:util");
8
7
  const interface_api_util_1 = require("@antelopejs/interface-api-util");
9
8
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
10
9
  const inviteResolutions_model_1 = require("./db/internal/inviteResolutions.model");
@@ -13,6 +12,7 @@ const registry_1 = require("./invite-extensions/internal/registry");
13
12
  const tenant_members_1 = require("./tenant-members");
14
13
  const invite_resolution_1 = require("./internal/invite-resolution");
15
14
  const invite_membership_1 = require("./internal/invite-membership");
15
+ const invite_content_1 = require("./internal/invite-content");
16
16
  const HTTP_CONFLICT = 409;
17
17
  /** Loads the exact incarnation or its durable snapshot so failed actions can resume. */
18
18
  async function loadInviteForAction(tenantId, inviteId) {
@@ -29,35 +29,16 @@ async function assertInviteReady(tenantId, invite) {
29
29
  const parent = await (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, tenantId).get(invite.creationResolutionId);
30
30
  (0, interface_api_util_1.assert)(parent?.completed, HTTP_CONFLICT, "Invitation creation is still pending");
31
31
  }
32
- /**
33
- * The replacement's content as plain data.
34
- *
35
- * `roles_ids` and `extensions` reach this comparison as per-context views when
36
- * the caller lives in another module, and `isDeepStrictEqual` refuses two views
37
- * holding the same values — which would report a faithful retry as a conflict.
38
- */
39
- function replacementContent(invite) {
40
- if (!invite)
41
- return null;
42
- return JSON.stringify([
43
- invite.email,
44
- invite.firstname,
45
- invite.lastname,
46
- invite.language,
47
- invite.roles_ids,
48
- invite.asTenantOwner,
49
- invite.extensions,
50
- ]);
51
- }
52
- function isSameContent(left, right) {
53
- return (0, node_util_1.isDeepStrictEqual)(left === null ? null : JSON.parse(left), right === null ? null : JSON.parse(right));
54
- }
55
32
  function assertSameDecision(resolution, input) {
56
33
  (0, interface_api_util_1.assert)(resolution.reason === input.reason &&
57
34
  resolution.userId === (input.userId ?? null), HTTP_CONFLICT, "Invitation already has a different terminal decision");
58
- (0, interface_api_util_1.assert)(isSameContent(replacementContent(resolution.replacement), replacementContent(input.replacement)), HTTP_CONFLICT, "Invitation already has a different replacement");
35
+ (0, interface_api_util_1.assert)((0, invite_content_1.isSameInviteContent)(resolution.replacement, input.replacement), HTTP_CONFLICT, "Invitation already has a different replacement");
59
36
  }
60
- /** Chooses one permanent outcome; all competing lifecycle paths must use this before effects. */
37
+ /**
38
+ * Chooses one permanent outcome; all competing lifecycle paths must use this before effects.
39
+ * A new replacement is refused with HTTP 409 unless its invite is the only invite of its email,
40
+ * so a fresh invite that lost a concurrent creation is withdrawn, never replaced.
41
+ */
61
42
  async function decideInvite(input) {
62
43
  await assertInviteReady(input.tenantId, input.invite);
63
44
  const model = (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, input.tenantId);
@@ -65,6 +46,9 @@ async function decideInvite(input) {
65
46
  (0, interface_api_util_1.assert)(input.reason !== "accepted" ||
66
47
  existing ||
67
48
  new Date(input.invite.expiresAt) > new Date(), HTTP_CONFLICT, "Invitation expired before acceptance");
49
+ (0, interface_api_util_1.assert)(!input.replacement ||
50
+ existing ||
51
+ (await (0, interface_database_decorators_1.GetModel)(user_invites_model_1.UserInviteModel, input.tenantId).isOnlyInviteOfEmail(input.invite)), HTTP_CONFLICT, "Invitation for this email was created concurrently");
68
52
  const extensionKeys = [
69
53
  ...new Set([
70
54
  ...Object.keys(input.invite.extensions ?? {}),
@@ -1 +1 @@
1
- {"version":3,"file":"invite-resolution.js","sourceRoot":"","sources":["../src/invite-resolution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invite-resolution.js","sourceRoot":"","sources":["../src/invite-resolution.ts"],"names":[],"mappings":"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"}
package/dist/invites.d.ts CHANGED
@@ -89,5 +89,10 @@ export interface CreateUserInviteTokenResult {
89
89
  * Low-level: create a `user_invites` row + token for a tenant. Replaces any
90
90
  * existing invite for the same email (within the tenant). Fires
91
91
  * INVITE_DELETED / INVITE_BEING_CREATED / INVITE_CREATED hooks.
92
+ *
93
+ * Concurrent calls that all find no invite for the email keep one, also when
94
+ * another call replaces the invite in between: a call that loses returns the
95
+ * kept invite when it carries the same content, and fails with HTTP 409 when
96
+ * it does not.
92
97
  */
93
98
  export declare function createUserInviteToken(options: CreateUserInviteTokenOptions): Promise<CreateUserInviteTokenResult>;
package/dist/invites.js CHANGED
@@ -7,9 +7,12 @@ exports.INVITE_EXPIRY_DAYS = exports.INVITE_TOKEN_LENGTH = exports.inviteeDispla
7
7
  exports.inviteUserToTenant = inviteUserToTenant;
8
8
  exports.createUserInviteToken = createUserInviteToken;
9
9
  const node_crypto_1 = require("node:crypto");
10
+ const interface_api_util_1 = require("@antelopejs/interface-api-util");
10
11
  const logging_1 = require("@antelopejs/interface-core/logging");
12
+ const interface_database_1 = require("@antelopejs/interface-database");
11
13
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
12
14
  const db_1 = require("./db");
15
+ const inviteResolutions_model_1 = require("./db/internal/inviteResolutions.model");
13
16
  const db_2 = require("./auth/db");
14
17
  const randomstring_1 = __importDefault(require("randomstring"));
15
18
  const fire_and_forget_1 = require("./utils/fire-and-forget");
@@ -17,6 +20,7 @@ const time_1 = require("./utils/internal/time");
17
20
  const hooks_1 = require("./hooks");
18
21
  const delivery_1 = require("./invite-extensions/internal/delivery");
19
22
  const invite_resolution_1 = require("./internal/invite-resolution");
23
+ const invite_content_1 = require("./internal/invite-content");
20
24
  const invite_resolution_2 = require("./invite-resolution");
21
25
  const tenant_members_1 = require("./tenant-members");
22
26
  const tenant_ownership_1 = require("./internal/tenant-ownership");
@@ -26,6 +30,7 @@ var invitee_display_name_1 = require("./invitee-display-name");
26
30
  Object.defineProperty(exports, "inviteeDisplayName", { enumerable: true, get: function () { return invitee_display_name_1.inviteeDisplayName; } });
27
31
  exports.INVITE_TOKEN_LENGTH = 64;
28
32
  exports.INVITE_EXPIRY_DAYS = 7;
33
+ const HTTP_CONFLICT = 409;
29
34
  /**
30
35
  * Invite a user (existing or not) to a tenant.
31
36
  *
@@ -114,6 +119,11 @@ async function deliverToExistingMember(tenantId, email, userId, extensions) {
114
119
  * Low-level: create a `user_invites` row + token for a tenant. Replaces any
115
120
  * existing invite for the same email (within the tenant). Fires
116
121
  * INVITE_DELETED / INVITE_BEING_CREATED / INVITE_CREATED hooks.
122
+ *
123
+ * Concurrent calls that all find no invite for the email keep one, also when
124
+ * another call replaces the invite in between: a call that loses returns the
125
+ * kept invite when it carries the same content, and fails with HTTP 409 when
126
+ * it does not.
117
127
  */
118
128
  async function createUserInviteToken(options) {
119
129
  return (0, tenant_members_1.changeTenantMembers)(options.tenantId, async () => ({
@@ -132,7 +142,14 @@ async function createAdmittedInviteToken(options) {
132
142
  invite: existingInvite,
133
143
  reason: options.replacementReason ?? "replaced",
134
144
  replacement,
145
+ }).catch(async (error) => {
146
+ if (options.replacesInvite ||
147
+ !(await completeCancellationOfRead(tenantId, existingInvite)))
148
+ throw error;
149
+ return undefined;
135
150
  });
151
+ if (!resolution)
152
+ return createAdmittedInviteToken(options);
136
153
  await (0, invite_resolution_1.completeAdmittedInviteResolution)(resolution);
137
154
  if (!resolution.replacement)
138
155
  throw new Error("Replacement snapshot missing");
@@ -147,7 +164,17 @@ async function createAdmittedInviteToken(options) {
147
164
  asTenantOwner,
148
165
  roleIds,
149
166
  });
150
- await userInviteModel.insert(replacement);
167
+ try {
168
+ await userInviteModel.insert(replacement);
169
+ }
170
+ catch (error) {
171
+ if (!(0, interface_database_1.IsDuplicateKeyError)(error))
172
+ throw error;
173
+ return yieldToWinner(await userInviteModel.getByEmail(email), replacement);
174
+ }
175
+ const rival = await userInviteModel.getOtherByEmail(email, replacement._id);
176
+ if (rival)
177
+ return withdrawFreshInvite(tenantId, replacement, rival);
151
178
  await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.INVITE_CREATED, {
152
179
  tenantId,
153
180
  inviteId: replacement._id,
@@ -158,6 +185,35 @@ async function createAdmittedInviteToken(options) {
158
185
  });
159
186
  return { inviteId: replacement._id, token: replacement.token };
160
187
  }
188
+ /**
189
+ * Removes the invite a creation read when a completed cancellation already
190
+ * retired it, so the creation can read the email again.
191
+ *
192
+ * @returns Whether the invite's decision was such a cancellation
193
+ */
194
+ async function completeCancellationOfRead(tenantId, invite) {
195
+ const held = await (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, tenantId).getForInvite(tenantId, invite._id);
196
+ if (held?.reason !== "cancelled" || held.replacement || !held.completed)
197
+ return false;
198
+ await (0, invite_resolution_1.completeAdmittedInviteResolution)(held);
199
+ return true;
200
+ }
201
+ /**
202
+ * Withdraws a fresh invite that found a rival, through its decision: a
203
+ * replacement decided on it first is kept instead, and its decider completes it.
204
+ */
205
+ async function withdrawFreshInvite(tenantId, fresh, rival) {
206
+ const decisions = (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, tenantId);
207
+ const { resolution, claimed } = await decisions.withdraw(tenantId, fresh);
208
+ if (!claimed)
209
+ return yieldToWinner(resolution.replacement ?? rival, fresh);
210
+ await (0, interface_database_decorators_1.GetModel)(db_1.UserInviteModel, tenantId).delete(fresh._id);
211
+ return yieldToWinner(rival, fresh);
212
+ }
213
+ function yieldToWinner(winner, lost) {
214
+ (0, interface_api_util_1.assert)(winner && (0, invite_content_1.isSameInviteContent)(winner, lost), HTTP_CONFLICT, "Invitation for this email was created concurrently with other content");
215
+ return { inviteId: winner._id, token: winner.token };
216
+ }
161
217
  function buildInviteSnapshot(options) {
162
218
  return db_1.UserInviteModel.fromPlainData({
163
219
  _id: (0, node_crypto_1.randomUUID)(),
@@ -172,6 +228,7 @@ function buildInviteSnapshot(options) {
172
228
  expiresAt: new Date(Date.now() + exports.INVITE_EXPIRY_DAYS * time_1.MILLISECONDS_PER_DAY),
173
229
  invitedBy: options.invitedBy ?? null,
174
230
  extensions: options.extensions ?? null,
231
+ creationResolutionId: "",
175
232
  });
176
233
  }
177
234
  //# sourceMappingURL=invites.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"invites.js","sourceRoot":"","sources":["../src/invites.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invites.js","sourceRoot":"","sources":["../src/invites.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,6 @@ import type { DeliveryOptions, NotificationCategoryInfo, NotificationData, Notif
4
4
  * @internal
5
5
  */
6
6
  export declare namespace internal {
7
- const SupportsIdempotency: () => Promise<boolean>;
8
7
  const RegisterNotificationCategory: RegisteringProxy<(info: NotificationCategoryInfo) => void>;
9
8
  const RegisterNotificationSubject: RegisteringProxy<(info: NotificationSubjectInfo) => void>;
10
9
  const SendToUser: (userId: string, data: NotificationData, groupId?: string | undefined, idempotencyKey?: string | undefined, delivery?: DeliveryOptions | undefined) => Promise<void>;
@@ -7,7 +7,6 @@ const interface_core_1 = require("@antelopejs/interface-core");
7
7
  */
8
8
  var internal;
9
9
  (function (internal) {
10
- internal.SupportsIdempotency = (0, interface_core_1.InterfaceFunction)();
11
10
  internal.RegisterNotificationCategory = new interface_core_1.RegisteringProxy();
12
11
  internal.RegisterNotificationSubject = new interface_core_1.RegisteringProxy();
13
12
  internal.SendToUser = (0, interface_core_1.InterfaceFunction)();
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/notifications/internal.ts"],"names":[],"mappings":";;;AAAA,+DAGoC;AAUpC;;GAEG;AACH,IAAiB,QAAQ,CAmDxB;AAnDD,WAAiB,QAAQ;IACV,4BAAmB,GAC9B,IAAA,kCAAiB,GAA0B,CAAC;IAEjC,qCAA4B,GAAG,IAAI,iCAAgB,EAE7D,CAAC;IACS,oCAA2B,GAAG,IAAI,iCAAgB,EAE5D,CAAC;IAES,mBAAU,GACrB,IAAA,kCAAiB,GAQd,CAAC;IAEO,oBAAW,GACtB,IAAA,kCAAiB,GAQd,CAAC;IAEO,oBAAW,GACtB,IAAA,kCAAiB,GAMd,CAAC;IAEO,kBAAS,GACpB,IAAA,kCAAiB,GAOd,CAAC;AACR,CAAC,EAnDgB,QAAQ,wBAAR,QAAQ,QAmDxB"}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/notifications/internal.ts"],"names":[],"mappings":";;;AAAA,+DAGoC;AAUpC;;GAEG;AACH,IAAiB,QAAQ,CAgDxB;AAhDD,WAAiB,QAAQ;IACV,qCAA4B,GAAG,IAAI,iCAAgB,EAE7D,CAAC;IACS,oCAA2B,GAAG,IAAI,iCAAgB,EAE5D,CAAC;IAES,mBAAU,GACrB,IAAA,kCAAiB,GAQd,CAAC;IAEO,oBAAW,GACtB,IAAA,kCAAiB,GAQd,CAAC;IAEO,oBAAW,GACtB,IAAA,kCAAiB,GAMd,CAAC;IAEO,kBAAS,GACpB,IAAA,kCAAiB,GAOd,CAAC;AACR,CAAC,EAhDgB,QAAQ,wBAAR,QAAQ,QAgDxB"}
@@ -9,10 +9,9 @@ export declare class SendableNotification {
9
9
  */
10
10
  toUser(userId: string, options?: SendOptions): Promise<void>;
11
11
  toUsers(userIds: string[], options?: SendOptions): Promise<void>;
12
- /** Explicit capability for durable outbox delivery; older DMS versions do not expose this method. */
12
+ /** Sends a durable event once per recipient under `idempotencyKey`, including after dismissal. */
13
13
  toUsersIdempotently(userIds: string[], idempotencyKey: string, options?: SendOptions): Promise<void>;
14
14
  /** Sends to the holders of any of `roleIds`, in `options.tenantId` only when set. */
15
15
  toRoles(roleIds: string[], options?: RoleSendOptions): Promise<void>;
16
16
  broadcast(options?: SendOptions): Promise<void>;
17
- private requireIdempotencySupport;
18
17
  }