@antelopejs/interface-dms 0.3.5 → 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 +27 -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
|
@@ -7,11 +7,21 @@ exports.readPayload = readPayload;
|
|
|
7
7
|
const interface_api_util_1 = require("@antelopejs/interface-api-util");
|
|
8
8
|
const field_ids_1 = require("./field-ids");
|
|
9
9
|
const registry_1 = require("./registry");
|
|
10
|
+
/** @internal */
|
|
10
11
|
exports.HTTP_BAD_REQUEST = 400;
|
|
11
12
|
function issuesOf(error) {
|
|
12
13
|
const issues = error.issues;
|
|
13
14
|
return Array.isArray(issues) ? issues : undefined;
|
|
14
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Report the failure against the ids the browser knows — the prefixed ones it
|
|
18
|
+
* submitted — so the invite form can point at the offending field rather than
|
|
19
|
+
* at a name only the extension uses.
|
|
20
|
+
*
|
|
21
|
+
* An issue raised on the object itself (a schema-wide `refine`) names no field:
|
|
22
|
+
* it keeps an empty path rather than being handed a fabricated one, which the
|
|
23
|
+
* form could not attach to anything either way.
|
|
24
|
+
*/
|
|
15
25
|
function describeFailure(key, error) {
|
|
16
26
|
const issues = issuesOf(error);
|
|
17
27
|
if (!issues)
|
|
@@ -25,6 +35,11 @@ function describeFailure(key, error) {
|
|
|
25
35
|
})),
|
|
26
36
|
};
|
|
27
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* The submitted values of one extension's fields, keyed by unprefixed id.
|
|
40
|
+
*
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
28
43
|
function sliceOf(key, body) {
|
|
29
44
|
const slice = {};
|
|
30
45
|
for (const [id, value] of Object.entries(body)) {
|
|
@@ -35,9 +50,24 @@ function sliceOf(key, body) {
|
|
|
35
50
|
}
|
|
36
51
|
return slice;
|
|
37
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* @throws HTTPResult 400 when the slice does not satisfy the schema
|
|
55
|
+
*
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
38
58
|
function assertSliceValid(info, slice) {
|
|
39
59
|
(0, interface_api_util_1.assertValidation)(slice, (v) => info.schema.parse(v), (error) => describeFailure(info.key, error), exports.HTTP_BAD_REQUEST);
|
|
40
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Parse the stored submission into the payload `onAccept` is typed for.
|
|
63
|
+
*
|
|
64
|
+
* The schema runs here rather than being trusted from storage: an invitation
|
|
65
|
+
* can outlive the version of the module that wrote its payload, and this is
|
|
66
|
+
* also where a transforming schema produces its output — exactly once, on the
|
|
67
|
+
* input as the admin submitted it.
|
|
68
|
+
*
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
41
71
|
function readPayload(info, payloads, options) {
|
|
42
72
|
const stored = payloads?.[info.key];
|
|
43
73
|
if (stored === undefined)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-slices.js","sourceRoot":"","sources":["../../../src/invite-extensions/internal/payload-slices.ts"],"names":[],"mappings":";;;AAsDA,0BAYC;AAOD,4CAUC;AAYD,kCAmBC;AAlHD,uEAAkE;AAClE,2CAGqB;AACrB,yCAAuD;AAIvD,gBAAgB;AACH,QAAA,gBAAgB,GAAG,GAAG,CAAC;AAYpC,SAAS,QAAQ,CAAC,KAAc;IAC9B,MAAM,MAAM,GAAI,KAA8B,CAAC,MAAM,CAAC;IACtD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAsB,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,eAAe,CAAC,GAAW,EAAE,KAAc;IAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,IAAI,CAAC,MAAM;gBACf,CAAC,CAAC,CAAC,IAAA,kCAAsB,EAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClE,CAAC,CAAC,EAAE;YACN,OAAO;SACR,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,OAAO,CACrB,GAAW,EACX,IAA6B;IAE7B,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAA,uCAA2B,EAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,KAAK,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;YACvB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAC9B,IAAyB,EACzB,KAA8B;IAE9B,IAAA,qCAAgB,EACd,KAAK,EACL,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAC3B,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAC3C,wBAAgB,CACjB,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,WAAW,CACzB,IAAyB,EACzB,QAAoD,EACpD,OAA8B;IAE9B,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,IAAA,oCAAyB,EACvB,IAAI,CAAC,GAAG,EACR,yBAAyB,EACzB,MAAM,CAAC,KAAK,CACb,CAAC;QACF,IAAI,OAAO,CAAC,cAAc;YAAE,MAAM,MAAM,CAAC,KAAK,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { InviteExtensionInfo, InviteFieldContribution } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* A registration plus the contribution it serializes to. The contribution is
|
|
4
|
+
* built once, lazily, and cached on the entry: serializing runs the form's
|
|
5
|
+
* option transforms — which is where its upload fields claim their tokens —
|
|
6
|
+
* and those must not be re-signed on every layout request.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export interface InviteExtensionEntry {
|
|
11
|
+
info: InviteExtensionInfo;
|
|
12
|
+
contribution?: Promise<InviteFieldContribution | undefined>;
|
|
13
|
+
}
|
|
14
|
+
/** @internal */
|
|
15
|
+
export declare const inviteExtensions: Map<string, InviteExtensionEntry>;
|
|
16
|
+
/** @internal */
|
|
17
|
+
export declare function listInviteExtensionEntries(): InviteExtensionEntry[];
|
|
18
|
+
/** @internal */
|
|
19
|
+
export declare function listInviteExtensions(): InviteExtensionInfo[];
|
|
20
|
+
/** @internal */
|
|
21
|
+
export declare function getInviteExtension(key: string): InviteExtensionInfo | undefined;
|
|
22
|
+
/** @internal */
|
|
23
|
+
export declare function logInviteExtensionFailure(key: string, action: string, error: unknown): void;
|
|
24
|
+
/**
|
|
25
|
+
* The last registration wins, rather than a key collision being fatal: a hot
|
|
26
|
+
* reload registers the replacement before the old one unregisters, so the
|
|
27
|
+
* common case of a key already being held is a module reclaiming its own.
|
|
28
|
+
* Throwing there would fail the reloaded module's construction and — once
|
|
29
|
+
* the departing one unregisters — leave the invite modal without the fields
|
|
30
|
+
* until a full restart.
|
|
31
|
+
*
|
|
32
|
+
* The holder is told apart by the module that registered it, not by the
|
|
33
|
+
* object: a reload re-registers a new one, and a DMS reload is replayed a
|
|
34
|
+
* fresh view of the same one. Two different modules on one key would
|
|
35
|
+
* overwrite each other's payload on the invitation, which is a declaration
|
|
36
|
+
* error; it is reported rather than raised, for the reason above.
|
|
37
|
+
*
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
export declare function applyInviteExtension(info: InviteExtensionInfo): void;
|
|
41
|
+
/** @internal */
|
|
42
|
+
export declare function revokeInviteExtension(info: InviteExtensionInfo): void;
|
|
43
|
+
/**
|
|
44
|
+
* Test seam: drops every registration without going through the proxy.
|
|
45
|
+
*
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
48
|
+
export declare function clearInviteExtensions(): void;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inviteExtensions = void 0;
|
|
4
|
+
exports.listInviteExtensionEntries = listInviteExtensionEntries;
|
|
5
|
+
exports.listInviteExtensions = listInviteExtensions;
|
|
6
|
+
exports.getInviteExtension = getInviteExtension;
|
|
7
|
+
exports.logInviteExtensionFailure = logInviteExtensionFailure;
|
|
8
|
+
exports.applyInviteExtension = applyInviteExtension;
|
|
9
|
+
exports.revokeInviteExtension = revokeInviteExtension;
|
|
10
|
+
exports.clearInviteExtensions = clearInviteExtensions;
|
|
11
|
+
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
12
|
+
/** @internal */
|
|
13
|
+
exports.inviteExtensions = new Map();
|
|
14
|
+
/** @internal */
|
|
15
|
+
function listInviteExtensionEntries() {
|
|
16
|
+
return [...exports.inviteExtensions.values()];
|
|
17
|
+
}
|
|
18
|
+
/** @internal */
|
|
19
|
+
function listInviteExtensions() {
|
|
20
|
+
return listInviteExtensionEntries().map((entry) => entry.info);
|
|
21
|
+
}
|
|
22
|
+
/** @internal */
|
|
23
|
+
function getInviteExtension(key) {
|
|
24
|
+
return exports.inviteExtensions.get(key)?.info;
|
|
25
|
+
}
|
|
26
|
+
/** @internal */
|
|
27
|
+
function logInviteExtensionFailure(key, action, error) {
|
|
28
|
+
logging_1.Logging.Error(`[dms] invite extension "${key}" failed to ${action}:`, error);
|
|
29
|
+
}
|
|
30
|
+
// An unresolved module matches nothing: two registrations whose owner is
|
|
31
|
+
// unknown are not known to be the same module, so they still warn.
|
|
32
|
+
function isSameRegisteringModule(held, incoming) {
|
|
33
|
+
if (held === incoming)
|
|
34
|
+
return true;
|
|
35
|
+
return held.moduleId !== undefined && held.moduleId === incoming.moduleId;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The last registration wins, rather than a key collision being fatal: a hot
|
|
39
|
+
* reload registers the replacement before the old one unregisters, so the
|
|
40
|
+
* common case of a key already being held is a module reclaiming its own.
|
|
41
|
+
* Throwing there would fail the reloaded module's construction and — once
|
|
42
|
+
* the departing one unregisters — leave the invite modal without the fields
|
|
43
|
+
* until a full restart.
|
|
44
|
+
*
|
|
45
|
+
* The holder is told apart by the module that registered it, not by the
|
|
46
|
+
* object: a reload re-registers a new one, and a DMS reload is replayed a
|
|
47
|
+
* fresh view of the same one. Two different modules on one key would
|
|
48
|
+
* overwrite each other's payload on the invitation, which is a declaration
|
|
49
|
+
* error; it is reported rather than raised, for the reason above.
|
|
50
|
+
*
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
function applyInviteExtension(info) {
|
|
54
|
+
const existing = exports.inviteExtensions.get(info.key);
|
|
55
|
+
if (existing && !isSameRegisteringModule(existing.info, info)) {
|
|
56
|
+
logging_1.Logging.Warn(`[dms] invite extension key "${info.key}" was already registered by another module; the latest registration now owns it. If two modules claim this key, one of them silently loses its payload — give them distinct keys.`);
|
|
57
|
+
}
|
|
58
|
+
exports.inviteExtensions.set(info.key, { info });
|
|
59
|
+
}
|
|
60
|
+
/** @internal */
|
|
61
|
+
function revokeInviteExtension(info) {
|
|
62
|
+
const existing = exports.inviteExtensions.get(info.key);
|
|
63
|
+
// A hot reload registers the replacement before the old one unregisters,
|
|
64
|
+
// so an unconditional delete would drop the live registration.
|
|
65
|
+
if (!existing || existing.info !== info)
|
|
66
|
+
return;
|
|
67
|
+
exports.inviteExtensions.delete(info.key);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Test seam: drops every registration without going through the proxy.
|
|
71
|
+
*
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
function clearInviteExtensions() {
|
|
75
|
+
exports.inviteExtensions.clear();
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/invite-extensions/internal/registry.ts"],"names":[],"mappings":";;;AAoBA,gEAEC;AAGD,oDAEC;AAGD,gDAIC;AAGD,8DAMC;AA4BD,oDAQC;AAGD,sDAMC;AAOD,sDAEC;AAjGD,gEAA6D;AAgB7D,gBAAgB;AACH,QAAA,gBAAgB,GAAG,IAAI,GAAG,EAAgC,CAAC;AAExE,gBAAgB;AAChB,SAAgB,0BAA0B;IACxC,OAAO,CAAC,GAAG,wBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,gBAAgB;AAChB,SAAgB,oBAAoB;IAClC,OAAO,0BAA0B,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,gBAAgB;AAChB,SAAgB,kBAAkB,CAChC,GAAW;IAEX,OAAO,wBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AACzC,CAAC;AAED,gBAAgB;AAChB,SAAgB,yBAAyB,CACvC,GAAW,EACX,MAAc,EACd,KAAc;IAEd,iBAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,eAAe,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;AAC/E,CAAC;AAED,yEAAyE;AACzE,mEAAmE;AACnE,SAAS,uBAAuB,CAC9B,IAAyB,EACzB,QAA6B;IAE7B,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC;AAC5E,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,oBAAoB,CAAC,IAAyB;IAC5D,MAAM,QAAQ,GAAG,wBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,QAAQ,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAC9D,iBAAO,CAAC,IAAI,CACV,+BAA+B,IAAI,CAAC,GAAG,mLAAmL,CAC3N,CAAC;IACJ,CAAC;IACD,wBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,gBAAgB;AAChB,SAAgB,qBAAqB,CAAC,IAAyB;IAC7D,MAAM,QAAQ,GAAG,wBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,yEAAyE;IACzE,+DAA+D;IAC/D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO;IAChD,wBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB;IACnC,wBAAgB,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { FieldGroupSerialized, FormBuilder } from "../../base/form";
|
|
2
|
+
import type { WatchAction } from "../../base/types/watch";
|
|
3
|
+
import type { ZodType, ZodTypeDef } from "zod";
|
|
4
|
+
import type { PlacementSide } from "../../component";
|
|
5
|
+
import type { InviteAcceptHandler, InviteCleanupHandler, InviteUpdateHandler } from "../types";
|
|
6
|
+
/**
|
|
7
|
+
* Resolved placement of a registered extension.
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export interface ResolvedInvitePlacement {
|
|
12
|
+
side: PlacementSide;
|
|
13
|
+
anchorField?: string;
|
|
14
|
+
order: number;
|
|
15
|
+
}
|
|
16
|
+
/** @internal */
|
|
17
|
+
export interface InviteDeliveryOptions {
|
|
18
|
+
/** Retains durable work by propagating contributor failures after all callbacks run. */
|
|
19
|
+
retryOnFailure?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A registration as the registry holds it: placement resolved, payload type
|
|
23
|
+
* erased. The object itself is the handle — it is what the registering proxy
|
|
24
|
+
* hands back to unregister when the extending module stops.
|
|
25
|
+
*
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export interface InviteExtensionInfo {
|
|
29
|
+
key: string;
|
|
30
|
+
component: FormBuilder;
|
|
31
|
+
schema: ZodType<unknown, ZodTypeDef, unknown>;
|
|
32
|
+
onAccept: InviteAcceptHandler<unknown>;
|
|
33
|
+
onCleanup?: InviteCleanupHandler<unknown>;
|
|
34
|
+
/** Unset reads as `true`, as it does on the options. */
|
|
35
|
+
editable?: boolean;
|
|
36
|
+
onUpdate?: InviteUpdateHandler<unknown>;
|
|
37
|
+
label?: string;
|
|
38
|
+
description?: string;
|
|
39
|
+
placement: ResolvedInvitePlacement;
|
|
40
|
+
/** The module that registered the extension, undefined when unresolved. */
|
|
41
|
+
moduleId?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* One extension's contribution to the invite form, serialized once when it
|
|
45
|
+
* registers: the block of fields, the JSON-schema entries the browser
|
|
46
|
+
* validates them against, and the watches the contributed form declared —
|
|
47
|
+
* all keyed by the prefixed field ids the merged form uses.
|
|
48
|
+
*
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
export interface InviteFieldContribution {
|
|
52
|
+
key: string;
|
|
53
|
+
side: PlacementSide;
|
|
54
|
+
anchorField?: string;
|
|
55
|
+
order: number;
|
|
56
|
+
editable: boolean;
|
|
57
|
+
group: FieldGroupSerialized;
|
|
58
|
+
properties: Record<string, unknown>;
|
|
59
|
+
requiredProperties: string[];
|
|
60
|
+
watchActions: WatchAction[];
|
|
61
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/invite-extensions/internal/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,17 +1,49 @@
|
|
|
1
1
|
import { RegisteringProxy } from "@antelopejs/interface-core";
|
|
2
|
-
import type { InviteExtensionInfo
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
import type { InviteExtensionInfo } from "./internal/types";
|
|
3
|
+
import type { InviteExtensionOptions } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* Attach module data to member invitations: the fields of `component` are
|
|
6
|
+
* merged into the DMS invite modal, the values the admin fills are validated
|
|
7
|
+
* against `schema` and stored on the invitation, and `onAccept` receives them
|
|
8
|
+
* once the invitee is a member of the tenant.
|
|
9
|
+
*
|
|
10
|
+
* Placement follows `@RegisterPageExtension`: `anchorField` names a field of
|
|
11
|
+
* the invite form to sit before or after, `order` breaks ties between
|
|
12
|
+
* extensions landing at the same spot, and equal orders fall back to the
|
|
13
|
+
* extension key — so the modal assembles the same way on every host and
|
|
14
|
+
* across restarts, never depending on module start order.
|
|
15
|
+
*
|
|
16
|
+
* Field ids are namespaced by `key`, so two extensions may both contribute a
|
|
17
|
+
* `plan` field; `schema` and `onAccept` see them unprefixed.
|
|
18
|
+
*
|
|
19
|
+
* An invitee who already has an account is added to the tenant on the spot and
|
|
20
|
+
* no invitation row is written: `onAccept` still runs, with `inviteId` unset.
|
|
21
|
+
* `onCleanup` runs when the invitation is cancelled or replaced and when a
|
|
22
|
+
* member is removed — never on acceptance, which also deletes the invitation.
|
|
23
|
+
*
|
|
24
|
+
* The fields also appear in the edit form of a pending invitation, prefilled
|
|
25
|
+
* with the stored payload: an admin can change it until the invitee accepts,
|
|
26
|
+
* unless `editable` is `false`, and `onUpdate` hears about each change.
|
|
27
|
+
*
|
|
28
|
+
* The registration is bound to the registering module and lifted when it
|
|
29
|
+
* stops, so the fields leave the modal with it.
|
|
30
|
+
*
|
|
31
|
+
* ```ts
|
|
32
|
+
* RegisterInviteExtension({
|
|
33
|
+
* key: "billing",
|
|
34
|
+
* component: Form({ fields: [{ id: "costCenter", type: new StringType() }] }),
|
|
35
|
+
* schema: z.object({ costCenter: z.string().min(1) }),
|
|
36
|
+
* onAccept: (payload, member) => assignCostCenter(member, payload.costCenter),
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @returns Removes this extension, for a module that drops it while staying
|
|
41
|
+
* loaded.
|
|
42
|
+
*/
|
|
10
43
|
export declare function RegisterInviteExtension<T>(options: InviteExtensionOptions<T>): () => void;
|
|
44
|
+
/**
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
11
47
|
export declare namespace internal {
|
|
12
48
|
const RegisterInviteExtension: RegisteringProxy<(info: InviteExtensionInfo) => void>;
|
|
13
|
-
function applyInviteExtension(info: InviteExtensionInfo): void;
|
|
14
|
-
function revokeInviteExtension(info: InviteExtensionInfo): void;
|
|
15
|
-
function clearInviteExtensions(): void;
|
|
16
49
|
}
|
|
17
|
-
export declare function logInviteExtensionFailure(key: string, action: string, error: unknown): void;
|
|
@@ -1,28 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.internal = void 0;
|
|
4
|
-
exports.listInviteExtensionEntries = listInviteExtensionEntries;
|
|
5
|
-
exports.listInviteExtensions = listInviteExtensions;
|
|
6
|
-
exports.getInviteExtension = getInviteExtension;
|
|
7
4
|
exports.RegisterInviteExtension = RegisterInviteExtension;
|
|
8
|
-
exports.logInviteExtensionFailure = logInviteExtensionFailure;
|
|
9
5
|
const interface_core_1 = require("@antelopejs/interface-core");
|
|
10
|
-
const
|
|
11
|
-
const field_ids_1 = require("./field-ids");
|
|
12
|
-
const inviteExtensions = new Map();
|
|
13
|
-
function listInviteExtensionEntries() {
|
|
14
|
-
return [...inviteExtensions.values()];
|
|
15
|
-
}
|
|
16
|
-
function listInviteExtensions() {
|
|
17
|
-
return listInviteExtensionEntries().map((entry) => entry.info);
|
|
18
|
-
}
|
|
19
|
-
function getInviteExtension(key) {
|
|
20
|
-
return inviteExtensions.get(key)?.info;
|
|
21
|
-
}
|
|
6
|
+
const field_ids_1 = require("./internal/field-ids");
|
|
22
7
|
const DEFAULT_PLACEMENT = { side: "end", order: 0 };
|
|
23
8
|
function resolvePlacement(options) {
|
|
24
9
|
if (!options)
|
|
25
10
|
return DEFAULT_PLACEMENT;
|
|
11
|
+
// `anchorField` is set only when the placement names one: its absence is
|
|
12
|
+
// what the assembler reads as "append at the end".
|
|
26
13
|
const placement = {
|
|
27
14
|
side: options.side ?? DEFAULT_PLACEMENT.side,
|
|
28
15
|
order: options.order ?? DEFAULT_PLACEMENT.order,
|
|
@@ -39,11 +26,54 @@ function assertUsableKey(key) {
|
|
|
39
26
|
throw new Error(`Invite extension key "${key}" may not contain "${field_ids_1.INVITE_EXTENSION_FIELD_SEPARATOR}": it separates the key from the field id in the merged invite form.`);
|
|
40
27
|
}
|
|
41
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Attach module data to member invitations: the fields of `component` are
|
|
31
|
+
* merged into the DMS invite modal, the values the admin fills are validated
|
|
32
|
+
* against `schema` and stored on the invitation, and `onAccept` receives them
|
|
33
|
+
* once the invitee is a member of the tenant.
|
|
34
|
+
*
|
|
35
|
+
* Placement follows `@RegisterPageExtension`: `anchorField` names a field of
|
|
36
|
+
* the invite form to sit before or after, `order` breaks ties between
|
|
37
|
+
* extensions landing at the same spot, and equal orders fall back to the
|
|
38
|
+
* extension key — so the modal assembles the same way on every host and
|
|
39
|
+
* across restarts, never depending on module start order.
|
|
40
|
+
*
|
|
41
|
+
* Field ids are namespaced by `key`, so two extensions may both contribute a
|
|
42
|
+
* `plan` field; `schema` and `onAccept` see them unprefixed.
|
|
43
|
+
*
|
|
44
|
+
* An invitee who already has an account is added to the tenant on the spot and
|
|
45
|
+
* no invitation row is written: `onAccept` still runs, with `inviteId` unset.
|
|
46
|
+
* `onCleanup` runs when the invitation is cancelled or replaced and when a
|
|
47
|
+
* member is removed — never on acceptance, which also deletes the invitation.
|
|
48
|
+
*
|
|
49
|
+
* The fields also appear in the edit form of a pending invitation, prefilled
|
|
50
|
+
* with the stored payload: an admin can change it until the invitee accepts,
|
|
51
|
+
* unless `editable` is `false`, and `onUpdate` hears about each change.
|
|
52
|
+
*
|
|
53
|
+
* The registration is bound to the registering module and lifted when it
|
|
54
|
+
* stops, so the fields leave the modal with it.
|
|
55
|
+
*
|
|
56
|
+
* ```ts
|
|
57
|
+
* RegisterInviteExtension({
|
|
58
|
+
* key: "billing",
|
|
59
|
+
* component: Form({ fields: [{ id: "costCenter", type: new StringType() }] }),
|
|
60
|
+
* schema: z.object({ costCenter: z.string().min(1) }),
|
|
61
|
+
* onAccept: (payload, member) => assignCostCenter(member, payload.costCenter),
|
|
62
|
+
* });
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* @returns Removes this extension, for a module that drops it while staying
|
|
66
|
+
* loaded.
|
|
67
|
+
*/
|
|
42
68
|
function RegisterInviteExtension(options) {
|
|
43
69
|
assertUsableKey(options.key);
|
|
44
70
|
const info = {
|
|
45
71
|
key: options.key,
|
|
46
72
|
component: options.component,
|
|
73
|
+
// The source and the target do not overlap, so this cannot be one
|
|
74
|
+
// assertion: the value reaches here through a decorator, a JWT
|
|
75
|
+
// payload or a filter tuple, none of which the type system sees.
|
|
76
|
+
// oxlint-disable-next-line anti-slop/no-chained-type-assertions
|
|
47
77
|
schema: options.schema,
|
|
48
78
|
onAccept: options.onAccept,
|
|
49
79
|
onCleanup: options.onCleanup,
|
|
@@ -52,40 +82,18 @@ function RegisterInviteExtension(options) {
|
|
|
52
82
|
label: options.label,
|
|
53
83
|
description: options.description,
|
|
54
84
|
placement: resolvePlacement(options.placement),
|
|
85
|
+
// The core answers an empty string when it resolves no module, which
|
|
86
|
+
// must not read as one module shared by every unresolved registration.
|
|
55
87
|
moduleId: (0, interface_core_1.GetResponsibleModule)() || undefined,
|
|
56
88
|
};
|
|
57
89
|
internal.RegisterInviteExtension.register(info);
|
|
58
90
|
return () => internal.RegisterInviteExtension.unregister(info);
|
|
59
91
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return held.moduleId !== undefined && held.moduleId === incoming.moduleId;
|
|
64
|
-
}
|
|
92
|
+
/**
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
65
95
|
var internal;
|
|
66
96
|
(function (internal) {
|
|
67
97
|
internal.RegisterInviteExtension = new interface_core_1.RegisteringProxy();
|
|
68
|
-
function applyInviteExtension(info) {
|
|
69
|
-
const existing = inviteExtensions.get(info.key);
|
|
70
|
-
if (existing && !isSameRegisteringModule(existing.info, info)) {
|
|
71
|
-
logging_1.Logging.Warn(`[dms] invite extension key "${info.key}" was already registered by another module; the latest registration now owns it. If two modules claim this key, one of them silently loses its payload — give them distinct keys.`);
|
|
72
|
-
}
|
|
73
|
-
inviteExtensions.set(info.key, { info });
|
|
74
|
-
}
|
|
75
|
-
internal.applyInviteExtension = applyInviteExtension;
|
|
76
|
-
function revokeInviteExtension(info) {
|
|
77
|
-
const existing = inviteExtensions.get(info.key);
|
|
78
|
-
if (!existing || existing.info !== info)
|
|
79
|
-
return;
|
|
80
|
-
inviteExtensions.delete(info.key);
|
|
81
|
-
}
|
|
82
|
-
internal.revokeInviteExtension = revokeInviteExtension;
|
|
83
|
-
function clearInviteExtensions() {
|
|
84
|
-
inviteExtensions.clear();
|
|
85
|
-
}
|
|
86
|
-
internal.clearInviteExtensions = clearInviteExtensions;
|
|
87
98
|
})(internal || (exports.internal = internal = {}));
|
|
88
|
-
function logInviteExtensionFailure(key, action, error) {
|
|
89
|
-
logging_1.Logging.Error(`[dms] invite extension "${key}" failed to ${action}:`, error);
|
|
90
|
-
}
|
|
91
99
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/invite-extensions/registry.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/invite-extensions/registry.ts"],"names":[],"mappings":";;;AA6EA,0DA2BC;AAxGD,+DAGoC;AACpC,oDAAwE;AAOxE,MAAM,iBAAiB,GAA4B,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAE7E,SAAS,gBAAgB,CACvB,OAAmD;IAEnD,IAAI,CAAC,OAAO;QAAE,OAAO,iBAAiB,CAAC;IACvC,yEAAyE;IACzE,mDAAmD;IACnD,MAAM,SAAS,GAA4B;QACzC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAC,IAAI;QAC5C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,iBAAiB,CAAC,KAAK;KAChD,CAAC;IACF,IAAI,OAAO,CAAC,WAAW;QAAE,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACrE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,4CAAgC,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,yBAAyB,GAAG,sBAAsB,4CAAgC,sEAAsE,CACzJ,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,SAAgB,uBAAuB,CACrC,OAAkC;IAElC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE7B,MAAM,IAAI,GAAwB;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,kEAAkE;QAClE,+DAA+D;QAC/D,iEAAiE;QACjE,gEAAgE;QAChE,MAAM,EAAE,OAAO,CAAC,MAAkD;QAClE,QAAQ,EAAE,OAAO,CAAC,QAA2C;QAC7D,SAAS,EAAE,OAAO,CAAC,SAA6C;QAChE,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAA2C;QAC7D,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;QAC9C,qEAAqE;QACrE,uEAAuE;QACvE,QAAQ,EAAE,IAAA,qCAAoB,GAAE,IAAI,SAAS;KAC9C,CAAC;IAEF,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,IAAiB,QAAQ,CAIxB;AAJD,WAAiB,QAAQ;IACV,gCAAuB,GAAG,IAAI,iCAAgB,EAExD,CAAC;AACN,CAAC,EAJgB,QAAQ,wBAAR,QAAQ,QAIxB"}
|
|
@@ -1,74 +1,99 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { WatchAction } from "../base/types/watch";
|
|
1
|
+
import type { FormBuilder } from "../base/form";
|
|
3
2
|
import type { ZodType, ZodTypeDef } from "zod";
|
|
4
3
|
import type { PlacementSide } from "../component";
|
|
5
4
|
import type { TenantMember } from "../db";
|
|
6
5
|
import type { MaybePromise } from "../types";
|
|
6
|
+
/**
|
|
7
|
+
* Where an extension's fields sit among the invite form's own. `anchorField`
|
|
8
|
+
* names a top-level field (or field group) id of the invite form; without one,
|
|
9
|
+
* `before` puts the block above every own field and `after`/`end` below them.
|
|
10
|
+
*/
|
|
7
11
|
export interface InviteExtensionPlacement {
|
|
8
12
|
side?: PlacementSide;
|
|
9
13
|
anchorField?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Breaks the tie when several extensions land at the same spot: lower first,
|
|
16
|
+
* equal orders fall back to the extension key — never to module start order.
|
|
17
|
+
*/
|
|
10
18
|
order?: number;
|
|
11
19
|
}
|
|
12
|
-
|
|
13
|
-
side: PlacementSide;
|
|
14
|
-
anchorField?: string;
|
|
15
|
-
order: number;
|
|
16
|
-
}
|
|
20
|
+
/** The invitation an extension's payload is being delivered for. */
|
|
17
21
|
export interface InviteExtensionContext {
|
|
18
22
|
tenantId: string;
|
|
19
23
|
email: string;
|
|
24
|
+
/** Stable durable delivery identity. Handlers must deduplicate effects when present. */
|
|
20
25
|
deliveryId?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Unset when the invitee already had an account: they are added to the
|
|
28
|
+
* tenant straight away and no `user_invites` row is ever written.
|
|
29
|
+
*/
|
|
21
30
|
inviteId?: string;
|
|
22
31
|
}
|
|
23
32
|
export type InviteCleanupReason = "invite-deleted" | "member-removed";
|
|
33
|
+
/** What went away, so a contributor knows which of its data to drop. */
|
|
24
34
|
export interface InviteCleanupContext {
|
|
25
35
|
reason: InviteCleanupReason;
|
|
26
36
|
tenantId: string;
|
|
37
|
+
/** Stable durable delivery identity. Cleanup must tolerate concurrent retries. */
|
|
27
38
|
deliveryId?: string;
|
|
39
|
+
/** Set for `invite-deleted`. */
|
|
28
40
|
inviteId?: string;
|
|
29
41
|
email?: string;
|
|
42
|
+
/** Set for `member-removed`. */
|
|
30
43
|
userId?: string;
|
|
31
44
|
}
|
|
32
45
|
export type InviteAcceptHandler<T> = (payload: T, member: TenantMember, context: InviteExtensionContext) => MaybePromise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Receives the payload an admin just saved on a pending invitation, parsed by
|
|
48
|
+
* the extension's schema, and the one it replaced — `undefined` when the
|
|
49
|
+
* invitation carried none or the schema no longer accepts it.
|
|
50
|
+
*/
|
|
33
51
|
export type InviteUpdateHandler<T> = (payload: T, previous: T | undefined, context: InviteExtensionContext) => MaybePromise<void>;
|
|
34
52
|
export type InviteCleanupHandler<T> = (payload: T | undefined, context: InviteCleanupContext) => MaybePromise<void>;
|
|
35
|
-
export interface InviteDeliveryOptions {
|
|
36
|
-
retryOnFailure?: boolean;
|
|
37
|
-
}
|
|
38
53
|
export interface InviteExtensionOptions<T> {
|
|
54
|
+
/**
|
|
55
|
+
* Namespace of the extension, on the invite row and on the form fields it
|
|
56
|
+
* contributes. May not contain `__`, which separates it from the field id.
|
|
57
|
+
*/
|
|
39
58
|
key: string;
|
|
59
|
+
/** Form whose fields are merged into the invite modal. */
|
|
40
60
|
component: FormBuilder;
|
|
61
|
+
/**
|
|
62
|
+
* Validates the payload, at submit and again at delivery. Its keys are the
|
|
63
|
+
* field ids of `component`, unprefixed.
|
|
64
|
+
*
|
|
65
|
+
* The input side is `unknown` because the schema is handed the raw slice of
|
|
66
|
+
* the submission — which also lets it transform, `onAccept` receiving the
|
|
67
|
+
* output.
|
|
68
|
+
*/
|
|
41
69
|
schema: ZodType<T, ZodTypeDef, unknown>;
|
|
70
|
+
/** Called after membership exists; durable deliveries can replay with the same deliveryId. */
|
|
42
71
|
onAccept: InviteAcceptHandler<T>;
|
|
72
|
+
/**
|
|
73
|
+
* Called when the invitation is cancelled or replaced, and when a member is
|
|
74
|
+
* removed from the tenant. Not called on acceptance. Durable expiry and
|
|
75
|
+
* retirement can replay concurrently; deduplicate external effects by
|
|
76
|
+
* context.deliveryId and scope resource deletion to context.inviteId.
|
|
77
|
+
*/
|
|
43
78
|
onCleanup?: InviteCleanupHandler<T>;
|
|
79
|
+
/**
|
|
80
|
+
* Whether an admin may change the payload while the invitation is pending,
|
|
81
|
+
* from its edit form. Defaults to `true`: the payload is only ever handed
|
|
82
|
+
* over at acceptance, so an edit before then reads exactly as if the admin
|
|
83
|
+
* had typed the new value when inviting. `false` shows the fields read-only
|
|
84
|
+
* there.
|
|
85
|
+
*/
|
|
44
86
|
editable?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Called after an admin saved a changed payload on a pending invitation, for
|
|
89
|
+
* an extension that derives something from it before acceptance. The edit is
|
|
90
|
+
* already stored: a failure is logged, never raised.
|
|
91
|
+
*/
|
|
45
92
|
onUpdate?: InviteUpdateHandler<T>;
|
|
93
|
+
/** Heading of the contributed block. Defaults to the form's own title. */
|
|
46
94
|
label?: string;
|
|
47
95
|
description?: string;
|
|
48
96
|
placement?: InviteExtensionPlacement;
|
|
49
97
|
}
|
|
50
|
-
|
|
51
|
-
key: string;
|
|
52
|
-
component: FormBuilder;
|
|
53
|
-
schema: ZodType<unknown, ZodTypeDef, unknown>;
|
|
54
|
-
onAccept: InviteAcceptHandler<unknown>;
|
|
55
|
-
onCleanup?: InviteCleanupHandler<unknown>;
|
|
56
|
-
editable?: boolean;
|
|
57
|
-
onUpdate?: InviteUpdateHandler<unknown>;
|
|
58
|
-
label?: string;
|
|
59
|
-
description?: string;
|
|
60
|
-
placement: ResolvedInvitePlacement;
|
|
61
|
-
moduleId?: string;
|
|
62
|
-
}
|
|
98
|
+
/** Payloads stored on an invitation, keyed by extension key. */
|
|
63
99
|
export type InviteExtensionPayloads = Record<string, unknown>;
|
|
64
|
-
export interface InviteFieldContribution {
|
|
65
|
-
key: string;
|
|
66
|
-
side: PlacementSide;
|
|
67
|
-
anchorField?: string;
|
|
68
|
-
order: number;
|
|
69
|
-
editable: boolean;
|
|
70
|
-
group: FieldGroupSerialized;
|
|
71
|
-
properties: Record<string, unknown>;
|
|
72
|
-
requiredProperties: string[];
|
|
73
|
-
watchActions: WatchAction[];
|
|
74
|
-
}
|
|
@@ -1,7 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module data carried by a member invitation — the invitation-side counterpart
|
|
3
|
+
* of `@RegisterPageExtension`, split by concern under `./invite-extensions/`:
|
|
4
|
+
*
|
|
5
|
+
* - `types` — the contracts a contributor implements
|
|
6
|
+
* - `registry` — `RegisterInviteExtension` and the registration proxy that
|
|
7
|
+
* binds an extension to its module's lifetime
|
|
8
|
+
* - `availability` — `RegisterInviteAvailability`, which disables the invite
|
|
9
|
+
* action with a reason
|
|
10
|
+
*
|
|
11
|
+
* The rest is driven by the DMS runtime alone and lives under
|
|
12
|
+
* `./invite-extensions/internal/`: the namespacing of contributed fields
|
|
13
|
+
* (`field-ids`), their serialization, placement and merging into the DMS
|
|
14
|
+
* invite modal (`form-slot`), validation at submit, delivery at acceptance and
|
|
15
|
+
* cleanup (`delivery`), and the prefill, validation and notification of a
|
|
16
|
+
* pending invitation's edit (`edit`).
|
|
17
|
+
*
|
|
18
|
+
* `form-slot` claims the invite forms' component slots on import, so importing
|
|
19
|
+
* this barrel is what opens the modal and the edit form to extensions.
|
|
20
|
+
*/
|
|
21
|
+
import "./invite-extensions/internal/form-slot";
|
|
22
|
+
import * as availability from "./invite-extensions/internal/availability";
|
|
1
23
|
export { type InviteAvailabilityResolver, RegisterInviteAvailability, } from "./invite-extensions/availability";
|
|
2
|
-
export * from "./invite-extensions/field-ids";
|
|
3
|
-
export * from "./invite-extensions/form-slot";
|
|
4
|
-
export { internal } from "./invite-extensions/internal";
|
|
5
|
-
export { HTTP_BAD_REQUEST } from "./invite-extensions/payload-slices";
|
|
6
24
|
export * from "./invite-extensions/registry";
|
|
7
25
|
export * from "./invite-extensions/types";
|
|
26
|
+
/**
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
export declare namespace internal {
|
|
30
|
+
const RegisterInviteExtension: import("@antelopejs/interface-core").RegisteringProxy<(info: import("./invite-extensions/internal/types").InviteExtensionInfo) => void>;
|
|
31
|
+
/** Kept for module compatibility; the DMS imports it from `internal/availability`. */
|
|
32
|
+
const ResolveInviteAvailability: typeof availability.ResolveInviteAvailability;
|
|
33
|
+
}
|