@betterportal/framework 0.0.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/README.md +13 -0
- package/lib/adapters/h3.d.ts +51 -0
- package/lib/adapters/h3.d.ts.map +1 -0
- package/lib/adapters/h3.js +1120 -0
- package/lib/adapters/h3.js.map +1 -0
- package/lib/codegen/cli.d.ts +3 -0
- package/lib/codegen/cli.d.ts.map +1 -0
- package/lib/codegen/cli.js +82 -0
- package/lib/codegen/cli.js.map +1 -0
- package/lib/codegen/emitter.d.ts +7 -0
- package/lib/codegen/emitter.d.ts.map +1 -0
- package/lib/codegen/emitter.js +453 -0
- package/lib/codegen/emitter.js.map +1 -0
- package/lib/codegen/init.d.ts +3 -0
- package/lib/codegen/init.d.ts.map +1 -0
- package/lib/codegen/init.js +90 -0
- package/lib/codegen/init.js.map +1 -0
- package/lib/codegen/scanner.d.ts +56 -0
- package/lib/codegen/scanner.d.ts.map +1 -0
- package/lib/codegen/scanner.js +484 -0
- package/lib/codegen/scanner.js.map +1 -0
- package/lib/codegen/validate.d.ts +14 -0
- package/lib/codegen/validate.d.ts.map +1 -0
- package/lib/codegen/validate.js +166 -0
- package/lib/codegen/validate.js.map +1 -0
- package/lib/contracts/auth.d.ts +160 -0
- package/lib/contracts/auth.d.ts.map +1 -0
- package/lib/contracts/auth.js +123 -0
- package/lib/contracts/auth.js.map +1 -0
- package/lib/contracts/binding.d.ts +169 -0
- package/lib/contracts/binding.d.ts.map +1 -0
- package/lib/contracts/binding.js +69 -0
- package/lib/contracts/binding.js.map +1 -0
- package/lib/contracts/common.d.ts +23 -0
- package/lib/contracts/common.d.ts.map +1 -0
- package/lib/contracts/common.js +18 -0
- package/lib/contracts/common.js.map +1 -0
- package/lib/contracts/config.d.ts +93 -0
- package/lib/contracts/config.d.ts.map +1 -0
- package/lib/contracts/config.js +62 -0
- package/lib/contracts/config.js.map +1 -0
- package/lib/contracts/controlPlane.d.ts +63 -0
- package/lib/contracts/controlPlane.d.ts.map +1 -0
- package/lib/contracts/controlPlane.js +2 -0
- package/lib/contracts/controlPlane.js.map +1 -0
- package/lib/contracts/json.d.ts +9 -0
- package/lib/contracts/json.d.ts.map +1 -0
- package/lib/contracts/json.js +6 -0
- package/lib/contracts/json.js.map +1 -0
- package/lib/contracts/manifest.d.ts +158 -0
- package/lib/contracts/manifest.d.ts.map +1 -0
- package/lib/contracts/manifest.js +40 -0
- package/lib/contracts/manifest.js.map +1 -0
- package/lib/contracts/observability.d.ts +77 -0
- package/lib/contracts/observability.d.ts.map +1 -0
- package/lib/contracts/observability.js +99 -0
- package/lib/contracts/observability.js.map +1 -0
- package/lib/contracts/platformConfig.d.ts +635 -0
- package/lib/contracts/platformConfig.d.ts.map +1 -0
- package/lib/contracts/platformConfig.js +256 -0
- package/lib/contracts/platformConfig.js.map +1 -0
- package/lib/contracts/registry.d.ts +104 -0
- package/lib/contracts/registry.d.ts.map +1 -0
- package/lib/contracts/registry.js +2 -0
- package/lib/contracts/registry.js.map +1 -0
- package/lib/contracts/route.d.ts +199 -0
- package/lib/contracts/route.d.ts.map +1 -0
- package/lib/contracts/route.js +26 -0
- package/lib/contracts/route.js.map +1 -0
- package/lib/contracts/serviceConfig.d.ts +88 -0
- package/lib/contracts/serviceConfig.d.ts.map +1 -0
- package/lib/contracts/serviceConfig.js +45 -0
- package/lib/contracts/serviceConfig.js.map +1 -0
- package/lib/contracts/streaming.d.ts +76 -0
- package/lib/contracts/streaming.d.ts.map +1 -0
- package/lib/contracts/streaming.js +31 -0
- package/lib/contracts/streaming.js.map +1 -0
- package/lib/contracts/view.d.ts +149 -0
- package/lib/contracts/view.d.ts.map +1 -0
- package/lib/contracts/view.js +82 -0
- package/lib/contracts/view.js.map +1 -0
- package/lib/controlPlane/store.d.ts +24 -0
- package/lib/controlPlane/store.d.ts.map +1 -0
- package/lib/controlPlane/store.js +70 -0
- package/lib/controlPlane/store.js.map +1 -0
- package/lib/controlPlane/sync.d.ts +8 -0
- package/lib/controlPlane/sync.d.ts.map +1 -0
- package/lib/controlPlane/sync.js +24 -0
- package/lib/controlPlane/sync.js.map +1 -0
- package/lib/controlPlane/types.d.ts +15 -0
- package/lib/controlPlane/types.d.ts.map +1 -0
- package/lib/controlPlane/types.js +2 -0
- package/lib/controlPlane/types.js.map +1 -0
- package/lib/index.d.ts +40 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +40 -0
- package/lib/index.js.map +1 -0
- package/lib/runtime/auth/envelope.d.ts +32 -0
- package/lib/runtime/auth/envelope.d.ts.map +1 -0
- package/lib/runtime/auth/envelope.js +123 -0
- package/lib/runtime/auth/envelope.js.map +1 -0
- package/lib/runtime/auth/issuer.d.ts +44 -0
- package/lib/runtime/auth/issuer.d.ts.map +1 -0
- package/lib/runtime/auth/issuer.js +82 -0
- package/lib/runtime/auth/issuer.js.map +1 -0
- package/lib/runtime/auth/jwks.d.ts +7 -0
- package/lib/runtime/auth/jwks.d.ts.map +1 -0
- package/lib/runtime/auth/jwks.js +69 -0
- package/lib/runtime/auth/jwks.js.map +1 -0
- package/lib/runtime/auth/keypair.d.ts +21 -0
- package/lib/runtime/auth/keypair.d.ts.map +1 -0
- package/lib/runtime/auth/keypair.js +50 -0
- package/lib/runtime/auth/keypair.js.map +1 -0
- package/lib/runtime/auth/tokens.d.ts +25 -0
- package/lib/runtime/auth/tokens.d.ts.map +1 -0
- package/lib/runtime/auth/tokens.js +137 -0
- package/lib/runtime/auth/tokens.js.map +1 -0
- package/lib/runtime/auth/verifier.d.ts +45 -0
- package/lib/runtime/auth/verifier.d.ts.map +1 -0
- package/lib/runtime/auth/verifier.js +76 -0
- package/lib/runtime/auth/verifier.js.map +1 -0
- package/lib/runtime/bpHeaders.d.ts +10 -0
- package/lib/runtime/bpHeaders.d.ts.map +1 -0
- package/lib/runtime/bpHeaders.js +53 -0
- package/lib/runtime/bpHeaders.js.map +1 -0
- package/lib/runtime/configProvider.d.ts +41 -0
- package/lib/runtime/configProvider.d.ts.map +1 -0
- package/lib/runtime/configProvider.js +232 -0
- package/lib/runtime/configProvider.js.map +1 -0
- package/lib/runtime/configStore.d.ts +34 -0
- package/lib/runtime/configStore.d.ts.map +1 -0
- package/lib/runtime/configStore.js +197 -0
- package/lib/runtime/configStore.js.map +1 -0
- package/lib/runtime/configTicket.d.ts +49 -0
- package/lib/runtime/configTicket.d.ts.map +1 -0
- package/lib/runtime/configTicket.js +168 -0
- package/lib/runtime/configTicket.js.map +1 -0
- package/lib/runtime/h3.d.ts +28 -0
- package/lib/runtime/h3.d.ts.map +1 -0
- package/lib/runtime/h3.js +199 -0
- package/lib/runtime/h3.js.map +1 -0
- package/lib/runtime/handler.d.ts +55 -0
- package/lib/runtime/handler.d.ts.map +1 -0
- package/lib/runtime/handler.js +51 -0
- package/lib/runtime/handler.js.map +1 -0
- package/lib/runtime/http.d.ts +13 -0
- package/lib/runtime/http.d.ts.map +1 -0
- package/lib/runtime/http.js +114 -0
- package/lib/runtime/http.js.map +1 -0
- package/lib/runtime/jsonSchema.d.ts +4 -0
- package/lib/runtime/jsonSchema.d.ts.map +1 -0
- package/lib/runtime/jsonSchema.js +28 -0
- package/lib/runtime/jsonSchema.js.map +1 -0
- package/lib/runtime/manifest.d.ts +3 -0
- package/lib/runtime/manifest.d.ts.map +1 -0
- package/lib/runtime/manifest.js +5 -0
- package/lib/runtime/manifest.js.map +1 -0
- package/lib/runtime/media.d.ts +20 -0
- package/lib/runtime/media.d.ts.map +1 -0
- package/lib/runtime/media.js +70 -0
- package/lib/runtime/media.js.map +1 -0
- package/lib/runtime/registry.d.ts +67 -0
- package/lib/runtime/registry.d.ts.map +1 -0
- package/lib/runtime/registry.js +290 -0
- package/lib/runtime/registry.js.map +1 -0
- package/lib/runtime/serviceConfig.d.ts +38 -0
- package/lib/runtime/serviceConfig.d.ts.map +1 -0
- package/lib/runtime/serviceConfig.js +152 -0
- package/lib/runtime/serviceConfig.js.map +1 -0
- package/lib/runtime/statusViews.d.ts +23 -0
- package/lib/runtime/statusViews.d.ts.map +1 -0
- package/lib/runtime/statusViews.js +48 -0
- package/lib/runtime/statusViews.js.map +1 -0
- package/lib/runtime/stream.d.ts +41 -0
- package/lib/runtime/stream.d.ts.map +1 -0
- package/lib/runtime/stream.js +92 -0
- package/lib/runtime/stream.js.map +1 -0
- package/lib/runtime/streamHandler.d.ts +48 -0
- package/lib/runtime/streamHandler.d.ts.map +1 -0
- package/lib/runtime/streamHandler.js +49 -0
- package/lib/runtime/streamHandler.js.map +1 -0
- package/lib/runtime/tenantResolution.d.ts +4 -0
- package/lib/runtime/tenantResolution.d.ts.map +1 -0
- package/lib/runtime/tenantResolution.js +19 -0
- package/lib/runtime/tenantResolution.js.map +1 -0
- package/lib/runtime/uuid.d.ts +6 -0
- package/lib/runtime/uuid.d.ts.map +1 -0
- package/lib/runtime/uuid.js +27 -0
- package/lib/runtime/uuid.js.map +1 -0
- package/lib/runtime/view.d.ts +48 -0
- package/lib/runtime/view.d.ts.map +1 -0
- package/lib/runtime/view.js +111 -0
- package/lib/runtime/view.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import { ConfigSchemaDescriptorSchema } from "./config.js";
|
|
3
|
+
import { DeploymentModeSchema } from "./common.js";
|
|
4
|
+
const NonEmptyStringSchema = av.string().minLength(1);
|
|
5
|
+
export const AppRouteSchema = av.object({
|
|
6
|
+
id: NonEmptyStringSchema,
|
|
7
|
+
title: NonEmptyStringSchema,
|
|
8
|
+
path: NonEmptyStringSchema,
|
|
9
|
+
viewId: NonEmptyStringSchema,
|
|
10
|
+
serviceId: NonEmptyStringSchema,
|
|
11
|
+
enabled: av.bool().default(true)
|
|
12
|
+
}, { unknownKeys: "strip" });
|
|
13
|
+
export const TenantSchema = av.object({
|
|
14
|
+
id: NonEmptyStringSchema,
|
|
15
|
+
slug: NonEmptyStringSchema,
|
|
16
|
+
title: NonEmptyStringSchema,
|
|
17
|
+
branding: av.object({
|
|
18
|
+
logoUrl: av.optional(av.string().format("url")),
|
|
19
|
+
primaryColor: av.optional(NonEmptyStringSchema),
|
|
20
|
+
secondaryColor: av.optional(NonEmptyStringSchema)
|
|
21
|
+
}, { unknownKeys: "strip" }).default({})
|
|
22
|
+
}, { unknownKeys: "strip" });
|
|
23
|
+
export const FragmentAssignmentSchema = av.object({
|
|
24
|
+
serviceId: NonEmptyStringSchema,
|
|
25
|
+
fragmentId: NonEmptyStringSchema,
|
|
26
|
+
enabled: av.bool().default(true)
|
|
27
|
+
}, { unknownKeys: "strip" });
|
|
28
|
+
export const AppSchema = av.object({
|
|
29
|
+
id: NonEmptyStringSchema,
|
|
30
|
+
tenantId: NonEmptyStringSchema,
|
|
31
|
+
slug: NonEmptyStringSchema,
|
|
32
|
+
hostname: NonEmptyStringSchema,
|
|
33
|
+
title: NonEmptyStringSchema,
|
|
34
|
+
themeId: NonEmptyStringSchema,
|
|
35
|
+
routes: av.array(AppRouteSchema).default([]),
|
|
36
|
+
fragments: av.record(av.array(FragmentAssignmentSchema)).default({})
|
|
37
|
+
}, { unknownKeys: "strip" });
|
|
38
|
+
export const BindingTrustSchema = av.object({
|
|
39
|
+
credentialId: NonEmptyStringSchema,
|
|
40
|
+
issuer: NonEmptyStringSchema,
|
|
41
|
+
audience: NonEmptyStringSchema,
|
|
42
|
+
scopes: av.array(NonEmptyStringSchema).default([]),
|
|
43
|
+
rotationVersion: NonEmptyStringSchema
|
|
44
|
+
}, { unknownKeys: "strip" });
|
|
45
|
+
export const BindingRecordSchema = av.object({
|
|
46
|
+
bindingId: NonEmptyStringSchema,
|
|
47
|
+
serviceId: NonEmptyStringSchema,
|
|
48
|
+
tenantId: NonEmptyStringSchema,
|
|
49
|
+
appIds: av.array(NonEmptyStringSchema).default([]),
|
|
50
|
+
endpointBaseUrl: av.string().format("url"),
|
|
51
|
+
deploymentMode: DeploymentModeSchema,
|
|
52
|
+
enabled: av.bool().default(true),
|
|
53
|
+
importedManifestVersion: NonEmptyStringSchema,
|
|
54
|
+
lastSyncAtIso: av.optional(av.string().format("date-time")),
|
|
55
|
+
trust: BindingTrustSchema
|
|
56
|
+
}, { unknownKeys: "strip" });
|
|
57
|
+
export const ServiceCatalogEntrySchema = av.object({
|
|
58
|
+
serviceId: NonEmptyStringSchema,
|
|
59
|
+
title: NonEmptyStringSchema,
|
|
60
|
+
description: NonEmptyStringSchema,
|
|
61
|
+
category: av.enum_(["utility", "integration", "theme", "auth", "service"]),
|
|
62
|
+
manifestUrl: av.string().format("url"),
|
|
63
|
+
defaultEndpointBaseUrl: av.string().format("url"),
|
|
64
|
+
deploymentModes: av.array(DeploymentModeSchema).minItems(1),
|
|
65
|
+
tenantConfigSchemas: av.array(ConfigSchemaDescriptorSchema).default([]),
|
|
66
|
+
appConfigSchemas: av.array(ConfigSchemaDescriptorSchema).default([]),
|
|
67
|
+
hostedByBetterPortal: av.bool().default(false)
|
|
68
|
+
}, { unknownKeys: "strip" });
|
|
69
|
+
//# sourceMappingURL=binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/contracts/binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import type { Infer } from "anyvali";
|
|
3
|
+
export declare const HttpMethodSchema: av.EnumSchema<readonly ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]>;
|
|
4
|
+
export type HttpMethod = Infer<typeof HttpMethodSchema>;
|
|
5
|
+
export declare const RenderModeSchema: av.EnumSchema<readonly ["page", "fragment", "embed"]>;
|
|
6
|
+
export type RenderMode = Infer<typeof RenderModeSchema>;
|
|
7
|
+
export declare const PluginCategorySchema: av.EnumSchema<readonly ["framework", "auth", "theme", "service", "utility", "integration"]>;
|
|
8
|
+
export type PluginCategory = Infer<typeof PluginCategorySchema>;
|
|
9
|
+
export declare const UuidV7Schema: av.StringSchema;
|
|
10
|
+
export type UuidV7 = Infer<typeof UuidV7Schema>;
|
|
11
|
+
export declare const PluginIdSchema: av.StringSchema;
|
|
12
|
+
export type PluginId = Infer<typeof PluginIdSchema>;
|
|
13
|
+
export declare const DeploymentModeSchema: av.EnumSchema<readonly ["bp-hosted", "customer-hosted", "third-party-saas", "self-hosted", "saas-managed"]>;
|
|
14
|
+
export type DeploymentMode = Infer<typeof DeploymentModeSchema>;
|
|
15
|
+
export declare const ConfigScopeSchema: av.EnumSchema<readonly ["tenant", "app"]>;
|
|
16
|
+
export type ConfigScope = Infer<typeof ConfigScopeSchema>;
|
|
17
|
+
export declare const ConfigVisibilitySchema: av.EnumSchema<readonly ["public", "protected", "secret"]>;
|
|
18
|
+
export type ConfigVisibility = Infer<typeof ConfigVisibilitySchema>;
|
|
19
|
+
export declare const ConfigOwnershipSchema: av.EnumSchema<readonly ["bp", "plugin", "mixed"]>;
|
|
20
|
+
export type ConfigOwnership = Infer<typeof ConfigOwnershipSchema>;
|
|
21
|
+
export declare const IdentityRealmSchema: av.EnumSchema<readonly ["runtime", "control-plane"]>;
|
|
22
|
+
export type IdentityRealm = Infer<typeof IdentityRealmSchema>;
|
|
23
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/contracts/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,eAAO,MAAM,gBAAgB,8EAA0E,CAAC;AACxG,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAExD,eAAO,MAAM,gBAAgB,uDAAmD,CAAC;AACjF,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAExD,eAAO,MAAM,oBAAoB,6FAAyF,CAAC;AAC3H,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEhE,eAAO,MAAM,YAAY,iBAA+F,CAAC;AACzH,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAEhD,eAAO,MAAM,cAAc,iBAA4D,CAAC;AACxF,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEpD,eAAO,MAAM,oBAAoB,6GAMtB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEhE,eAAO,MAAM,iBAAiB,2CAAuC,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE1D,eAAO,MAAM,sBAAsB,2DAAuD,CAAC;AAC3F,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEpE,eAAO,MAAM,qBAAqB,mDAA+C,CAAC;AAClF,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAElE,eAAO,MAAM,mBAAmB,sDAAkD,CAAC;AACnF,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
export const HttpMethodSchema = av.enum_(["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]);
|
|
3
|
+
export const RenderModeSchema = av.enum_(["page", "fragment", "embed"]);
|
|
4
|
+
export const PluginCategorySchema = av.enum_(["framework", "auth", "theme", "service", "utility", "integration"]);
|
|
5
|
+
export const UuidV7Schema = av.string().pattern("^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$");
|
|
6
|
+
export const PluginIdSchema = av.string().pattern("^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$");
|
|
7
|
+
export const DeploymentModeSchema = av.enum_([
|
|
8
|
+
"bp-hosted",
|
|
9
|
+
"customer-hosted",
|
|
10
|
+
"third-party-saas",
|
|
11
|
+
"self-hosted",
|
|
12
|
+
"saas-managed"
|
|
13
|
+
]);
|
|
14
|
+
export const ConfigScopeSchema = av.enum_(["tenant", "app"]);
|
|
15
|
+
export const ConfigVisibilitySchema = av.enum_(["public", "protected", "secret"]);
|
|
16
|
+
export const ConfigOwnershipSchema = av.enum_(["bp", "plugin", "mixed"]);
|
|
17
|
+
export const IdentityRealmSchema = av.enum_(["runtime", "control-plane"]);
|
|
18
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/contracts/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAG9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC,CAAC;AAGxG,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAU,CAAC,CAAC;AAGjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAU,CAAC,CAAC;AAG3H,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,uEAAuE,CAAC,CAAC;AAGzH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;AAGxF,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC,KAAK,CAAC;IAC3C,WAAW;IACX,iBAAiB;IACjB,kBAAkB;IAClB,aAAa;IACb,cAAc;CACN,CAAC,CAAC;AAGZ,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAU,CAAC,CAAC;AAGtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC,CAAC;AAG3F,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC,CAAC;AAGlF,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,eAAe,CAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import type { Infer } from "anyvali";
|
|
3
|
+
export declare const ConfigFieldGroupDescriptorSchema: av.ObjectSchema<{
|
|
4
|
+
id: av.StringSchema;
|
|
5
|
+
title: av.StringSchema;
|
|
6
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
7
|
+
order: av.OptionalSchema<av.IntSchema>;
|
|
8
|
+
optional: av.OptionalSchema<av.BoolSchema>;
|
|
9
|
+
}>;
|
|
10
|
+
export type ConfigFieldGroupDescriptor = Infer<typeof ConfigFieldGroupDescriptorSchema>;
|
|
11
|
+
export declare const ConfigFieldUiDescriptorSchema: av.ObjectSchema<{
|
|
12
|
+
control: av.OptionalSchema<av.EnumSchema<readonly ["text", "textarea", "password", "number", "checkbox", "select", "multiselect", "color", "date", "time", "datetime-local", "url", "email"]>>;
|
|
13
|
+
placeholder: av.OptionalSchema<av.StringSchema>;
|
|
14
|
+
options: av.OptionalSchema<av.ArraySchema<av.ObjectSchema<{
|
|
15
|
+
value: av.StringSchema;
|
|
16
|
+
label: av.StringSchema;
|
|
17
|
+
}>>>;
|
|
18
|
+
optionsSource: av.OptionalSchema<av.EnumSchema<readonly ["app.routes"]>>;
|
|
19
|
+
min: av.OptionalSchema<av.UnionSchema<[av.NumberSchema, av.StringSchema]>>;
|
|
20
|
+
max: av.OptionalSchema<av.UnionSchema<[av.NumberSchema, av.StringSchema]>>;
|
|
21
|
+
step: av.OptionalSchema<av.NumberSchema>;
|
|
22
|
+
rows: av.OptionalSchema<av.IntSchema>;
|
|
23
|
+
}>;
|
|
24
|
+
export type ConfigFieldUiDescriptor = Infer<typeof ConfigFieldUiDescriptorSchema>;
|
|
25
|
+
export declare const ConfigFieldDescriptorSchema: av.ObjectSchema<{
|
|
26
|
+
key: av.StringSchema;
|
|
27
|
+
title: av.StringSchema;
|
|
28
|
+
description: av.StringSchema;
|
|
29
|
+
scope: av.EnumSchema<readonly ["tenant", "app"]>;
|
|
30
|
+
visibility: av.EnumSchema<readonly ["public", "protected", "secret"]>;
|
|
31
|
+
ownership: av.EnumSchema<readonly ["bp", "plugin", "mixed"]>;
|
|
32
|
+
sourceOfTruth: av.EnumSchema<readonly ["bp", "plugin", "external"]>;
|
|
33
|
+
groupId: av.OptionalSchema<av.StringSchema>;
|
|
34
|
+
order: av.OptionalSchema<av.IntSchema>;
|
|
35
|
+
defaultValue: av.OptionalSchema<av.BaseSchema<unknown, import("./json.js").JsonValue>>;
|
|
36
|
+
ui: av.OptionalSchema<av.ObjectSchema<{
|
|
37
|
+
control: av.OptionalSchema<av.EnumSchema<readonly ["text", "textarea", "password", "number", "checkbox", "select", "multiselect", "color", "date", "time", "datetime-local", "url", "email"]>>;
|
|
38
|
+
placeholder: av.OptionalSchema<av.StringSchema>;
|
|
39
|
+
options: av.OptionalSchema<av.ArraySchema<av.ObjectSchema<{
|
|
40
|
+
value: av.StringSchema;
|
|
41
|
+
label: av.StringSchema;
|
|
42
|
+
}>>>;
|
|
43
|
+
optionsSource: av.OptionalSchema<av.EnumSchema<readonly ["app.routes"]>>;
|
|
44
|
+
min: av.OptionalSchema<av.UnionSchema<[av.NumberSchema, av.StringSchema]>>;
|
|
45
|
+
max: av.OptionalSchema<av.UnionSchema<[av.NumberSchema, av.StringSchema]>>;
|
|
46
|
+
step: av.OptionalSchema<av.NumberSchema>;
|
|
47
|
+
rows: av.OptionalSchema<av.IntSchema>;
|
|
48
|
+
}>>;
|
|
49
|
+
required: av.BoolSchema;
|
|
50
|
+
}>;
|
|
51
|
+
export type ConfigFieldDescriptor = Infer<typeof ConfigFieldDescriptorSchema>;
|
|
52
|
+
export declare const ConfigSchemaDescriptorSchema: av.ObjectSchema<{
|
|
53
|
+
id: av.StringSchema;
|
|
54
|
+
title: av.StringSchema;
|
|
55
|
+
description: av.StringSchema;
|
|
56
|
+
scope: av.EnumSchema<readonly ["tenant", "app"]>;
|
|
57
|
+
jsonSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
58
|
+
groups: av.OptionalSchema<av.ArraySchema<av.ObjectSchema<{
|
|
59
|
+
id: av.StringSchema;
|
|
60
|
+
title: av.StringSchema;
|
|
61
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
62
|
+
order: av.OptionalSchema<av.IntSchema>;
|
|
63
|
+
optional: av.OptionalSchema<av.BoolSchema>;
|
|
64
|
+
}>>>;
|
|
65
|
+
fields: av.ArraySchema<av.ObjectSchema<{
|
|
66
|
+
key: av.StringSchema;
|
|
67
|
+
title: av.StringSchema;
|
|
68
|
+
description: av.StringSchema;
|
|
69
|
+
scope: av.EnumSchema<readonly ["tenant", "app"]>;
|
|
70
|
+
visibility: av.EnumSchema<readonly ["public", "protected", "secret"]>;
|
|
71
|
+
ownership: av.EnumSchema<readonly ["bp", "plugin", "mixed"]>;
|
|
72
|
+
sourceOfTruth: av.EnumSchema<readonly ["bp", "plugin", "external"]>;
|
|
73
|
+
groupId: av.OptionalSchema<av.StringSchema>;
|
|
74
|
+
order: av.OptionalSchema<av.IntSchema>;
|
|
75
|
+
defaultValue: av.OptionalSchema<av.BaseSchema<unknown, import("./json.js").JsonValue>>;
|
|
76
|
+
ui: av.OptionalSchema<av.ObjectSchema<{
|
|
77
|
+
control: av.OptionalSchema<av.EnumSchema<readonly ["text", "textarea", "password", "number", "checkbox", "select", "multiselect", "color", "date", "time", "datetime-local", "url", "email"]>>;
|
|
78
|
+
placeholder: av.OptionalSchema<av.StringSchema>;
|
|
79
|
+
options: av.OptionalSchema<av.ArraySchema<av.ObjectSchema<{
|
|
80
|
+
value: av.StringSchema;
|
|
81
|
+
label: av.StringSchema;
|
|
82
|
+
}>>>;
|
|
83
|
+
optionsSource: av.OptionalSchema<av.EnumSchema<readonly ["app.routes"]>>;
|
|
84
|
+
min: av.OptionalSchema<av.UnionSchema<[av.NumberSchema, av.StringSchema]>>;
|
|
85
|
+
max: av.OptionalSchema<av.UnionSchema<[av.NumberSchema, av.StringSchema]>>;
|
|
86
|
+
step: av.OptionalSchema<av.NumberSchema>;
|
|
87
|
+
rows: av.OptionalSchema<av.IntSchema>;
|
|
88
|
+
}>>;
|
|
89
|
+
required: av.BoolSchema;
|
|
90
|
+
}>>;
|
|
91
|
+
}>;
|
|
92
|
+
export type ConfigSchemaDescriptor = Infer<typeof ConfigSchemaDescriptorSchema>;
|
|
93
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/contracts/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAMrC,eAAO,MAAM,gCAAgC;;;;;;EAMjB,CAAC;AAC7B,MAAM,MAAM,0BAA0B,GAAG,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAExF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;EA0Bd,CAAC;AAC7B,MAAM,MAAM,uBAAuB,GAAG,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAElF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;EAaZ,CAAC;AAC7B,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAE9E,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQb,CAAC;AAC7B,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import { ConfigOwnershipSchema, ConfigScopeSchema, ConfigVisibilitySchema } from "./common.js";
|
|
3
|
+
import { JsonObjectSchema, JsonValueSchema } from "./json.js";
|
|
4
|
+
const NonEmptyStringSchema = av.string().minLength(1);
|
|
5
|
+
export const ConfigFieldGroupDescriptorSchema = av.object({
|
|
6
|
+
id: NonEmptyStringSchema,
|
|
7
|
+
title: NonEmptyStringSchema,
|
|
8
|
+
description: av.optional(av.string()),
|
|
9
|
+
order: av.optional(av.int()),
|
|
10
|
+
optional: av.optional(av.bool())
|
|
11
|
+
}, { unknownKeys: "strip" });
|
|
12
|
+
export const ConfigFieldUiDescriptorSchema = av.object({
|
|
13
|
+
control: av.optional(av.enum_([
|
|
14
|
+
"text",
|
|
15
|
+
"textarea",
|
|
16
|
+
"password",
|
|
17
|
+
"number",
|
|
18
|
+
"checkbox",
|
|
19
|
+
"select",
|
|
20
|
+
"multiselect",
|
|
21
|
+
"color",
|
|
22
|
+
"date",
|
|
23
|
+
"time",
|
|
24
|
+
"datetime-local",
|
|
25
|
+
"url",
|
|
26
|
+
"email"
|
|
27
|
+
])),
|
|
28
|
+
placeholder: av.optional(av.string()),
|
|
29
|
+
options: av.optional(av.array(av.object({
|
|
30
|
+
value: NonEmptyStringSchema,
|
|
31
|
+
label: NonEmptyStringSchema
|
|
32
|
+
}, { unknownKeys: "strip" }))),
|
|
33
|
+
optionsSource: av.optional(av.enum_(["app.routes"])),
|
|
34
|
+
min: av.optional(av.union([av.number(), av.string()])),
|
|
35
|
+
max: av.optional(av.union([av.number(), av.string()])),
|
|
36
|
+
step: av.optional(av.number()),
|
|
37
|
+
rows: av.optional(av.int().min(1))
|
|
38
|
+
}, { unknownKeys: "strip" });
|
|
39
|
+
export const ConfigFieldDescriptorSchema = av.object({
|
|
40
|
+
key: NonEmptyStringSchema,
|
|
41
|
+
title: NonEmptyStringSchema,
|
|
42
|
+
description: NonEmptyStringSchema,
|
|
43
|
+
scope: ConfigScopeSchema,
|
|
44
|
+
visibility: ConfigVisibilitySchema,
|
|
45
|
+
ownership: ConfigOwnershipSchema,
|
|
46
|
+
sourceOfTruth: av.enum_(["bp", "plugin", "external"]),
|
|
47
|
+
groupId: av.optional(NonEmptyStringSchema),
|
|
48
|
+
order: av.optional(av.int()),
|
|
49
|
+
defaultValue: av.optional(JsonValueSchema),
|
|
50
|
+
ui: av.optional(ConfigFieldUiDescriptorSchema),
|
|
51
|
+
required: av.bool().default(false)
|
|
52
|
+
}, { unknownKeys: "strip" });
|
|
53
|
+
export const ConfigSchemaDescriptorSchema = av.object({
|
|
54
|
+
id: NonEmptyStringSchema,
|
|
55
|
+
title: NonEmptyStringSchema,
|
|
56
|
+
description: NonEmptyStringSchema,
|
|
57
|
+
scope: ConfigScopeSchema,
|
|
58
|
+
jsonSchema: JsonObjectSchema,
|
|
59
|
+
groups: av.optional(av.array(ConfigFieldGroupDescriptorSchema)),
|
|
60
|
+
fields: av.array(ConfigFieldDescriptorSchema).default([])
|
|
61
|
+
}, { unknownKeys: "strip" });
|
|
62
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/contracts/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { BetterPortalApp, BetterPortalConfig, BetterPortalTenant, TenantServiceRegistration, PlatformService, SharedServiceDefinition } from "./platformConfig.js";
|
|
2
|
+
export interface ScopedServiceConfig {
|
|
3
|
+
readonly managementOrigins: ReadonlyArray<string>;
|
|
4
|
+
readonly tenants: ReadonlyArray<ScopedTenant>;
|
|
5
|
+
/** Apps whose service config may be managed for this service. This can be broader than runtime apps. */
|
|
6
|
+
readonly configApps?: ReadonlyArray<ScopedConfigApp>;
|
|
7
|
+
readonly apps: ReadonlyArray<ScopedApp>;
|
|
8
|
+
}
|
|
9
|
+
export interface ScopedTenant {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly slug: string;
|
|
12
|
+
readonly title: string;
|
|
13
|
+
readonly active: boolean;
|
|
14
|
+
readonly branding: BetterPortalTenant["branding"];
|
|
15
|
+
/** Service registrations needed by themes/services to resolve route URLs. Secrets redacted. */
|
|
16
|
+
readonly services: ReadonlyArray<ScopedTenantService>;
|
|
17
|
+
readonly activatedPlatformServices: ReadonlyArray<string>;
|
|
18
|
+
}
|
|
19
|
+
export type ScopedTenantService = Omit<TenantServiceRegistration, "apiKeyHash"> & {
|
|
20
|
+
readonly source?: "tenant" | "platform" | "shared";
|
|
21
|
+
readonly sharedServiceId?: string;
|
|
22
|
+
readonly baseUrl?: string;
|
|
23
|
+
readonly logoUrl?: string;
|
|
24
|
+
readonly category?: string;
|
|
25
|
+
readonly tags?: ReadonlyArray<string>;
|
|
26
|
+
};
|
|
27
|
+
export interface ScopedApp {
|
|
28
|
+
readonly id: string;
|
|
29
|
+
readonly tenantId: string;
|
|
30
|
+
readonly slug: string;
|
|
31
|
+
readonly title: string;
|
|
32
|
+
readonly hostnames: ReadonlyArray<string>;
|
|
33
|
+
readonly originOverrides: ReadonlyArray<string>;
|
|
34
|
+
readonly refererOverrides: ReadonlyArray<string>;
|
|
35
|
+
readonly themeId: string;
|
|
36
|
+
readonly shell?: BetterPortalApp["shell"];
|
|
37
|
+
readonly themeConfig: BetterPortalApp["themeConfig"];
|
|
38
|
+
readonly defaultRoute: string;
|
|
39
|
+
readonly routes: ReadonlyArray<BetterPortalApp["routes"][number]>;
|
|
40
|
+
readonly menu: BetterPortalApp["menu"];
|
|
41
|
+
readonly slots: BetterPortalApp["slots"];
|
|
42
|
+
readonly fragments: BetterPortalApp["fragments"];
|
|
43
|
+
readonly auth?: BetterPortalApp["auth"];
|
|
44
|
+
}
|
|
45
|
+
export interface ScopedConfigApp {
|
|
46
|
+
readonly id: string;
|
|
47
|
+
readonly tenantId: string;
|
|
48
|
+
readonly title: string;
|
|
49
|
+
}
|
|
50
|
+
export interface PlatformConfigStore {
|
|
51
|
+
loadConfig(): Promise<BetterPortalConfig>;
|
|
52
|
+
saveConfig(config: BetterPortalConfig): Promise<void>;
|
|
53
|
+
validateApiKey(apiKey: string): Promise<{
|
|
54
|
+
scope: "tenant" | "platform";
|
|
55
|
+
serviceId: string | undefined;
|
|
56
|
+
tenantId?: string;
|
|
57
|
+
service: TenantServiceRegistration | PlatformService | SharedServiceDefinition;
|
|
58
|
+
} | null>;
|
|
59
|
+
getScopedConfig(serviceId: string, scope: "tenant" | "platform", tenantId?: string): Promise<ScopedServiceConfig>;
|
|
60
|
+
invalidate(): void;
|
|
61
|
+
onChange(listener: () => void): () => void;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=controlPlane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlPlane.d.ts","sourceRoot":"","sources":["../../src/contracts/controlPlane.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlPlane.js","sourceRoot":"","sources":["../../src/contracts/controlPlane.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
3
|
+
export type JsonValue = JsonPrimitive | JsonObject | JsonValue[];
|
|
4
|
+
export interface JsonObject {
|
|
5
|
+
[key: string]: JsonValue;
|
|
6
|
+
}
|
|
7
|
+
export declare const JsonValueSchema: av.BaseSchema<unknown, JsonValue>;
|
|
8
|
+
export declare const JsonObjectSchema: av.BaseSchema<unknown, JsonObject>;
|
|
9
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/contracts/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,EAAE,CAAC;AACjE,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAID,eAAO,MAAM,eAAe,EAAe,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC7E,eAAO,MAAM,gBAAgB,EAA0B,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
// AnyVali does not currently expose a convenient recursive builder for JSON values.
|
|
3
|
+
// Keep the runtime contract JSON-shaped while retaining the explicit TS types above.
|
|
4
|
+
export const JsonValueSchema = av.any();
|
|
5
|
+
export const JsonObjectSchema = av.record(av.any());
|
|
6
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/contracts/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAQ9B,oFAAoF;AACpF,qFAAqF;AACrF,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC,GAAG,EAAuC,CAAC;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAuC,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import type { Infer } from "anyvali";
|
|
3
|
+
export declare const AdminApiDescriptorSchema: av.ObjectSchema<{
|
|
4
|
+
id: av.StringSchema;
|
|
5
|
+
title: av.StringSchema;
|
|
6
|
+
description: av.StringSchema;
|
|
7
|
+
path: av.StringSchema;
|
|
8
|
+
methods: av.ArraySchema<av.EnumSchema<readonly ["GET", "POST", "PUT", "PATCH", "DELETE"]>>;
|
|
9
|
+
supportsCustomUi: av.BoolSchema;
|
|
10
|
+
}>;
|
|
11
|
+
export type AdminApiDescriptor = Infer<typeof AdminApiDescriptorSchema>;
|
|
12
|
+
export declare const WebhookEventDescriptorSchema: av.ObjectSchema<{
|
|
13
|
+
id: av.StringSchema;
|
|
14
|
+
title: av.StringSchema;
|
|
15
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
16
|
+
payloadSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
17
|
+
}>;
|
|
18
|
+
export type WebhookEventDescriptor = Infer<typeof WebhookEventDescriptorSchema>;
|
|
19
|
+
export declare const PluginManifestSchema: av.ObjectSchema<{
|
|
20
|
+
pluginId: av.StringSchema;
|
|
21
|
+
title: av.StringSchema;
|
|
22
|
+
description: av.StringSchema;
|
|
23
|
+
version: av.StringSchema;
|
|
24
|
+
category: av.EnumSchema<readonly ["framework", "auth", "theme", "service", "utility", "integration"]>;
|
|
25
|
+
deploymentModes: av.ArraySchema<av.EnumSchema<readonly ["bp-hosted", "customer-hosted", "third-party-saas", "self-hosted", "saas-managed"]>>;
|
|
26
|
+
capabilities: av.ArraySchema<av.StringSchema>;
|
|
27
|
+
supportedThemes: av.ArraySchema<av.StringSchema>;
|
|
28
|
+
supportedRenderModes: av.ArraySchema<av.EnumSchema<readonly ["page", "fragment", "embed"]>>;
|
|
29
|
+
views: av.ArraySchema<av.ObjectSchema<{
|
|
30
|
+
viewId: av.StringSchema;
|
|
31
|
+
title: av.StringSchema;
|
|
32
|
+
description: av.StringSchema;
|
|
33
|
+
path: av.StringSchema;
|
|
34
|
+
methods: av.ArraySchema<av.EnumSchema<readonly ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]>>;
|
|
35
|
+
paramsSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
36
|
+
querySchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
37
|
+
headersSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
38
|
+
bodySchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
39
|
+
jsonResponseSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
40
|
+
metadataResponseSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
41
|
+
renderable: av.BoolSchema;
|
|
42
|
+
raw: av.OptionalSchema<av.BoolSchema>;
|
|
43
|
+
streaming: av.OptionalSchema<av.ObjectSchema<{
|
|
44
|
+
itemSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
45
|
+
summarySchema: av.OptionalSchema<av.BaseSchema<unknown, import("./json.js").JsonObject>>;
|
|
46
|
+
}>>;
|
|
47
|
+
html: av.ObjectSchema<{
|
|
48
|
+
themeRenderers: av.RecordSchema<av.ObjectSchema<{
|
|
49
|
+
defaultRenderer: av.StringSchema;
|
|
50
|
+
renderModes: av.ArraySchema<av.EnumSchema<readonly ["page", "fragment", "embed"]>>;
|
|
51
|
+
slots: av.ArraySchema<av.StringSchema>;
|
|
52
|
+
renderers: av.ArraySchema<av.ObjectSchema<{
|
|
53
|
+
id: av.StringSchema;
|
|
54
|
+
title: av.StringSchema;
|
|
55
|
+
slotId: av.StringSchema;
|
|
56
|
+
renderModes: av.ArraySchema<av.EnumSchema<readonly ["page", "fragment", "embed"]>>;
|
|
57
|
+
}>>;
|
|
58
|
+
}>>;
|
|
59
|
+
}>;
|
|
60
|
+
auth: av.ObjectSchema<{
|
|
61
|
+
required: av.BoolSchema;
|
|
62
|
+
permissions: av.ArraySchema<av.ObjectSchema<{
|
|
63
|
+
serviceId: av.StringSchema;
|
|
64
|
+
viewId: av.StringSchema;
|
|
65
|
+
permissions: av.ArraySchema<av.EnumSchema<readonly ["read", "create", "update", "delete"]>>;
|
|
66
|
+
}>>;
|
|
67
|
+
}>;
|
|
68
|
+
role: av.OptionalSchema<av.StringSchema>;
|
|
69
|
+
dependencies: av.ArraySchema<av.StringSchema>;
|
|
70
|
+
chrome: av.OptionalSchema<av.IntersectionSchema<[av.ObjectSchema<{
|
|
71
|
+
hideMenu: av.OptionalSchema<av.BoolSchema>;
|
|
72
|
+
hideHeader: av.OptionalSchema<av.BoolSchema>;
|
|
73
|
+
hideFooter: av.OptionalSchema<av.BoolSchema>;
|
|
74
|
+
fullScreen: av.OptionalSchema<av.BoolSchema>;
|
|
75
|
+
}>, av.RecordSchema<av.UnionSchema<[av.StringSchema, av.NumberSchema, av.BoolSchema]>>]>>;
|
|
76
|
+
demoScenarios: av.ArraySchema<av.ObjectSchema<{
|
|
77
|
+
id: av.StringSchema;
|
|
78
|
+
title: av.StringSchema;
|
|
79
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
80
|
+
match: av.OptionalSchema<av.ObjectSchema<{
|
|
81
|
+
query: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
82
|
+
params: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
83
|
+
headers: av.OptionalSchema<av.RecordSchema<av.StringSchema>>;
|
|
84
|
+
request: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
85
|
+
}>>;
|
|
86
|
+
response: av.BaseSchema<unknown, import("./json.js").JsonValue>;
|
|
87
|
+
}>>;
|
|
88
|
+
cacheHints: av.ObjectSchema<{
|
|
89
|
+
ttlSeconds: av.IntSchema;
|
|
90
|
+
varyBy: av.ArraySchema<av.StringSchema>;
|
|
91
|
+
}>;
|
|
92
|
+
}>>;
|
|
93
|
+
configSchemas: av.ArraySchema<av.ObjectSchema<{
|
|
94
|
+
id: av.StringSchema;
|
|
95
|
+
title: av.StringSchema;
|
|
96
|
+
description: av.StringSchema;
|
|
97
|
+
scope: av.EnumSchema<readonly ["tenant", "app"]>;
|
|
98
|
+
jsonSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
99
|
+
groups: av.OptionalSchema<av.ArraySchema<av.ObjectSchema<{
|
|
100
|
+
id: av.StringSchema;
|
|
101
|
+
title: av.StringSchema;
|
|
102
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
103
|
+
order: av.OptionalSchema<av.IntSchema>;
|
|
104
|
+
optional: av.OptionalSchema<av.BoolSchema>;
|
|
105
|
+
}>>>;
|
|
106
|
+
fields: av.ArraySchema<av.ObjectSchema<{
|
|
107
|
+
key: av.StringSchema;
|
|
108
|
+
title: av.StringSchema;
|
|
109
|
+
description: av.StringSchema;
|
|
110
|
+
scope: av.EnumSchema<readonly ["tenant", "app"]>;
|
|
111
|
+
visibility: av.EnumSchema<readonly ["public", "protected", "secret"]>;
|
|
112
|
+
ownership: av.EnumSchema<readonly ["bp", "plugin", "mixed"]>;
|
|
113
|
+
sourceOfTruth: av.EnumSchema<readonly ["bp", "plugin", "external"]>;
|
|
114
|
+
groupId: av.OptionalSchema<av.StringSchema>;
|
|
115
|
+
order: av.OptionalSchema<av.IntSchema>;
|
|
116
|
+
defaultValue: av.OptionalSchema<av.BaseSchema<unknown, import("./json.js").JsonValue>>;
|
|
117
|
+
ui: av.OptionalSchema<av.ObjectSchema<{
|
|
118
|
+
control: av.OptionalSchema<av.EnumSchema<readonly ["text", "textarea", "password", "number", "checkbox", "select", "multiselect", "color", "date", "time", "datetime-local", "url", "email"]>>;
|
|
119
|
+
placeholder: av.OptionalSchema<av.StringSchema>;
|
|
120
|
+
options: av.OptionalSchema<av.ArraySchema<av.ObjectSchema<{
|
|
121
|
+
value: av.StringSchema;
|
|
122
|
+
label: av.StringSchema;
|
|
123
|
+
}>>>;
|
|
124
|
+
optionsSource: av.OptionalSchema<av.EnumSchema<readonly ["app.routes"]>>;
|
|
125
|
+
min: av.OptionalSchema<av.UnionSchema<[av.NumberSchema, av.StringSchema]>>;
|
|
126
|
+
max: av.OptionalSchema<av.UnionSchema<[av.NumberSchema, av.StringSchema]>>;
|
|
127
|
+
step: av.OptionalSchema<av.NumberSchema>;
|
|
128
|
+
rows: av.OptionalSchema<av.IntSchema>;
|
|
129
|
+
}>>;
|
|
130
|
+
required: av.BoolSchema;
|
|
131
|
+
}>>;
|
|
132
|
+
}>>;
|
|
133
|
+
permissions: av.ArraySchema<av.ObjectSchema<{
|
|
134
|
+
id: av.StringSchema;
|
|
135
|
+
title: av.StringSchema;
|
|
136
|
+
description: av.StringSchema;
|
|
137
|
+
defaultRoles: av.ArraySchema<av.StringSchema>;
|
|
138
|
+
}>>;
|
|
139
|
+
adminApis: av.ArraySchema<av.ObjectSchema<{
|
|
140
|
+
id: av.StringSchema;
|
|
141
|
+
title: av.StringSchema;
|
|
142
|
+
description: av.StringSchema;
|
|
143
|
+
path: av.StringSchema;
|
|
144
|
+
methods: av.ArraySchema<av.EnumSchema<readonly ["GET", "POST", "PUT", "PATCH", "DELETE"]>>;
|
|
145
|
+
supportsCustomUi: av.BoolSchema;
|
|
146
|
+
}>>;
|
|
147
|
+
webhooks: av.ArraySchema<av.ObjectSchema<{
|
|
148
|
+
id: av.StringSchema;
|
|
149
|
+
title: av.StringSchema;
|
|
150
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
151
|
+
payloadSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
152
|
+
}>>;
|
|
153
|
+
cacheHints: av.ObjectSchema<{
|
|
154
|
+
metadataTtlSeconds: av.IntSchema;
|
|
155
|
+
}>;
|
|
156
|
+
}>;
|
|
157
|
+
export type PluginManifest = Infer<typeof PluginManifestSchema>;
|
|
158
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/contracts/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAQrC,eAAO,MAAM,wBAAwB;;;;;;;EAOT,CAAC;AAC7B,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAExE,eAAO,MAAM,4BAA4B;;;;;EAKb,CAAC;AAC7B,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAEhF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBL,CAAC;AAC7B,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import { ConfigSchemaDescriptorSchema } from "./config.js";
|
|
3
|
+
import { DeploymentModeSchema, PluginCategorySchema, RenderModeSchema } from "./common.js";
|
|
4
|
+
import { JsonObjectSchema } from "./json.js";
|
|
5
|
+
import { ViewMetadataSchema, ViewPermissionDefinitionSchema } from "./view.js";
|
|
6
|
+
const AdminMethodSchema = av.enum_(["GET", "POST", "PUT", "PATCH", "DELETE"]);
|
|
7
|
+
export const AdminApiDescriptorSchema = av.object({
|
|
8
|
+
id: av.string().minLength(1),
|
|
9
|
+
title: av.string().minLength(1),
|
|
10
|
+
description: av.string().minLength(1),
|
|
11
|
+
path: av.string().minLength(1),
|
|
12
|
+
methods: av.array(AdminMethodSchema).minItems(1),
|
|
13
|
+
supportsCustomUi: av.bool().default(false)
|
|
14
|
+
}, { unknownKeys: "strip" });
|
|
15
|
+
export const WebhookEventDescriptorSchema = av.object({
|
|
16
|
+
id: av.string().minLength(1),
|
|
17
|
+
title: av.string().minLength(1),
|
|
18
|
+
description: av.optional(av.string()),
|
|
19
|
+
payloadSchema: JsonObjectSchema
|
|
20
|
+
}, { unknownKeys: "strip" });
|
|
21
|
+
export const PluginManifestSchema = av.object({
|
|
22
|
+
pluginId: av.string().minLength(1),
|
|
23
|
+
title: av.string().minLength(1),
|
|
24
|
+
description: av.string().minLength(1),
|
|
25
|
+
version: av.string().minLength(1),
|
|
26
|
+
category: PluginCategorySchema,
|
|
27
|
+
deploymentModes: av.array(DeploymentModeSchema).minItems(1),
|
|
28
|
+
capabilities: av.array(av.string().minLength(1)).default([]),
|
|
29
|
+
supportedThemes: av.array(av.string().minLength(1)).default([]),
|
|
30
|
+
supportedRenderModes: av.array(RenderModeSchema).default([]),
|
|
31
|
+
views: av.array(ViewMetadataSchema).default([]),
|
|
32
|
+
configSchemas: av.array(ConfigSchemaDescriptorSchema).default([]),
|
|
33
|
+
permissions: av.array(ViewPermissionDefinitionSchema).default([]),
|
|
34
|
+
adminApis: av.array(AdminApiDescriptorSchema).default([]),
|
|
35
|
+
webhooks: av.array(WebhookEventDescriptorSchema).default([]),
|
|
36
|
+
cacheHints: av.object({
|
|
37
|
+
metadataTtlSeconds: av.int().min(0).default(1800)
|
|
38
|
+
}, { unknownKeys: "strip" }).default({ metadataTtlSeconds: 1800 })
|
|
39
|
+
}, { unknownKeys: "strip" });
|
|
40
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/contracts/manifest.ts"],"names":[],"mappings":"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"}
|