@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,88 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import type { Infer } from "anyvali";
|
|
3
|
+
export declare const ServiceConfigActionSchema: av.EnumSchema<readonly ["schema.read", "config.read", "config.write"]>;
|
|
4
|
+
export type ServiceConfigAction = Infer<typeof ServiceConfigActionSchema>;
|
|
5
|
+
export declare const ServiceConfigManagementModeSchema: av.EnumSchema<readonly ["static", "bp-managed", "hybrid"]>;
|
|
6
|
+
export type ServiceConfigManagementMode = Infer<typeof ServiceConfigManagementModeSchema>;
|
|
7
|
+
export declare const ServiceConfigTicketClaimsSchema: av.ObjectSchema<{
|
|
8
|
+
iss: av.StringSchema;
|
|
9
|
+
aud: av.UnionSchema<[av.StringSchema, av.ArraySchema<av.StringSchema>]>;
|
|
10
|
+
sub: av.StringSchema;
|
|
11
|
+
exp: av.IntSchema;
|
|
12
|
+
iat: av.IntSchema;
|
|
13
|
+
jti: av.StringSchema;
|
|
14
|
+
realm: av.LiteralSchema<"control-plane">;
|
|
15
|
+
tenantId: av.StringSchema;
|
|
16
|
+
serviceId: av.StringSchema;
|
|
17
|
+
bindingId: av.OptionalSchema<av.StringSchema>;
|
|
18
|
+
actions: av.ArraySchema<av.EnumSchema<readonly ["schema.read", "config.read", "config.write"]>>;
|
|
19
|
+
}>;
|
|
20
|
+
export type ServiceConfigTicketClaims = Infer<typeof ServiceConfigTicketClaimsSchema>;
|
|
21
|
+
export declare const ServiceConfigStateSchema: av.ObjectSchema<{
|
|
22
|
+
tenant: av.RecordSchema<av.BaseSchema<unknown, import("./json.js").JsonValue>>;
|
|
23
|
+
app: av.RecordSchema<av.RecordSchema<av.BaseSchema<unknown, import("./json.js").JsonValue>>>;
|
|
24
|
+
}>;
|
|
25
|
+
export type ServiceConfigState = Infer<typeof ServiceConfigStateSchema>;
|
|
26
|
+
export declare const ServiceConfigWriteRequestSchema: av.ObjectSchema<{
|
|
27
|
+
tenantId: av.StringSchema;
|
|
28
|
+
appId: av.OptionalSchema<av.StringSchema>;
|
|
29
|
+
values: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
30
|
+
clearKeys: av.ArraySchema<av.StringSchema>;
|
|
31
|
+
}>;
|
|
32
|
+
export type ServiceConfigWriteRequest = Infer<typeof ServiceConfigWriteRequestSchema>;
|
|
33
|
+
export declare const ServiceConfigSchemaResponseSchema: av.ObjectSchema<{
|
|
34
|
+
serviceId: av.StringSchema;
|
|
35
|
+
mode: av.EnumSchema<readonly ["static", "bp-managed", "hybrid"]>;
|
|
36
|
+
configSchemas: av.ArraySchema<av.ObjectSchema<{
|
|
37
|
+
id: av.StringSchema;
|
|
38
|
+
title: av.StringSchema;
|
|
39
|
+
description: av.StringSchema;
|
|
40
|
+
scope: av.EnumSchema<readonly ["tenant", "app"]>;
|
|
41
|
+
jsonSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
42
|
+
groups: av.OptionalSchema<av.ArraySchema<av.ObjectSchema<{
|
|
43
|
+
id: av.StringSchema;
|
|
44
|
+
title: av.StringSchema;
|
|
45
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
46
|
+
order: av.OptionalSchema<av.IntSchema>;
|
|
47
|
+
optional: av.OptionalSchema<av.BoolSchema>;
|
|
48
|
+
}>>>;
|
|
49
|
+
fields: av.ArraySchema<av.ObjectSchema<{
|
|
50
|
+
key: av.StringSchema;
|
|
51
|
+
title: av.StringSchema;
|
|
52
|
+
description: av.StringSchema;
|
|
53
|
+
scope: av.EnumSchema<readonly ["tenant", "app"]>;
|
|
54
|
+
visibility: av.EnumSchema<readonly ["public", "protected", "secret"]>;
|
|
55
|
+
ownership: av.EnumSchema<readonly ["bp", "plugin", "mixed"]>;
|
|
56
|
+
sourceOfTruth: av.EnumSchema<readonly ["bp", "plugin", "external"]>;
|
|
57
|
+
groupId: av.OptionalSchema<av.StringSchema>;
|
|
58
|
+
order: av.OptionalSchema<av.IntSchema>;
|
|
59
|
+
defaultValue: av.OptionalSchema<av.BaseSchema<unknown, import("./json.js").JsonValue>>;
|
|
60
|
+
ui: av.OptionalSchema<av.ObjectSchema<{
|
|
61
|
+
control: av.OptionalSchema<av.EnumSchema<readonly ["text", "textarea", "password", "number", "checkbox", "select", "multiselect", "color", "date", "time", "datetime-local", "url", "email"]>>;
|
|
62
|
+
placeholder: av.OptionalSchema<av.StringSchema>;
|
|
63
|
+
options: av.OptionalSchema<av.ArraySchema<av.ObjectSchema<{
|
|
64
|
+
value: av.StringSchema;
|
|
65
|
+
label: av.StringSchema;
|
|
66
|
+
}>>>;
|
|
67
|
+
optionsSource: av.OptionalSchema<av.EnumSchema<readonly ["app.routes"]>>;
|
|
68
|
+
min: av.OptionalSchema<av.UnionSchema<[av.NumberSchema, av.StringSchema]>>;
|
|
69
|
+
max: av.OptionalSchema<av.UnionSchema<[av.NumberSchema, av.StringSchema]>>;
|
|
70
|
+
step: av.OptionalSchema<av.NumberSchema>;
|
|
71
|
+
rows: av.OptionalSchema<av.IntSchema>;
|
|
72
|
+
}>>;
|
|
73
|
+
required: av.BoolSchema;
|
|
74
|
+
}>>;
|
|
75
|
+
}>>;
|
|
76
|
+
supportsCustomUi: av.BoolSchema;
|
|
77
|
+
customUiPath: av.OptionalSchema<av.StringSchema>;
|
|
78
|
+
supportsWrite: av.BoolSchema;
|
|
79
|
+
}>;
|
|
80
|
+
export type ServiceConfigSchemaResponse = Infer<typeof ServiceConfigSchemaResponseSchema>;
|
|
81
|
+
export declare const ServiceConfigReadResponseSchema: av.ObjectSchema<{
|
|
82
|
+
serviceId: av.StringSchema;
|
|
83
|
+
tenantId: av.StringSchema;
|
|
84
|
+
appId: av.OptionalSchema<av.StringSchema>;
|
|
85
|
+
values: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
86
|
+
}>;
|
|
87
|
+
export type ServiceConfigReadResponse = Infer<typeof ServiceConfigReadResponseSchema>;
|
|
88
|
+
//# sourceMappingURL=serviceConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceConfig.d.ts","sourceRoot":"","sources":["../../src/contracts/serviceConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAOrC,eAAO,MAAM,yBAAyB,wEAAoE,CAAC;AAC3G,MAAM,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE1E,eAAO,MAAM,iCAAiC,4DAAwD,CAAC;AACvG,MAAM,MAAM,2BAA2B,GAAG,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE1F,eAAO,MAAM,+BAA+B;;;;;;;;;;;;EAYhB,CAAC;AAC7B,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAEtF,eAAO,MAAM,wBAAwB;;;EAGT,CAAC;AAC7B,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAExE,eAAO,MAAM,+BAA+B;;;;;EAKhB,CAAC;AAC7B,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAEtF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOlB,CAAC;AAC7B,MAAM,MAAM,2BAA2B,GAAG,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE1F,eAAO,MAAM,+BAA+B;;;;;EAKhB,CAAC;AAC7B,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import { ConfigSchemaDescriptorSchema } from "./config.js";
|
|
3
|
+
import { JsonObjectSchema, JsonValueSchema } from "./json.js";
|
|
4
|
+
const NonEmptyStringSchema = av.string().minLength(1);
|
|
5
|
+
const NonEmptyStringArraySchema = av.array(NonEmptyStringSchema).minItems(1);
|
|
6
|
+
export const ServiceConfigActionSchema = av.enum_(["schema.read", "config.read", "config.write"]);
|
|
7
|
+
export const ServiceConfigManagementModeSchema = av.enum_(["static", "bp-managed", "hybrid"]);
|
|
8
|
+
export const ServiceConfigTicketClaimsSchema = av.object({
|
|
9
|
+
iss: NonEmptyStringSchema,
|
|
10
|
+
aud: av.union([NonEmptyStringSchema, NonEmptyStringArraySchema]),
|
|
11
|
+
sub: NonEmptyStringSchema,
|
|
12
|
+
exp: av.int().min(1),
|
|
13
|
+
iat: av.int().min(0),
|
|
14
|
+
jti: NonEmptyStringSchema,
|
|
15
|
+
realm: av.literal("control-plane"),
|
|
16
|
+
tenantId: NonEmptyStringSchema,
|
|
17
|
+
serviceId: NonEmptyStringSchema,
|
|
18
|
+
bindingId: av.optional(NonEmptyStringSchema),
|
|
19
|
+
actions: av.array(ServiceConfigActionSchema).minItems(1)
|
|
20
|
+
}, { unknownKeys: "strip" });
|
|
21
|
+
export const ServiceConfigStateSchema = av.object({
|
|
22
|
+
tenant: av.record(JsonValueSchema).default({}),
|
|
23
|
+
app: av.record(av.record(JsonValueSchema)).default({})
|
|
24
|
+
}, { unknownKeys: "strip" });
|
|
25
|
+
export const ServiceConfigWriteRequestSchema = av.object({
|
|
26
|
+
tenantId: NonEmptyStringSchema,
|
|
27
|
+
appId: av.optional(NonEmptyStringSchema),
|
|
28
|
+
values: JsonObjectSchema,
|
|
29
|
+
clearKeys: av.array(NonEmptyStringSchema).default([])
|
|
30
|
+
}, { unknownKeys: "strip" });
|
|
31
|
+
export const ServiceConfigSchemaResponseSchema = av.object({
|
|
32
|
+
serviceId: NonEmptyStringSchema,
|
|
33
|
+
mode: ServiceConfigManagementModeSchema,
|
|
34
|
+
configSchemas: av.array(ConfigSchemaDescriptorSchema).default([]),
|
|
35
|
+
supportsCustomUi: av.bool().default(false),
|
|
36
|
+
customUiPath: av.optional(NonEmptyStringSchema),
|
|
37
|
+
supportsWrite: av.bool().default(false)
|
|
38
|
+
}, { unknownKeys: "strip" });
|
|
39
|
+
export const ServiceConfigReadResponseSchema = av.object({
|
|
40
|
+
serviceId: NonEmptyStringSchema,
|
|
41
|
+
tenantId: NonEmptyStringSchema,
|
|
42
|
+
appId: av.optional(NonEmptyStringSchema),
|
|
43
|
+
values: JsonObjectSchema
|
|
44
|
+
}, { unknownKeys: "strip" });
|
|
45
|
+
//# sourceMappingURL=serviceConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceConfig.js","sourceRoot":"","sources":["../../src/contracts/serviceConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import type { BaseSchema, Infer } from "anyvali";
|
|
3
|
+
import type { RouteHandlerContext } from "./route.js";
|
|
4
|
+
import type { HtmlRenderable } from "../runtime/view.js";
|
|
5
|
+
export declare const StreamErrorFrameSchema: av.ObjectSchema<{
|
|
6
|
+
kind: av.EnumSchema<readonly ["error"]>;
|
|
7
|
+
error: av.StringSchema;
|
|
8
|
+
message: av.StringSchema;
|
|
9
|
+
issues: av.OptionalSchema<av.ArraySchema<av.ObjectSchema<{
|
|
10
|
+
code: av.StringSchema;
|
|
11
|
+
path: av.OptionalSchema<av.StringSchema>;
|
|
12
|
+
message: av.StringSchema;
|
|
13
|
+
}>>>;
|
|
14
|
+
}>;
|
|
15
|
+
export type StreamErrorFrame = Infer<typeof StreamErrorFrameSchema>;
|
|
16
|
+
export declare const StreamEndFrameSchema: av.ObjectSchema<{
|
|
17
|
+
kind: av.EnumSchema<readonly ["end"]>;
|
|
18
|
+
count: av.IntSchema;
|
|
19
|
+
}>;
|
|
20
|
+
export type StreamEndFrame = Infer<typeof StreamEndFrameSchema>;
|
|
21
|
+
export interface StreamItemFrame<TItem = unknown> {
|
|
22
|
+
readonly kind: "item";
|
|
23
|
+
readonly data: TItem;
|
|
24
|
+
}
|
|
25
|
+
export interface StreamSummaryFrame<TSummary = unknown> {
|
|
26
|
+
readonly kind: "summary";
|
|
27
|
+
readonly data: TSummary;
|
|
28
|
+
}
|
|
29
|
+
export type StreamFrame<TItem = unknown, TSummary = unknown> = StreamItemFrame<TItem> | StreamSummaryFrame<TSummary> | StreamErrorFrame | StreamEndFrame;
|
|
30
|
+
/**
|
|
31
|
+
* Brand key identifying a stream handler in the registry's `handlers` map.
|
|
32
|
+
* Stream handlers are objects (not callables); the adapter detects the brand
|
|
33
|
+
* at request time and diverts to the streaming pipeline.
|
|
34
|
+
*/
|
|
35
|
+
export declare const BP_STREAM_HANDLER: unique symbol;
|
|
36
|
+
/**
|
|
37
|
+
* A streaming route handler. The generator yields validated-shape items and
|
|
38
|
+
* MAY return a summary value. The adapter (not the generator) drives frame
|
|
39
|
+
* encoding, per-frame validation, and representation negotiation.
|
|
40
|
+
*/
|
|
41
|
+
export interface BpStreamHandler<TItem = unknown, TSummary = unknown, TParams = Record<string, string>, TQuery = Record<string, unknown>, THeaders = Record<string, string>> {
|
|
42
|
+
readonly [BP_STREAM_HANDLER]: true;
|
|
43
|
+
readonly itemSchema: BaseSchema<unknown, unknown>;
|
|
44
|
+
readonly summarySchema?: BaseSchema<unknown, unknown>;
|
|
45
|
+
/**
|
|
46
|
+
* Derived buffered-JSON response schema: `{ items: array(itemSchema), summary? }`.
|
|
47
|
+
* Used as the route's `schemas.response` and the manifest's `jsonResponseSchema`
|
|
48
|
+
* so streaming views never hand-author a second response shape.
|
|
49
|
+
*/
|
|
50
|
+
readonly responseSchema: BaseSchema<unknown, unknown>;
|
|
51
|
+
run(ctx: RouteHandlerContext<TParams, TQuery, THeaders, Record<string, unknown>>): AsyncGenerator<TItem, TSummary | void, void>;
|
|
52
|
+
}
|
|
53
|
+
export declare function isStreamHandler(value: unknown): value is BpStreamHandler<any, any, any, any, any>;
|
|
54
|
+
/**
|
|
55
|
+
* Context passed to a streaming view's shell renderer.
|
|
56
|
+
* `sseConnectPath` is the relative SSE URL (path + original query string) the
|
|
57
|
+
* shell should wire via `hx-sse:connect` - the client rewriter absolutizes it.
|
|
58
|
+
*/
|
|
59
|
+
export interface StreamShellContext {
|
|
60
|
+
readonly sseConnectPath: string;
|
|
61
|
+
readonly params: Record<string, string>;
|
|
62
|
+
readonly query: Record<string, unknown>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Per-theme renderers for a streaming view, sourced from
|
|
66
|
+
* `_theme.<themeId>/index.stream.tsx` exports.
|
|
67
|
+
* Each function renders ONE frame; the buffered HTML page render uses the
|
|
68
|
+
* regular `index.tsx` page renderer over the derived `{ items, summary }` data.
|
|
69
|
+
*/
|
|
70
|
+
export interface StreamRendererSet {
|
|
71
|
+
readonly renderShell: (ctx: StreamShellContext) => HtmlRenderable;
|
|
72
|
+
readonly renderItem: (item: any) => HtmlRenderable;
|
|
73
|
+
readonly renderSummary?: (summary: any) => HtmlRenderable;
|
|
74
|
+
readonly renderError?: (error: StreamErrorFrame) => HtmlRenderable;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=streaming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../src/contracts/streaming.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
// -- Frame envelope (spec/streaming.md section 1) ---------------------------
|
|
3
|
+
// Protocol-defined wire shape. Payload (`data`) schemas are view-defined.
|
|
4
|
+
export const StreamErrorFrameSchema = av.object({
|
|
5
|
+
kind: av.enum_(["error"]),
|
|
6
|
+
error: av.string().minLength(1),
|
|
7
|
+
message: av.string().minLength(1),
|
|
8
|
+
issues: av.optional(av.array(av.object({
|
|
9
|
+
code: av.string().minLength(1),
|
|
10
|
+
path: av.optional(av.string()),
|
|
11
|
+
message: av.string().minLength(1)
|
|
12
|
+
}, { unknownKeys: "strip" })))
|
|
13
|
+
}, { unknownKeys: "strip" });
|
|
14
|
+
export const StreamEndFrameSchema = av.object({
|
|
15
|
+
kind: av.enum_(["end"]),
|
|
16
|
+
count: av.int().min(0)
|
|
17
|
+
}, { unknownKeys: "strip" });
|
|
18
|
+
// -- Stream handler (branded, produced by createStreamHandler) --------
|
|
19
|
+
/**
|
|
20
|
+
* Brand key identifying a stream handler in the registry's `handlers` map.
|
|
21
|
+
* Stream handlers are objects (not callables); the adapter detects the brand
|
|
22
|
+
* at request time and diverts to the streaming pipeline.
|
|
23
|
+
*/
|
|
24
|
+
export const BP_STREAM_HANDLER = Symbol.for("betterportal.streamHandler");
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
|
+
export function isStreamHandler(value) {
|
|
27
|
+
return typeof value === "object"
|
|
28
|
+
&& value !== null
|
|
29
|
+
&& value[BP_STREAM_HANDLER] === true;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=streaming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/contracts/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAK9B,8EAA8E;AAC9E,0EAA0E;AAE1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAU,CAAC;IAClC,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/B,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACjC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC;QACrC,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9B,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9B,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;KAClC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;CAC/B,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAU,CAAC;IAChC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACvB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAmB7B,wEAAwE;AAExE;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AA4B1E,8DAA8D;AAC9D,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ;WAC3B,KAAK,KAAK,IAAI;WACb,KAAiC,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import type { Infer } from "anyvali";
|
|
3
|
+
export declare const CacheHintsSchema: av.ObjectSchema<{
|
|
4
|
+
ttlSeconds: av.IntSchema;
|
|
5
|
+
varyBy: av.ArraySchema<av.StringSchema>;
|
|
6
|
+
}>;
|
|
7
|
+
export type CacheHints = Infer<typeof CacheHintsSchema>;
|
|
8
|
+
export declare const ViewRendererVariantSchema: av.ObjectSchema<{
|
|
9
|
+
id: av.StringSchema;
|
|
10
|
+
title: av.StringSchema;
|
|
11
|
+
slotId: av.StringSchema;
|
|
12
|
+
renderModes: av.ArraySchema<av.EnumSchema<readonly ["page", "fragment", "embed"]>>;
|
|
13
|
+
}>;
|
|
14
|
+
export type ViewRendererVariant = Infer<typeof ViewRendererVariantSchema>;
|
|
15
|
+
export declare const ThemeRendererSupportSchema: av.ObjectSchema<{
|
|
16
|
+
defaultRenderer: av.StringSchema;
|
|
17
|
+
renderModes: av.ArraySchema<av.EnumSchema<readonly ["page", "fragment", "embed"]>>;
|
|
18
|
+
slots: av.ArraySchema<av.StringSchema>;
|
|
19
|
+
renderers: av.ArraySchema<av.ObjectSchema<{
|
|
20
|
+
id: av.StringSchema;
|
|
21
|
+
title: av.StringSchema;
|
|
22
|
+
slotId: av.StringSchema;
|
|
23
|
+
renderModes: av.ArraySchema<av.EnumSchema<readonly ["page", "fragment", "embed"]>>;
|
|
24
|
+
}>>;
|
|
25
|
+
}>;
|
|
26
|
+
export type ThemeRendererSupport = Infer<typeof ThemeRendererSupportSchema>;
|
|
27
|
+
export declare const HtmlRepresentationSupportSchema: av.ObjectSchema<{
|
|
28
|
+
themeRenderers: av.RecordSchema<av.ObjectSchema<{
|
|
29
|
+
defaultRenderer: av.StringSchema;
|
|
30
|
+
renderModes: av.ArraySchema<av.EnumSchema<readonly ["page", "fragment", "embed"]>>;
|
|
31
|
+
slots: av.ArraySchema<av.StringSchema>;
|
|
32
|
+
renderers: av.ArraySchema<av.ObjectSchema<{
|
|
33
|
+
id: av.StringSchema;
|
|
34
|
+
title: av.StringSchema;
|
|
35
|
+
slotId: av.StringSchema;
|
|
36
|
+
renderModes: av.ArraySchema<av.EnumSchema<readonly ["page", "fragment", "embed"]>>;
|
|
37
|
+
}>>;
|
|
38
|
+
}>>;
|
|
39
|
+
}>;
|
|
40
|
+
export type HtmlRepresentationSupport = Infer<typeof HtmlRepresentationSupportSchema>;
|
|
41
|
+
export declare const ViewDemoScenarioMatchSchema: av.ObjectSchema<{
|
|
42
|
+
query: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
43
|
+
params: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
44
|
+
headers: av.OptionalSchema<av.RecordSchema<av.StringSchema>>;
|
|
45
|
+
request: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
46
|
+
}>;
|
|
47
|
+
export type ViewDemoScenarioMatch = Infer<typeof ViewDemoScenarioMatchSchema>;
|
|
48
|
+
export declare const ViewDemoScenarioSchema: av.ObjectSchema<{
|
|
49
|
+
id: av.StringSchema;
|
|
50
|
+
title: av.StringSchema;
|
|
51
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
52
|
+
match: av.OptionalSchema<av.ObjectSchema<{
|
|
53
|
+
query: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
54
|
+
params: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
55
|
+
headers: av.OptionalSchema<av.RecordSchema<av.StringSchema>>;
|
|
56
|
+
request: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
57
|
+
}>>;
|
|
58
|
+
response: av.BaseSchema<unknown, import("./json.js").JsonValue>;
|
|
59
|
+
}>;
|
|
60
|
+
export type ViewDemoScenario = Infer<typeof ViewDemoScenarioSchema>;
|
|
61
|
+
/**
|
|
62
|
+
* Optional role hint for a view. Used by discovery flows to auto-fill app config.
|
|
63
|
+
* Examples: "auth.login", "auth.logout", "auth.refresh", "nav.profile", "footer.brand".
|
|
64
|
+
* Not enforced - pure metadata.
|
|
65
|
+
*/
|
|
66
|
+
export declare const ViewRoleSchema: av.StringSchema;
|
|
67
|
+
export type ViewRole = Infer<typeof ViewRoleSchema>;
|
|
68
|
+
/**
|
|
69
|
+
* Streaming declaration for a view (spec/streaming.md section 5). Present only on
|
|
70
|
+
* streaming views; `jsonResponseSchema` then holds the derived buffered shape.
|
|
71
|
+
*/
|
|
72
|
+
export declare const ViewStreamingSupportSchema: av.ObjectSchema<{
|
|
73
|
+
itemSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
74
|
+
summarySchema: av.OptionalSchema<av.BaseSchema<unknown, import("./json.js").JsonObject>>;
|
|
75
|
+
}>;
|
|
76
|
+
export type ViewStreamingSupport = Infer<typeof ViewStreamingSupportSchema>;
|
|
77
|
+
export declare const ViewMetadataSchema: av.ObjectSchema<{
|
|
78
|
+
viewId: av.StringSchema;
|
|
79
|
+
title: av.StringSchema;
|
|
80
|
+
description: av.StringSchema;
|
|
81
|
+
path: av.StringSchema;
|
|
82
|
+
methods: av.ArraySchema<av.EnumSchema<readonly ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]>>;
|
|
83
|
+
paramsSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
84
|
+
querySchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
85
|
+
headersSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
86
|
+
bodySchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
87
|
+
jsonResponseSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
88
|
+
metadataResponseSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
89
|
+
renderable: av.BoolSchema;
|
|
90
|
+
raw: av.OptionalSchema<av.BoolSchema>;
|
|
91
|
+
streaming: av.OptionalSchema<av.ObjectSchema<{
|
|
92
|
+
itemSchema: av.BaseSchema<unknown, import("./json.js").JsonObject>;
|
|
93
|
+
summarySchema: av.OptionalSchema<av.BaseSchema<unknown, import("./json.js").JsonObject>>;
|
|
94
|
+
}>>;
|
|
95
|
+
html: av.ObjectSchema<{
|
|
96
|
+
themeRenderers: av.RecordSchema<av.ObjectSchema<{
|
|
97
|
+
defaultRenderer: av.StringSchema;
|
|
98
|
+
renderModes: av.ArraySchema<av.EnumSchema<readonly ["page", "fragment", "embed"]>>;
|
|
99
|
+
slots: av.ArraySchema<av.StringSchema>;
|
|
100
|
+
renderers: av.ArraySchema<av.ObjectSchema<{
|
|
101
|
+
id: av.StringSchema;
|
|
102
|
+
title: av.StringSchema;
|
|
103
|
+
slotId: av.StringSchema;
|
|
104
|
+
renderModes: av.ArraySchema<av.EnumSchema<readonly ["page", "fragment", "embed"]>>;
|
|
105
|
+
}>>;
|
|
106
|
+
}>>;
|
|
107
|
+
}>;
|
|
108
|
+
auth: av.ObjectSchema<{
|
|
109
|
+
required: av.BoolSchema;
|
|
110
|
+
permissions: av.ArraySchema<av.ObjectSchema<{
|
|
111
|
+
serviceId: av.StringSchema;
|
|
112
|
+
viewId: av.StringSchema;
|
|
113
|
+
permissions: av.ArraySchema<av.EnumSchema<readonly ["read", "create", "update", "delete"]>>;
|
|
114
|
+
}>>;
|
|
115
|
+
}>;
|
|
116
|
+
role: av.OptionalSchema<av.StringSchema>;
|
|
117
|
+
dependencies: av.ArraySchema<av.StringSchema>;
|
|
118
|
+
chrome: av.OptionalSchema<av.IntersectionSchema<[av.ObjectSchema<{
|
|
119
|
+
hideMenu: av.OptionalSchema<av.BoolSchema>;
|
|
120
|
+
hideHeader: av.OptionalSchema<av.BoolSchema>;
|
|
121
|
+
hideFooter: av.OptionalSchema<av.BoolSchema>;
|
|
122
|
+
fullScreen: av.OptionalSchema<av.BoolSchema>;
|
|
123
|
+
}>, av.RecordSchema<av.UnionSchema<[av.StringSchema, av.NumberSchema, av.BoolSchema]>>]>>;
|
|
124
|
+
demoScenarios: av.ArraySchema<av.ObjectSchema<{
|
|
125
|
+
id: av.StringSchema;
|
|
126
|
+
title: av.StringSchema;
|
|
127
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
128
|
+
match: av.OptionalSchema<av.ObjectSchema<{
|
|
129
|
+
query: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
130
|
+
params: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
131
|
+
headers: av.OptionalSchema<av.RecordSchema<av.StringSchema>>;
|
|
132
|
+
request: av.OptionalSchema<av.RecordSchema<av.AnySchema>>;
|
|
133
|
+
}>>;
|
|
134
|
+
response: av.BaseSchema<unknown, import("./json.js").JsonValue>;
|
|
135
|
+
}>>;
|
|
136
|
+
cacheHints: av.ObjectSchema<{
|
|
137
|
+
ttlSeconds: av.IntSchema;
|
|
138
|
+
varyBy: av.ArraySchema<av.StringSchema>;
|
|
139
|
+
}>;
|
|
140
|
+
}>;
|
|
141
|
+
export type ViewMetadata = Infer<typeof ViewMetadataSchema>;
|
|
142
|
+
export declare const ViewPermissionDefinitionSchema: av.ObjectSchema<{
|
|
143
|
+
id: av.StringSchema;
|
|
144
|
+
title: av.StringSchema;
|
|
145
|
+
description: av.StringSchema;
|
|
146
|
+
defaultRoles: av.ArraySchema<av.StringSchema>;
|
|
147
|
+
}>;
|
|
148
|
+
export type ViewPermissionDefinition = Infer<typeof ViewPermissionDefinitionSchema>;
|
|
149
|
+
//# sourceMappingURL=view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/contracts/view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAQrC,eAAO,MAAM,gBAAgB;;;EAGD,CAAC;AAC7B,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAExD,eAAO,MAAM,yBAAyB;;;;;EAKV,CAAC;AAC7B,MAAM,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE1E,eAAO,MAAM,0BAA0B;;;;;;;;;;EAKX,CAAC;AAC7B,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE5E,eAAO,MAAM,+BAA+B;;;;;;;;;;;;EAEhB,CAAC;AAC7B,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAEtF,eAAO,MAAM,2BAA2B;;;;;EAKZ,CAAC;AAC7B,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAE9E,eAAO,MAAM,sBAAsB;;;;;;;;;;;EAMP,CAAC;AAC7B,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEpE;;;;GAIG;AACH,eAAO,MAAM,cAAc,iBAA2B,CAAC;AACvD,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;EAGX,CAAC;AAC7B,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE5E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsBH,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE5D,eAAO,MAAM,8BAA8B;;;;;EAKf,CAAC;AAC7B,MAAM,MAAM,wBAAwB,GAAG,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import { HttpMethodSchema, RenderModeSchema } from "./common.js";
|
|
3
|
+
import { JsonObjectSchema, JsonValueSchema } from "./json.js";
|
|
4
|
+
import { BetterPortalRouteChromeSchema } from "./platformConfig.js";
|
|
5
|
+
import { ApiAuthRequirementSchema } from "./route.js";
|
|
6
|
+
const NonEmptyStringSchema = av.string().minLength(1);
|
|
7
|
+
export const CacheHintsSchema = av.object({
|
|
8
|
+
ttlSeconds: av.int().min(0).default(0),
|
|
9
|
+
varyBy: av.array(NonEmptyStringSchema).default([])
|
|
10
|
+
}, { unknownKeys: "strip" });
|
|
11
|
+
export const ViewRendererVariantSchema = av.object({
|
|
12
|
+
id: NonEmptyStringSchema,
|
|
13
|
+
title: NonEmptyStringSchema,
|
|
14
|
+
slotId: NonEmptyStringSchema,
|
|
15
|
+
renderModes: av.array(RenderModeSchema).default([])
|
|
16
|
+
}, { unknownKeys: "strip" });
|
|
17
|
+
export const ThemeRendererSupportSchema = av.object({
|
|
18
|
+
defaultRenderer: NonEmptyStringSchema.default("default"),
|
|
19
|
+
renderModes: av.array(RenderModeSchema).default([]),
|
|
20
|
+
slots: av.array(NonEmptyStringSchema).default([]),
|
|
21
|
+
renderers: av.array(ViewRendererVariantSchema).default([])
|
|
22
|
+
}, { unknownKeys: "strip" });
|
|
23
|
+
export const HtmlRepresentationSupportSchema = av.object({
|
|
24
|
+
themeRenderers: av.record(ThemeRendererSupportSchema).default({})
|
|
25
|
+
}, { unknownKeys: "strip" });
|
|
26
|
+
export const ViewDemoScenarioMatchSchema = av.object({
|
|
27
|
+
query: av.optional(av.record(av.any())),
|
|
28
|
+
params: av.optional(av.record(av.any())),
|
|
29
|
+
headers: av.optional(av.record(av.string())),
|
|
30
|
+
request: av.optional(av.record(av.any()))
|
|
31
|
+
}, { unknownKeys: "strip" });
|
|
32
|
+
export const ViewDemoScenarioSchema = av.object({
|
|
33
|
+
id: NonEmptyStringSchema,
|
|
34
|
+
title: NonEmptyStringSchema,
|
|
35
|
+
description: av.optional(av.string()),
|
|
36
|
+
match: av.optional(ViewDemoScenarioMatchSchema),
|
|
37
|
+
response: JsonValueSchema
|
|
38
|
+
}, { unknownKeys: "strip" });
|
|
39
|
+
/**
|
|
40
|
+
* Optional role hint for a view. Used by discovery flows to auto-fill app config.
|
|
41
|
+
* Examples: "auth.login", "auth.logout", "auth.refresh", "nav.profile", "footer.brand".
|
|
42
|
+
* Not enforced - pure metadata.
|
|
43
|
+
*/
|
|
44
|
+
export const ViewRoleSchema = av.string().minLength(1);
|
|
45
|
+
/**
|
|
46
|
+
* Streaming declaration for a view (spec/streaming.md section 5). Present only on
|
|
47
|
+
* streaming views; `jsonResponseSchema` then holds the derived buffered shape.
|
|
48
|
+
*/
|
|
49
|
+
export const ViewStreamingSupportSchema = av.object({
|
|
50
|
+
itemSchema: JsonObjectSchema,
|
|
51
|
+
summarySchema: av.optional(JsonObjectSchema)
|
|
52
|
+
}, { unknownKeys: "strip" });
|
|
53
|
+
export const ViewMetadataSchema = av.object({
|
|
54
|
+
viewId: NonEmptyStringSchema,
|
|
55
|
+
title: NonEmptyStringSchema,
|
|
56
|
+
description: NonEmptyStringSchema,
|
|
57
|
+
path: NonEmptyStringSchema,
|
|
58
|
+
methods: av.array(HttpMethodSchema).minItems(1),
|
|
59
|
+
paramsSchema: JsonObjectSchema,
|
|
60
|
+
querySchema: JsonObjectSchema,
|
|
61
|
+
headersSchema: JsonObjectSchema,
|
|
62
|
+
bodySchema: JsonObjectSchema,
|
|
63
|
+
jsonResponseSchema: JsonObjectSchema,
|
|
64
|
+
metadataResponseSchema: JsonObjectSchema,
|
|
65
|
+
renderable: av.bool().default(true),
|
|
66
|
+
raw: av.optional(av.bool()),
|
|
67
|
+
streaming: av.optional(ViewStreamingSupportSchema),
|
|
68
|
+
html: HtmlRepresentationSupportSchema,
|
|
69
|
+
auth: ApiAuthRequirementSchema,
|
|
70
|
+
role: av.optional(ViewRoleSchema),
|
|
71
|
+
dependencies: av.array(NonEmptyStringSchema).default([]),
|
|
72
|
+
chrome: av.optional(BetterPortalRouteChromeSchema),
|
|
73
|
+
demoScenarios: av.array(ViewDemoScenarioSchema).default([]),
|
|
74
|
+
cacheHints: CacheHintsSchema
|
|
75
|
+
}, { unknownKeys: "strip" });
|
|
76
|
+
export const ViewPermissionDefinitionSchema = av.object({
|
|
77
|
+
id: NonEmptyStringSchema,
|
|
78
|
+
title: NonEmptyStringSchema,
|
|
79
|
+
description: NonEmptyStringSchema,
|
|
80
|
+
defaultRoles: av.array(NonEmptyStringSchema).default([])
|
|
81
|
+
}, { unknownKeys: "strip" });
|
|
82
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/contracts/view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC;IACxC,UAAU,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACnD,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC,MAAM,CAAC;IACjD,EAAE,EAAE,oBAAoB;IACxB,KAAK,EAAE,oBAAoB;IAC3B,MAAM,EAAE,oBAAoB;IAC5B,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACpD,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC,MAAM,CAAC;IAClD,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC;IACxD,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACjD,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3D,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,MAAM,CAAC,MAAM,+BAA+B,GAAG,EAAE,CAAC,MAAM,CAAC;IACvD,cAAc,EAAE,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAClE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAC,MAAM,CAAC;IACnD,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACxC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAC1C,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC,MAAM,CAAC;IAC9C,EAAE,EAAE,oBAAoB;IACxB,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IACrC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC/C,QAAQ,EAAE,eAAe;CAC1B,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAGvD;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC,MAAM,CAAC;IAClD,UAAU,EAAE,gBAAgB;IAC5B,aAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CAC7C,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,oBAAoB;IAC5B,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EAAE,oBAAoB;IACjC,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,YAAY,EAAE,gBAAgB;IAC9B,WAAW,EAAE,gBAAgB;IAC7B,aAAa,EAAE,gBAAgB;IAC/B,UAAU,EAAE,gBAAgB;IAC5B,kBAAkB,EAAE,gBAAgB;IACpC,sBAAsB,EAAE,gBAAgB;IACxC,UAAU,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3B,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAClD,IAAI,EAAE,+BAA+B;IACrC,IAAI,EAAE,wBAAwB;IAC9B,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACjC,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACxD,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAClD,aAAa,EAAE,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3D,UAAU,EAAE,gBAAgB;CAC7B,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,CAAC,MAAM,CAAC;IACtD,EAAE,EAAE,oBAAoB;IACxB,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EAAE,oBAAoB;IACjC,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACzD,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { App, BindingRecord, ServiceCatalogEntry, Tenant } from "../contracts/binding.js";
|
|
2
|
+
import { PluginManifest } from "../contracts/manifest.js";
|
|
3
|
+
import { ImportedManifestRecord, ControlPlaneSnapshot } from "./types.js";
|
|
4
|
+
export declare class BetterPortalControlPlaneStore {
|
|
5
|
+
private readonly catalog;
|
|
6
|
+
private readonly tenants;
|
|
7
|
+
private readonly apps;
|
|
8
|
+
private readonly bindings;
|
|
9
|
+
private readonly manifests;
|
|
10
|
+
registerCatalogEntry(entry: ServiceCatalogEntry): ServiceCatalogEntry;
|
|
11
|
+
upsertTenant(tenant: Tenant): Tenant;
|
|
12
|
+
upsertApp(app: App): App;
|
|
13
|
+
upsertBinding(binding: BindingRecord): BindingRecord;
|
|
14
|
+
recordImportedManifest(bindingId: string, manifest: PluginManifest): ImportedManifestRecord;
|
|
15
|
+
getCatalogEntry(serviceId: string): ServiceCatalogEntry | null;
|
|
16
|
+
getTenant(tenantId: string): Tenant | null;
|
|
17
|
+
getApp(appId: string): App | null;
|
|
18
|
+
getBinding(bindingId: string): BindingRecord | null;
|
|
19
|
+
getImportedManifest(bindingId: string): ImportedManifestRecord | null;
|
|
20
|
+
getAppsForTenant(tenantId: string): App[];
|
|
21
|
+
getBindingsForTenant(tenantId: string): BindingRecord[];
|
|
22
|
+
getSnapshot(): ControlPlaneSnapshot;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/controlPlane/store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EAEH,aAAa,EAEb,mBAAmB,EAEnB,MAAM,EAEP,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAwB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE1E,qBAAa,6BAA6B;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6C;IAEhE,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,mBAAmB;IAMrE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAMpC,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;IAMxB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa;IAMpD,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,sBAAsB;IAW3F,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAI9D,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI1C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAIjC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAInD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;IAIrE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,EAAE;IAIzC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAIvD,WAAW,IAAI,oBAAoB;CAS3C"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { AppSchema, BindingRecordSchema, ServiceCatalogEntrySchema, TenantSchema } from "../contracts/binding.js";
|
|
2
|
+
import { PluginManifestSchema } from "../contracts/manifest.js";
|
|
3
|
+
export class BetterPortalControlPlaneStore {
|
|
4
|
+
catalog = new Map();
|
|
5
|
+
tenants = new Map();
|
|
6
|
+
apps = new Map();
|
|
7
|
+
bindings = new Map();
|
|
8
|
+
manifests = new Map();
|
|
9
|
+
registerCatalogEntry(entry) {
|
|
10
|
+
const parsed = ServiceCatalogEntrySchema.parse(entry);
|
|
11
|
+
this.catalog.set(parsed.serviceId, parsed);
|
|
12
|
+
return parsed;
|
|
13
|
+
}
|
|
14
|
+
upsertTenant(tenant) {
|
|
15
|
+
const parsed = TenantSchema.parse(tenant);
|
|
16
|
+
this.tenants.set(parsed.id, parsed);
|
|
17
|
+
return parsed;
|
|
18
|
+
}
|
|
19
|
+
upsertApp(app) {
|
|
20
|
+
const parsed = AppSchema.parse(app);
|
|
21
|
+
this.apps.set(parsed.id, parsed);
|
|
22
|
+
return parsed;
|
|
23
|
+
}
|
|
24
|
+
upsertBinding(binding) {
|
|
25
|
+
const parsed = BindingRecordSchema.parse(binding);
|
|
26
|
+
this.bindings.set(parsed.bindingId, parsed);
|
|
27
|
+
return parsed;
|
|
28
|
+
}
|
|
29
|
+
recordImportedManifest(bindingId, manifest) {
|
|
30
|
+
const parsedManifest = PluginManifestSchema.parse(manifest);
|
|
31
|
+
const record = {
|
|
32
|
+
bindingId,
|
|
33
|
+
manifest: parsedManifest,
|
|
34
|
+
importedAtIso: new Date().toISOString()
|
|
35
|
+
};
|
|
36
|
+
this.manifests.set(bindingId, record);
|
|
37
|
+
return record;
|
|
38
|
+
}
|
|
39
|
+
getCatalogEntry(serviceId) {
|
|
40
|
+
return this.catalog.get(serviceId) ?? null;
|
|
41
|
+
}
|
|
42
|
+
getTenant(tenantId) {
|
|
43
|
+
return this.tenants.get(tenantId) ?? null;
|
|
44
|
+
}
|
|
45
|
+
getApp(appId) {
|
|
46
|
+
return this.apps.get(appId) ?? null;
|
|
47
|
+
}
|
|
48
|
+
getBinding(bindingId) {
|
|
49
|
+
return this.bindings.get(bindingId) ?? null;
|
|
50
|
+
}
|
|
51
|
+
getImportedManifest(bindingId) {
|
|
52
|
+
return this.manifests.get(bindingId) ?? null;
|
|
53
|
+
}
|
|
54
|
+
getAppsForTenant(tenantId) {
|
|
55
|
+
return [...this.apps.values()].filter((app) => app.tenantId === tenantId);
|
|
56
|
+
}
|
|
57
|
+
getBindingsForTenant(tenantId) {
|
|
58
|
+
return [...this.bindings.values()].filter((binding) => binding.tenantId === tenantId);
|
|
59
|
+
}
|
|
60
|
+
getSnapshot() {
|
|
61
|
+
return {
|
|
62
|
+
catalog: [...this.catalog.values()],
|
|
63
|
+
tenants: [...this.tenants.values()],
|
|
64
|
+
apps: [...this.apps.values()],
|
|
65
|
+
bindings: [...this.bindings.values()],
|
|
66
|
+
importedManifests: [...this.manifests.values()]
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/controlPlane/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BindingRecord } from "../contracts/binding.js";
|
|
2
|
+
import { PluginManifest } from "../contracts/manifest.js";
|
|
3
|
+
import { BetterPortalControlPlaneStore } from "./store.js";
|
|
4
|
+
import { ImportedManifestRecord } from "./types.js";
|
|
5
|
+
export type ManifestProvider = (binding: BindingRecord) => Promise<PluginManifest>;
|
|
6
|
+
export declare function importBindingManifest(store: BetterPortalControlPlaneStore, bindingId: string, provider: ManifestProvider): Promise<ImportedManifestRecord>;
|
|
7
|
+
export declare function syncAllBindingManifests(store: BetterPortalControlPlaneStore, provider: ManifestProvider): Promise<ImportedManifestRecord[]>;
|
|
8
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/controlPlane/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAwB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAEnF,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,6BAA6B,EACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAejC;AAED,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,6BAA6B,EACpC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CASnC"}
|