@antelopejs/dms 0.1.0 → 0.2.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 +20 -0
- package/dist/config.js.map +1 -1
- package/dist/implementations/dms/frontend-bootstrap.d.ts +4 -0
- package/dist/implementations/dms/frontend-bootstrap.js +13 -0
- package/dist/implementations/dms/frontend-bootstrap.js.map +1 -1
- package/dist/implementations/dms/frontend-modules.js +8 -8
- package/dist/implementations/dms/frontend-modules.js.map +1 -1
- package/dist/test/integration/frontend-endpoints.test.js +81 -43
- package/dist/test/integration/frontend-endpoints.test.js.map +1 -1
- package/dist/test/unit/frontend-bootstrap.test.js +20 -0
- package/dist/test/unit/frontend-bootstrap.test.js.map +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.2.0
|
|
4
|
+
|
|
5
|
+
[compare changes](https://github.com/AntelopeJS/dms/compare/v0.1.0...v0.2.0)
|
|
6
|
+
|
|
7
|
+
### 🩹 Fixes
|
|
8
|
+
|
|
9
|
+
- **dms:** ⚠️ Self-declare the runtime package and gate the frontend endpoints on the configured secret ([#8](https://github.com/AntelopeJS/dms/pull/8))
|
|
10
|
+
|
|
11
|
+
### 🤖 CI
|
|
12
|
+
|
|
13
|
+
- **release:** Accept the self-declared runtime name in implements ([#9](https://github.com/AntelopeJS/dms/pull/9))
|
|
14
|
+
|
|
15
|
+
#### ⚠️ Breaking Changes
|
|
16
|
+
|
|
17
|
+
- **dms:** ⚠️ Self-declare the runtime package and gate the frontend endpoints on the configured secret ([#8](https://github.com/AntelopeJS/dms/pull/8))
|
|
18
|
+
|
|
19
|
+
### ❤️ Contributors
|
|
20
|
+
|
|
21
|
+
- Antony Rizzitelli <rizzitelli.antony@pm.me>
|
|
22
|
+
|
|
3
23
|
## v0.1.0
|
|
4
24
|
|
|
5
25
|
[compare changes](https://github.com/AntelopeJS/dms/compare/v0.0.2...v0.1.0)
|
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":";;;AAwLA,8BAEC;AAED,kDAEC;AAED,4CAEC;AAED,sCAEC;AAED,kDAEC;AAED,4CAEC;AAED,8CAEC;AAMD,kCAkBC;AAzOD,+BAA4B;AAE5B,+DAI8C;AAoI9C,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAEvC,IAAI,gBAAgB,GAAe;IACjC,SAAS,EAAE,EAAE;IACb,4BAA4B,EAAE,2BAAoB;IAClD,4BAA4B,EAAE,2BAAoB;IAClD,mBAAmB,EAAE,4BAAqB;IAC1C,oBAAoB,EAAE,2BAA2B,GAAG,2BAAoB;IACxE,iBAAiB,EAAE,EAAE;IACrB,iBAAiB,EAAE,KAAK;CACzB,CAAC;AAEF,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEzC,IAAI,sBAAsB,GAAqB;IAC7C,aAAa,EAAE,KAAK;IACpB,oBAAoB,EAClB,8BAA8B,GAAG,8BAAuB;IAC1D,cAAc,EAAE,uCAAuC;CACxD,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAC5B,QAAA,uBAAuB,GAClC,4BAA4B,GAAG,qBAAqB,GAAG,iBAAiB,CAAC;AAE3E,IAAI,mBAAmB,GAAkB;IACvC,OAAO,EAAE,+BAAuB;IAChC,gBAAgB,EAAE,EAAE;CACrB,CAAC;AAEF,IAAI,oBAAoB,GAAmB;IACzC,gBAAgB,EAAE,MAAM;CACzB,CAAC;AAEW,QAAA,uBAAuB,GAAG,uBAAuB,CAAC;AAE/D,IAAI,YAAY,GAAW;IACzB,aAAa,EAAE,+BAAuB;IACtC,UAAU,EAAE,uBAAuB;CACpC,CAAC;AAEF,IAAI,gBAAoC,CAAC;AAEzC,SAAgB,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAAW;IAC7C,gBAAgB,GAAG,GAAG,CAAC;AACzB,CAAC;AAED,SAAgB,gBAAgB;IAC9B,OAAO,gBAAgB,IAAI,YAAY,CAAC,aAAa,CAAC;AACxD,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAgB,mBAAmB;IACjC,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,SAAgB,gBAAgB;IAC9B,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAMD,SAAgB,WAAW,CAAC,MAAc;IACxC,YAAY,GAAG,IAAA,WAAI,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE1C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,gBAAgB,GAAG,IAAA,WAAI,EAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,sBAAsB,GAAG,IAAA,WAAI,EAAC,MAAM,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,mBAAmB,GAAG,IAAA,WAAI,EAAC,MAAM,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,oBAAoB,GAAG,IAAA,WAAI,EAAC,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { type BootstrapEnforcement } from "../../config";
|
|
1
2
|
export declare const BOOTSTRAP_HEADER = "x-dms-bootstrap";
|
|
2
3
|
export type BootstrapOutcome = "authenticated" | "anonymous";
|
|
3
4
|
export declare function initFrontendBootstrapSecret(dev: boolean): void;
|
|
4
5
|
export declare function getFrontendBootstrapSecret(): string | undefined;
|
|
6
|
+
export declare function hasConfiguredFrontendBootstrapSecret(): boolean;
|
|
5
7
|
export declare function matchesFrontendBootstrap(presented: string | undefined, expected?: string | undefined): boolean;
|
|
6
8
|
export declare function resolveBootstrapOutcome(presented: string | undefined): BootstrapOutcome;
|
|
9
|
+
export type LayerAccessDecision = "allow" | "refuse" | "degrade";
|
|
10
|
+
export declare function decideLayerAccess(outcome: BootstrapOutcome, hasConfiguredSecret?: boolean, enforcement?: BootstrapEnforcement): LayerAccessDecision;
|
|
7
11
|
export declare function assertFrontendBootstrap(outcome: BootstrapOutcome): void;
|
|
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BOOTSTRAP_HEADER = void 0;
|
|
4
4
|
exports.initFrontendBootstrapSecret = initFrontendBootstrapSecret;
|
|
5
5
|
exports.getFrontendBootstrapSecret = getFrontendBootstrapSecret;
|
|
6
|
+
exports.hasConfiguredFrontendBootstrapSecret = hasConfiguredFrontendBootstrapSecret;
|
|
6
7
|
exports.matchesFrontendBootstrap = matchesFrontendBootstrap;
|
|
7
8
|
exports.resolveBootstrapOutcome = resolveBootstrapOutcome;
|
|
9
|
+
exports.decideLayerAccess = decideLayerAccess;
|
|
8
10
|
exports.assertFrontendBootstrap = assertFrontendBootstrap;
|
|
9
11
|
const node_crypto_1 = require("node:crypto");
|
|
10
12
|
const interface_api_util_1 = require("@antelopejs/interface-api-util");
|
|
@@ -22,6 +24,9 @@ function initFrontendBootstrapSecret(dev) {
|
|
|
22
24
|
function getFrontendBootstrapSecret() {
|
|
23
25
|
return (0, config_1.getFrontendConfig)().bootstrapSecret?.trim() || ephemeralDevSecret;
|
|
24
26
|
}
|
|
27
|
+
function hasConfiguredFrontendBootstrapSecret() {
|
|
28
|
+
return Boolean((0, config_1.getFrontendConfig)().bootstrapSecret?.trim());
|
|
29
|
+
}
|
|
25
30
|
function digest(value) {
|
|
26
31
|
return (0, node_crypto_1.createHash)("sha256").update(value, "utf8").digest();
|
|
27
32
|
}
|
|
@@ -33,6 +38,14 @@ function matchesFrontendBootstrap(presented, expected = getFrontendBootstrapSecr
|
|
|
33
38
|
function resolveBootstrapOutcome(presented) {
|
|
34
39
|
return matchesFrontendBootstrap(presented) ? "authenticated" : "anonymous";
|
|
35
40
|
}
|
|
41
|
+
function decideLayerAccess(outcome, hasConfiguredSecret = hasConfiguredFrontendBootstrapSecret(), enforcement = (0, config_1.getFrontendConfig)().requireBootstrap ??
|
|
42
|
+
"warn") {
|
|
43
|
+
if (outcome === "authenticated")
|
|
44
|
+
return "allow";
|
|
45
|
+
if (hasConfiguredSecret || enforcement === "enforce")
|
|
46
|
+
return "refuse";
|
|
47
|
+
return "degrade";
|
|
48
|
+
}
|
|
36
49
|
function assertFrontendBootstrap(outcome) {
|
|
37
50
|
(0, interface_api_util_1.assert)(outcome === "authenticated", HTTP_UNAUTHORIZED, BOOTSTRAP_REQUIRED_MESSAGE);
|
|
38
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend-bootstrap.js","sourceRoot":"","sources":["../../../src/implementations/dms/frontend-bootstrap.ts"],"names":[],"mappings":";;;AAwBA,kEAGC;AAED,gEAEC;AAuBD,4DAMC;AAED,0DAIC;AAOD,0DAMC;
|
|
1
|
+
{"version":3,"file":"frontend-bootstrap.js","sourceRoot":"","sources":["../../../src/implementations/dms/frontend-bootstrap.ts"],"names":[],"mappings":";;;AAwBA,kEAGC;AAED,gEAEC;AAUD,oFAEC;AAuBD,4DAMC;AAED,0DAIC;AA6BD,8CASC;AAOD,0DAMC;AAjID,6CAAuE;AACvE,uEAAwD;AACxD,yCAA4E;AAE5E,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,0BAA0B,GAAG,mCAAmC,CAAC;AACvE,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAErB,QAAA,gBAAgB,GAAG,iBAAiB,CAAC;AAOlD,IAAI,kBAAsC,CAAC;AAS3C,SAAgB,2BAA2B,CAAC,GAAY;IACtD,IAAI,CAAC,GAAG,IAAI,IAAA,0BAAiB,GAAE,CAAC,eAAe,EAAE,IAAI,EAAE;QAAE,OAAO;IAChE,kBAAkB,GAAG,IAAA,yBAAW,EAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED,SAAgB,0BAA0B;IACxC,OAAO,IAAA,0BAAiB,GAAE,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,kBAAkB,CAAC;AAC3E,CAAC;AAUD,SAAgB,oCAAoC;IAClD,OAAO,OAAO,CAAC,IAAA,0BAAiB,GAAE,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;AAC7D,CAAC;AAmBD,SAAgB,wBAAwB,CACtC,SAA6B,EAC7B,WAA+B,0BAA0B,EAAE;IAE3D,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,IAAA,6BAAe,EAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,uBAAuB,CACrC,SAA6B;IAE7B,OAAO,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;AAC7E,CAAC;AA6BD,SAAgB,iBAAiB,CAC/B,OAAyB,EACzB,sBAA+B,oCAAoC,EAAE,EACrE,cAAoC,IAAA,0BAAiB,GAAE,CAAC,gBAAgB;IACtE,MAAM;IAER,IAAI,OAAO,KAAK,eAAe;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,mBAAmB,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACtE,OAAO,SAAS,CAAC;AACnB,CAAC;AAOD,SAAgB,uBAAuB,CAAC,OAAyB;IAC/D,IAAA,2BAAM,EACJ,OAAO,KAAK,eAAe,EAC3B,iBAAiB,EACjB,0BAA0B,CAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -161,16 +161,16 @@ function GetFrontendModules() {
|
|
|
161
161
|
}));
|
|
162
162
|
}
|
|
163
163
|
function enforceLayerAccess(outcome, route) {
|
|
164
|
-
|
|
164
|
+
const decision = (0, frontend_bootstrap_1.decideLayerAccess)(outcome);
|
|
165
|
+
if (decision === "allow")
|
|
165
166
|
return;
|
|
166
|
-
if (
|
|
167
|
+
if (decision === "refuse")
|
|
167
168
|
(0, frontend_bootstrap_1.assertFrontendBootstrap)(outcome);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
"
|
|
171
|
-
"
|
|
172
|
-
"
|
|
173
|
-
"A future major version will refuse this request.");
|
|
169
|
+
(0, warn_once_1.warnOnceFor)(modules, route, `[DMS] ${route} was served to a caller presenting no valid bootstrap credential, ` +
|
|
170
|
+
"because this instance configures none. Private layer options were withheld, so " +
|
|
171
|
+
"server-side HTML rendering and OAuth login will fail in a frontend built from this " +
|
|
172
|
+
"response. Set frontend.bootstrapSecret in the backend config and DMS_BOOTSTRAP_SECRET " +
|
|
173
|
+
"where the frontend is built; the route is then refused to unauthenticated callers.");
|
|
174
174
|
}
|
|
175
175
|
function resolveManifestFieldPolicy(outcome, dev) {
|
|
176
176
|
const authenticated = outcome === "authenticated";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend-modules.js","sourceRoot":"","sources":["../../../src/implementations/dms/frontend-modules.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"frontend-modules.js","sourceRoot":"","sources":["../../../src/implementations/dms/frontend-modules.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ const HTTP_BAD_REQUEST = 400;
|
|
|
11
11
|
const HTTP_NOT_FOUND = 404;
|
|
12
12
|
const ZIP_MAGIC = "PK";
|
|
13
13
|
const ARCHIVE_TIMEOUT_MS = 30_000;
|
|
14
|
+
const BOOTSTRAP_REQUIRED = "error.frontend.bootstrap_required";
|
|
14
15
|
function bootstrapSecret() {
|
|
15
16
|
return process.env.TEST_BOOTSTRAP_SECRET ?? "test-bootstrap-secret";
|
|
16
17
|
}
|
|
@@ -30,54 +31,91 @@ describe("[integration] dms frontend endpoints", () => {
|
|
|
30
31
|
priority: 0,
|
|
31
32
|
});
|
|
32
33
|
});
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
(0, chai_1.expect)(response.status).to.equal(HTTP_OK);
|
|
36
|
-
(0, chai_1.expect)(response.data.version).to.equal(1);
|
|
37
|
-
(0, chai_1.expect)(response.data.archive).to.equal("/dms/frontend/modules?renderer=vue&rendererVersion=3");
|
|
38
|
-
(0, chai_1.expect)(response.data.modules[0].renderer.name).to.equal("vue");
|
|
39
|
-
(0, chai_1.expect)(response.data.modules[0]).to.not.have.property("privateOptions");
|
|
40
|
-
(0, chai_1.expect)(response.data.modules[0]).to.not.have.property("path");
|
|
41
|
-
});
|
|
42
|
-
it("serves private options to an authenticated caller", async () => {
|
|
43
|
-
const response = await fetchManifest(client, bootstrapSecret());
|
|
44
|
-
(0, chai_1.expect)(response.data.modules.some((module) => module.privateOptions)).to.equal(true);
|
|
45
|
-
});
|
|
46
|
-
it("serves the frontend archive", async function () {
|
|
47
|
-
this.timeout(ARCHIVE_TIMEOUT_MS);
|
|
48
|
-
const response = await client.get("/dms/frontend/modules", {
|
|
49
|
-
headers: { [BOOTSTRAP_HEADER]: bootstrapSecret() },
|
|
50
|
-
responseType: "arraybuffer",
|
|
51
|
-
});
|
|
52
|
-
(0, chai_1.expect)(Buffer.from(response.data).subarray(0, 2).toString()).to.equal(ZIP_MAGIC);
|
|
53
|
-
});
|
|
54
|
-
it("isolates implementations sharing a logical module name", async () => {
|
|
55
|
-
const response = await client.get("/dms/frontend?renderer=test-renderer&rendererVersion=1");
|
|
56
|
-
(0, chai_1.expect)(response.status).to.equal(HTTP_OK);
|
|
57
|
-
(0, chai_1.expect)(response.data.modules.map((module) => module.renderer.name)).to.deep.equal(["test-renderer"]);
|
|
58
|
-
(0, chai_1.expect)(response.data.modules[0].name).to.equal("@antelopejs/dms-frontend-vue");
|
|
59
|
-
});
|
|
60
|
-
it("rejects incomplete renderer selections", async () => {
|
|
61
|
-
const response = await client.get("/dms/frontend?renderer=vue");
|
|
62
|
-
(0, chai_1.expect)(response.status).to.equal(HTTP_BAD_REQUEST);
|
|
63
|
-
(0, chai_1.expect)(response.data).to.equal("error.frontend_renderer_selection_required");
|
|
64
|
-
});
|
|
65
|
-
it("rejects unsupported renderer selections without falling back", async () => {
|
|
66
|
-
const response = await client.get("/dms/frontend?renderer=svelte&rendererVersion=5");
|
|
67
|
-
(0, chai_1.expect)(response.status).to.equal(HTTP_NOT_FOUND);
|
|
68
|
-
(0, chai_1.expect)(response.data).to.equal("error.frontend_renderer_not_found");
|
|
69
|
-
});
|
|
70
|
-
describe("with enforcement on", () => {
|
|
71
|
-
before(() => (0, config_1.applyConfig)({ frontend: { requireBootstrap: "enforce" } }));
|
|
72
|
-
after(() => (0, config_1.applyConfig)({ frontend: { requireBootstrap: "warn" } }));
|
|
73
|
-
it("refuses anonymous frontend requests", async () => {
|
|
34
|
+
describe("with a configured bootstrap secret", () => {
|
|
35
|
+
it("refuses the manifest to a caller sending no credential", async () => {
|
|
74
36
|
const response = await fetchManifest(client);
|
|
75
37
|
(0, chai_1.expect)(response.status).to.equal(HTTP_UNAUTHORIZED);
|
|
76
|
-
(0, chai_1.expect)(response.data).to.equal(
|
|
38
|
+
(0, chai_1.expect)(response.data).to.equal(BOOTSTRAP_REQUIRED);
|
|
39
|
+
});
|
|
40
|
+
it("refuses the manifest to a caller sending a bogus credential", async () => {
|
|
41
|
+
const response = await fetchManifest(client, "not-the-secret");
|
|
42
|
+
(0, chai_1.expect)(response.status).to.equal(HTTP_UNAUTHORIZED);
|
|
43
|
+
(0, chai_1.expect)(response.data).to.equal(BOOTSTRAP_REQUIRED);
|
|
77
44
|
});
|
|
78
|
-
it("
|
|
45
|
+
it("refuses the module archive to a caller sending no credential", async () => {
|
|
46
|
+
const response = await client.get("/dms/frontend/modules?renderer=vue&rendererVersion=3");
|
|
47
|
+
(0, chai_1.expect)(response.status).to.equal(HTTP_UNAUTHORIZED);
|
|
48
|
+
(0, chai_1.expect)(response.data).to.equal(BOOTSTRAP_REQUIRED);
|
|
49
|
+
});
|
|
50
|
+
it("refuses the module archive to a caller sending a bogus credential", async () => {
|
|
51
|
+
const response = await client.get("/dms/frontend/modules?renderer=vue&rendererVersion=3", { headers: { [BOOTSTRAP_HEADER]: "not-the-secret" } });
|
|
52
|
+
(0, chai_1.expect)(response.status).to.equal(HTTP_UNAUTHORIZED);
|
|
53
|
+
(0, chai_1.expect)(response.data).to.equal(BOOTSTRAP_REQUIRED);
|
|
54
|
+
});
|
|
55
|
+
describe("and requireBootstrap left on its warn default", () => {
|
|
56
|
+
before(() => (0, config_1.applyConfig)({ frontend: { requireBootstrap: "warn" } }));
|
|
57
|
+
it("still refuses an unauthenticated caller", async () => {
|
|
58
|
+
const response = await fetchManifest(client);
|
|
59
|
+
(0, chai_1.expect)(response.status).to.equal(HTTP_UNAUTHORIZED);
|
|
60
|
+
(0, chai_1.expect)(response.data).to.equal(BOOTSTRAP_REQUIRED);
|
|
61
|
+
});
|
|
62
|
+
it("still refuses an unauthenticated archive download", async () => {
|
|
63
|
+
const response = await client.get("/dms/frontend/modules?renderer=vue&rendererVersion=3");
|
|
64
|
+
(0, chai_1.expect)(response.status).to.equal(HTTP_UNAUTHORIZED);
|
|
65
|
+
(0, chai_1.expect)(response.data).to.equal(BOOTSTRAP_REQUIRED);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe("and requireBootstrap set to enforce", () => {
|
|
69
|
+
before(() => (0, config_1.applyConfig)({ frontend: { requireBootstrap: "enforce" } }));
|
|
70
|
+
after(() => (0, config_1.applyConfig)({ frontend: { requireBootstrap: "warn" } }));
|
|
71
|
+
it("refuses an unauthenticated caller", async () => {
|
|
72
|
+
const response = await fetchManifest(client);
|
|
73
|
+
(0, chai_1.expect)(response.status).to.equal(HTTP_UNAUTHORIZED);
|
|
74
|
+
(0, chai_1.expect)(response.data).to.equal(BOOTSTRAP_REQUIRED);
|
|
75
|
+
});
|
|
76
|
+
it("still serves an authenticated caller", async () => {
|
|
77
|
+
const response = await fetchManifest(client, bootstrapSecret());
|
|
78
|
+
(0, chai_1.expect)(response.status).to.equal(HTTP_OK);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe("served to an authenticated caller", () => {
|
|
83
|
+
it("serves renderer metadata", async () => {
|
|
79
84
|
const response = await fetchManifest(client, bootstrapSecret());
|
|
80
85
|
(0, chai_1.expect)(response.status).to.equal(HTTP_OK);
|
|
86
|
+
(0, chai_1.expect)(response.data.version).to.equal(1);
|
|
87
|
+
(0, chai_1.expect)(response.data.archive).to.equal("/dms/frontend/modules?renderer=vue&rendererVersion=3");
|
|
88
|
+
(0, chai_1.expect)(response.data.modules[0].renderer.name).to.equal("vue");
|
|
89
|
+
});
|
|
90
|
+
it("serves private options", async () => {
|
|
91
|
+
const response = await fetchManifest(client, bootstrapSecret());
|
|
92
|
+
(0, chai_1.expect)(response.data.modules.some((module) => module.privateOptions)).to.equal(true);
|
|
93
|
+
});
|
|
94
|
+
it("serves the frontend archive", async function () {
|
|
95
|
+
this.timeout(ARCHIVE_TIMEOUT_MS);
|
|
96
|
+
const response = await client.get("/dms/frontend/modules", {
|
|
97
|
+
headers: { [BOOTSTRAP_HEADER]: bootstrapSecret() },
|
|
98
|
+
responseType: "arraybuffer",
|
|
99
|
+
});
|
|
100
|
+
(0, chai_1.expect)(Buffer.from(response.data).subarray(0, 2).toString()).to.equal(ZIP_MAGIC);
|
|
101
|
+
});
|
|
102
|
+
it("isolates implementations sharing a logical module name", async () => {
|
|
103
|
+
const response = await client.get("/dms/frontend?renderer=test-renderer&rendererVersion=1", { headers: { [BOOTSTRAP_HEADER]: bootstrapSecret() } });
|
|
104
|
+
(0, chai_1.expect)(response.status).to.equal(HTTP_OK);
|
|
105
|
+
(0, chai_1.expect)(response.data.modules.map((module) => module.renderer.name)).to.deep.equal(["test-renderer"]);
|
|
106
|
+
(0, chai_1.expect)(response.data.modules[0].name).to.equal("@antelopejs/dms-frontend-vue");
|
|
107
|
+
});
|
|
108
|
+
it("rejects incomplete renderer selections", async () => {
|
|
109
|
+
const response = await client.get("/dms/frontend?renderer=vue", {
|
|
110
|
+
headers: { [BOOTSTRAP_HEADER]: bootstrapSecret() },
|
|
111
|
+
});
|
|
112
|
+
(0, chai_1.expect)(response.status).to.equal(HTTP_BAD_REQUEST);
|
|
113
|
+
(0, chai_1.expect)(response.data).to.equal("error.frontend_renderer_selection_required");
|
|
114
|
+
});
|
|
115
|
+
it("rejects unsupported renderer selections without falling back", async () => {
|
|
116
|
+
const response = await client.get("/dms/frontend?renderer=svelte&rendererVersion=5", { headers: { [BOOTSTRAP_HEADER]: bootstrapSecret() } });
|
|
117
|
+
(0, chai_1.expect)(response.status).to.equal(HTTP_NOT_FOUND);
|
|
118
|
+
(0, chai_1.expect)(response.data).to.equal("error.frontend_renderer_not_found");
|
|
81
119
|
});
|
|
82
120
|
});
|
|
83
121
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend-endpoints.test.js","sourceRoot":"","sources":["../../../src/test/integration/frontend-endpoints.test.ts"],"names":[],"mappings":";;AACA,+BAA8B;AAC9B,yCAA2C;AAC3C,yDAAmE;AACnE,0CAA+C;AAE/C,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAC3C,MAAM,OAAO,GAAG,GAAG,CAAC;AACpB,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,kBAAkB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"frontend-endpoints.test.js","sourceRoot":"","sources":["../../../src/test/integration/frontend-endpoints.test.ts"],"names":[],"mappings":";;AACA,+BAA8B;AAC9B,yCAA2C;AAC3C,yDAAmE;AACnE,0CAA+C;AAE/C,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAC3C,MAAM,OAAO,GAAG,GAAG,CAAC;AACpB,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,kBAAkB,GAAG,mCAAmC,CAAC;AA2B/D,SAAS,eAAe;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,uBAAuB,CAAC;AACtE,CAAC;AAED,SAAS,aAAa,CAAC,MAAqB,EAAE,MAAe;IAC3D,OAAO,MAAM,CAAC,GAAG,CAAmB,eAAe,EAAE;QACnD,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;KACtD,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,IAAI,MAAqB,CAAC;IAE1B,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAA,mBAAY,GAAE,CAAC;QACxB,IAAA,wBAAiB,EAAC;YAChB,IAAI,EAAE,8BAA8B;YACpC,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe;YAC3C,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE;YACrD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpD,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YAC/D,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpD,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,sDAAsD,CACvD,CAAC;YACF,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpD,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,sDAAsD,EACtD,EAAE,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,EAAE,CACtD,CAAC;YACF,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpD,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAIH,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;YAC7D,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,oBAAW,EAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YAEtE,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;gBACvD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC7C,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACpD,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;gBACjE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,sDAAsD,CACvD,CAAC;gBACF,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACpD,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,oBAAW,EAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;YACzE,KAAK,CAAC,GAAG,EAAE,CAAC,IAAA,oBAAW,EAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YAErE,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;gBACjD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC7C,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACpD,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;gBAChE,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACjD,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;YAChE,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CACpC,sDAAsD,CACvD,CAAC;YACF,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACtC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;YAChE,IAAA,aAAM,EACJ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAC9D,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK;YACrC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE;gBACzD,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE,EAAE;gBAClD,YAAY,EAAE,aAAa;aAC5B,CAAC,CAAC;YACH,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CACnE,SAAS,CACV,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,wDAAwD,EACxD,EAAE,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CACvD,CAAC;YACF,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAA,aAAM,EACJ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC5D,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;YACnC,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAC5C,8BAA8B,CAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE;gBAC9D,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE,EAAE;aACnD,CAAC,CAAC;YACH,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACnD,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAC5B,4CAA4C,CAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,iDAAiD,EACjD,EAAE,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CACvD,CAAC;YACF,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACjD,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -51,5 +51,25 @@ describe("[unit] frontend bootstrap", () => {
|
|
|
51
51
|
it("refuses an anonymous caller at the gate", () => {
|
|
52
52
|
expectRefusal(() => (0, frontend_bootstrap_1.assertFrontendBootstrap)("anonymous"));
|
|
53
53
|
});
|
|
54
|
+
describe("layer access decision", () => {
|
|
55
|
+
it("lets an authenticated caller through whatever is configured", () => {
|
|
56
|
+
(0, chai_1.expect)((0, frontend_bootstrap_1.decideLayerAccess)("authenticated", true, "enforce")).to.equal("allow");
|
|
57
|
+
(0, chai_1.expect)((0, frontend_bootstrap_1.decideLayerAccess)("authenticated", true, "warn")).to.equal("allow");
|
|
58
|
+
(0, chai_1.expect)((0, frontend_bootstrap_1.decideLayerAccess)("authenticated", false, "warn")).to.equal("allow");
|
|
59
|
+
(0, chai_1.expect)((0, frontend_bootstrap_1.decideLayerAccess)("authenticated", false, "enforce")).to.equal("allow");
|
|
60
|
+
});
|
|
61
|
+
it("refuses an anonymous caller as soon as a secret is configured", () => {
|
|
62
|
+
(0, chai_1.expect)((0, frontend_bootstrap_1.decideLayerAccess)("anonymous", true, "enforce")).to.equal("refuse");
|
|
63
|
+
});
|
|
64
|
+
it("refuses an anonymous caller even when requireBootstrap says warn", () => {
|
|
65
|
+
(0, chai_1.expect)((0, frontend_bootstrap_1.decideLayerAccess)("anonymous", true, "warn")).to.equal("refuse");
|
|
66
|
+
});
|
|
67
|
+
it("degrades an anonymous caller when no secret is configured", () => {
|
|
68
|
+
(0, chai_1.expect)((0, frontend_bootstrap_1.decideLayerAccess)("anonymous", false, "warn")).to.equal("degrade");
|
|
69
|
+
});
|
|
70
|
+
it("refuses an anonymous caller when enforcement is asked for without a secret", () => {
|
|
71
|
+
(0, chai_1.expect)((0, frontend_bootstrap_1.decideLayerAccess)("anonymous", false, "enforce")).to.equal("refuse");
|
|
72
|
+
});
|
|
73
|
+
});
|
|
54
74
|
});
|
|
55
75
|
//# sourceMappingURL=frontend-bootstrap.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend-bootstrap.test.js","sourceRoot":"","sources":["../../../src/test/unit/frontend-bootstrap.test.ts"],"names":[],"mappings":";;AAAA,6DAAuD;AACvD,+BAA8B;AAC9B,
|
|
1
|
+
{"version":3,"file":"frontend-bootstrap.test.js","sourceRoot":"","sources":["../../../src/test/unit/frontend-bootstrap.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antelopejs/dms",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/AntelopeJS/dms.git"
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
"license": "Apache-2.0",
|
|
20
20
|
"antelopeJs": {
|
|
21
21
|
"implements": [
|
|
22
|
-
"@antelopejs/interface-dms"
|
|
22
|
+
"@antelopejs/interface-dms",
|
|
23
|
+
"@antelopejs/dms"
|
|
23
24
|
],
|
|
24
25
|
"baseUrl": "dist",
|
|
25
26
|
"test": "src/test/antelope.test.ts",
|