@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.
Files changed (194) hide show
  1. package/README.md +13 -0
  2. package/lib/adapters/h3.d.ts +51 -0
  3. package/lib/adapters/h3.d.ts.map +1 -0
  4. package/lib/adapters/h3.js +1120 -0
  5. package/lib/adapters/h3.js.map +1 -0
  6. package/lib/codegen/cli.d.ts +3 -0
  7. package/lib/codegen/cli.d.ts.map +1 -0
  8. package/lib/codegen/cli.js +82 -0
  9. package/lib/codegen/cli.js.map +1 -0
  10. package/lib/codegen/emitter.d.ts +7 -0
  11. package/lib/codegen/emitter.d.ts.map +1 -0
  12. package/lib/codegen/emitter.js +453 -0
  13. package/lib/codegen/emitter.js.map +1 -0
  14. package/lib/codegen/init.d.ts +3 -0
  15. package/lib/codegen/init.d.ts.map +1 -0
  16. package/lib/codegen/init.js +90 -0
  17. package/lib/codegen/init.js.map +1 -0
  18. package/lib/codegen/scanner.d.ts +56 -0
  19. package/lib/codegen/scanner.d.ts.map +1 -0
  20. package/lib/codegen/scanner.js +484 -0
  21. package/lib/codegen/scanner.js.map +1 -0
  22. package/lib/codegen/validate.d.ts +14 -0
  23. package/lib/codegen/validate.d.ts.map +1 -0
  24. package/lib/codegen/validate.js +166 -0
  25. package/lib/codegen/validate.js.map +1 -0
  26. package/lib/contracts/auth.d.ts +160 -0
  27. package/lib/contracts/auth.d.ts.map +1 -0
  28. package/lib/contracts/auth.js +123 -0
  29. package/lib/contracts/auth.js.map +1 -0
  30. package/lib/contracts/binding.d.ts +169 -0
  31. package/lib/contracts/binding.d.ts.map +1 -0
  32. package/lib/contracts/binding.js +69 -0
  33. package/lib/contracts/binding.js.map +1 -0
  34. package/lib/contracts/common.d.ts +23 -0
  35. package/lib/contracts/common.d.ts.map +1 -0
  36. package/lib/contracts/common.js +18 -0
  37. package/lib/contracts/common.js.map +1 -0
  38. package/lib/contracts/config.d.ts +93 -0
  39. package/lib/contracts/config.d.ts.map +1 -0
  40. package/lib/contracts/config.js +62 -0
  41. package/lib/contracts/config.js.map +1 -0
  42. package/lib/contracts/controlPlane.d.ts +63 -0
  43. package/lib/contracts/controlPlane.d.ts.map +1 -0
  44. package/lib/contracts/controlPlane.js +2 -0
  45. package/lib/contracts/controlPlane.js.map +1 -0
  46. package/lib/contracts/json.d.ts +9 -0
  47. package/lib/contracts/json.d.ts.map +1 -0
  48. package/lib/contracts/json.js +6 -0
  49. package/lib/contracts/json.js.map +1 -0
  50. package/lib/contracts/manifest.d.ts +158 -0
  51. package/lib/contracts/manifest.d.ts.map +1 -0
  52. package/lib/contracts/manifest.js +40 -0
  53. package/lib/contracts/manifest.js.map +1 -0
  54. package/lib/contracts/observability.d.ts +77 -0
  55. package/lib/contracts/observability.d.ts.map +1 -0
  56. package/lib/contracts/observability.js +99 -0
  57. package/lib/contracts/observability.js.map +1 -0
  58. package/lib/contracts/platformConfig.d.ts +635 -0
  59. package/lib/contracts/platformConfig.d.ts.map +1 -0
  60. package/lib/contracts/platformConfig.js +256 -0
  61. package/lib/contracts/platformConfig.js.map +1 -0
  62. package/lib/contracts/registry.d.ts +104 -0
  63. package/lib/contracts/registry.d.ts.map +1 -0
  64. package/lib/contracts/registry.js +2 -0
  65. package/lib/contracts/registry.js.map +1 -0
  66. package/lib/contracts/route.d.ts +199 -0
  67. package/lib/contracts/route.d.ts.map +1 -0
  68. package/lib/contracts/route.js +26 -0
  69. package/lib/contracts/route.js.map +1 -0
  70. package/lib/contracts/serviceConfig.d.ts +88 -0
  71. package/lib/contracts/serviceConfig.d.ts.map +1 -0
  72. package/lib/contracts/serviceConfig.js +45 -0
  73. package/lib/contracts/serviceConfig.js.map +1 -0
  74. package/lib/contracts/streaming.d.ts +76 -0
  75. package/lib/contracts/streaming.d.ts.map +1 -0
  76. package/lib/contracts/streaming.js +31 -0
  77. package/lib/contracts/streaming.js.map +1 -0
  78. package/lib/contracts/view.d.ts +149 -0
  79. package/lib/contracts/view.d.ts.map +1 -0
  80. package/lib/contracts/view.js +82 -0
  81. package/lib/contracts/view.js.map +1 -0
  82. package/lib/controlPlane/store.d.ts +24 -0
  83. package/lib/controlPlane/store.d.ts.map +1 -0
  84. package/lib/controlPlane/store.js +70 -0
  85. package/lib/controlPlane/store.js.map +1 -0
  86. package/lib/controlPlane/sync.d.ts +8 -0
  87. package/lib/controlPlane/sync.d.ts.map +1 -0
  88. package/lib/controlPlane/sync.js +24 -0
  89. package/lib/controlPlane/sync.js.map +1 -0
  90. package/lib/controlPlane/types.d.ts +15 -0
  91. package/lib/controlPlane/types.d.ts.map +1 -0
  92. package/lib/controlPlane/types.js +2 -0
  93. package/lib/controlPlane/types.js.map +1 -0
  94. package/lib/index.d.ts +40 -0
  95. package/lib/index.d.ts.map +1 -0
  96. package/lib/index.js +40 -0
  97. package/lib/index.js.map +1 -0
  98. package/lib/runtime/auth/envelope.d.ts +32 -0
  99. package/lib/runtime/auth/envelope.d.ts.map +1 -0
  100. package/lib/runtime/auth/envelope.js +123 -0
  101. package/lib/runtime/auth/envelope.js.map +1 -0
  102. package/lib/runtime/auth/issuer.d.ts +44 -0
  103. package/lib/runtime/auth/issuer.d.ts.map +1 -0
  104. package/lib/runtime/auth/issuer.js +82 -0
  105. package/lib/runtime/auth/issuer.js.map +1 -0
  106. package/lib/runtime/auth/jwks.d.ts +7 -0
  107. package/lib/runtime/auth/jwks.d.ts.map +1 -0
  108. package/lib/runtime/auth/jwks.js +69 -0
  109. package/lib/runtime/auth/jwks.js.map +1 -0
  110. package/lib/runtime/auth/keypair.d.ts +21 -0
  111. package/lib/runtime/auth/keypair.d.ts.map +1 -0
  112. package/lib/runtime/auth/keypair.js +50 -0
  113. package/lib/runtime/auth/keypair.js.map +1 -0
  114. package/lib/runtime/auth/tokens.d.ts +25 -0
  115. package/lib/runtime/auth/tokens.d.ts.map +1 -0
  116. package/lib/runtime/auth/tokens.js +137 -0
  117. package/lib/runtime/auth/tokens.js.map +1 -0
  118. package/lib/runtime/auth/verifier.d.ts +45 -0
  119. package/lib/runtime/auth/verifier.d.ts.map +1 -0
  120. package/lib/runtime/auth/verifier.js +76 -0
  121. package/lib/runtime/auth/verifier.js.map +1 -0
  122. package/lib/runtime/bpHeaders.d.ts +10 -0
  123. package/lib/runtime/bpHeaders.d.ts.map +1 -0
  124. package/lib/runtime/bpHeaders.js +53 -0
  125. package/lib/runtime/bpHeaders.js.map +1 -0
  126. package/lib/runtime/configProvider.d.ts +41 -0
  127. package/lib/runtime/configProvider.d.ts.map +1 -0
  128. package/lib/runtime/configProvider.js +232 -0
  129. package/lib/runtime/configProvider.js.map +1 -0
  130. package/lib/runtime/configStore.d.ts +34 -0
  131. package/lib/runtime/configStore.d.ts.map +1 -0
  132. package/lib/runtime/configStore.js +197 -0
  133. package/lib/runtime/configStore.js.map +1 -0
  134. package/lib/runtime/configTicket.d.ts +49 -0
  135. package/lib/runtime/configTicket.d.ts.map +1 -0
  136. package/lib/runtime/configTicket.js +168 -0
  137. package/lib/runtime/configTicket.js.map +1 -0
  138. package/lib/runtime/h3.d.ts +28 -0
  139. package/lib/runtime/h3.d.ts.map +1 -0
  140. package/lib/runtime/h3.js +199 -0
  141. package/lib/runtime/h3.js.map +1 -0
  142. package/lib/runtime/handler.d.ts +55 -0
  143. package/lib/runtime/handler.d.ts.map +1 -0
  144. package/lib/runtime/handler.js +51 -0
  145. package/lib/runtime/handler.js.map +1 -0
  146. package/lib/runtime/http.d.ts +13 -0
  147. package/lib/runtime/http.d.ts.map +1 -0
  148. package/lib/runtime/http.js +114 -0
  149. package/lib/runtime/http.js.map +1 -0
  150. package/lib/runtime/jsonSchema.d.ts +4 -0
  151. package/lib/runtime/jsonSchema.d.ts.map +1 -0
  152. package/lib/runtime/jsonSchema.js +28 -0
  153. package/lib/runtime/jsonSchema.js.map +1 -0
  154. package/lib/runtime/manifest.d.ts +3 -0
  155. package/lib/runtime/manifest.d.ts.map +1 -0
  156. package/lib/runtime/manifest.js +5 -0
  157. package/lib/runtime/manifest.js.map +1 -0
  158. package/lib/runtime/media.d.ts +20 -0
  159. package/lib/runtime/media.d.ts.map +1 -0
  160. package/lib/runtime/media.js +70 -0
  161. package/lib/runtime/media.js.map +1 -0
  162. package/lib/runtime/registry.d.ts +67 -0
  163. package/lib/runtime/registry.d.ts.map +1 -0
  164. package/lib/runtime/registry.js +290 -0
  165. package/lib/runtime/registry.js.map +1 -0
  166. package/lib/runtime/serviceConfig.d.ts +38 -0
  167. package/lib/runtime/serviceConfig.d.ts.map +1 -0
  168. package/lib/runtime/serviceConfig.js +152 -0
  169. package/lib/runtime/serviceConfig.js.map +1 -0
  170. package/lib/runtime/statusViews.d.ts +23 -0
  171. package/lib/runtime/statusViews.d.ts.map +1 -0
  172. package/lib/runtime/statusViews.js +48 -0
  173. package/lib/runtime/statusViews.js.map +1 -0
  174. package/lib/runtime/stream.d.ts +41 -0
  175. package/lib/runtime/stream.d.ts.map +1 -0
  176. package/lib/runtime/stream.js +92 -0
  177. package/lib/runtime/stream.js.map +1 -0
  178. package/lib/runtime/streamHandler.d.ts +48 -0
  179. package/lib/runtime/streamHandler.d.ts.map +1 -0
  180. package/lib/runtime/streamHandler.js +49 -0
  181. package/lib/runtime/streamHandler.js.map +1 -0
  182. package/lib/runtime/tenantResolution.d.ts +4 -0
  183. package/lib/runtime/tenantResolution.d.ts.map +1 -0
  184. package/lib/runtime/tenantResolution.js +19 -0
  185. package/lib/runtime/tenantResolution.js.map +1 -0
  186. package/lib/runtime/uuid.d.ts +6 -0
  187. package/lib/runtime/uuid.d.ts.map +1 -0
  188. package/lib/runtime/uuid.js +27 -0
  189. package/lib/runtime/uuid.js.map +1 -0
  190. package/lib/runtime/view.d.ts +48 -0
  191. package/lib/runtime/view.d.ts.map +1 -0
  192. package/lib/runtime/view.js +111 -0
  193. package/lib/runtime/view.js.map +1 -0
  194. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=controlPlane.js.map
@@ -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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"}