@antelopejs/interface-dms 0.13.3 → 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 +196 -2
- package/README.md +9 -9
- package/dist/auth/db/models/sessions.model.d.ts +3 -3
- package/dist/auth/db/models/userExternalIdentities.model.d.ts +3 -3
- package/dist/auth/db/models/users.model.d.ts +3 -3
- package/dist/auth/db/tables/users.table.d.ts +3 -3
- package/dist/base/activity-feed.d.ts +2 -2
- package/dist/base/block-registry/types.d.ts +1 -1
- package/dist/base/chart-schemas.d.ts +70 -70
- package/dist/base/chart.d.ts +1 -1
- package/dist/base/data-types/default/choices.d.ts +1 -1
- package/dist/base/data-types/default/choices.js +3 -6
- package/dist/base/data-types/default/choices.js.map +1 -1
- package/dist/base/data-types/default/inputs.d.ts +1 -1
- package/dist/base/data-types/default/numbers.d.ts +2 -1
- package/dist/base/data-types/default/numbers.js +4 -3
- package/dist/base/data-types/default/numbers.js.map +1 -1
- package/dist/base/data-types/default/relations.d.ts +0 -6
- package/dist/base/data-types/default/relations.js +0 -1
- package/dist/base/data-types/default/relations.js.map +1 -1
- package/dist/base/data-types/default-types.d.ts +0 -1
- package/dist/base/data-types/default-types.js +0 -2
- package/dist/base/data-types/default-types.js.map +1 -1
- package/dist/base/data-types/index.js +0 -1
- package/dist/base/data-types/index.js.map +1 -1
- package/dist/base/data-types/internal/relation-endpoints.js +5 -3
- package/dist/base/data-types/internal/relation-endpoints.js.map +1 -1
- package/dist/base/data-types/internal/table-view-meta-slot.d.ts +17 -0
- package/dist/base/data-types/internal/table-view-meta-slot.js +25 -0
- package/dist/base/data-types/internal/table-view-meta-slot.js.map +1 -0
- package/dist/base/empty-state.d.ts +1 -1
- package/dist/base/export-jobs.d.ts +47 -19
- package/dist/base/export-jobs.js +39 -4
- package/dist/base/export-jobs.js.map +1 -1
- package/dist/base/form-schema.d.ts +0 -1
- package/dist/base/form-schema.js +12 -12
- package/dist/base/form-schema.js.map +1 -1
- package/dist/base/grid.js +1 -1
- package/dist/base/grid.js.map +1 -1
- package/dist/base/guard.d.ts +4 -4
- package/dist/base/guard.js +1 -1
- package/dist/base/guard.js.map +1 -1
- package/dist/base/helpers/file-refs.js +4 -6
- package/dist/base/helpers/file-refs.js.map +1 -1
- package/dist/base/internal/chart.d.ts +1 -1
- package/dist/base/internal/chart.js +1 -1
- package/dist/base/internal/chart.js.map +1 -1
- package/dist/base/internal/export-jobs.d.ts +11 -0
- package/dist/base/internal/export-jobs.js +11 -0
- package/dist/base/internal/export-jobs.js.map +1 -1
- package/dist/base/internal/form-block-schema.d.ts +1 -1
- package/dist/base/internal/form-block-schema.js +1 -1
- package/dist/base/internal/form-block-schema.js.map +1 -1
- package/dist/base/key-value-list.d.ts +6 -6
- package/dist/base/meter.d.ts +1 -1
- package/dist/base/placeholder.js +1 -1
- package/dist/base/placeholder.js.map +1 -1
- package/dist/base/searchable.d.ts +3 -3
- package/dist/base/searchable.js.map +1 -1
- package/dist/base/stack.js +1 -1
- package/dist/base/stack.js.map +1 -1
- package/dist/base/tab.js +1 -1
- package/dist/base/tab.js.map +1 -1
- package/dist/base/table-view/data-functions.d.ts +10 -11
- package/dist/base/table-view/data-functions.js.map +1 -1
- package/dist/base/table-view/factory.js +2 -0
- package/dist/base/table-view/factory.js.map +1 -1
- package/dist/base/table-view/internal/archive-filter.d.ts +21 -0
- package/dist/base/table-view/internal/archive-filter.js +48 -0
- package/dist/base/table-view/internal/archive-filter.js.map +1 -0
- package/dist/base/table-view/internal/auth.d.ts +2 -2
- package/dist/base/table-view/internal/auth.js +1 -3
- package/dist/base/table-view/internal/auth.js.map +1 -1
- package/dist/base/table-view/internal/column-conditions.js.map +1 -1
- package/dist/base/table-view/internal/data-functions.d.ts +2 -2
- package/dist/base/table-view/internal/factory-lifecycle-created.js +3 -2
- package/dist/base/table-view/internal/factory-lifecycle-created.js.map +1 -1
- package/dist/base/table-view/internal/footer.js +21 -13
- package/dist/base/table-view/internal/footer.js.map +1 -1
- package/dist/base/table-view/internal/guards.d.ts +1 -1
- package/dist/base/table-view/internal/guards.js +11 -8
- package/dist/base/table-view/internal/guards.js.map +1 -1
- package/dist/base/table-view/internal/meta-helpers.js +3 -2
- package/dist/base/table-view/internal/meta-helpers.js.map +1 -1
- package/dist/base/table-view/internal/nav-badges.js +1 -3
- package/dist/base/table-view/internal/nav-badges.js.map +1 -1
- package/dist/base/table-view/internal/option-views.d.ts +7 -4
- package/dist/base/table-view/internal/row-actions-schema.d.ts +6 -6
- package/dist/base/table-view/meta.d.ts +5 -5
- package/dist/base/table-view/meta.js +6 -2
- package/dist/base/table-view/meta.js.map +1 -1
- package/dist/base/table-view/routes.d.ts +39 -12
- package/dist/base/table-view/routes.js +0 -1
- package/dist/base/table-view/routes.js.map +1 -1
- package/dist/base/table-view/schema.d.ts +127 -127
- package/dist/base/top-list-card.d.ts +4 -4
- package/dist/component-options/data-type.d.ts +2 -1
- package/dist/component-options/data-type.js +1 -1
- package/dist/component-options/data-type.js.map +1 -1
- package/dist/component-slots.js +1 -1
- package/dist/component-slots.js.map +1 -1
- package/dist/connection-access.d.ts +46 -0
- package/dist/connection-access.js +73 -0
- package/dist/connection-access.js.map +1 -0
- package/dist/data-controllers/members.d.ts +15 -2
- package/dist/data-controllers/roles.d.ts +15 -2
- package/dist/db/internal/exportJobs.model.d.ts +3 -3
- package/dist/db/internal/inviteResolutions.model.d.ts +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-slots.js +1 -1
- package/dist/internal/component-slots.js.map +1 -1
- package/dist/internal/invite-content.d.ts +8 -0
- package/dist/internal/invite-content.js +36 -0
- package/dist/internal/invite-content.js.map +1 -0
- package/dist/internal/tenant-ownership.d.ts +5 -4
- package/dist/internal/tenant-ownership.js +5 -4
- package/dist/internal/tenant-ownership.js.map +1 -1
- package/dist/invite-extensions/internal/delivery.d.ts +3 -2
- package/dist/invite-extensions/internal/delivery.js +3 -2
- package/dist/invite-extensions/internal/delivery.js.map +1 -1
- package/dist/invite-resolution.d.ts +5 -1
- package/dist/invite-resolution.js +10 -26
- package/dist/invite-resolution.js.map +1 -1
- package/dist/invites.d.ts +5 -0
- package/dist/invites.js +27 -1
- package/dist/invites.js.map +1 -1
- package/dist/notifications/internal.d.ts +0 -1
- package/dist/notifications/internal.js +0 -1
- package/dist/notifications/internal.js.map +1 -1
- package/dist/notifications/sendable.d.ts +1 -2
- package/dist/notifications/sendable.js +1 -12
- package/dist/notifications/sendable.js.map +1 -1
- package/dist/notifications/types.d.ts +1 -4
- package/dist/page/categories.d.ts +6 -0
- package/dist/page/categories.js +10 -3
- package/dist/page/categories.js.map +1 -1
- package/dist/page/controllers.d.ts +6 -9
- package/dist/page/controllers.js +5 -6
- package/dist/page/controllers.js.map +1 -1
- package/dist/page/internal/categories.js +43 -32
- package/dist/page/internal/categories.js.map +1 -1
- package/dist/page/internal/category-resolution.d.ts +31 -0
- package/dist/page/internal/category-resolution.js +63 -0
- package/dist/page/internal/category-resolution.js.map +1 -0
- package/dist/page/internal/metadata-extension-contributions.js +1 -2
- package/dist/page/internal/metadata-extension-contributions.js.map +1 -1
- package/dist/page/internal/metadata-info.js +19 -7
- package/dist/page/internal/metadata-info.js.map +1 -1
- package/dist/page/internal/metadata-layout.d.ts +3 -2
- package/dist/page/internal/metadata-layout.js.map +1 -1
- package/dist/page/internal/metadata-lifecycle.js +1 -4
- package/dist/page/internal/metadata-lifecycle.js.map +1 -1
- package/dist/page/internal/metadata-publish.js +7 -6
- package/dist/page/internal/metadata-publish.js.map +1 -1
- package/dist/page/internal/metadata-registration.js +8 -6
- package/dist/page/internal/metadata-registration.js.map +1 -1
- package/dist/page/internal/page-controller.d.ts +18 -0
- package/dist/page/internal/page-controller.js +36 -0
- package/dist/page/internal/page-controller.js.map +1 -0
- package/dist/page/metadata.d.ts +3 -3
- package/dist/page/metadata.js +4 -2
- package/dist/page/metadata.js.map +1 -1
- package/dist/page/types.d.ts +8 -2
- package/dist/page.d.ts +1 -1
- package/dist/page.js +2 -1
- package/dist/page.js.map +1 -1
- package/dist/permissions.d.ts +2 -1
- package/dist/permissions.js +5 -2
- package/dist/permissions.js.map +1 -1
- package/dist/tenant-provisioning.js +1 -1
- package/dist/tenant-provisioning.js.map +1 -1
- package/dist/types.d.ts +7 -3
- package/docs/1.core/11.modules-and-dynamic-menus.md +3 -3
- package/docs/1.core/2.pages-and-modules.md +2 -1
- package/docs/1.core/4.permissions.md +2 -2
- package/docs/1.core/5.tenancy.md +1 -1
- package/docs/1.core/6.invites.md +3 -1
- package/docs/2.auth/2.authentication.md +1 -1
- package/docs/2.auth/3.tokens-and-sessions.md +1 -1
- package/docs/3.base/1.introduction.md +1 -1
- package/docs/3.base/14.table-events-and-helpers.md +1 -1
- package/docs/3.base/15.table-sources-and-gates.md +14 -2
- package/docs/3.base/3.forms.md +1 -1
- package/docs/3.base/4.tables.md +1 -1
- package/docs/3.base/5.charts-and-widgets.md +3 -3
- package/docs/3.base/8.data-types.md +1 -1
- package/docs/3.base/9.helpers.md +16 -5
- package/docs/4.notifications/3.sending.md +0 -11
- package/docs/index.md +1 -1
- package/package.json +11 -11
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PageTargetError = void 0;
|
|
4
|
+
exports.pageController = pageController;
|
|
5
|
+
const type_check_1 = require("../../utils/internal/type-check");
|
|
6
|
+
/**
|
|
7
|
+
* A page's metadata whose target is not a controller class: a class built
|
|
8
|
+
* with `Controller(location)` or `PageController(...)`. `GetMetadata` builds
|
|
9
|
+
* page metadata for every link of a class's prototype chain, so the target is
|
|
10
|
+
* typed as any decorator target; a page is only ever declared on a controller.
|
|
11
|
+
*/
|
|
12
|
+
class PageTargetError extends TypeError {
|
|
13
|
+
constructor(target) {
|
|
14
|
+
super(`A page is declared on a controller class, not on ${target.constructor.name}`);
|
|
15
|
+
this.name = new.target.name;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.PageTargetError = PageTargetError;
|
|
19
|
+
function isControllerClass(target) {
|
|
20
|
+
return ((0, type_check_1.isClass)(target) &&
|
|
21
|
+
"extend" in target &&
|
|
22
|
+
(0, type_check_1.isFunction)(target.extend) &&
|
|
23
|
+
"location" in target &&
|
|
24
|
+
(0, type_check_1.isString)(target.location));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The controller class a page's metadata was built for.
|
|
28
|
+
*
|
|
29
|
+
* @throws {PageTargetError} When the target is not a controller class.
|
|
30
|
+
*/
|
|
31
|
+
function pageController(target) {
|
|
32
|
+
if (isControllerClass(target))
|
|
33
|
+
return target;
|
|
34
|
+
throw new PageTargetError(target);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=page-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-controller.js","sourceRoot":"","sources":["../../../src/page/internal/page-controller.ts"],"names":[],"mappings":";;;AAmCA,wCAGC;AAnCD,gEAAgF;AAEhF;;;;;GAKG;AACH,MAAa,eAAgB,SAAQ,SAAS;IAC5C,YAAY,MAAuB;QACjC,KAAK,CACH,oDAAoD,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAC9E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;CACF;AAPD,0CAOC;AAED,SAAS,iBAAiB,CAAC,MAAuB;IAChD,OAAO,CACL,IAAA,oBAAO,EAAC,MAAM,CAAC;QACf,QAAQ,IAAI,MAAM;QAClB,IAAA,uBAAU,EAAC,MAAM,CAAC,MAAM,CAAC;QACzB,UAAU,IAAI,MAAM;QACpB,IAAA,qBAAQ,EAAC,MAAM,CAAC,QAAQ,CAAC,CAC1B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,MAAuB;IACpD,IAAI,iBAAiB,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7C,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
package/dist/page/metadata.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DecoratorTarget } from "@antelopejs/interface-core/decorators";
|
|
2
2
|
import { type Component, type ComponentInfo } from "../component";
|
|
3
3
|
import { type TenantGuardOptions } from "../guards";
|
|
4
4
|
import { type MenuOptions, type PageInfo } from "./types";
|
|
5
5
|
export declare class PageMetadata {
|
|
6
|
-
readonly target:
|
|
6
|
+
readonly target: DecoratorTarget;
|
|
7
7
|
static key: symbol;
|
|
8
8
|
pageInfo?: PageInfo;
|
|
9
9
|
layout?: ComponentInfo;
|
|
@@ -41,7 +41,7 @@ export declare class PageMetadata {
|
|
|
41
41
|
private registeredPagePermission;
|
|
42
42
|
private skipComponentPermissions;
|
|
43
43
|
private moduleScoped;
|
|
44
|
-
constructor(target:
|
|
44
|
+
constructor(target: DecoratorTarget);
|
|
45
45
|
inherit(parent: PageMetadata): void;
|
|
46
46
|
SetComponent(id: string, component: Component): void;
|
|
47
47
|
SetInfo(id: string, fullSlug: string, menuOptions: MenuOptions, pageLayout?: ComponentInfo): void;
|
package/dist/page/metadata.js
CHANGED
|
@@ -35,13 +35,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.PageMetadata = void 0;
|
|
37
37
|
const metadata_upload_registration_1 = require("./internal/metadata-upload-registration");
|
|
38
|
-
// oxlint-disable-next-line import/no-cycle -- Category proxies are read after evaluation.
|
|
39
38
|
const metadata = __importStar(require("./internal/metadata-lifecycle"));
|
|
39
|
+
const category_resolution_1 = require("./internal/category-resolution");
|
|
40
|
+
const page_controller_1 = require("./internal/page-controller");
|
|
40
41
|
const type_check_1 = require("../utils/internal/type-check");
|
|
41
42
|
class PageMetadata {
|
|
42
43
|
target;
|
|
43
44
|
static key = Symbol();
|
|
44
45
|
static {
|
|
46
|
+
(0, category_resolution_1.installPageMetadata)(PageMetadata);
|
|
45
47
|
metadata.installMetadataOwner((page) => ({
|
|
46
48
|
get registration() {
|
|
47
49
|
return page.registration;
|
|
@@ -317,7 +319,7 @@ class PageMetadata {
|
|
|
317
319
|
return metadata.registerPermission(this, pageInfo);
|
|
318
320
|
}
|
|
319
321
|
registerLayoutRoute(pageInfo) {
|
|
320
|
-
metadata.registerLayoutRoute(() => this.target, pageInfo, () => this.registration, (request) => this.resolvePageLayout(request), (request, options) => this.resolvePageLayout(request, options));
|
|
322
|
+
metadata.registerLayoutRoute(() => (0, page_controller_1.pageController)(this.target), pageInfo, () => this.registration, (request) => this.resolvePageLayout(request), (request, options) => this.resolvePageLayout(request, options));
|
|
321
323
|
}
|
|
322
324
|
async resolvePageLayout({ user, memberModel, roleModel, tenantId, query, params, resolverContext, }, { enforceTenantAccessGate = false } = {}) {
|
|
323
325
|
const layout = metadata.registeredLayout(this);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/page/metadata.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/page/metadata.ts"],"names":[],"mappings":"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"}
|
package/dist/page/types.d.ts
CHANGED
|
@@ -69,8 +69,7 @@ export declare const MODULE_URL_PREFIX = "/modules";
|
|
|
69
69
|
export type ModuleStatus = "live" | "beta" | "update" | "attention";
|
|
70
70
|
/**
|
|
71
71
|
* Tone of one readout line: `success` (healthy figure), `info` (neutral
|
|
72
|
-
* fact), `warning` (worth a look) or `error` (something is failing).
|
|
73
|
-
* former `ok` is still read as `success` in 0.4, with a warning.
|
|
72
|
+
* fact), `warning` (worth a look) or `error` (something is failing).
|
|
74
73
|
*/
|
|
75
74
|
export type ModuleReadoutTone = Extract<Tone, "success" | "info" | "warning" | "error">;
|
|
76
75
|
/**
|
|
@@ -237,6 +236,13 @@ export interface MenuOptions {
|
|
|
237
236
|
validation?: PageValidation;
|
|
238
237
|
setupId?: string;
|
|
239
238
|
noComponentPermissions?: boolean;
|
|
239
|
+
/**
|
|
240
|
+
* Only platform owners reach the entry, as on a module page: no role can be
|
|
241
|
+
* granted it or its blocks, Roles does not list them, anyone else gets 403.
|
|
242
|
+
* Inherited under a category; wins over `publicAccess`, `authOnly` and
|
|
243
|
+
* `memberAccess`.
|
|
244
|
+
*/
|
|
245
|
+
ownerOnly?: boolean;
|
|
240
246
|
/**
|
|
241
247
|
* Query parameters carried by the entry's menu link, so a single page with
|
|
242
248
|
* `validation.requiredQueryParams` can serve many entries
|
package/dist/page.d.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* (`extension-assembly`), extension validation, component targets and trees,
|
|
20
20
|
* form page route claims and the registration identities.
|
|
21
21
|
*/
|
|
22
|
-
export { internal, isInsideModule } from "./page/categories";
|
|
22
|
+
export { internal, isInsideModule, isOwnerOnly } from "./page/categories";
|
|
23
23
|
export { AddFrontendModule, type AddFrontendModuleOptions, Category, type FrontendBackendProxy, type FrontendModuleContext, type FrontendModuleFunction, type FrontendModuleMetadata, type FrontendModuleOptions, type FrontendModuleRegistration, type FrontendModuleValue, type FrontendPublicEndpoint, type FrontendRendererMetadata, FrontendModulesChanged, GetFrontendModules, NotifyMenuChanged, PageController, RegisterDynamicMenuProvider, RegisterPage, RegisterPageExtension, RootCategory, RootPageController, } from "./page/controllers";
|
|
24
24
|
export { PageDeclarationConflictError } from "./page/declaration-conflict";
|
|
25
25
|
export { FormPageRouteConflictError } from "./page/form-page-routes";
|
package/dist/page.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.GetRegisteredPageIds = exports.GetPermissionId = exports.GetPageLayoutBySlug = exports.GetComponentPermissionIds = exports.ClearPageLayoutBySlug = exports.PageMetadata = exports.FormPageRouteConflictError = exports.PageDeclarationConflictError = exports.RootPageController = exports.RootCategory = exports.RegisterPageExtension = exports.RegisterPage = exports.RegisterDynamicMenuProvider = exports.PageController = exports.NotifyMenuChanged = exports.GetFrontendModules = exports.FrontendModulesChanged = exports.Category = exports.AddFrontendModule = exports.isInsideModule = exports.internal = void 0;
|
|
17
|
+
exports.GetRegisteredPageIds = exports.GetPermissionId = exports.GetPageLayoutBySlug = exports.GetComponentPermissionIds = exports.ClearPageLayoutBySlug = exports.PageMetadata = exports.FormPageRouteConflictError = exports.PageDeclarationConflictError = exports.RootPageController = exports.RootCategory = exports.RegisterPageExtension = exports.RegisterPage = exports.RegisterDynamicMenuProvider = exports.PageController = exports.NotifyMenuChanged = exports.GetFrontendModules = exports.FrontendModulesChanged = exports.Category = exports.AddFrontendModule = exports.isOwnerOnly = exports.isInsideModule = exports.internal = void 0;
|
|
18
18
|
/**
|
|
19
19
|
* Public entry of the page system, split by concern under `./page/`:
|
|
20
20
|
*
|
|
@@ -39,6 +39,7 @@ exports.GetRegisteredPageIds = exports.GetPermissionId = exports.GetPageLayoutBy
|
|
|
39
39
|
var categories_1 = require("./page/categories");
|
|
40
40
|
Object.defineProperty(exports, "internal", { enumerable: true, get: function () { return categories_1.internal; } });
|
|
41
41
|
Object.defineProperty(exports, "isInsideModule", { enumerable: true, get: function () { return categories_1.isInsideModule; } });
|
|
42
|
+
Object.defineProperty(exports, "isOwnerOnly", { enumerable: true, get: function () { return categories_1.isOwnerOnly; } });
|
|
42
43
|
var controllers_1 = require("./page/controllers");
|
|
43
44
|
Object.defineProperty(exports, "AddFrontendModule", { enumerable: true, get: function () { return controllers_1.AddFrontendModule; } });
|
|
44
45
|
Object.defineProperty(exports, "Category", { enumerable: true, get: function () { return controllers_1.Category; } });
|
package/dist/page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../src/page.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../src/page.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,gDAA0E;AAAjE,sGAAA,QAAQ,OAAA;AAAE,4GAAA,cAAc,OAAA;AAAE,yGAAA,WAAW,OAAA;AAC9C,kDAsB4B;AArB1B,gHAAA,iBAAiB,OAAA;AAEjB,uGAAA,QAAQ,OAAA;AAUR,qHAAA,sBAAsB,OAAA;AACtB,iHAAA,kBAAkB,OAAA;AAClB,gHAAA,iBAAiB,OAAA;AACjB,6GAAA,cAAc,OAAA;AACd,0HAAA,2BAA2B,OAAA;AAC3B,2GAAA,YAAY,OAAA;AACZ,oHAAA,qBAAqB,OAAA;AACrB,2GAAA,YAAY,OAAA;AACZ,iHAAA,kBAAkB,OAAA;AAEpB,oEAA2E;AAAlE,oIAAA,4BAA4B,OAAA;AACrC,4DAAqE;AAA5D,8HAAA,0BAA0B,OAAA;AACnC,4CAA+C;AAAtC,wGAAA,YAAY,OAAA;AACrB,qDAAmC;AACnC,4CAMyB;AALvB,iHAAA,qBAAqB,OAAA;AACrB,qHAAA,yBAAyB,OAAA;AACzB,+GAAA,mBAAmB,OAAA;AACnB,2GAAA,eAAe,OAAA;AACf,gHAAA,oBAAoB,OAAA;AAEtB,+CAA6B;AAC7B,+CAA6B"}
|
package/dist/permissions.d.ts
CHANGED
|
@@ -36,7 +36,8 @@ export declare const GetPermission: (id: string) => Promise<Permission | undefin
|
|
|
36
36
|
export declare const GetPermissions: () => Promise<Record<string, PermissionTree>>;
|
|
37
37
|
/**
|
|
38
38
|
* Compute the user's BASE permission set from role grants (or `*` for
|
|
39
|
-
* platform owners).
|
|
39
|
+
* platform owners). Only `user.owner` yields `*`: a role that stores `*` grants
|
|
40
|
+
* nothing through it. This set does not account for registered permissions
|
|
40
41
|
* resolvers (e.g. plan gating): authorization surfaces must use
|
|
41
42
|
* {@link GetEffectiveUserPermissions} instead so that every surface (guards,
|
|
42
43
|
* menus, table views, search) agrees on the same effective set.
|
package/dist/permissions.js
CHANGED
|
@@ -44,7 +44,8 @@ exports.GetPermission = (0, interface_core_1.InterfaceFunction)();
|
|
|
44
44
|
exports.GetPermissions = (0, interface_core_1.InterfaceFunction)();
|
|
45
45
|
/**
|
|
46
46
|
* Compute the user's BASE permission set from role grants (or `*` for
|
|
47
|
-
* platform owners).
|
|
47
|
+
* platform owners). Only `user.owner` yields `*`: a role that stores `*` grants
|
|
48
|
+
* nothing through it. This set does not account for registered permissions
|
|
48
49
|
* resolvers (e.g. plan gating): authorization surfaces must use
|
|
49
50
|
* {@link GetEffectiveUserPermissions} instead so that every surface (guards,
|
|
50
51
|
* menus, table views, search) agrees on the same effective set.
|
|
@@ -57,7 +58,9 @@ async function GetUserPermissions(user, roleIds, roleModel) {
|
|
|
57
58
|
return new Set();
|
|
58
59
|
}
|
|
59
60
|
const roles = await roleModel.getBy("_id", ...roleIds);
|
|
60
|
-
return new Set(roles
|
|
61
|
+
return new Set(roles
|
|
62
|
+
.flatMap((role) => role.permissions)
|
|
63
|
+
.filter((permissionId) => permissionId !== "*"));
|
|
61
64
|
}
|
|
62
65
|
/**
|
|
63
66
|
* Compute the user's EFFECTIVE permission set: base permissions from roles,
|
package/dist/permissions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":";;;AAoDA,gEAEC;AAED,oEAEC;AAED,4DAIC;
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ const hooks_1 = require("./hooks");
|
|
|
21
21
|
async function ProvisionTenant(payload) {
|
|
22
22
|
const schema = interface_database_1.Schema.get(constants_1.TENANT_SCHEMA_NAME);
|
|
23
23
|
(0, node_assert_1.strict)(schema, `Schema '${constants_1.TENANT_SCHEMA_NAME}' is not registered`);
|
|
24
|
-
await schema.createInstance(payload.tenantId);
|
|
24
|
+
await schema.createInstance(payload.tenantId).run();
|
|
25
25
|
await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.TENANT_BEING_PROVISIONED, payload);
|
|
26
26
|
}
|
|
27
27
|
//# sourceMappingURL=tenant-provisioning.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-provisioning.js","sourceRoot":"","sources":["../src/tenant-provisioning.ts"],"names":[],"mappings":";;AAsBA,0CAOC;AA7BD,6CAA+C;AAC/C,uEAAwD;AACxD,2CAAiD;AACjD,mCAIiB;AAEjB;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,eAAe,CACnC,OAAsC;IAEtC,MAAM,MAAM,GAAG,2BAAM,CAAC,GAAG,CAAC,8BAAkB,CAAC,CAAC;IAC9C,IAAA,oBAAM,EAAC,MAAM,EAAE,WAAW,8BAAkB,qBAAqB,CAAC,CAAC;IACnE,MAAM,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"tenant-provisioning.js","sourceRoot":"","sources":["../src/tenant-provisioning.ts"],"names":[],"mappings":";;AAsBA,0CAOC;AA7BD,6CAA+C;AAC/C,uEAAwD;AACxD,2CAAiD;AACjD,mCAIiB;AAEjB;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,eAAe,CACnC,OAAsC;IAEtC,MAAM,MAAM,GAAG,2BAAM,CAAC,GAAG,CAAC,8BAAkB,CAAC,CAAC;IAC9C,IAAA,oBAAM,EAAC,MAAM,EAAE,WAAW,8BAAkB,qBAAqB,CAAC,CAAC;IACnE,MAAM,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;IACpD,MAAM,IAAA,oBAAY,EAAC,YAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;AAC7D,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DecoratorTarget } from "@antelopejs/interface-core/decorators";
|
|
2
2
|
export type MaybePromise<T> = T | Promise<T>;
|
|
3
3
|
/** An image stored by key, as the image data type and `User.avatar` hold it. */
|
|
4
4
|
export interface ImageValue {
|
|
@@ -11,8 +11,12 @@ export interface ImageValue {
|
|
|
11
11
|
* the page registers. `PageMetadata` implements it.
|
|
12
12
|
*/
|
|
13
13
|
export interface CreatedPage {
|
|
14
|
-
/**
|
|
15
|
-
|
|
14
|
+
/**
|
|
15
|
+
* The page controller the component is placed on, as page metadata holds
|
|
16
|
+
* it. `pageController` (`@antelopejs/interface-dms/page/internal/page-controller`)
|
|
17
|
+
* narrows it to the controller class, or throws `PageTargetError`.
|
|
18
|
+
*/
|
|
19
|
+
readonly target: DecoratorTarget;
|
|
16
20
|
/** The id and slug the page registered under, from the root category. */
|
|
17
21
|
readonly pageInfo?: {
|
|
18
22
|
readonly fullId: string;
|
|
@@ -86,12 +86,12 @@ A page that declares both `module` and a `category` must name a category under t
|
|
|
86
86
|
|
|
87
87
|
`MODULE_URL_PREFIX` is `"/modules"`. The module root's `urlSlug` is the module id and its parent is `modulesCategory`, so module pages resolve under `/modules/<moduleId>/...`. Their ids follow the same chain. The module root's `fullId` is `modules.<moduleId>`. A page attached to the root is `modules.<moduleId>.<pageId>`, and a page in the default category is `modules.<moduleId>.pages.<pageId>`.
|
|
88
88
|
|
|
89
|
-
`isInsideModule(entry)` returns whether an entry belongs to a module. It accepts any object with optional `module`, `category` and `isModuleRoot` fields, so a `CategoryInfo` or a `PageInfo` qualifies. It returns `true` when the entry is a module root or declares `module`, and otherwise walks the category chain looking for a module root.
|
|
89
|
+
`isInsideModule(entry)` returns whether an entry belongs to a module. It accepts any object with optional `module`, `category` and `isModuleRoot` fields, so a `CategoryInfo` or a `PageInfo` qualifies. It returns `true` when the entry is a module root or declares `module`, and otherwise walks the category chain looking for a module root. `isOwnerOnly(entry)` also holds for an entry that declares or inherits `ownerOnly`, and it decides who reaches the entry.
|
|
90
90
|
|
|
91
91
|
```typescript fragment
|
|
92
|
-
import {
|
|
92
|
+
import { isOwnerOnly } from "@antelopejs/interface-dms/page";
|
|
93
93
|
|
|
94
|
-
if (
|
|
94
|
+
if (isOwnerOnly(pageInfo)) {
|
|
95
95
|
showOwnerBadge();
|
|
96
96
|
}
|
|
97
97
|
```
|
|
@@ -68,6 +68,7 @@ The third argument is the page layout, a `ComponentInfo` from a layout builder s
|
|
|
68
68
|
| `validation` | `PageValidation` | Preconditions for opening the page. |
|
|
69
69
|
| `setupId` | `string` | Id of a page setup function to run while the page is mounted. |
|
|
70
70
|
| `noComponentPermissions` | `boolean` | Registers no permission for the page's components. |
|
|
71
|
+
| `ownerOnly` | `boolean` | Only a platform owner reaches the entry, as on a module page. Its permission and its components' are marked module-scoped instead of registered, so no role can be granted them and the roles editor does not list them. Anyone else is refused with `403`. A page inherits it from its category, and it wins over `publicAccess`, `authOnly` and `memberAccess`. |
|
|
71
72
|
| `query` | `MenuItemQuery` | Query parameters carried by the entry's menu link. |
|
|
72
73
|
| `variant` | `MenuItemVariant` | Semantic look of the entry. |
|
|
73
74
|
| `status` | `MenuItemStatus` | Semantic state dot at the end of the entry. |
|
|
@@ -146,7 +147,7 @@ export const contacts = Category("contacts", {
|
|
|
146
147
|
});
|
|
147
148
|
```
|
|
148
149
|
|
|
149
|
-
Creating a category registers a permission keyed to its `fullId`. The permission is `defaultGranted` when the category declares `publicAccess` or `memberAccess`, and its `permission` option overrides the derived fields. A category inside a module marks its id module-scoped instead, and a category whose `permission` is an `Action` registers none. [Permissions](/docs/interfaces/core/permissions) covers both.
|
|
150
|
+
Creating a category registers a permission keyed to its `fullId`. The permission is `defaultGranted` when the category declares `publicAccess` or `memberAccess`, and its `permission` option overrides the derived fields. A category inside a module or declaring `ownerOnly` marks its id module-scoped instead, and a category whose `permission` is an `Action` registers none. [Permissions](/docs/interfaces/core/permissions) covers both.
|
|
150
151
|
|
|
151
152
|
### Root categories
|
|
152
153
|
|
|
@@ -4,7 +4,7 @@ description: "Permission ids are dot-separated strings built from the page tree.
|
|
|
4
4
|
mode: reference
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
A permission id is a dot-separated string built from the page tree: a page's `fullId`, then every component id in the position's path, then the action id when there is one. A role holds a flat list of granted ids, and a platform owner holds the wildcard `*`. `GetUserPermissions` returns the base set a user's roles grant. `GetEffectiveUserPermissions` runs that set through the registered resolvers, and every authorization surface uses the effective set.
|
|
7
|
+
A permission id is a dot-separated string built from the page tree: a page's `fullId`, then every component id in the position's path, then the action id when there is one. A role holds a flat list of granted ids, and a platform owner, a user flagged `owner`, holds the wildcard `*`. `GetUserPermissions` returns the base set a user's roles grant, without `*`: a role that lists it grants nothing through it. `GetEffectiveUserPermissions` runs that set through the registered resolvers, and every authorization surface uses the effective set.
|
|
8
8
|
|
|
9
9
|
The API spans three subpaths:
|
|
10
10
|
|
|
@@ -152,7 +152,7 @@ UnmarkModuleScopedPermission("modules.automation.builder");
|
|
|
152
152
|
|
|
153
153
|
`IsModuleScopedPermission(id)` checks the id and each id above it, one dot-separated segment at a time, so marking a page id also covers every component and action id derived from it. In the example, `scoped` is `true`. `UnmarkModuleScopedPermission(id)` removes the mark for that exact id only.
|
|
154
154
|
|
|
155
|
-
Page and category registration calls `MarkModuleScopedPermission` whenever `
|
|
155
|
+
Page and category registration calls `MarkModuleScopedPermission` whenever `isOwnerOnly` holds: the entry is inside a module or declares `ownerOnly` ([Modules and dynamic menus](/docs/interfaces/core/modules-and-dynamic-menus#module-urls-and-ids)). Call it directly only for ids you build outside that path.
|
|
156
156
|
|
|
157
157
|
## Reshape the effective set
|
|
158
158
|
|
package/docs/1.core/5.tenancy.md
CHANGED
|
@@ -280,7 +280,7 @@ await applyTenantOwnership(GetModel(UserModel), userId, tenantId, {
|
|
|
280
280
|
|
|
281
281
|
`applyTenantOwnership` goes through [`changeTenantMembers`](#changetenantmembers), which fires `Hook.MEMBER_BEING_CHANGED` before any write, so a module can veto it. When the user is not a member yet, it also fires `Hook.MEMBER_BEING_ADDED` before the write and `Hook.MEMBER_ADDED` after it. For an existing member, it updates `roleIds` and `isTenantOwner` and fires neither of those two hooks ([Hooks](/docs/interfaces/core/hooks)).
|
|
282
282
|
|
|
283
|
-
Two helpers keep the
|
|
283
|
+
Two helpers keep the platform-owner flag on the user row aligned with tenant ownership:
|
|
284
284
|
|
|
285
285
|
| Function | Signature |
|
|
286
286
|
| -------- | --------- |
|
package/docs/1.core/6.invites.md
CHANGED
|
@@ -91,7 +91,7 @@ if (result.kind === "invited" && result.emailDelivery === "failed") {
|
|
|
91
91
|
|
|
92
92
|
## Create an invite token directly
|
|
93
93
|
|
|
94
|
-
`createUserInviteToken` is the lower-level function. It
|
|
94
|
+
`createUserInviteToken` is the lower-level function. It creates a row, and it never touches memberships or email.
|
|
95
95
|
|
|
96
96
|
```typescript fragment
|
|
97
97
|
import { createUserInviteToken } from "@antelopejs/interface-dms/invites";
|
|
@@ -124,6 +124,8 @@ const { inviteId, token } = await createUserInviteToken({
|
|
|
124
124
|
|
|
125
125
|
An existing invite for the same email in the same tenant is retired through a durable decision. Completion invokes `Hook.INVITE_DELETED` for the old invitation, creates the replacement through `Hook.INVITE_BEING_CREATED` and `Hook.INVITE_CREATED`, and removes the old row. A failed completion can replay hooks with the same delivery identity. See [Durable invite resolution](#durable-invite-resolution) and [Hooks](/docs/interfaces/core/hooks).
|
|
126
126
|
|
|
127
|
+
When concurrent calls for one email all find no invite, the tenant keeps one. A unique index on `email` and `creationResolutionId` refuses the second row. The call that loses returns the kept invite's `inviteId` and `token` when it asked for the same content, and fails with HTTP 409 when it did not.
|
|
128
|
+
|
|
127
129
|
`inviteeDisplayName(firstname?, lastname?)` joins the two names into the name the invite email uses, and returns `undefined` when the invite carries neither. `inviteUserToTenant` calls it for you. Call it yourself when you render your own invite screen from a stored row, so a nameless invite falls back the same way the email does.
|
|
128
130
|
|
|
129
131
|
## Token constants
|
|
@@ -19,7 +19,7 @@ The `User` type they inject comes from `@antelopejs/interface-dms/auth/db` and i
|
|
|
19
19
|
|
|
20
20
|
## Require an authenticated user
|
|
21
21
|
|
|
22
|
-
`AuthUser` injects the `User`, and enforces email validation when the deployment sets `auth.mustValidateEmail`. A caller whose email is not validated then gets `401` (`Email not validated`). Use it on any route that must have a signed-in caller.
|
|
22
|
+
`AuthUser` injects the `User`, and enforces email validation when the deployment sets `auth.mustValidateEmail`. A caller whose email is not validated then gets `401` (`Email not validated`). A token that is malformed, names no existing user, is badly signed, expired or issued for another purpose gets `401` (`Invalid session token`) whatever the reason, so a forged token cannot tell whether its `id` names a user. A token whose session was signed out gets `401` (`error.session_expired`). Use it on any route that must have a signed-in caller.
|
|
23
23
|
|
|
24
24
|
```typescript
|
|
25
25
|
import { Controller, Get } from "@antelopejs/interface-api";
|
|
@@ -86,7 +86,7 @@ validateRefreshToken(
|
|
|
86
86
|
): Promise<{ id: string; tenantId: string; sessionId?: string }>
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
The function decodes the token, loads the user it names, and verifies the signature against that user. It also checks that the token was issued as a refresh token and carries non-empty `id` and `tenantId` claims. It throws `HTTPResult(401)`
|
|
89
|
+
The function decodes the token, loads the user it names, and verifies the signature against that user. It also checks that the token was issued as a refresh token and carries non-empty `id` and `tenantId` claims. It throws `HTTPResult(401)` with the same message, `Invalid session token`, when the token is malformed, names no existing user, is badly signed, expired or issued for another purpose, so a forged token cannot tell whether its `id` names a user. A token naming no user is still verified, against a key no token is signed with, so the refusal takes as long either way. It returns the claims only. The caller must still confirm three things: that the session exists, that the token is its current one (`isCurrentRefreshToken`), and that the user still has access to `tenantId`.
|
|
90
90
|
|
|
91
91
|
```typescript
|
|
92
92
|
import { HTTPResult } from "@antelopejs/interface-api";
|
|
@@ -172,7 +172,7 @@ export class SettingsPage extends PageController(
|
|
|
172
172
|
_id: SETTINGS_ROW_ID,
|
|
173
173
|
enabled: result.data.enabled ?? false,
|
|
174
174
|
retentionDays: result.data.retentionDays,
|
|
175
|
-
}, { conflict: "update" });
|
|
175
|
+
}, { conflict: "update" }).run();
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
```
|
|
@@ -83,7 +83,7 @@ Each entry of `config.columns` carries `id`, `header`, `isVisible`, `type` (the
|
|
|
83
83
|
|
|
84
84
|
## Route helpers
|
|
85
85
|
|
|
86
|
-
`table-view` also exports the interface functions the wrapped routes call. They are the seam between the interface and its implementation. A consumer wires them by declaring `TableViewRoutes`, and does not normally call them directly.
|
|
86
|
+
`table-view` also exports the interface functions the wrapped routes call. They are the seam between the interface and its implementation. A consumer wires them by declaring `TableViewRoutes`, and does not normally call them directly. Each takes first the data controller instance the route runs on (`this` in the route, a `DataControllerInstance`), not a route descriptor.
|
|
87
87
|
|
|
88
88
|
| Function | Role |
|
|
89
89
|
| --- | --- |
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Table sources and tenant gates"
|
|
3
|
-
description: Table views over a module's own route,
|
|
3
|
+
description: Table views over a module's own route, table views that stay readable behind a tenant access gate, and table views over an external connection.
|
|
4
4
|
mode: reference
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
A [table view](/docs/interfaces/base/tables) usually reads a data controller. These
|
|
7
|
+
A [table view](/docs/interfaces/base/tables) usually reads a data controller. These three cases differ: a table view over a module's own route, a table view that stays readable while a tenant access gate denies the tenant, and a table view over a table of an external connection.
|
|
8
8
|
|
|
9
9
|
## Tables over a module's route
|
|
10
10
|
|
|
@@ -22,3 +22,15 @@ Data routes are registered against the controller, not against a page, so the op
|
|
|
22
22
|
|
|
23
23
|
- Declaring the flag on a controller opens its routes for every table view built on it, including one mounted on an ordinary page.
|
|
24
24
|
- Actions that carry no permission id, such as a plain list on a component that was never mounted, are then served to any member of a denied tenant. That is the escape hatch working as intended, so keep every action of a flagged controller stamped with a permission.
|
|
25
|
+
|
|
26
|
+
## Write to an external connection
|
|
27
|
+
|
|
28
|
+
`@ExternalConnection(connection)`, from `@antelopejs/interface-dms/connection-access`, marks a data controller whose table belongs to an external connection, as the builder does on each table it maps. Its `TableViewRoutes` write routes (`new`, `edit`, `delete`, `archive`, `restore`) then call `AssertConnectionWritable` first, which answers 403 unless `GetConnectionAccess(connection)` is `"read-write"`. Reads are not affected.
|
|
29
|
+
|
|
30
|
+
```typescript fragment
|
|
31
|
+
@RegisterDataController()
|
|
32
|
+
@ExternalConnection("erp")
|
|
33
|
+
export class CountryDataAPI extends DataController(Country, TableViewRoutes.All, Controller("/erp/countries")) {}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The module that owns the connections answers their access with `RegisterConnectionAccessSource(id, source)` during `construct()`, as `dms-database` does from `config.externalConnections`. `source(connection)` returns `"read"`, `"read-write"`, or `undefined` for a connection it does not own. A connection is `"read-write"` only when a source answers `"read-write"` and none answers `"read"`, so a connection no source answers stays read-only. A route a module writes itself on a marked controller calls `AssertConnectionWritable(controller)` before it writes.
|
package/docs/3.base/3.forms.md
CHANGED
|
@@ -301,7 +301,7 @@ The option interfaces live in the same namespace. The ones with more than a plac
|
|
|
301
301
|
| `DatePickerRangeOptions` | `minDate?`, `maxDate?` |
|
|
302
302
|
| `RelationOptions` | `searchUrl: string`, `placeholder?`, `multiple?`, `deselectable?`, `keyMapping?: { label?, value?, avatar?, disabled? }`, `addForm?: ComponentInfoSerialized<FormPropsSerialized>`, `addPermissionIds?: string[]`, `addFormTexts?: { displayName?, description? }` |
|
|
303
303
|
| `CascaderRelationKeyMapping` | `label: string`, `value: string`, `parent: string`, `disabled?` |
|
|
304
|
-
| `CascaderRelationOptions` | `searchUrl: string`, `keyMapping: CascaderRelationKeyMapping`, `placeholder?`, `multiple?`, `deselectable?`, `maxDepth?`, `leafOnly
|
|
304
|
+
| `CascaderRelationOptions` | `searchUrl: string`, `keyMapping: CascaderRelationKeyMapping`, `placeholder?`, `multiple?`, `deselectable?`, `maxDepth?`, `leafOnly?` |
|
|
305
305
|
| `AddressOptions` | `placeholder?` (per address component), `autocomplete?: DefaultDataTypes.AddressAutocomplete` |
|
|
306
306
|
| `FileOptions` | `multiple?`, `constraints?: { maxSize?, allowedMimetypes? }`, `path?`, `storage?` |
|
|
307
307
|
| `ImageOptions` | `FileOptions` plus `max?` and `resize?: ImageResizeOptions` |
|
package/docs/3.base/4.tables.md
CHANGED
|
@@ -178,7 +178,7 @@ export class customerDataAPI extends DataController(/* … */) {
|
|
|
178
178
|
|
|
179
179
|
### The archive field
|
|
180
180
|
|
|
181
|
-
`@ArchiveField` marks the boolean field that carries the archived state. It
|
|
181
|
+
`@ArchiveField` marks the boolean field that carries the archived state. It makes the field `Listable()` and registers a filter that reads `true` or `false` with `eq` or `ne`. `TableView` throws when another `Filter` replaces it.
|
|
182
182
|
|
|
183
183
|
```typescript fragment
|
|
184
184
|
import { ArchiveField } from "@antelopejs/interface-dms/base/table-view";
|
|
@@ -310,7 +310,7 @@ const card = ChartCard({
|
|
|
310
310
|
| `periodScope` | `string` | Id of the `PeriodSelector` to follow. |
|
|
311
311
|
| `valueFormat` | `ValueFormat` | How the headline value is formatted. |
|
|
312
312
|
| `currencyCode` | `string` | Currency for `valueFormat: "currency"`. |
|
|
313
|
-
| `valuePrecision` | `ValuePrecision` | Fixed fraction digits or `"native"` Intl defaults; omitted
|
|
313
|
+
| `valuePrecision` | `ValuePrecision` | Fixed fraction digits or `"native"` Intl defaults; omitted uses the format's default: whole currency amounts, at most one fraction digit for percent and compact. Also applies to the previous value and nested chart's value axis and tooltip. |
|
|
314
314
|
| `showDelta` | `boolean` | Show the change against the comparison period. |
|
|
315
315
|
| `invert` | `boolean` | Treat an increase as bad, for metrics where lower is better. |
|
|
316
316
|
| `showLegend` | `boolean` | Show the primary / comparison legend. Defaults to `true`. |
|
|
@@ -349,7 +349,7 @@ const denied = KpiCard({
|
|
|
349
349
|
| `realtimeTopic` | `string \| string[]` | Topics whose events make the card read `fetchUrl` again, through the page's `live` gate. The builder registers them on the page. |
|
|
350
350
|
| `valueFormat` | `ValueFormat` | How the value is formatted. |
|
|
351
351
|
| `currencyCode` | `string` | Currency for `valueFormat: "currency"`. |
|
|
352
|
-
| `valuePrecision` | `ValuePrecision` | Fixed fraction digits or `"native"` Intl defaults; omitted
|
|
352
|
+
| `valuePrecision` | `ValuePrecision` | Fixed fraction digits or `"native"` Intl defaults; omitted uses the format's default: whole currency amounts, at most one fraction digit for percent and compact. |
|
|
353
353
|
| `showDelta` | `boolean` | Show the change against the comparison period. |
|
|
354
354
|
| `showPreviousValue` | `boolean` | Show the route's `previousValue` next to the change ("vs €42,900"), formatted as the value. Defaults to `true`. |
|
|
355
355
|
| `showSparkline` | `boolean` | Show the sparkline. |
|
|
@@ -389,7 +389,7 @@ const topSkills = TopListCard({
|
|
|
389
389
|
| `periodScope` | `string` | Id of the `PeriodSelector` to follow. |
|
|
390
390
|
| `valueFormat` | `ValueFormat` | How each item's value is formatted. |
|
|
391
391
|
| `currencyCode` | `string` | Currency for `valueFormat: "currency"`. |
|
|
392
|
-
| `valuePrecision` | `ValuePrecision` | Fixed fraction digits or `"native"` Intl defaults; omitted
|
|
392
|
+
| `valuePrecision` | `ValuePrecision` | Fixed fraction digits or `"native"` Intl defaults; omitted uses the format's default: whole currency amounts, at most one fraction digit for percent and compact. |
|
|
393
393
|
| `valueSuffix` | `string` | Unit written right after each formatted value, space included (`" ms"`); a `$`-prefixed key is translated. Not added to a `valueLabel`. |
|
|
394
394
|
| `showRank` | `boolean` | Show the rank number. |
|
|
395
395
|
| `highlightTopN` | `number` | How many leading items are highlighted. |
|
|
@@ -361,7 +361,7 @@ The type's options are `placeholder` (one string per address component), `autoco
|
|
|
361
361
|
|
|
362
362
|
`FileTypeOptions` has `multiple?`, `constraints?: UploadConstraints`, `path?`, `storage?` and `fallback?`. `ImageTypeOptions` has `multiple?`, `max?`, `constraints?`, `path?`, `storage?` and `resize?`, the `FormComponents.ImageResizeOptions` the input applies client-side before uploading ([Forms](/docs/interfaces/base/forms)). Both accept `attachmentField?` for a stable native field identity and `visibility?: "private" | "public"`, defaulting to private. `constraints` is the `UploadConstraints` type from `@antelopejs/interface-file-storage`; `storage` names the storage backend and `path` the prefix uploads land under.
|
|
363
363
|
|
|
364
|
-
A file value is the resource key as a string. Metadata-based validation checks configured constraints, matching `allowedMimetypes` patterns including the `type/*` form. A native field's save integration also validates upload provenance and canonical metadata before persistence.
|
|
364
|
+
A file value is the resource key as a string. Metadata-based validation checks configured constraints, matching `allowedMimetypes` patterns including the `type/*` form. A native field's save integration also validates upload provenance and canonical metadata before persistence. A key with no recorded upload is refused with HTTP 403, both in the submitted document and in the previously stored one, and the native metadata endpoint does not read it. A storage outage propagates as a server error rather than becoming a field validation error. An image value is an `ImageValue`, `{ key: string; alt?: string; principal?: boolean }`, and `ImageType` defaults `allowedMimetypes` to `["image/*"]`, caps the array at `max` when `multiple` is set, and rejects a list with more than one `principal` image.
|
|
365
365
|
|
|
366
366
|
Both types enable the table view's native file handling: authorized saves promote staging keys, and successful edits or deletes clean removed native references. Failed saves retain promoted objects; cleanup is not reference-counted across records. See [File storage](/docs/components/file-storage) for authorization, visibility, retries, and custom save routes, and [Helpers](/docs/interfaces/base/helpers) for comparing references within records.
|
|
367
367
|
|
package/docs/3.base/9.helpers.md
CHANGED
|
@@ -145,7 +145,7 @@ function runExportJob<TContext = unknown>(
|
|
|
145
145
|
| `ctx` | `RequestContext` | The request. The job is stored in the schema of the tenant the request resolves to. Required. |
|
|
146
146
|
| `user` | `User` | The owner of the job. Required; a missing user fails with `401`. |
|
|
147
147
|
| `scope` | `string` | Free-form identifier for the origin of the job, checked again on status and download when you pass it there. Required. |
|
|
148
|
-
| `context` | `TContext` | Scope-specific payload stored with the job
|
|
148
|
+
| `context` | `TContext` | Scope-specific payload stored with the job as JSON. `generate` receives it as passed; `isOwnedBy` receives it read back through `contextSchema`. |
|
|
149
149
|
| `filename` | `string` | Base name of the produced file, without extension or timestamp. Required. |
|
|
150
150
|
| `extension` | `string` | File extension. Required. |
|
|
151
151
|
| `contentType` | `string` | MIME type used when uploading and when streaming the file back. Required. |
|
|
@@ -188,7 +188,7 @@ By default a job is deleted once it has been downloaded. Set `retainUntilExpiry`
|
|
|
188
188
|
| `jobId` | `string` | Identifier of this job. |
|
|
189
189
|
| `tenantId` | `string` | Tenant the job belongs to. |
|
|
190
190
|
| `localPath` | `string` | Path your generator writes the file to. |
|
|
191
|
-
| `context` | `TContext` | The payload passed as `context` to `runExportJob
|
|
191
|
+
| `context` | `TContext \| undefined` | The payload passed as `context` to `runExportJob`, `undefined` when it passed none. |
|
|
192
192
|
| `reportProgress` | `(progress: number) => Promise<void>` | Records progress. The value is floored and clamped to `0` through `99`; repeating the last value writes nothing. Throws once the job is aborted. |
|
|
193
193
|
| `signal` | `AbortSignal` | Aborted when the job exceeds `maxExecutionTimeMs`. |
|
|
194
194
|
|
|
@@ -216,7 +216,7 @@ function downloadExportJob<TContext = unknown>(
|
|
|
216
216
|
|
|
217
217
|
`downloadExportJob` requires a completed job with a stored result. Anything else fails with `400` or `500`. It sets `Content-Disposition` (with a filename built by `buildExportFilename`), `Content-Length` when the size is known, and `Access-Control-Expose-Headers`, then pipes the stored object to the response. The function returns as soon as the pipe is set up rather than awaiting it; once the response stream closes, the stored object and the job record are both deleted.
|
|
218
218
|
|
|
219
|
-
`loadExportJobForUser(ctx, user, jobId, access?)` is the shared step underneath both: it resolves the tenant, loads the record, runs the access checks, and returns the model
|
|
219
|
+
`loadExportJobForUser(ctx, user, jobId, access?)` is the shared step underneath both: it resolves the tenant, loads the record, runs the access checks, and returns the model and the record. Use it when you need the record itself rather than its status.
|
|
220
220
|
|
|
221
221
|
`downloadExportJob` deletes the stored object and the job record once the response stream closes, unless the job was started with `retainUntilExpiry`, in which case both survive until the sweep.
|
|
222
222
|
|
|
@@ -239,9 +239,20 @@ Returns the caller's own jobs, most recent first: the history a scope such as a
|
|
|
239
239
|
| Option | Type | Description |
|
|
240
240
|
| --- | --- | --- |
|
|
241
241
|
| `scope` | `string` | When set, the job's stored `scope` must match. |
|
|
242
|
-
| `
|
|
242
|
+
| `contextSchema` | `ZodType<TContext, ZodTypeDef, unknown>` | Reads back the `context` the job was started with, from the JSON it was stored as: `null` for a job started without one, a `Date` as its ISO string. A stored context it refuses refuses the job. Required with `isOwnedBy`. |
|
|
243
|
+
| `isOwnedBy` | `(record, context, user) => boolean` | Extra ACL evaluated after the ownership and scope checks, on the context `contextSchema` read. Required with `contextSchema`. |
|
|
243
244
|
|
|
244
|
-
`
|
|
245
|
+
`ExportJobContextCheck<TContext>` is the pair `contextSchema` and `isOwnedBy`. `ExportJobOwnership<TContext>` is that pair or neither of its members, and `ExportJobAccessOptions<TContext>` adds `scope` to it. The job's `userId` is always compared against the caller regardless of what you pass, and every failed check answers `403`.
|
|
246
|
+
|
|
247
|
+
```typescript fragment
|
|
248
|
+
import { z } from "zod";
|
|
249
|
+
|
|
250
|
+
const status = await getExportJobStatus(ctx, user, jobId, {
|
|
251
|
+
scope: SCOPE,
|
|
252
|
+
contextSchema: z.object({ year: z.number() }),
|
|
253
|
+
isOwnedBy: (_record, context) => context.year === new Date().getFullYear(),
|
|
254
|
+
});
|
|
255
|
+
```
|
|
245
256
|
|
|
246
257
|
### Formats and delivery
|
|
247
258
|
|