@antelopejs/interface-dms 0.3.5 → 0.4.0
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 +46 -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 +46 -14
- package/dist/invites.js +41 -44
- 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
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ComponentSlotResolver } from "../component-slots";
|
|
2
|
+
/**
|
|
3
|
+
* Property a serialized component's options carry to open an extension point.
|
|
4
|
+
* A component that declares one says "whoever owns this slot may rewrite my
|
|
5
|
+
* options"; the page layout resolves every slot it finds on its way out, so a
|
|
6
|
+
* contributor that registers long after the page did is still picked up.
|
|
7
|
+
*
|
|
8
|
+
* Slots exist because a component embedded in another component's options —
|
|
9
|
+
* the form behind a table view's modal button, say — serializes synchronously,
|
|
10
|
+
* once, when its host is declared. Nothing can be grafted onto it afterwards,
|
|
11
|
+
* and re-serializing the host would drop the upload tokens its fields carry.
|
|
12
|
+
*
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export declare const COMPONENT_SLOT_KEY = "slotId";
|
|
16
|
+
/** @internal */
|
|
17
|
+
export declare const slotResolvers: Map<string, ComponentSlotResolver>;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve every registered slot found in a serialized options tree.
|
|
20
|
+
*
|
|
21
|
+
* Returns the input untouched when it declares no slot anyone owns; otherwise
|
|
22
|
+
* a deep clone, since the tree it is given is the page's cached layout and is
|
|
23
|
+
* shared by every request.
|
|
24
|
+
*
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export declare function ResolveComponentSlots<T>(options: T): Promise<T>;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.slotResolvers = exports.COMPONENT_SLOT_KEY = void 0;
|
|
4
|
+
exports.ResolveComponentSlots = ResolveComponentSlots;
|
|
5
|
+
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
6
|
+
/**
|
|
7
|
+
* Property a serialized component's options carry to open an extension point.
|
|
8
|
+
* A component that declares one says "whoever owns this slot may rewrite my
|
|
9
|
+
* options"; the page layout resolves every slot it finds on its way out, so a
|
|
10
|
+
* contributor that registers long after the page did is still picked up.
|
|
11
|
+
*
|
|
12
|
+
* Slots exist because a component embedded in another component's options —
|
|
13
|
+
* the form behind a table view's modal button, say — serializes synchronously,
|
|
14
|
+
* once, when its host is declared. Nothing can be grafted onto it afterwards,
|
|
15
|
+
* and re-serializing the host would drop the upload tokens its fields carry.
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
exports.COMPONENT_SLOT_KEY = "slotId";
|
|
20
|
+
/** @internal */
|
|
21
|
+
exports.slotResolvers = new Map();
|
|
22
|
+
function resolvableSlotIdOf(node) {
|
|
23
|
+
if (!node || typeof node !== "object" || Array.isArray(node)) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
const slotId = node[exports.COMPONENT_SLOT_KEY];
|
|
27
|
+
if (typeof slotId !== "string" || !exports.slotResolvers.has(slotId)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
return slotId;
|
|
31
|
+
}
|
|
32
|
+
function hasResolvableSlot(node) {
|
|
33
|
+
if (Array.isArray(node)) {
|
|
34
|
+
return node.some(hasResolvableSlot);
|
|
35
|
+
}
|
|
36
|
+
if (!node || typeof node !== "object") {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (resolvableSlotIdOf(node)) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
return Object.values(node).some(hasResolvableSlot);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Children first, so a slot nested inside another one still resolves — and so
|
|
46
|
+
* what a resolver contributes is never walked again, which would let a
|
|
47
|
+
* contribution declaring the slot it was contributed to loop forever.
|
|
48
|
+
*/
|
|
49
|
+
async function resolveNode(node) {
|
|
50
|
+
if (Array.isArray(node)) {
|
|
51
|
+
for (const item of node)
|
|
52
|
+
await resolveNode(item);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!node || typeof node !== "object") {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
for (const value of Object.values(node))
|
|
59
|
+
await resolveNode(value);
|
|
60
|
+
const slotId = resolvableSlotIdOf(node);
|
|
61
|
+
const resolver = slotId ? exports.slotResolvers.get(slotId) : undefined;
|
|
62
|
+
if (!resolver)
|
|
63
|
+
return;
|
|
64
|
+
const target = node;
|
|
65
|
+
try {
|
|
66
|
+
const resolved = await resolver(target);
|
|
67
|
+
if (resolved === target)
|
|
68
|
+
return;
|
|
69
|
+
for (const key of Object.keys(target))
|
|
70
|
+
delete target[key];
|
|
71
|
+
Object.assign(target, resolved);
|
|
72
|
+
// A resolver that throws leaves the component as its author declared it:
|
|
73
|
+
// the screen still renders, without the contribution. Failing the whole
|
|
74
|
+
// layout would take down a page over a contributor's bug.
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
logging_1.Logging.Error(`[dms] component slot "${slotId}" could not be resolved:`, error);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Resolve every registered slot found in a serialized options tree.
|
|
82
|
+
*
|
|
83
|
+
* Returns the input untouched when it declares no slot anyone owns; otherwise
|
|
84
|
+
* a deep clone, since the tree it is given is the page's cached layout and is
|
|
85
|
+
* shared by every request.
|
|
86
|
+
*
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
async function ResolveComponentSlots(options) {
|
|
90
|
+
if (!hasResolvableSlot(options)) {
|
|
91
|
+
return options;
|
|
92
|
+
}
|
|
93
|
+
const cloned = structuredClone(options);
|
|
94
|
+
await resolveNode(cloned);
|
|
95
|
+
return cloned;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=component-slots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 { InviteResolution } from "../db/tables/inviteResolutions.table";
|
|
2
|
+
import type { TenantMember } from "../db/tables/tenantMembers.table";
|
|
3
|
+
/**
|
|
4
|
+
* Grants at most one membership incarnation; a removed or indeterminate grant is never recreated.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export declare function ensureInviteMembership(resolution: InviteResolution): Promise<TenantMember>;
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ensureInviteMembership = ensureInviteMembership;
|
|
4
4
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
5
|
-
const inviteResolutions_model_1 = require("
|
|
6
|
-
const users_model_1 = require("
|
|
7
|
-
const tenantMembers_model_1 = require("
|
|
8
|
-
const hooks_1 = require("
|
|
5
|
+
const inviteResolutions_model_1 = require("../db/internal/inviteResolutions.model");
|
|
6
|
+
const users_model_1 = require("../auth/db/models/users.model");
|
|
7
|
+
const tenantMembers_model_1 = require("../db/models/tenantMembers.model");
|
|
8
|
+
const hooks_1 = require("../hooks");
|
|
9
9
|
const tenant_ownership_1 = require("./tenant-ownership");
|
|
10
|
+
const tenant_ownership_2 = require("../tenant-ownership");
|
|
10
11
|
async function beginMembership(resolution) {
|
|
11
12
|
const { tenantId, userId, invite } = resolution;
|
|
12
13
|
if (!userId)
|
|
@@ -47,7 +48,7 @@ async function reconcileMembership(resolution) {
|
|
|
47
48
|
async function notifyMembership(resolution, member) {
|
|
48
49
|
if (member.inviteDeliveryId !== resolution._id)
|
|
49
50
|
return;
|
|
50
|
-
await (0,
|
|
51
|
+
await (0, tenant_ownership_2.syncPlatformOwnerOnTenantOwnerChange)((0, interface_database_decorators_1.GetModel)(users_model_1.UserModel), member.userId, resolution.tenantId, member.isTenantOwner);
|
|
51
52
|
await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.MEMBER_ADDED, {
|
|
52
53
|
tenantId: resolution.tenantId,
|
|
53
54
|
userId: member.userId,
|
|
@@ -55,6 +56,11 @@ async function notifyMembership(resolution, member) {
|
|
|
55
56
|
deliveryId: resolution._id,
|
|
56
57
|
});
|
|
57
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Grants at most one membership incarnation; a removed or indeterminate grant is never recreated.
|
|
61
|
+
*
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
58
64
|
async function ensureInviteMembership(resolution) {
|
|
59
65
|
const model = (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, resolution.tenantId);
|
|
60
66
|
let current = resolution;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-membership.js","sourceRoot":"","sources":["../../src/internal/invite-membership.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { InviteResolution } from "../db/tables/inviteResolutions.table";
|
|
2
|
+
/**
|
|
3
|
+
* Inserts a replacement incarnation once; retries never resurrect a later retired token.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare function ensureInviteReplacement(resolution: InviteResolution): Promise<void>;
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ensureInviteReplacement = ensureInviteReplacement;
|
|
4
4
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
5
|
-
const inviteResolutions_model_1 = require("
|
|
6
|
-
const user_invites_model_1 = require("
|
|
7
|
-
const hooks_1 = require("
|
|
5
|
+
const inviteResolutions_model_1 = require("../db/internal/inviteResolutions.model");
|
|
6
|
+
const user_invites_model_1 = require("../db/models/user_invites.model");
|
|
7
|
+
const hooks_1 = require("../hooks");
|
|
8
8
|
function hookPayload(resolution) {
|
|
9
9
|
const replacement = resolution.replacement;
|
|
10
10
|
if (!replacement)
|
|
@@ -49,6 +49,11 @@ async function reconcileReplacement(resolution) {
|
|
|
49
49
|
}
|
|
50
50
|
await (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, resolution.tenantId).advanceMembership(resolution, "applied", "replacementPhase");
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Inserts a replacement incarnation once; retries never resurrect a later retired token.
|
|
54
|
+
*
|
|
55
|
+
* @internal
|
|
56
|
+
*/
|
|
52
57
|
async function ensureInviteReplacement(resolution) {
|
|
53
58
|
if (!resolution.replacement)
|
|
54
59
|
return;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-replacement.js","sourceRoot":"","sources":["../../src/internal/invite-replacement.ts"],"names":[],"mappings":";;AAgEA,0DAqBC;AArFD,6FAAqE;AACrE,oFAAgF;AAEhF,wEAAkE;AAClE,oCAAsE;AAEtE,SAAS,WAAW,CAAC,UAA4B;IAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;IAC3C,IAAI,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClE,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,aAAa,EAAE,WAAW,CAAC,aAAa;QACxC,OAAO,EAAE,WAAW,CAAC,SAAS;QAC9B,UAAU,EAAE,UAAU,CAAC,GAAG;KAC3B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,UAA4B;IAC1D,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;IAC3C,IAAI,CAAC,WAAW;QAAE,OAAO;IACzB,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,IAAA,oBAAY,EAAC,YAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;IACvE,IACE,CAAC,CAAC,MAAM,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAE5E,OAAO;IACT,MAAM,OAAO,GAAG,IAAA,wCAAQ,EAAC,oCAAe,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,QAAQ,EAAE,KAAK,KAAK,WAAW,CAAC,KAAK;YAAE,MAAM,KAAK,CAAC;IACzD,CAAC;IACD,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,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,UAA4B;IAE5B,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;IAC3C,IAAI,CAAC,WAAW;QAAE,OAAO;IACzB,MAAM,QAAQ,GAAG,MAAM,IAAA,wCAAQ,EAAC,oCAAe,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CACvE,WAAW,CAAC,GAAG,CAChB,CAAC;IACF,IAAI,QAAQ,EAAE,KAAK,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;IACJ,CAAC;IACD,MAAM,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAC3E,UAAU,EACV,SAAS,EACT,kBAAkB,CACnB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,uBAAuB,CAC3C,UAA4B;IAE5B,IAAI,CAAC,UAAU,CAAC,WAAW;QAAE,OAAO;IACpC,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpE,IAAI,OAAO,GAAG,UAAU,CAAC;IACzB,OAAO,OAAO,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,gBAAgB;YACzB,QAAQ,EAAE,oBAAoB;SAC/B,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5B,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC1D,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,MAAM,IAAA,oBAAY,EAAC,YAAI,CAAC,cAAc,EAAE;QACtC,GAAG,WAAW,CAAC,OAAO,CAAC;QACvB,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG;QACpC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK;KACpC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { InviteResolution } from "../db/tables/inviteResolutions.table";
|
|
2
|
+
/** @internal Completes within the caller's admission, including after admission closes. */
|
|
3
|
+
export declare function completeAdmittedInviteResolution(resolution: InviteResolution): Promise<void>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.completeAdmittedInviteResolution = completeAdmittedInviteResolution;
|
|
4
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
5
|
+
const inviteResolutions_model_1 = require("../db/internal/inviteResolutions.model");
|
|
6
|
+
const user_invites_model_1 = require("../db/models/user_invites.model");
|
|
7
|
+
const hooks_1 = require("../hooks");
|
|
8
|
+
const registry_1 = require("../invite-extensions/internal/registry");
|
|
9
|
+
const delivery_1 = require("../invite-extensions/internal/delivery");
|
|
10
|
+
const invite_membership_1 = require("./invite-membership");
|
|
11
|
+
const invite_replacement_1 = require("./invite-replacement");
|
|
12
|
+
function requireExtensions(resolution) {
|
|
13
|
+
const available = new Set((0, registry_1.listInviteExtensions)().map((extension) => extension.key));
|
|
14
|
+
const missing = resolution.extensionKeys.filter((key) => !available.has(key));
|
|
15
|
+
if (missing.length)
|
|
16
|
+
throw new Error(`Invite delivery awaits extensions: ${missing.join(", ")}`);
|
|
17
|
+
}
|
|
18
|
+
async function deliverAcceptance(resolution) {
|
|
19
|
+
const member = await (0, invite_membership_1.ensureInviteMembership)(resolution);
|
|
20
|
+
await (0, delivery_1.DeliverInviteExtensions)(resolution.invite.extensions, member, {
|
|
21
|
+
tenantId: resolution.tenantId,
|
|
22
|
+
email: resolution.invite.email,
|
|
23
|
+
inviteId: resolution.invite._id,
|
|
24
|
+
deliveryId: resolution._id,
|
|
25
|
+
}, { retryOnFailure: true });
|
|
26
|
+
}
|
|
27
|
+
/** @internal Completes within the caller's admission, including after admission closes. */
|
|
28
|
+
async function completeAdmittedInviteResolution(resolution) {
|
|
29
|
+
const model = (0, interface_database_decorators_1.GetModel)(inviteResolutions_model_1.InviteResolutionsModel, resolution.tenantId);
|
|
30
|
+
const current = await model.get(resolution._id);
|
|
31
|
+
if (!current)
|
|
32
|
+
throw new Error("Invite decision disappeared");
|
|
33
|
+
if (current.completed)
|
|
34
|
+
return;
|
|
35
|
+
requireExtensions(current);
|
|
36
|
+
if (current.reason === "accepted")
|
|
37
|
+
await deliverAcceptance(current);
|
|
38
|
+
await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.INVITE_DELETED, {
|
|
39
|
+
tenantId: current.tenantId,
|
|
40
|
+
inviteId: current.invite._id,
|
|
41
|
+
email: current.invite.email,
|
|
42
|
+
reason: current.reason,
|
|
43
|
+
extensions: current.invite.extensions,
|
|
44
|
+
deliveryId: current._id,
|
|
45
|
+
});
|
|
46
|
+
await (0, invite_replacement_1.ensureInviteReplacement)(current);
|
|
47
|
+
await (0, interface_database_decorators_1.GetModel)(user_invites_model_1.UserInviteModel, current.tenantId).delete(current.invite._id);
|
|
48
|
+
await model.update(current._id, { completed: true });
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=invite-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-resolution.js","sourceRoot":"","sources":["../../src/internal/invite-resolution.ts"],"names":[],"mappings":";;AAmCA,4EAoBC;AAvDD,6FAAqE;AACrE,oFAAgF;AAEhF,wEAAkE;AAClE,oCAA8C;AAC9C,qEAA8E;AAC9E,qEAAiF;AACjF,2DAA6D;AAC7D,6DAA+D;AAE/D,SAAS,iBAAiB,CAAC,UAA4B;IACrD,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,IAAA,+BAAoB,GAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CACzD,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,MAAM;QAChB,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,UAA4B;IAC3D,MAAM,MAAM,GAAG,MAAM,IAAA,0CAAsB,EAAC,UAAU,CAAC,CAAC;IACxD,MAAM,IAAA,kCAAuB,EAC3B,UAAU,CAAC,MAAM,CAAC,UAAU,EAC5B,MAAM,EACN;QACE,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;QAC9B,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG;QAC/B,UAAU,EAAE,UAAU,CAAC,GAAG;KAC3B,EACD,EAAE,cAAc,EAAE,IAAI,EAAE,CACzB,CAAC;AACJ,CAAC;AAED,2FAA2F;AACpF,KAAK,UAAU,gCAAgC,CACpD,UAA4B;IAE5B,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,SAAS;QAAE,OAAO;IAC9B,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;QAAE,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,IAAA,oBAAY,EAAC,YAAI,CAAC,cAAc,EAAE;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QAC5B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;QAC3B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;QACrC,UAAU,EAAE,OAAO,CAAC,GAAG;KACxB,CAAC,CAAC;IACH,MAAM,IAAA,4CAAuB,EAAC,OAAO,CAAC,CAAC;IACvC,MAAM,IAAA,wCAAQ,EAAC,oCAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7E,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { InviteEmailDelivery } from "../invites";
|
|
2
|
+
/**
|
|
3
|
+
* A pending tenant invitation, as its email needs it.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export interface TenantInviteEmail {
|
|
8
|
+
tenantId: string;
|
|
9
|
+
email: string;
|
|
10
|
+
token: string;
|
|
11
|
+
firstname?: string | null;
|
|
12
|
+
lastname?: string | null;
|
|
13
|
+
language?: string;
|
|
14
|
+
/** Who sends the invitation. */
|
|
15
|
+
inviterName?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Send a tenant invitation's email, naming the workspace and the inviter and
|
|
19
|
+
* written in the invitation's language.
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export declare function sendTenantInviteEmail(invite: TenantInviteEmail): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* {@link sendTenantInviteEmail}, reporting the outcome instead of throwing.
|
|
26
|
+
* The failure is logged with its details; the caller only learns that the
|
|
27
|
+
* email did not leave, which is what it may show the inviter.
|
|
28
|
+
*
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
export declare function deliverTenantInviteEmail(invite: TenantInviteEmail): Promise<InviteEmailDelivery>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendTenantInviteEmail = sendTenantInviteEmail;
|
|
4
|
+
exports.deliverTenantInviteEmail = deliverTenantInviteEmail;
|
|
5
|
+
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
6
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
7
|
+
const auth_1 = require("../auth");
|
|
8
|
+
const db_1 = require("../db");
|
|
9
|
+
const invitee_display_name_1 = require("../invitee-display-name");
|
|
10
|
+
async function tenantName(tenantId) {
|
|
11
|
+
const tenant = await (0, interface_database_decorators_1.GetModel)(db_1.TenantModel).get(tenantId);
|
|
12
|
+
return tenant?.name || undefined;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Send a tenant invitation's email, naming the workspace and the inviter and
|
|
16
|
+
* written in the invitation's language.
|
|
17
|
+
*
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
async function sendTenantInviteEmail(invite) {
|
|
21
|
+
await (0, auth_1.sendAdminInviteEmail)(invite.email, invite.token, (0, invitee_display_name_1.inviteeDisplayName)(invite.firstname, invite.lastname), {
|
|
22
|
+
workspaceName: await tenantName(invite.tenantId),
|
|
23
|
+
inviterName: invite.inviterName,
|
|
24
|
+
language: invite.language,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* {@link sendTenantInviteEmail}, reporting the outcome instead of throwing.
|
|
29
|
+
* The failure is logged with its details; the caller only learns that the
|
|
30
|
+
* email did not leave, which is what it may show the inviter.
|
|
31
|
+
*
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
async function deliverTenantInviteEmail(invite) {
|
|
35
|
+
try {
|
|
36
|
+
await sendTenantInviteEmail(invite);
|
|
37
|
+
return "sent";
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
logging_1.Logging.Error(`[DMS] invite email to "${invite.email}" could not be sent:`, error);
|
|
41
|
+
return "failed";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=invites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invites.js","sourceRoot":"","sources":["../../src/internal/invites.ts"],"names":[],"mappings":";;AAkCA,sDAaC;AASD,4DAaC;AArED,gEAA6D;AAC7D,6FAAqE;AACrE,kCAA+C;AAC/C,8BAAoC;AAEpC,kEAA6D;AAE7D,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,MAAM,MAAM,GAAG,MAAM,IAAA,wCAAQ,EAAC,gBAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzD,OAAO,MAAM,EAAE,IAAI,IAAI,SAAS,CAAC;AACnC,CAAC;AAkBD;;;;;GAKG;AACI,KAAK,UAAU,qBAAqB,CACzC,MAAyB;IAEzB,MAAM,IAAA,2BAAoB,EACxB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,KAAK,EACZ,IAAA,yCAAkB,EAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,EACrD;QACE,aAAa,EAAE,MAAM,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChD,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,wBAAwB,CAC5C,MAAyB;IAEzB,IAAI,CAAC;QACH,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iBAAO,CAAC,KAAK,CACX,0BAA0B,MAAM,CAAC,KAAK,sBAAsB,EAC5D,KAAK,CACN,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PermissionGate } from "../permission-gate";
|
|
2
|
+
/**
|
|
3
|
+
* Whether `gate` names a permission at all.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare function isPermissionGated(gate: PermissionGate | undefined): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* The permission id `gate` requires on an owner whose own permission id is
|
|
10
|
+
* `ownerPermissionId`. Undefined for an ungated declaration, and for a
|
|
11
|
+
* relative name on an owner that never registered — which
|
|
12
|
+
* {@link holdsPermissionGate} refuses.
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolvePermissionGateId(gate: PermissionGate | undefined, ownerPermissionId: string | undefined): string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Whether a caller holding `permissions` passes `gate` on its owner. An
|
|
19
|
+
* ungated declaration passes; a gate that cannot be resolved fails closed.
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export declare function holdsPermissionGate(permissions: Set<string>, gate: PermissionGate | undefined, ownerPermissionId: string | undefined): Promise<boolean>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isPermissionGated = isPermissionGated;
|
|
4
|
+
exports.resolvePermissionGateId = resolvePermissionGateId;
|
|
5
|
+
exports.holdsPermissionGate = holdsPermissionGate;
|
|
6
|
+
const component_1 = require("../component");
|
|
7
|
+
const permissions_1 = require("../permissions");
|
|
8
|
+
/**
|
|
9
|
+
* Whether `gate` names a permission at all.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
function isPermissionGated(gate) {
|
|
14
|
+
return gate?.permission !== undefined || gate?.permissionId !== undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The permission id `gate` requires on an owner whose own permission id is
|
|
18
|
+
* `ownerPermissionId`. Undefined for an ungated declaration, and for a
|
|
19
|
+
* relative name on an owner that never registered — which
|
|
20
|
+
* {@link holdsPermissionGate} refuses.
|
|
21
|
+
*
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
function resolvePermissionGateId(gate, ownerPermissionId) {
|
|
25
|
+
if (gate?.permissionId !== undefined)
|
|
26
|
+
return gate.permissionId;
|
|
27
|
+
if (gate?.permission === undefined)
|
|
28
|
+
return undefined;
|
|
29
|
+
return (0, component_1.resolveButtonPermissionId)(gate.permission, ownerPermissionId);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Whether a caller holding `permissions` passes `gate` on its owner. An
|
|
33
|
+
* ungated declaration passes; a gate that cannot be resolved fails closed.
|
|
34
|
+
*
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
async function holdsPermissionGate(permissions, gate, ownerPermissionId) {
|
|
38
|
+
if (!isPermissionGated(gate))
|
|
39
|
+
return true;
|
|
40
|
+
const permissionId = resolvePermissionGateId(gate, ownerPermissionId);
|
|
41
|
+
return !!permissionId && (await (0, permissions_1.HasPermission)(permissions, permissionId));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=permission-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-gate.js","sourceRoot":"","sources":["../../src/internal/permission-gate.ts"],"names":[],"mappings":";;AASA,8CAEC;AAUD,0DAOC;AAQD,kDAQC;AA5CD,4CAAyD;AACzD,gDAA+C;AAG/C;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,IAAgC;IAChE,OAAO,IAAI,EAAE,UAAU,KAAK,SAAS,IAAI,IAAI,EAAE,YAAY,KAAK,SAAS,CAAC;AAC5E,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,uBAAuB,CACrC,IAAgC,EAChC,iBAAqC;IAErC,IAAI,IAAI,EAAE,YAAY,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,YAAY,CAAC;IAC/D,IAAI,IAAI,EAAE,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACrD,OAAO,IAAA,qCAAyB,EAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AACvE,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,mBAAmB,CACvC,WAAwB,EACxB,IAAgC,EAChC,iBAAqC;IAErC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACtE,OAAO,CAAC,CAAC,YAAY,IAAI,CAAC,MAAM,IAAA,2BAAa,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The surface flags a denied tenant may still reach.
|
|
3
|
+
*
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export interface GatedSurface {
|
|
7
|
+
bypassTenantAccessGate?: boolean;
|
|
8
|
+
publicAccess?: boolean;
|
|
9
|
+
authOnly?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Whether a surface survives a denying gate.
|
|
13
|
+
*
|
|
14
|
+
* The single answer every access path must ask, so the menu, the page layout
|
|
15
|
+
* route and realtime page access can never drift apart: each of them decides
|
|
16
|
+
* the same way, then returns outright rather than emptying a permission set
|
|
17
|
+
* and hoping the downstream check agrees.
|
|
18
|
+
*
|
|
19
|
+
* Surfaces flagged `bypassTenantAccessGate` opt in explicitly (billing and
|
|
20
|
+
* other recovery screens). `publicAccess` and `authOnly` surfaces survive too:
|
|
21
|
+
* they drop permission checks by design and carry the auth screens and the
|
|
22
|
+
* suspended-workspace screen, which a denied tenant has to reach to recover.
|
|
23
|
+
* Permission checks still apply on top of this — a surface that survives the
|
|
24
|
+
* gate is not thereby granted to everyone.
|
|
25
|
+
*
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export declare function gateAllowsSurface(surface: GatedSurface, gateDenied: boolean): boolean;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.gateAllowsSurface = gateAllowsSurface;
|
|
4
|
+
/**
|
|
5
|
+
* Whether a surface survives a denying gate.
|
|
6
|
+
*
|
|
7
|
+
* The single answer every access path must ask, so the menu, the page layout
|
|
8
|
+
* route and realtime page access can never drift apart: each of them decides
|
|
9
|
+
* the same way, then returns outright rather than emptying a permission set
|
|
10
|
+
* and hoping the downstream check agrees.
|
|
11
|
+
*
|
|
12
|
+
* Surfaces flagged `bypassTenantAccessGate` opt in explicitly (billing and
|
|
13
|
+
* other recovery screens). `publicAccess` and `authOnly` surfaces survive too:
|
|
14
|
+
* they drop permission checks by design and carry the auth screens and the
|
|
15
|
+
* suspended-workspace screen, which a denied tenant has to reach to recover.
|
|
16
|
+
* Permission checks still apply on top of this — a surface that survives the
|
|
17
|
+
* gate is not thereby granted to everyone.
|
|
18
|
+
*
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
function gateAllowsSurface(surface, gateDenied) {
|
|
22
|
+
if (!gateDenied)
|
|
23
|
+
return true;
|
|
24
|
+
return (surface.bypassTenantAccessGate === true ||
|
|
25
|
+
surface.publicAccess === true ||
|
|
26
|
+
surface.authOnly === true);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=tenant-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-access.js","sourceRoot":"","sources":["../../src/internal/tenant-access.ts"],"names":[],"mappings":";;AA4BA,8CAUC;AA3BD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,iBAAiB,CAC/B,OAAqB,EACrB,UAAmB;IAEnB,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,CACL,OAAO,CAAC,sBAAsB,KAAK,IAAI;QACvC,OAAO,CAAC,YAAY,KAAK,IAAI;QAC7B,OAAO,CAAC,QAAQ,KAAK,IAAI,CAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { UserModel } from "../auth/db";
|
|
2
|
+
import type { TenantMembershipPatch } from "../tenant-ownership";
|
|
3
|
+
/** @internal Caller must hold a confirmed tenant lifecycle admission until this resolves. */
|
|
4
|
+
export declare function applyAdmittedTenantOwnership(userModel: UserModel, userId: string, tenantId: string, patch: TenantMembershipPatch): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Compatibility shim: in non-SaaS mode, the legacy `users.owner` boolean is
|
|
7
|
+
* kept in sync with `TenantMember.isTenantOwner` on the default tenant. This
|
|
8
|
+
* is a no-op in SaaS mode (where `users.owner` reflects platform ownership
|
|
9
|
+
* separately, see `RegisterSaasMode`) and outside the default tenant.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare function mirrorPlatformOwner(userModel: UserModel, userId: string, tenantId: string, isTenantOwner: boolean): Promise<void>;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyAdmittedTenantOwnership = applyAdmittedTenantOwnership;
|
|
4
|
+
exports.mirrorPlatformOwner = mirrorPlatformOwner;
|
|
5
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
6
|
+
const tenantMembers_model_1 = require("../db/models/tenantMembers.model");
|
|
7
|
+
const hooks_1 = require("../hooks");
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
const saas_mode_1 = require("../utils/saas-mode");
|
|
10
|
+
function buildTenantMemberId(tenantId, userId) {
|
|
11
|
+
return `${tenantId}:${userId}`;
|
|
12
|
+
}
|
|
13
|
+
async function upsertTenantMembership(userId, tenantId, patch) {
|
|
14
|
+
const memberModel = (0, interface_database_decorators_1.GetModel)(tenantMembers_model_1.TenantMemberModel, tenantId);
|
|
15
|
+
const existing = await memberModel.getByUser(userId);
|
|
16
|
+
if (existing) {
|
|
17
|
+
if (patch.deliveryId)
|
|
18
|
+
return;
|
|
19
|
+
existing.roleIds = patch.roleIds;
|
|
20
|
+
existing.isTenantOwner = patch.isTenantOwner;
|
|
21
|
+
await memberModel.update(existing);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const member = {
|
|
26
|
+
_id: buildTenantMemberId(tenantId, userId),
|
|
27
|
+
userId,
|
|
28
|
+
roleIds: patch.roleIds,
|
|
29
|
+
isTenantOwner: patch.isTenantOwner,
|
|
30
|
+
joinedAt: new Date(),
|
|
31
|
+
invitedBy: patch.invitedBy ?? null,
|
|
32
|
+
};
|
|
33
|
+
if (patch.deliveryId)
|
|
34
|
+
member.inviteDeliveryId = patch.deliveryId;
|
|
35
|
+
await memberModel.insert(member);
|
|
36
|
+
}
|
|
37
|
+
catch (insertError) {
|
|
38
|
+
const recheck = await memberModel.getByUser(userId);
|
|
39
|
+
if (!recheck)
|
|
40
|
+
throw insertError;
|
|
41
|
+
if (patch.deliveryId)
|
|
42
|
+
return;
|
|
43
|
+
recheck.roleIds = patch.roleIds;
|
|
44
|
+
recheck.isTenantOwner = patch.isTenantOwner;
|
|
45
|
+
await memberModel.update(recheck);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** @internal Caller must hold a confirmed tenant lifecycle admission until this resolves. */
|
|
49
|
+
async function applyAdmittedTenantOwnership(userModel, userId, tenantId, patch) {
|
|
50
|
+
const memberModel = (0, interface_database_decorators_1.GetModel)(tenantMembers_model_1.TenantMemberModel, tenantId);
|
|
51
|
+
const existing = await memberModel.getByUser(userId);
|
|
52
|
+
const isNewMember = !existing;
|
|
53
|
+
if (isNewMember && !patch.deliveryId) {
|
|
54
|
+
const payload = {
|
|
55
|
+
tenantId,
|
|
56
|
+
userId,
|
|
57
|
+
isTenantOwner: patch.isTenantOwner,
|
|
58
|
+
};
|
|
59
|
+
await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.MEMBER_BEING_ADDED, payload);
|
|
60
|
+
}
|
|
61
|
+
await upsertTenantMembership(userId, tenantId, patch);
|
|
62
|
+
if (!patch.deliveryId) {
|
|
63
|
+
await mirrorPlatformOwner(userModel, userId, tenantId, patch.isTenantOwner);
|
|
64
|
+
}
|
|
65
|
+
if (isNewMember && !patch.deliveryId) {
|
|
66
|
+
const payload = {
|
|
67
|
+
tenantId,
|
|
68
|
+
userId,
|
|
69
|
+
isTenantOwner: patch.isTenantOwner,
|
|
70
|
+
};
|
|
71
|
+
await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.MEMBER_ADDED, payload);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Compatibility shim: in non-SaaS mode, the legacy `users.owner` boolean is
|
|
76
|
+
* kept in sync with `TenantMember.isTenantOwner` on the default tenant. This
|
|
77
|
+
* is a no-op in SaaS mode (where `users.owner` reflects platform ownership
|
|
78
|
+
* separately, see `RegisterSaasMode`) and outside the default tenant.
|
|
79
|
+
*
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
async function mirrorPlatformOwner(userModel, userId, tenantId, isTenantOwner) {
|
|
83
|
+
if (tenantId !== constants_1.DEFAULT_TENANT_ID)
|
|
84
|
+
return;
|
|
85
|
+
if (await (0, saas_mode_1.isSaasMode)())
|
|
86
|
+
return;
|
|
87
|
+
const user = await userModel.get(userId);
|
|
88
|
+
if (!user)
|
|
89
|
+
return;
|
|
90
|
+
if (user.owner === isTenantOwner)
|
|
91
|
+
return;
|
|
92
|
+
user.owner = isTenantOwner;
|
|
93
|
+
await userModel.update(user);
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=tenant-ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-ownership.js","sourceRoot":"","sources":["../../src/internal/tenant-ownership.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { UploadConstraints } from "@antelopejs/interface-file-storage";
|
|
2
|
+
/** @internal */
|
|
3
|
+
export interface UploadTokenClaims {
|
|
4
|
+
pageId?: string;
|
|
5
|
+
componentId?: string;
|
|
6
|
+
storage?: string;
|
|
7
|
+
path?: string;
|
|
8
|
+
field?: string;
|
|
9
|
+
visibility?: "private" | "public";
|
|
10
|
+
writePermission?: string;
|
|
11
|
+
}
|
|
12
|
+
/** @internal */
|
|
13
|
+
export type NativeUploadFieldRegistration = UploadTokenClaims & {
|
|
14
|
+
pageId: string;
|
|
15
|
+
componentId: string;
|
|
16
|
+
readPermissions: string[];
|
|
17
|
+
/** The field's own declared constraints, enforced at presign on top of the global ones. */
|
|
18
|
+
constraints?: UploadConstraints;
|
|
19
|
+
};
|