@antelopejs/interface-dms 0.3.4 → 0.3.6
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 +43 -0
- package/README.md +2 -2
- package/dist/attachments.d.ts +19 -10
- package/dist/attachments.js +15 -0
- package/dist/attachments.js.map +1 -1
- package/dist/auth/db/internal/sessions.model.d.ts +9 -0
- package/dist/auth/db/internal/sessions.model.js +31 -0
- package/dist/auth/db/internal/sessions.model.js.map +1 -0
- package/dist/auth/db/models/sessions.model.d.ts +16 -2
- package/dist/auth/db/models/sessions.model.js +33 -41
- package/dist/auth/db/models/sessions.model.js.map +1 -1
- package/dist/auth/db/models/userExternalIdentities.model.d.ts +11 -0
- package/dist/auth/db/models/userExternalIdentities.model.js +11 -0
- package/dist/auth/db/models/userExternalIdentities.model.js.map +1 -1
- package/dist/auth/db/models/users.model.d.ts +13 -0
- package/dist/auth/db/models/users.model.js +13 -0
- package/dist/auth/db/models/users.model.js.map +1 -1
- package/dist/auth/db/tables/sessions.table.d.ts +6 -1
- package/dist/auth/db/tables/sessions.table.js +0 -4
- package/dist/auth/db/tables/sessions.table.js.map +1 -1
- package/dist/auth/db/tables/userExternalIdentities.table.d.ts +24 -0
- package/dist/auth/db/tables/userExternalIdentities.table.js +13 -0
- package/dist/auth/db/tables/userExternalIdentities.table.js.map +1 -1
- package/dist/auth/db/tables/users.table.d.ts +60 -0
- package/dist/auth/db/tables/users.table.js +32 -0
- package/dist/auth/db/tables/users.table.js.map +1 -1
- package/dist/auth/index.d.ts +114 -10
- package/dist/auth/index.js +110 -17
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/internal/request-authenticators.d.ts +6 -0
- package/dist/auth/internal/request-authenticators.js +82 -0
- package/dist/auth/internal/request-authenticators.js.map +1 -0
- package/dist/auth/internal/request-principal.d.ts +10 -0
- package/dist/auth/internal/request-principal.js +27 -0
- package/dist/auth/internal/request-principal.js.map +1 -0
- package/dist/auth/internal/user-agent.d.ts +10 -0
- package/dist/auth/internal/user-agent.js +3 -0
- package/dist/auth/internal/user-agent.js.map +1 -0
- package/dist/auth/password.d.ts +19 -0
- package/dist/auth/password.js +23 -0
- package/dist/auth/password.js.map +1 -1
- package/dist/auth/request-authenticators.d.ts +4 -3
- package/dist/auth/request-authenticators.js +0 -77
- package/dist/auth/request-authenticators.js.map +1 -1
- package/dist/base/activity-feed.d.ts +210 -0
- package/dist/base/activity-feed.js +104 -0
- package/dist/base/activity-feed.js.map +1 -0
- package/dist/base/banner.d.ts +111 -0
- package/dist/base/banner.js +93 -0
- package/dist/base/banner.js.map +1 -0
- package/dist/base/block-registry/helpers.d.ts +26 -0
- package/dist/base/block-registry/helpers.js +27 -1
- package/dist/base/block-registry/helpers.js.map +1 -1
- package/dist/base/block-registry/internal/describe.d.ts +35 -0
- package/dist/base/block-registry/{describe.js → internal/describe.js} +50 -0
- package/dist/base/block-registry/internal/describe.js.map +1 -0
- package/dist/base/block-registry/internal/ui.d.ts +23 -0
- package/dist/base/block-registry/internal/ui.js +35 -0
- package/dist/base/block-registry/internal/ui.js.map +1 -0
- package/dist/base/block-registry/registry.d.ts +24 -0
- package/dist/base/block-registry/registry.js +30 -1
- package/dist/base/block-registry/registry.js.map +1 -1
- package/dist/base/block-registry/types.d.ts +149 -0
- package/dist/base/block-types.d.ts +22 -2
- package/dist/base/block-types.js +24 -2
- package/dist/base/block-types.js.map +1 -1
- package/dist/base/card.d.ts +100 -0
- package/dist/base/card.js +91 -0
- package/dist/base/card.js.map +1 -0
- package/dist/base/chart-card.d.ts +9 -2
- package/dist/base/chart-card.js +14 -1
- package/dist/base/chart-card.js.map +1 -1
- package/dist/base/chart-schemas.d.ts +127 -115
- package/dist/base/chart-schemas.js +18 -56
- package/dist/base/chart-schemas.js.map +1 -1
- package/dist/base/chart-type.d.ts +15 -0
- package/dist/base/chart-type.js +20 -0
- package/dist/base/chart-type.js.map +1 -0
- package/dist/base/chart.d.ts +31 -22
- package/dist/base/chart.js +27 -54
- package/dist/base/chart.js.map +1 -1
- package/dist/base/confirm-dialog.d.ts +6 -0
- package/dist/base/confirm-dialog.js +18 -0
- package/dist/base/confirm-dialog.js.map +1 -0
- package/dist/base/data-sources.d.ts +38 -0
- package/dist/base/data-sources.js +13 -0
- package/dist/base/data-sources.js.map +1 -1
- package/dist/base/data-types/compare-types.d.ts +0 -2
- package/dist/base/data-types/compare-types.js +18 -13
- package/dist/base/data-types/compare-types.js.map +1 -1
- package/dist/base/data-types/core.d.ts +55 -0
- package/dist/base/data-types/core.js +42 -0
- package/dist/base/data-types/core.js.map +1 -1
- package/dist/base/data-types/default-types.d.ts +241 -62
- package/dist/base/data-types/default-types.js +257 -135
- package/dist/base/data-types/default-types.js.map +1 -1
- package/dist/base/data-types/field-types.d.ts +164 -0
- package/dist/base/data-types/field-types.js +236 -0
- package/dist/base/data-types/field-types.js.map +1 -0
- package/dist/base/data-types/index.d.ts +1 -0
- package/dist/base/data-types/index.js +21 -0
- package/dist/base/data-types/index.js.map +1 -1
- package/dist/base/data-types/internal/compare-types.d.ts +3 -0
- package/dist/base/data-types/internal/compare-types.js +15 -0
- package/dist/base/data-types/internal/compare-types.js.map +1 -0
- package/dist/base/data-types/status-type.d.ts +2 -1
- package/dist/base/data-types/status-type.js +6 -0
- package/dist/base/data-types/status-type.js.map +1 -1
- package/dist/base/display.d.ts +124 -0
- package/dist/base/display.js +95 -0
- package/dist/base/display.js.map +1 -0
- package/dist/base/empty-state.d.ts +106 -0
- package/dist/base/empty-state.js +109 -0
- package/dist/base/empty-state.js.map +1 -0
- package/dist/base/export-jobs.d.ts +39 -1
- package/dist/base/export-jobs.js +12 -3
- package/dist/base/export-jobs.js.map +1 -1
- package/dist/base/form-block-schema.d.ts +345 -28
- package/dist/base/form-block-schema.js +83 -12
- package/dist/base/form-block-schema.js.map +1 -1
- package/dist/base/form-schema.d.ts +137 -22
- package/dist/base/form-schema.js +139 -42
- package/dist/base/form-schema.js.map +1 -1
- package/dist/base/form-types.d.ts +139 -4
- package/dist/base/form-types.js +7 -1
- package/dist/base/form-types.js.map +1 -1
- package/dist/base/form.js +7 -0
- package/dist/base/form.js.map +1 -1
- package/dist/base/grid.d.ts +57 -0
- package/dist/base/grid.js +43 -0
- package/dist/base/grid.js.map +1 -1
- package/dist/base/helpers/file-refs.js +5 -1
- package/dist/base/helpers/file-refs.js.map +1 -1
- package/dist/base/index.d.ts +11 -1
- package/dist/base/index.js +16 -1
- package/dist/base/index.js.map +1 -1
- package/dist/base/internal/button-availability.d.ts +17 -0
- package/dist/base/internal/button-availability.js +31 -0
- package/dist/base/internal/button-availability.js.map +1 -0
- package/dist/base/internal/chart-schemas.d.ts +6 -0
- package/dist/base/internal/chart-schemas.js +70 -0
- package/dist/base/internal/chart-schemas.js.map +1 -0
- package/dist/base/internal/chart.d.ts +22 -0
- package/dist/base/internal/chart.js +37 -0
- package/dist/base/internal/chart.js.map +1 -0
- package/dist/base/internal/confirm-dialog.d.ts +13 -0
- package/dist/base/internal/confirm-dialog.js +24 -0
- package/dist/base/internal/confirm-dialog.js.map +1 -0
- package/dist/base/internal/display.d.ts +13 -0
- package/dist/base/internal/display.js +18 -0
- package/dist/base/internal/display.js.map +1 -0
- package/dist/base/internal/export-jobs.d.ts +2 -0
- package/dist/base/internal/export-jobs.js +6 -0
- package/dist/base/internal/export-jobs.js.map +1 -0
- package/dist/base/internal/form-block-schema.d.ts +6 -0
- package/dist/base/internal/form-block-schema.js +10 -0
- package/dist/base/internal/form-block-schema.js.map +1 -0
- package/dist/base/internal/form-schema.d.ts +7 -0
- package/dist/base/internal/form-schema.js +26 -0
- package/dist/base/internal/form-schema.js.map +1 -0
- package/dist/base/internal/layouts.d.ts +39 -0
- package/dist/base/internal/layouts.js +3 -0
- package/dist/base/internal/layouts.js.map +1 -0
- package/dist/base/internal/query-response.d.ts +24 -0
- package/dist/base/internal/query-response.js +47 -0
- package/dist/base/internal/query-response.js.map +1 -0
- package/dist/base/internal/searchable.d.ts +6 -0
- package/dist/base/internal/searchable.js +15 -0
- package/dist/base/internal/searchable.js.map +1 -0
- package/dist/base/key-value-list.d.ts +160 -0
- package/dist/base/key-value-list.js +107 -0
- package/dist/base/key-value-list.js.map +1 -0
- package/dist/base/kpi-card.d.ts +12 -4
- package/dist/base/kpi-card.js +7 -0
- package/dist/base/kpi-card.js.map +1 -1
- package/dist/base/layouts.d.ts +35 -0
- package/dist/base/layouts.js +41 -7
- package/dist/base/layouts.js.map +1 -1
- package/dist/base/meter.d.ts +186 -0
- package/dist/base/meter.js +134 -0
- package/dist/base/meter.js.map +1 -0
- package/dist/base/nav-card-grid.d.ts +173 -0
- package/dist/base/nav-card-grid.js +89 -0
- package/dist/base/nav-card-grid.js.map +1 -0
- package/dist/base/period-selector.d.ts +20 -0
- package/dist/base/period-selector.js +23 -0
- package/dist/base/period-selector.js.map +1 -1
- package/dist/base/placeholder.d.ts +26 -0
- package/dist/base/placeholder.js +12 -0
- package/dist/base/placeholder.js.map +1 -1
- package/dist/base/query-response.d.ts +51 -1
- package/dist/base/query-response.js +43 -26
- package/dist/base/query-response.js.map +1 -1
- package/dist/base/resource-form-schema.d.ts +18 -0
- package/dist/base/resource-form-schema.js +20 -3
- package/dist/base/resource-form-schema.js.map +1 -1
- package/dist/base/searchable.d.ts +2 -0
- package/dist/base/searchable.js +4 -0
- package/dist/base/searchable.js.map +1 -1
- package/dist/base/section.d.ts +105 -0
- package/dist/base/section.js +123 -0
- package/dist/base/section.js.map +1 -0
- package/dist/base/stack.d.ts +113 -0
- package/dist/base/stack.js +58 -0
- package/dist/base/stack.js.map +1 -1
- package/dist/base/stat-group.d.ts +152 -0
- package/dist/base/stat-group.js +97 -0
- package/dist/base/stat-group.js.map +1 -0
- package/dist/base/tab.d.ts +25 -8
- package/dist/base/tab.js +11 -0
- package/dist/base/tab.js.map +1 -1
- package/dist/base/table-view/column-display.d.ts +195 -0
- package/dist/base/table-view/column-display.js +131 -0
- package/dist/base/table-view/column-display.js.map +1 -0
- package/dist/base/table-view/data-functions.d.ts +36 -14
- package/dist/base/table-view/data-functions.js +26 -1
- package/dist/base/table-view/data-functions.js.map +1 -1
- package/dist/base/table-view/factory-helpers.d.ts +0 -42
- package/dist/base/table-view/factory-helpers.js +1 -244
- package/dist/base/table-view/factory-helpers.js.map +1 -1
- package/dist/base/table-view/factory.d.ts +5 -1
- package/dist/base/table-view/factory.js +158 -202
- package/dist/base/table-view/factory.js.map +1 -1
- package/dist/base/table-view/internal/auth.d.ts +33 -0
- package/dist/base/table-view/{auth.js → internal/auth.js} +45 -6
- package/dist/base/table-view/internal/auth.js.map +1 -0
- package/dist/base/table-view/internal/column-display.d.ts +18 -0
- package/dist/base/table-view/internal/column-display.js +37 -0
- package/dist/base/table-view/internal/column-display.js.map +1 -0
- package/dist/base/table-view/internal/data-functions.d.ts +14 -0
- package/dist/base/table-view/internal/data-functions.js +3 -0
- package/dist/base/table-view/internal/data-functions.js.map +1 -0
- package/dist/base/table-view/internal/factory-helpers.d.ts +213 -0
- package/dist/base/table-view/internal/factory-helpers.js +477 -0
- package/dist/base/table-view/internal/factory-helpers.js.map +1 -0
- package/dist/base/table-view/{files.d.ts → internal/files.d.ts} +5 -0
- package/dist/base/table-view/{files.js → internal/files.js} +14 -4
- package/dist/base/table-view/internal/files.js.map +1 -0
- package/dist/base/table-view/internal/footer.d.ts +33 -0
- package/dist/base/table-view/internal/footer.js +112 -0
- package/dist/base/table-view/internal/footer.js.map +1 -0
- package/dist/base/table-view/{guards.d.ts → internal/guards.d.ts} +3 -0
- package/dist/base/table-view/internal/guards.js +134 -0
- package/dist/base/table-view/internal/guards.js.map +1 -0
- package/dist/base/table-view/internal/meta.d.ts +5 -0
- package/dist/base/table-view/internal/meta.js +13 -0
- package/dist/base/table-view/internal/meta.js.map +1 -0
- package/dist/base/table-view/internal/nav-badges.d.ts +9 -0
- package/dist/base/table-view/internal/nav-badges.js +79 -0
- package/dist/base/table-view/internal/nav-badges.js.map +1 -0
- package/dist/base/table-view/internal/options.d.ts +6 -0
- package/dist/base/table-view/internal/options.js +10 -0
- package/dist/base/table-view/internal/options.js.map +1 -0
- package/dist/base/table-view/internal/realtime-listeners.d.ts +4 -0
- package/dist/base/table-view/internal/realtime-listeners.js +7 -0
- package/dist/base/table-view/internal/realtime-listeners.js.map +1 -0
- package/dist/base/table-view/internal/realtime.d.ts +39 -0
- package/dist/base/table-view/internal/realtime.js +163 -0
- package/dist/base/table-view/internal/realtime.js.map +1 -0
- package/dist/base/table-view/internal/request-filter.d.ts +75 -0
- package/dist/base/table-view/internal/request-filter.js +154 -0
- package/dist/base/table-view/internal/request-filter.js.map +1 -0
- package/dist/base/table-view/internal/resource-form.d.ts +25 -0
- package/dist/base/table-view/internal/resource-form.js +91 -0
- package/dist/base/table-view/internal/resource-form.js.map +1 -0
- package/dist/base/table-view/{row-rules.d.ts → internal/row-rules.d.ts} +5 -2
- package/dist/base/table-view/{row-rules.js → internal/row-rules.js} +20 -19
- package/dist/base/table-view/internal/row-rules.js.map +1 -0
- package/dist/base/table-view/internal/tabs.d.ts +39 -0
- package/dist/base/table-view/internal/tabs.js +116 -0
- package/dist/base/table-view/internal/tabs.js.map +1 -0
- package/dist/base/table-view/internal/validation.d.ts +99 -0
- package/dist/base/table-view/internal/validation.js +297 -0
- package/dist/base/table-view/internal/validation.js.map +1 -0
- package/dist/base/table-view/internal/views.d.ts +14 -0
- package/dist/base/table-view/internal/views.js +42 -0
- package/dist/base/table-view/internal/views.js.map +1 -0
- package/dist/base/table-view/internal/writer.d.ts +39 -0
- package/dist/base/table-view/internal/writer.js +55 -0
- package/dist/base/table-view/internal/writer.js.map +1 -0
- package/dist/base/table-view/meta.d.ts +77 -4
- package/dist/base/table-view/meta.js +133 -13
- package/dist/base/table-view/meta.js.map +1 -1
- package/dist/base/table-view/options.d.ts +749 -28
- package/dist/base/table-view/options.js +9 -2
- package/dist/base/table-view/options.js.map +1 -1
- package/dist/base/table-view/realtime.d.ts +26 -17
- package/dist/base/table-view/realtime.js +29 -126
- package/dist/base/table-view/realtime.js.map +1 -1
- package/dist/base/table-view/resource-form.d.ts +11 -5
- package/dist/base/table-view/resource-form.js +15 -59
- package/dist/base/table-view/resource-form.js.map +1 -1
- package/dist/base/table-view/routes.d.ts +29 -0
- package/dist/base/table-view/routes.js +71 -6
- package/dist/base/table-view/routes.js.map +1 -1
- package/dist/base/table-view/schema.d.ts +483 -69
- package/dist/base/table-view/schema.js +163 -18
- package/dist/base/table-view/schema.js.map +1 -1
- package/dist/base/table-view/source.d.ts +62 -0
- package/dist/base/table-view/source.js +161 -0
- package/dist/base/table-view/source.js.map +1 -0
- package/dist/base/table-view/views.d.ts +20 -0
- package/dist/base/table-view/views.js +38 -0
- package/dist/base/table-view/views.js.map +1 -0
- package/dist/base/table-view/writer.d.ts +7 -0
- package/dist/base/table-view/writer.js +17 -0
- package/dist/base/table-view/writer.js.map +1 -0
- package/dist/base/table-view.d.ts +34 -6
- package/dist/base/table-view.js +42 -6
- package/dist/base/table-view.js.map +1 -1
- package/dist/base/tenant-export-archive.d.ts +21 -0
- package/dist/base/tenant-export-archive.js +11 -0
- package/dist/base/tenant-export-archive.js.map +1 -1
- package/dist/base/top-list-card.d.ts +35 -12
- package/dist/base/top-list-card.js +24 -0
- package/dist/base/top-list-card.js.map +1 -1
- package/dist/base/types/action-target.d.ts +36 -20
- package/dist/base/types/component-input.d.ts +3 -0
- package/dist/base/types/confirm-dialog.d.ts +69 -0
- package/dist/base/types/confirm-dialog.js +3 -0
- package/dist/base/types/confirm-dialog.js.map +1 -0
- package/dist/base/types/custom-button.d.ts +48 -2
- package/dist/base/types/enum-option.d.ts +9 -0
- package/dist/base/types/error.d.ts +9 -0
- package/dist/base/types/error.js +7 -1
- package/dist/base/types/error.js.map +1 -1
- package/dist/base/types/export-status.d.ts +3 -0
- package/dist/base/types/export-status.js +3 -0
- package/dist/base/types/export-status.js.map +1 -1
- package/dist/base/types/field-config.d.ts +3 -0
- package/dist/base/types/form-mode.d.ts +3 -0
- package/dist/base/types/form-mode.js +3 -0
- package/dist/base/types/form-mode.js.map +1 -1
- package/dist/base/types/form-values.d.ts +6 -0
- package/dist/base/types/guards.d.ts +37 -7
- package/dist/base/types/index.d.ts +2 -0
- package/dist/base/types/index.js +2 -0
- package/dist/base/types/index.js.map +1 -1
- package/dist/base/types/internal/action-target.d.ts +8 -0
- package/dist/base/types/internal/action-target.js +16 -0
- package/dist/base/types/internal/action-target.js.map +1 -0
- package/dist/base/types/json.d.ts +6 -0
- package/dist/base/types/orientation.d.ts +3 -0
- package/dist/base/types/orientation.js +3 -0
- package/dist/base/types/orientation.js.map +1 -1
- package/dist/base/types/readonly-behavior.d.ts +9 -0
- package/dist/base/types/readonly-behavior.js +3 -0
- package/dist/base/types/readonly-behavior.js.map +1 -1
- package/dist/base/types/row-action.d.ts +111 -0
- package/dist/base/types/size.d.ts +1 -0
- package/dist/base/types/size.js +4 -0
- package/dist/base/types/size.js.map +1 -1
- package/dist/base/types/tone.d.ts +14 -0
- package/dist/base/types/tone.js +24 -0
- package/dist/base/types/tone.js.map +1 -0
- package/dist/client-base-url.d.ts +8 -0
- package/dist/client-base-url.js +8 -0
- package/dist/client-base-url.js.map +1 -1
- package/dist/component-slots.d.ts +17 -2
- package/dist/component-slots.js +18 -66
- package/dist/component-slots.js.map +1 -1
- package/dist/component.d.ts +113 -0
- package/dist/component.js +84 -1
- package/dist/component.js.map +1 -1
- package/dist/data-controllers/members.d.ts +16 -1
- package/dist/data-controllers/members.js +87 -26
- package/dist/data-controllers/members.js.map +1 -1
- package/dist/data-controllers/roles.d.ts +1 -0
- package/dist/data-controllers/roles.js +3 -3
- package/dist/data-controllers/roles.js.map +1 -1
- package/dist/db/{models → internal}/exportJobs.model.d.ts +2 -0
- package/dist/db/{models → internal}/exportJobs.model.js +4 -1
- package/dist/db/internal/exportJobs.model.js.map +1 -0
- package/dist/db/internal/inviteResolutions.model.d.ts +34 -0
- package/dist/db/internal/inviteResolutions.model.js +80 -0
- package/dist/db/internal/inviteResolutions.model.js.map +1 -0
- package/dist/db/internal/table-names.d.ts +4 -0
- package/dist/db/internal/table-names.js +8 -0
- package/dist/db/internal/table-names.js.map +1 -0
- package/dist/db/{models → internal}/tenantLifecycle.model.d.ts +10 -1
- package/dist/db/{models → internal}/tenantLifecycle.model.js +10 -1
- package/dist/db/internal/tenantLifecycle.model.js.map +1 -0
- package/dist/db/{tables → internal}/tenantLifecycle.table.d.ts +6 -0
- package/dist/db/{tables → internal}/tenantLifecycle.table.js +6 -0
- package/dist/db/internal/tenantLifecycle.table.js.map +1 -0
- package/dist/db/models/index.d.ts +0 -2
- package/dist/db/models/index.js +0 -2
- package/dist/db/models/index.js.map +1 -1
- package/dist/db/models/inviteResolutions.model.d.ts +1 -25
- package/dist/db/models/inviteResolutions.model.js +0 -68
- package/dist/db/models/inviteResolutions.model.js.map +1 -1
- package/dist/db/models/roles.model.d.ts +6 -0
- package/dist/db/models/roles.model.js +6 -0
- package/dist/db/models/roles.model.js.map +1 -1
- package/dist/db/models/tenantMembers.model.js +1 -1
- package/dist/db/models/tenantMembers.model.js.map +1 -1
- package/dist/db/models/user_invites.model.d.ts +24 -0
- package/dist/db/models/user_invites.model.js +25 -1
- package/dist/db/models/user_invites.model.js.map +1 -1
- package/dist/db/tables/exportJobs.table.d.ts +5 -1
- package/dist/db/tables/exportJobs.table.js +3 -3
- package/dist/db/tables/exportJobs.table.js.map +1 -1
- package/dist/db/tables/index.d.ts +0 -1
- package/dist/db/tables/index.js +0 -1
- package/dist/db/tables/index.js.map +1 -1
- package/dist/db/tables/inviteResolutions.table.d.ts +1 -1
- package/dist/db/tables/inviteResolutions.table.js +4 -3
- package/dist/db/tables/inviteResolutions.table.js.map +1 -1
- package/dist/db/tables/roles.table.d.ts +2 -0
- package/dist/db/tables/roles.table.js +4 -0
- package/dist/db/tables/roles.table.js.map +1 -1
- package/dist/db/tables/tenantMembers.table.d.ts +1 -0
- package/dist/db/tables/user_invites.table.d.ts +11 -0
- package/dist/db/tables/user_invites.table.js +4 -0
- package/dist/db/tables/user_invites.table.js.map +1 -1
- package/dist/guards.d.ts +36 -0
- package/dist/guards.js +30 -1
- package/dist/guards.js.map +1 -1
- package/dist/hooks.d.ts +133 -1
- package/dist/hooks.js +87 -1
- package/dist/hooks.js.map +1 -1
- package/dist/html-render/index.d.ts +15 -0
- package/dist/html-render/index.js +15 -0
- package/dist/html-render/index.js.map +1 -1
- package/dist/html-render/types.d.ts +4 -0
- package/dist/index.d.ts +6 -7
- package/dist/index.js +12 -17
- package/dist/index.js.map +1 -1
- package/dist/internal/attachments.d.ts +16 -0
- package/dist/internal/attachments.js +3 -0
- package/dist/internal/attachments.js.map +1 -0
- package/dist/internal/component-slots.d.ts +27 -0
- package/dist/internal/component-slots.js +97 -0
- package/dist/internal/component-slots.js.map +1 -0
- package/dist/internal/invite-membership.d.ts +8 -0
- package/dist/{invite-membership.js → internal/invite-membership.js} +11 -5
- package/dist/internal/invite-membership.js.map +1 -0
- package/dist/internal/invite-replacement.d.ts +7 -0
- package/dist/{invite-replacement.js → internal/invite-replacement.js} +8 -3
- package/dist/internal/invite-replacement.js.map +1 -0
- package/dist/internal/invite-resolution.d.ts +3 -0
- package/dist/internal/invite-resolution.js +50 -0
- package/dist/internal/invite-resolution.js.map +1 -0
- package/dist/internal/invites.d.ts +31 -0
- package/dist/internal/invites.js +44 -0
- package/dist/internal/invites.js.map +1 -0
- package/dist/internal/permission-gate.d.ts +23 -0
- package/dist/internal/permission-gate.js +43 -0
- package/dist/internal/permission-gate.js.map +1 -0
- package/dist/internal/tenant-access.d.ts +28 -0
- package/dist/internal/tenant-access.js +28 -0
- package/dist/internal/tenant-access.js.map +1 -0
- package/dist/internal/tenant-ownership.d.ts +13 -0
- package/dist/internal/tenant-ownership.js +95 -0
- package/dist/internal/tenant-ownership.js.map +1 -0
- package/dist/internal/uploads.d.ts +19 -0
- package/dist/internal/uploads.js +3 -0
- package/dist/internal/uploads.js.map +1 -0
- package/dist/invite-extensions/availability.d.ts +28 -3
- package/dist/invite-extensions/availability.js +26 -23
- package/dist/invite-extensions/availability.js.map +1 -1
- package/dist/invite-extensions/internal/availability.d.ts +12 -0
- package/dist/invite-extensions/internal/availability.js +32 -0
- package/dist/invite-extensions/internal/availability.js.map +1 -0
- package/dist/invite-extensions/internal/delivery.d.ts +44 -0
- package/dist/invite-extensions/{delivery.js → internal/delivery.js} +38 -0
- package/dist/invite-extensions/internal/delivery.js.map +1 -0
- package/dist/invite-extensions/internal/edit.d.ts +34 -0
- package/dist/invite-extensions/{edit.js → internal/edit.js} +33 -0
- package/dist/invite-extensions/internal/edit.js.map +1 -0
- package/dist/invite-extensions/internal/field-ids.d.ts +21 -0
- package/dist/invite-extensions/{field-ids.js → internal/field-ids.js} +13 -0
- package/dist/invite-extensions/internal/field-ids.js.map +1 -0
- package/dist/invite-extensions/internal/form-slot.d.ts +13 -0
- package/dist/invite-extensions/{form-slot.js → internal/form-slot.js} +49 -4
- package/dist/invite-extensions/internal/form-slot.js.map +1 -0
- package/dist/invite-extensions/internal/payload-slices.d.ts +31 -0
- package/dist/invite-extensions/{payload-slices.js → internal/payload-slices.js} +30 -0
- package/dist/invite-extensions/internal/payload-slices.js.map +1 -0
- package/dist/invite-extensions/internal/registry.d.ts +48 -0
- package/dist/invite-extensions/internal/registry.js +77 -0
- package/dist/invite-extensions/internal/registry.js.map +1 -0
- package/dist/invite-extensions/internal/types.d.ts +61 -0
- package/dist/invite-extensions/internal/types.js +3 -0
- package/dist/invite-extensions/internal/types.js.map +1 -0
- package/dist/invite-extensions/registry.d.ts +44 -12
- package/dist/invite-extensions/registry.js +51 -43
- package/dist/invite-extensions/registry.js.map +1 -1
- package/dist/invite-extensions/types.d.ts +59 -34
- package/dist/invite-extensions.d.ts +30 -4
- package/dist/invite-extensions.js +57 -7
- package/dist/invite-extensions.js.map +1 -1
- package/dist/invite-resolution.d.ts +5 -2
- package/dist/invite-resolution.js +16 -46
- package/dist/invite-resolution.js.map +1 -1
- package/dist/invitee-display-name.d.ts +5 -0
- package/dist/invitee-display-name.js +15 -0
- package/dist/invitee-display-name.js.map +1 -0
- package/dist/invites.d.ts +54 -17
- package/dist/invites.js +49 -34
- package/dist/invites.js.map +1 -1
- package/dist/layout-banners.d.ts +68 -0
- package/dist/layout-banners.js +18 -0
- package/dist/layout-banners.js.map +1 -1
- package/dist/notifications/builder.d.ts +3 -1
- package/dist/notifications/builder.js +10 -0
- package/dist/notifications/builder.js.map +1 -1
- package/dist/notifications/index.d.ts +1 -0
- package/dist/notifications/index.js +16 -0
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/internal.d.ts +8 -5
- package/dist/notifications/internal.js +6 -0
- package/dist/notifications/internal.js.map +1 -1
- package/dist/notifications/sendable.d.ts +6 -0
- package/dist/notifications/sendable.js +13 -4
- package/dist/notifications/sendable.js.map +1 -1
- package/dist/notifications/types.d.ts +26 -1
- package/dist/page/categories.d.ts +19 -17
- package/dist/page/categories.js +24 -168
- package/dist/page/categories.js.map +1 -1
- package/dist/page/component-tree.d.ts +15 -1
- package/dist/page/component-tree.js +0 -40
- package/dist/page/component-tree.js.map +1 -1
- package/dist/page/controllers.d.ts +135 -0
- package/dist/page/controllers.js +124 -8
- package/dist/page/controllers.js.map +1 -1
- package/dist/page/declaration-conflict.d.ts +9 -0
- package/dist/page/declaration-conflict.js +17 -0
- package/dist/page/declaration-conflict.js.map +1 -0
- package/dist/page/form-page-routes.d.ts +7 -10
- package/dist/page/form-page-routes.js +14 -31
- package/dist/page/form-page-routes.js.map +1 -1
- package/dist/page/internal/categories.d.ts +62 -0
- package/dist/page/internal/categories.js +260 -0
- package/dist/page/internal/categories.js.map +1 -0
- package/dist/page/internal/component-target.d.ts +37 -0
- package/dist/page/{component-target.js → internal/component-target.js} +27 -2
- package/dist/page/internal/component-target.js.map +1 -0
- package/dist/page/internal/component-tree.d.ts +13 -0
- package/dist/page/internal/component-tree.js +61 -0
- package/dist/page/internal/component-tree.js.map +1 -0
- package/dist/page/{extension-assembly.d.ts → internal/extension-assembly.d.ts} +5 -2
- package/dist/page/{extension-assembly.js → internal/extension-assembly.js} +8 -0
- package/dist/page/internal/extension-assembly.js.map +1 -0
- package/dist/page/internal/extension-validation.d.ts +24 -0
- package/dist/page/{extension-validation.js → internal/extension-validation.js} +8 -0
- package/dist/page/internal/extension-validation.js.map +1 -0
- package/dist/page/internal/form-page-routes.d.ts +26 -0
- package/dist/page/internal/form-page-routes.js +40 -0
- package/dist/page/internal/form-page-routes.js.map +1 -0
- package/dist/page/internal/layout-filter.d.ts +21 -0
- package/dist/page/internal/layout-filter.js +101 -0
- package/dist/page/internal/layout-filter.js.map +1 -0
- package/dist/page/{metadata-helpers.d.ts → internal/metadata-helpers.d.ts} +4 -1
- package/dist/page/{metadata-helpers.js → internal/metadata-helpers.js} +19 -2
- package/dist/page/internal/metadata-helpers.js.map +1 -0
- package/dist/page/internal/nav-badges.d.ts +17 -0
- package/dist/page/internal/nav-badges.js +68 -0
- package/dist/page/internal/nav-badges.js.map +1 -0
- package/dist/page/internal/page-registration.d.ts +29 -0
- package/dist/page/internal/page-registration.js +41 -0
- package/dist/page/internal/page-registration.js.map +1 -0
- package/dist/page/internal/registry.d.ts +128 -0
- package/dist/page/internal/registry.js +225 -0
- package/dist/page/internal/registry.js.map +1 -0
- package/dist/page/internal/table-view-ids.d.ts +10 -0
- package/dist/page/internal/table-view-ids.js +39 -0
- package/dist/page/internal/table-view-ids.js.map +1 -0
- package/dist/page/internal/types.d.ts +2 -0
- package/dist/page/internal/types.js +6 -0
- package/dist/page/internal/types.js.map +1 -0
- package/dist/page/layout-filter.d.ts +4 -0
- package/dist/page/layout-filter.js +11 -0
- package/dist/page/layout-filter.js.map +1 -1
- package/dist/page/metadata.d.ts +93 -0
- package/dist/page/metadata.js +236 -28
- package/dist/page/metadata.js.map +1 -1
- package/dist/page/registry.d.ts +17 -36
- package/dist/page/registry.js +25 -127
- package/dist/page/registry.js.map +1 -1
- package/dist/page/roots.d.ts +10 -0
- package/dist/page/roots.js +27 -6
- package/dist/page/roots.js.map +1 -1
- package/dist/page/types.d.ts +186 -1
- package/dist/page/types.js +1 -2
- package/dist/page/types.js.map +1 -1
- package/dist/page.d.ts +23 -1
- package/dist/page.js +24 -2
- package/dist/page.js.map +1 -1
- package/dist/permission-gate.d.ts +14 -0
- package/dist/permission-gate.js +3 -0
- package/dist/permission-gate.js.map +1 -0
- package/dist/permissions-resolver.d.ts +24 -0
- package/dist/permissions-resolver.js +24 -0
- package/dist/permissions-resolver.js.map +1 -1
- package/dist/permissions.d.ts +27 -0
- package/dist/permissions.js +37 -0
- package/dist/permissions.js.map +1 -1
- package/dist/quick-actions.d.ts +27 -0
- package/dist/quick-actions.js +1 -0
- package/dist/quick-actions.js.map +1 -1
- package/dist/realtime.d.ts +29 -0
- package/dist/realtime.js +30 -0
- package/dist/realtime.js.map +1 -1
- package/dist/request-tenant.d.ts +17 -0
- package/dist/request-tenant.js +18 -1
- package/dist/request-tenant.js.map +1 -1
- package/dist/tenant-access.d.ts +38 -6
- package/dist/tenant-access.js +38 -8
- package/dist/tenant-access.js.map +1 -1
- package/dist/tenant-export.d.ts +19 -0
- package/dist/tenant-lifecycle.d.ts +13 -0
- package/dist/tenant-lifecycle.js +22 -1
- package/dist/tenant-lifecycle.js.map +1 -1
- package/dist/tenant-ownership.d.ts +2 -1
- package/dist/tenant-ownership.js +5 -85
- package/dist/tenant-ownership.js.map +1 -1
- package/dist/tenant-scoped-model.d.ts +8 -0
- package/dist/tenant-scoped-model.js +8 -0
- package/dist/tenant-scoped-model.js.map +1 -1
- package/dist/uploads.d.ts +24 -16
- package/dist/uploads.js +24 -0
- package/dist/uploads.js.map +1 -1
- package/dist/utils/fire-and-forget.d.ts +4 -0
- package/dist/utils/fire-and-forget.js +4 -0
- package/dist/utils/fire-and-forget.js.map +1 -1
- package/dist/utils/internal/owned-registry.d.ts +36 -0
- package/dist/utils/internal/owned-registry.js +60 -0
- package/dist/utils/internal/owned-registry.js.map +1 -0
- package/dist/utils/{row-instance.d.ts → internal/row-instance.d.ts} +1 -0
- package/dist/utils/internal/row-instance.js +12 -0
- package/dist/utils/internal/row-instance.js.map +1 -0
- package/dist/utils/internal/saas-mode.d.ts +8 -0
- package/dist/utils/internal/saas-mode.js +3 -0
- package/dist/utils/internal/saas-mode.js.map +1 -0
- package/dist/utils/{time.d.ts → internal/time.d.ts} +4 -0
- package/dist/utils/{time.js → internal/time.js} +4 -0
- package/dist/utils/internal/time.js.map +1 -0
- package/dist/utils/{type-check.d.ts → internal/type-check.d.ts} +12 -0
- package/dist/utils/{type-check.js → internal/type-check.js} +12 -0
- package/dist/utils/internal/type-check.js.map +1 -0
- package/dist/utils/internal/value-parser.d.ts +86 -0
- package/dist/utils/internal/value-parser.js +160 -0
- package/dist/utils/internal/value-parser.js.map +1 -0
- package/dist/utils/saas-mode.d.ts +25 -3
- package/dist/utils/saas-mode.js +24 -0
- package/dist/utils/saas-mode.js.map +1 -1
- package/package.json +3 -3
- package/dist/base/block-registry/describe.d.ts +0 -6
- package/dist/base/block-registry/describe.js.map +0 -1
- package/dist/base/block-registry/ui.d.ts +0 -5
- package/dist/base/block-registry/ui.js +0 -17
- package/dist/base/block-registry/ui.js.map +0 -1
- package/dist/base/table-view/auth.d.ts +0 -9
- package/dist/base/table-view/auth.js.map +0 -1
- package/dist/base/table-view/files.js.map +0 -1
- package/dist/base/table-view/guards.js +0 -85
- package/dist/base/table-view/guards.js.map +0 -1
- package/dist/base/table-view/row-rules.js.map +0 -1
- package/dist/base/tree.d.ts +0 -115
- package/dist/base/tree.js +0 -145
- package/dist/base/tree.js.map +0 -1
- package/dist/db/models/exportJobs.model.js.map +0 -1
- package/dist/db/models/tenantLifecycle.model.js.map +0 -1
- package/dist/db/tables/tenantLifecycle.table.js.map +0 -1
- package/dist/invite-extensions/delivery.d.ts +0 -5
- package/dist/invite-extensions/delivery.js.map +0 -1
- package/dist/invite-extensions/edit.d.ts +0 -4
- package/dist/invite-extensions/edit.js.map +0 -1
- package/dist/invite-extensions/field-ids.d.ts +0 -7
- package/dist/invite-extensions/field-ids.js.map +0 -1
- package/dist/invite-extensions/form-slot.d.ts +0 -2
- package/dist/invite-extensions/form-slot.js.map +0 -1
- package/dist/invite-extensions/internal.d.ts +0 -17
- package/dist/invite-extensions/internal.js +0 -55
- package/dist/invite-extensions/internal.js.map +0 -1
- package/dist/invite-extensions/payload-slices.d.ts +0 -8
- package/dist/invite-extensions/payload-slices.js.map +0 -1
- package/dist/invite-membership.d.ts +0 -3
- package/dist/invite-membership.js.map +0 -1
- package/dist/invite-replacement.d.ts +0 -2
- package/dist/invite-replacement.js.map +0 -1
- package/dist/page/component-target.d.ts +0 -10
- package/dist/page/component-target.js.map +0 -1
- package/dist/page/extension-assembly.js.map +0 -1
- package/dist/page/extension-validation.d.ts +0 -7
- package/dist/page/extension-validation.js.map +0 -1
- package/dist/page/metadata-helpers.js.map +0 -1
- package/dist/page/page-registration.d.ts +0 -13
- package/dist/page/page-registration.js +0 -22
- package/dist/page/page-registration.js.map +0 -1
- package/dist/utils/owned-registry.d.ts +0 -10
- package/dist/utils/owned-registry.js +0 -34
- package/dist/utils/owned-registry.js.map +0 -1
- package/dist/utils/row-instance.js +0 -8
- package/dist/utils/row-instance.js.map +0 -1
- package/dist/utils/time.js.map +0 -1
- package/dist/utils/type-check.js.map +0 -1
- package/dist/utils/value-parser.d.ts +0 -11
- package/dist/utils/value-parser.js +0 -86
- package/dist/utils/value-parser.js.map +0 -1
|
@@ -10,19 +10,69 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
|
11
11
|
o[k2] = m[k];
|
|
12
12
|
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
13
35
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
36
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
37
|
};
|
|
16
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
39
|
+
exports.internal = exports.RegisterInviteAvailability = void 0;
|
|
40
|
+
/**
|
|
41
|
+
* Module data carried by a member invitation — the invitation-side counterpart
|
|
42
|
+
* of `@RegisterPageExtension`, split by concern under `./invite-extensions/`:
|
|
43
|
+
*
|
|
44
|
+
* - `types` — the contracts a contributor implements
|
|
45
|
+
* - `registry` — `RegisterInviteExtension` and the registration proxy that
|
|
46
|
+
* binds an extension to its module's lifetime
|
|
47
|
+
* - `availability` — `RegisterInviteAvailability`, which disables the invite
|
|
48
|
+
* action with a reason
|
|
49
|
+
*
|
|
50
|
+
* The rest is driven by the DMS runtime alone and lives under
|
|
51
|
+
* `./invite-extensions/internal/`: the namespacing of contributed fields
|
|
52
|
+
* (`field-ids`), their serialization, placement and merging into the DMS
|
|
53
|
+
* invite modal (`form-slot`), validation at submit, delivery at acceptance and
|
|
54
|
+
* cleanup (`delivery`), and the prefill, validation and notification of a
|
|
55
|
+
* pending invitation's edit (`edit`).
|
|
56
|
+
*
|
|
57
|
+
* `form-slot` claims the invite forms' component slots on import, so importing
|
|
58
|
+
* this barrel is what opens the modal and the edit form to extensions.
|
|
59
|
+
*/
|
|
60
|
+
require("./invite-extensions/internal/form-slot");
|
|
61
|
+
const availability = __importStar(require("./invite-extensions/internal/availability"));
|
|
62
|
+
const registry_1 = require("./invite-extensions/registry");
|
|
18
63
|
var availability_1 = require("./invite-extensions/availability");
|
|
19
64
|
Object.defineProperty(exports, "RegisterInviteAvailability", { enumerable: true, get: function () { return availability_1.RegisterInviteAvailability; } });
|
|
20
|
-
__exportStar(require("./invite-extensions/field-ids"), exports);
|
|
21
|
-
__exportStar(require("./invite-extensions/form-slot"), exports);
|
|
22
|
-
var internal_1 = require("./invite-extensions/internal");
|
|
23
|
-
Object.defineProperty(exports, "internal", { enumerable: true, get: function () { return internal_1.internal; } });
|
|
24
|
-
var payload_slices_1 = require("./invite-extensions/payload-slices");
|
|
25
|
-
Object.defineProperty(exports, "HTTP_BAD_REQUEST", { enumerable: true, get: function () { return payload_slices_1.HTTP_BAD_REQUEST; } });
|
|
26
65
|
__exportStar(require("./invite-extensions/registry"), exports);
|
|
27
66
|
__exportStar(require("./invite-extensions/types"), exports);
|
|
67
|
+
// Shadows the namespace registry.ts declares: the same proxy, plus
|
|
68
|
+
// `ResolveInviteAvailability`, which module tests reach through it.
|
|
69
|
+
/**
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
var internal;
|
|
73
|
+
(function (internal) {
|
|
74
|
+
internal.RegisterInviteExtension = registry_1.internal.RegisterInviteExtension;
|
|
75
|
+
/** Kept for module compatibility; the DMS imports it from `internal/availability`. */
|
|
76
|
+
internal.ResolveInviteAvailability = availability.ResolveInviteAvailability;
|
|
77
|
+
})(internal || (exports.internal = internal = {}));
|
|
28
78
|
//# sourceMappingURL=invite-extensions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invite-extensions.js","sourceRoot":"","sources":["../src/invite-extensions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"invite-extensions.js","sourceRoot":"","sources":["../src/invite-extensions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,kDAAgD;AAChD,wFAA0E;AAC1E,2DAAoE;AAEpE,iEAG0C;AADxC,0HAAA,0BAA0B,OAAA;AAE5B,+DAA6C;AAC7C,4DAA0C;AAE1C,mEAAmE;AACnE,oEAAoE;AAEpE;;GAEG;AACH,IAAiB,QAAQ,CAMxB;AAND,WAAiB,QAAQ;IACV,gCAAuB,GAAG,mBAAQ,CAAC,uBAAuB,CAAC;IAExE,sFAAsF;IACzE,kCAAyB,GACpC,YAAY,CAAC,yBAAyB,CAAC;AAC3C,CAAC,EANgB,QAAQ,wBAAR,QAAQ,QAMxB"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { InviteDecision } from "./db/models/inviteResolutions.model";
|
|
2
2
|
import type { InviteResolution } from "./db/tables/inviteResolutions.table";
|
|
3
3
|
import type { UserInvite } from "./db/tables/user_invites.table";
|
|
4
4
|
export type ResolveInviteInput = Omit<InviteDecision, "extensionKeys">;
|
|
5
|
+
/** Loads the exact incarnation or its durable snapshot so failed actions can resume. */
|
|
5
6
|
export declare function loadInviteForAction(tenantId: string, inviteId: string): Promise<UserInvite | undefined>;
|
|
7
|
+
/** Rejects actions on a replacement until its creating hooks complete. */
|
|
6
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. */
|
|
7
10
|
export declare function decideInvite(input: ResolveInviteInput): Promise<InviteResolution>;
|
|
11
|
+
/** Replays durable effects. Contributor callbacks must deduplicate by deliveryId; failures retain the snapshot. */
|
|
8
12
|
export declare function completeInviteResolution(resolution: InviteResolution): Promise<void>;
|
|
9
|
-
export declare function completeAdmittedInviteResolution(resolution: InviteResolution): Promise<void>;
|
|
@@ -4,19 +4,16 @@ exports.loadInviteForAction = loadInviteForAction;
|
|
|
4
4
|
exports.assertInviteReady = assertInviteReady;
|
|
5
5
|
exports.decideInvite = decideInvite;
|
|
6
6
|
exports.completeInviteResolution = completeInviteResolution;
|
|
7
|
-
exports.completeAdmittedInviteResolution = completeAdmittedInviteResolution;
|
|
8
7
|
const node_util_1 = require("node:util");
|
|
9
8
|
const interface_api_util_1 = require("@antelopejs/interface-api-util");
|
|
10
9
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
11
|
-
const inviteResolutions_model_1 = require("./db/
|
|
10
|
+
const inviteResolutions_model_1 = require("./db/internal/inviteResolutions.model");
|
|
12
11
|
const user_invites_model_1 = require("./db/models/user_invites.model");
|
|
13
|
-
const
|
|
14
|
-
const invite_extensions_1 = require("./invite-extensions");
|
|
15
|
-
const delivery_1 = require("./invite-extensions/delivery");
|
|
16
|
-
const invite_membership_1 = require("./invite-membership");
|
|
17
|
-
const invite_replacement_1 = require("./invite-replacement");
|
|
12
|
+
const registry_1 = require("./invite-extensions/internal/registry");
|
|
18
13
|
const tenant_lifecycle_1 = require("./tenant-lifecycle");
|
|
14
|
+
const invite_resolution_1 = require("./internal/invite-resolution");
|
|
19
15
|
const HTTP_CONFLICT = 409;
|
|
16
|
+
/** Loads the exact incarnation or its durable snapshot so failed actions can resume. */
|
|
20
17
|
async function loadInviteForAction(tenantId, inviteId) {
|
|
21
18
|
const invite = await (0, interface_database_decorators_1.GetModel)(user_invites_model_1.UserInviteModel, tenantId).get(inviteId);
|
|
22
19
|
if (invite)
|
|
@@ -24,12 +21,20 @@ async function loadInviteForAction(tenantId, inviteId) {
|
|
|
24
21
|
const resolution = await (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, tenantId).getForInvite(tenantId, inviteId);
|
|
25
22
|
return resolution?.invite;
|
|
26
23
|
}
|
|
24
|
+
/** Rejects actions on a replacement until its creating hooks complete. */
|
|
27
25
|
async function assertInviteReady(tenantId, invite) {
|
|
28
26
|
if (!invite.creationResolutionId)
|
|
29
27
|
return;
|
|
30
28
|
const parent = await (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, tenantId).get(invite.creationResolutionId);
|
|
31
29
|
(0, interface_api_util_1.assert)(parent?.completed, HTTP_CONFLICT, "Invitation creation is still pending");
|
|
32
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* The replacement's content as plain data.
|
|
33
|
+
*
|
|
34
|
+
* `roles_ids` and `extensions` reach this comparison as per-context views when
|
|
35
|
+
* the caller lives in another module, and `isDeepStrictEqual` refuses two views
|
|
36
|
+
* holding the same values — which would report a faithful retry as a conflict.
|
|
37
|
+
*/
|
|
33
38
|
function replacementContent(invite) {
|
|
34
39
|
if (!invite)
|
|
35
40
|
return null;
|
|
@@ -49,6 +54,7 @@ function assertSameDecision(resolution, input) {
|
|
|
49
54
|
resolution.userId === (input.userId ?? null), HTTP_CONFLICT, "Invitation already has a different terminal decision");
|
|
50
55
|
(0, interface_api_util_1.assert)((0, node_util_1.isDeepStrictEqual)(replacementContent(resolution.replacement), replacementContent(input.replacement)), HTTP_CONFLICT, "Invitation already has a different replacement");
|
|
51
56
|
}
|
|
57
|
+
/** Chooses one permanent outcome; all competing lifecycle paths must use this before effects. */
|
|
52
58
|
async function decideInvite(input) {
|
|
53
59
|
await assertInviteReady(input.tenantId, input.invite);
|
|
54
60
|
const model = (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, input.tenantId);
|
|
@@ -59,51 +65,15 @@ async function decideInvite(input) {
|
|
|
59
65
|
const extensionKeys = [
|
|
60
66
|
...new Set([
|
|
61
67
|
...Object.keys(input.invite.extensions ?? {}),
|
|
62
|
-
...(0,
|
|
68
|
+
...(0, registry_1.listInviteExtensions)().map((extension) => extension.key),
|
|
63
69
|
]),
|
|
64
70
|
];
|
|
65
71
|
const resolution = await model.decide({ ...input, extensionKeys });
|
|
66
72
|
assertSameDecision(resolution, input);
|
|
67
73
|
return resolution;
|
|
68
74
|
}
|
|
69
|
-
|
|
70
|
-
const available = new Set((0, invite_extensions_1.listInviteExtensions)().map((extension) => extension.key));
|
|
71
|
-
const missing = resolution.extensionKeys.filter((key) => !available.has(key));
|
|
72
|
-
if (missing.length)
|
|
73
|
-
throw new Error(`Invite delivery awaits extensions: ${missing.join(", ")}`);
|
|
74
|
-
}
|
|
75
|
-
async function deliverAcceptance(resolution) {
|
|
76
|
-
const member = await (0, invite_membership_1.ensureInviteMembership)(resolution);
|
|
77
|
-
await (0, delivery_1.DeliverInviteExtensions)(resolution.invite.extensions, member, {
|
|
78
|
-
tenantId: resolution.tenantId,
|
|
79
|
-
email: resolution.invite.email,
|
|
80
|
-
inviteId: resolution.invite._id,
|
|
81
|
-
deliveryId: resolution._id,
|
|
82
|
-
}, { retryOnFailure: true });
|
|
83
|
-
}
|
|
75
|
+
/** Replays durable effects. Contributor callbacks must deduplicate by deliveryId; failures retain the snapshot. */
|
|
84
76
|
async function completeInviteResolution(resolution) {
|
|
85
|
-
await (0, tenant_lifecycle_1.runTenantLifecycleOperation)(resolution.tenantId, () => completeAdmittedInviteResolution(resolution));
|
|
86
|
-
}
|
|
87
|
-
async function completeAdmittedInviteResolution(resolution) {
|
|
88
|
-
const model = (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, resolution.tenantId);
|
|
89
|
-
const current = await model.get(resolution._id);
|
|
90
|
-
if (!current)
|
|
91
|
-
throw new Error("Invite decision disappeared");
|
|
92
|
-
if (current.completed)
|
|
93
|
-
return;
|
|
94
|
-
requireExtensions(current);
|
|
95
|
-
if (current.reason === "accepted")
|
|
96
|
-
await deliverAcceptance(current);
|
|
97
|
-
await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.INVITE_DELETED, {
|
|
98
|
-
tenantId: current.tenantId,
|
|
99
|
-
inviteId: current.invite._id,
|
|
100
|
-
email: current.invite.email,
|
|
101
|
-
reason: current.reason,
|
|
102
|
-
extensions: current.invite.extensions,
|
|
103
|
-
deliveryId: current._id,
|
|
104
|
-
});
|
|
105
|
-
await (0, invite_replacement_1.ensureInviteReplacement)(current);
|
|
106
|
-
await (0, interface_database_decorators_1.GetModel)(user_invites_model_1.UserInviteModel, current.tenantId).delete(current.invite._id);
|
|
107
|
-
await model.update(current._id, { completed: true });
|
|
77
|
+
await (0, tenant_lifecycle_1.runTenantLifecycleOperation)(resolution.tenantId, () => (0, invite_resolution_1.completeAdmittedInviteResolution)(resolution));
|
|
108
78
|
}
|
|
109
79
|
//# sourceMappingURL=invite-resolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invite-resolution.js","sourceRoot":"","sources":["../src/invite-resolution.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"invite-resolution.js","sourceRoot":"","sources":["../src/invite-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inviteeDisplayName = inviteeDisplayName;
|
|
4
|
+
/**
|
|
5
|
+
* Combined display name of an invitee, or `undefined` when the invite carries
|
|
6
|
+
* no name.
|
|
7
|
+
*/
|
|
8
|
+
function inviteeDisplayName(firstname, lastname) {
|
|
9
|
+
const name = [firstname, lastname]
|
|
10
|
+
.filter((part) => !!part)
|
|
11
|
+
.join(" ")
|
|
12
|
+
.trim();
|
|
13
|
+
return name || undefined;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=invitee-display-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invitee-display-name.js","sourceRoot":"","sources":["../src/invitee-display-name.ts"],"names":[],"mappings":";;AAIA,gDASC;AAbD;;;GAGG;AACH,SAAgB,kBAAkB,CAChC,SAAyB,EACzB,QAAwB;IAExB,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;SAC/B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACxB,IAAI,CAAC,GAAG,CAAC;SACT,IAAI,EAAE,CAAC;IACV,OAAO,IAAI,IAAI,SAAS,CAAC;AAC3B,CAAC"}
|
package/dist/invites.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type UserInvite } from "./db";
|
|
2
2
|
import { type InviteReplacementReason } from "./hooks";
|
|
3
3
|
import type { InviteExtensionPayloads } from "./invite-extensions";
|
|
4
|
+
export { inviteeDisplayName } from "./invitee-display-name";
|
|
4
5
|
export declare const INVITE_TOKEN_LENGTH = 64;
|
|
5
6
|
export declare const INVITE_EXPIRY_DAYS = 7;
|
|
6
7
|
export interface InviteUserToTenantOptions {
|
|
@@ -12,31 +13,54 @@ export interface InviteUserToTenantOptions {
|
|
|
12
13
|
roleIds?: string[];
|
|
13
14
|
asTenantOwner?: boolean;
|
|
14
15
|
skipEmailValidation?: boolean;
|
|
16
|
+
/** Opt-in: dispatch `sendAdminInviteEmail` after the invite row is created. */
|
|
15
17
|
sendEmail?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* With `sendEmail`, wait for the email instead of sending it in the
|
|
20
|
+
* background, and report its outcome as the result's `emailDelivery`. The
|
|
21
|
+
* invitation is kept either way, so the caller can tell the inviter to
|
|
22
|
+
* resend it when the email did not leave.
|
|
23
|
+
*/
|
|
24
|
+
awaitEmailDelivery?: boolean;
|
|
25
|
+
/** Who sends the invitation, named in its email. */
|
|
16
26
|
inviterName?: string;
|
|
27
|
+
/** Id of the user who sends the invitation, shown next to it in the list. */
|
|
28
|
+
invitedBy?: string | null;
|
|
29
|
+
/** Module payloads collected in the invite modal, keyed by extension key. */
|
|
17
30
|
extensions?: InviteExtensionPayloads;
|
|
18
31
|
}
|
|
19
|
-
|
|
20
|
-
export
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
function sendTenantInviteEmail(invite: TenantInviteEmail): Promise<void>;
|
|
32
|
+
/** Whether a tenant invitation's email left. */
|
|
33
|
+
export type InviteEmailDelivery = "sent" | "failed";
|
|
34
|
+
export interface InvitedUserResult {
|
|
35
|
+
kind: "invited";
|
|
36
|
+
inviteId: string;
|
|
37
|
+
token: string;
|
|
38
|
+
/**
|
|
39
|
+
* Outcome of the invitation email. Set only when the call passed both
|
|
40
|
+
* `sendEmail` and `awaitEmailDelivery`.
|
|
41
|
+
*/
|
|
42
|
+
emailDelivery?: InviteEmailDelivery;
|
|
31
43
|
}
|
|
32
44
|
export type InviteUserToTenantResult = {
|
|
33
45
|
kind: "added";
|
|
34
46
|
userId: string;
|
|
35
|
-
} |
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
47
|
+
} | InvitedUserResult;
|
|
48
|
+
/**
|
|
49
|
+
* Invite a user (existing or not) to a tenant.
|
|
50
|
+
*
|
|
51
|
+
* - If the email belongs to an existing user, they are added directly via
|
|
52
|
+
* `applyTenantOwnership` and no token is generated. Invite extensions are
|
|
53
|
+
* delivered on the spot: there is no invitation for them to wait on, and the
|
|
54
|
+
* admin filled their fields in the same modal either way.
|
|
55
|
+
* - Otherwise a `user_invites` row is created and (when `sendEmail` is true)
|
|
56
|
+
* `sendAdminInviteEmail` is dispatched: in the background by default, or
|
|
57
|
+
* awaited with `awaitEmailDelivery`, its outcome then reported as
|
|
58
|
+
* `emailDelivery`. A failed email never undoes the invitation.
|
|
59
|
+
*
|
|
60
|
+
* The caller is responsible for any pre-checks specific to its context
|
|
61
|
+
* (e.g. "already a member" → 409 for the DMS users route). This helper is
|
|
62
|
+
* intentionally side-effect-light: it does not throw on duplicates.
|
|
63
|
+
*/
|
|
40
64
|
export declare function inviteUserToTenant(options: InviteUserToTenantOptions): Promise<InviteUserToTenantResult>;
|
|
41
65
|
export interface CreateUserInviteTokenOptions {
|
|
42
66
|
tenantId: string;
|
|
@@ -47,12 +71,25 @@ export interface CreateUserInviteTokenOptions {
|
|
|
47
71
|
roleIds: string[];
|
|
48
72
|
asTenantOwner: boolean;
|
|
49
73
|
skipEmailValidation: boolean;
|
|
74
|
+
/** Id of the user who sends the invitation; `null` when nobody signed in did. */
|
|
75
|
+
invitedBy?: string | null;
|
|
50
76
|
extensions?: InviteExtensionPayloads;
|
|
77
|
+
/**
|
|
78
|
+
* How to report the deletion of an invitation this one displaces. Defaults
|
|
79
|
+
* to `replaced`; a resend passes `resent`, which reissues the same
|
|
80
|
+
* invitation and must not have contributors undo what it carries.
|
|
81
|
+
*/
|
|
51
82
|
replacementReason?: InviteReplacementReason;
|
|
83
|
+
/** Exact incarnation to replace, including a retained snapshot during a retry. */
|
|
52
84
|
replacesInvite?: UserInvite;
|
|
53
85
|
}
|
|
54
86
|
export interface CreateUserInviteTokenResult {
|
|
55
87
|
inviteId: string;
|
|
56
88
|
token: string;
|
|
57
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Low-level: create a `user_invites` row + token for a tenant. Replaces any
|
|
92
|
+
* existing invite for the same email (within the tenant). Fires
|
|
93
|
+
* INVITE_DELETED / INVITE_BEING_CREATED / INVITE_CREATED hooks.
|
|
94
|
+
*/
|
|
58
95
|
export declare function createUserInviteToken(options: CreateUserInviteTokenOptions): Promise<CreateUserInviteTokenResult>;
|
package/dist/invites.js
CHANGED
|
@@ -3,57 +3,60 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
exports.inviteeDisplayName = inviteeDisplayName;
|
|
6
|
+
exports.INVITE_EXPIRY_DAYS = exports.INVITE_TOKEN_LENGTH = exports.inviteeDisplayName = void 0;
|
|
8
7
|
exports.inviteUserToTenant = inviteUserToTenant;
|
|
9
8
|
exports.createUserInviteToken = createUserInviteToken;
|
|
10
9
|
const node_crypto_1 = require("node:crypto");
|
|
11
10
|
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
12
11
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
13
12
|
const db_1 = require("./db");
|
|
14
|
-
const auth_1 = require("./auth");
|
|
15
13
|
const db_2 = require("./auth/db");
|
|
16
14
|
const randomstring_1 = __importDefault(require("randomstring"));
|
|
17
15
|
const fire_and_forget_1 = require("./utils/fire-and-forget");
|
|
18
|
-
const time_1 = require("./utils/time");
|
|
16
|
+
const time_1 = require("./utils/internal/time");
|
|
19
17
|
const hooks_1 = require("./hooks");
|
|
20
|
-
const delivery_1 = require("./invite-extensions/delivery");
|
|
21
|
-
const invite_resolution_1 = require("./invite-resolution");
|
|
18
|
+
const delivery_1 = require("./invite-extensions/internal/delivery");
|
|
19
|
+
const invite_resolution_1 = require("./internal/invite-resolution");
|
|
20
|
+
const invite_resolution_2 = require("./invite-resolution");
|
|
22
21
|
const tenant_lifecycle_1 = require("./tenant-lifecycle");
|
|
23
|
-
const tenant_ownership_1 = require("./tenant-ownership");
|
|
22
|
+
const tenant_ownership_1 = require("./internal/tenant-ownership");
|
|
23
|
+
const invites_1 = require("./internal/invites");
|
|
24
|
+
var invitee_display_name_1 = require("./invitee-display-name");
|
|
25
|
+
Object.defineProperty(exports, "inviteeDisplayName", { enumerable: true, get: function () { return invitee_display_name_1.inviteeDisplayName; } });
|
|
24
26
|
exports.INVITE_TOKEN_LENGTH = 64;
|
|
25
27
|
exports.INVITE_EXPIRY_DAYS = 7;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
inviterName: invite.inviterName,
|
|
43
|
-
language: invite.language,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
internal.sendTenantInviteEmail = sendTenantInviteEmail;
|
|
47
|
-
})(internal || (exports.internal = internal = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Invite a user (existing or not) to a tenant.
|
|
30
|
+
*
|
|
31
|
+
* - If the email belongs to an existing user, they are added directly via
|
|
32
|
+
* `applyTenantOwnership` and no token is generated. Invite extensions are
|
|
33
|
+
* delivered on the spot: there is no invitation for them to wait on, and the
|
|
34
|
+
* admin filled their fields in the same modal either way.
|
|
35
|
+
* - Otherwise a `user_invites` row is created and (when `sendEmail` is true)
|
|
36
|
+
* `sendAdminInviteEmail` is dispatched: in the background by default, or
|
|
37
|
+
* awaited with `awaitEmailDelivery`, its outcome then reported as
|
|
38
|
+
* `emailDelivery`. A failed email never undoes the invitation.
|
|
39
|
+
*
|
|
40
|
+
* The caller is responsible for any pre-checks specific to its context
|
|
41
|
+
* (e.g. "already a member" → 409 for the DMS users route). This helper is
|
|
42
|
+
* intentionally side-effect-light: it does not throw on duplicates.
|
|
43
|
+
*/
|
|
48
44
|
async function inviteUserToTenant(options) {
|
|
49
45
|
const result = await (0, tenant_lifecycle_1.runTenantLifecycleOperation)(options.tenantId, () => inviteAdmittedUser(options));
|
|
50
|
-
if (options.sendEmail
|
|
51
|
-
|
|
46
|
+
if (!options.sendEmail || result.kind !== "invited")
|
|
47
|
+
return result;
|
|
48
|
+
const invite = { ...options, token: result.token };
|
|
49
|
+
if (!options.awaitEmailDelivery) {
|
|
50
|
+
(0, fire_and_forget_1.fireAndForget)((0, invites_1.sendTenantInviteEmail)(invite), `invite email to "${options.email}"`);
|
|
51
|
+
return result;
|
|
52
52
|
}
|
|
53
|
-
return
|
|
53
|
+
return {
|
|
54
|
+
...result,
|
|
55
|
+
emailDelivery: await (0, invites_1.deliverTenantInviteEmail)(invite),
|
|
56
|
+
};
|
|
54
57
|
}
|
|
55
58
|
async function inviteAdmittedUser(options) {
|
|
56
|
-
const { tenantId, email, firstname = null, lastname = null, language = "en", roleIds = [], asTenantOwner = false, skipEmailValidation = false, extensions, } = options;
|
|
59
|
+
const { tenantId, email, firstname = null, lastname = null, language = "en", roleIds = [], asTenantOwner = false, skipEmailValidation = false, invitedBy = null, extensions, } = options;
|
|
57
60
|
const userModel = (0, interface_database_decorators_1.GetModel)(db_2.UserModel);
|
|
58
61
|
const existingUser = await userModel.getByEmail(email);
|
|
59
62
|
if (existingUser) {
|
|
@@ -73,10 +76,16 @@ async function inviteAdmittedUser(options) {
|
|
|
73
76
|
roleIds,
|
|
74
77
|
asTenantOwner,
|
|
75
78
|
skipEmailValidation,
|
|
79
|
+
invitedBy,
|
|
76
80
|
extensions,
|
|
77
81
|
});
|
|
78
82
|
return { kind: "invited", inviteId, token };
|
|
79
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* The membership is already granted when this runs, so a failure here is
|
|
86
|
+
* reported and swallowed: surfacing it would tell the admin the invitation
|
|
87
|
+
* failed for a user who is in fact a member of the tenant.
|
|
88
|
+
*/
|
|
80
89
|
async function deliverToExistingMember(tenantId, email, userId, extensions) {
|
|
81
90
|
if (!extensions)
|
|
82
91
|
return;
|
|
@@ -91,6 +100,11 @@ async function deliverToExistingMember(tenantId, email, userId, extensions) {
|
|
|
91
100
|
logging_1.Logging.Error(`[dms] invite extensions for "${email}" could not be delivered on direct add:`, error);
|
|
92
101
|
}
|
|
93
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Low-level: create a `user_invites` row + token for a tenant. Replaces any
|
|
105
|
+
* existing invite for the same email (within the tenant). Fires
|
|
106
|
+
* INVITE_DELETED / INVITE_BEING_CREATED / INVITE_CREATED hooks.
|
|
107
|
+
*/
|
|
94
108
|
async function createUserInviteToken(options) {
|
|
95
109
|
return (0, tenant_lifecycle_1.runTenantLifecycleOperation)(options.tenantId, () => createAdmittedInviteToken(options));
|
|
96
110
|
}
|
|
@@ -100,7 +114,7 @@ async function createAdmittedInviteToken(options) {
|
|
|
100
114
|
const existingInvite = options.replacesInvite ?? (await userInviteModel.getByEmail(email));
|
|
101
115
|
const replacement = buildInviteSnapshot(options);
|
|
102
116
|
if (existingInvite) {
|
|
103
|
-
const resolution = await (0,
|
|
117
|
+
const resolution = await (0, invite_resolution_2.decideInvite)({
|
|
104
118
|
tenantId,
|
|
105
119
|
invite: existingInvite,
|
|
106
120
|
reason: options.replacementReason ?? "replaced",
|
|
@@ -144,6 +158,7 @@ function buildInviteSnapshot(options) {
|
|
|
144
158
|
asTenantOwner: options.asTenantOwner,
|
|
145
159
|
expiresAt: new Date(Date.now() + exports.INVITE_EXPIRY_DAYS * time_1.MILLISECONDS_PER_DAY),
|
|
146
160
|
skipEmailValidation: options.skipEmailValidation,
|
|
161
|
+
invitedBy: options.invitedBy ?? null,
|
|
147
162
|
extensions: options.extensions ?? null,
|
|
148
163
|
});
|
|
149
164
|
}
|
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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"}
|
package/dist/layout-banners.d.ts
CHANGED
|
@@ -1,41 +1,109 @@
|
|
|
1
1
|
import { RegisteringProxy } from "@antelopejs/interface-core";
|
|
2
2
|
import type { User } from "./auth/db";
|
|
3
3
|
import type { MaybePromise } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* Semantic look of a layout banner. It also picks the banner's ARIA role:
|
|
6
|
+
* `error` is announced as an `alert`, `info` and `warning` politely as a
|
|
7
|
+
* `status`.
|
|
8
|
+
*/
|
|
4
9
|
export declare const LayoutBannerVariant: {
|
|
5
10
|
readonly INFO: "info";
|
|
6
11
|
readonly WARNING: "warning";
|
|
7
12
|
readonly ERROR: "error";
|
|
8
13
|
};
|
|
9
14
|
export type LayoutBannerVariant = (typeof LayoutBannerVariant)[keyof typeof LayoutBannerVariant];
|
|
15
|
+
/**
|
|
16
|
+
* What a banner's `visible` resolver decides on: the request the site layout
|
|
17
|
+
* is being built for.
|
|
18
|
+
*/
|
|
10
19
|
export interface LayoutBannerContext {
|
|
20
|
+
/** Undefined for an unauthenticated request. */
|
|
11
21
|
user: User | undefined;
|
|
12
22
|
tenantId: string;
|
|
23
|
+
/**
|
|
24
|
+
* The caller's effective permissions in the tenant, ignoring any tenant
|
|
25
|
+
* access gate: a banner is precisely how a suspended or past-due workspace
|
|
26
|
+
* gets told why, so it must not go dark when the gate does. Read
|
|
27
|
+
* `isTenantAccessDenied` to tell the two situations apart.
|
|
28
|
+
*/
|
|
13
29
|
permissions: Set<string>;
|
|
30
|
+
/** Whether the caller holds the wildcard permission, gate ignored. */
|
|
14
31
|
isOwner: boolean;
|
|
32
|
+
/** Whether a tenant access gate currently refuses the caller. */
|
|
15
33
|
isTenantAccessDenied: boolean;
|
|
16
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Decides, per request, whether a banner shows. Runs server-side while the
|
|
37
|
+
* site layout is built, so the answer is part of the server-rendered page and
|
|
38
|
+
* the banner never flashes in or out after hydration.
|
|
39
|
+
*
|
|
40
|
+
* It sits on the critical path of every page load: a resolver that throws, or
|
|
41
|
+
* does not answer within two seconds, hides its banner for that request.
|
|
42
|
+
*/
|
|
17
43
|
export type LayoutBannerVisibility = (context: LayoutBannerContext) => MaybePromise<boolean>;
|
|
18
44
|
interface LayoutBannerBase {
|
|
45
|
+
/**
|
|
46
|
+
* Unique key of the banner across the deployment: re-registering a key
|
|
47
|
+
* replaces the banner, and the key is what a dismissal remembers — give a
|
|
48
|
+
* banner a new key when it must show again to users who dismissed it.
|
|
49
|
+
*/
|
|
19
50
|
key: string;
|
|
20
51
|
variant: LayoutBannerVariant;
|
|
52
|
+
/**
|
|
53
|
+
* Stack order, ascending from the top. Defaults to `0`; ties keep the
|
|
54
|
+
* registration order.
|
|
55
|
+
*/
|
|
21
56
|
order?: number;
|
|
57
|
+
/** Leading icon. Defaults to one matching the variant. */
|
|
22
58
|
icon?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Whether the user can close the banner. A dismissal lasts for the browser
|
|
61
|
+
* session and is remembered in a cookie, so the server-rendered page already
|
|
62
|
+
* leaves the banner out. Defaults to `false`.
|
|
63
|
+
*/
|
|
23
64
|
dismissible?: boolean;
|
|
65
|
+
/** Absent means the banner shows on every request. */
|
|
24
66
|
visible?: LayoutBannerVisibility;
|
|
25
67
|
}
|
|
68
|
+
/** A banner showing a line of text. */
|
|
26
69
|
export interface LayoutBannerTextInfo extends LayoutBannerBase {
|
|
70
|
+
/** The message. A `$`-prefixed value resolves as an i18n key. */
|
|
27
71
|
text: string;
|
|
28
72
|
component?: never;
|
|
29
73
|
props?: never;
|
|
30
74
|
}
|
|
75
|
+
/** A banner mounting a component of a frontend layer as its content. */
|
|
31
76
|
export interface LayoutBannerComponentInfo extends LayoutBannerBase {
|
|
77
|
+
/**
|
|
78
|
+
* Name of a global component, provided by a frontend layer, rendered as the
|
|
79
|
+
* banner's content. The DMS still draws the chrome: color, icon, dismiss
|
|
80
|
+
* button and ARIA role.
|
|
81
|
+
*/
|
|
32
82
|
component: string;
|
|
83
|
+
/** Props passed to the component. Must be serializable. */
|
|
33
84
|
props?: Record<string, unknown>;
|
|
34
85
|
text?: never;
|
|
35
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* A global banner rendered under the header of the dashboard layout, on every
|
|
89
|
+
* page — tenant pages and module back-office pages alike.
|
|
90
|
+
*/
|
|
36
91
|
export type LayoutBannerInfo = LayoutBannerTextInfo | LayoutBannerComponentInfo;
|
|
92
|
+
/** @internal */
|
|
37
93
|
export declare namespace internal {
|
|
38
94
|
const RegisterLayoutBanner: RegisteringProxy<(info: LayoutBannerInfo) => void>;
|
|
39
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Register a global banner under the dashboard header. Banners stack by
|
|
98
|
+
* `order`, and each one's `visible` resolver is evaluated server-side for every
|
|
99
|
+
* site layout request, so the banner is in the server-rendered page. When the
|
|
100
|
+
* state a resolver reads changes, call `NotifyMenuChanged(tenantId)` so the
|
|
101
|
+
* connected clients re-fetch their site layout.
|
|
102
|
+
*
|
|
103
|
+
* The registration is dropped automatically when the registering module stops.
|
|
104
|
+
*
|
|
105
|
+
* @returns Removes this banner, for a module that drops it while staying
|
|
106
|
+
* loaded.
|
|
107
|
+
*/
|
|
40
108
|
export declare function RegisterLayoutBanner(info: LayoutBannerInfo): () => void;
|
|
41
109
|
export {};
|