@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.
- package/CHANGELOG.md +231 -2
- package/README.md +9 -9
- package/dist/auth/db/models/sessions.model.d.ts +3 -3
- package/dist/auth/db/models/userExternalIdentities.model.d.ts +3 -3
- package/dist/auth/db/models/users.model.d.ts +3 -3
- package/dist/auth/db/tables/users.table.d.ts +3 -3
- package/dist/base/activity-feed.d.ts +2 -2
- package/dist/base/block-registry/types.d.ts +1 -1
- package/dist/base/chart-schemas.d.ts +70 -70
- package/dist/base/chart.d.ts +1 -1
- package/dist/base/data-types/default/choices.d.ts +1 -1
- package/dist/base/data-types/default/choices.js +3 -6
- package/dist/base/data-types/default/choices.js.map +1 -1
- package/dist/base/data-types/default/inputs.d.ts +1 -1
- package/dist/base/data-types/default/numbers.d.ts +2 -1
- package/dist/base/data-types/default/numbers.js +4 -3
- package/dist/base/data-types/default/numbers.js.map +1 -1
- package/dist/base/data-types/default/relations.d.ts +0 -6
- package/dist/base/data-types/default/relations.js +0 -1
- package/dist/base/data-types/default/relations.js.map +1 -1
- package/dist/base/data-types/default-types.d.ts +0 -1
- package/dist/base/data-types/default-types.js +0 -2
- package/dist/base/data-types/default-types.js.map +1 -1
- package/dist/base/data-types/index.js +0 -1
- package/dist/base/data-types/index.js.map +1 -1
- package/dist/base/data-types/internal/relation-endpoints.js +5 -3
- package/dist/base/data-types/internal/relation-endpoints.js.map +1 -1
- package/dist/base/data-types/internal/table-view-meta-slot.d.ts +17 -0
- package/dist/base/data-types/internal/table-view-meta-slot.js +25 -0
- package/dist/base/data-types/internal/table-view-meta-slot.js.map +1 -0
- package/dist/base/empty-state.d.ts +1 -1
- package/dist/base/export-jobs.d.ts +47 -19
- package/dist/base/export-jobs.js +39 -4
- package/dist/base/export-jobs.js.map +1 -1
- package/dist/base/form-schema.d.ts +0 -1
- package/dist/base/form-schema.js +12 -12
- package/dist/base/form-schema.js.map +1 -1
- package/dist/base/grid.js +1 -1
- package/dist/base/grid.js.map +1 -1
- package/dist/base/guard.d.ts +4 -4
- package/dist/base/guard.js +1 -1
- package/dist/base/guard.js.map +1 -1
- package/dist/base/helpers/file-refs.js +4 -6
- package/dist/base/helpers/file-refs.js.map +1 -1
- package/dist/base/internal/chart.d.ts +1 -1
- package/dist/base/internal/chart.js +1 -1
- package/dist/base/internal/chart.js.map +1 -1
- package/dist/base/internal/export-jobs.d.ts +11 -0
- package/dist/base/internal/export-jobs.js +11 -0
- package/dist/base/internal/export-jobs.js.map +1 -1
- package/dist/base/internal/form-block-schema.d.ts +1 -1
- package/dist/base/internal/form-block-schema.js +1 -1
- package/dist/base/internal/form-block-schema.js.map +1 -1
- package/dist/base/key-value-list.d.ts +6 -6
- package/dist/base/meter.d.ts +1 -1
- package/dist/base/placeholder.js +1 -1
- package/dist/base/placeholder.js.map +1 -1
- package/dist/base/searchable.d.ts +3 -3
- package/dist/base/searchable.js.map +1 -1
- package/dist/base/stack.js +1 -1
- package/dist/base/stack.js.map +1 -1
- package/dist/base/tab.js +1 -1
- package/dist/base/tab.js.map +1 -1
- package/dist/base/table-view/data-functions.d.ts +10 -11
- package/dist/base/table-view/data-functions.js.map +1 -1
- package/dist/base/table-view/factory.js +2 -0
- package/dist/base/table-view/factory.js.map +1 -1
- package/dist/base/table-view/internal/archive-filter.d.ts +21 -0
- package/dist/base/table-view/internal/archive-filter.js +48 -0
- package/dist/base/table-view/internal/archive-filter.js.map +1 -0
- package/dist/base/table-view/internal/auth.d.ts +2 -2
- package/dist/base/table-view/internal/auth.js +1 -3
- package/dist/base/table-view/internal/auth.js.map +1 -1
- package/dist/base/table-view/internal/column-conditions.js.map +1 -1
- package/dist/base/table-view/internal/data-functions.d.ts +2 -2
- package/dist/base/table-view/internal/factory-lifecycle-created.js +3 -2
- package/dist/base/table-view/internal/factory-lifecycle-created.js.map +1 -1
- package/dist/base/table-view/internal/footer.js +21 -13
- package/dist/base/table-view/internal/footer.js.map +1 -1
- package/dist/base/table-view/internal/guards.d.ts +1 -1
- package/dist/base/table-view/internal/guards.js +11 -8
- package/dist/base/table-view/internal/guards.js.map +1 -1
- package/dist/base/table-view/internal/meta-helpers.js +3 -2
- package/dist/base/table-view/internal/meta-helpers.js.map +1 -1
- package/dist/base/table-view/internal/nav-badges.js +1 -3
- package/dist/base/table-view/internal/nav-badges.js.map +1 -1
- package/dist/base/table-view/internal/option-views.d.ts +7 -4
- package/dist/base/table-view/internal/row-actions-schema.d.ts +6 -6
- package/dist/base/table-view/meta.d.ts +5 -5
- package/dist/base/table-view/meta.js +6 -2
- package/dist/base/table-view/meta.js.map +1 -1
- package/dist/base/table-view/routes.d.ts +39 -12
- package/dist/base/table-view/routes.js +0 -1
- package/dist/base/table-view/routes.js.map +1 -1
- package/dist/base/table-view/schema.d.ts +127 -127
- package/dist/base/top-list-card.d.ts +4 -4
- package/dist/component-options/data-type.d.ts +2 -1
- package/dist/component-options/data-type.js +1 -1
- package/dist/component-options/data-type.js.map +1 -1
- package/dist/component-slots.js +1 -1
- package/dist/component-slots.js.map +1 -1
- package/dist/connection-access.d.ts +46 -0
- package/dist/connection-access.js +73 -0
- package/dist/connection-access.js.map +1 -0
- package/dist/data-controllers/members.d.ts +15 -2
- package/dist/data-controllers/roles.d.ts +15 -2
- package/dist/db/internal/exportJobs.model.d.ts +3 -3
- package/dist/db/internal/inviteResolutions.model.d.ts +16 -3
- package/dist/db/internal/inviteResolutions.model.js +38 -0
- package/dist/db/internal/inviteResolutions.model.js.map +1 -1
- package/dist/db/internal/tenantLifecycle.model.d.ts +4 -4
- package/dist/db/internal/tenantLifecycle.model.js +2 -3
- package/dist/db/internal/tenantLifecycle.model.js.map +1 -1
- package/dist/db/models/roles.model.d.ts +3 -3
- package/dist/db/models/tenantMembers.model.d.ts +3 -3
- package/dist/db/models/tenants.model.d.ts +3 -3
- package/dist/db/models/user_invites.model.d.ts +18 -3
- package/dist/db/models/user_invites.model.js +28 -0
- package/dist/db/models/user_invites.model.js.map +1 -1
- package/dist/db/tables/user_invites.table.d.ts +6 -1
- package/dist/db/tables/user_invites.table.js +3 -0
- package/dist/db/tables/user_invites.table.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/component-slots.js +1 -1
- package/dist/internal/component-slots.js.map +1 -1
- package/dist/internal/invite-content.d.ts +8 -0
- package/dist/internal/invite-content.js +36 -0
- package/dist/internal/invite-content.js.map +1 -0
- package/dist/internal/invite-resolution.js +5 -2
- package/dist/internal/invite-resolution.js.map +1 -1
- package/dist/internal/tenant-ownership.d.ts +5 -4
- package/dist/internal/tenant-ownership.js +5 -4
- package/dist/internal/tenant-ownership.js.map +1 -1
- package/dist/invite-extensions/internal/delivery.d.ts +3 -2
- package/dist/invite-extensions/internal/delivery.js +3 -2
- package/dist/invite-extensions/internal/delivery.js.map +1 -1
- package/dist/invite-resolution.d.ts +5 -1
- package/dist/invite-resolution.js +10 -26
- package/dist/invite-resolution.js.map +1 -1
- package/dist/invites.d.ts +5 -0
- package/dist/invites.js +58 -1
- package/dist/invites.js.map +1 -1
- package/dist/notifications/internal.d.ts +0 -1
- package/dist/notifications/internal.js +0 -1
- package/dist/notifications/internal.js.map +1 -1
- package/dist/notifications/sendable.d.ts +1 -2
- package/dist/notifications/sendable.js +1 -12
- package/dist/notifications/sendable.js.map +1 -1
- package/dist/notifications/types.d.ts +1 -4
- package/dist/page/categories.d.ts +6 -0
- package/dist/page/categories.js +10 -3
- package/dist/page/categories.js.map +1 -1
- package/dist/page/controllers.d.ts +6 -9
- package/dist/page/controllers.js +5 -6
- package/dist/page/controllers.js.map +1 -1
- package/dist/page/internal/categories.js +43 -32
- package/dist/page/internal/categories.js.map +1 -1
- package/dist/page/internal/category-resolution.d.ts +31 -0
- package/dist/page/internal/category-resolution.js +63 -0
- package/dist/page/internal/category-resolution.js.map +1 -0
- package/dist/page/internal/metadata-extension-contributions.js +1 -2
- package/dist/page/internal/metadata-extension-contributions.js.map +1 -1
- package/dist/page/internal/metadata-info.js +19 -7
- package/dist/page/internal/metadata-info.js.map +1 -1
- package/dist/page/internal/metadata-layout.d.ts +3 -2
- package/dist/page/internal/metadata-layout.js.map +1 -1
- package/dist/page/internal/metadata-lifecycle.js +1 -4
- package/dist/page/internal/metadata-lifecycle.js.map +1 -1
- package/dist/page/internal/metadata-publish.js +7 -6
- package/dist/page/internal/metadata-publish.js.map +1 -1
- package/dist/page/internal/metadata-registration.js +8 -6
- package/dist/page/internal/metadata-registration.js.map +1 -1
- package/dist/page/internal/page-controller.d.ts +18 -0
- package/dist/page/internal/page-controller.js +36 -0
- package/dist/page/internal/page-controller.js.map +1 -0
- package/dist/page/metadata.d.ts +3 -3
- package/dist/page/metadata.js +4 -2
- package/dist/page/metadata.js.map +1 -1
- package/dist/page/types.d.ts +8 -2
- package/dist/page.d.ts +1 -1
- package/dist/page.js +2 -1
- package/dist/page.js.map +1 -1
- package/dist/permissions.d.ts +2 -1
- package/dist/permissions.js +5 -2
- package/dist/permissions.js.map +1 -1
- package/dist/tenant-provisioning.js +1 -1
- package/dist/tenant-provisioning.js.map +1 -1
- package/dist/types.d.ts +7 -3
- package/docs/1.core/11.modules-and-dynamic-menus.md +3 -3
- package/docs/1.core/2.pages-and-modules.md +2 -1
- package/docs/1.core/4.permissions.md +2 -2
- package/docs/1.core/5.tenancy.md +1 -1
- package/docs/1.core/6.invites.md +3 -1
- package/docs/2.auth/2.authentication.md +1 -1
- package/docs/2.auth/3.tokens-and-sessions.md +1 -1
- package/docs/3.base/1.introduction.md +1 -1
- package/docs/3.base/14.table-events-and-helpers.md +1 -1
- package/docs/3.base/15.table-sources-and-gates.md +14 -2
- package/docs/3.base/3.forms.md +1 -1
- package/docs/3.base/4.tables.md +1 -1
- package/docs/3.base/5.charts-and-widgets.md +3 -3
- package/docs/3.base/8.data-types.md +1 -1
- package/docs/3.base/9.helpers.md +16 -5
- package/docs/4.notifications/3.sending.md +0 -11
- package/docs/index.md +1 -1
- 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
|
-
/**
|
|
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;
|
|
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.
|
|
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,+
|
|
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":";;;AA4IA,sDAOC;AAnJD,gEAA6D;AAG7D,6DAAwD;AAExD;;;;;;;;;;;;GAYG;AACU,QAAA,kBAAkB,GAAG,QAAQ,CAAC;AAE3C;;;;GAIG;AACH,MAAM,wBAAwB,GAAG,
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* separately, see `RegisterSaasMode`) and outside the
|
|
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
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* separately, see `RegisterSaasMode`) and outside the
|
|
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":";;AAoDA,oEA6BC;
|
|
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
|
-
*
|
|
29
|
-
* invalid stored payloads and failed handlers
|
|
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
|
-
*
|
|
44
|
-
* invalid stored payloads and failed handlers
|
|
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;
|
|
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
|
-
/**
|
|
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)(
|
|
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
|
-
/**
|
|
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":";;AAiBA,kDAWC;AAGD,8CAaC;
|
|
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
|
-
|
|
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
|
package/dist/invites.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invites.js","sourceRoot":"","sources":["../src/invites.ts"],"names":[],"mappings":";;;;;;
|
|
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,
|
|
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
|
-
/**
|
|
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
|
}
|