@antelopejs/dms 0.9.4 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -2
- package/dist/config.d.ts +1 -1
- package/dist/config.js +3 -2
- package/dist/config.js.map +1 -1
- package/dist/implementations/dms/tenant-access.d.ts +2 -1
- package/dist/implementations/dms/tenant-access.js +11 -0
- package/dist/implementations/dms/tenant-access.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/pages/public/preview/fixtures.d.ts +41 -0
- package/dist/pages/public/preview/fixtures.js +296 -0
- package/dist/pages/public/preview/fixtures.js.map +1 -0
- package/dist/pages/public/preview/index.js +2 -0
- package/dist/pages/public/preview/index.js.map +1 -1
- package/dist/pages/settings/users/invite-extension-routes.js +12 -2
- package/dist/pages/settings/users/invite-extension-routes.js.map +1 -1
- package/dist/pages/settings/users/member-management.js +16 -6
- package/dist/pages/settings/users/member-management.js.map +1 -1
- package/frontend-vue/layers/dms-core/app/composables/auth/usePermissions.ts +77 -73
- package/frontend-vue/layers/dms-onboarding/app/composables/onboarding/useOnboarding.ts +27 -23
- package/frontend-vue/layers/dms-ui/app/build/utils/blockPreview.ts +18 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## v0.9.
|
|
3
|
+
## v0.9.6
|
|
4
4
|
|
|
5
|
-
[compare changes](https://github.com/AntelopeJS/dms/compare/v0.9.
|
|
5
|
+
[compare changes](https://github.com/AntelopeJS/dms/compare/v0.9.5...v0.9.6)
|
|
6
|
+
|
|
7
|
+
### 🚀 Enhancements
|
|
8
|
+
|
|
9
|
+
- **tenant-lifecycle:** Pause producer admission and evaluate every tenant access gate ([#366](https://github.com/AntelopeJS/dms/pull/366))
|
|
10
|
+
|
|
11
|
+
### 🩹 Fixes
|
|
12
|
+
|
|
13
|
+
- **frontend:** Read the onboarding status and permissions through the data layer ([#357](https://github.com/AntelopeJS/dms/pull/357))
|
|
14
|
+
- **deps:** Require the tenant admission barrier and access evaluation contract ([#367](https://github.com/AntelopeJS/dms/pull/367))
|
|
15
|
+
|
|
16
|
+
### 🏡 Chore
|
|
17
|
+
|
|
18
|
+
- **release:** @antelopejs/interface-dms v0.7.4 ([9577327b](https://github.com/AntelopeJS/dms/commit/9577327b))
|
|
19
|
+
|
|
20
|
+
### ❤️ Contributors
|
|
21
|
+
|
|
22
|
+
- Antony Rizzitelli <rizzitelli.antony@pm.me>
|
|
23
|
+
- Alessandro Aloisio ([@alessaloisio](http://github.com/alessaloisio))
|
|
24
|
+
|
|
25
|
+
## v0.9.5
|
|
26
|
+
|
|
27
|
+
[compare changes](https://github.com/AntelopeJS/dms/compare/v0.9.3...v0.9.5)
|
|
28
|
+
|
|
29
|
+
### 🚀 Enhancements
|
|
30
|
+
|
|
31
|
+
- **preview:** Share simple options and document real outcomes ([#339](https://github.com/AntelopeJS/dms/pull/339))
|
|
6
32
|
|
|
7
33
|
### 🩹 Fixes
|
|
8
34
|
|
|
@@ -10,6 +36,8 @@
|
|
|
10
36
|
- Install DMS frontend with the root workspace ([#322](https://github.com/AntelopeJS/dms/pull/322))
|
|
11
37
|
- **modules:** Top-align card content and place readouts below descriptions ([#328](https://github.com/AntelopeJS/dms/pull/328))
|
|
12
38
|
- **modules:** Reuse registered names in the store ([#330](https://github.com/AntelopeJS/dms/pull/330))
|
|
39
|
+
- **playground:** Use the workspace CLI and compatible core interface ([#331](https://github.com/AntelopeJS/dms/pull/331))
|
|
40
|
+
- **deps:** Require the shared preview presentation contract ([#340](https://github.com/AntelopeJS/dms/pull/340))
|
|
13
41
|
|
|
14
42
|
### 📖 Documentation
|
|
15
43
|
|
|
@@ -18,6 +46,8 @@
|
|
|
18
46
|
### 🏡 Chore
|
|
19
47
|
|
|
20
48
|
- **docs:** Capture temporary MongoDB startup diagnostics ([#325](https://github.com/AntelopeJS/dms/pull/325))
|
|
49
|
+
- **playground:** Refresh compatible dependencies ([#329](https://github.com/AntelopeJS/dms/pull/329))
|
|
50
|
+
- **release:** @antelopejs/interface-dms v0.7.3 ([bfaa1905](https://github.com/AntelopeJS/dms/commit/bfaa1905))
|
|
21
51
|
|
|
22
52
|
### ❤️ Contributors
|
|
23
53
|
|
package/dist/config.d.ts
CHANGED
|
@@ -64,7 +64,7 @@ export declare function setDevClientBaseUrl(url: string): void;
|
|
|
64
64
|
export declare function getClientBaseUrl(): string | undefined;
|
|
65
65
|
export declare function setDevApiBaseUrl(url: string | undefined): void;
|
|
66
66
|
export declare function getApiBaseUrl(): string | undefined;
|
|
67
|
-
export declare function isDocsPreviewEnabled(): boolean;
|
|
67
|
+
export declare function isDocsPreviewEnabled(dev?: boolean): boolean;
|
|
68
68
|
export declare function getAuthConfig(): AuthConfig;
|
|
69
69
|
export declare function getHtmlRenderConfig(): HtmlRenderConfig;
|
|
70
70
|
export declare function getUploadsConfig(): UploadsConfig;
|
package/dist/config.js
CHANGED
|
@@ -67,8 +67,9 @@ function getApiBaseUrl() {
|
|
|
67
67
|
}
|
|
68
68
|
const DOCS_PREVIEW_ENV = "DMS_DOCS_PREVIEW";
|
|
69
69
|
const DOCS_PREVIEW_ENV_ENABLED = "1";
|
|
70
|
-
function isDocsPreviewEnabled() {
|
|
71
|
-
return (
|
|
70
|
+
function isDocsPreviewEnabled(dev = false) {
|
|
71
|
+
return (dev ||
|
|
72
|
+
globalConfig.docsPreview === true ||
|
|
72
73
|
process.env[DOCS_PREVIEW_ENV] === DOCS_PREVIEW_ENV_ENABLED);
|
|
73
74
|
}
|
|
74
75
|
function getAuthConfig() {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TenantAccessGateInfo, TenantAccessResult } from "@antelopejs/interface-dms/tenant-access";
|
|
1
|
+
import type { TenantAccessDenial, TenantAccessGateInfo, TenantAccessResult } from "@antelopejs/interface-dms/tenant-access";
|
|
2
2
|
export declare namespace internal {
|
|
3
3
|
const RegisterTenantAccessGate: {
|
|
4
4
|
register: (info: TenantAccessGateInfo) => void;
|
|
@@ -6,3 +6,4 @@ export declare namespace internal {
|
|
|
6
6
|
};
|
|
7
7
|
}
|
|
8
8
|
export declare function CheckTenantAccess(userId: string | undefined, tenantId: string): Promise<TenantAccessResult>;
|
|
9
|
+
export declare function EvaluateTenantAccess(userId: string | undefined, tenantId: string): Promise<TenantAccessDenial[]>;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.internal = void 0;
|
|
4
4
|
exports.CheckTenantAccess = CheckTenantAccess;
|
|
5
|
+
exports.EvaluateTenantAccess = EvaluateTenantAccess;
|
|
5
6
|
const gates = [];
|
|
6
7
|
var internal;
|
|
7
8
|
(function (internal) {
|
|
@@ -31,4 +32,14 @@ async function CheckTenantAccess(userId, tenantId) {
|
|
|
31
32
|
}
|
|
32
33
|
return { allowed: true };
|
|
33
34
|
}
|
|
35
|
+
async function EvaluateTenantAccess(userId, tenantId) {
|
|
36
|
+
const denials = [];
|
|
37
|
+
const registeredGates = gates.slice();
|
|
38
|
+
for (const { id, gate } of registeredGates) {
|
|
39
|
+
const result = await gate(userId, tenantId);
|
|
40
|
+
if (!result.allowed)
|
|
41
|
+
denials.push({ gateId: id, code: result.code });
|
|
42
|
+
}
|
|
43
|
+
return denials;
|
|
44
|
+
}
|
|
34
45
|
//# sourceMappingURL=tenant-access.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-access.js","sourceRoot":"","sources":["../../../src/implementations/dms/tenant-access.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"tenant-access.js","sourceRoot":"","sources":["../../../src/implementations/dms/tenant-access.ts"],"names":[],"mappings":";;;AA0BA,8CASC;AAED,oDAYC;AA3CD,MAAM,KAAK,GAA2B,EAAE,CAAC;AAEzC,IAAiB,QAAQ,CAgBxB;AAhBD,WAAiB,QAAQ;IACV,iCAAwB,GAAG;QACtC,QAAQ,EAAE,CAAC,IAA0B,EAAQ,EAAE;YAC7C,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/D,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,UAAU,EAAE,CAAC,IAA0B,EAAQ,EAAE;YAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YACvD,IAAI,KAAK,IAAI,CAAC;gBAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC,EAhBgB,QAAQ,wBAAR,QAAQ,QAgBxB;AAEM,KAAK,UAAU,iBAAiB,CACrC,MAA0B,EAC1B,QAAgB;IAEhB,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC;IACrC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,MAA0B,EAC1B,QAAgB;IAEhB,MAAM,OAAO,GAAyB,EAAE,CAAC;IAEzC,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IACtC,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,eAAe,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -94,7 +94,8 @@ async function construct(config) {
|
|
|
94
94
|
(0, workspace_notifications_1.registerWorkspaceNotifications)();
|
|
95
95
|
await implementInterfaces();
|
|
96
96
|
await registerDmsFrontend();
|
|
97
|
-
|
|
97
|
+
const { dev } = await (0, runtime_1.GetRuntimeInfo)();
|
|
98
|
+
if ((0, config_1.isDocsPreviewEnabled)(dev)) {
|
|
98
99
|
(0, preview_1.registerDocsPreviewPage)();
|
|
99
100
|
}
|
|
100
101
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type RequestContext } from "@antelopejs/interface-api";
|
|
2
|
+
import type { ChartCardData } from "@antelopejs/interface-dms/base/query-response";
|
|
3
|
+
import type { KeyValueListItem } from "@antelopejs/interface-dms/base/key-value-list";
|
|
4
|
+
import type { Tone } from "@antelopejs/interface-dms/base/types/tone";
|
|
5
|
+
interface RequestFixture {
|
|
6
|
+
requestId: string;
|
|
7
|
+
method: string;
|
|
8
|
+
path: string;
|
|
9
|
+
status: number;
|
|
10
|
+
durationMs: number;
|
|
11
|
+
at: string;
|
|
12
|
+
statusTone: Tone;
|
|
13
|
+
durationTone: Tone;
|
|
14
|
+
}
|
|
15
|
+
export declare function registerPreviewFixtures(): {
|
|
16
|
+
new (...args: any[]): {
|
|
17
|
+
requests(context: RequestContext): {
|
|
18
|
+
results: RequestFixture[];
|
|
19
|
+
total: number;
|
|
20
|
+
};
|
|
21
|
+
workspace(): {
|
|
22
|
+
name: string;
|
|
23
|
+
email: string;
|
|
24
|
+
plan: string;
|
|
25
|
+
notifications: boolean;
|
|
26
|
+
};
|
|
27
|
+
sales(): ChartCardData;
|
|
28
|
+
channels(): ChartCardData;
|
|
29
|
+
customer(): {
|
|
30
|
+
id: string;
|
|
31
|
+
name: string;
|
|
32
|
+
};
|
|
33
|
+
customerFacts(): {
|
|
34
|
+
items: KeyValueListItem[];
|
|
35
|
+
};
|
|
36
|
+
alerts(): never[];
|
|
37
|
+
};
|
|
38
|
+
extend: <T extends import("@antelopejs/interface-api").ControllerClass>(this: T, location: string) => T;
|
|
39
|
+
location: string;
|
|
40
|
+
};
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.registerPreviewFixtures = registerPreviewFixtures;
|
|
16
|
+
const interface_api_1 = require("@antelopejs/interface-api");
|
|
17
|
+
const REQUESTS = [
|
|
18
|
+
{
|
|
19
|
+
requestId: "req-001",
|
|
20
|
+
method: "GET",
|
|
21
|
+
path: "/api/customers",
|
|
22
|
+
status: 200,
|
|
23
|
+
durationMs: 42,
|
|
24
|
+
at: "2026-01-12T10:00:00.000Z",
|
|
25
|
+
statusTone: "success",
|
|
26
|
+
durationTone: "neutral",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
requestId: "req-002",
|
|
30
|
+
method: "POST",
|
|
31
|
+
path: "/api/orders",
|
|
32
|
+
status: 201,
|
|
33
|
+
durationMs: 180,
|
|
34
|
+
at: "2026-01-12T09:55:00.000Z",
|
|
35
|
+
statusTone: "success",
|
|
36
|
+
durationTone: "neutral",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
requestId: "req-003",
|
|
40
|
+
method: "GET",
|
|
41
|
+
path: "/api/reports",
|
|
42
|
+
status: 500,
|
|
43
|
+
durationMs: 920,
|
|
44
|
+
at: "2026-01-12T09:50:00.000Z",
|
|
45
|
+
statusTone: "error",
|
|
46
|
+
durationTone: "warning",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
requestId: "req-004",
|
|
50
|
+
method: "PATCH",
|
|
51
|
+
path: "/api/customers/acme",
|
|
52
|
+
status: 200,
|
|
53
|
+
durationMs: 85,
|
|
54
|
+
at: "2026-01-12T09:45:00.000Z",
|
|
55
|
+
statusTone: "success",
|
|
56
|
+
durationTone: "neutral",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
requestId: "req-005",
|
|
60
|
+
method: "DELETE",
|
|
61
|
+
path: "/api/sessions/expired",
|
|
62
|
+
status: 204,
|
|
63
|
+
durationMs: 31,
|
|
64
|
+
at: "2026-01-12T09:40:00.000Z",
|
|
65
|
+
statusTone: "success",
|
|
66
|
+
durationTone: "neutral",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
requestId: "req-006",
|
|
70
|
+
method: "GET",
|
|
71
|
+
path: "/api/orders/missing",
|
|
72
|
+
status: 404,
|
|
73
|
+
durationMs: 18,
|
|
74
|
+
at: "2026-01-12T09:35:00.000Z",
|
|
75
|
+
statusTone: "warning",
|
|
76
|
+
durationTone: "neutral",
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
requestId: "req-007",
|
|
80
|
+
method: "POST",
|
|
81
|
+
path: "/api/invoices",
|
|
82
|
+
status: 422,
|
|
83
|
+
durationMs: 63,
|
|
84
|
+
at: "2026-01-12T09:30:00.000Z",
|
|
85
|
+
statusTone: "warning",
|
|
86
|
+
durationTone: "neutral",
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
requestId: "req-008",
|
|
90
|
+
method: "GET",
|
|
91
|
+
path: "/api/channels",
|
|
92
|
+
status: 200,
|
|
93
|
+
durationMs: 120,
|
|
94
|
+
at: "2026-01-12T09:25:00.000Z",
|
|
95
|
+
statusTone: "success",
|
|
96
|
+
durationTone: "neutral",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
requestId: "req-009",
|
|
100
|
+
method: "PUT",
|
|
101
|
+
path: "/api/workspace",
|
|
102
|
+
status: 200,
|
|
103
|
+
durationMs: 210,
|
|
104
|
+
at: "2026-01-12T09:20:00.000Z",
|
|
105
|
+
statusTone: "success",
|
|
106
|
+
durationTone: "neutral",
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
requestId: "req-010",
|
|
110
|
+
method: "GET",
|
|
111
|
+
path: "/api/customers/acme",
|
|
112
|
+
status: 304,
|
|
113
|
+
durationMs: 12,
|
|
114
|
+
at: "2026-01-12T09:15:00.000Z",
|
|
115
|
+
statusTone: "info",
|
|
116
|
+
durationTone: "neutral",
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
requestId: "req-011",
|
|
120
|
+
method: "POST",
|
|
121
|
+
path: "/api/reports",
|
|
122
|
+
status: 503,
|
|
123
|
+
durationMs: 1250,
|
|
124
|
+
at: "2026-01-12T09:10:00.000Z",
|
|
125
|
+
statusTone: "error",
|
|
126
|
+
durationTone: "warning",
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
requestId: "req-012",
|
|
130
|
+
method: "GET",
|
|
131
|
+
path: "/api/invoices",
|
|
132
|
+
status: 200,
|
|
133
|
+
durationMs: 75,
|
|
134
|
+
at: "2026-01-12T09:05:00.000Z",
|
|
135
|
+
statusTone: "success",
|
|
136
|
+
durationTone: "neutral",
|
|
137
|
+
},
|
|
138
|
+
];
|
|
139
|
+
const SALES = {
|
|
140
|
+
value: 48210,
|
|
141
|
+
delta: 12.4,
|
|
142
|
+
series: [
|
|
143
|
+
{
|
|
144
|
+
name: "Revenue",
|
|
145
|
+
data: [
|
|
146
|
+
{ x: "2026-01-05T00:00:00.000Z", y: 5800 },
|
|
147
|
+
{ x: "2026-01-06T00:00:00.000Z", y: 6400 },
|
|
148
|
+
{ x: "2026-01-07T00:00:00.000Z", y: 6100 },
|
|
149
|
+
{ x: "2026-01-08T00:00:00.000Z", y: 7200 },
|
|
150
|
+
{ x: "2026-01-09T00:00:00.000Z", y: 6850 },
|
|
151
|
+
{ x: "2026-01-10T00:00:00.000Z", y: 7460 },
|
|
152
|
+
{ x: "2026-01-11T00:00:00.000Z", y: 8400 },
|
|
153
|
+
],
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
};
|
|
157
|
+
const CHANNELS = {
|
|
158
|
+
value: 14600,
|
|
159
|
+
series: [
|
|
160
|
+
{
|
|
161
|
+
name: "Sessions",
|
|
162
|
+
data: [
|
|
163
|
+
{ x: "Direct", label: "Direct", y: 4200 },
|
|
164
|
+
{ x: "Email", label: "Email", y: 1800 },
|
|
165
|
+
{ x: "Search", label: "Search", y: 6500 },
|
|
166
|
+
{ x: "Social", label: "Social", y: 2100 },
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
};
|
|
171
|
+
const CUSTOMER_FACTS = [
|
|
172
|
+
{ label: "Record", value: "r1", type: "mono" },
|
|
173
|
+
{ label: "Name", value: "Acme Logistics SA" },
|
|
174
|
+
{ label: "Status", value: "Active", type: "status", tone: "success" },
|
|
175
|
+
];
|
|
176
|
+
const DEFAULT_PAGE_SIZE = 20;
|
|
177
|
+
const SORTABLE_FIELDS = [
|
|
178
|
+
"method",
|
|
179
|
+
"path",
|
|
180
|
+
"status",
|
|
181
|
+
"durationMs",
|
|
182
|
+
"at",
|
|
183
|
+
];
|
|
184
|
+
function matchesColumn(value, filter) {
|
|
185
|
+
if (!filter)
|
|
186
|
+
return true;
|
|
187
|
+
const separator = filter.indexOf(":");
|
|
188
|
+
const mode = separator < 0 ? filter : filter.slice(0, separator);
|
|
189
|
+
const expected = filter.slice(separator + 1);
|
|
190
|
+
if (mode === "is")
|
|
191
|
+
return String(value) === expected;
|
|
192
|
+
if (mode === "is_not")
|
|
193
|
+
return String(value) !== expected;
|
|
194
|
+
if (mode === "is_empty")
|
|
195
|
+
return String(value) === "";
|
|
196
|
+
if (mode === "is_not_empty")
|
|
197
|
+
return String(value) !== "";
|
|
198
|
+
if (mode === "greater_than_or_equal_to")
|
|
199
|
+
return Number(value) >= Number(expected);
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
function listRequests(query) {
|
|
203
|
+
const search = query.get("search")?.trim().toLowerCase() ?? "";
|
|
204
|
+
const from = query.get("from");
|
|
205
|
+
const to = query.get("to");
|
|
206
|
+
const heldAt = query.get("liveHeldAt");
|
|
207
|
+
const rows = REQUESTS.filter((row) => `${row.method} ${row.path}`.toLowerCase().includes(search) &&
|
|
208
|
+
matchesColumn(row.method, query.get("filter_method")) &&
|
|
209
|
+
matchesColumn(row.status, query.get("filter_status")) &&
|
|
210
|
+
(!from || row.at >= from) &&
|
|
211
|
+
(!to || row.at <= to) &&
|
|
212
|
+
(!heldAt || row.at <= heldAt));
|
|
213
|
+
const key = SORTABLE_FIELDS.find((field) => field === query.get("sortKey"));
|
|
214
|
+
if (key) {
|
|
215
|
+
const direction = query.get("sortDirection") === "desc" ? -1 : 1;
|
|
216
|
+
rows.sort((a, b) => (a[key] < b[key] ? -1 : a[key] > b[key] ? 1 : 0) * direction);
|
|
217
|
+
}
|
|
218
|
+
const offset = Number(query.get("offset")) || 0;
|
|
219
|
+
const limit = Number(query.get("limit")) || DEFAULT_PAGE_SIZE;
|
|
220
|
+
return { results: rows.slice(offset, offset + limit), total: rows.length };
|
|
221
|
+
}
|
|
222
|
+
function registerPreviewFixtures() {
|
|
223
|
+
class PreviewFixturesController extends (0, interface_api_1.Controller)("/api/block-preview/fixtures") {
|
|
224
|
+
requests(context) {
|
|
225
|
+
return listRequests(context.url.searchParams);
|
|
226
|
+
}
|
|
227
|
+
workspace() {
|
|
228
|
+
return {
|
|
229
|
+
name: "Acme Inc.",
|
|
230
|
+
email: "billing@example.com",
|
|
231
|
+
plan: "business",
|
|
232
|
+
notifications: true,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
sales() {
|
|
236
|
+
return SALES;
|
|
237
|
+
}
|
|
238
|
+
channels() {
|
|
239
|
+
return CHANNELS;
|
|
240
|
+
}
|
|
241
|
+
customer() {
|
|
242
|
+
return { id: "r1", name: "Acme Logistics SA" };
|
|
243
|
+
}
|
|
244
|
+
customerFacts() {
|
|
245
|
+
return { items: CUSTOMER_FACTS };
|
|
246
|
+
}
|
|
247
|
+
alerts() {
|
|
248
|
+
return [];
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
__decorate([
|
|
252
|
+
(0, interface_api_1.Get)("requests"),
|
|
253
|
+
__param(0, (0, interface_api_1.Context)()),
|
|
254
|
+
__metadata("design:type", Function),
|
|
255
|
+
__metadata("design:paramtypes", [Object]),
|
|
256
|
+
__metadata("design:returntype", void 0)
|
|
257
|
+
], PreviewFixturesController.prototype, "requests", null);
|
|
258
|
+
__decorate([
|
|
259
|
+
(0, interface_api_1.Get)("workspace"),
|
|
260
|
+
__metadata("design:type", Function),
|
|
261
|
+
__metadata("design:paramtypes", []),
|
|
262
|
+
__metadata("design:returntype", void 0)
|
|
263
|
+
], PreviewFixturesController.prototype, "workspace", null);
|
|
264
|
+
__decorate([
|
|
265
|
+
(0, interface_api_1.Get)("sales"),
|
|
266
|
+
__metadata("design:type", Function),
|
|
267
|
+
__metadata("design:paramtypes", []),
|
|
268
|
+
__metadata("design:returntype", void 0)
|
|
269
|
+
], PreviewFixturesController.prototype, "sales", null);
|
|
270
|
+
__decorate([
|
|
271
|
+
(0, interface_api_1.Get)("channels"),
|
|
272
|
+
__metadata("design:type", Function),
|
|
273
|
+
__metadata("design:paramtypes", []),
|
|
274
|
+
__metadata("design:returntype", void 0)
|
|
275
|
+
], PreviewFixturesController.prototype, "channels", null);
|
|
276
|
+
__decorate([
|
|
277
|
+
(0, interface_api_1.Get)("customer"),
|
|
278
|
+
__metadata("design:type", Function),
|
|
279
|
+
__metadata("design:paramtypes", []),
|
|
280
|
+
__metadata("design:returntype", void 0)
|
|
281
|
+
], PreviewFixturesController.prototype, "customer", null);
|
|
282
|
+
__decorate([
|
|
283
|
+
(0, interface_api_1.Get)("customer/facts"),
|
|
284
|
+
__metadata("design:type", Function),
|
|
285
|
+
__metadata("design:paramtypes", []),
|
|
286
|
+
__metadata("design:returntype", void 0)
|
|
287
|
+
], PreviewFixturesController.prototype, "customerFacts", null);
|
|
288
|
+
__decorate([
|
|
289
|
+
(0, interface_api_1.Get)("alerts"),
|
|
290
|
+
__metadata("design:type", Function),
|
|
291
|
+
__metadata("design:paramtypes", []),
|
|
292
|
+
__metadata("design:returntype", void 0)
|
|
293
|
+
], PreviewFixturesController.prototype, "alerts", null);
|
|
294
|
+
return PreviewFixturesController;
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../../src/pages/public/preview/fixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ exports.registerDocsPreviewPage = registerDocsPreviewPage;
|
|
|
19
19
|
const custom_1 = require("@antelopejs/interface-dms/base/custom");
|
|
20
20
|
const page_1 = require("@antelopejs/interface-dms/page");
|
|
21
21
|
const block_types_1 = require("./block-types");
|
|
22
|
+
const fixtures_1 = require("./fixtures");
|
|
22
23
|
__exportStar(require("./block-types"), exports);
|
|
23
24
|
const PREVIEW_LAYOUT = {
|
|
24
25
|
componentName: "dms-preview-layout",
|
|
@@ -39,6 +40,7 @@ class DocsPreviewPage extends (0, page_1.PageController)("dms-preview", {
|
|
|
39
40
|
}
|
|
40
41
|
exports.DocsPreviewPage = DocsPreviewPage;
|
|
41
42
|
function registerDocsPreviewPage() {
|
|
43
|
+
(0, fixtures_1.registerPreviewFixtures)();
|
|
42
44
|
(0, page_1.RegisterPage)()(DocsPreviewPage);
|
|
43
45
|
}
|
|
44
46
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pages/public/preview/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pages/public/preview/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAyDA,0DAGC;AA5DD,kEAAwE;AACxE,yDAIwC;AACxC,+CAA8E;AAC9E,yCAAqD;AAErD,gDAA8B;AAG9B,MAAM,cAAc,GAAG;IACrB,aAAa,EAAE,oBAAoB;IACnC,OAAO,EAAE,EAAE;CACZ,CAAC;AAaF,MAAa,eAAgB,SAAQ,IAAA,qBAAc,EACjD,aAAa,EACb;IACE,WAAW,EAAE,yBAAyB;IACtC,OAAO,EAAE,aAAa;IACtB,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,oBAAa;IAGvB,IAAI,EAAE,EAAE;CACT,EACD,cAAc,CACf;IAIC,MAAM,CAAC,OAAO,GAAG,IAAA,wBAAe,EAAC,iBAAiB,CAAC,CAAC,gBAAgB,CAClE,GAAuB,EAAE,CAAC,CAAC;QACzB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,IAAA,mCAAqB,GAAE;KACpC,CAAC,CACH,CAAC;;AAtBJ,0CAuBC;AAMD,SAAgB,uBAAuB;IACrC,IAAA,kCAAuB,GAAE,CAAC;IAC1B,IAAA,mBAAY,GAAE,CAAC,eAAe,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -11,6 +11,7 @@ const db_1 = require("@antelopejs/interface-dms/db");
|
|
|
11
11
|
const edit_1 = require("@antelopejs/interface-dms/invite-extensions/internal/edit");
|
|
12
12
|
const request_tenant_1 = require("@antelopejs/interface-dms/request-tenant");
|
|
13
13
|
const base_1 = require("@antelopejs/interface-dms/base");
|
|
14
|
+
const tenant_lifecycle_1 = require("@antelopejs/interface-dms/tenant-lifecycle");
|
|
14
15
|
const HTTP_NOT_FOUND = 404;
|
|
15
16
|
const HTTP_CONFLICT = 409;
|
|
16
17
|
async function loadPendingInvite(tenantId, inviteId) {
|
|
@@ -32,6 +33,9 @@ exports.inviteGetRoute = {
|
|
|
32
33
|
},
|
|
33
34
|
};
|
|
34
35
|
async function editPendingInvite(tenantId, inviteId, body, writeRow) {
|
|
36
|
+
return (0, tenant_lifecycle_1.runTenantLifecycleOperation)(tenantId, () => editAdmittedPendingInvite(tenantId, inviteId, body, writeRow));
|
|
37
|
+
}
|
|
38
|
+
async function editAdmittedPendingInvite(tenantId, inviteId, body, writeRow) {
|
|
35
39
|
const edits = (0, edit_1.CollectInviteExtensionEdits)(body);
|
|
36
40
|
const invite = await loadPendingInvite(tenantId, inviteId);
|
|
37
41
|
await writeRow();
|
|
@@ -49,8 +53,14 @@ async function editPendingInvite(tenantId, inviteId, body, writeRow) {
|
|
|
49
53
|
const editInviteWithExtensions = {
|
|
50
54
|
...interface_data_api_1.DefaultRoutes.Edit,
|
|
51
55
|
func: function (ctx, params, body) {
|
|
52
|
-
return
|
|
56
|
+
return editAdmittedPendingInvite((0, request_tenant_1.getRequestTenantId)(ctx), String(params.id), components_1.Validation.ParseBody(body), () => interface_data_api_1.DefaultRoutes.Edit.func.call(this, ctx, params, body));
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
const guardedInviteEditRoute = base_1.TableViewRoutes.EditWith(editInviteWithExtensions);
|
|
60
|
+
exports.inviteEditRoute = {
|
|
61
|
+
...guardedInviteEditRoute,
|
|
62
|
+
func(...args) {
|
|
63
|
+
return (0, tenant_lifecycle_1.runTenantLifecycleOperation)((0, request_tenant_1.getRequestTenantId)(args[0]), () => guardedInviteEditRoute.func.apply(this, args));
|
|
53
64
|
},
|
|
54
65
|
};
|
|
55
|
-
exports.inviteEditRoute = base_1.TableViewRoutes.EditWith(editInviteWithExtensions);
|
|
56
66
|
//# sourceMappingURL=invite-extension-routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invite-extension-routes.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/invite-extension-routes.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"invite-extension-routes.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/invite-extension-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ const interface_database_decorators_1 = require("@antelopejs/interface-database-
|
|
|
12
12
|
const db_1 = require("@antelopejs/interface-dms/db");
|
|
13
13
|
const tenant_ownership_1 = require("@antelopejs/interface-dms/tenant-ownership");
|
|
14
14
|
const db_2 = require("@antelopejs/interface-dms/auth/db");
|
|
15
|
+
const hooks_1 = require("@antelopejs/interface-dms/hooks");
|
|
16
|
+
const tenant_lifecycle_1 = require("@antelopejs/interface-dms/tenant-lifecycle");
|
|
15
17
|
const HTTP_NOT_FOUND = 404;
|
|
16
18
|
const HTTP_CONFLICT = 409;
|
|
17
19
|
const MEMBER_NOT_FOUND = "$page.settings.members.error.user_not_found";
|
|
@@ -28,6 +30,12 @@ async function assertNotLastTenantOwner(tenantId, current) {
|
|
|
28
30
|
(0, interface_api_util_1.assert)(remaining > 0, HTTP_CONFLICT, "$page.settings.members.error.last_owner");
|
|
29
31
|
}
|
|
30
32
|
async function prepareOwnerChange(tenantId, current, requested) {
|
|
33
|
+
await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.MEMBER_BEING_CHANGED, {
|
|
34
|
+
tenantId,
|
|
35
|
+
userId: current.userId,
|
|
36
|
+
isTenantOwner: requested ?? current.isTenantOwner === true,
|
|
37
|
+
previousIsTenantOwner: current.isTenantOwner === true,
|
|
38
|
+
});
|
|
31
39
|
const change = detectOwnerChange(current, requested);
|
|
32
40
|
if (change === null)
|
|
33
41
|
return;
|
|
@@ -41,12 +49,14 @@ async function requireMember(tenantId, memberId) {
|
|
|
41
49
|
return member;
|
|
42
50
|
}
|
|
43
51
|
async function setMemberOwnership(tenantId, memberId, isTenantOwner) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
return (0, tenant_lifecycle_1.runTenantLifecycleOperation)(tenantId, async () => {
|
|
53
|
+
const member = await requireMember(tenantId, memberId);
|
|
54
|
+
const change = detectOwnerChange({ isTenantOwner: member.isTenantOwner === true }, isTenantOwner);
|
|
55
|
+
await prepareOwnerChange(tenantId, member, isTenantOwner);
|
|
56
|
+
member.isTenantOwner = isTenantOwner;
|
|
57
|
+
await (0, interface_database_decorators_1.GetModel)(db_1.TenantMemberModel, tenantId).update(member);
|
|
58
|
+
return { member, change };
|
|
59
|
+
});
|
|
50
60
|
}
|
|
51
61
|
async function roleNames(tenantId, roleIds) {
|
|
52
62
|
if (roleIds.length === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-management.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/member-management.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"member-management.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/member-management.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,98 +1,102 @@
|
|
|
1
|
+
import { computed, effectScope } from "vue";
|
|
2
|
+
|
|
1
3
|
const PERMISSIONS_REFRESH_MS = 300_000;
|
|
2
4
|
const PERMISSIONS_ENDPOINT = "/dms/permissions";
|
|
3
5
|
const WILDCARD_PERMISSION = "*";
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// page renders) is the one the page renders with: the browser starts from it
|
|
14
|
-
// rather than asking again, and its age keeps counting from the server's load.
|
|
15
|
-
// The generation only guards the runs in flight of one side.
|
|
16
|
-
const TRANSFERRED = { transfer: true };
|
|
7
|
+
/**
|
|
8
|
+
* The async data key of the permission set, in the account and workspace's
|
|
9
|
+
* scope like every key: a switch of either drops the set. The set a server
|
|
10
|
+
* render loads (the `auth` middleware's, preloaded as the app starts) is the
|
|
11
|
+
* one the page renders with, and the page hands it to the browser, which
|
|
12
|
+
* starts from it rather than asking again.
|
|
13
|
+
*/
|
|
14
|
+
const PERMISSIONS_KEY = "dms-permissions";
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
() => new Set(),
|
|
23
|
-
TRANSFERRED,
|
|
24
|
-
),
|
|
25
|
-
isLoaded: useDmsState<boolean>(
|
|
26
|
-
"dms-permissions-loaded",
|
|
27
|
-
() => false,
|
|
28
|
-
TRANSFERRED,
|
|
29
|
-
),
|
|
30
|
-
lastFetchTime: useDmsState<number>(
|
|
31
|
-
"dms-permissions-lastFetch",
|
|
32
|
-
() => 0,
|
|
33
|
-
TRANSFERRED,
|
|
34
|
-
),
|
|
35
|
-
fetchGeneration: useDmsState<number>("dms-permissions-gen", () => 0),
|
|
36
|
-
};
|
|
16
|
+
/** The permission set, and when it was read: its age counts from there. */
|
|
17
|
+
interface LoadedPermissions {
|
|
18
|
+
ids: string[];
|
|
19
|
+
loadedAt: number;
|
|
37
20
|
}
|
|
38
21
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const deduper = useTrailingDeduper("permissions");
|
|
54
|
-
const fetchPermissions = (): Promise<void> => deduper.run(runFetch);
|
|
55
|
-
// A caller that only needs a set has nothing to invalidate: it joins the
|
|
56
|
-
// load in flight instead of queueing a second one.
|
|
57
|
-
const loadPermissions = async (): Promise<void> => {
|
|
58
|
-
if (state.isLoaded.value) return;
|
|
59
|
-
await deduper.join(runFetch);
|
|
60
|
-
// The run it joined was started before a `clear()` (another account):
|
|
61
|
-
// its answer was dropped, and this caller still needs one.
|
|
62
|
-
if (!state.isLoaded.value) await deduper.join(runFetch);
|
|
63
|
-
};
|
|
64
|
-
return { fetchPermissions, loadPermissions };
|
|
22
|
+
/**
|
|
23
|
+
* The set's async data. Only the calls below start a read: a component that
|
|
24
|
+
* shows the set reads it through `useDmsData`, which never reads it again on
|
|
25
|
+
* a mount. Out of the page's refreshes: it has triggers of its own.
|
|
26
|
+
*/
|
|
27
|
+
function permissionsData(immediate = true) {
|
|
28
|
+
return useApiData<LoadedPermissions>(
|
|
29
|
+
PERMISSIONS_KEY,
|
|
30
|
+
async ({ $authFetch, signal }) => ({
|
|
31
|
+
ids: await $authFetch<string[]>(PERMISSIONS_ENDPOINT, { signal }),
|
|
32
|
+
loadedAt: Date.now(),
|
|
33
|
+
}),
|
|
34
|
+
{ immediate, refreshOnPageRefresh: false },
|
|
35
|
+
);
|
|
65
36
|
}
|
|
66
37
|
|
|
67
38
|
export function usePermissions() {
|
|
68
|
-
const
|
|
69
|
-
const
|
|
39
|
+
const loaded = useDmsData<LoadedPermissions>(PERMISSIONS_KEY).data;
|
|
40
|
+
const permissions = computed(() => new Set(loaded.value?.ids ?? []));
|
|
41
|
+
const isLoaded = computed(() => loaded.value != null);
|
|
70
42
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
43
|
+
// A caller that only needs a set joins the load in flight instead of
|
|
44
|
+
// starting another: one request per page however many ask.
|
|
45
|
+
async function loadPermissions(): Promise<void> {
|
|
46
|
+
// The load it joined may be cleared meanwhile (another account): its
|
|
47
|
+
// answer is dropped, and this caller still needs one.
|
|
48
|
+
for (let attempt = 0; attempt < 2 && !loaded.value; attempt++) {
|
|
49
|
+
const result = await permissionsData();
|
|
50
|
+
if (!result.data.value && result.error.value) throw result.error.value;
|
|
75
51
|
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// A refresh (the set changed on the backend) asked while a read is in
|
|
55
|
+
// flight replaces it rather than taking its older answer, so an
|
|
56
|
+
// invalidation is never swallowed. A failed one keeps the last set, and
|
|
57
|
+
// rejects so the caller knows it is stale.
|
|
58
|
+
async function fetchPermissions(): Promise<void> {
|
|
59
|
+
if (loaded.value) await refreshLoadedSet();
|
|
60
|
+
else await refreshDmsData(PERMISSIONS_KEY);
|
|
61
|
+
await loadPermissions();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// `refreshDmsData` does not say whether the read failed: the set's own
|
|
65
|
+
// async data does. Its binding lives in a scope stopped once the read
|
|
66
|
+
// settled, so refreshes do not pile bindings up; the load that brought
|
|
67
|
+
// the set keeps the key bound, so stopping it never aborts nor evicts.
|
|
68
|
+
async function refreshLoadedSet(): Promise<void> {
|
|
69
|
+
const scope = effectScope(true);
|
|
70
|
+
const data = scope.run(() => permissionsData(false))!;
|
|
71
|
+
try {
|
|
72
|
+
await data.refresh();
|
|
73
|
+
} finally {
|
|
74
|
+
scope.stop();
|
|
75
|
+
}
|
|
76
|
+
// A later refresh that replaced this one reports its own failure.
|
|
77
|
+
if (data.status.value === "error") throw data.error.value;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function refreshIfStale() {
|
|
81
|
+
const set = loaded.value;
|
|
82
|
+
if (set && Date.now() - set.loadedAt < PERMISSIONS_REFRESH_MS) return;
|
|
76
83
|
await fetchPermissions();
|
|
77
84
|
}
|
|
78
85
|
|
|
79
86
|
function hasPermission(permissionId: string): boolean {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
return state.permissions.value.has(permissionId);
|
|
87
|
+
const set = permissions.value;
|
|
88
|
+
return set.has(WILDCARD_PERMISSION) || set.has(permissionId);
|
|
84
89
|
}
|
|
85
90
|
|
|
91
|
+
// Empties the set and drops the answer of a read in flight, so a logout or
|
|
92
|
+
// an account switch is never overwritten by the previous account's set.
|
|
86
93
|
function clear() {
|
|
87
|
-
|
|
88
|
-
state.permissions.value = new Set();
|
|
89
|
-
state.isLoaded.value = false;
|
|
90
|
-
state.lastFetchTime.value = 0;
|
|
94
|
+
permissionsData(false).clear();
|
|
91
95
|
}
|
|
92
96
|
|
|
93
97
|
return {
|
|
94
|
-
permissions
|
|
95
|
-
isLoaded
|
|
98
|
+
permissions,
|
|
99
|
+
isLoaded,
|
|
96
100
|
fetchPermissions,
|
|
97
101
|
loadPermissions,
|
|
98
102
|
refreshIfStale,
|
|
@@ -7,37 +7,41 @@ interface OnboardingInfoResponse {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* asking again. It
|
|
10
|
+
* The async data key of the onboarding status. The global middleware reads
|
|
11
|
+
* it while a server renders a page, and the page hands it to the browser,
|
|
12
|
+
* whose run of the middleware then finds it instead of asking again. It
|
|
13
|
+
* holds nothing private.
|
|
13
14
|
*/
|
|
14
|
-
|
|
15
|
-
return useDmsState<OnboardingInfo | null>("dms-onboarding-info", () => null, {
|
|
16
|
-
transfer: true,
|
|
17
|
-
});
|
|
18
|
-
}
|
|
15
|
+
const ONBOARDING_KEY = "dms-onboarding";
|
|
19
16
|
|
|
20
17
|
export const useOnboarding = async (): Promise<OnboardingInfo> => {
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
const known = cache.value;
|
|
18
|
+
const known = useDmsData<OnboardingInfo>(ONBOARDING_KEY).data.value;
|
|
24
19
|
if (known) return known;
|
|
25
20
|
|
|
26
|
-
const { $authFetch } = useAuthFetch();
|
|
27
|
-
|
|
28
21
|
// One request per app however many callers ask before it answers: the
|
|
29
|
-
// preload started with the app and the `onboarding` middleware share
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
22
|
+
// preload started with the app and the `onboarding` middleware share the
|
|
23
|
+
// key. Its own triggers only: the status changes once, when the first
|
|
24
|
+
// administrator registers (`setOnboardingComplete`).
|
|
25
|
+
const status = await useApiData<OnboardingInfo>(
|
|
26
|
+
ONBOARDING_KEY,
|
|
27
|
+
async ({ $authFetch, signal }) => {
|
|
28
|
+
const response = await $authFetch<OnboardingInfoResponse>(
|
|
29
|
+
"/api/onboarding/informations",
|
|
30
|
+
{ method: "GET", signal },
|
|
31
|
+
);
|
|
32
|
+
return { hasOnboarded: response.has_onboarded };
|
|
33
|
+
},
|
|
34
|
+
{ refreshOnPageRefresh: false },
|
|
35
|
+
);
|
|
36
|
+
// A failed read leaves the status unknown: the middleware lets the
|
|
37
|
+
// navigation through, and the next one asks again.
|
|
38
|
+
if (!status.data.value) throw status.error.value;
|
|
39
|
+
return status.data.value;
|
|
38
40
|
};
|
|
39
41
|
|
|
40
42
|
/** Release the cached onboarding guard after the backend creates the admin. */
|
|
41
43
|
export const setOnboardingComplete = () => {
|
|
42
|
-
|
|
44
|
+
useDmsData<OnboardingInfo>(ONBOARDING_KEY).data.value = {
|
|
45
|
+
hasOnboarded: true,
|
|
46
|
+
};
|
|
43
47
|
};
|
|
@@ -356,6 +356,19 @@ function readsRouteSource(options: Record<string, unknown>): boolean {
|
|
|
356
356
|
return isRecord(source) && typeof source.fetchUrl === "string";
|
|
357
357
|
}
|
|
358
358
|
|
|
359
|
+
/** Serialized resource fields may read the preview's immutable demo record. */
|
|
360
|
+
function readsFixtureForm(
|
|
361
|
+
blockType: PreviewBlockType,
|
|
362
|
+
options: Record<string, unknown>,
|
|
363
|
+
): boolean {
|
|
364
|
+
return (
|
|
365
|
+
blockType.componentName === "dms-form" &&
|
|
366
|
+
options.fetchUrl === "/api/block-preview/fixtures/workspace" &&
|
|
367
|
+
Array.isArray(options.fields) &&
|
|
368
|
+
!options.submitUrl
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
|
|
359
372
|
function issueFor(
|
|
360
373
|
node: PreviewNode,
|
|
361
374
|
match: MatchedBlockType | undefined,
|
|
@@ -367,7 +380,11 @@ function issueFor(
|
|
|
367
380
|
name: node.type ?? node.componentName ?? "",
|
|
368
381
|
};
|
|
369
382
|
}
|
|
370
|
-
if (
|
|
383
|
+
if (
|
|
384
|
+
match.blockType.needsController &&
|
|
385
|
+
!readsRouteSource(options) &&
|
|
386
|
+
!readsFixtureForm(match.blockType, options)
|
|
387
|
+
) {
|
|
371
388
|
return { key: "needs_backend", name: match.name };
|
|
372
389
|
}
|
|
373
390
|
const refused = findRefusedOption(options);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antelopejs/dms",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.6",
|
|
4
4
|
"description": "The AntelopeJS dashboard management system: admin dashboards declared in TypeScript, with auth and tenancy, data management, file uploads, notifications and realtime.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"antelopejs",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"@antelopejs/interface-data-api": ">=0.2.2 <1.0.0",
|
|
61
61
|
"@antelopejs/interface-database": ">=0.1.10 <1.0.0",
|
|
62
62
|
"@antelopejs/interface-database-decorators": ">=0.1.9 <1.0.0",
|
|
63
|
-
"@antelopejs/interface-dms": ">=0.7.
|
|
63
|
+
"@antelopejs/interface-dms": ">=0.7.4 <0.8.0",
|
|
64
64
|
"@antelopejs/interface-email": ">=0.0.6 <1.0.0",
|
|
65
65
|
"@antelopejs/interface-file-storage": ">=0.1.4 <1.0.0",
|
|
66
66
|
"archiver": "^7.0.1",
|