@cravery/core 0.0.2 → 0.0.3

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 (100) hide show
  1. package/dist/config/ai.d.ts +3 -0
  2. package/dist/config/ai.d.ts.map +1 -0
  3. package/dist/config/ai.js +36 -0
  4. package/dist/config/ai.js.map +1 -0
  5. package/dist/config/index.d.ts +1 -0
  6. package/dist/config/index.d.ts.map +1 -1
  7. package/dist/config/index.js +1 -0
  8. package/dist/config/index.js.map +1 -1
  9. package/dist/enums/cuisine.d.ts +1 -1
  10. package/dist/enums/difficulty.d.ts +1 -1
  11. package/dist/enums/moderation_status.d.ts +1 -1
  12. package/dist/enums/priority.d.ts +1 -1
  13. package/dist/enums/profile_status.d.ts +2 -2
  14. package/dist/enums/recipe_source.d.ts +2 -2
  15. package/dist/enums/recipe_status.d.ts +2 -2
  16. package/dist/enums/role.d.ts +1 -1
  17. package/dist/enums/severity.d.ts +1 -1
  18. package/dist/enums/spiciness.d.ts +1 -1
  19. package/dist/enums/status.d.ts +2 -2
  20. package/dist/enums/unit.d.ts +5 -5
  21. package/dist/enums/user_status.d.ts +2 -2
  22. package/dist/lib/api.d.ts +18 -0
  23. package/dist/lib/api.d.ts.map +1 -0
  24. package/dist/lib/api.js +69 -0
  25. package/dist/lib/api.js.map +1 -0
  26. package/dist/lib/cost.d.ts +22 -0
  27. package/dist/lib/cost.d.ts.map +1 -0
  28. package/dist/lib/cost.js +45 -0
  29. package/dist/lib/cost.js.map +1 -0
  30. package/dist/lib/embedding.d.ts +4 -0
  31. package/dist/lib/embedding.d.ts.map +1 -0
  32. package/dist/lib/embedding.js +48 -0
  33. package/dist/lib/embedding.js.map +1 -0
  34. package/dist/lib/firebase.d.ts +3 -0
  35. package/dist/lib/firebase.d.ts.map +1 -0
  36. package/dist/lib/firebase.js +8 -0
  37. package/dist/lib/firebase.js.map +1 -0
  38. package/dist/lib/flow.d.ts +53 -0
  39. package/dist/lib/flow.d.ts.map +1 -0
  40. package/dist/lib/flow.js +60 -0
  41. package/dist/lib/flow.js.map +1 -0
  42. package/dist/lib/genkit.d.ts +4 -0
  43. package/dist/lib/genkit.d.ts.map +1 -0
  44. package/dist/lib/genkit.js +16 -0
  45. package/dist/lib/genkit.js.map +1 -0
  46. package/dist/lib/iam.d.ts +3 -0
  47. package/dist/lib/iam.d.ts.map +1 -0
  48. package/dist/lib/iam.js +57 -0
  49. package/dist/lib/iam.js.map +1 -0
  50. package/dist/lib/image.d.ts +7 -0
  51. package/dist/lib/image.d.ts.map +1 -0
  52. package/dist/lib/image.js +24 -0
  53. package/dist/lib/image.js.map +1 -0
  54. package/dist/lib/index.d.ts +9 -1
  55. package/dist/lib/index.d.ts.map +1 -1
  56. package/dist/lib/index.js +23 -0
  57. package/dist/lib/index.js.map +1 -1
  58. package/dist/lib/storage.d.ts +6 -0
  59. package/dist/lib/storage.d.ts.map +1 -0
  60. package/dist/lib/storage.js +34 -0
  61. package/dist/lib/storage.js.map +1 -0
  62. package/dist/types/ai/config.d.ts +2 -2
  63. package/dist/types/ai/config.d.ts.map +1 -1
  64. package/dist/types/ai/filters.d.ts +3 -3
  65. package/dist/types/ai/recipe.d.ts +10 -10
  66. package/dist/types/equipment.d.ts +2 -2
  67. package/dist/types/equipment.js +1 -1
  68. package/dist/types/error.d.ts +14 -0
  69. package/dist/types/error.d.ts.map +1 -0
  70. package/dist/types/error.js +40 -0
  71. package/dist/types/error.js.map +1 -0
  72. package/dist/types/index.d.ts +1 -0
  73. package/dist/types/index.d.ts.map +1 -1
  74. package/dist/types/index.js +1 -0
  75. package/dist/types/index.js.map +1 -1
  76. package/dist/types/ingredient.d.ts +24 -24
  77. package/dist/types/ingredient.js +1 -1
  78. package/dist/types/ingredient.js.map +1 -1
  79. package/dist/types/moderation.d.ts +5 -5
  80. package/dist/types/profile.d.ts +2 -2
  81. package/dist/types/recipe.d.ts +28 -28
  82. package/dist/types/user.d.ts +3 -3
  83. package/package.json +2 -2
  84. package/src/config/ai.ts +34 -0
  85. package/src/config/index.ts +1 -0
  86. package/src/lib/api.ts +90 -0
  87. package/src/lib/cost.ts +72 -0
  88. package/src/lib/embedding.ts +53 -0
  89. package/src/lib/firebase.ts +5 -0
  90. package/src/lib/flow.ts +88 -0
  91. package/src/lib/genkit.ts +18 -0
  92. package/src/lib/iam.ts +22 -0
  93. package/src/lib/image.ts +28 -0
  94. package/src/lib/index.ts +9 -0
  95. package/src/lib/storage.ts +42 -0
  96. package/src/types/ai/config.ts +3 -2
  97. package/src/types/equipment.ts +1 -1
  98. package/src/types/error.ts +43 -0
  99. package/src/types/index.ts +1 -0
  100. package/src/types/ingredient.ts +1 -1
@@ -0,0 +1,3 @@
1
+ import { AIConfig } from "../types";
2
+ export declare const AI_MODELS: AIConfig;
3
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/config/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,eAAO,MAAM,SAAS,EAAE,QA+BvB,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AI_MODELS = void 0;
4
+ exports.AI_MODELS = {
5
+ Gemini25Flash: {
6
+ id: "vertexai/gemini-2.5-flash",
7
+ name: "Gemini 2.5 Flash",
8
+ type: "multimodal",
9
+ cost: { input: 0.3, output: 2.5 },
10
+ },
11
+ Gemini25Pro: {
12
+ id: "vertexai/gemini-2.5-pro",
13
+ name: "Gemini 2.5 Pro",
14
+ type: "multimodal",
15
+ cost: { input: 1.25, output: 10.0 },
16
+ },
17
+ Gemini3Flash: {
18
+ id: "vertexai/gemini-3.0-flash",
19
+ name: "Gemini 3 Flash",
20
+ type: "multimodal",
21
+ cost: { input: 0.5, output: 3.0 },
22
+ },
23
+ Imagen4Fast: {
24
+ id: "vertexai/imagen-4.0-fast-generate-001",
25
+ name: "Imagen 4 Fast",
26
+ type: "image",
27
+ cost: { input: 0, output: 0.02 },
28
+ },
29
+ GeminiEmbedding001: {
30
+ id: "vertexai/gemini-embedding-001",
31
+ name: "Gemini Embedding 001",
32
+ type: "embedding",
33
+ cost: { input: 0.00015, output: 0 },
34
+ },
35
+ };
36
+ //# sourceMappingURL=ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/config/ai.ts"],"names":[],"mappings":";;;AAEa,QAAA,SAAS,GAAa;IACjC,aAAa,EAAE;QACb,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;KAClC;IACD,WAAW,EAAE;QACX,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;KACpC;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;KAClC;IACD,WAAW,EAAE;QACX,EAAE,EAAE,uCAAuC;QAC3C,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;KACjC;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,+BAA+B;QACnC,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE;KACpC;CACF,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from "./ai";
1
2
  export * from "./collections";
2
3
  export * from "./common";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ai"), exports);
17
18
  __exportStar(require("./collections"), exports);
18
19
  __exportStar(require("./common"), exports);
19
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uCAAqB;AACrB,gDAA8B;AAC9B,2CAAyB"}
@@ -1,7 +1,6 @@
1
1
  import { z } from "zod";
2
2
  export declare const CUISINE_VALUES: readonly ["african", "american", "brazilian", "british", "caribbean", "chinese", "egyptian", "emirati", "ethiopian", "filipino", "french", "fusion", "german", "greek", "indian", "indonesian", "italian", "japanese", "korean", "lebanese", "malaysian", "mexican", "moroccan", "pakistani", "persian", "russian", "saudi", "spanish", "sudanese", "thai", "turkish", "vietnamese", "other"];
3
3
  export declare const CuisineSchema: z.ZodEnum<{
4
- other: "other";
5
4
  african: "african";
6
5
  american: "american";
7
6
  brazilian: "brazilian";
@@ -34,6 +33,7 @@ export declare const CuisineSchema: z.ZodEnum<{
34
33
  thai: "thai";
35
34
  turkish: "turkish";
36
35
  vietnamese: "vietnamese";
36
+ other: "other";
37
37
  }>;
38
38
  export type Cuisine = (typeof CUISINE_VALUES)[number];
39
39
  //# sourceMappingURL=cuisine.d.ts.map
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const DIFFICULTY_VALUES: readonly ["beginner", "intermediate", "advanced", "expert"];
3
3
  export declare const DifficultySchema: z.ZodEnum<{
4
- advanced: "advanced";
5
4
  beginner: "beginner";
6
5
  intermediate: "intermediate";
6
+ advanced: "advanced";
7
7
  expert: "expert";
8
8
  }>;
9
9
  export type Difficulty = (typeof DIFFICULTY_VALUES)[number];
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const MODERATION_STATUS_VALUES: readonly ["approved", "pending", "rejected"];
3
3
  export declare const ModerationStatusSchema: z.ZodEnum<{
4
+ approved: "approved";
4
5
  pending: "pending";
5
6
  rejected: "rejected";
6
- approved: "approved";
7
7
  }>;
8
8
  export type ModerationStatus = (typeof MODERATION_STATUS_VALUES)[number];
9
9
  //# sourceMappingURL=moderation_status.d.ts.map
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const PRIORITY_VALUES: readonly ["low", "medium", "high"];
3
3
  export declare const PrioritySchema: z.ZodEnum<{
4
- high: "high";
5
4
  low: "low";
6
5
  medium: "medium";
6
+ high: "high";
7
7
  }>;
8
8
  export type Priority = (typeof PRIORITY_VALUES)[number];
9
9
  //# sourceMappingURL=priority.d.ts.map
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export declare const PROFILE_STATUS_VALUES: readonly ["active", "deleted", "pending", "suspended"];
3
3
  export declare const ProfileStatusSchema: z.ZodEnum<{
4
- deleted: "deleted";
4
+ pending: "pending";
5
5
  active: "active";
6
+ deleted: "deleted";
6
7
  suspended: "suspended";
7
- pending: "pending";
8
8
  }>;
9
9
  export type ProfileStatus = (typeof PROFILE_STATUS_VALUES)[number];
10
10
  //# sourceMappingURL=profile_status.d.ts.map
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export declare const RECIPE_SOURCE_VALUES: readonly ["image", "text", "url", "video"];
3
3
  export declare const RecipeSourceSchema: z.ZodEnum<{
4
- url: "url";
5
- video: "video";
6
4
  image: "image";
7
5
  text: "text";
6
+ url: "url";
7
+ video: "video";
8
8
  }>;
9
9
  export type RecipeSource = (typeof RECIPE_SOURCE_VALUES)[number];
10
10
  //# sourceMappingURL=recipe_source.d.ts.map
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const RECIPE_STATUS_VALUES: readonly ["active", "archived", "deleted", "pending"];
3
3
  export declare const RecipeStatusSchema: z.ZodEnum<{
4
- deleted: "deleted";
5
- active: "active";
6
4
  pending: "pending";
5
+ active: "active";
6
+ deleted: "deleted";
7
7
  archived: "archived";
8
8
  }>;
9
9
  export type RecipeStatus = (typeof RECIPE_STATUS_VALUES)[number];
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export declare const ROLE_VALUES: readonly ["admin", "moderator", "translator", "user", "guest"];
3
3
  export declare const RoleSchema: z.ZodEnum<{
4
- user: "user";
5
4
  admin: "admin";
6
5
  moderator: "moderator";
7
6
  translator: "translator";
7
+ user: "user";
8
8
  guest: "guest";
9
9
  }>;
10
10
  export type Role = (typeof ROLE_VALUES)[number];
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const SEVERITY_VALUES: readonly ["low", "medium", "high"];
3
3
  export declare const SeveritySchema: z.ZodEnum<{
4
- high: "high";
5
4
  low: "low";
6
5
  medium: "medium";
6
+ high: "high";
7
7
  }>;
8
8
  export type Severity = (typeof SEVERITY_VALUES)[number];
9
9
  //# sourceMappingURL=severity.d.ts.map
@@ -1,8 +1,8 @@
1
1
  import { z } from "zod";
2
2
  export declare const SPICINESS_VALUES: readonly ["none", "mild", "medium", "hot"];
3
3
  export declare const SpicinessSchema: z.ZodEnum<{
4
- none: "none";
5
4
  medium: "medium";
5
+ none: "none";
6
6
  mild: "mild";
7
7
  hot: "hot";
8
8
  }>;
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  export declare const STATUS_VALUES: readonly ["active", "archived", "cancelled", "deleted", "pending"];
3
3
  export declare const StatusSchema: z.ZodEnum<{
4
- deleted: "deleted";
5
- active: "active";
6
4
  pending: "pending";
5
+ active: "active";
6
+ deleted: "deleted";
7
7
  archived: "archived";
8
8
  cancelled: "cancelled";
9
9
  }>;
@@ -1,11 +1,6 @@
1
1
  import { z } from "zod";
2
2
  export declare const UNIT_VALUES: readonly ["ml", "l", "tsp", "tbsp", "fl_oz", "cup", "pint", "quart", "gallon", "mg", "g", "kg", "oz", "lb", "piece", "whole", "half", "quarter", "slice", "serving", "clove", "stalk", "sprig", "leaf", "bunch", "head", "fillet", "stick", "sheet", "can", "package", "bottle", "jar", "handful", "pinch", "dash", "drop"];
3
3
  export declare const UnitSchema: z.ZodEnum<{
4
- slice: "slice";
5
- head: "head";
6
- g: "g";
7
- drop: "drop";
8
- quarter: "quarter";
9
4
  ml: "ml";
10
5
  l: "l";
11
6
  tsp: "tsp";
@@ -16,18 +11,22 @@ export declare const UnitSchema: z.ZodEnum<{
16
11
  quart: "quart";
17
12
  gallon: "gallon";
18
13
  mg: "mg";
14
+ g: "g";
19
15
  kg: "kg";
20
16
  oz: "oz";
21
17
  lb: "lb";
22
18
  piece: "piece";
23
19
  whole: "whole";
24
20
  half: "half";
21
+ quarter: "quarter";
22
+ slice: "slice";
25
23
  serving: "serving";
26
24
  clove: "clove";
27
25
  stalk: "stalk";
28
26
  sprig: "sprig";
29
27
  leaf: "leaf";
30
28
  bunch: "bunch";
29
+ head: "head";
31
30
  fillet: "fillet";
32
31
  stick: "stick";
33
32
  sheet: "sheet";
@@ -38,6 +37,7 @@ export declare const UnitSchema: z.ZodEnum<{
38
37
  handful: "handful";
39
38
  pinch: "pinch";
40
39
  dash: "dash";
40
+ drop: "drop";
41
41
  }>;
42
42
  export type Unit = (typeof UNIT_VALUES)[number];
43
43
  //# sourceMappingURL=unit.d.ts.map
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export declare const USER_STATUS_VALUES: readonly ["active", "deleted", "pending", "suspended"];
3
3
  export declare const UserStatusSchema: z.ZodEnum<{
4
- deleted: "deleted";
4
+ pending: "pending";
5
5
  active: "active";
6
+ deleted: "deleted";
6
7
  suspended: "suspended";
7
- pending: "pending";
8
8
  }>;
9
9
  export type UserStatus = (typeof USER_STATUS_VALUES)[number];
10
10
  //# sourceMappingURL=user_status.d.ts.map
@@ -0,0 +1,18 @@
1
+ import { CallableRequest, CallableOptions } from "firebase-functions/v2/https";
2
+ import { z } from "zod";
3
+ declare class CallableBuilder<T> {
4
+ private schema;
5
+ private requiresAuth;
6
+ private requiresAdmin;
7
+ private requiresModerator;
8
+ private options;
9
+ constructor(schema: z.ZodSchema<T>);
10
+ withOptions(options: CallableOptions): this;
11
+ requireUser(): this;
12
+ requireAdmin(): this;
13
+ requireModerator(): this;
14
+ handle<R>(handler: (data: T, request: CallableRequest) => Promise<R>): import("firebase-functions/v2/https").CallableFunction<any, Promise<R>, unknown>;
15
+ }
16
+ export declare const callable: <T>(schema: z.ZodSchema<T>) => CallableBuilder<T>;
17
+ export {};
18
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,EACf,eAAe,EAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqBxB,cAAM,eAAe,CAAC,CAAC;IAMT,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,OAAO,CAAoC;gBAE/B,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAE1C,WAAW,CAAC,OAAO,EAAE,eAAe;IAKpC,WAAW;IAKX,YAAY;IAMZ,gBAAgB;IAMhB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC;CA6BrE;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBACrB,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.callable = void 0;
4
+ const https_1 = require("firebase-functions/v2/https");
5
+ const zod_1 = require("zod");
6
+ const iam_1 = require("./iam");
7
+ const DEFAULT_OPTIONS = { cors: true, enforceAppCheck: true };
8
+ const handleError = (error) => {
9
+ if (error instanceof zod_1.z.ZodError) {
10
+ throw new https_1.HttpsError("invalid-argument", `Validation failed: ${error.message}`);
11
+ }
12
+ if (error instanceof https_1.HttpsError) {
13
+ throw error;
14
+ }
15
+ throw new https_1.HttpsError("internal", error instanceof Error ? error.message : "Unknown error");
16
+ };
17
+ class CallableBuilder {
18
+ constructor(schema) {
19
+ this.schema = schema;
20
+ this.requiresAuth = false;
21
+ this.requiresAdmin = false;
22
+ this.requiresModerator = false;
23
+ this.options = DEFAULT_OPTIONS;
24
+ }
25
+ withOptions(options) {
26
+ this.options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);
27
+ return this;
28
+ }
29
+ requireUser() {
30
+ this.requiresAuth = true;
31
+ return this;
32
+ }
33
+ requireAdmin() {
34
+ this.requiresAuth = true;
35
+ this.requiresAdmin = true;
36
+ return this;
37
+ }
38
+ requireModerator() {
39
+ this.requiresAuth = true;
40
+ this.requiresModerator = true;
41
+ return this;
42
+ }
43
+ handle(handler) {
44
+ return (0, https_1.onCall)(this.options, async (request) => {
45
+ if (this.requiresAuth && !request.auth) {
46
+ throw new https_1.HttpsError("unauthenticated", "Authentication required");
47
+ }
48
+ if (request.auth) {
49
+ const uid = request.auth.uid;
50
+ if (this.requiresAdmin && !(await (0, iam_1.isAdmin)(uid))) {
51
+ throw new https_1.HttpsError("permission-denied", "Admin access required");
52
+ }
53
+ if (this.requiresModerator && !(await (0, iam_1.isModerator)(uid))) {
54
+ throw new https_1.HttpsError("permission-denied", "Moderator access required");
55
+ }
56
+ }
57
+ try {
58
+ const data = this.schema.parse(request.data);
59
+ return await handler(data, request);
60
+ }
61
+ catch (error) {
62
+ throw handleError(error);
63
+ }
64
+ });
65
+ }
66
+ }
67
+ const callable = (schema) => new CallableBuilder(schema);
68
+ exports.callable = callable;
69
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { AIModelConfig } from "../types";
2
+ interface BaseUsage {
3
+ flowName: string;
4
+ model: AIModelConfig;
5
+ }
6
+ interface MultimodalUsage extends BaseUsage {
7
+ type: "multimodal";
8
+ inputTokens: number;
9
+ outputTokens: number;
10
+ }
11
+ interface ImageUsage extends BaseUsage {
12
+ type: "image";
13
+ imageCount: number;
14
+ }
15
+ interface EmbeddingUsage extends BaseUsage {
16
+ type: "embedding";
17
+ tokenCount: number;
18
+ }
19
+ export type AIUsage = MultimodalUsage | ImageUsage | EmbeddingUsage;
20
+ export declare const logAIUsage: (usage: AIUsage) => number;
21
+ export {};
22
+ //# sourceMappingURL=cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/lib/cost.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,UAAU,SAAS;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,UAAU,eAAgB,SAAQ,SAAS;IACzC,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,UAAW,SAAQ,SAAS;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,cAAe,SAAQ,SAAS;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,UAAU,GAAG,cAAc,CAAC;AAEpE,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,MA6C3C,CAAC"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logAIUsage = void 0;
4
+ const database_1 = require("firebase-admin/database");
5
+ const logAIUsage = (usage) => {
6
+ const { flowName, model } = usage;
7
+ let cost;
8
+ let metrics;
9
+ switch (usage.type) {
10
+ case "multimodal":
11
+ cost =
12
+ (usage.inputTokens / 1000000) * model.cost.input +
13
+ (usage.outputTokens / 1000000) * model.cost.output;
14
+ metrics = {
15
+ inputTokens: usage.inputTokens,
16
+ outputTokens: usage.outputTokens,
17
+ };
18
+ break;
19
+ case "image":
20
+ cost = usage.imageCount * model.cost.output;
21
+ metrics = { images: usage.imageCount };
22
+ break;
23
+ case "embedding":
24
+ cost = (usage.tokenCount / 1000) * model.cost.input;
25
+ metrics = { tokens: usage.tokenCount };
26
+ break;
27
+ }
28
+ const db = (0, database_1.getDatabase)();
29
+ const date = new Date().toISOString().split("T")[0];
30
+ const base = `ai_usage/live/${date}`;
31
+ const updates = {
32
+ [`${base}/total`]: database_1.ServerValue.increment(cost),
33
+ [`${base}/count`]: database_1.ServerValue.increment(1),
34
+ [`${base}/flows/${flowName}/cost`]: database_1.ServerValue.increment(cost),
35
+ [`${base}/flows/${flowName}/count`]: database_1.ServerValue.increment(1),
36
+ [`${base}/models/${model.id}/cost`]: database_1.ServerValue.increment(cost),
37
+ };
38
+ for (const [key, value] of Object.entries(metrics)) {
39
+ updates[`${base}/models/${model.id}/${key}`] = database_1.ServerValue.increment(value);
40
+ }
41
+ db.ref().update(updates).catch(console.error);
42
+ return cost;
43
+ };
44
+ exports.logAIUsage = logAIUsage;
45
+ //# sourceMappingURL=cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/lib/cost.ts"],"names":[],"mappings":";;;AAAA,sDAAmE;AA0B5D,MAAM,UAAU,GAAG,CAAC,KAAc,EAAU,EAAE;IACnD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAElC,IAAI,IAAY,CAAC;IACjB,IAAI,OAA+B,CAAC;IAEpC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY;YACf,IAAI;gBACF,CAAC,KAAK,CAAC,WAAW,GAAG,OAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK;oBAClD,CAAC,KAAK,CAAC,YAAY,GAAG,OAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YACvD,OAAO,GAAG;gBACR,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;aACjC,CAAC;YACF,MAAM;QACR,KAAK,OAAO;YACV,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5C,OAAO,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM;QACR,KAAK,WAAW;YACd,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,IAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACrD,OAAO,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM;IACV,CAAC;IAED,MAAM,EAAE,GAAG,IAAA,sBAAW,GAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,iBAAiB,IAAI,EAAE,CAAC;IAErC,MAAM,OAAO,GAA4B;QACvC,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,sBAAW,CAAC,SAAS,CAAC,IAAI,CAAC;QAC9C,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,sBAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,CAAC,GAAG,IAAI,UAAU,QAAQ,OAAO,CAAC,EAAE,sBAAW,CAAC,SAAS,CAAC,IAAI,CAAC;QAC/D,CAAC,GAAG,IAAI,UAAU,QAAQ,QAAQ,CAAC,EAAE,sBAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,CAAC,GAAG,IAAI,WAAW,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,sBAAW,CAAC,SAAS,CAAC,IAAI,CAAC;KACjE,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,IAAI,WAAW,KAAK,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,sBAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9E,CAAC;IAED,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AA7CW,QAAA,UAAU,cA6CrB"}
@@ -0,0 +1,4 @@
1
+ export declare const generateEmbedding: (text: string, flowName: string) => Promise<number[]>;
2
+ export declare const storeEmbedding: (collection: string, docId: string, text: string, flowName?: string, vectorField?: string) => Promise<void>;
3
+ export declare const recipesRetriever: import("genkit").RetrieverAction;
4
+ //# sourceMappingURL=embedding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../src/lib/embedding.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,iBAAiB,GAAU,MAAM,MAAM,EAAE,UAAU,MAAM,sBAerE,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,YAAY,MAAM,EAClB,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,WAAW,MAAM,EACjB,cAAa,MAAoB,kBAYlC,CAAC;AAEF,eAAO,MAAM,gBAAgB,kCAS3B,CAAC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.recipesRetriever = exports.storeEmbedding = exports.generateEmbedding = void 0;
4
+ const firestore_1 = require("firebase-admin/firestore");
5
+ const firebase_1 = require("@genkit-ai/firebase");
6
+ const firebase_2 = require("./firebase");
7
+ const genkit_1 = require("./genkit");
8
+ const cost_1 = require("./cost");
9
+ const ai_1 = require("../config/ai");
10
+ const generateEmbedding = async (text, flowName) => {
11
+ var _a;
12
+ if (text.length < 1 || text.length > 7500) {
13
+ throw new Error("Validation error: Text out of range");
14
+ }
15
+ const response = await genkit_1.ai.embed({
16
+ embedder: genkit_1.geminiEmbedding001,
17
+ content: text,
18
+ });
19
+ (0, cost_1.logAIUsage)({
20
+ type: "embedding",
21
+ flowName,
22
+ model: ai_1.AI_MODELS.GeminiEmbedding001,
23
+ tokenCount: text.length,
24
+ });
25
+ return (_a = response[0]) === null || _a === void 0 ? void 0 : _a.embedding;
26
+ };
27
+ exports.generateEmbedding = generateEmbedding;
28
+ const storeEmbedding = async (collection, docId, text, flowName, vectorField = "embedding") => {
29
+ const embedding = await (0, exports.generateEmbedding)(text, flowName || `${collection}:embedding`);
30
+ await firebase_2.firestore
31
+ .collection(collection)
32
+ .doc(docId)
33
+ .update({
34
+ [vectorField]: firestore_1.FieldValue.vector(embedding),
35
+ });
36
+ };
37
+ exports.storeEmbedding = storeEmbedding;
38
+ exports.recipesRetriever = (0, firebase_1.defineFirestoreRetriever)(genkit_1.ai, {
39
+ name: "recipesRetriever",
40
+ firestore: firebase_2.firestore,
41
+ collection: "recipes",
42
+ contentField: "searchTerms",
43
+ vectorField: "titleEmbedding",
44
+ embedder: genkit_1.geminiEmbedding001,
45
+ distanceMeasure: "COSINE",
46
+ distanceResultField: "distance",
47
+ });
48
+ //# sourceMappingURL=embedding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../src/lib/embedding.ts"],"names":[],"mappings":";;;AAAA,wDAAsD;AACtD,kDAA+D;AAC/D,yCAAuC;AACvC,qCAAkD;AAClD,iCAAoC;AACpC,qCAAyC;AAElC,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAY,EAAE,QAAgB,EAAE,EAAE;;IACxE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,WAAE,CAAC,KAAK,CAAC;QAC9B,QAAQ,EAAE,2BAAkB;QAC5B,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IACH,IAAA,iBAAU,EAAC;QACT,IAAI,EAAE,WAAW;QACjB,QAAQ;QACR,KAAK,EAAE,cAAS,CAAC,kBAAkB;QACnC,UAAU,EAAE,IAAI,CAAC,MAAM;KACxB,CAAC,CAAC;IACH,OAAO,MAAA,QAAQ,CAAC,CAAC,CAAC,0CAAE,SAAS,CAAC;AAChC,CAAC,CAAC;AAfW,QAAA,iBAAiB,qBAe5B;AAEK,MAAM,cAAc,GAAG,KAAK,EACjC,UAAkB,EAClB,KAAa,EACb,IAAY,EACZ,QAAiB,EACjB,cAAsB,WAAW,EACjC,EAAE;IACF,MAAM,SAAS,GAAG,MAAM,IAAA,yBAAiB,EACvC,IAAI,EACJ,QAAQ,IAAI,GAAG,UAAU,YAAY,CACtC,CAAC;IACF,MAAM,oBAAS;SACZ,UAAU,CAAC,UAAU,CAAC;SACtB,GAAG,CAAC,KAAK,CAAC;SACV,MAAM,CAAC;QACN,CAAC,WAAW,CAAC,EAAE,sBAAU,CAAC,MAAM,CAAC,SAAS,CAAC;KAC5C,CAAC,CAAC;AACP,CAAC,CAAC;AAjBW,QAAA,cAAc,kBAiBzB;AAEW,QAAA,gBAAgB,GAAG,IAAA,mCAAwB,EAAC,WAAE,EAAE;IAC3D,IAAI,EAAE,kBAAkB;IACxB,SAAS,EAAT,oBAAS;IACT,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,aAAa;IAC3B,WAAW,EAAE,gBAAgB;IAC7B,QAAQ,EAAE,2BAAkB;IAC5B,eAAe,EAAE,QAAQ;IACzB,mBAAmB,EAAE,UAAU;CAChC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const firestore: FirebaseFirestore.Firestore;
2
+ export declare const rtdb: import("firebase-admin/database").Database;
3
+ //# sourceMappingURL=firebase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase.d.ts","sourceRoot":"","sources":["../../src/lib/firebase.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,6BAAiB,CAAC;AACxC,eAAO,MAAM,IAAI,4CAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rtdb = exports.firestore = void 0;
4
+ const firestore_1 = require("firebase-admin/firestore");
5
+ const database_1 = require("firebase-admin/database");
6
+ exports.firestore = (0, firestore_1.getFirestore)();
7
+ exports.rtdb = (0, database_1.getDatabase)();
8
+ //# sourceMappingURL=firebase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase.js","sourceRoot":"","sources":["../../src/lib/firebase.ts"],"names":[],"mappings":";;;AAAA,wDAAwD;AACxD,sDAAsD;AAEzC,QAAA,SAAS,GAAG,IAAA,wBAAY,GAAE,CAAC;AAC3B,QAAA,IAAI,GAAG,IAAA,sBAAW,GAAE,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { z } from "genkit";
2
+ import { AIModelConfig } from "../types";
3
+ export declare const ImagenOutputSchema: z.ZodObject<{
4
+ images: z.ZodArray<z.ZodObject<{
5
+ url: z.ZodString;
6
+ path: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ url: string;
9
+ path: string;
10
+ }, {
11
+ url: string;
12
+ path: string;
13
+ }>, "many">;
14
+ }, "strip", z.ZodTypeAny, {
15
+ images: {
16
+ url: string;
17
+ path: string;
18
+ }[];
19
+ }, {
20
+ images: {
21
+ url: string;
22
+ path: string;
23
+ }[];
24
+ }>;
25
+ export type FlowHandler<T, R> = (input: T, output: R | null) => Promise<R>;
26
+ export type ImageFlowHandler<T> = (input: T, prompt: string) => Promise<{
27
+ base64Data: string;
28
+ storagePath: string;
29
+ }[]>;
30
+ export declare const createGeminiFlow: <T, R>(name: string, inputSchema: z.ZodSchema<T>, outputSchema: z.ZodSchema<R>, handler: FlowHandler<T, R>, model?: AIModelConfig) => import("genkit").Action<z.ZodType<T, z.ZodTypeDef, T>, z.ZodType<R, z.ZodTypeDef, R>, z.ZodTypeAny>;
31
+ export declare const createImagenFlow: <T>(name: string, inputSchema: z.ZodSchema<T>, handler: ImageFlowHandler<T>, model?: AIModelConfig) => import("genkit").Action<z.ZodType<T, z.ZodTypeDef, T>, z.ZodObject<{
32
+ images: z.ZodArray<z.ZodObject<{
33
+ url: z.ZodString;
34
+ path: z.ZodString;
35
+ }, "strip", z.ZodTypeAny, {
36
+ url: string;
37
+ path: string;
38
+ }, {
39
+ url: string;
40
+ path: string;
41
+ }>, "many">;
42
+ }, "strip", z.ZodTypeAny, {
43
+ images: {
44
+ url: string;
45
+ path: string;
46
+ }[];
47
+ }, {
48
+ images: {
49
+ url: string;
50
+ path: string;
51
+ }[];
52
+ }>, z.ZodTypeAny>;
53
+ //# sourceMappingURL=flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/lib/flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAK3B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;EAO7B,CAAC;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAChC,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,MAAM,KACX,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAAC;AAE5D,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,EACnC,MAAM,MAAM,EACZ,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAC3B,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAC5B,SAAS,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,QAAO,aAAuC,wGA4B/C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAChC,MAAM,MAAM,EACZ,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAC3B,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAC5B,QAAO,aAAqC;;;;;;;;;;;;;;;;;;;;;iBA2B7C,CAAC"}