@vertebr/admin 0.4.0 → 0.5.1
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/dist/database/connector.d.ts +1 -1
- package/dist/database/connector.d.ts.map +1 -1
- package/dist/database/connector.js +42 -6
- package/dist/database/connector.js.map +1 -1
- package/dist/database/index.d.ts +4 -4
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +4 -4
- package/dist/database/index.js.map +1 -1
- package/dist/database/{firestore.d.ts → providers/firestore.d.ts} +1 -1
- package/dist/database/providers/firestore.d.ts.map +1 -0
- package/dist/database/providers/firestore.js.map +1 -0
- package/dist/database/{memory.d.ts → providers/memory.d.ts} +1 -1
- package/dist/database/providers/memory.d.ts.map +1 -0
- package/dist/database/providers/memory.js.map +1 -0
- package/dist/database/{mongo.d.ts → providers/mongo.d.ts} +1 -1
- package/dist/database/providers/mongo.d.ts.map +1 -0
- package/dist/database/providers/mongo.js.map +1 -0
- package/dist/database/{postgres.d.ts → providers/postgres.d.ts} +1 -1
- package/dist/database/providers/postgres.d.ts.map +1 -0
- package/dist/database/providers/postgres.js.map +1 -0
- package/dist/database/types.d.ts +20 -5
- package/dist/database/types.d.ts.map +1 -1
- package/dist/index.d.ts +9 -264
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -957
- package/dist/index.js.map +1 -1
- package/dist/runtime/api/catalog.d.ts +59 -0
- package/dist/runtime/api/catalog.d.ts.map +1 -0
- package/dist/runtime/api/catalog.js +85 -0
- package/dist/runtime/api/catalog.js.map +1 -0
- package/dist/runtime/api/configs.d.ts +15 -0
- package/dist/runtime/api/configs.d.ts.map +1 -0
- package/dist/runtime/api/configs.js +43 -0
- package/dist/runtime/api/configs.js.map +1 -0
- package/dist/runtime/api/emails.d.ts +85 -0
- package/dist/runtime/api/emails.d.ts.map +1 -0
- package/dist/runtime/api/emails.js +520 -0
- package/dist/runtime/api/emails.js.map +1 -0
- package/dist/runtime/api/gallery.d.ts +28 -0
- package/dist/runtime/api/gallery.d.ts.map +1 -0
- package/dist/runtime/api/gallery.js +91 -0
- package/dist/runtime/api/gallery.js.map +1 -0
- package/dist/runtime/api/metrics.d.ts +22 -0
- package/dist/runtime/api/metrics.d.ts.map +1 -0
- package/dist/runtime/api/metrics.js +38 -0
- package/dist/runtime/api/metrics.js.map +1 -0
- package/dist/runtime/api/public.d.ts +22 -0
- package/dist/runtime/api/public.d.ts.map +1 -0
- package/dist/runtime/api/public.js +69 -0
- package/dist/runtime/api/public.js.map +1 -0
- package/dist/runtime/api/request.d.ts +26 -0
- package/dist/runtime/api/request.d.ts.map +1 -0
- package/dist/runtime/api/request.js +38 -0
- package/dist/runtime/api/request.js.map +1 -0
- package/dist/runtime/api/resources.d.ts +85 -0
- package/dist/runtime/api/resources.d.ts.map +1 -0
- package/dist/runtime/api/resources.js +263 -0
- package/dist/runtime/api/resources.js.map +1 -0
- package/dist/runtime/api/routes.d.ts +8 -0
- package/dist/runtime/api/routes.d.ts.map +1 -0
- package/dist/runtime/api/routes.js +202 -0
- package/dist/runtime/api/routes.js.map +1 -0
- package/dist/runtime/api/spa.d.ts +2 -0
- package/dist/runtime/api/spa.d.ts.map +1 -0
- package/dist/runtime/api/spa.js +34 -0
- package/dist/runtime/api/spa.js.map +1 -0
- package/dist/runtime/connectors/payments/connector.d.ts +30 -0
- package/dist/runtime/connectors/payments/connector.d.ts.map +1 -0
- package/dist/runtime/connectors/payments/connector.js +226 -0
- package/dist/runtime/connectors/payments/connector.js.map +1 -0
- package/dist/runtime/connectors/payments/index.d.ts +4 -0
- package/dist/runtime/connectors/payments/index.d.ts.map +1 -0
- package/dist/runtime/connectors/payments/index.js +10 -0
- package/dist/runtime/connectors/payments/index.js.map +1 -0
- package/dist/runtime/connectors/payments/stripe.d.ts +99 -0
- package/dist/runtime/connectors/payments/stripe.d.ts.map +1 -0
- package/dist/runtime/connectors/payments/stripe.js +189 -0
- package/dist/runtime/connectors/payments/stripe.js.map +1 -0
- package/dist/runtime/connectors/payments/types.d.ts +67 -0
- package/dist/runtime/connectors/payments/types.d.ts.map +1 -0
- package/dist/runtime/connectors/payments/types.js +16 -0
- package/dist/runtime/connectors/payments/types.js.map +1 -0
- package/dist/runtime/connectors/stripe.d.ts +19 -0
- package/dist/runtime/connectors/stripe.d.ts.map +1 -0
- package/dist/runtime/connectors/stripe.js +26 -0
- package/dist/runtime/connectors/stripe.js.map +1 -0
- package/dist/runtime/constants.d.ts +5 -0
- package/dist/runtime/constants.d.ts.map +1 -0
- package/dist/runtime/constants.js +8 -0
- package/dist/runtime/constants.js.map +1 -0
- package/dist/runtime/createAdmin.d.ts +3 -0
- package/dist/runtime/createAdmin.d.ts.map +1 -0
- package/dist/runtime/createAdmin.js +152 -0
- package/dist/runtime/createAdmin.js.map +1 -0
- package/dist/runtime/errors.d.ts +17 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +36 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/mail.d.ts +23 -0
- package/dist/runtime/mail.d.ts.map +1 -0
- package/dist/runtime/mail.js +248 -0
- package/dist/runtime/mail.js.map +1 -0
- package/dist/runtime/services/environment.d.ts +8 -0
- package/dist/runtime/services/environment.d.ts.map +1 -0
- package/dist/runtime/services/environment.js +78 -0
- package/dist/runtime/services/environment.js.map +1 -0
- package/dist/runtime/services/registry.d.ts +6 -0
- package/dist/runtime/services/registry.d.ts.map +1 -0
- package/dist/runtime/services/registry.js +32 -0
- package/dist/runtime/services/registry.js.map +1 -0
- package/dist/runtime/services/state.d.ts +25 -0
- package/dist/runtime/services/state.d.ts.map +1 -0
- package/dist/runtime/services/state.js +3 -0
- package/dist/runtime/services/state.js.map +1 -0
- package/dist/runtime/types/actions.d.ts +15 -0
- package/dist/runtime/types/actions.d.ts.map +1 -0
- package/dist/runtime/types/actions.js +3 -0
- package/dist/runtime/types/actions.js.map +1 -0
- package/dist/runtime/types/admin.d.ts +83 -0
- package/dist/runtime/types/admin.d.ts.map +1 -0
- package/dist/runtime/types/admin.js +3 -0
- package/dist/runtime/types/admin.js.map +1 -0
- package/dist/runtime/types/auth.d.ts +67 -0
- package/dist/runtime/types/auth.d.ts.map +1 -0
- package/dist/runtime/types/auth.js +3 -0
- package/dist/runtime/types/auth.js.map +1 -0
- package/dist/runtime/types/config.d.ts +39 -0
- package/dist/runtime/types/config.d.ts.map +1 -0
- package/dist/runtime/types/config.js +3 -0
- package/dist/runtime/types/config.js.map +1 -0
- package/dist/runtime/types/index.d.ts +15 -0
- package/dist/runtime/types/index.d.ts.map +1 -0
- package/dist/runtime/types/index.js +7 -0
- package/dist/runtime/types/index.js.map +1 -0
- package/dist/runtime/types/layout.d.ts +29 -0
- package/dist/runtime/types/layout.d.ts.map +1 -0
- package/dist/runtime/types/layout.js +3 -0
- package/dist/runtime/types/layout.js.map +1 -0
- package/dist/runtime/types/mail/catalog.d.ts +104 -0
- package/dist/runtime/types/mail/catalog.d.ts.map +1 -0
- package/dist/runtime/types/mail/catalog.js +3 -0
- package/dist/runtime/types/mail/catalog.js.map +1 -0
- package/dist/runtime/types/mail/definition.d.ts +68 -0
- package/dist/runtime/types/mail/definition.d.ts.map +1 -0
- package/dist/runtime/types/mail/definition.js +3 -0
- package/dist/runtime/types/mail/definition.js.map +1 -0
- package/dist/runtime/types/mail/index.d.ts +4 -0
- package/dist/runtime/types/mail/index.d.ts.map +1 -0
- package/dist/runtime/types/mail/index.js +3 -0
- package/dist/runtime/types/mail/index.js.map +1 -0
- package/dist/runtime/types/mail/message.d.ts +45 -0
- package/dist/runtime/types/mail/message.d.ts.map +1 -0
- package/dist/runtime/types/mail/message.js +3 -0
- package/dist/runtime/types/mail/message.js.map +1 -0
- package/dist/runtime/types/metrics.d.ts +46 -0
- package/dist/runtime/types/metrics.d.ts.map +1 -0
- package/dist/runtime/types/metrics.js +3 -0
- package/dist/runtime/types/metrics.js.map +1 -0
- package/dist/runtime/types/resource.d.ts +41 -0
- package/dist/runtime/types/resource.d.ts.map +1 -0
- package/dist/runtime/types/resource.js +3 -0
- package/dist/runtime/types/resource.js.map +1 -0
- package/dist/runtime/utils/auth.d.ts +4 -0
- package/dist/runtime/utils/auth.d.ts.map +1 -0
- package/dist/runtime/utils/auth.js +29 -0
- package/dist/runtime/utils/auth.js.map +1 -0
- package/dist/runtime/utils/config.d.ts +4 -0
- package/dist/runtime/utils/config.d.ts.map +1 -0
- package/dist/runtime/utils/config.js +14 -0
- package/dist/runtime/utils/config.js.map +1 -0
- package/dist/runtime/utils/http.d.ts +7 -0
- package/dist/runtime/utils/http.d.ts.map +1 -0
- package/dist/runtime/utils/http.js +61 -0
- package/dist/runtime/utils/http.js.map +1 -0
- package/dist/runtime/utils/metricsRange.d.ts +34 -0
- package/dist/runtime/utils/metricsRange.d.ts.map +1 -0
- package/dist/runtime/utils/metricsRange.js +121 -0
- package/dist/runtime/utils/metricsRange.js.map +1 -0
- package/dist/runtime/utils/sidebar.d.ts +2 -0
- package/dist/runtime/utils/sidebar.d.ts.map +1 -0
- package/dist/runtime/utils/sidebar.js +8 -0
- package/dist/runtime/utils/sidebar.js.map +1 -0
- package/dist/runtime/utils/staticDir.d.ts +2 -0
- package/dist/runtime/utils/staticDir.d.ts.map +1 -0
- package/dist/runtime/utils/staticDir.js +16 -0
- package/dist/runtime/utils/staticDir.js.map +1 -0
- package/dist/runtime/utils/uploads.d.ts +6 -0
- package/dist/runtime/utils/uploads.d.ts.map +1 -0
- package/dist/runtime/utils/uploads.js +66 -0
- package/dist/runtime/utils/uploads.js.map +1 -0
- package/dist/schema.d.ts +6 -0
- package/dist/schema.d.ts.map +1 -1
- package/package.json +1 -1
- package/static/assets/index-DKyVvFeT.js +332 -0
- package/static/assets/index-DUwFg1bw.css +1 -0
- package/static/index.html +2 -2
- package/dist/database/firestore.d.ts.map +0 -1
- package/dist/database/firestore.js.map +0 -1
- package/dist/database/memory.d.ts.map +0 -1
- package/dist/database/memory.js.map +0 -1
- package/dist/database/mongo.d.ts.map +0 -1
- package/dist/database/mongo.js.map +0 -1
- package/dist/database/postgres.d.ts.map +0 -1
- package/dist/database/postgres.js.map +0 -1
- package/static/assets/index-CZ7lykOe.css +0 -1
- package/static/assets/index-DvZiFDex.js +0 -329
- /package/dist/database/{firestore.js → providers/firestore.js} +0 -0
- /package/dist/database/{memory.js → providers/memory.js} +0 -0
- /package/dist/database/{mongo.js → providers/mongo.js} +0 -0
- /package/dist/database/{postgres.js → providers/postgres.js} +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveEnv = resolveEnv;
|
|
4
|
+
exports.assertAuth = assertAuth;
|
|
5
|
+
exports.withEnvContext = withEnvContext;
|
|
6
|
+
exports.withPublicEnvContext = withPublicEnvContext;
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
|
+
const errors_1 = require("../errors");
|
|
9
|
+
const auth_1 = require("../utils/auth");
|
|
10
|
+
const http_1 = require("../utils/http");
|
|
11
|
+
function resolveEnv(state, request) {
|
|
12
|
+
const headers = request.headers;
|
|
13
|
+
const header = (0, http_1.headerValue)(headers, constants_1.VERTEBR_ENV_HEADER);
|
|
14
|
+
const env = (header ?? state.defaultEnvironment).trim();
|
|
15
|
+
if (!state.environments.some((item) => item.id === env)) {
|
|
16
|
+
throw new errors_1.VertebrEnvError(`Unknown environment "${env}". Expected one of: ${state.environments
|
|
17
|
+
.map((item) => item.id)
|
|
18
|
+
.join(", ")}`);
|
|
19
|
+
}
|
|
20
|
+
return env;
|
|
21
|
+
}
|
|
22
|
+
async function assertAuth(state, request, envId) {
|
|
23
|
+
const environment = state.environments.find((item) => item.id === envId);
|
|
24
|
+
if (!environment) {
|
|
25
|
+
throw new errors_1.VertebrEnvError(`Unknown environment "${envId}"`);
|
|
26
|
+
}
|
|
27
|
+
const user = state.options.auth.getUser
|
|
28
|
+
? await state.options.auth.getUser(request)
|
|
29
|
+
: null;
|
|
30
|
+
const envAuth = environment.auth;
|
|
31
|
+
if (envAuth?.required) {
|
|
32
|
+
if (!user) {
|
|
33
|
+
throw new errors_1.VertebrAuthError("Sign in required for this environment");
|
|
34
|
+
}
|
|
35
|
+
if (envAuth.claimKey) {
|
|
36
|
+
const expected = envAuth.claimIncludes ?? environment.id;
|
|
37
|
+
if (!(0, auth_1.claimSatisfied)(user.claims, envAuth.claimKey, expected)) {
|
|
38
|
+
throw new errors_1.VertebrAuthError(`Missing claim ${envAuth.claimKey}=${expected} for environment "${environment.id}"`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (envAuth.roles?.length) {
|
|
42
|
+
const roles = user.roles ?? [];
|
|
43
|
+
const ok = envAuth.roles.some((role) => roles.includes(role));
|
|
44
|
+
if (!ok) {
|
|
45
|
+
throw new errors_1.VertebrAuthError(`Requires one of roles: ${envAuth.roles.join(", ")}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const allowed = await state.options.auth.check(request, {
|
|
50
|
+
env: envId,
|
|
51
|
+
user,
|
|
52
|
+
environment,
|
|
53
|
+
});
|
|
54
|
+
if (!allowed) {
|
|
55
|
+
throw new errors_1.VertebrAuthError();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function withEnvContext(state, request, run) {
|
|
59
|
+
const env = resolveEnv(state, request);
|
|
60
|
+
await assertAuth(state, request, env);
|
|
61
|
+
const ctx = { env, request, query: (0, http_1.requestQuery)(request) };
|
|
62
|
+
const execute = () => Promise.resolve(run(ctx));
|
|
63
|
+
if (state.options.onEnvironment) {
|
|
64
|
+
return state.options.onEnvironment(env, execute);
|
|
65
|
+
}
|
|
66
|
+
return execute();
|
|
67
|
+
}
|
|
68
|
+
/** Public storefront reads — resolve env, no auth. */
|
|
69
|
+
async function withPublicEnvContext(state, request, run) {
|
|
70
|
+
const env = resolveEnv(state, request);
|
|
71
|
+
const ctx = { env, request, query: (0, http_1.requestQuery)(request) };
|
|
72
|
+
const execute = () => Promise.resolve(run(ctx));
|
|
73
|
+
if (state.options.onEnvironment) {
|
|
74
|
+
return state.options.onEnvironment(env, execute);
|
|
75
|
+
}
|
|
76
|
+
return execute();
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/runtime/services/environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ConfigDefinition, ResourceDefinition } from "../types";
|
|
2
|
+
import type { AdminState } from "./state";
|
|
3
|
+
export declare function findResource(state: AdminState, id: string): ResourceDefinition;
|
|
4
|
+
export declare function findConfig(state: AdminState, id: string): ConfigDefinition;
|
|
5
|
+
export declare function readConfigValue(state: AdminState, id: string, env: string): Promise<Record<string, unknown>>;
|
|
6
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,GACT,kBAAkB,CAMpB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,gBAAgB,CAM1E;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAWlC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findResource = findResource;
|
|
4
|
+
exports.findConfig = findConfig;
|
|
5
|
+
exports.readConfigValue = readConfigValue;
|
|
6
|
+
const store_1 = require("../../store");
|
|
7
|
+
const errors_1 = require("../errors");
|
|
8
|
+
const config_1 = require("../utils/config");
|
|
9
|
+
function findResource(state, id) {
|
|
10
|
+
const resource = state.resources.find((item) => item.id === id);
|
|
11
|
+
if (!resource) {
|
|
12
|
+
throw new errors_1.VertebrNotFoundError(`Resource "${id}" not found`);
|
|
13
|
+
}
|
|
14
|
+
return resource;
|
|
15
|
+
}
|
|
16
|
+
function findConfig(state, id) {
|
|
17
|
+
const config = state.configs.find((item) => item.id === id);
|
|
18
|
+
if (!config) {
|
|
19
|
+
throw new errors_1.VertebrNotFoundError(`Config "${id}" not found`);
|
|
20
|
+
}
|
|
21
|
+
return config;
|
|
22
|
+
}
|
|
23
|
+
async function readConfigValue(state, id, env) {
|
|
24
|
+
const meta = state.controlMeta.get(id);
|
|
25
|
+
if (meta) {
|
|
26
|
+
const stored = await meta.store.get(id, env);
|
|
27
|
+
return (0, store_1.mergeConfigValue)((0, config_1.resolveDefaults)(meta.schema, meta.defaults, env), stored);
|
|
28
|
+
}
|
|
29
|
+
const config = findConfig(state, id);
|
|
30
|
+
return config.get({ env, request: null });
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/runtime/services/registry.ts"],"names":[],"mappings":";;AAMA,oCASC;AAED,gCAMC;AAED,0CAeC;AAxCD,uCAA+C;AAC/C,sCAAiD;AAEjD,4CAAkD;AAGlD,SAAgB,YAAY,CAC1B,KAAiB,EACjB,EAAU;IAEV,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,6BAAoB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,UAAU,CAAC,KAAiB,EAAE,EAAU;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,6BAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,KAAiB,EACjB,EAAU,EACV,GAAW;IAEX,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7C,OAAO,IAAA,wBAAgB,EACrB,IAAA,wBAAe,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAChD,MAAM,CACP,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ConfigStore } from "../../store";
|
|
2
|
+
import type { FieldSchema, GalleryDefinition } from "../../schema";
|
|
3
|
+
import type { AdminEnvironment, ConfigDefinition, ControlDefinition, CreateAdminOptions, MetricsDefinition, ResourceDefinition, MailDefinition } from "../types";
|
|
4
|
+
export type ControlMeta = {
|
|
5
|
+
public: boolean;
|
|
6
|
+
store: ConfigStore;
|
|
7
|
+
defaults?: ControlDefinition["defaults"];
|
|
8
|
+
schema: Record<string, FieldSchema>;
|
|
9
|
+
};
|
|
10
|
+
/** Mutable registry used by handlers after `createAdmin()`. */
|
|
11
|
+
export type AdminState = {
|
|
12
|
+
options: CreateAdminOptions;
|
|
13
|
+
basePath: string;
|
|
14
|
+
apiBase: string;
|
|
15
|
+
resources: ResourceDefinition[];
|
|
16
|
+
configs: ConfigDefinition[];
|
|
17
|
+
environments: AdminEnvironment[];
|
|
18
|
+
defaultEnvironment: string;
|
|
19
|
+
staticDir: string | undefined;
|
|
20
|
+
controlMeta: Map<string, ControlMeta>;
|
|
21
|
+
metricsDef: MetricsDefinition | null;
|
|
22
|
+
galleryDef: GalleryDefinition | null;
|
|
23
|
+
mailDef: MailDefinition | null;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACf,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACrC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;CAChC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/runtime/services/state.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FieldSchema, FieldType, HandlerContext } from "../../schema";
|
|
2
|
+
/** Action form field — plain type or full schema (enums, labels, …). */
|
|
3
|
+
export type ActionInputField = FieldType | FieldSchema;
|
|
4
|
+
export type ResourceAction<T = unknown> = {
|
|
5
|
+
label: string;
|
|
6
|
+
input?: Record<string, ActionInputField>;
|
|
7
|
+
run: (row: T, input: Record<string, unknown> | undefined, ctx: HandlerContext) => Promise<unknown> | unknown;
|
|
8
|
+
};
|
|
9
|
+
/** Resource-level action (no row) — e.g. seed test data. */
|
|
10
|
+
export type CollectionWideAction = {
|
|
11
|
+
label: string;
|
|
12
|
+
input?: Record<string, ActionInputField>;
|
|
13
|
+
run: (input: Record<string, unknown> | undefined, ctx: HandlerContext) => Promise<unknown> | unknown;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE3E,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,CAAC;AAEvD,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACzC,GAAG,EAAE,CACH,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACjC,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACzC,GAAG,EAAE,CACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/runtime/types/actions.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { GalleryDefinition } from "../../schema";
|
|
2
|
+
import type { AdminAuth, AdminEnvironment } from "./auth";
|
|
3
|
+
import type { ConfigDefinition, ControlDefinition, PageDefinition } from "./config";
|
|
4
|
+
import type { LayoutDefinition } from "./layout";
|
|
5
|
+
import type { MailDefinition } from "./mail";
|
|
6
|
+
import type { MetricsDefinition } from "./metrics";
|
|
7
|
+
import type { ResourceDefinition } from "./resource";
|
|
8
|
+
export type Connector = {
|
|
9
|
+
id: string;
|
|
10
|
+
register: (admin: Admin) => void;
|
|
11
|
+
};
|
|
12
|
+
export type CreateAdminOptions = {
|
|
13
|
+
auth: AdminAuth;
|
|
14
|
+
basePath?: string;
|
|
15
|
+
/** Directory of built dashboard SPA (index.html + assets). */
|
|
16
|
+
staticDir?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Environments the owner can switch between.
|
|
19
|
+
* Omit or pass one entry for single-env apps.
|
|
20
|
+
*/
|
|
21
|
+
environments?: AdminEnvironment[];
|
|
22
|
+
/** Fallback when the client sends no env header. */
|
|
23
|
+
defaultEnvironment?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Run resource/config handlers inside host env scope
|
|
26
|
+
* (Firestore ALS, tenant context, etc.).
|
|
27
|
+
*/
|
|
28
|
+
onEnvironment?: <T>(env: string, run: () => Promise<T> | T) => Promise<T> | T;
|
|
29
|
+
};
|
|
30
|
+
export type Admin = {
|
|
31
|
+
resource: <T = unknown>(def: ResourceDefinition<T>) => Admin;
|
|
32
|
+
config: (def: ConfigDefinition) => Admin;
|
|
33
|
+
/**
|
|
34
|
+
* Register a store-backed control (dashboard form + optional public read).
|
|
35
|
+
* Prefer this over raw `config()` for site flags and copy.
|
|
36
|
+
*/
|
|
37
|
+
control: (def: ControlDefinition) => Admin;
|
|
38
|
+
/**
|
|
39
|
+
* Register page-specific content (appears under Pages in the sidebar).
|
|
40
|
+
* Equivalent to `control({ ...def, section: "page" })`.
|
|
41
|
+
*/
|
|
42
|
+
page: (def: PageDefinition) => Admin;
|
|
43
|
+
/**
|
|
44
|
+
* Register an owner-reorderable layout (preset + ordered blocks).
|
|
45
|
+
* Appears under Pages by default; expose with `public: true` for the storefront.
|
|
46
|
+
*/
|
|
47
|
+
layout: (def: LayoutDefinition) => Admin;
|
|
48
|
+
/** Register the overview metrics board. */
|
|
49
|
+
metrics: (def: MetricsDefinition) => Admin;
|
|
50
|
+
/**
|
|
51
|
+
* Register a media gallery (sidebar under Resources).
|
|
52
|
+
* Host lists/uploads/deletes assets; Vertebr renders the UI.
|
|
53
|
+
*/
|
|
54
|
+
gallery: (def: GalleryDefinition) => Admin;
|
|
55
|
+
/**
|
|
56
|
+
* Register host outbound mail. Resources opt in with
|
|
57
|
+
* `mail: ["sendEmail", "sendPromo"]` (or a binding object).
|
|
58
|
+
*/
|
|
59
|
+
mail: (def: MailDefinition) => Admin;
|
|
60
|
+
/** Server-side read of a registered config/control (auth not applied). */
|
|
61
|
+
readConfig: (id: string, env: string) => Promise<Record<string, unknown>>;
|
|
62
|
+
use: (connector: Connector) => Admin;
|
|
63
|
+
routes: () => AdminRoute[];
|
|
64
|
+
hapiRoutes: () => HapiCompatibleRoute[];
|
|
65
|
+
resources: () => ResourceDefinition[];
|
|
66
|
+
configs: () => ConfigDefinition[];
|
|
67
|
+
environments: () => AdminEnvironment[];
|
|
68
|
+
};
|
|
69
|
+
export type AdminRoute = {
|
|
70
|
+
method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
71
|
+
path: string;
|
|
72
|
+
handler: (request: unknown) => Promise<unknown> | unknown;
|
|
73
|
+
};
|
|
74
|
+
export type HapiCompatibleRoute = {
|
|
75
|
+
method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
76
|
+
path: string;
|
|
77
|
+
options?: {
|
|
78
|
+
auth?: false | string;
|
|
79
|
+
[key: string]: any;
|
|
80
|
+
};
|
|
81
|
+
handler: (request: unknown, h: unknown) => Promise<unknown> | unknown;
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/admin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../src/runtime/types/admin.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-environment auth — adjusted by the host app developer.
|
|
3
|
+
* Vertebr enforces these after resolving the user via `auth.getUser`.
|
|
4
|
+
*/
|
|
5
|
+
export type EnvironmentAuthConfig = {
|
|
6
|
+
/** Require a signed-in user for this environment. @default false */
|
|
7
|
+
required?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Custom claim key (e.g. `allowedEnvs`).
|
|
10
|
+
* Array/string claims must include `claimIncludes` (defaults to env id).
|
|
11
|
+
*/
|
|
12
|
+
claimKey?: string;
|
|
13
|
+
/** Value required in the claim. Defaults to this environment's id. */
|
|
14
|
+
claimIncludes?: string;
|
|
15
|
+
/** If set, user.roles must include at least one of these. */
|
|
16
|
+
roles?: string[];
|
|
17
|
+
/**
|
|
18
|
+
* Public browser auth configuration. Safe Firebase web config only;
|
|
19
|
+
* never put service-account credentials or secrets here.
|
|
20
|
+
*/
|
|
21
|
+
client?: {
|
|
22
|
+
provider: "firebase";
|
|
23
|
+
config: {
|
|
24
|
+
apiKey: string;
|
|
25
|
+
authDomain: string;
|
|
26
|
+
projectId: string;
|
|
27
|
+
appId: string;
|
|
28
|
+
messagingSenderId?: string;
|
|
29
|
+
};
|
|
30
|
+
methods?: Array<"email" | "google">;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export type AdminEnvironment = {
|
|
34
|
+
id: string;
|
|
35
|
+
label: string;
|
|
36
|
+
/** Optional UI hint — e.g. production = danger. */
|
|
37
|
+
tone?: "neutral" | "warn" | "danger";
|
|
38
|
+
/** Auth rules for this environment (developer-configurable). */
|
|
39
|
+
auth?: EnvironmentAuthConfig;
|
|
40
|
+
};
|
|
41
|
+
/** Public auth summary returned to the dashboard (no secrets). */
|
|
42
|
+
export type EnvironmentAuthPublic = {
|
|
43
|
+
required: boolean;
|
|
44
|
+
claimKey?: string;
|
|
45
|
+
roles?: string[];
|
|
46
|
+
client?: EnvironmentAuthConfig["client"];
|
|
47
|
+
};
|
|
48
|
+
export type VertebrUser = {
|
|
49
|
+
uid: string;
|
|
50
|
+
claims?: Record<string, unknown>;
|
|
51
|
+
roles?: string[];
|
|
52
|
+
};
|
|
53
|
+
export type AuthContext = {
|
|
54
|
+
env: string;
|
|
55
|
+
user: VertebrUser | null;
|
|
56
|
+
environment: AdminEnvironment;
|
|
57
|
+
};
|
|
58
|
+
export type AdminAuth = {
|
|
59
|
+
/** Resolve the current user (Firebase token, session, etc.). */
|
|
60
|
+
getUser?: (request: unknown) => Promise<VertebrUser | null> | VertebrUser | null;
|
|
61
|
+
/**
|
|
62
|
+
* Global gate after per-env auth rules.
|
|
63
|
+
* Return false to deny even when env auth passed.
|
|
64
|
+
*/
|
|
65
|
+
check: (request: unknown, ctx: AuthContext) => Promise<boolean> | boolean;
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,UAAU,CAAC;QACrB,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC;YACf,UAAU,EAAE,MAAM,CAAC;YACnB,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM,CAAC;YACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;SAC5B,CAAC;QACF,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC;KACrC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrC,gEAAgE;IAChE,IAAI,CAAC,EAAE,qBAAqB,CAAC;CAC9B,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,gEAAgE;IAChE,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,OAAO,KACb,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC;IACtD;;;OAGG;IACH,KAAK,EAAE,CACL,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,WAAW,KACb,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/runtime/types/auth.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ConfigStore } from "../../store";
|
|
2
|
+
import type { FieldSchema, HandlerContext } from "../../schema";
|
|
3
|
+
/** Sidebar group for configs / controls in the dashboard. */
|
|
4
|
+
export type ConfigSection = "config" | "page";
|
|
5
|
+
export type ConfigDefinition = {
|
|
6
|
+
id: string;
|
|
7
|
+
label: string;
|
|
8
|
+
schema: Record<string, FieldSchema>;
|
|
9
|
+
/** Sidebar group — use `"page"` for page-specific content. @default "config" */
|
|
10
|
+
section?: ConfigSection;
|
|
11
|
+
/** Sidebar heading. Defaults to `"Config"` or `"Pages"` from `section`. */
|
|
12
|
+
group?: string;
|
|
13
|
+
get: (ctx: HandlerContext) => Promise<Record<string, unknown>> | Record<string, unknown>;
|
|
14
|
+
set: (value: Record<string, unknown>, ctx: HandlerContext) => Promise<void> | void;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* High-level control registration — store-backed config with optional
|
|
18
|
+
* public storefront read.
|
|
19
|
+
*/
|
|
20
|
+
export type ControlDefinition = {
|
|
21
|
+
id: string;
|
|
22
|
+
label: string;
|
|
23
|
+
schema: Record<string, FieldSchema>;
|
|
24
|
+
store: ConfigStore;
|
|
25
|
+
/** Sidebar group — use `"page"` for page-specific content. @default "config" */
|
|
26
|
+
section?: ConfigSection;
|
|
27
|
+
/** Sidebar heading. Defaults to `"Config"` or `"Pages"` from `section`. */
|
|
28
|
+
group?: string;
|
|
29
|
+
/** When true, exposed via `/api/public/controls` (no auth). */
|
|
30
|
+
public?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Defaults merged under stored values.
|
|
33
|
+
* Schema `default` values are applied first, then this.
|
|
34
|
+
*/
|
|
35
|
+
defaults?: Record<string, unknown> | ((env: string) => Record<string, unknown>);
|
|
36
|
+
};
|
|
37
|
+
/** Store-backed page content — same as `control()` with `section: "page"`. */
|
|
38
|
+
export type PageDefinition = Omit<ControlDefinition, "section">;
|
|
39
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEhE,6DAA6D;AAC7D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,gFAAgF;IAChF,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzF,GAAG,EAAE,CACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,KAAK,EAAE,WAAW,CAAC;IACnB,gFAAgF;IAChF,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EACL,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAChD,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/runtime/types/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public admin type surface — split by domain under `./types/`.
|
|
3
|
+
* Prefer importing from `@vertebr/admin` or `./types`.
|
|
4
|
+
*/
|
|
5
|
+
export type { ActionInputField, CollectionWideAction, ResourceAction, } from "./actions";
|
|
6
|
+
export type { MailComposeResult, MailMessage, MailSendReceipt, MailSendResult, MailSentHandler, MailTemplate, } from "./mail/message";
|
|
7
|
+
export type { MailCampaign, MailCampaignAudience, MailCampaignScheduleInput, MailCampaignStatus, MailDiscountOption, MailHistoryEntry, MailHistoryRecordInput, MailLibraryTemplate, MailProductOption, } from "./mail/catalog";
|
|
8
|
+
export type { MailDefinition, ResourceMailBinding, ResourceMailConfig, } from "./mail/definition";
|
|
9
|
+
export type { ResourceDefinition, ResourcePermissions, } from "./resource";
|
|
10
|
+
export type { ConfigDefinition, ConfigSection, ControlDefinition, PageDefinition, } from "./config";
|
|
11
|
+
export type { LayoutDefinition, LayoutPreset, LayoutSlot, } from "./layout";
|
|
12
|
+
export type { MetricCard, MetricChart, MetricChartPoint, MetricsDefinition, MetricsPayload, } from "./metrics";
|
|
13
|
+
export type { AdminAuth, AdminEnvironment, AuthContext, EnvironmentAuthConfig, EnvironmentAuthPublic, VertebrUser, } from "./auth";
|
|
14
|
+
export type { Admin, AdminRoute, Connector, CreateAdminOptions, HapiCompatibleRoute, } from "./admin";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,GACX,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,GACZ,MAAM,QAAQ,CAAC;AAEhB,YAAY,EACV,KAAK,EACL,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/types/index.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ConfigStore } from "../../store";
|
|
2
|
+
import type { ConfigSection } from "./config";
|
|
3
|
+
/** Named slot in a host-rendered page layout. */
|
|
4
|
+
export type LayoutSlot = {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
};
|
|
8
|
+
export type LayoutPreset = {
|
|
9
|
+
id: string;
|
|
10
|
+
label: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Owner-reorderable page layout. Vertebr stores the recipe; the host
|
|
14
|
+
* still owns CSS and rendering.
|
|
15
|
+
*/
|
|
16
|
+
export type LayoutDefinition = {
|
|
17
|
+
id: string;
|
|
18
|
+
label: string;
|
|
19
|
+
slots: LayoutSlot[];
|
|
20
|
+
/** @default slot ids in declaration order */
|
|
21
|
+
defaultOrder?: string[];
|
|
22
|
+
presets?: LayoutPreset[];
|
|
23
|
+
store: ConfigStore;
|
|
24
|
+
public?: boolean;
|
|
25
|
+
section?: ConfigSection;
|
|
26
|
+
/** Sidebar heading. Defaults to `"Pages"`. */
|
|
27
|
+
group?: string;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,iDAAiD;AACjD,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/runtime/types/layout.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/** Scheduled / campaign send tracked on the Emails board. */
|
|
2
|
+
export type MailCampaignStatus = "scheduled" | "sending" | "sent" | "cancelled" | "failed";
|
|
3
|
+
export type MailCampaignAudience = {
|
|
4
|
+
mode: "all";
|
|
5
|
+
} | {
|
|
6
|
+
mode: "ids";
|
|
7
|
+
rowIds: string[];
|
|
8
|
+
} | {
|
|
9
|
+
mode: "emails";
|
|
10
|
+
emails: string[];
|
|
11
|
+
};
|
|
12
|
+
export type MailCampaign = {
|
|
13
|
+
id: string;
|
|
14
|
+
resourceId: string;
|
|
15
|
+
resourceLabel?: string;
|
|
16
|
+
templateId: string;
|
|
17
|
+
templateLabel?: string;
|
|
18
|
+
audience: MailCampaignAudience;
|
|
19
|
+
recipientCount?: number;
|
|
20
|
+
/** ISO timestamp — when to send. */
|
|
21
|
+
sendAt: string;
|
|
22
|
+
status: MailCampaignStatus;
|
|
23
|
+
createdAt?: string;
|
|
24
|
+
subject?: string;
|
|
25
|
+
error?: string;
|
|
26
|
+
};
|
|
27
|
+
export type MailCampaignScheduleInput = {
|
|
28
|
+
resourceId: string;
|
|
29
|
+
templateId: string;
|
|
30
|
+
input?: Record<string, unknown>;
|
|
31
|
+
audience: MailCampaignAudience;
|
|
32
|
+
sendAt: string;
|
|
33
|
+
/** Optional subject snapshot for the board list. */
|
|
34
|
+
subject?: string;
|
|
35
|
+
};
|
|
36
|
+
/** One outbound send logged on the Emails board. */
|
|
37
|
+
export type MailHistoryEntry = {
|
|
38
|
+
id: string;
|
|
39
|
+
at: string;
|
|
40
|
+
resourceId: string;
|
|
41
|
+
resourceLabel?: string;
|
|
42
|
+
templateId: string;
|
|
43
|
+
templateLabel?: string;
|
|
44
|
+
subject?: string;
|
|
45
|
+
recipientCount: number;
|
|
46
|
+
sent: number;
|
|
47
|
+
failed?: number;
|
|
48
|
+
status: "sent" | "partial" | "failed" | "scheduled";
|
|
49
|
+
source: "board" | "row" | "campaign";
|
|
50
|
+
campaignId?: string;
|
|
51
|
+
productIds?: string[];
|
|
52
|
+
/** Sample of recipient emails (capped). */
|
|
53
|
+
recipients?: string[];
|
|
54
|
+
/** Compose preset id when present. */
|
|
55
|
+
preset?: string;
|
|
56
|
+
discountCode?: string;
|
|
57
|
+
discountOffer?: string;
|
|
58
|
+
/** Order / confirmation reference when present (e.g. `MM-PENDING`). */
|
|
59
|
+
reference?: string;
|
|
60
|
+
};
|
|
61
|
+
export type MailHistoryRecordInput = Omit<MailHistoryEntry, "id"> & {
|
|
62
|
+
id?: string;
|
|
63
|
+
};
|
|
64
|
+
/** Owner-saved copy of a system preset (or freeform). */
|
|
65
|
+
export type MailLibraryTemplate = {
|
|
66
|
+
id: string;
|
|
67
|
+
label: string;
|
|
68
|
+
/** System preset this was duplicated from. */
|
|
69
|
+
fromPreset?: string;
|
|
70
|
+
subject: string;
|
|
71
|
+
body: string;
|
|
72
|
+
productIds?: string[];
|
|
73
|
+
/** Stripe coupon / promotion code id when discounts are wired. */
|
|
74
|
+
discountId?: string;
|
|
75
|
+
discountCode?: string;
|
|
76
|
+
discountOffer?: string;
|
|
77
|
+
discountExpires?: string;
|
|
78
|
+
kind?: "account" | "promo" | "discount" | "order";
|
|
79
|
+
/** Order confirmation extras (`kind: "order"`). */
|
|
80
|
+
eyebrow?: string;
|
|
81
|
+
headline?: string;
|
|
82
|
+
confirmationLabel?: string;
|
|
83
|
+
shippingNote?: string;
|
|
84
|
+
footer?: string;
|
|
85
|
+
signOff?: string;
|
|
86
|
+
createdAt?: string;
|
|
87
|
+
updatedAt?: string;
|
|
88
|
+
};
|
|
89
|
+
export type MailProductOption = {
|
|
90
|
+
id: string;
|
|
91
|
+
label: string;
|
|
92
|
+
imageUrl?: string;
|
|
93
|
+
priceLabel?: string;
|
|
94
|
+
};
|
|
95
|
+
/** Coupon / promo option for discount emails (e.g. Stripe). */
|
|
96
|
+
export type MailDiscountOption = {
|
|
97
|
+
id: string;
|
|
98
|
+
label: string;
|
|
99
|
+
code?: string;
|
|
100
|
+
/** e.g. "20% off" or "$10 off" */
|
|
101
|
+
offerLabel?: string;
|
|
102
|
+
expiresLabel?: string;
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../../src/runtime/types/mail/catalog.ts"],"names":[],"mappings":"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"}
|