@antelopejs/interface-dms 0.13.2 → 0.14.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 +243 -2
- package/README.md +9 -9
- package/dist/attachments.js +1 -1
- package/dist/attachments.js.map +1 -1
- package/dist/auth/db/models/sessions.model.d.ts +3 -3
- package/dist/auth/db/models/userExternalIdentities.model.d.ts +3 -3
- package/dist/auth/db/models/users.model.d.ts +3 -3
- package/dist/auth/db/tables/users.table.d.ts +3 -3
- package/dist/auth/index.js +3 -5
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/internal/jwt-auth-decorator.js +1 -2
- package/dist/auth/internal/jwt-auth-decorator.js.map +1 -1
- package/dist/auth/internal/request-authenticators.js +3 -5
- package/dist/auth/internal/request-authenticators.js.map +1 -1
- package/dist/auth/internal/request-principal.js +2 -2
- package/dist/auth/internal/request-principal.js.map +1 -1
- package/dist/base/activity-feed.d.ts +2 -2
- package/dist/base/banner.js +2 -2
- package/dist/base/banner.js.map +1 -1
- package/dist/base/block-registry/helpers.js +1 -1
- package/dist/base/block-registry/helpers.js.map +1 -1
- package/dist/base/block-registry/internal/describe.js +9 -14
- package/dist/base/block-registry/internal/describe.js.map +1 -1
- package/dist/base/block-registry/registry.js +2 -2
- package/dist/base/block-registry/registry.js.map +1 -1
- package/dist/base/block-registry/types.d.ts +1 -1
- package/dist/base/chart-card.js +8 -6
- package/dist/base/chart-card.js.map +1 -1
- package/dist/base/chart-schemas.d.ts +70 -70
- package/dist/base/chart.d.ts +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/chart.js.map +1 -1
- package/dist/base/code-block.d.ts +1 -1
- package/dist/base/code-block.js +2 -2
- package/dist/base/code-block.js.map +1 -1
- package/dist/base/data-types/compare-types.js +18 -14
- package/dist/base/data-types/compare-types.js.map +1 -1
- package/dist/base/data-types/default/choices.d.ts +1 -1
- package/dist/base/data-types/default/choices.js +17 -16
- package/dist/base/data-types/default/choices.js.map +1 -1
- package/dist/base/data-types/default/inputs.d.ts +1 -1
- package/dist/base/data-types/default/numbers.d.ts +2 -1
- package/dist/base/data-types/default/numbers.js +8 -5
- package/dist/base/data-types/default/numbers.js.map +1 -1
- package/dist/base/data-types/default/relations.d.ts +0 -6
- package/dist/base/data-types/default/relations.js +14 -7
- package/dist/base/data-types/default/relations.js.map +1 -1
- package/dist/base/data-types/default-types.d.ts +0 -1
- package/dist/base/data-types/default-types.js +0 -2
- package/dist/base/data-types/default-types.js.map +1 -1
- package/dist/base/data-types/index.js +0 -1
- package/dist/base/data-types/index.js.map +1 -1
- package/dist/base/data-types/internal/relation-endpoints.js +5 -3
- package/dist/base/data-types/internal/relation-endpoints.js.map +1 -1
- package/dist/base/data-types/internal/table-view-meta-slot.d.ts +17 -0
- package/dist/base/data-types/internal/table-view-meta-slot.js +25 -0
- package/dist/base/data-types/internal/table-view-meta-slot.js.map +1 -0
- package/dist/base/empty-state.d.ts +1 -1
- package/dist/base/export-jobs.d.ts +47 -19
- package/dist/base/export-jobs.js +39 -4
- package/dist/base/export-jobs.js.map +1 -1
- package/dist/base/form-schema.d.ts +0 -1
- package/dist/base/form-schema.js +12 -12
- package/dist/base/form-schema.js.map +1 -1
- package/dist/base/grid.js +1 -1
- package/dist/base/grid.js.map +1 -1
- package/dist/base/guard.d.ts +4 -4
- package/dist/base/guard.js +1 -1
- package/dist/base/guard.js.map +1 -1
- package/dist/base/helpers/archive-mode-helpers.js +4 -5
- package/dist/base/helpers/archive-mode-helpers.js.map +1 -1
- package/dist/base/helpers/file-refs.js +14 -24
- package/dist/base/helpers/file-refs.js.map +1 -1
- package/dist/base/internal/chart.d.ts +1 -1
- package/dist/base/internal/chart.js +1 -1
- package/dist/base/internal/chart.js.map +1 -1
- package/dist/base/internal/display.js +1 -3
- package/dist/base/internal/display.js.map +1 -1
- package/dist/base/internal/export-jobs.d.ts +11 -0
- package/dist/base/internal/export-jobs.js +11 -0
- package/dist/base/internal/export-jobs.js.map +1 -1
- package/dist/base/internal/form-block-schema.d.ts +1 -1
- package/dist/base/internal/form-block-schema.js +1 -1
- package/dist/base/internal/form-block-schema.js.map +1 -1
- package/dist/base/internal/form-schema-validation.js +1 -2
- package/dist/base/internal/form-schema-validation.js.map +1 -1
- package/dist/base/internal/series-bucket.js +2 -2
- package/dist/base/internal/series-bucket.js.map +1 -1
- package/dist/base/key-value-list.d.ts +10 -10
- package/dist/base/kpi-card.js +1 -2
- package/dist/base/kpi-card.js.map +1 -1
- package/dist/base/meter.d.ts +1 -1
- package/dist/base/placeholder.js +1 -1
- package/dist/base/placeholder.js.map +1 -1
- package/dist/base/query-response.js +2 -3
- package/dist/base/query-response.js.map +1 -1
- package/dist/base/searchable.d.ts +3 -3
- package/dist/base/searchable.js.map +1 -1
- package/dist/base/stack.js +1 -1
- package/dist/base/stack.js.map +1 -1
- package/dist/base/tab.js +2 -3
- package/dist/base/tab.js.map +1 -1
- package/dist/base/table-view/data-functions.d.ts +10 -11
- package/dist/base/table-view/data-functions.js.map +1 -1
- package/dist/base/table-view/factory.js +2 -0
- package/dist/base/table-view/factory.js.map +1 -1
- package/dist/base/table-view/internal/archive-filter.d.ts +21 -0
- package/dist/base/table-view/internal/archive-filter.js +48 -0
- package/dist/base/table-view/internal/archive-filter.js.map +1 -0
- package/dist/base/table-view/internal/auth.d.ts +2 -2
- package/dist/base/table-view/internal/auth.js +1 -3
- package/dist/base/table-view/internal/auth.js.map +1 -1
- package/dist/base/table-view/internal/column-conditions.js +3 -12
- package/dist/base/table-view/internal/column-conditions.js.map +1 -1
- package/dist/base/table-view/internal/data-functions.d.ts +2 -2
- package/dist/base/table-view/internal/erase-row-type.d.ts +4 -0
- package/dist/base/table-view/internal/erase-row-type.js +12 -0
- package/dist/base/table-view/internal/erase-row-type.js.map +1 -0
- package/dist/base/table-view/internal/factory-helpers.js +9 -5
- package/dist/base/table-view/internal/factory-helpers.js.map +1 -1
- package/dist/base/table-view/internal/factory-lifecycle-created.js +3 -2
- package/dist/base/table-view/internal/factory-lifecycle-created.js.map +1 -1
- package/dist/base/table-view/internal/factory-lifecycle-options.js +2 -2
- package/dist/base/table-view/internal/factory-lifecycle-options.js.map +1 -1
- package/dist/base/table-view/internal/factory-private-actions.js +5 -6
- package/dist/base/table-view/internal/factory-private-actions.js.map +1 -1
- package/dist/base/table-view/internal/footer.js +21 -13
- package/dist/base/table-view/internal/footer.js.map +1 -1
- package/dist/base/table-view/internal/guards.d.ts +1 -1
- package/dist/base/table-view/internal/guards.js +14 -12
- package/dist/base/table-view/internal/guards.js.map +1 -1
- package/dist/base/table-view/internal/meta-helpers.js +7 -3
- package/dist/base/table-view/internal/meta-helpers.js.map +1 -1
- package/dist/base/table-view/internal/meta.js +18 -8
- package/dist/base/table-view/internal/meta.js.map +1 -1
- package/dist/base/table-view/internal/nav-badges.js +4 -7
- package/dist/base/table-view/internal/nav-badges.js.map +1 -1
- package/dist/base/table-view/internal/option-views.d.ts +7 -4
- package/dist/base/table-view/internal/realtime.js +8 -13
- package/dist/base/table-view/internal/realtime.js.map +1 -1
- package/dist/base/table-view/internal/request-filter.js +2 -3
- package/dist/base/table-view/internal/request-filter.js.map +1 -1
- package/dist/base/table-view/internal/resource-form.js +3 -1
- package/dist/base/table-view/internal/resource-form.js.map +1 -1
- package/dist/base/table-view/internal/row-actions-schema.d.ts +6 -6
- package/dist/base/table-view/internal/row-rules.js +2 -2
- package/dist/base/table-view/internal/row-rules.js.map +1 -1
- package/dist/base/table-view/internal/tabs.js +4 -6
- package/dist/base/table-view/internal/tabs.js.map +1 -1
- package/dist/base/table-view/internal/writer.js +2 -2
- package/dist/base/table-view/internal/writer.js.map +1 -1
- package/dist/base/table-view/meta.d.ts +5 -5
- package/dist/base/table-view/meta.js +9 -3
- package/dist/base/table-view/meta.js.map +1 -1
- package/dist/base/table-view/routes.d.ts +39 -12
- package/dist/base/table-view/routes.js +0 -1
- package/dist/base/table-view/routes.js.map +1 -1
- package/dist/base/table-view/schema.d.ts +127 -127
- package/dist/base/top-list-card.d.ts +4 -4
- package/dist/base/top-list-card.js +1 -2
- package/dist/base/top-list-card.js.map +1 -1
- package/dist/component-options/data-type.d.ts +2 -1
- package/dist/component-options/data-type.js +6 -2
- package/dist/component-options/data-type.js.map +1 -1
- package/dist/component-slots.js +1 -1
- package/dist/component-slots.js.map +1 -1
- package/dist/connection-access.d.ts +46 -0
- package/dist/connection-access.js +73 -0
- package/dist/connection-access.js.map +1 -0
- package/dist/data-controllers/members.d.ts +15 -2
- package/dist/data-controllers/roles.d.ts +15 -2
- package/dist/db/internal/exportJobs.model.d.ts +3 -3
- package/dist/db/internal/inviteResolutions.model.d.ts +3 -3
- package/dist/db/internal/tenantLifecycle.model.d.ts +4 -4
- package/dist/db/internal/tenantLifecycle.model.js +2 -3
- package/dist/db/internal/tenantLifecycle.model.js.map +1 -1
- package/dist/db/models/roles.model.d.ts +3 -3
- package/dist/db/models/tenantMembers.model.d.ts +3 -3
- package/dist/db/models/tenants.model.d.ts +3 -3
- package/dist/db/models/user_invites.model.d.ts +18 -3
- package/dist/db/models/user_invites.model.js +28 -0
- package/dist/db/models/user_invites.model.js.map +1 -1
- package/dist/db/tables/user_invites.table.d.ts +6 -1
- package/dist/db/tables/user_invites.table.js +3 -0
- package/dist/db/tables/user_invites.table.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/component-permissions.js +2 -2
- package/dist/internal/component-permissions.js.map +1 -1
- package/dist/internal/component-serialization.js +5 -3
- package/dist/internal/component-serialization.js.map +1 -1
- package/dist/internal/component-slots.js +8 -10
- package/dist/internal/component-slots.js.map +1 -1
- package/dist/internal/component-watches.js +5 -4
- package/dist/internal/component-watches.js.map +1 -1
- package/dist/internal/invite-content.d.ts +8 -0
- package/dist/internal/invite-content.js +36 -0
- package/dist/internal/invite-content.js.map +1 -0
- package/dist/internal/tenant-ownership.d.ts +5 -4
- package/dist/internal/tenant-ownership.js +5 -4
- package/dist/internal/tenant-ownership.js.map +1 -1
- package/dist/internal/uploads.js +5 -2
- package/dist/internal/uploads.js.map +1 -1
- package/dist/invite-extensions/internal/delivery.d.ts +3 -2
- package/dist/invite-extensions/internal/delivery.js +3 -2
- package/dist/invite-extensions/internal/delivery.js.map +1 -1
- package/dist/invite-extensions/internal/form-slot.js +4 -7
- package/dist/invite-extensions/internal/form-slot.js.map +1 -1
- package/dist/invite-extensions/registry.js +5 -6
- package/dist/invite-extensions/registry.js.map +1 -1
- package/dist/invite-resolution.d.ts +5 -1
- package/dist/invite-resolution.js +10 -26
- package/dist/invite-resolution.js.map +1 -1
- package/dist/invites.d.ts +5 -0
- package/dist/invites.js +27 -1
- package/dist/invites.js.map +1 -1
- package/dist/notifications/builder.js +17 -21
- package/dist/notifications/builder.js.map +1 -1
- package/dist/notifications/internal.d.ts +0 -1
- package/dist/notifications/internal.js +0 -1
- package/dist/notifications/internal.js.map +1 -1
- package/dist/notifications/sendable.d.ts +1 -2
- package/dist/notifications/sendable.js +1 -12
- package/dist/notifications/sendable.js.map +1 -1
- package/dist/notifications/types.d.ts +1 -4
- package/dist/page/categories.d.ts +6 -0
- package/dist/page/categories.js +10 -3
- package/dist/page/categories.js.map +1 -1
- package/dist/page/controllers.d.ts +6 -9
- package/dist/page/controllers.js +9 -7
- package/dist/page/controllers.js.map +1 -1
- package/dist/page/internal/categories.js +43 -32
- package/dist/page/internal/categories.js.map +1 -1
- package/dist/page/internal/category-resolution.d.ts +31 -0
- package/dist/page/internal/category-resolution.js +63 -0
- package/dist/page/internal/category-resolution.js.map +1 -0
- package/dist/page/internal/component-target.js +2 -2
- package/dist/page/internal/component-target.js.map +1 -1
- package/dist/page/internal/controller-options.js +2 -2
- package/dist/page/internal/controller-options.js.map +1 -1
- package/dist/page/internal/extension-assembly.js +6 -9
- package/dist/page/internal/extension-assembly.js.map +1 -1
- package/dist/page/internal/layout-filter.js +5 -5
- package/dist/page/internal/layout-filter.js.map +1 -1
- package/dist/page/internal/metadata-extension-contributions.js +1 -2
- package/dist/page/internal/metadata-extension-contributions.js.map +1 -1
- package/dist/page/internal/metadata-info.js +19 -7
- package/dist/page/internal/metadata-info.js.map +1 -1
- package/dist/page/internal/metadata-layout.d.ts +3 -2
- package/dist/page/internal/metadata-layout.js.map +1 -1
- package/dist/page/internal/metadata-lifecycle.js +1 -4
- package/dist/page/internal/metadata-lifecycle.js.map +1 -1
- package/dist/page/internal/metadata-publish.js +7 -6
- package/dist/page/internal/metadata-publish.js.map +1 -1
- package/dist/page/internal/metadata-registration.js +8 -6
- package/dist/page/internal/metadata-registration.js.map +1 -1
- package/dist/page/internal/metadata-upload-registration.js +4 -8
- package/dist/page/internal/metadata-upload-registration.js.map +1 -1
- package/dist/page/internal/metadata-uploads.js +4 -7
- package/dist/page/internal/metadata-uploads.js.map +1 -1
- package/dist/page/internal/nav-badges.js +2 -3
- package/dist/page/internal/nav-badges.js.map +1 -1
- package/dist/page/internal/page-controller.d.ts +18 -0
- package/dist/page/internal/page-controller.js +36 -0
- package/dist/page/internal/page-controller.js.map +1 -0
- package/dist/page/internal/page-record.js +11 -22
- package/dist/page/internal/page-record.js.map +1 -1
- package/dist/page/internal/table-view-ids.js +4 -3
- package/dist/page/internal/table-view-ids.js.map +1 -1
- package/dist/page/metadata.d.ts +3 -3
- package/dist/page/metadata.js +6 -4
- package/dist/page/metadata.js.map +1 -1
- package/dist/page/types.d.ts +8 -2
- package/dist/page.d.ts +1 -1
- package/dist/page.js +2 -1
- package/dist/page.js.map +1 -1
- package/dist/permissions.d.ts +2 -1
- package/dist/permissions.js +5 -2
- package/dist/permissions.js.map +1 -1
- package/dist/request-tenant.js +2 -2
- package/dist/request-tenant.js.map +1 -1
- package/dist/tenant-lifecycle.js +7 -6
- package/dist/tenant-lifecycle.js.map +1 -1
- package/dist/tenant-provisioning.js +1 -1
- package/dist/tenant-provisioning.js.map +1 -1
- package/dist/types.d.ts +7 -3
- package/dist/uploads.js +7 -8
- package/dist/uploads.js.map +1 -1
- package/dist/utils/internal/controller-class.d.ts +9 -0
- package/dist/utils/internal/controller-class.js +19 -0
- package/dist/utils/internal/controller-class.js.map +1 -0
- package/dist/utils/internal/row-instance.js +10 -2
- package/dist/utils/internal/row-instance.js.map +1 -1
- package/dist/utils/internal/value-parser.js +1 -6
- package/dist/utils/internal/value-parser.js.map +1 -1
- package/docs/1.core/11.modules-and-dynamic-menus.md +3 -3
- package/docs/1.core/2.pages-and-modules.md +2 -1
- package/docs/1.core/4.permissions.md +2 -2
- package/docs/1.core/5.tenancy.md +1 -1
- package/docs/1.core/6.invites.md +3 -1
- package/docs/2.auth/2.authentication.md +1 -1
- package/docs/2.auth/3.tokens-and-sessions.md +1 -1
- package/docs/3.base/1.introduction.md +1 -1
- package/docs/3.base/14.table-events-and-helpers.md +1 -1
- package/docs/3.base/15.table-sources-and-gates.md +14 -2
- package/docs/3.base/3.forms.md +1 -1
- package/docs/3.base/4.tables.md +1 -1
- package/docs/3.base/5.charts-and-widgets.md +3 -3
- package/docs/3.base/8.data-types.md +1 -1
- package/docs/3.base/9.helpers.md +16 -5
- package/docs/4.notifications/3.sending.md +0 -11
- package/docs/index.md +1 -1
- package/package.json +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invite-resolution.js","sourceRoot":"","sources":["../src/invite-resolution.ts"],"names":[],"mappings":";;AAiBA,kDAWC;AAGD,8CAaC;
|
|
1
|
+
{"version":3,"file":"invite-resolution.js","sourceRoot":"","sources":["../src/invite-resolution.ts"],"names":[],"mappings":";;AAiBA,kDAWC;AAGD,8CAaC;AAwBD,oCA+BC;AAGD,4DAOC;AA7GD,uEAAwD;AACxD,6FAAqE;AAErE,mFAA+E;AAE/E,uEAAiE;AAEjE,oEAA6E;AAC7E,qDAAuD;AACvD,oEAAgF;AAChF,oEAAwE;AACxE,8DAAgE;AAEhE,MAAM,aAAa,GAAG,GAAG,CAAC;AAG1B,wFAAwF;AACjF,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,IAAA,wCAAQ,EAAC,oCAAe,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvE,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,UAAU,GAAG,MAAM,IAAA,wCAAQ,EAC/B,gDAAsB,EACtB,QAAQ,CACT,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnC,OAAO,UAAU,EAAE,MAAM,CAAC;AAC5B,CAAC;AAED,0EAA0E;AACnE,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,MAAkB;IAElB,IAAI,CAAC,MAAM,CAAC,oBAAoB;QAAE,OAAO;IACzC,MAAM,MAAM,GAAG,MAAM,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,QAAQ,CAAC,CAAC,GAAG,CACjE,MAAM,CAAC,oBAAoB,CAC5B,CAAC;IACF,IAAA,2BAAM,EACJ,MAAM,EAAE,SAAS,EACjB,aAAa,EACb,sCAAsC,CACvC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,UAA4B,EAC5B,KAAyB;IAEzB,IAAA,2BAAM,EACJ,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAChC,UAAU,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,EAC9C,aAAa,EACb,sDAAsD,CACvD,CAAC;IACF,IAAA,2BAAM,EACJ,IAAA,oCAAmB,EAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,EAC9D,aAAa,EACb,gDAAgD,CACjD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAChC,KAAyB;IAEzB,MAAM,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5E,IAAA,2BAAM,EACJ,KAAK,CAAC,MAAM,KAAK,UAAU;QACzB,QAAQ;QACR,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,EAC/C,aAAa,EACb,sCAAsC,CACvC,CAAC;IACF,IAAA,2BAAM,EACJ,CAAC,KAAK,CAAC,WAAW;QAChB,QAAQ;QACR,CAAC,MAAM,IAAA,wCAAQ,EAAC,oCAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAClE,KAAK,CAAC,MAAM,CACb,CAAC,EACJ,aAAa,EACb,oDAAoD,CACrD,CAAC;IACF,MAAM,aAAa,GAAG;QACpB,GAAG,IAAI,GAAG,CAAC;YACT,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;YAC7C,GAAG,IAAA,+BAAoB,GAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC;SAC5D,CAAC;KACH,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;IACnE,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,mHAAmH;AAC5G,KAAK,UAAU,wBAAwB,CAC5C,UAA4B;IAE5B,MAAM,IAAA,oCAAmB,EAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,EAAE,MAAM,IAAA,4CAAwB,EAAC,UAAU,CAAC;QACnD,KAAK,EAAE,GAAG,EAAE,CAAC,IAAA,oDAAgC,EAAC,UAAU,CAAC;KAC1D,CAAC,CAAC,CAAC;AACN,CAAC"}
|
package/dist/invites.d.ts
CHANGED
|
@@ -89,5 +89,10 @@ export interface CreateUserInviteTokenResult {
|
|
|
89
89
|
* Low-level: create a `user_invites` row + token for a tenant. Replaces any
|
|
90
90
|
* existing invite for the same email (within the tenant). Fires
|
|
91
91
|
* INVITE_DELETED / INVITE_BEING_CREATED / INVITE_CREATED hooks.
|
|
92
|
+
*
|
|
93
|
+
* Concurrent calls that all find no invite for the email keep one, also when
|
|
94
|
+
* another call replaces the invite in between: a call that loses returns the
|
|
95
|
+
* kept invite when it carries the same content, and fails with HTTP 409 when
|
|
96
|
+
* it does not.
|
|
92
97
|
*/
|
|
93
98
|
export declare function createUserInviteToken(options: CreateUserInviteTokenOptions): Promise<CreateUserInviteTokenResult>;
|
package/dist/invites.js
CHANGED
|
@@ -7,7 +7,9 @@ exports.INVITE_EXPIRY_DAYS = exports.INVITE_TOKEN_LENGTH = exports.inviteeDispla
|
|
|
7
7
|
exports.inviteUserToTenant = inviteUserToTenant;
|
|
8
8
|
exports.createUserInviteToken = createUserInviteToken;
|
|
9
9
|
const node_crypto_1 = require("node:crypto");
|
|
10
|
+
const interface_api_util_1 = require("@antelopejs/interface-api-util");
|
|
10
11
|
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
12
|
+
const interface_database_1 = require("@antelopejs/interface-database");
|
|
11
13
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
12
14
|
const db_1 = require("./db");
|
|
13
15
|
const db_2 = require("./auth/db");
|
|
@@ -17,6 +19,7 @@ const time_1 = require("./utils/internal/time");
|
|
|
17
19
|
const hooks_1 = require("./hooks");
|
|
18
20
|
const delivery_1 = require("./invite-extensions/internal/delivery");
|
|
19
21
|
const invite_resolution_1 = require("./internal/invite-resolution");
|
|
22
|
+
const invite_content_1 = require("./internal/invite-content");
|
|
20
23
|
const invite_resolution_2 = require("./invite-resolution");
|
|
21
24
|
const tenant_members_1 = require("./tenant-members");
|
|
22
25
|
const tenant_ownership_1 = require("./internal/tenant-ownership");
|
|
@@ -26,6 +29,7 @@ var invitee_display_name_1 = require("./invitee-display-name");
|
|
|
26
29
|
Object.defineProperty(exports, "inviteeDisplayName", { enumerable: true, get: function () { return invitee_display_name_1.inviteeDisplayName; } });
|
|
27
30
|
exports.INVITE_TOKEN_LENGTH = 64;
|
|
28
31
|
exports.INVITE_EXPIRY_DAYS = 7;
|
|
32
|
+
const HTTP_CONFLICT = 409;
|
|
29
33
|
/**
|
|
30
34
|
* Invite a user (existing or not) to a tenant.
|
|
31
35
|
*
|
|
@@ -114,6 +118,11 @@ async function deliverToExistingMember(tenantId, email, userId, extensions) {
|
|
|
114
118
|
* Low-level: create a `user_invites` row + token for a tenant. Replaces any
|
|
115
119
|
* existing invite for the same email (within the tenant). Fires
|
|
116
120
|
* INVITE_DELETED / INVITE_BEING_CREATED / INVITE_CREATED hooks.
|
|
121
|
+
*
|
|
122
|
+
* Concurrent calls that all find no invite for the email keep one, also when
|
|
123
|
+
* another call replaces the invite in between: a call that loses returns the
|
|
124
|
+
* kept invite when it carries the same content, and fails with HTTP 409 when
|
|
125
|
+
* it does not.
|
|
117
126
|
*/
|
|
118
127
|
async function createUserInviteToken(options) {
|
|
119
128
|
return (0, tenant_members_1.changeTenantMembers)(options.tenantId, async () => ({
|
|
@@ -147,7 +156,19 @@ async function createAdmittedInviteToken(options) {
|
|
|
147
156
|
asTenantOwner,
|
|
148
157
|
roleIds,
|
|
149
158
|
});
|
|
150
|
-
|
|
159
|
+
try {
|
|
160
|
+
await userInviteModel.insert(replacement);
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
if (!(0, interface_database_1.IsDuplicateKeyError)(error))
|
|
164
|
+
throw error;
|
|
165
|
+
return yieldToWinner(await userInviteModel.getByEmail(email), replacement);
|
|
166
|
+
}
|
|
167
|
+
const rival = await userInviteModel.getOtherByEmail(email, replacement._id);
|
|
168
|
+
if (rival) {
|
|
169
|
+
await userInviteModel.delete(replacement._id);
|
|
170
|
+
return yieldToWinner(rival, replacement);
|
|
171
|
+
}
|
|
151
172
|
await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.INVITE_CREATED, {
|
|
152
173
|
tenantId,
|
|
153
174
|
inviteId: replacement._id,
|
|
@@ -158,6 +179,10 @@ async function createAdmittedInviteToken(options) {
|
|
|
158
179
|
});
|
|
159
180
|
return { inviteId: replacement._id, token: replacement.token };
|
|
160
181
|
}
|
|
182
|
+
function yieldToWinner(winner, lost) {
|
|
183
|
+
(0, interface_api_util_1.assert)(winner && (0, invite_content_1.isSameInviteContent)(winner, lost), HTTP_CONFLICT, "Invitation for this email was created concurrently with other content");
|
|
184
|
+
return { inviteId: winner._id, token: winner.token };
|
|
185
|
+
}
|
|
161
186
|
function buildInviteSnapshot(options) {
|
|
162
187
|
return db_1.UserInviteModel.fromPlainData({
|
|
163
188
|
_id: (0, node_crypto_1.randomUUID)(),
|
|
@@ -172,6 +197,7 @@ function buildInviteSnapshot(options) {
|
|
|
172
197
|
expiresAt: new Date(Date.now() + exports.INVITE_EXPIRY_DAYS * time_1.MILLISECONDS_PER_DAY),
|
|
173
198
|
invitedBy: options.invitedBy ?? null,
|
|
174
199
|
extensions: options.extensions ?? null,
|
|
200
|
+
creationResolutionId: "",
|
|
175
201
|
});
|
|
176
202
|
}
|
|
177
203
|
//# sourceMappingURL=invites.js.map
|
package/dist/invites.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invites.js","sourceRoot":"","sources":["../src/invites.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"invites.js","sourceRoot":"","sources":["../src/invites.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,43 +17,39 @@ function missingFields(data) {
|
|
|
17
17
|
function isComplete(data) {
|
|
18
18
|
return missingFields(data).length === 0;
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Stores `value` under `field` in `data`, the builder's own data object, and
|
|
22
|
+
* returns the same builder, now recording `field` as set. `Set` is a phantom
|
|
23
|
+
* parameter that only `build`'s `this` parameter reads.
|
|
24
|
+
*/
|
|
25
|
+
function filled(builder, data, field, value) {
|
|
26
|
+
data[field] = value;
|
|
27
|
+
// SAFETY: Holds when data is builder's own data object and Next is the one key field holds, as in each setter, which passes this.data and a literal field Next is inferred from: the line above has just stored value under field in data, and Set appears only in the this parameter of build, so the same instance now has Next set.
|
|
28
|
+
return builder;
|
|
29
|
+
}
|
|
20
30
|
class NotificationBuilder {
|
|
21
31
|
data = {};
|
|
22
32
|
icon(value) {
|
|
23
|
-
this.data
|
|
24
|
-
// SAFETY: The setter has filled icon on this instance; Set tracks filled fields without changing the runtime instance.
|
|
25
|
-
return this;
|
|
33
|
+
return filled(this, this.data, "icon", value);
|
|
26
34
|
}
|
|
27
35
|
title(value) {
|
|
28
|
-
this.data
|
|
29
|
-
// SAFETY: The setter has filled title on this instance; Set tracks filled fields without changing the runtime instance.
|
|
30
|
-
return this;
|
|
36
|
+
return filled(this, this.data, "title", value);
|
|
31
37
|
}
|
|
32
38
|
description(value) {
|
|
33
|
-
this.data
|
|
34
|
-
// SAFETY: The setter has filled description on this instance; Set tracks filled fields without changing the runtime instance.
|
|
35
|
-
return this;
|
|
39
|
+
return filled(this, this.data, "description", value);
|
|
36
40
|
}
|
|
37
41
|
subject(subject) {
|
|
38
|
-
this.data
|
|
39
|
-
// SAFETY: The setter has filled subject on this instance; Set tracks filled fields without changing the runtime instance.
|
|
40
|
-
return this;
|
|
42
|
+
return filled(this, this.data, "subject", subject);
|
|
41
43
|
}
|
|
42
44
|
linkTo(value) {
|
|
43
|
-
this.data
|
|
44
|
-
// SAFETY: The setter has filled linkTo on this instance; Set tracks filled fields without changing the runtime instance.
|
|
45
|
-
return this;
|
|
45
|
+
return filled(this, this.data, "linkTo", value);
|
|
46
46
|
}
|
|
47
47
|
params(value) {
|
|
48
|
-
this.data
|
|
49
|
-
// SAFETY: The setter has filled params on this instance; Set tracks filled fields without changing the runtime instance.
|
|
50
|
-
return this;
|
|
48
|
+
return filled(this, this.data, "params", value);
|
|
51
49
|
}
|
|
52
50
|
/** Colours the icon well the notification is listed with. */
|
|
53
51
|
tone(value) {
|
|
54
|
-
this.data
|
|
55
|
-
// SAFETY: The setter has filled tone on this instance; Set tracks filled fields without changing the runtime instance.
|
|
56
|
-
return this;
|
|
52
|
+
return filled(this, this.data, "tone", value);
|
|
57
53
|
}
|
|
58
54
|
build() {
|
|
59
55
|
if (!isComplete(this.data)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/notifications/builder.ts"],"names":[],"mappings":";;;AAAA,yCAAkD;AAQlD,MAAM,eAAe,GAAiC;IACpD,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,SAAS,aAAa,CAAC,IAA+B;IACpD,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAC3B,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,UAAU,CAAC,IAA+B;IACjD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,MAAa,mBAAmB;IACtB,IAAI,GAA8B,EAAE,CAAC;IAE7C,IAAI,CAAC,KAAa;QAChB,
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/notifications/builder.ts"],"names":[],"mappings":";;;AAAA,yCAAkD;AAQlD,MAAM,eAAe,GAAiC;IACpD,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,SAAS,aAAa,CAAC,IAA+B;IACpD,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAC3B,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,UAAU,CAAC,IAA+B;IACjD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,SAAS,MAAM,CACb,OAAiC,EACjC,IAA+B,EAC/B,KAAW,EACX,KAA6B;IAE7B,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACpB,uUAAuU;IACvU,OAAO,OAA0C,CAAC;AACpD,CAAC;AAED,MAAa,mBAAmB;IACtB,IAAI,GAA8B,EAAE,CAAC;IAE7C,IAAI,CAAC,KAAa;QAChB,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CACL,OAAgC;QAEhC,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CACJ,KAAsC;QAEtC,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC,KAAuB;QAC1B,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,KAAK;QAGH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,4CAA4C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,+BAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;CACF;AA9CD,kDA8CC"}
|
|
@@ -4,7 +4,6 @@ import type { DeliveryOptions, NotificationCategoryInfo, NotificationData, Notif
|
|
|
4
4
|
* @internal
|
|
5
5
|
*/
|
|
6
6
|
export declare namespace internal {
|
|
7
|
-
const SupportsIdempotency: () => Promise<boolean>;
|
|
8
7
|
const RegisterNotificationCategory: RegisteringProxy<(info: NotificationCategoryInfo) => void>;
|
|
9
8
|
const RegisterNotificationSubject: RegisteringProxy<(info: NotificationSubjectInfo) => void>;
|
|
10
9
|
const SendToUser: (userId: string, data: NotificationData, groupId?: string | undefined, idempotencyKey?: string | undefined, delivery?: DeliveryOptions | undefined) => Promise<void>;
|
|
@@ -7,7 +7,6 @@ const interface_core_1 = require("@antelopejs/interface-core");
|
|
|
7
7
|
*/
|
|
8
8
|
var internal;
|
|
9
9
|
(function (internal) {
|
|
10
|
-
internal.SupportsIdempotency = (0, interface_core_1.InterfaceFunction)();
|
|
11
10
|
internal.RegisterNotificationCategory = new interface_core_1.RegisteringProxy();
|
|
12
11
|
internal.RegisterNotificationSubject = new interface_core_1.RegisteringProxy();
|
|
13
12
|
internal.SendToUser = (0, interface_core_1.InterfaceFunction)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/notifications/internal.ts"],"names":[],"mappings":";;;AAAA,+DAGoC;AAUpC;;GAEG;AACH,IAAiB,QAAQ,
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/notifications/internal.ts"],"names":[],"mappings":";;;AAAA,+DAGoC;AAUpC;;GAEG;AACH,IAAiB,QAAQ,CAgDxB;AAhDD,WAAiB,QAAQ;IACV,qCAA4B,GAAG,IAAI,iCAAgB,EAE7D,CAAC;IACS,oCAA2B,GAAG,IAAI,iCAAgB,EAE5D,CAAC;IAES,mBAAU,GACrB,IAAA,kCAAiB,GAQd,CAAC;IAEO,oBAAW,GACtB,IAAA,kCAAiB,GAQd,CAAC;IAEO,oBAAW,GACtB,IAAA,kCAAiB,GAMd,CAAC;IAEO,kBAAS,GACpB,IAAA,kCAAiB,GAOd,CAAC;AACR,CAAC,EAhDgB,QAAQ,wBAAR,QAAQ,QAgDxB"}
|
|
@@ -9,10 +9,9 @@ export declare class SendableNotification {
|
|
|
9
9
|
*/
|
|
10
10
|
toUser(userId: string, options?: SendOptions): Promise<void>;
|
|
11
11
|
toUsers(userIds: string[], options?: SendOptions): Promise<void>;
|
|
12
|
-
/**
|
|
12
|
+
/** Sends a durable event once per recipient under `idempotencyKey`, including after dismissal. */
|
|
13
13
|
toUsersIdempotently(userIds: string[], idempotencyKey: string, options?: SendOptions): Promise<void>;
|
|
14
14
|
/** Sends to the holders of any of `roleIds`, in `options.tenantId` only when set. */
|
|
15
15
|
toRoles(roleIds: string[], options?: RoleSendOptions): Promise<void>;
|
|
16
16
|
broadcast(options?: SendOptions): Promise<void>;
|
|
17
|
-
private requireIdempotencySupport;
|
|
18
17
|
}
|
|
@@ -16,33 +16,22 @@ class SendableNotification {
|
|
|
16
16
|
* unless `dedupe: false` (see {@link DeliveryOptions}).
|
|
17
17
|
*/
|
|
18
18
|
async toUser(userId, options = {}) {
|
|
19
|
-
await this.requireIdempotencySupport(options);
|
|
20
19
|
await internal_1.internal.SendToUser(userId, this.data, undefined, options.idempotencyKey, deliveryOf(options));
|
|
21
20
|
}
|
|
22
21
|
async toUsers(userIds, options = {}) {
|
|
23
|
-
await this.requireIdempotencySupport(options);
|
|
24
22
|
await internal_1.internal.SendToUsers(userIds, this.data, options.readScope, options.idempotencyKey, deliveryOf(options));
|
|
25
23
|
}
|
|
26
|
-
/**
|
|
24
|
+
/** Sends a durable event once per recipient under `idempotencyKey`, including after dismissal. */
|
|
27
25
|
async toUsersIdempotently(userIds, idempotencyKey, options = {}) {
|
|
28
26
|
await this.toUsers(userIds, { ...options, idempotencyKey });
|
|
29
27
|
}
|
|
30
28
|
/** Sends to the holders of any of `roleIds`, in `options.tenantId` only when set. */
|
|
31
29
|
async toRoles(roleIds, options = {}) {
|
|
32
|
-
await this.requireIdempotencySupport(options);
|
|
33
30
|
await internal_1.internal.SendToRoles(roleIds, this.data, options);
|
|
34
31
|
}
|
|
35
32
|
async broadcast(options = {}) {
|
|
36
|
-
await this.requireIdempotencySupport(options);
|
|
37
33
|
await internal_1.internal.SendToAll(this.data, options.readScope, options.idempotencyKey, deliveryOf(options));
|
|
38
34
|
}
|
|
39
|
-
async requireIdempotencySupport(options) {
|
|
40
|
-
if (options.idempotencyKey === undefined)
|
|
41
|
-
return;
|
|
42
|
-
if ((await internal_1.internal.SupportsIdempotency()) !== true) {
|
|
43
|
-
throw new Error("DMS idempotent notification delivery is unavailable");
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
35
|
}
|
|
47
36
|
exports.SendableNotification = SendableNotification;
|
|
48
37
|
//# sourceMappingURL=sendable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendable.js","sourceRoot":"","sources":["../../src/notifications/sendable.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AAQtC,SAAS,UAAU,CAAC,OAAoB;IACtC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,MAAa,oBAAoB;IACd,IAAI,CAAmB;IAExC,YAAY,IAAsB;QAChC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,UAAuB,EAAE;QACpD,MAAM,
|
|
1
|
+
{"version":3,"file":"sendable.js","sourceRoot":"","sources":["../../src/notifications/sendable.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AAQtC,SAAS,UAAU,CAAC,OAAoB;IACtC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,MAAa,oBAAoB;IACd,IAAI,CAAmB;IAExC,YAAY,IAAsB;QAChC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,UAAuB,EAAE;QACpD,MAAM,mBAAQ,CAAC,UAAU,CACvB,MAAM,EACN,IAAI,CAAC,IAAI,EACT,SAAS,EACT,OAAO,CAAC,cAAc,EACtB,UAAU,CAAC,OAAO,CAAC,CACpB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAiB,EAAE,UAAuB,EAAE;QACxD,MAAM,mBAAQ,CAAC,WAAW,CACxB,OAAO,EACP,IAAI,CAAC,IAAI,EACT,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,cAAc,EACtB,UAAU,CAAC,OAAO,CAAC,CACpB,CAAC;IACJ,CAAC;IAED,kGAAkG;IAClG,KAAK,CAAC,mBAAmB,CACvB,OAAiB,EACjB,cAAsB,EACtB,UAAuB,EAAE;QAEzB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,OAAO,CACX,OAAiB,EACjB,UAA2B,EAAE;QAE7B,MAAM,mBAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,UAAuB,EAAE;QACvC,MAAM,mBAAQ,CAAC,SAAS,CACtB,IAAI,CAAC,IAAI,EACT,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,cAAc,EACtB,UAAU,CAAC,OAAO,CAAC,CACpB,CAAC;IACJ,CAAC;CACF;AAzDD,oDAyDC"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import type { Tone } from "../base/types/tone";
|
|
2
2
|
export type TogglePermission = "allowed" | "forbidden" | "default";
|
|
3
3
|
export type ReadScope = "individual" | "shared";
|
|
4
|
-
/**
|
|
5
|
-
* Colour of the icon well a notification is listed with. The former `accent`
|
|
6
|
-
* is still read as `primary` in 0.4, with a warning.
|
|
7
|
-
*/
|
|
4
|
+
/** Colour of the icon well a notification is listed with. */
|
|
8
5
|
export type NotificationTone = Extract<Tone, "neutral" | "primary" | "success" | "warning" | "error">;
|
|
9
6
|
export interface NotificationCategoryInfo {
|
|
10
7
|
id: string;
|
|
@@ -40,6 +40,12 @@ interface ModuleEntry {
|
|
|
40
40
|
module?: string;
|
|
41
41
|
category?: CategoryInfo | ControllerClass;
|
|
42
42
|
isModuleRoot?: boolean;
|
|
43
|
+
ownerOnly?: boolean;
|
|
43
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Whether only platform owners reach the entry: it sits inside a module, or it
|
|
47
|
+
* declares or inherits `ownerOnly`.
|
|
48
|
+
*/
|
|
49
|
+
export declare function isOwnerOnly(entry: ModuleEntry): boolean;
|
|
44
50
|
export declare function isInsideModule(entry: ModuleEntry): boolean;
|
|
45
51
|
export {};
|
package/dist/page/categories.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.internal = void 0;
|
|
4
|
+
exports.isOwnerOnly = isOwnerOnly;
|
|
4
5
|
exports.isInsideModule = isInsideModule;
|
|
5
6
|
const interface_core_1 = require("@antelopejs/interface-core");
|
|
6
7
|
const registry_1 = require("./internal/registry");
|
|
7
|
-
|
|
8
|
-
const categories_1 = require("./internal/categories");
|
|
8
|
+
const category_resolution_1 = require("./internal/category-resolution");
|
|
9
9
|
/**
|
|
10
10
|
* A registration proxy that accepts a per-context view of its entries.
|
|
11
11
|
*
|
|
@@ -56,6 +56,13 @@ var internal;
|
|
|
56
56
|
internal.RegisterDynamicMenuProvider = new IdentifiedRegisteringProxy(registry_1.dynamicMenuProviderIdentity);
|
|
57
57
|
internal.RegisterPageExtension = new PageExtensionRegisteringProxy();
|
|
58
58
|
})(internal || (exports.internal = internal = {}));
|
|
59
|
+
/**
|
|
60
|
+
* Whether only platform owners reach the entry: it sits inside a module, or it
|
|
61
|
+
* declares or inherits `ownerOnly`.
|
|
62
|
+
*/
|
|
63
|
+
function isOwnerOnly(entry) {
|
|
64
|
+
return entry.ownerOnly === true || isInsideModule(entry);
|
|
65
|
+
}
|
|
59
66
|
function isInsideModule(entry) {
|
|
60
67
|
if (entry.isModuleRoot)
|
|
61
68
|
return true;
|
|
@@ -63,7 +70,7 @@ function isInsideModule(entry) {
|
|
|
63
70
|
return true;
|
|
64
71
|
let current = entry.category;
|
|
65
72
|
while (current) {
|
|
66
|
-
const resolved = (0,
|
|
73
|
+
const resolved = (0, category_resolution_1.resolveCategoryInfo)(current);
|
|
67
74
|
if (!resolved)
|
|
68
75
|
return false;
|
|
69
76
|
if (resolved.isModuleRoot)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"categories.js","sourceRoot":"","sources":["../../src/page/categories.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"categories.js","sourceRoot":"","sources":["../../src/page/categories.ts"],"names":[],"mappings":";;;AAgGA,kCAEC;AAED,wCAWC;AA9GD,+DAA8D;AAC9D,kDAQ6B;AAQ7B,wEAAqE;AAErE;;;;;;;;;GASG;AACH,MAAM,0BAA6C,SAAQ,iCAE1D;IAC8B;IAA7B,YAA6B,QAAiC;QAC5D,KAAK,EAAE,CAAC;QADmB,aAAQ,GAAR,QAAQ,CAAyB;IAE9D,CAAC;IAEQ,QAAQ,CAAC,KAAQ;QACxB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAEQ,UAAU,CAAC,KAAQ;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,6BAA8B,SAAQ,0BAA6C;IACvF;QACE,KAAK,CAAC,gCAAqB,CAAC,CAAC;IAC/B,CAAC;IAEQ,QAAQ,CAAC,KAAwB;QACxC,IAAA,sCAA2B,EAAC,KAAK,CAAC,CAAC;QACnC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;CACF;AAED;;GAEG;AACH,IAAiB,QAAQ,CAgBxB;AAhBD,WAAiB,QAAQ;IACV,yBAAgB,GAAG,IAAI,0BAA0B,CAC5D,2BAAgB,CACjB,CAAC;IACW,qBAAY,GAAG,IAAI,0BAA0B,CACxD,uBAAY,CACb,CAAC;IACW,uBAAc,GAAG,IAAI,0BAA0B,CAC1D,yBAAc,CACf,CAAC;IACW,oCAA2B,GACtC,IAAI,0BAA0B,CAC5B,sCAA2B,CAC5B,CAAC;IAES,8BAAqB,GAAG,IAAI,6BAA6B,EAAE,CAAC;AAC3E,CAAC,EAhBgB,QAAQ,wBAAR,QAAQ,QAgBxB;AASD;;;GAGG;AACH,SAAgB,WAAW,CAAC,KAAkB;IAC5C,OAAO,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,cAAc,CAAC,KAAkB;IAC/C,IAAI,KAAK,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,OAAO,GAA+C,KAAK,CAAC,QAAQ,CAAC;IACzE,OAAO,OAAO,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,IAAA,yCAAmB,EAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5B,IAAI,QAAQ,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QACvC,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -265,24 +265,21 @@ export interface FrontendModuleMetadata {
|
|
|
265
265
|
* Absolute backend API paths (`/api/...`) the frontend server may open a
|
|
266
266
|
* session from on behalf of this module, as declared by
|
|
267
267
|
* {@link AddFrontendModuleOptions.authEstablishEndpoints}. Empty when the
|
|
268
|
-
* module declared none
|
|
269
|
-
* the field.
|
|
268
|
+
* module declared none.
|
|
270
269
|
*/
|
|
271
|
-
authEstablishEndpoints
|
|
270
|
+
authEstablishEndpoints: string[];
|
|
272
271
|
/**
|
|
273
272
|
* The routes this module serves to anyone, as declared by
|
|
274
273
|
* {@link AddFrontendModuleOptions.publicEndpoints}. Empty when the module
|
|
275
|
-
* declared none
|
|
276
|
-
* field.
|
|
274
|
+
* declared none.
|
|
277
275
|
*/
|
|
278
|
-
publicEndpoints
|
|
276
|
+
publicEndpoints: FrontendPublicEndpoint[];
|
|
279
277
|
/**
|
|
280
278
|
* The backend prefixes this module declares, as
|
|
281
279
|
* {@link AddFrontendModuleOptions.backendProxies}, each with its `auth`.
|
|
282
|
-
* Empty when the module declared none
|
|
283
|
-
* metadata predates the field.
|
|
280
|
+
* Empty when the module declared none.
|
|
284
281
|
*/
|
|
285
|
-
backendProxies
|
|
282
|
+
backendProxies: Required<FrontendBackendProxy>[];
|
|
286
283
|
}
|
|
287
284
|
/** Returns registered frontend source metadata for server-side module discovery, excluding private options. */
|
|
288
285
|
export declare const GetFrontendModules: () => Promise<FrontendModuleMetadata[]>;
|
package/dist/page/controllers.js
CHANGED
|
@@ -17,18 +17,20 @@ const categories_2 = require("./categories");
|
|
|
17
17
|
const metadata_1 = require("./metadata");
|
|
18
18
|
const page_routes_1 = require("./page-routes");
|
|
19
19
|
const fire_and_forget_1 = require("../utils/fire-and-forget");
|
|
20
|
+
const controller_class_1 = require("../utils/internal/controller-class");
|
|
20
21
|
/**
|
|
21
22
|
* Static component fields of a class, in declaration order. Underscore-prefixed
|
|
22
23
|
* fields are skipped, so a class can keep private static state.
|
|
23
24
|
*/
|
|
24
|
-
// oxlint-disable-next-line anti-slop/no-object-parameters -- Decorated classes expose static component fields known only at runtime.
|
|
25
25
|
function collectStaticComponents(cl) {
|
|
26
26
|
const fields = [];
|
|
27
27
|
for (const key of Object.getOwnPropertyNames(cl)) {
|
|
28
28
|
if (key.startsWith("_"))
|
|
29
29
|
continue;
|
|
30
|
-
|
|
31
|
-
const value =
|
|
30
|
+
const descriptor = Object.getOwnPropertyDescriptor(cl, key);
|
|
31
|
+
const value = descriptor?.get
|
|
32
|
+
? descriptor.get.call(cl)
|
|
33
|
+
: descriptor?.value;
|
|
32
34
|
if (value instanceof component_1.Component) {
|
|
33
35
|
fields.push({ key, component: value });
|
|
34
36
|
}
|
|
@@ -36,16 +38,16 @@ function collectStaticComponents(cl) {
|
|
|
36
38
|
return fields;
|
|
37
39
|
}
|
|
38
40
|
exports.RegisterPage = (0, decorators_1.MakeClassDecorator)((cl) => {
|
|
39
|
-
|
|
41
|
+
if (!(0, controller_class_1.isControllerClass)(cl)) {
|
|
42
|
+
throw new TypeError("@RegisterPage decorates a class that extends PageController");
|
|
43
|
+
}
|
|
40
44
|
const meta = (0, interface_core_1.GetMetadata)(cl, metadata_1.PageMetadata);
|
|
41
45
|
for (const { key, component } of collectStaticComponents(cl)) {
|
|
42
46
|
meta.SetComponent(key, component);
|
|
43
47
|
}
|
|
44
48
|
(0, fire_and_forget_1.fireAndForget)(meta.Register(), "page registration");
|
|
45
49
|
});
|
|
46
|
-
function buildExtensionComponents(
|
|
47
|
-
// oxlint-disable-next-line anti-slop/no-object-parameters -- Extension components are collected from the decorated class static fields at runtime.
|
|
48
|
-
extensionClass) {
|
|
50
|
+
function buildExtensionComponents(extensionClass) {
|
|
49
51
|
return collectStaticComponents(extensionClass).map(({ key, component }) => {
|
|
50
52
|
const placement = component.placement ?? component_1.DEFAULT_PLACEMENT;
|
|
51
53
|
const entry = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controllers.js","sourceRoot":"","sources":["../../src/page/controllers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"controllers.js","sourceRoot":"","sources":["../../src/page/controllers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.resolveCategoryInfo = resolveCategoryInfo;
|
|
4
37
|
exports.resolveInheritedLayout = resolveInheritedLayout;
|
|
@@ -11,18 +44,15 @@ exports.applyPageExtension = applyPageExtension;
|
|
|
11
44
|
exports.revokePageExtension = revokePageExtension;
|
|
12
45
|
exports.clearPageMetadata = clearPageMetadata;
|
|
13
46
|
exports.RootCategory = RootCategory;
|
|
14
|
-
const interface_core_1 = require("@antelopejs/interface-core");
|
|
15
47
|
const component_1 = require("../../component");
|
|
16
48
|
const permissions_1 = require("../../permissions");
|
|
17
|
-
|
|
18
|
-
const metadata_1 = require("../metadata");
|
|
49
|
+
const resolution = __importStar(require("./category-resolution"));
|
|
19
50
|
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
20
51
|
const fire_and_forget_1 = require("../../utils/fire-and-forget");
|
|
21
52
|
const registry_1 = require("./registry");
|
|
22
53
|
const category_permission_1 = require("./category-permission");
|
|
23
54
|
const member_access_1 = require("./member-access");
|
|
24
55
|
const types_1 = require("./types");
|
|
25
|
-
// oxlint-disable-next-line import/no-cycle -- Category proxies and isInsideModule are read inside functions, after module evaluation.
|
|
26
56
|
const categories_1 = require("../categories");
|
|
27
57
|
/**
|
|
28
58
|
* Resolve a category to CategoryInfo
|
|
@@ -32,18 +62,7 @@ const categories_1 = require("../categories");
|
|
|
32
62
|
* @internal
|
|
33
63
|
*/
|
|
34
64
|
function resolveCategoryInfo(category) {
|
|
35
|
-
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
// oxlint-disable-next-line anti-slop/no-runtime-typeof -- The published category union distinguishes controller constructors from CategoryInfo objects by callability.
|
|
39
|
-
if (typeof category === "function") {
|
|
40
|
-
const meta = (0, interface_core_1.GetMetadata)(category, metadata_1.PageMetadata);
|
|
41
|
-
if (!meta.pageInfo) {
|
|
42
|
-
throw new Error(`PageMetadata not initialized for controller class.`);
|
|
43
|
-
}
|
|
44
|
-
return meta.pageInfo;
|
|
45
|
-
}
|
|
46
|
-
return category;
|
|
65
|
+
return resolution.resolveCategoryInfo(category);
|
|
47
66
|
}
|
|
48
67
|
/**
|
|
49
68
|
* The default layout a page or category declared under `category` inherits:
|
|
@@ -55,19 +74,7 @@ function resolveCategoryInfo(category) {
|
|
|
55
74
|
* @internal
|
|
56
75
|
*/
|
|
57
76
|
function resolveInheritedLayout(category) {
|
|
58
|
-
|
|
59
|
-
while (current) {
|
|
60
|
-
if (current.layout)
|
|
61
|
-
return current.layout;
|
|
62
|
-
current = findCategoryInfo(current.category);
|
|
63
|
-
}
|
|
64
|
-
return undefined;
|
|
65
|
-
}
|
|
66
|
-
function findCategoryInfo(category) {
|
|
67
|
-
// oxlint-disable-next-line anti-slop/no-runtime-typeof -- The category union represents a controller constructor or resolved metadata, not unparsed input.
|
|
68
|
-
if (typeof category !== "function")
|
|
69
|
-
return category;
|
|
70
|
-
return (0, interface_core_1.GetMetadata)(category, metadata_1.PageMetadata).pageInfo;
|
|
77
|
+
return resolution.resolveInheritedLayout(category);
|
|
71
78
|
}
|
|
72
79
|
/**
|
|
73
80
|
* Calculate the full slug for a page or category
|
|
@@ -158,6 +165,7 @@ function createCategoryFunction(id, options) {
|
|
|
158
165
|
hidden: effectiveOptions.hidden || resolvedCategory?.hidden,
|
|
159
166
|
bypassTenantAccessGate: effectiveOptions.bypassTenantAccessGate ||
|
|
160
167
|
resolvedCategory?.bypassTenantAccessGate,
|
|
168
|
+
ownerOnly: effectiveOptions.ownerOnly || resolvedCategory?.ownerOnly,
|
|
161
169
|
};
|
|
162
170
|
categories_1.internal.RegisterCategory.register(categoryInfo);
|
|
163
171
|
const categoryPermission = {
|
|
@@ -167,10 +175,13 @@ function createCategoryFunction(id, options) {
|
|
|
167
175
|
defaultGranted: categoryInfo.publicAccess || (0, member_access_1.opensToMembers)(categoryInfo.memberAccess),
|
|
168
176
|
...ownPermission(categoryInfo.permission),
|
|
169
177
|
};
|
|
170
|
-
|
|
171
|
-
|
|
178
|
+
const ownPermissionId = (0, category_permission_1.categoryOwnPermissionId)(categoryInfo);
|
|
179
|
+
if ((0, categories_1.isOwnerOnly)(categoryInfo)) {
|
|
180
|
+
(0, permissions_1.MarkModuleScopedPermission)(ownPermissionId);
|
|
181
|
+
return categoryInfo;
|
|
172
182
|
}
|
|
173
|
-
|
|
183
|
+
(0, permissions_1.UnmarkModuleScopedPermission)(ownPermissionId);
|
|
184
|
+
if (!(categoryInfo.permission instanceof component_1.Action)) {
|
|
174
185
|
(0, permissions_1.RegisterPermission)(categoryPermission.id, categoryPermission);
|
|
175
186
|
}
|
|
176
187
|
return categoryInfo;
|