@ankhorage/contracts 14.0.0 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +10 -2
  3. package/dist/appManifest/apis.d.ts +1 -0
  4. package/dist/appManifest/apis.d.ts.map +1 -1
  5. package/dist/appManifest/apis.js +17 -14
  6. package/dist/appManifest/apis.js.map +1 -1
  7. package/dist/appManifest/bindings.d.ts +3 -0
  8. package/dist/appManifest/bindings.d.ts.map +1 -1
  9. package/dist/appManifest/bindings.js +17 -1
  10. package/dist/appManifest/bindings.js.map +1 -1
  11. package/dist/appManifest/constants.d.ts +18 -0
  12. package/dist/appManifest/constants.d.ts.map +1 -0
  13. package/dist/appManifest/constants.js +18 -0
  14. package/dist/appManifest/constants.js.map +1 -0
  15. package/dist/appManifest/data.d.ts +4 -0
  16. package/dist/appManifest/data.d.ts.map +1 -1
  17. package/dist/appManifest/data.js +22 -3
  18. package/dist/appManifest/data.js.map +1 -1
  19. package/dist/appManifest/dataSources.d.ts +1 -0
  20. package/dist/appManifest/dataSources.d.ts.map +1 -1
  21. package/dist/appManifest/dataSources.js +7 -6
  22. package/dist/appManifest/dataSources.js.map +1 -1
  23. package/dist/appManifest/deploy.d.ts +1 -0
  24. package/dist/appManifest/deploy.d.ts.map +1 -1
  25. package/dist/appManifest/deploy.js +16 -13
  26. package/dist/appManifest/deploy.js.map +1 -1
  27. package/dist/appManifest/icon.d.ts.map +1 -1
  28. package/dist/appManifest/icon.js +2 -1
  29. package/dist/appManifest/icon.js.map +1 -1
  30. package/dist/appManifest/isAppManifest.d.ts +4 -0
  31. package/dist/appManifest/isAppManifest.d.ts.map +1 -0
  32. package/dist/appManifest/isAppManifest.js +69 -0
  33. package/dist/appManifest/isAppManifest.js.map +1 -0
  34. package/dist/appManifest/isAppStateSpec.d.ts +4 -0
  35. package/dist/appManifest/isAppStateSpec.d.ts.map +1 -0
  36. package/dist/appManifest/isAppStateSpec.js +9 -0
  37. package/dist/appManifest/isAppStateSpec.js.map +1 -0
  38. package/dist/appManifest/isManifestValue.d.ts +3 -0
  39. package/dist/appManifest/isManifestValue.d.ts.map +1 -0
  40. package/dist/appManifest/isManifestValue.js +15 -0
  41. package/dist/appManifest/isManifestValue.js.map +1 -0
  42. package/dist/appManifest/media.d.ts +1 -0
  43. package/dist/appManifest/media.d.ts.map +1 -1
  44. package/dist/appManifest/media.js +10 -8
  45. package/dist/appManifest/media.js.map +1 -1
  46. package/dist/appManifest/navigator.d.ts.map +1 -1
  47. package/dist/appManifest/navigator.js +7 -6
  48. package/dist/appManifest/navigator.js.map +1 -1
  49. package/dist/appManifest/navigatorOptions.d.ts +0 -2
  50. package/dist/appManifest/navigatorOptions.d.ts.map +1 -1
  51. package/dist/appManifest/navigatorOptions.js +8 -12
  52. package/dist/appManifest/navigatorOptions.js.map +1 -1
  53. package/dist/appManifest/parseAppManifest.d.ts +10 -0
  54. package/dist/appManifest/parseAppManifest.d.ts.map +1 -0
  55. package/dist/appManifest/parseAppManifest.js +14 -0
  56. package/dist/appManifest/parseAppManifest.js.map +1 -0
  57. package/dist/appManifest/screens.d.ts +4 -0
  58. package/dist/appManifest/screens.d.ts.map +1 -1
  59. package/dist/appManifest/screens.js +14 -2
  60. package/dist/appManifest/screens.js.map +1 -1
  61. package/dist/appManifest.d.ts +3 -18
  62. package/dist/appManifest.d.ts.map +1 -1
  63. package/dist/appManifest.js +2 -80
  64. package/dist/appManifest.js.map +1 -1
  65. package/dist/auth.d.ts +3 -2
  66. package/dist/auth.d.ts.map +1 -1
  67. package/dist/auth.js.map +1 -1
  68. package/dist/deploy.d.ts +0 -9
  69. package/dist/deploy.d.ts.map +1 -1
  70. package/dist/deploy.js +0 -8
  71. package/dist/deploy.js.map +1 -1
  72. package/dist/environments.d.ts +4 -0
  73. package/dist/environments.d.ts.map +1 -0
  74. package/dist/environments.js +3 -0
  75. package/dist/environments.js.map +1 -0
  76. package/dist/index.d.ts +2 -1
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +2 -1
  79. package/dist/index.js.map +1 -1
  80. package/dist/infra/constants.d.ts +91 -0
  81. package/dist/infra/constants.d.ts.map +1 -0
  82. package/dist/infra/constants.js +91 -0
  83. package/dist/infra/constants.js.map +1 -0
  84. package/dist/infra/infraFields.d.ts +12 -0
  85. package/dist/infra/infraFields.d.ts.map +1 -0
  86. package/dist/infra/infraFields.js +14 -0
  87. package/dist/infra/infraFields.js.map +1 -0
  88. package/dist/infra/isInfraAdapterDescriptor.d.ts +4 -0
  89. package/dist/infra/isInfraAdapterDescriptor.d.ts.map +1 -0
  90. package/dist/infra/isInfraAdapterDescriptor.js +31 -0
  91. package/dist/infra/isInfraAdapterDescriptor.js.map +1 -0
  92. package/dist/infra/isInfraAuthSpec.d.ts +4 -0
  93. package/dist/infra/isInfraAuthSpec.d.ts.map +1 -0
  94. package/dist/infra/isInfraAuthSpec.js +75 -0
  95. package/dist/infra/isInfraAuthSpec.js.map +1 -0
  96. package/dist/infra/isInfraCredentialRef.d.ts +3 -0
  97. package/dist/infra/isInfraCredentialRef.d.ts.map +1 -0
  98. package/dist/infra/isInfraCredentialRef.js +10 -0
  99. package/dist/infra/isInfraCredentialRef.js.map +1 -0
  100. package/dist/infra/isInfraDeploymentSpec.d.ts +4 -0
  101. package/dist/infra/isInfraDeploymentSpec.d.ts.map +1 -0
  102. package/dist/infra/isInfraDeploymentSpec.js +66 -0
  103. package/dist/infra/isInfraDeploymentSpec.js.map +1 -0
  104. package/dist/infra/isInfraEnvironmentSpec.d.ts +4 -0
  105. package/dist/infra/isInfraEnvironmentSpec.d.ts.map +1 -0
  106. package/dist/infra/isInfraEnvironmentSpec.js +82 -0
  107. package/dist/infra/isInfraEnvironmentSpec.js.map +1 -0
  108. package/dist/infra/isInfraManifest.d.ts +4 -0
  109. package/dist/infra/isInfraManifest.d.ts.map +1 -0
  110. package/dist/infra/isInfraManifest.js +23 -0
  111. package/dist/infra/isInfraManifest.js.map +1 -0
  112. package/dist/infra/isInfraShape.d.ts +3 -0
  113. package/dist/infra/isInfraShape.d.ts.map +1 -0
  114. package/dist/infra/isInfraShape.js +10 -0
  115. package/dist/infra/isInfraShape.js.map +1 -0
  116. package/dist/infra/isInfraWorkloadHealth.d.ts +3 -0
  117. package/dist/infra/isInfraWorkloadHealth.d.ts.map +1 -0
  118. package/dist/infra/isInfraWorkloadHealth.js +37 -0
  119. package/dist/infra/isInfraWorkloadHealth.js.map +1 -0
  120. package/dist/infra/isInfraWorkloadSpec.d.ts +4 -0
  121. package/dist/infra/isInfraWorkloadSpec.d.ts.map +1 -0
  122. package/dist/infra/isInfraWorkloadSpec.js +70 -0
  123. package/dist/infra/isInfraWorkloadSpec.js.map +1 -0
  124. package/dist/infra/isInfraWorkloadValue.d.ts +3 -0
  125. package/dist/infra/isInfraWorkloadValue.d.ts.map +1 -0
  126. package/dist/infra/isInfraWorkloadValue.js +40 -0
  127. package/dist/infra/isInfraWorkloadValue.js.map +1 -0
  128. package/dist/infra/parseInfraManifest.d.ts +5 -0
  129. package/dist/infra/parseInfraManifest.d.ts.map +1 -0
  130. package/dist/infra/parseInfraManifest.js +17 -0
  131. package/dist/infra/parseInfraManifest.js.map +1 -0
  132. package/dist/infra/validateInfraAdapterSelection.d.ts +6 -0
  133. package/dist/infra/validateInfraAdapterSelection.d.ts.map +1 -0
  134. package/dist/infra/validateInfraAdapterSelection.js +36 -0
  135. package/dist/infra/validateInfraAdapterSelection.js.map +1 -0
  136. package/dist/infra.d.ts +16 -0
  137. package/dist/infra.d.ts.map +1 -0
  138. package/dist/infra.js +11 -0
  139. package/dist/infra.js.map +1 -0
  140. package/dist/media.d.ts +7 -6
  141. package/dist/media.d.ts.map +1 -1
  142. package/dist/media.js +5 -5
  143. package/dist/media.js.map +1 -1
  144. package/dist/state.d.ts +5 -0
  145. package/dist/state.d.ts.map +1 -1
  146. package/dist/state.js.map +1 -1
  147. package/dist/types/appManifest.d.ts +9 -0
  148. package/dist/types/appManifest.d.ts.map +1 -0
  149. package/dist/types/appManifest.js +2 -0
  150. package/dist/types/appManifest.js.map +1 -0
  151. package/dist/types/infraAdapters.d.ts +87 -0
  152. package/dist/types/infraAdapters.d.ts.map +1 -0
  153. package/dist/types/infraAdapters.js +2 -0
  154. package/dist/types/infraAdapters.js.map +1 -0
  155. package/dist/types/infraLifecycle.d.ts +107 -0
  156. package/dist/types/infraLifecycle.d.ts.map +1 -0
  157. package/dist/types/infraLifecycle.js +2 -0
  158. package/dist/types/infraLifecycle.js.map +1 -0
  159. package/dist/types/infraManifest.d.ts +142 -0
  160. package/dist/types/infraManifest.d.ts.map +1 -0
  161. package/dist/types/infraManifest.js +2 -0
  162. package/dist/types/infraManifest.js.map +1 -0
  163. package/dist/types/infraSecrets.d.ts +15 -0
  164. package/dist/types/infraSecrets.d.ts.map +1 -0
  165. package/dist/types/infraSecrets.js +2 -0
  166. package/dist/types/infraSecrets.js.map +1 -0
  167. package/dist/types/infraValidation.d.ts +5 -0
  168. package/dist/types/infraValidation.d.ts.map +1 -0
  169. package/dist/types/infraValidation.js +2 -0
  170. package/dist/types/infraValidation.js.map +1 -0
  171. package/dist/types/infraWorkload.d.ts +70 -0
  172. package/dist/types/infraWorkload.d.ts.map +1 -0
  173. package/dist/types/infraWorkload.js +2 -0
  174. package/dist/types/infraWorkload.js.map +1 -0
  175. package/dist/types.d.ts +7 -70
  176. package/dist/types.d.ts.map +1 -1
  177. package/dist/types.js +0 -9
  178. package/dist/types.js.map +1 -1
  179. package/package.json +11 -2
  180. package/src/appManifest/apis.ts +18 -16
  181. package/src/appManifest/bindings.ts +18 -1
  182. package/src/appManifest/constants.ts +19 -0
  183. package/src/appManifest/data.ts +23 -9
  184. package/src/appManifest/dataSources.ts +8 -7
  185. package/src/appManifest/deploy.ts +17 -15
  186. package/src/appManifest/icon.ts +3 -1
  187. package/src/appManifest/isAppManifest.ts +95 -0
  188. package/src/appManifest/isAppStateSpec.ts +13 -0
  189. package/src/appManifest/isManifestValue.ts +19 -0
  190. package/src/appManifest/media.ts +11 -10
  191. package/src/appManifest/navigator.ts +7 -6
  192. package/src/appManifest/navigatorOptions.ts +9 -16
  193. package/src/appManifest/parseAppManifest.ts +15 -0
  194. package/src/appManifest/screens.ts +14 -2
  195. package/src/appManifest.test.ts +9 -5
  196. package/src/appManifest.ts +3 -107
  197. package/src/auth-flow-contract.test.ts +6 -10
  198. package/src/auth-oauth.test.ts +2 -2
  199. package/src/auth.ts +3 -2
  200. package/src/bindings.test.ts +5 -0
  201. package/src/contracts.test.ts +21 -19
  202. package/src/deploy.test.ts +13 -5
  203. package/src/deploy.ts +0 -11
  204. package/src/environments.ts +4 -0
  205. package/src/index.ts +2 -1
  206. package/src/infra/constants.ts +91 -0
  207. package/src/infra/infraFields.ts +20 -0
  208. package/src/infra/isInfraAdapterDescriptor.ts +37 -0
  209. package/src/infra/isInfraAuthSpec.ts +98 -0
  210. package/src/infra/isInfraCredentialRef.ts +11 -0
  211. package/src/infra/isInfraDeploymentSpec.ts +75 -0
  212. package/src/infra/isInfraEnvironmentSpec.ts +95 -0
  213. package/src/infra/isInfraManifest.ts +29 -0
  214. package/src/infra/isInfraShape.ts +16 -0
  215. package/src/infra/isInfraWorkloadHealth.ts +38 -0
  216. package/src/infra/isInfraWorkloadSpec.ts +87 -0
  217. package/src/infra/isInfraWorkloadValue.ts +41 -0
  218. package/src/infra/parseInfraManifest.ts +20 -0
  219. package/src/infra/validateInfraAdapterSelection.ts +42 -0
  220. package/src/infra-types.test.ts +93 -0
  221. package/src/infra-workload.test.ts +186 -0
  222. package/src/infra.test.ts +268 -0
  223. package/src/infra.ts +15 -0
  224. package/src/media.ts +12 -11
  225. package/src/profile-contract.test.ts +2 -3
  226. package/src/secrets.test.ts +19 -13
  227. package/src/state.ts +6 -0
  228. package/src/types/appManifest.ts +5 -0
  229. package/src/types/infraAdapters.ts +150 -0
  230. package/src/types/infraLifecycle.ts +105 -0
  231. package/src/types/infraManifest.ts +130 -0
  232. package/src/types/infraSecrets.ts +16 -0
  233. package/src/types/infraValidation.ts +2 -0
  234. package/src/types/infraWorkload.ts +64 -0
  235. package/src/types.ts +7 -87
  236. package/dist/appManifest/infra.d.ts +0 -2
  237. package/dist/appManifest/infra.d.ts.map +0 -1
  238. package/dist/appManifest/infra.js +0 -130
  239. package/dist/appManifest/infra.js.map +0 -1
  240. package/dist/appManifest/shared.d.ts +0 -8
  241. package/dist/appManifest/shared.d.ts.map +0 -1
  242. package/dist/appManifest/shared.js +0 -31
  243. package/dist/appManifest/shared.js.map +0 -1
  244. package/dist/secretManifest.d.ts +0 -11
  245. package/dist/secretManifest.d.ts.map +0 -1
  246. package/dist/secretManifest.js +0 -2
  247. package/dist/secretManifest.js.map +0 -1
  248. package/src/appManifest/infra.ts +0 -190
  249. package/src/appManifest/shared.ts +0 -40
  250. package/src/secretManifest.ts +0 -12
package/src/types.ts CHANGED
@@ -1,18 +1,20 @@
1
1
  import type { ColorHarmony } from '@ankhorage/color-theory';
2
2
 
3
3
  import type { SplashScreenSpec } from './appManifest/splashScreen';
4
- import type { AuthFlowConfig, AuthIdentifierKind, AuthOAuthConfig, AuthSignUpField } from './auth';
4
+ import type { AuthIdentifierKind, AuthSignUpField } from './auth';
5
5
  import type {
6
6
  BindingValueSource,
7
7
  ComponentDataBindingRegistry,
8
8
  ScreenDataLoaderDefinition,
9
9
  } from './bindings';
10
- import type { ApiDefinitionList, DataSourceRegistry } from './data';
10
+ import type { DataSourceRegistry } from './data';
11
11
  import type { AppDeployManifest } from './deploy';
12
+ import type { InfraManifest } from './infra';
12
13
  import type { MediaAssetReference, MediaManifest } from './media';
13
14
  import type { AppNavigatorManifest } from './navigator';
14
15
  import type { RepositoryManifest } from './repository';
15
16
  import type { ScreenRequirements } from './requirements';
17
+ import type { AppStateSpec } from './state';
16
18
  import type { ThemeGlobalTokenOverrides, ThemeRecipeOverrides } from './theme';
17
19
 
18
20
  export interface ThemeModeConfig {
@@ -164,40 +166,9 @@ export const APP_CATEGORIES = [
164
166
  ] as const;
165
167
  export type AppCategory = (typeof APP_CATEGORIES)[number];
166
168
 
167
- export const DEPLOYMENT_TARGETS = ['minikube'] as const;
168
- export type KnownDeploymentTarget = (typeof DEPLOYMENT_TARGETS)[number];
169
- export type DeploymentTarget = KnownDeploymentTarget | (string & {});
170
-
171
- export const DATABASE_PROVIDERS = ['supabase'] as const;
172
- export type KnownDatabaseProvider = (typeof DATABASE_PROVIDERS)[number];
173
- export type DatabaseProvider = KnownDatabaseProvider | (string & {});
174
-
175
- export const DATABASE_TIERS = ['dev', 'prod'] as const;
176
- export type DatabaseTier = (typeof DATABASE_TIERS)[number];
177
-
178
- export const STORAGE_PROVIDERS = ['auto', 's3', 'r2'] as const;
179
- export type StorageProvider = (typeof STORAGE_PROVIDERS)[number];
180
-
181
- export const STATE_PROVIDERS = ['legend'] as const;
182
- export type KnownStateProvider = (typeof STATE_PROVIDERS)[number];
183
- export type StateProvider = KnownStateProvider | (string & {});
184
-
185
- export const STATE_PERSISTENCE_MODES = ['none', 'local', 'secure', 'database'] as const;
186
- export type StatePersistenceMode = (typeof STATE_PERSISTENCE_MODES)[number];
187
-
188
- export const AUTHZ_KINDS = ['RBAC', 'ABAC'] as const;
189
- export type AuthzKind = (typeof AUTHZ_KINDS)[number];
190
-
191
- export const AUTHZ_ENGINES = ['cerbos', 'native'] as const;
192
- export type AuthzEngine = (typeof AUTHZ_ENGINES)[number];
193
-
194
169
  export const AUTH_SCOPES = ['global', 'none', 'integrated'] as const;
195
170
  export type AuthScope = (typeof AUTH_SCOPES)[number];
196
171
 
197
- export const AUTH_PROVIDERS = ['supabase'] as const;
198
- export type KnownAuthProvider = (typeof AUTH_PROVIDERS)[number];
199
- export type AuthProvider = KnownAuthProvider | (string & {});
200
-
201
172
  export const AUTH_SIGN_IN_IDENTIFIERS = ['email', 'username', 'phone'] as const;
202
173
  export type AuthSignInIdentifier = AuthIdentifierKind;
203
174
 
@@ -269,31 +240,6 @@ export interface ScreenSpec {
269
240
  requires?: ScreenRequirements;
270
241
  }
271
242
 
272
- export interface DeploymentSpec {
273
- target: DeploymentTarget;
274
- monitoring: boolean;
275
- }
276
-
277
- export interface DatabaseSpec {
278
- provider: DatabaseProvider;
279
- tier: DatabaseTier;
280
- }
281
-
282
- export interface StorageSpec {
283
- provider: StorageProvider;
284
- buckets: string[];
285
- }
286
-
287
- export interface StateSpec {
288
- readonly provider: StateProvider;
289
- readonly persistence?: StatePersistenceMode;
290
- }
291
-
292
- export interface AuthzSpec {
293
- kind: AuthzKind;
294
- engine: AuthzEngine;
295
- }
296
-
297
243
  export interface AuthSignInSpec {
298
244
  identifiers: AuthSignInIdentifier[];
299
245
  }
@@ -312,34 +258,6 @@ export interface AuthProfileSpec {
312
258
  updateStrategy?: AuthProfileUpdateStrategy;
313
259
  }
314
260
 
315
- export interface AuthSpec {
316
- scope: AuthScope;
317
- provider: AuthProvider;
318
- authorization?: AuthzSpec;
319
- flow?: AuthFlowConfig;
320
- signIn?: AuthSignInSpec;
321
- signUp?: AuthSignUpSpec;
322
- oauth?: AuthOAuthConfig;
323
- profile?: AuthProfileSpec;
324
- }
325
-
326
- export interface NetworkingSpec {
327
- domain?: string;
328
- cdn: boolean;
329
- }
330
-
331
- export interface InfraManifest {
332
- deployment?: DeploymentSpec;
333
- auth?: AuthSpec;
334
- database?: DatabaseSpec;
335
- storage?: StorageSpec;
336
- state?: StateSpec;
337
- networking?: NetworkingSpec;
338
- apis?: ApiDefinitionList;
339
- modules: string[];
340
- modulesConfig?: Record<string, unknown>;
341
- }
342
-
343
261
  export interface AppSettings {
344
262
  localization: {
345
263
  defaultLocale: string;
@@ -363,8 +281,10 @@ export interface AppManifest {
363
281
  splashScreen?: SplashScreenSpec;
364
282
  /** Studio-managed authoring media. Runtime/user uploads are intentionally separate. */
365
283
  media?: MediaManifest;
366
- /** App distribution desired state. Infrastructure deployment remains under `infra.deployment`. */
284
+ /** App distribution desired state, separate from environment-specific infrastructure. */
367
285
  deploy?: AppDeployManifest;
286
+ /** Application runtime state is not provisioned by Infra. */
287
+ state?: AppStateSpec;
368
288
  infra: InfraManifest;
369
289
  navigator: AppNavigatorManifest;
370
290
  screens: Record<string, ScreenSpec>;
@@ -1,2 +0,0 @@
1
- export declare function isInfraManifest(value: unknown): boolean;
2
- //# sourceMappingURL=infra.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"infra.d.ts","sourceRoot":"","sources":["../../src/appManifest/infra.ts"],"names":[],"mappings":"AAqCA,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAgBvD"}
@@ -1,130 +0,0 @@
1
- import { AUTH_OAUTH_PROVIDER_IDS } from '../auth';
2
- import { AUTH_PROFILE_CREATE_STRATEGIES, AUTH_PROFILE_PRIMARY_KEY_STRATEGIES, AUTH_PROFILE_UPDATE_STRATEGIES, AUTH_SCOPES, AUTH_SIGN_IN_IDENTIFIERS, AUTH_SIGN_UP_POLICIES, AUTHZ_ENGINES, AUTHZ_KINDS, DATABASE_TIERS, STATE_PERSISTENCE_MODES, STORAGE_PROVIDERS, } from '../types';
3
- import { isApiDefinitionList } from './apis';
4
- import { isIconSpec } from './icon';
5
- import { isOptionalBoolean, isOptionalString, isRecord, isStringArray, isStringRecord, } from './shared';
6
- const AUTH_OAUTH_PROVIDER_SET = new Set(AUTH_OAUTH_PROVIDER_IDS);
7
- const AUTH_PROFILE_CREATE_STRATEGY_SET = new Set(AUTH_PROFILE_CREATE_STRATEGIES);
8
- const AUTH_PROFILE_PRIMARY_KEY_STRATEGY_SET = new Set(AUTH_PROFILE_PRIMARY_KEY_STRATEGIES);
9
- const AUTH_PROFILE_UPDATE_STRATEGY_SET = new Set(AUTH_PROFILE_UPDATE_STRATEGIES);
10
- const AUTH_SCOPE_SET = new Set(AUTH_SCOPES);
11
- const AUTH_SIGN_IN_IDENTIFIER_SET = new Set(AUTH_SIGN_IN_IDENTIFIERS);
12
- const AUTH_SIGN_UP_POLICY_SET = new Set(AUTH_SIGN_UP_POLICIES);
13
- const AUTHZ_ENGINE_SET = new Set(AUTHZ_ENGINES);
14
- const AUTHZ_KIND_SET = new Set(AUTHZ_KINDS);
15
- const DATABASE_TIER_SET = new Set(DATABASE_TIERS);
16
- const STATE_PERSISTENCE_MODE_SET = new Set(STATE_PERSISTENCE_MODES);
17
- const STORAGE_PROVIDER_SET = new Set(STORAGE_PROVIDERS);
18
- export function isInfraManifest(value) {
19
- return (isRecord(value) &&
20
- (value.deployment === undefined || isDeploymentSpec(value.deployment)) &&
21
- (value.auth === undefined || isAuthSpec(value.auth)) &&
22
- (value.database === undefined || isDatabaseSpec(value.database)) &&
23
- (value.storage === undefined || isStorageSpec(value.storage)) &&
24
- (value.state === undefined || isStateSpec(value.state)) &&
25
- (value.networking === undefined || isNetworkingSpec(value.networking)) &&
26
- (value.apis === undefined || isApiDefinitionList(value.apis)) &&
27
- Array.isArray(value.modules) &&
28
- value.modules.every((moduleId) => typeof moduleId === 'string') &&
29
- (value.modulesConfig === undefined || isRecord(value.modulesConfig)) &&
30
- !('plugins' in value) &&
31
- !('pluginsConfig' in value));
32
- }
33
- function isDeploymentSpec(value) {
34
- return (isRecord(value) && typeof value.target === 'string' && typeof value.monitoring === 'boolean');
35
- }
36
- function isDatabaseSpec(value) {
37
- return (isRecord(value) &&
38
- typeof value.provider === 'string' &&
39
- typeof value.tier === 'string' &&
40
- DATABASE_TIER_SET.has(value.tier));
41
- }
42
- function isStorageSpec(value) {
43
- return (isRecord(value) &&
44
- typeof value.provider === 'string' &&
45
- STORAGE_PROVIDER_SET.has(value.provider) &&
46
- isStringArray(value.buckets));
47
- }
48
- function isStateSpec(value) {
49
- return (isRecord(value) &&
50
- typeof value.provider === 'string' &&
51
- (value.persistence === undefined ||
52
- (typeof value.persistence === 'string' && STATE_PERSISTENCE_MODE_SET.has(value.persistence))));
53
- }
54
- function isNetworkingSpec(value) {
55
- return isRecord(value) && isOptionalString(value.domain) && typeof value.cdn === 'boolean';
56
- }
57
- function isAuthSpec(value) {
58
- return (isRecord(value) &&
59
- typeof value.scope === 'string' &&
60
- AUTH_SCOPE_SET.has(value.scope) &&
61
- typeof value.provider === 'string' &&
62
- (value.authorization === undefined || isAuthzSpec(value.authorization)) &&
63
- (value.flow === undefined || isAuthFlow(value.flow)) &&
64
- (value.signIn === undefined || isAuthSignInSpec(value.signIn)) &&
65
- (value.signUp === undefined || isAuthSignUpSpec(value.signUp)) &&
66
- (value.oauth === undefined || isAuthOAuthConfig(value.oauth)) &&
67
- (value.profile === undefined || isAuthProfileSpec(value.profile)));
68
- }
69
- function isAuthzSpec(value) {
70
- return (isRecord(value) &&
71
- typeof value.kind === 'string' &&
72
- AUTHZ_KIND_SET.has(value.kind) &&
73
- typeof value.engine === 'string' &&
74
- AUTHZ_ENGINE_SET.has(value.engine));
75
- }
76
- function isAuthFlow(value) {
77
- return (isRecord(value) &&
78
- typeof value.signInRoute === 'string' &&
79
- isOptionalString(value.signUpRoute) &&
80
- isOptionalString(value.signOutRoute) &&
81
- isOptionalString(value.forgotPasswordRoute) &&
82
- isOptionalString(value.otpRoute) &&
83
- typeof value.postSignInRoute === 'string' &&
84
- isOptionalString(value.unauthorizedRoute));
85
- }
86
- function isAuthSignInSpec(value) {
87
- return (isRecord(value) &&
88
- Array.isArray(value.identifiers) &&
89
- value.identifiers.every((identifier) => typeof identifier === 'string' && AUTH_SIGN_IN_IDENTIFIER_SET.has(identifier)));
90
- }
91
- function isAuthSignUpSpec(value) {
92
- return (isRecord(value) &&
93
- isStringArray(value.requiredFields) &&
94
- (value.optionalFields === undefined || isStringArray(value.optionalFields)) &&
95
- (value.signUpPolicy === undefined ||
96
- (typeof value.signUpPolicy === 'string' && AUTH_SIGN_UP_POLICY_SET.has(value.signUpPolicy))));
97
- }
98
- function isAuthOAuthConfig(value) {
99
- return (isRecord(value) &&
100
- typeof value.enabled === 'boolean' &&
101
- typeof value.callbackRoute === 'string' &&
102
- Array.isArray(value.providers) &&
103
- value.providers.every(isAuthOAuthProviderConfig));
104
- }
105
- function isAuthOAuthProviderConfig(value) {
106
- return (isRecord(value) &&
107
- typeof value.id === 'string' &&
108
- (AUTH_OAUTH_PROVIDER_SET.has(value.id) || value.id.length > 0) &&
109
- isOptionalString(value.label) &&
110
- isOptionalBoolean(value.enabled) &&
111
- (value.scopes === undefined || isStringArray(value.scopes)) &&
112
- (value.queryParams === undefined || isStringRecord(value.queryParams)) &&
113
- (value.icon === undefined || isIconSpec(value.icon)) &&
114
- (value.credentialsRef === undefined || typeof value.credentialsRef === 'string'));
115
- }
116
- function isAuthProfileSpec(value) {
117
- return (isRecord(value) &&
118
- isStringArray(value.fields) &&
119
- isOptionalString(value.table) &&
120
- (value.primaryKey === undefined ||
121
- (typeof value.primaryKey === 'string' &&
122
- AUTH_PROFILE_PRIMARY_KEY_STRATEGY_SET.has(value.primaryKey))) &&
123
- (value.createStrategy === undefined ||
124
- (typeof value.createStrategy === 'string' &&
125
- AUTH_PROFILE_CREATE_STRATEGY_SET.has(value.createStrategy))) &&
126
- (value.updateStrategy === undefined ||
127
- (typeof value.updateStrategy === 'string' &&
128
- AUTH_PROFILE_UPDATE_STRATEGY_SET.has(value.updateStrategy))));
129
- }
130
- //# sourceMappingURL=infra.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"infra.js","sourceRoot":"","sources":["../../src/appManifest/infra.ts"],"names":[],"mappings":"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","sourcesContent":["import { AUTH_OAUTH_PROVIDER_IDS } from '../auth';\nimport {\n AUTH_PROFILE_CREATE_STRATEGIES,\n AUTH_PROFILE_PRIMARY_KEY_STRATEGIES,\n AUTH_PROFILE_UPDATE_STRATEGIES,\n AUTH_SCOPES,\n AUTH_SIGN_IN_IDENTIFIERS,\n AUTH_SIGN_UP_POLICIES,\n AUTHZ_ENGINES,\n AUTHZ_KINDS,\n DATABASE_TIERS,\n STATE_PERSISTENCE_MODES,\n STORAGE_PROVIDERS,\n} from '../types';\nimport { isApiDefinitionList } from './apis';\nimport { isIconSpec } from './icon';\nimport {\n isOptionalBoolean,\n isOptionalString,\n isRecord,\n isStringArray,\n isStringRecord,\n} from './shared';\n\nconst AUTH_OAUTH_PROVIDER_SET = new Set<string>(AUTH_OAUTH_PROVIDER_IDS);\nconst AUTH_PROFILE_CREATE_STRATEGY_SET = new Set<string>(AUTH_PROFILE_CREATE_STRATEGIES);\nconst AUTH_PROFILE_PRIMARY_KEY_STRATEGY_SET = new Set<string>(AUTH_PROFILE_PRIMARY_KEY_STRATEGIES);\nconst AUTH_PROFILE_UPDATE_STRATEGY_SET = new Set<string>(AUTH_PROFILE_UPDATE_STRATEGIES);\nconst AUTH_SCOPE_SET = new Set<string>(AUTH_SCOPES);\nconst AUTH_SIGN_IN_IDENTIFIER_SET = new Set<string>(AUTH_SIGN_IN_IDENTIFIERS);\nconst AUTH_SIGN_UP_POLICY_SET = new Set<string>(AUTH_SIGN_UP_POLICIES);\nconst AUTHZ_ENGINE_SET = new Set<string>(AUTHZ_ENGINES);\nconst AUTHZ_KIND_SET = new Set<string>(AUTHZ_KINDS);\nconst DATABASE_TIER_SET = new Set<string>(DATABASE_TIERS);\nconst STATE_PERSISTENCE_MODE_SET = new Set<string>(STATE_PERSISTENCE_MODES);\nconst STORAGE_PROVIDER_SET = new Set<string>(STORAGE_PROVIDERS);\n\nexport function isInfraManifest(value: unknown): boolean {\n return (\n isRecord(value) &&\n (value.deployment === undefined || isDeploymentSpec(value.deployment)) &&\n (value.auth === undefined || isAuthSpec(value.auth)) &&\n (value.database === undefined || isDatabaseSpec(value.database)) &&\n (value.storage === undefined || isStorageSpec(value.storage)) &&\n (value.state === undefined || isStateSpec(value.state)) &&\n (value.networking === undefined || isNetworkingSpec(value.networking)) &&\n (value.apis === undefined || isApiDefinitionList(value.apis)) &&\n Array.isArray(value.modules) &&\n value.modules.every((moduleId) => typeof moduleId === 'string') &&\n (value.modulesConfig === undefined || isRecord(value.modulesConfig)) &&\n !('plugins' in value) &&\n !('pluginsConfig' in value)\n );\n}\n\nfunction isDeploymentSpec(value: unknown): boolean {\n return (\n isRecord(value) && typeof value.target === 'string' && typeof value.monitoring === 'boolean'\n );\n}\n\nfunction isDatabaseSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.provider === 'string' &&\n typeof value.tier === 'string' &&\n DATABASE_TIER_SET.has(value.tier)\n );\n}\n\nfunction isStorageSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.provider === 'string' &&\n STORAGE_PROVIDER_SET.has(value.provider) &&\n isStringArray(value.buckets)\n );\n}\n\nfunction isStateSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.provider === 'string' &&\n (value.persistence === undefined ||\n (typeof value.persistence === 'string' && STATE_PERSISTENCE_MODE_SET.has(value.persistence)))\n );\n}\n\nfunction isNetworkingSpec(value: unknown): boolean {\n return isRecord(value) && isOptionalString(value.domain) && typeof value.cdn === 'boolean';\n}\n\nfunction isAuthSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.scope === 'string' &&\n AUTH_SCOPE_SET.has(value.scope) &&\n typeof value.provider === 'string' &&\n (value.authorization === undefined || isAuthzSpec(value.authorization)) &&\n (value.flow === undefined || isAuthFlow(value.flow)) &&\n (value.signIn === undefined || isAuthSignInSpec(value.signIn)) &&\n (value.signUp === undefined || isAuthSignUpSpec(value.signUp)) &&\n (value.oauth === undefined || isAuthOAuthConfig(value.oauth)) &&\n (value.profile === undefined || isAuthProfileSpec(value.profile))\n );\n}\n\nfunction isAuthzSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.kind === 'string' &&\n AUTHZ_KIND_SET.has(value.kind) &&\n typeof value.engine === 'string' &&\n AUTHZ_ENGINE_SET.has(value.engine)\n );\n}\n\nfunction isAuthFlow(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.signInRoute === 'string' &&\n isOptionalString(value.signUpRoute) &&\n isOptionalString(value.signOutRoute) &&\n isOptionalString(value.forgotPasswordRoute) &&\n isOptionalString(value.otpRoute) &&\n typeof value.postSignInRoute === 'string' &&\n isOptionalString(value.unauthorizedRoute)\n );\n}\n\nfunction isAuthSignInSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n Array.isArray(value.identifiers) &&\n value.identifiers.every(\n (identifier) => typeof identifier === 'string' && AUTH_SIGN_IN_IDENTIFIER_SET.has(identifier),\n )\n );\n}\n\nfunction isAuthSignUpSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n isStringArray(value.requiredFields) &&\n (value.optionalFields === undefined || isStringArray(value.optionalFields)) &&\n (value.signUpPolicy === undefined ||\n (typeof value.signUpPolicy === 'string' && AUTH_SIGN_UP_POLICY_SET.has(value.signUpPolicy)))\n );\n}\n\nfunction isAuthOAuthConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.enabled === 'boolean' &&\n typeof value.callbackRoute === 'string' &&\n Array.isArray(value.providers) &&\n value.providers.every(isAuthOAuthProviderConfig)\n );\n}\n\nfunction isAuthOAuthProviderConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n (AUTH_OAUTH_PROVIDER_SET.has(value.id) || value.id.length > 0) &&\n isOptionalString(value.label) &&\n isOptionalBoolean(value.enabled) &&\n (value.scopes === undefined || isStringArray(value.scopes)) &&\n (value.queryParams === undefined || isStringRecord(value.queryParams)) &&\n (value.icon === undefined || isIconSpec(value.icon)) &&\n (value.credentialsRef === undefined || typeof value.credentialsRef === 'string')\n );\n}\n\nfunction isAuthProfileSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n isStringArray(value.fields) &&\n isOptionalString(value.table) &&\n (value.primaryKey === undefined ||\n (typeof value.primaryKey === 'string' &&\n AUTH_PROFILE_PRIMARY_KEY_STRATEGY_SET.has(value.primaryKey))) &&\n (value.createStrategy === undefined ||\n (typeof value.createStrategy === 'string' &&\n AUTH_PROFILE_CREATE_STRATEGY_SET.has(value.createStrategy))) &&\n (value.updateStrategy === undefined ||\n (typeof value.updateStrategy === 'string' &&\n AUTH_PROFILE_UPDATE_STRATEGY_SET.has(value.updateStrategy)))\n );\n}\n"]}
@@ -1,8 +0,0 @@
1
- export declare function isRecord(value: unknown): value is Record<string, unknown>;
2
- export declare function isOptionalString(value: unknown): boolean;
3
- export declare function isOptionalNumber(value: unknown): boolean;
4
- export declare function isOptionalBoolean(value: unknown): boolean;
5
- export declare function isStringArray(value: unknown): value is string[];
6
- export declare function isStringRecord(value: unknown): boolean;
7
- export declare function isManifestValue(value: unknown): boolean;
8
- //# sourceMappingURL=shared.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/appManifest/shared.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAExD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAExD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAE/D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEtD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAevD"}
@@ -1,31 +0,0 @@
1
- export function isRecord(value) {
2
- return typeof value === 'object' && value !== null && !Array.isArray(value);
3
- }
4
- export function isOptionalString(value) {
5
- return value === undefined || typeof value === 'string';
6
- }
7
- export function isOptionalNumber(value) {
8
- return value === undefined || typeof value === 'number';
9
- }
10
- export function isOptionalBoolean(value) {
11
- return value === undefined || typeof value === 'boolean';
12
- }
13
- export function isStringArray(value) {
14
- return Array.isArray(value) && value.every((entry) => typeof entry === 'string');
15
- }
16
- export function isStringRecord(value) {
17
- return isRecord(value) && Object.values(value).every((entry) => typeof entry === 'string');
18
- }
19
- export function isManifestValue(value) {
20
- if (value === null ||
21
- typeof value === 'string' ||
22
- typeof value === 'number' ||
23
- typeof value === 'boolean') {
24
- return true;
25
- }
26
- if (Array.isArray(value)) {
27
- return value.every(isManifestValue);
28
- }
29
- return isRecord(value) && Object.values(value).every(isManifestValue);
30
- }
31
- //# sourceMappingURL=shared.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/appManifest/shared.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IACE,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS,EAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACxE,CAAC","sourcesContent":["export function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function isOptionalString(value: unknown): boolean {\n return value === undefined || typeof value === 'string';\n}\n\nexport function isOptionalNumber(value: unknown): boolean {\n return value === undefined || typeof value === 'number';\n}\n\nexport function isOptionalBoolean(value: unknown): boolean {\n return value === undefined || typeof value === 'boolean';\n}\n\nexport function isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every((entry) => typeof entry === 'string');\n}\n\nexport function isStringRecord(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every((entry) => typeof entry === 'string');\n}\n\nexport function isManifestValue(value: unknown): boolean {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.every(isManifestValue);\n }\n\n return isRecord(value) && Object.values(value).every(isManifestValue);\n}\n"]}
@@ -1,11 +0,0 @@
1
- import type { SecretStoreProvider } from './secrets';
2
- export interface InfraSecretStoreSpec {
3
- provider: SecretStoreProvider;
4
- }
5
- declare module './types' {
6
- interface InfraManifest {
7
- /** Non-secret provider selection. Bootstrap credentials stay in trusted environment config. */
8
- secretStore?: InfraSecretStoreSpec;
9
- }
10
- }
11
- //# sourceMappingURL=secretManifest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"secretManifest.d.ts","sourceRoot":"","sources":["../src/secretManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,aAAa;QACrB,+FAA+F;QAC/F,WAAW,CAAC,EAAE,oBAAoB,CAAC;KACpC;CACF"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=secretManifest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"secretManifest.js","sourceRoot":"","sources":["../src/secretManifest.ts"],"names":[],"mappings":"","sourcesContent":["import type { SecretStoreProvider } from './secrets';\n\nexport interface InfraSecretStoreSpec {\n provider: SecretStoreProvider;\n}\n\ndeclare module './types' {\n interface InfraManifest {\n /** Non-secret provider selection. Bootstrap credentials stay in trusted environment config. */\n secretStore?: InfraSecretStoreSpec;\n }\n}\n"]}
@@ -1,190 +0,0 @@
1
- import { AUTH_OAUTH_PROVIDER_IDS } from '../auth';
2
- import {
3
- AUTH_PROFILE_CREATE_STRATEGIES,
4
- AUTH_PROFILE_PRIMARY_KEY_STRATEGIES,
5
- AUTH_PROFILE_UPDATE_STRATEGIES,
6
- AUTH_SCOPES,
7
- AUTH_SIGN_IN_IDENTIFIERS,
8
- AUTH_SIGN_UP_POLICIES,
9
- AUTHZ_ENGINES,
10
- AUTHZ_KINDS,
11
- DATABASE_TIERS,
12
- STATE_PERSISTENCE_MODES,
13
- STORAGE_PROVIDERS,
14
- } from '../types';
15
- import { isApiDefinitionList } from './apis';
16
- import { isIconSpec } from './icon';
17
- import {
18
- isOptionalBoolean,
19
- isOptionalString,
20
- isRecord,
21
- isStringArray,
22
- isStringRecord,
23
- } from './shared';
24
-
25
- const AUTH_OAUTH_PROVIDER_SET = new Set<string>(AUTH_OAUTH_PROVIDER_IDS);
26
- const AUTH_PROFILE_CREATE_STRATEGY_SET = new Set<string>(AUTH_PROFILE_CREATE_STRATEGIES);
27
- const AUTH_PROFILE_PRIMARY_KEY_STRATEGY_SET = new Set<string>(AUTH_PROFILE_PRIMARY_KEY_STRATEGIES);
28
- const AUTH_PROFILE_UPDATE_STRATEGY_SET = new Set<string>(AUTH_PROFILE_UPDATE_STRATEGIES);
29
- const AUTH_SCOPE_SET = new Set<string>(AUTH_SCOPES);
30
- const AUTH_SIGN_IN_IDENTIFIER_SET = new Set<string>(AUTH_SIGN_IN_IDENTIFIERS);
31
- const AUTH_SIGN_UP_POLICY_SET = new Set<string>(AUTH_SIGN_UP_POLICIES);
32
- const AUTHZ_ENGINE_SET = new Set<string>(AUTHZ_ENGINES);
33
- const AUTHZ_KIND_SET = new Set<string>(AUTHZ_KINDS);
34
- const DATABASE_TIER_SET = new Set<string>(DATABASE_TIERS);
35
- const STATE_PERSISTENCE_MODE_SET = new Set<string>(STATE_PERSISTENCE_MODES);
36
- const STORAGE_PROVIDER_SET = new Set<string>(STORAGE_PROVIDERS);
37
-
38
- export function isInfraManifest(value: unknown): boolean {
39
- return (
40
- isRecord(value) &&
41
- (value.deployment === undefined || isDeploymentSpec(value.deployment)) &&
42
- (value.auth === undefined || isAuthSpec(value.auth)) &&
43
- (value.database === undefined || isDatabaseSpec(value.database)) &&
44
- (value.storage === undefined || isStorageSpec(value.storage)) &&
45
- (value.state === undefined || isStateSpec(value.state)) &&
46
- (value.networking === undefined || isNetworkingSpec(value.networking)) &&
47
- (value.apis === undefined || isApiDefinitionList(value.apis)) &&
48
- Array.isArray(value.modules) &&
49
- value.modules.every((moduleId) => typeof moduleId === 'string') &&
50
- (value.modulesConfig === undefined || isRecord(value.modulesConfig)) &&
51
- !('plugins' in value) &&
52
- !('pluginsConfig' in value)
53
- );
54
- }
55
-
56
- function isDeploymentSpec(value: unknown): boolean {
57
- return (
58
- isRecord(value) && typeof value.target === 'string' && typeof value.monitoring === 'boolean'
59
- );
60
- }
61
-
62
- function isDatabaseSpec(value: unknown): boolean {
63
- return (
64
- isRecord(value) &&
65
- typeof value.provider === 'string' &&
66
- typeof value.tier === 'string' &&
67
- DATABASE_TIER_SET.has(value.tier)
68
- );
69
- }
70
-
71
- function isStorageSpec(value: unknown): boolean {
72
- return (
73
- isRecord(value) &&
74
- typeof value.provider === 'string' &&
75
- STORAGE_PROVIDER_SET.has(value.provider) &&
76
- isStringArray(value.buckets)
77
- );
78
- }
79
-
80
- function isStateSpec(value: unknown): boolean {
81
- return (
82
- isRecord(value) &&
83
- typeof value.provider === 'string' &&
84
- (value.persistence === undefined ||
85
- (typeof value.persistence === 'string' && STATE_PERSISTENCE_MODE_SET.has(value.persistence)))
86
- );
87
- }
88
-
89
- function isNetworkingSpec(value: unknown): boolean {
90
- return isRecord(value) && isOptionalString(value.domain) && typeof value.cdn === 'boolean';
91
- }
92
-
93
- function isAuthSpec(value: unknown): boolean {
94
- return (
95
- isRecord(value) &&
96
- typeof value.scope === 'string' &&
97
- AUTH_SCOPE_SET.has(value.scope) &&
98
- typeof value.provider === 'string' &&
99
- (value.authorization === undefined || isAuthzSpec(value.authorization)) &&
100
- (value.flow === undefined || isAuthFlow(value.flow)) &&
101
- (value.signIn === undefined || isAuthSignInSpec(value.signIn)) &&
102
- (value.signUp === undefined || isAuthSignUpSpec(value.signUp)) &&
103
- (value.oauth === undefined || isAuthOAuthConfig(value.oauth)) &&
104
- (value.profile === undefined || isAuthProfileSpec(value.profile))
105
- );
106
- }
107
-
108
- function isAuthzSpec(value: unknown): boolean {
109
- return (
110
- isRecord(value) &&
111
- typeof value.kind === 'string' &&
112
- AUTHZ_KIND_SET.has(value.kind) &&
113
- typeof value.engine === 'string' &&
114
- AUTHZ_ENGINE_SET.has(value.engine)
115
- );
116
- }
117
-
118
- function isAuthFlow(value: unknown): boolean {
119
- return (
120
- isRecord(value) &&
121
- typeof value.signInRoute === 'string' &&
122
- isOptionalString(value.signUpRoute) &&
123
- isOptionalString(value.signOutRoute) &&
124
- isOptionalString(value.forgotPasswordRoute) &&
125
- isOptionalString(value.otpRoute) &&
126
- typeof value.postSignInRoute === 'string' &&
127
- isOptionalString(value.unauthorizedRoute)
128
- );
129
- }
130
-
131
- function isAuthSignInSpec(value: unknown): boolean {
132
- return (
133
- isRecord(value) &&
134
- Array.isArray(value.identifiers) &&
135
- value.identifiers.every(
136
- (identifier) => typeof identifier === 'string' && AUTH_SIGN_IN_IDENTIFIER_SET.has(identifier),
137
- )
138
- );
139
- }
140
-
141
- function isAuthSignUpSpec(value: unknown): boolean {
142
- return (
143
- isRecord(value) &&
144
- isStringArray(value.requiredFields) &&
145
- (value.optionalFields === undefined || isStringArray(value.optionalFields)) &&
146
- (value.signUpPolicy === undefined ||
147
- (typeof value.signUpPolicy === 'string' && AUTH_SIGN_UP_POLICY_SET.has(value.signUpPolicy)))
148
- );
149
- }
150
-
151
- function isAuthOAuthConfig(value: unknown): boolean {
152
- return (
153
- isRecord(value) &&
154
- typeof value.enabled === 'boolean' &&
155
- typeof value.callbackRoute === 'string' &&
156
- Array.isArray(value.providers) &&
157
- value.providers.every(isAuthOAuthProviderConfig)
158
- );
159
- }
160
-
161
- function isAuthOAuthProviderConfig(value: unknown): boolean {
162
- return (
163
- isRecord(value) &&
164
- typeof value.id === 'string' &&
165
- (AUTH_OAUTH_PROVIDER_SET.has(value.id) || value.id.length > 0) &&
166
- isOptionalString(value.label) &&
167
- isOptionalBoolean(value.enabled) &&
168
- (value.scopes === undefined || isStringArray(value.scopes)) &&
169
- (value.queryParams === undefined || isStringRecord(value.queryParams)) &&
170
- (value.icon === undefined || isIconSpec(value.icon)) &&
171
- (value.credentialsRef === undefined || typeof value.credentialsRef === 'string')
172
- );
173
- }
174
-
175
- function isAuthProfileSpec(value: unknown): boolean {
176
- return (
177
- isRecord(value) &&
178
- isStringArray(value.fields) &&
179
- isOptionalString(value.table) &&
180
- (value.primaryKey === undefined ||
181
- (typeof value.primaryKey === 'string' &&
182
- AUTH_PROFILE_PRIMARY_KEY_STRATEGY_SET.has(value.primaryKey))) &&
183
- (value.createStrategy === undefined ||
184
- (typeof value.createStrategy === 'string' &&
185
- AUTH_PROFILE_CREATE_STRATEGY_SET.has(value.createStrategy))) &&
186
- (value.updateStrategy === undefined ||
187
- (typeof value.updateStrategy === 'string' &&
188
- AUTH_PROFILE_UPDATE_STRATEGY_SET.has(value.updateStrategy)))
189
- );
190
- }
@@ -1,40 +0,0 @@
1
- export function isRecord(value: unknown): value is Record<string, unknown> {
2
- return typeof value === 'object' && value !== null && !Array.isArray(value);
3
- }
4
-
5
- export function isOptionalString(value: unknown): boolean {
6
- return value === undefined || typeof value === 'string';
7
- }
8
-
9
- export function isOptionalNumber(value: unknown): boolean {
10
- return value === undefined || typeof value === 'number';
11
- }
12
-
13
- export function isOptionalBoolean(value: unknown): boolean {
14
- return value === undefined || typeof value === 'boolean';
15
- }
16
-
17
- export function isStringArray(value: unknown): value is string[] {
18
- return Array.isArray(value) && value.every((entry) => typeof entry === 'string');
19
- }
20
-
21
- export function isStringRecord(value: unknown): boolean {
22
- return isRecord(value) && Object.values(value).every((entry) => typeof entry === 'string');
23
- }
24
-
25
- export function isManifestValue(value: unknown): boolean {
26
- if (
27
- value === null ||
28
- typeof value === 'string' ||
29
- typeof value === 'number' ||
30
- typeof value === 'boolean'
31
- ) {
32
- return true;
33
- }
34
-
35
- if (Array.isArray(value)) {
36
- return value.every(isManifestValue);
37
- }
38
-
39
- return isRecord(value) && Object.values(value).every(isManifestValue);
40
- }
@@ -1,12 +0,0 @@
1
- import type { SecretStoreProvider } from './secrets';
2
-
3
- export interface InfraSecretStoreSpec {
4
- provider: SecretStoreProvider;
5
- }
6
-
7
- declare module './types' {
8
- interface InfraManifest {
9
- /** Non-secret provider selection. Bootstrap credentials stay in trusted environment config. */
10
- secretStore?: InfraSecretStoreSpec;
11
- }
12
- }