@ankhorage/contracts 1.15.0 → 1.17.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.
- package/CHANGELOG.md +12 -0
- package/README.md +26 -5
- package/dist/data/apis.d.ts +76 -0
- package/dist/data/apis.d.ts.map +1 -0
- package/dist/data/apis.js +20 -0
- package/dist/data/apis.js.map +1 -0
- package/dist/data/index.d.ts +1 -1
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +1 -1
- package/dist/data/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/nutrition/capture.d.ts +54 -0
- package/dist/nutrition/capture.d.ts.map +1 -0
- package/dist/nutrition/capture.js +8 -0
- package/dist/nutrition/capture.js.map +1 -0
- package/dist/nutrition/common.d.ts +22 -0
- package/dist/nutrition/common.d.ts.map +1 -0
- package/dist/nutrition/common.js +25 -0
- package/dist/nutrition/common.js.map +1 -0
- package/dist/nutrition/index.d.ts +5 -0
- package/dist/nutrition/index.d.ts.map +1 -0
- package/dist/nutrition/index.js +5 -0
- package/dist/nutrition/index.js.map +1 -0
- package/dist/nutrition/products.d.ts +93 -0
- package/dist/nutrition/products.d.ts.map +1 -0
- package/dist/nutrition/products.js +9 -0
- package/dist/nutrition/products.js.map +1 -0
- package/dist/nutrition/review.d.ts +47 -0
- package/dist/nutrition/review.d.ts.map +1 -0
- package/dist/nutrition/review.js +8 -0
- package/dist/nutrition/review.js.map +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/package.json +5 -1
- package/src/contracts.test.ts +0 -49
- package/src/data/apis.test.ts +146 -0
- package/src/data/apis.ts +105 -0
- package/src/data/index.ts +1 -1
- package/src/index.ts +1 -0
- package/src/nutrition/capture.ts +80 -0
- package/src/nutrition/common.ts +51 -0
- package/src/nutrition/index.ts +4 -0
- package/src/nutrition/nutrition.test.ts +137 -0
- package/src/nutrition/products.ts +134 -0
- package/src/nutrition/review.ts +65 -0
- package/src/profile-contract.test.ts +33 -0
- package/src/types.ts +13 -0
- package/dist/data/datasets.d.ts +0 -20
- package/dist/data/datasets.d.ts.map +0 -1
- package/dist/data/datasets.js +0 -2
- package/dist/data/datasets.js.map +0 -1
- package/src/data/datasets.ts +0 -24
package/dist/types.d.ts
CHANGED
|
@@ -111,6 +111,12 @@ export type AuthSignUpPolicy = (typeof AUTH_SIGN_UP_POLICIES)[number];
|
|
|
111
111
|
export declare const AUTH_PROFILE_FIELDS: readonly ["email", "username", "phone", "firstName", "lastName", "displayName", "avatarUrl"];
|
|
112
112
|
export type KnownAuthProfileField = (typeof AUTH_PROFILE_FIELDS)[number];
|
|
113
113
|
export type AuthProfileField = KnownAuthProfileField | (string & {});
|
|
114
|
+
export declare const AUTH_PROFILE_PRIMARY_KEY_STRATEGIES: readonly ["authUserId"];
|
|
115
|
+
export type AuthProfilePrimaryKeyStrategy = (typeof AUTH_PROFILE_PRIMARY_KEY_STRATEGIES)[number];
|
|
116
|
+
export declare const AUTH_PROFILE_CREATE_STRATEGIES: readonly ["trigger", "api", "app"];
|
|
117
|
+
export type AuthProfileCreateStrategy = (typeof AUTH_PROFILE_CREATE_STRATEGIES)[number];
|
|
118
|
+
export declare const AUTH_PROFILE_UPDATE_STRATEGIES: readonly ["api", "app"];
|
|
119
|
+
export type AuthProfileUpdateStrategy = (typeof AUTH_PROFILE_UPDATE_STRATEGIES)[number];
|
|
114
120
|
export interface IconSpec {
|
|
115
121
|
name: string;
|
|
116
122
|
provider?: string;
|
|
@@ -190,6 +196,10 @@ export interface AuthSignUpSpec {
|
|
|
190
196
|
}
|
|
191
197
|
export interface AuthProfileSpec {
|
|
192
198
|
fields: AuthProfileField[];
|
|
199
|
+
table?: string;
|
|
200
|
+
primaryKey?: AuthProfilePrimaryKeyStrategy;
|
|
201
|
+
createStrategy?: AuthProfileCreateStrategy;
|
|
202
|
+
updateStrategy?: AuthProfileUpdateStrategy;
|
|
193
203
|
}
|
|
194
204
|
export interface AuthSpec {
|
|
195
205
|
scope: AuthScope;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -43,4 +43,7 @@ export const AUTH_PROFILE_FIELDS = [
|
|
|
43
43
|
'displayName',
|
|
44
44
|
'avatarUrl',
|
|
45
45
|
];
|
|
46
|
+
export const AUTH_PROFILE_PRIMARY_KEY_STRATEGIES = ['authUserId'];
|
|
47
|
+
export const AUTH_PROFILE_CREATE_STRATEGIES = ['trigger', 'api', 'app'];
|
|
48
|
+
export const AUTH_PROFILE_UPDATE_STRATEGIES = ['api', 'app'];
|
|
46
49
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsIA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAGpE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe;IACf,uBAAuB;IACvB,iBAAiB;IACjB,oBAAoB;IACpB,qBAAqB;IACrB,eAAe;IACf,YAAY;IACZ,OAAO;IACP,iBAAiB;IACjB,gBAAgB;IAChB,aAAa;IACb,WAAW;IACX,SAAS;IACT,aAAa;IACb,mBAAmB;IACnB,gBAAgB;IAChB,aAAa;IACb,WAAW;IACX,mBAAmB;IACnB,kBAAkB;IAClB,QAAQ;IACR,iBAAiB;IACjB,SAAS;CACD,CAAC;AAGX,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAU,CAAU,CAAC;AAIxD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAU,CAAU,CAAC;AAIxD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,CAAU,CAAC;AAGvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAG/D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAQ,CAAU,CAAC;AAInD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAC;AAGxF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC;AAGrD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAG3D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAU,CAAC;AAGrE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAU,CAAU,CAAC;AAIpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAU,CAAC;AAGhF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,YAAY,EAAE,qBAAqB,CAAU,CAAC;AAGpF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,GAAG,wBAAwB;IAC3B,WAAW;IACX,UAAU;IACV,aAAa;IACb,WAAW;CACH,CAAC","sourcesContent":["import type { ColorHarmony } from '@ankhorage/color-theory';\n\nimport type { AuthFlowConfig, AuthIdentifierKind, AuthOAuthConfig, AuthSignUpField } from './auth';\nimport type { ComponentDataBindingRegistry } from './bindings';\nimport type { AppDataManifest, DataSourceRegistry } from './data';\n\nexport interface ThemeModeConfig {\n primaryColor: string;\n harmony: ColorHarmony;\n}\n\nexport interface ThemeConfig {\n id: string;\n name: string;\n light: ThemeModeConfig;\n dark: ThemeModeConfig;\n}\n\nexport type ActionType =\n | 'navigate'\n | 'alert'\n | 'console'\n | 'toggleDarkMode'\n | 'setLanguage'\n | 'search'\n | 'filter';\n\nexport interface NavigateAction {\n type: 'navigate';\n payload: {\n route: string;\n params?: Record<string, number | string>;\n };\n}\n\nexport interface AlertAction {\n type: 'alert';\n payload?: {\n message?: string;\n };\n}\n\nexport interface ConsoleAction {\n type: 'console';\n payload?: Record<string, unknown>;\n}\n\nexport interface ToggleDarkModeAction {\n type: 'toggleDarkMode';\n payload?: never;\n}\n\nexport interface SetLanguageAction {\n type: 'setLanguage';\n payload: {\n locale: string;\n };\n}\n\nexport interface SearchAction {\n type: 'search';\n payload: {\n query: string;\n scope?: string;\n };\n}\n\nexport interface FilterAction {\n type: 'filter';\n payload: {\n filterKey: string;\n filterValue: string;\n };\n}\n\nexport type Action =\n | AlertAction\n | ConsoleAction\n | FilterAction\n | NavigateAction\n | SearchAction\n | SetLanguageAction\n | ToggleDarkModeAction;\n\nexport type ManifestValue =\n | string\n | number\n | boolean\n | null\n | readonly ManifestValue[]\n | { readonly [key: string]: ManifestValue };\n\nexport type ComponentEventPayloadValue = ManifestValue;\n\nexport interface ComponentEventDto<\n TType extends string = string,\n TPayload extends object = Record<string, ComponentEventPayloadValue>,\n> {\n readonly type: TType;\n readonly sourceNodeId: string;\n readonly payload: TPayload;\n}\n\nexport type FormSubmitValues = Record<string, ComponentEventPayloadValue>;\n\nexport type FormSubmitEventDto = ComponentEventDto<\n 'form.submit',\n {\n readonly values: FormSubmitValues;\n }\n>;\n\nexport type ButtonPressEventDto = ComponentEventDto<'button.press', Record<string, never>>;\n\nexport interface CollectionItemPressPayload {\n readonly itemId: string | number;\n readonly item: Record<string, ComponentEventPayloadValue>;\n}\n\nexport type CollectionItemPressEventDto = ComponentEventDto<\n 'collection.itemPress',\n CollectionItemPressPayload\n>;\n\nexport type ComponentEventDtoKind =\n | ButtonPressEventDto['type']\n | CollectionItemPressEventDto['type']\n | FormSubmitEventDto['type'];\n\nexport type KnownComponentEventDto =\n | ButtonPressEventDto\n | CollectionItemPressEventDto\n | FormSubmitEventDto;\n\nexport const NAVIGATOR_TYPES = ['stack', 'tabs', 'drawer'] as const;\nexport type NavigatorType = (typeof NAVIGATOR_TYPES)[number];\n\nexport const APP_CATEGORIES = [\n 'books_reading',\n 'business_productivity',\n 'developer_tools',\n 'education_learning',\n 'entertainment_media',\n 'finance_money',\n 'food_drink',\n 'games',\n 'graphics_design',\n 'health_fitness',\n 'kids_family',\n 'lifestyle',\n 'medical',\n 'music_audio',\n 'navigation_travel',\n 'news_magazines',\n 'photo_video',\n 'reference',\n 'shopping_commerce',\n 'social_community',\n 'sports',\n 'utilities_tools',\n 'weather',\n] as const;\nexport type AppCategory = (typeof APP_CATEGORIES)[number];\n\nexport const DEPLOYMENT_TARGETS = ['minikube'] as const;\nexport type KnownDeploymentTarget = (typeof DEPLOYMENT_TARGETS)[number];\nexport type DeploymentTarget = KnownDeploymentTarget | (string & {});\n\nexport const DATABASE_PROVIDERS = ['supabase'] as const;\nexport type KnownDatabaseProvider = (typeof DATABASE_PROVIDERS)[number];\nexport type DatabaseProvider = KnownDatabaseProvider | (string & {});\n\nexport const DATABASE_TIERS = ['dev', 'prod'] as const;\nexport type DatabaseTier = (typeof DATABASE_TIERS)[number];\n\nexport const STORAGE_PROVIDERS = ['auto', 's3', 'r2'] as const;\nexport type StorageProvider = (typeof STORAGE_PROVIDERS)[number];\n\nexport const STATE_PROVIDERS = ['legend'] as const;\nexport type KnownStateProvider = (typeof STATE_PROVIDERS)[number];\nexport type StateProvider = KnownStateProvider | (string & {});\n\nexport const STATE_PERSISTENCE_MODES = ['none', 'local', 'secure', 'database'] as const;\nexport type StatePersistenceMode = (typeof STATE_PERSISTENCE_MODES)[number];\n\nexport const AUTHZ_KINDS = ['RBAC', 'ABAC'] as const;\nexport type AuthzKind = (typeof AUTHZ_KINDS)[number];\n\nexport const AUTHZ_ENGINES = ['cerbos', 'native'] as const;\nexport type AuthzEngine = (typeof AUTHZ_ENGINES)[number];\n\nexport const AUTH_SCOPES = ['global', 'none', 'integrated'] as const;\nexport type AuthScope = (typeof AUTH_SCOPES)[number];\n\nexport const AUTH_PROVIDERS = ['supabase'] as const;\nexport type KnownAuthProvider = (typeof AUTH_PROVIDERS)[number];\nexport type AuthProvider = KnownAuthProvider | (string & {});\n\nexport const AUTH_SIGN_IN_IDENTIFIERS = ['email', 'username', 'phone'] as const;\nexport type AuthSignInIdentifier = AuthIdentifierKind;\n\nexport const AUTH_SIGN_UP_POLICIES = ['autoSignIn', 'requireVerification'] as const;\nexport type AuthSignUpPolicy = (typeof AUTH_SIGN_UP_POLICIES)[number];\n\nexport const AUTH_PROFILE_FIELDS = [\n ...AUTH_SIGN_IN_IDENTIFIERS,\n 'firstName',\n 'lastName',\n 'displayName',\n 'avatarUrl',\n] as const;\nexport type KnownAuthProfileField = (typeof AUTH_PROFILE_FIELDS)[number];\nexport type AuthProfileField = KnownAuthProfileField | (string & {});\n\nexport interface IconSpec {\n name: string;\n provider?: string;\n size?: number | string;\n color?: string;\n}\n\nexport interface UiNode {\n id: string;\n type: string;\n alias?: string;\n props?: Record<string, unknown>;\n children?: UiNode[];\n style?: Record<string, number | string>;\n}\n\nexport interface ScreenSpec {\n id: string;\n name: string;\n title?: string;\n description?: string;\n root: UiNode;\n}\n\nexport interface NavigatorSpec {\n type: NavigatorType;\n initialRouteName?: string;\n routes: RouteDefinition[];\n options?: Record<string, unknown>;\n}\n\nexport interface RouteDefinition {\n name: string;\n path?: string;\n label?: string;\n icon?: IconSpec;\n hideInTabBar?: boolean;\n guards?: string[];\n screenId?: string;\n navigator?: NavigatorSpec;\n}\n\nexport type SplashScreenResizeMode = 'contain' | 'cover' | 'native';\n\nexport interface SplashScreenAssetSpec {\n readonly image?: string;\n readonly imageWidth?: number;\n readonly resizeMode?: SplashScreenResizeMode;\n}\n\nexport interface SplashScreenModeSpec extends SplashScreenAssetSpec {\n readonly backgroundColor?: string;\n}\n\nexport interface SplashScreenSpec extends SplashScreenModeSpec {\n readonly dark?: SplashScreenModeSpec;\n}\n\nexport interface DeploymentSpec {\n target: DeploymentTarget;\n monitoring: boolean;\n}\n\nexport interface DatabaseSpec {\n provider: DatabaseProvider;\n tier: DatabaseTier;\n}\n\nexport interface StorageSpec {\n provider: StorageProvider;\n buckets: string[];\n}\n\nexport interface StateSpec {\n readonly provider: StateProvider;\n readonly persistence?: StatePersistenceMode;\n}\n\nexport interface AuthzSpec {\n kind: AuthzKind;\n engine: AuthzEngine;\n}\n\nexport interface AuthSignInSpec {\n identifiers: AuthSignInIdentifier[];\n}\n\nexport interface AuthSignUpSpec {\n requiredFields: AuthSignUpField[];\n optionalFields?: AuthSignUpField[];\n signUpPolicy?: AuthSignUpPolicy;\n}\n\nexport interface AuthProfileSpec {\n fields: AuthProfileField[];\n}\n\nexport interface AuthSpec {\n scope: AuthScope;\n provider: AuthProvider;\n authorization: AuthzSpec;\n flow?: AuthFlowConfig;\n signIn?: AuthSignInSpec;\n signUp?: AuthSignUpSpec;\n oauth?: AuthOAuthConfig;\n profile?: AuthProfileSpec;\n}\n\nexport interface NetworkingSpec {\n domain?: string;\n cdn: boolean;\n}\n\nexport interface InfraManifest {\n deployment?: DeploymentSpec;\n auth?: AuthSpec;\n database?: DatabaseSpec;\n storage?: StorageSpec;\n state?: StateSpec;\n networking?: NetworkingSpec;\n plugins: string[];\n pluginsConfig?: Record<string, unknown>;\n}\n\nexport interface AppManifest {\n metadata: {\n name: string;\n slug: string;\n version: string;\n themeId: string;\n created?: string;\n updated?: string;\n };\n themes: ThemeConfig[];\n activeThemeId: string;\n activeThemeMode?: 'dark' | 'light';\n splashScreen?: SplashScreenSpec;\n infra: InfraManifest;\n navigator: NavigatorSpec;\n screens: Record<string, ScreenSpec>;\n data?: AppDataManifest;\n dataSources?: DataSourceRegistry;\n dataBindings?: ComponentDataBindingRegistry;\n settings: {\n apiBaseUrl?: string;\n localization: {\n defaultLocale: string;\n locales: string[];\n };\n authFlow: AuthFlowConfig;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsIA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAGpE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe;IACf,uBAAuB;IACvB,iBAAiB;IACjB,oBAAoB;IACpB,qBAAqB;IACrB,eAAe;IACf,YAAY;IACZ,OAAO;IACP,iBAAiB;IACjB,gBAAgB;IAChB,aAAa;IACb,WAAW;IACX,SAAS;IACT,aAAa;IACb,mBAAmB;IACnB,gBAAgB;IAChB,aAAa;IACb,WAAW;IACX,mBAAmB;IACnB,kBAAkB;IAClB,QAAQ;IACR,iBAAiB;IACjB,SAAS;CACD,CAAC;AAGX,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAU,CAAU,CAAC;AAIxD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAU,CAAU,CAAC;AAIxD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,CAAU,CAAC;AAGvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAG/D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAQ,CAAU,CAAC;AAInD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAC;AAGxF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC;AAGrD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAG3D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAU,CAAC;AAGrE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAU,CAAU,CAAC;AAIpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAU,CAAC;AAGhF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,YAAY,EAAE,qBAAqB,CAAU,CAAC;AAGpF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,GAAG,wBAAwB;IAC3B,WAAW;IACX,UAAU;IACV,aAAa;IACb,WAAW;CACH,CAAC;AAIX,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,YAAY,CAAU,CAAC;AAG3E,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAGjF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,KAAK,EAAE,KAAK,CAAU,CAAC","sourcesContent":["import type { ColorHarmony } from '@ankhorage/color-theory';\n\nimport type { AuthFlowConfig, AuthIdentifierKind, AuthOAuthConfig, AuthSignUpField } from './auth';\nimport type { ComponentDataBindingRegistry } from './bindings';\nimport type { AppDataManifest, DataSourceRegistry } from './data';\n\nexport interface ThemeModeConfig {\n primaryColor: string;\n harmony: ColorHarmony;\n}\n\nexport interface ThemeConfig {\n id: string;\n name: string;\n light: ThemeModeConfig;\n dark: ThemeModeConfig;\n}\n\nexport type ActionType =\n | 'navigate'\n | 'alert'\n | 'console'\n | 'toggleDarkMode'\n | 'setLanguage'\n | 'search'\n | 'filter';\n\nexport interface NavigateAction {\n type: 'navigate';\n payload: {\n route: string;\n params?: Record<string, number | string>;\n };\n}\n\nexport interface AlertAction {\n type: 'alert';\n payload?: {\n message?: string;\n };\n}\n\nexport interface ConsoleAction {\n type: 'console';\n payload?: Record<string, unknown>;\n}\n\nexport interface ToggleDarkModeAction {\n type: 'toggleDarkMode';\n payload?: never;\n}\n\nexport interface SetLanguageAction {\n type: 'setLanguage';\n payload: {\n locale: string;\n };\n}\n\nexport interface SearchAction {\n type: 'search';\n payload: {\n query: string;\n scope?: string;\n };\n}\n\nexport interface FilterAction {\n type: 'filter';\n payload: {\n filterKey: string;\n filterValue: string;\n };\n}\n\nexport type Action =\n | AlertAction\n | ConsoleAction\n | FilterAction\n | NavigateAction\n | SearchAction\n | SetLanguageAction\n | ToggleDarkModeAction;\n\nexport type ManifestValue =\n | string\n | number\n | boolean\n | null\n | readonly ManifestValue[]\n | { readonly [key: string]: ManifestValue };\n\nexport type ComponentEventPayloadValue = ManifestValue;\n\nexport interface ComponentEventDto<\n TType extends string = string,\n TPayload extends object = Record<string, ComponentEventPayloadValue>,\n> {\n readonly type: TType;\n readonly sourceNodeId: string;\n readonly payload: TPayload;\n}\n\nexport type FormSubmitValues = Record<string, ComponentEventPayloadValue>;\n\nexport type FormSubmitEventDto = ComponentEventDto<\n 'form.submit',\n {\n readonly values: FormSubmitValues;\n }\n>;\n\nexport type ButtonPressEventDto = ComponentEventDto<'button.press', Record<string, never>>;\n\nexport interface CollectionItemPressPayload {\n readonly itemId: string | number;\n readonly item: Record<string, ComponentEventPayloadValue>;\n}\n\nexport type CollectionItemPressEventDto = ComponentEventDto<\n 'collection.itemPress',\n CollectionItemPressPayload\n>;\n\nexport type ComponentEventDtoKind =\n | ButtonPressEventDto['type']\n | CollectionItemPressEventDto['type']\n | FormSubmitEventDto['type'];\n\nexport type KnownComponentEventDto =\n | ButtonPressEventDto\n | CollectionItemPressEventDto\n | FormSubmitEventDto;\n\nexport const NAVIGATOR_TYPES = ['stack', 'tabs', 'drawer'] as const;\nexport type NavigatorType = (typeof NAVIGATOR_TYPES)[number];\n\nexport const APP_CATEGORIES = [\n 'books_reading',\n 'business_productivity',\n 'developer_tools',\n 'education_learning',\n 'entertainment_media',\n 'finance_money',\n 'food_drink',\n 'games',\n 'graphics_design',\n 'health_fitness',\n 'kids_family',\n 'lifestyle',\n 'medical',\n 'music_audio',\n 'navigation_travel',\n 'news_magazines',\n 'photo_video',\n 'reference',\n 'shopping_commerce',\n 'social_community',\n 'sports',\n 'utilities_tools',\n 'weather',\n] as const;\nexport type AppCategory = (typeof APP_CATEGORIES)[number];\n\nexport const DEPLOYMENT_TARGETS = ['minikube'] as const;\nexport type KnownDeploymentTarget = (typeof DEPLOYMENT_TARGETS)[number];\nexport type DeploymentTarget = KnownDeploymentTarget | (string & {});\n\nexport const DATABASE_PROVIDERS = ['supabase'] as const;\nexport type KnownDatabaseProvider = (typeof DATABASE_PROVIDERS)[number];\nexport type DatabaseProvider = KnownDatabaseProvider | (string & {});\n\nexport const DATABASE_TIERS = ['dev', 'prod'] as const;\nexport type DatabaseTier = (typeof DATABASE_TIERS)[number];\n\nexport const STORAGE_PROVIDERS = ['auto', 's3', 'r2'] as const;\nexport type StorageProvider = (typeof STORAGE_PROVIDERS)[number];\n\nexport const STATE_PROVIDERS = ['legend'] as const;\nexport type KnownStateProvider = (typeof STATE_PROVIDERS)[number];\nexport type StateProvider = KnownStateProvider | (string & {});\n\nexport const STATE_PERSISTENCE_MODES = ['none', 'local', 'secure', 'database'] as const;\nexport type StatePersistenceMode = (typeof STATE_PERSISTENCE_MODES)[number];\n\nexport const AUTHZ_KINDS = ['RBAC', 'ABAC'] as const;\nexport type AuthzKind = (typeof AUTHZ_KINDS)[number];\n\nexport const AUTHZ_ENGINES = ['cerbos', 'native'] as const;\nexport type AuthzEngine = (typeof AUTHZ_ENGINES)[number];\n\nexport const AUTH_SCOPES = ['global', 'none', 'integrated'] as const;\nexport type AuthScope = (typeof AUTH_SCOPES)[number];\n\nexport const AUTH_PROVIDERS = ['supabase'] as const;\nexport type KnownAuthProvider = (typeof AUTH_PROVIDERS)[number];\nexport type AuthProvider = KnownAuthProvider | (string & {});\n\nexport const AUTH_SIGN_IN_IDENTIFIERS = ['email', 'username', 'phone'] as const;\nexport type AuthSignInIdentifier = AuthIdentifierKind;\n\nexport const AUTH_SIGN_UP_POLICIES = ['autoSignIn', 'requireVerification'] as const;\nexport type AuthSignUpPolicy = (typeof AUTH_SIGN_UP_POLICIES)[number];\n\nexport const AUTH_PROFILE_FIELDS = [\n ...AUTH_SIGN_IN_IDENTIFIERS,\n 'firstName',\n 'lastName',\n 'displayName',\n 'avatarUrl',\n] as const;\nexport type KnownAuthProfileField = (typeof AUTH_PROFILE_FIELDS)[number];\nexport type AuthProfileField = KnownAuthProfileField | (string & {});\n\nexport const AUTH_PROFILE_PRIMARY_KEY_STRATEGIES = ['authUserId'] as const;\nexport type AuthProfilePrimaryKeyStrategy = (typeof AUTH_PROFILE_PRIMARY_KEY_STRATEGIES)[number];\n\nexport const AUTH_PROFILE_CREATE_STRATEGIES = ['trigger', 'api', 'app'] as const;\nexport type AuthProfileCreateStrategy = (typeof AUTH_PROFILE_CREATE_STRATEGIES)[number];\n\nexport const AUTH_PROFILE_UPDATE_STRATEGIES = ['api', 'app'] as const;\nexport type AuthProfileUpdateStrategy = (typeof AUTH_PROFILE_UPDATE_STRATEGIES)[number];\n\nexport interface IconSpec {\n name: string;\n provider?: string;\n size?: number | string;\n color?: string;\n}\n\nexport interface UiNode {\n id: string;\n type: string;\n alias?: string;\n props?: Record<string, unknown>;\n children?: UiNode[];\n style?: Record<string, number | string>;\n}\n\nexport interface ScreenSpec {\n id: string;\n name: string;\n title?: string;\n description?: string;\n root: UiNode;\n}\n\nexport interface NavigatorSpec {\n type: NavigatorType;\n initialRouteName?: string;\n routes: RouteDefinition[];\n options?: Record<string, unknown>;\n}\n\nexport interface RouteDefinition {\n name: string;\n path?: string;\n label?: string;\n icon?: IconSpec;\n hideInTabBar?: boolean;\n guards?: string[];\n screenId?: string;\n navigator?: NavigatorSpec;\n}\n\nexport type SplashScreenResizeMode = 'contain' | 'cover' | 'native';\n\nexport interface SplashScreenAssetSpec {\n readonly image?: string;\n readonly imageWidth?: number;\n readonly resizeMode?: SplashScreenResizeMode;\n}\n\nexport interface SplashScreenModeSpec extends SplashScreenAssetSpec {\n readonly backgroundColor?: string;\n}\n\nexport interface SplashScreenSpec extends SplashScreenModeSpec {\n readonly dark?: SplashScreenModeSpec;\n}\n\nexport interface DeploymentSpec {\n target: DeploymentTarget;\n monitoring: boolean;\n}\n\nexport interface DatabaseSpec {\n provider: DatabaseProvider;\n tier: DatabaseTier;\n}\n\nexport interface StorageSpec {\n provider: StorageProvider;\n buckets: string[];\n}\n\nexport interface StateSpec {\n readonly provider: StateProvider;\n readonly persistence?: StatePersistenceMode;\n}\n\nexport interface AuthzSpec {\n kind: AuthzKind;\n engine: AuthzEngine;\n}\n\nexport interface AuthSignInSpec {\n identifiers: AuthSignInIdentifier[];\n}\n\nexport interface AuthSignUpSpec {\n requiredFields: AuthSignUpField[];\n optionalFields?: AuthSignUpField[];\n signUpPolicy?: AuthSignUpPolicy;\n}\n\nexport interface AuthProfileSpec {\n fields: AuthProfileField[];\n table?: string;\n primaryKey?: AuthProfilePrimaryKeyStrategy;\n createStrategy?: AuthProfileCreateStrategy;\n updateStrategy?: AuthProfileUpdateStrategy;\n}\n\nexport interface AuthSpec {\n scope: AuthScope;\n provider: AuthProvider;\n authorization: AuthzSpec;\n flow?: AuthFlowConfig;\n signIn?: AuthSignInSpec;\n signUp?: AuthSignUpSpec;\n oauth?: AuthOAuthConfig;\n profile?: AuthProfileSpec;\n}\n\nexport interface NetworkingSpec {\n domain?: string;\n cdn: boolean;\n}\n\nexport interface InfraManifest {\n deployment?: DeploymentSpec;\n auth?: AuthSpec;\n database?: DatabaseSpec;\n storage?: StorageSpec;\n state?: StateSpec;\n networking?: NetworkingSpec;\n plugins: string[];\n pluginsConfig?: Record<string, unknown>;\n}\n\nexport interface AppManifest {\n metadata: {\n name: string;\n slug: string;\n version: string;\n themeId: string;\n created?: string;\n updated?: string;\n };\n themes: ThemeConfig[];\n activeThemeId: string;\n activeThemeMode?: 'dark' | 'light';\n splashScreen?: SplashScreenSpec;\n infra: InfraManifest;\n navigator: NavigatorSpec;\n screens: Record<string, ScreenSpec>;\n data?: AppDataManifest;\n dataSources?: DataSourceRegistry;\n dataBindings?: ComponentDataBindingRegistry;\n settings: {\n apiBaseUrl?: string;\n localization: {\n defaultLocale: string;\n locales: string[];\n };\n authFlow: AuthFlowConfig;\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ankhorage/contracts",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@ankhorage/color-theory": "^0.0.7"
|
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"types": "./dist/db.d.ts",
|
|
34
34
|
"default": "./dist/db.js"
|
|
35
35
|
},
|
|
36
|
+
"./nutrition": {
|
|
37
|
+
"types": "./dist/nutrition/index.d.ts",
|
|
38
|
+
"default": "./dist/nutrition/index.js"
|
|
39
|
+
},
|
|
36
40
|
"./state": {
|
|
37
41
|
"types": "./dist/state.d.ts",
|
|
38
42
|
"default": "./dist/state.js"
|
package/src/contracts.test.ts
CHANGED
|
@@ -6,11 +6,7 @@ import { describe, expect, it } from 'bun:test';
|
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
8
|
APP_CATEGORIES,
|
|
9
|
-
APP_DATASET_OPERATIONS,
|
|
10
9
|
type AppCategory,
|
|
11
|
-
type AppDataManifest,
|
|
12
|
-
type AppDatasetDefinition,
|
|
13
|
-
type AppDatasetOperation,
|
|
14
10
|
type AppManifest,
|
|
15
11
|
AUTH_PROVIDERS,
|
|
16
12
|
AUTH_SIGN_IN_IDENTIFIERS,
|
|
@@ -24,7 +20,6 @@ import {
|
|
|
24
20
|
type DbAdapter,
|
|
25
21
|
type DbAdminAdapter,
|
|
26
22
|
type DbChangeEvent,
|
|
27
|
-
type DbCollectionDefinition,
|
|
28
23
|
type DbRealtimeAdapter,
|
|
29
24
|
DEPLOYMENT_TARGETS,
|
|
30
25
|
type FormSubmitEventDto,
|
|
@@ -136,50 +131,6 @@ describe('contracts', () => {
|
|
|
136
131
|
expect(JSON.parse(JSON.stringify(manifest))).toEqual({ splashScreen });
|
|
137
132
|
});
|
|
138
133
|
|
|
139
|
-
it('accepts app-owned dataset manifests backed by db collection definitions', () => {
|
|
140
|
-
const operation: AppDatasetOperation = 'list';
|
|
141
|
-
const collection: DbCollectionDefinition = {
|
|
142
|
-
name: 'poker_situations',
|
|
143
|
-
primaryKey: 'id',
|
|
144
|
-
fields: [
|
|
145
|
-
{ name: 'title', type: 'text', required: true },
|
|
146
|
-
{ name: 'description', type: 'text', required: true },
|
|
147
|
-
{ name: 'difficulty', type: 'text' },
|
|
148
|
-
{ name: 'availableActions', type: 'json' },
|
|
149
|
-
{ name: 'correctAction', type: 'text' },
|
|
150
|
-
],
|
|
151
|
-
};
|
|
152
|
-
const dataset: AppDatasetDefinition = {
|
|
153
|
-
id: 'poker_situations',
|
|
154
|
-
label: 'Poker situations',
|
|
155
|
-
description: 'App-owned poker trainer situations.',
|
|
156
|
-
collection,
|
|
157
|
-
operations: [operation, 'read'],
|
|
158
|
-
seed: [
|
|
159
|
-
{
|
|
160
|
-
title: 'Button faces a raise',
|
|
161
|
-
description: 'Choose the best action with position and stack depth in mind.',
|
|
162
|
-
difficulty: 'beginner',
|
|
163
|
-
availableActions: [
|
|
164
|
-
{ label: 'Fold', value: 'fold' },
|
|
165
|
-
{ label: 'Call', value: 'call' },
|
|
166
|
-
{ label: 'Raise', value: 'raise' },
|
|
167
|
-
],
|
|
168
|
-
correctAction: 'raise',
|
|
169
|
-
},
|
|
170
|
-
],
|
|
171
|
-
};
|
|
172
|
-
const data: AppDataManifest = {
|
|
173
|
-
datasets: {
|
|
174
|
-
[dataset.id]: dataset,
|
|
175
|
-
},
|
|
176
|
-
};
|
|
177
|
-
const manifest: Pick<AppManifest, 'data'> = { data };
|
|
178
|
-
|
|
179
|
-
expect(APP_DATASET_OPERATIONS).toEqual(['create', 'delete', 'list', 'read', 'update']);
|
|
180
|
-
expect(JSON.parse(JSON.stringify(manifest))).toEqual({ data });
|
|
181
|
-
});
|
|
182
|
-
|
|
183
134
|
it('accepts provider-neutral state infra selection on app manifests', () => {
|
|
184
135
|
const state: StateSpec = {
|
|
185
136
|
provider: 'legend',
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { describe, expect, test } from 'bun:test';
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
AppApiDefinition,
|
|
5
|
+
AppApiEndpointDefinition,
|
|
6
|
+
AppApiManifest,
|
|
7
|
+
AppGeneratedApiDefinition,
|
|
8
|
+
} from './apis';
|
|
9
|
+
import { APP_API_ENDPOINT_INTENTS, APP_API_ENDPOINT_METHODS, APP_API_KINDS } from './apis';
|
|
10
|
+
|
|
11
|
+
const crudEndpoints = [
|
|
12
|
+
{
|
|
13
|
+
id: 'players.list',
|
|
14
|
+
method: 'GET',
|
|
15
|
+
path: '/',
|
|
16
|
+
intent: 'list',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 'players.create',
|
|
20
|
+
method: 'POST',
|
|
21
|
+
path: '/',
|
|
22
|
+
intent: 'create',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'players.read',
|
|
26
|
+
method: 'GET',
|
|
27
|
+
path: '/{id}',
|
|
28
|
+
intent: 'read',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: 'players.update',
|
|
32
|
+
method: 'PATCH',
|
|
33
|
+
path: '/{id}',
|
|
34
|
+
intent: 'update',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: 'players.delete',
|
|
38
|
+
method: 'DELETE',
|
|
39
|
+
path: '/{id}',
|
|
40
|
+
intent: 'delete',
|
|
41
|
+
},
|
|
42
|
+
] satisfies readonly AppApiEndpointDefinition[];
|
|
43
|
+
|
|
44
|
+
describe('app API authoring contracts', () => {
|
|
45
|
+
test('exports stable API authoring constants', () => {
|
|
46
|
+
expect(APP_API_KINDS).toEqual(['external', 'generated']);
|
|
47
|
+
expect(APP_API_ENDPOINT_METHODS).toEqual([
|
|
48
|
+
'DELETE',
|
|
49
|
+
'GET',
|
|
50
|
+
'HEAD',
|
|
51
|
+
'OPTIONS',
|
|
52
|
+
'PATCH',
|
|
53
|
+
'POST',
|
|
54
|
+
'PUT',
|
|
55
|
+
]);
|
|
56
|
+
expect(APP_API_ENDPOINT_INTENTS).toEqual([
|
|
57
|
+
'create',
|
|
58
|
+
'custom',
|
|
59
|
+
'delete',
|
|
60
|
+
'list',
|
|
61
|
+
'read',
|
|
62
|
+
'update',
|
|
63
|
+
]);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test('serializes generated APIs with a CRUD preset and explicit custom endpoints', () => {
|
|
67
|
+
const generatedApi: AppGeneratedApiDefinition = {
|
|
68
|
+
id: 'players',
|
|
69
|
+
kind: 'generated',
|
|
70
|
+
label: 'Players',
|
|
71
|
+
basePath: '/api/players',
|
|
72
|
+
preset: 'crud',
|
|
73
|
+
resource: {
|
|
74
|
+
kind: 'collection',
|
|
75
|
+
collection: {
|
|
76
|
+
name: 'players',
|
|
77
|
+
primaryKey: 'id',
|
|
78
|
+
fields: [
|
|
79
|
+
{ name: 'id', type: 'uuid', required: true },
|
|
80
|
+
{ name: 'name', type: 'text', required: true },
|
|
81
|
+
{ name: 'score', type: 'number' },
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
seed: [
|
|
85
|
+
{
|
|
86
|
+
id: 'player-1',
|
|
87
|
+
name: 'Ada',
|
|
88
|
+
score: 42,
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
endpoints: [
|
|
93
|
+
...crudEndpoints,
|
|
94
|
+
{
|
|
95
|
+
id: 'players.leaderboard',
|
|
96
|
+
method: 'GET',
|
|
97
|
+
path: '/leaderboard',
|
|
98
|
+
intent: 'custom',
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
const manifest: AppApiManifest = {
|
|
103
|
+
apis: {
|
|
104
|
+
players: generatedApi,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
expect(JSON.parse(JSON.stringify(manifest))).toEqual({
|
|
109
|
+
apis: {
|
|
110
|
+
players: generatedApi,
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
expect(manifest.apis?.players?.endpoints.map((endpoint) => endpoint.path)).toEqual([
|
|
114
|
+
'/',
|
|
115
|
+
'/',
|
|
116
|
+
'/{id}',
|
|
117
|
+
'/{id}',
|
|
118
|
+
'/{id}',
|
|
119
|
+
'/leaderboard',
|
|
120
|
+
]);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
test('serializes external APIs without generated resource definitions', () => {
|
|
124
|
+
const externalApi: AppApiDefinition = {
|
|
125
|
+
id: 'stripe',
|
|
126
|
+
kind: 'external',
|
|
127
|
+
label: 'Stripe',
|
|
128
|
+
basePath: '/api/stripe',
|
|
129
|
+
baseUrl: 'https://api.stripe.com',
|
|
130
|
+
endpoints: [
|
|
131
|
+
{
|
|
132
|
+
id: 'stripe.createCheckoutSession',
|
|
133
|
+
method: 'POST',
|
|
134
|
+
path: '/checkout/sessions',
|
|
135
|
+
intent: 'custom',
|
|
136
|
+
auth: {
|
|
137
|
+
required: true,
|
|
138
|
+
permissions: ['payments:create'],
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
expect(JSON.parse(JSON.stringify(externalApi))).toEqual(externalApi);
|
|
145
|
+
});
|
|
146
|
+
});
|
package/src/data/apis.ts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { DbCollectionDefinition } from '../db';
|
|
2
|
+
import type { DataOperationRequest, DataOperationResponse } from './operations';
|
|
3
|
+
import type { DataContractValue } from './values';
|
|
4
|
+
|
|
5
|
+
export const APP_API_KINDS = ['external', 'generated'] as const;
|
|
6
|
+
export type AppApiKind = (typeof APP_API_KINDS)[number];
|
|
7
|
+
|
|
8
|
+
export const APP_API_GENERATED_PRESETS = ['crud'] as const;
|
|
9
|
+
export type AppApiGeneratedPreset = (typeof APP_API_GENERATED_PRESETS)[number];
|
|
10
|
+
|
|
11
|
+
export const APP_API_ENDPOINT_METHODS = [
|
|
12
|
+
'DELETE',
|
|
13
|
+
'GET',
|
|
14
|
+
'HEAD',
|
|
15
|
+
'OPTIONS',
|
|
16
|
+
'PATCH',
|
|
17
|
+
'POST',
|
|
18
|
+
'PUT',
|
|
19
|
+
] as const;
|
|
20
|
+
export type AppApiEndpointMethod = (typeof APP_API_ENDPOINT_METHODS)[number];
|
|
21
|
+
|
|
22
|
+
export const APP_API_ENDPOINT_INTENTS = [
|
|
23
|
+
'create',
|
|
24
|
+
'custom',
|
|
25
|
+
'delete',
|
|
26
|
+
'list',
|
|
27
|
+
'read',
|
|
28
|
+
'update',
|
|
29
|
+
] as const;
|
|
30
|
+
export type AppApiEndpointIntent = (typeof APP_API_ENDPOINT_INTENTS)[number];
|
|
31
|
+
|
|
32
|
+
export type AppApiId = string;
|
|
33
|
+
export type AppApiEndpointId = string;
|
|
34
|
+
export type AppApiSeedRecord = Readonly<Record<string, DataContractValue>>;
|
|
35
|
+
|
|
36
|
+
export interface AppApiAuthRequirement {
|
|
37
|
+
readonly required?: boolean;
|
|
38
|
+
readonly roles?: readonly string[];
|
|
39
|
+
readonly permissions?: readonly string[];
|
|
40
|
+
readonly policy?: string;
|
|
41
|
+
readonly metadata?: DataContractValue;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface AppApiCollectionResourceDefinition {
|
|
45
|
+
readonly kind: 'collection';
|
|
46
|
+
readonly collection: DbCollectionDefinition;
|
|
47
|
+
readonly seed?: readonly AppApiSeedRecord[];
|
|
48
|
+
readonly metadata?: DataContractValue;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type AppApiResourceDefinition = AppApiCollectionResourceDefinition;
|
|
52
|
+
|
|
53
|
+
export interface AppApiEndpointDefinition {
|
|
54
|
+
readonly id: AppApiEndpointId;
|
|
55
|
+
readonly label?: string;
|
|
56
|
+
readonly description?: string;
|
|
57
|
+
readonly method: AppApiEndpointMethod;
|
|
58
|
+
/**
|
|
59
|
+
* Path relative to the API base path. Use `/` for the base collection endpoint.
|
|
60
|
+
*/
|
|
61
|
+
readonly path: string;
|
|
62
|
+
readonly intent?: AppApiEndpointIntent;
|
|
63
|
+
readonly request?: DataOperationRequest;
|
|
64
|
+
readonly response?: DataOperationResponse;
|
|
65
|
+
readonly auth?: AppApiAuthRequirement;
|
|
66
|
+
readonly metadata?: DataContractValue;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
interface AppApiDefinitionBase {
|
|
70
|
+
readonly id: AppApiId;
|
|
71
|
+
readonly kind: AppApiKind;
|
|
72
|
+
readonly label?: string;
|
|
73
|
+
readonly description?: string;
|
|
74
|
+
readonly basePath: string;
|
|
75
|
+
readonly endpoints: readonly AppApiEndpointDefinition[];
|
|
76
|
+
readonly auth?: AppApiAuthRequirement;
|
|
77
|
+
readonly metadata?: DataContractValue;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface AppGeneratedApiDefinition extends AppApiDefinitionBase {
|
|
81
|
+
readonly kind: 'generated';
|
|
82
|
+
/**
|
|
83
|
+
* Preset used by authoring tools to seed standard endpoints. The resulting
|
|
84
|
+
* serialized API still stores concrete `endpoints[]` so custom endpoints can
|
|
85
|
+
* live next to generated CRUD operations.
|
|
86
|
+
*/
|
|
87
|
+
readonly preset?: AppApiGeneratedPreset;
|
|
88
|
+
readonly resource?: AppApiResourceDefinition;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface AppExternalApiDefinition extends AppApiDefinitionBase {
|
|
92
|
+
readonly kind: 'external';
|
|
93
|
+
readonly baseUrl?: string;
|
|
94
|
+
readonly openApiUrl?: string;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export type AppApiDefinition = AppExternalApiDefinition | AppGeneratedApiDefinition;
|
|
98
|
+
|
|
99
|
+
export type AppApiRegistry = Readonly<Record<AppApiId, AppApiDefinition>>;
|
|
100
|
+
|
|
101
|
+
export interface AppDataManifest {
|
|
102
|
+
readonly apis?: AppApiRegistry;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export type AppApiManifest = AppDataManifest;
|
package/src/data/index.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
NutritionBarcode,
|
|
3
|
+
NutritionCaptureSubmissionId,
|
|
4
|
+
NutritionIsoDateTime,
|
|
5
|
+
NutritionJsonValue,
|
|
6
|
+
NutritionProductId,
|
|
7
|
+
NutritionUserId,
|
|
8
|
+
} from './common';
|
|
9
|
+
import type {
|
|
10
|
+
NutritionFactsPer100g,
|
|
11
|
+
NutritionImageEvidence,
|
|
12
|
+
NutritionIngredientStatement,
|
|
13
|
+
NutritionServing,
|
|
14
|
+
NutritionStoreObservation,
|
|
15
|
+
} from './products';
|
|
16
|
+
|
|
17
|
+
export const NUTRITION_CAPTURE_SUBMISSION_STATUSES = [
|
|
18
|
+
'queued',
|
|
19
|
+
'needs_more_data',
|
|
20
|
+
'accepted',
|
|
21
|
+
'rejected',
|
|
22
|
+
'merged',
|
|
23
|
+
] as const;
|
|
24
|
+
export type NutritionCaptureSubmissionStatus =
|
|
25
|
+
(typeof NUTRITION_CAPTURE_SUBMISSION_STATUSES)[number];
|
|
26
|
+
|
|
27
|
+
export interface NutritionCaptureClientContext {
|
|
28
|
+
readonly userId?: NutritionUserId;
|
|
29
|
+
readonly anonymousDeviceId?: string;
|
|
30
|
+
readonly platform?: 'android' | 'ios' | 'web' | (string & {});
|
|
31
|
+
readonly appVersion?: string;
|
|
32
|
+
readonly locale?: string;
|
|
33
|
+
readonly clientCapturedAt?: NutritionIsoDateTime;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface NutritionProductCaptureDraft {
|
|
37
|
+
readonly barcode: NutritionBarcode;
|
|
38
|
+
readonly name?: string;
|
|
39
|
+
readonly brand?: string;
|
|
40
|
+
readonly quantity?: string;
|
|
41
|
+
readonly packageSizeG?: number;
|
|
42
|
+
readonly packageSizeMl?: number;
|
|
43
|
+
readonly serving?: NutritionServing;
|
|
44
|
+
readonly nutrientsPer100g?: NutritionFactsPer100g;
|
|
45
|
+
readonly ingredients?: NutritionIngredientStatement;
|
|
46
|
+
readonly storeObservation?: NutritionStoreObservation;
|
|
47
|
+
readonly images?: readonly NutritionImageEvidence[];
|
|
48
|
+
readonly rawPayload?: NutritionJsonValue;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface NutritionProductCaptureRequest {
|
|
52
|
+
readonly draft: NutritionProductCaptureDraft;
|
|
53
|
+
readonly client?: NutritionCaptureClientContext;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface NutritionProductCaptureResponse {
|
|
57
|
+
readonly submissionId: NutritionCaptureSubmissionId;
|
|
58
|
+
readonly status: NutritionCaptureSubmissionStatus;
|
|
59
|
+
readonly productId?: NutritionProductId;
|
|
60
|
+
readonly message?: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface NutritionProductCorrectionRequest {
|
|
64
|
+
readonly productId: NutritionProductId;
|
|
65
|
+
readonly patch: Partial<NutritionProductCaptureDraft>;
|
|
66
|
+
readonly client?: NutritionCaptureClientContext;
|
|
67
|
+
readonly note?: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface NutritionCaptureSubmission {
|
|
71
|
+
readonly id: NutritionCaptureSubmissionId;
|
|
72
|
+
readonly status: NutritionCaptureSubmissionStatus;
|
|
73
|
+
readonly draft: NutritionProductCaptureDraft;
|
|
74
|
+
readonly client?: NutritionCaptureClientContext;
|
|
75
|
+
readonly matchedProductId?: NutritionProductId | null;
|
|
76
|
+
readonly reviewerNote?: string;
|
|
77
|
+
readonly createdAt: NutritionIsoDateTime;
|
|
78
|
+
readonly updatedAt: NutritionIsoDateTime;
|
|
79
|
+
readonly decidedAt?: NutritionIsoDateTime | null;
|
|
80
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export type NutritionIsoDateTime = string;
|
|
2
|
+
export type NutritionProductId = string;
|
|
3
|
+
export type NutritionCaptureSubmissionId = string;
|
|
4
|
+
export type NutritionReviewId = string;
|
|
5
|
+
export type NutritionUserId = string;
|
|
6
|
+
|
|
7
|
+
export type NutritionJsonValue =
|
|
8
|
+
| boolean
|
|
9
|
+
| number
|
|
10
|
+
| string
|
|
11
|
+
| null
|
|
12
|
+
| readonly NutritionJsonValue[]
|
|
13
|
+
| { readonly [key: string]: NutritionJsonValue };
|
|
14
|
+
|
|
15
|
+
export const NUTRITION_BARCODE_TYPES = [
|
|
16
|
+
'ean_8',
|
|
17
|
+
'ean_13',
|
|
18
|
+
'upc_a',
|
|
19
|
+
'upc_e',
|
|
20
|
+
'gtin_14',
|
|
21
|
+
'unknown',
|
|
22
|
+
] as const;
|
|
23
|
+
export type NutritionBarcodeType = (typeof NUTRITION_BARCODE_TYPES)[number];
|
|
24
|
+
|
|
25
|
+
export interface NutritionBarcode {
|
|
26
|
+
readonly value: string;
|
|
27
|
+
readonly type: NutritionBarcodeType;
|
|
28
|
+
readonly normalizedValue?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const NUTRITION_PRODUCT_STATUSES = [
|
|
32
|
+
'draft',
|
|
33
|
+
'pending_review',
|
|
34
|
+
'published',
|
|
35
|
+
'rejected',
|
|
36
|
+
'archived',
|
|
37
|
+
] as const;
|
|
38
|
+
export type NutritionProductStatus = (typeof NUTRITION_PRODUCT_STATUSES)[number];
|
|
39
|
+
|
|
40
|
+
export const NUTRITION_DATA_SOURCES = [
|
|
41
|
+
'manual_scan',
|
|
42
|
+
'user_correction',
|
|
43
|
+
'open_food_facts',
|
|
44
|
+
'foodrepo_legacy',
|
|
45
|
+
'retailer_import',
|
|
46
|
+
'admin_import',
|
|
47
|
+
] as const;
|
|
48
|
+
export type NutritionDataSource = (typeof NUTRITION_DATA_SOURCES)[number];
|
|
49
|
+
|
|
50
|
+
export const NUTRITION_SOURCE_CONFIDENCE_LEVELS = ['unknown', 'low', 'medium', 'high'] as const;
|
|
51
|
+
export type NutritionSourceConfidence = (typeof NUTRITION_SOURCE_CONFIDENCE_LEVELS)[number];
|