@cravery/core 0.0.20 → 0.0.22

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 (65) hide show
  1. package/dist/lib/ai/embedding.d.ts +1 -1
  2. package/dist/lib/ai/embedding.d.ts.map +1 -1
  3. package/dist/lib/ai/embedding.js +12 -9
  4. package/dist/lib/ai/embedding.js.map +1 -1
  5. package/dist/lib/ai/genkit.d.ts +3 -3
  6. package/dist/lib/ai/genkit.d.ts.map +1 -1
  7. package/dist/lib/ai/genkit.js +12 -8
  8. package/dist/lib/ai/genkit.js.map +1 -1
  9. package/dist/types/core/settings.d.ts.map +1 -1
  10. package/dist/types/core/settings.js.map +1 -1
  11. package/dist/types/iam/user.d.ts +4 -0
  12. package/dist/types/iam/user.d.ts.map +1 -1
  13. package/dist/types/iam/user.js +1 -0
  14. package/dist/types/iam/user.js.map +1 -1
  15. package/package.json +56 -56
  16. package/src/lib/ai/embedding.ts +15 -9
  17. package/src/lib/ai/flow.ts +89 -89
  18. package/src/lib/ai/genkit.ts +18 -12
  19. package/src/lib/api.ts +103 -103
  20. package/src/lib/utils/sanitize.ts +38 -38
  21. package/src/types/ai/recipe.ts +61 -61
  22. package/src/types/ai/translation.ts +27 -27
  23. package/src/types/core/asset.ts +17 -17
  24. package/src/types/core/enums/image_type.ts +5 -5
  25. package/src/types/core/enums/locale.ts +5 -5
  26. package/src/types/core/enums/measurement_system.ts +5 -5
  27. package/src/types/core/enums/theme.ts +5 -5
  28. package/src/types/core/enums/url_type.ts +13 -13
  29. package/src/types/core/settings.ts +68 -61
  30. package/src/types/iam/enums/profile_status.ts +10 -10
  31. package/src/types/iam/enums/subscription_role.ts +5 -5
  32. package/src/types/iam/enums/subscription_status.ts +10 -10
  33. package/src/types/iam/enums/subscription_tier.ts +4 -4
  34. package/src/types/iam/enums/user_role.ts +11 -11
  35. package/src/types/iam/enums/user_status.ts +10 -10
  36. package/src/types/iam/profile.ts +45 -45
  37. package/src/types/iam/subscription.ts +45 -45
  38. package/src/types/iam/user.ts +36 -29
  39. package/src/types/moderation/enums/moderation_status.ts +9 -9
  40. package/src/types/moderation/enums/priority.ts +5 -5
  41. package/src/types/moderation/enums/severity.ts +5 -5
  42. package/src/types/moderation/enums/suggestion_category.ts +11 -11
  43. package/src/types/moderation/moderation.ts +87 -87
  44. package/src/types/recipe/enums/allergen.ts +19 -19
  45. package/src/types/recipe/enums/cuisine.ts +39 -39
  46. package/src/types/recipe/enums/dietary_tag.ts +21 -21
  47. package/src/types/recipe/enums/difficulty.ts +10 -10
  48. package/src/types/recipe/enums/meal_type.ts +14 -14
  49. package/src/types/recipe/enums/recipe_source.ts +5 -5
  50. package/src/types/recipe/enums/recipe_status.ts +12 -12
  51. package/src/types/recipe/enums/spiciness.ts +5 -5
  52. package/src/types/recipe/enums/temperature_unit.ts +5 -5
  53. package/src/types/recipe/enums/unit.ts +51 -51
  54. package/src/types/recipe/equipment.ts +31 -31
  55. package/src/types/recipe/filters.ts +35 -35
  56. package/src/types/recipe/ingredient.ts +70 -70
  57. package/src/types/recipe/instruction.ts +31 -31
  58. package/src/types/recipe/nutrition.ts +29 -29
  59. package/src/types/recipe/recipe.ts +198 -198
  60. package/src/types/recipe/temperature.ts +12 -12
  61. package/src/types/report/enums/report_priority.ts +10 -10
  62. package/src/types/report/enums/report_status.ts +10 -10
  63. package/src/types/report/enums/report_target_type.ts +10 -10
  64. package/src/types/report/enums/report_type.ts +12 -12
  65. package/src/types/report/report.ts +68 -68
@@ -1,4 +1,4 @@
1
1
  export declare const generateEmbedding: (text: string, flowName: string) => Promise<number[]>;
2
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;
3
+ export declare let recipesRetriever: any;
4
4
  //# sourceMappingURL=embedding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/embedding.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,iBAAiB,GAAU,MAAM,MAAM,EAAE,UAAU,MAAM,sBAmBrE,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"}
1
+ {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/embedding.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,iBAAiB,GAAU,MAAM,MAAM,EAAE,UAAU,MAAM,sBAmBrE,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,YAAY,MAAM,EAClB,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,WAAW,MAAM,EACjB,cAAa,MAAoB,kBAYlC,CAAC;AAGF,eAAO,IAAI,gBAAgB,EAAE,GAAG,CAAC"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.recipesRetriever = exports.storeEmbedding = exports.generateEmbedding = void 0;
4
4
  const firestore_1 = require("firebase-admin/firestore");
5
5
  const firebase_1 = require("@genkit-ai/firebase");
6
+ const core_1 = require("firebase-functions/v2/core");
6
7
  const firebase_2 = require("../firebase");
7
8
  const genkit_1 = require("./genkit");
8
9
  const cost_1 = require("./cost");
@@ -40,14 +41,16 @@ const storeEmbedding = async (collection, docId, text, flowName, vectorField = "
40
41
  });
41
42
  };
42
43
  exports.storeEmbedding = storeEmbedding;
43
- exports.recipesRetriever = (0, firebase_1.defineFirestoreRetriever)(genkit_1.ai, {
44
- name: "recipesRetriever",
45
- firestore: firebase_2.firestore,
46
- collection: "recipes",
47
- contentField: "searchTerms",
48
- vectorField: "titleEmbedding",
49
- embedder: genkit_1.geminiEmbedding001,
50
- distanceMeasure: "COSINE",
51
- distanceResultField: "distance",
44
+ (0, core_1.onInit)(() => {
45
+ exports.recipesRetriever = (0, firebase_1.defineFirestoreRetriever)(genkit_1.ai, {
46
+ name: "recipesRetriever",
47
+ firestore: firebase_2.firestore,
48
+ collection: "recipes",
49
+ contentField: "searchTerms",
50
+ vectorField: "titleEmbedding",
51
+ embedder: genkit_1.geminiEmbedding001,
52
+ distanceMeasure: "COSINE",
53
+ distanceResultField: "distance",
54
+ });
52
55
  });
53
56
  //# sourceMappingURL=embedding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/lib/ai/embedding.ts"],"names":[],"mappings":";;;AAAA,wDAAsD;AACtD,kDAA+D;AAC/D,0CAAwC;AACxC,qCAAkD;AAClD,iCAAoC;AACpC,wCAA4C;AAC5C,uCAA8C;AAEvC,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,uBAAe,CAAC,4CAA4C,EAAE;YACtE,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,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;AAnBW,QAAA,iBAAiB,qBAmB5B;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"}
1
+ {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/lib/ai/embedding.ts"],"names":[],"mappings":";;;AAAA,wDAAsD;AACtD,kDAA+D;AAC/D,qDAAoD;AACpD,0CAAwC;AACxC,qCAAkD;AAClD,iCAAoC;AACpC,wCAA4C;AAC5C,uCAA8C;AAEvC,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,uBAAe,CAAC,4CAA4C,EAAE;YACtE,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,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;AAnBW,QAAA,iBAAiB,qBAmB5B;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;AAKF,IAAA,aAAM,EAAC,GAAG,EAAE;IACV,wBAAgB,GAAG,IAAA,mCAAwB,EAAC,WAAE,EAAE;QAC9C,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAT,oBAAS;QACT,UAAU,EAAE,SAAS;QACrB,YAAY,EAAE,aAAa;QAC3B,WAAW,EAAE,gBAAgB;QAC7B,QAAQ,EAAE,2BAAkB;QAC5B,eAAe,EAAE,QAAQ;QACzB,mBAAmB,EAAE,UAAU;KAChC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { EmbedderReference } from "genkit";
2
- export declare const ai: import("genkit").Genkit;
3
- export declare const geminiEmbedding001: EmbedderReference;
1
+ import { EmbedderReference, Genkit } from "genkit";
2
+ export declare let ai: Genkit;
3
+ export declare let geminiEmbedding001: EmbedderReference;
4
4
  //# sourceMappingURL=genkit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"genkit.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/genkit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAMnD,eAAO,MAAM,EAAE,yBAOb,CAAC;AAEH,eAAO,MAAM,kBAAkB,EAAE,iBAEhC,CAAC"}
1
+ {"version":3,"file":"genkit.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/genkit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,iBAAiB,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAQ3D,eAAO,IAAI,EAAE,EAAE,MAAM,CAAC;AACtB,eAAO,IAAI,kBAAkB,EAAE,iBAAiB,CAAC"}
@@ -3,14 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.geminiEmbedding001 = exports.ai = void 0;
4
4
  const genkit_1 = require("genkit");
5
5
  const google_genai_1 = require("@genkit-ai/google-genai");
6
+ const core_1 = require("firebase-functions/v2/core");
6
7
  const projectId = process.env.GCLOUD_PROJECT || process.env.GCP_PROJECT || "canary-cravery";
7
- exports.ai = (0, genkit_1.genkit)({
8
- plugins: [
9
- (0, google_genai_1.vertexAI)({
10
- location: "us-central1",
11
- projectId,
12
- }),
13
- ],
8
+ // Initialize during Firebase Functions init phase, not at module load
9
+ (0, core_1.onInit)(() => {
10
+ exports.ai = (0, genkit_1.genkit)({
11
+ plugins: [
12
+ (0, google_genai_1.vertexAI)({
13
+ location: "us-central1",
14
+ projectId,
15
+ }),
16
+ ],
17
+ });
18
+ exports.geminiEmbedding001 = google_genai_1.vertexAI.embedder("gemini-embedding-001");
14
19
  });
15
- exports.geminiEmbedding001 = google_genai_1.vertexAI.embedder("gemini-embedding-001");
16
20
  //# sourceMappingURL=genkit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"genkit.js","sourceRoot":"","sources":["../../../src/lib/ai/genkit.ts"],"names":[],"mappings":";;;AAAA,mCAAmD;AACnD,0DAAmD;AAEnD,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,gBAAgB,CAAC;AAE/D,QAAA,EAAE,GAAG,IAAA,eAAM,EAAC;IACvB,OAAO,EAAE;QACP,IAAA,uBAAQ,EAAC;YACP,QAAQ,EAAE,aAAa;YACvB,SAAS;SACV,CAAC;KACH;CACF,CAAC,CAAC;AAEU,QAAA,kBAAkB,GAAsB,uBAAQ,CAAC,QAAQ,CACpE,sBAAsB,CACvB,CAAC"}
1
+ {"version":3,"file":"genkit.js","sourceRoot":"","sources":["../../../src/lib/ai/genkit.ts"],"names":[],"mappings":";;;AAAA,mCAA2D;AAC3D,0DAAmD;AACnD,qDAAoD;AAEpD,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,gBAAgB,CAAC;AAM5E,sEAAsE;AACtE,IAAA,aAAM,EAAC,GAAG,EAAE;IACV,UAAE,GAAG,IAAA,eAAM,EAAC;QACV,OAAO,EAAE;YACP,IAAA,uBAAQ,EAAC;gBACP,QAAQ,EAAE,aAAa;gBACvB,SAAS;aACV,CAAC;SACH;KACF,CAAC,CAAC;IAEH,0BAAkB,GAAG,uBAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/types/core/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAsD,KAAK,MAAM,EAAE,KAAK,iBAAiB,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9H,OAAO,EAML,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,eAAe,EACrB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;EAKK,CAAC;AAE7C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,oBAAoB,CAAC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAczB,CAAC"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/types/core/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAML,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,eAAe,EACrB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;EAKK,CAAC;AAE7C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,oBAAoB,CAAC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAczB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/types/core/settings.ts"],"names":[],"mappings":";;;AAAA,mCAA2B;AAE3B,mCAA8H;AAC9H,sCAWmB;AASN,QAAA,0BAA0B,GAAG,UAAC,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,UAAC,CAAC,OAAO,EAAE;IAClB,IAAI,EAAE,UAAC,CAAC,OAAO,EAAE;IACjB,SAAS,EAAE,UAAC,CAAC,OAAO,EAAE;IACtB,YAAY,EAAE,UAAC,CAAC,OAAO,EAAE;CAC1B,CAA2C,CAAC;AAkBhC,QAAA,cAAc,GAAG,UAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,UAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,UAAC,CAAC,KAAK,CAAC,uBAAc,CAAC;IAClC,WAAW,EAAE,UAAC,CAAC,KAAK,CAAC,yBAAgB,CAAC;IACtC,QAAQ,EAAE,UAAC,CAAC,KAAK,CAAC,sBAAa,CAAC;IAChC,SAAS,EAAE,wBAAe,CAAC,QAAQ,EAAE;IACrC,mBAAmB,EAAE,UAAC,CAAC,KAAK,CAAC,UAAC,CAAC,MAAM,EAAE,CAAC;IACxC,MAAM,EAAE,oBAAY;IACpB,eAAe,EAAE,8BAAqB;IACtC,iBAAiB,EAAE,+BAAuB;IAC1C,KAAK,EAAE,mBAAW;IAClB,aAAa,EAAE,kCAA0B;IACzC,SAAS,EAAE,UAAC,CAAC,MAAM,EAAa;IAChC,SAAS,EAAE,UAAC,CAAC,MAAM,EAAa;CACjC,CAAC,CAAC"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/types/core/settings.ts"],"names":[],"mappings":";;;AAAA,mCAA2B;AAE3B,mCAOiB;AACjB,sCAWmB;AASN,QAAA,0BAA0B,GAAG,UAAC,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,UAAC,CAAC,OAAO,EAAE;IAClB,IAAI,EAAE,UAAC,CAAC,OAAO,EAAE;IACjB,SAAS,EAAE,UAAC,CAAC,OAAO,EAAE;IACtB,YAAY,EAAE,UAAC,CAAC,OAAO,EAAE;CAC1B,CAA2C,CAAC;AAkBhC,QAAA,cAAc,GAAG,UAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,UAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,UAAC,CAAC,KAAK,CAAC,uBAAc,CAAC;IAClC,WAAW,EAAE,UAAC,CAAC,KAAK,CAAC,yBAAgB,CAAC;IACtC,QAAQ,EAAE,UAAC,CAAC,KAAK,CAAC,sBAAa,CAAC;IAChC,SAAS,EAAE,wBAAe,CAAC,QAAQ,EAAE;IACrC,mBAAmB,EAAE,UAAC,CAAC,KAAK,CAAC,UAAC,CAAC,MAAM,EAAE,CAAC;IACxC,MAAM,EAAE,oBAAY;IACpB,eAAe,EAAE,8BAAqB;IACtC,iBAAiB,EAAE,+BAAuB;IAC1C,KAAK,EAAE,mBAAW;IAClB,aAAa,EAAE,kCAA0B;IACzC,SAAS,EAAE,UAAC,CAAC,MAAM,EAAa;IAChC,SAAS,EAAE,UAAC,CAAC,MAAM,EAAa;CACjC,CAAC,CAAC"}
@@ -6,6 +6,7 @@ export interface User {
6
6
  deletedAt?: Timestamp;
7
7
  email: string;
8
8
  id: string;
9
+ imageUrl?: string;
9
10
  name: string;
10
11
  role: UserRole;
11
12
  status: UserStatus;
@@ -18,6 +19,7 @@ export declare const UserSchema: z.ZodObject<{
18
19
  deletedAt: z.ZodOptional<z.ZodType<Timestamp, z.ZodTypeDef, Timestamp>>;
19
20
  email: z.ZodString;
20
21
  id: z.ZodString;
22
+ imageUrl: z.ZodOptional<z.ZodString>;
21
23
  name: z.ZodString;
22
24
  role: z.ZodEnum<["admin", "moderator", "translator", "user", "guest"]>;
23
25
  status: z.ZodEnum<["active", "deleted", "pending", "suspended"]>;
@@ -30,6 +32,7 @@ export declare const UserSchema: z.ZodObject<{
30
32
  deletedAt?: unknown;
31
33
  email?: unknown;
32
34
  id?: unknown;
35
+ imageUrl?: unknown;
33
36
  name?: unknown;
34
37
  role?: unknown;
35
38
  status?: unknown;
@@ -42,6 +45,7 @@ export declare const UserSchema: z.ZodObject<{
42
45
  deletedAt?: unknown;
43
46
  email?: unknown;
44
47
  id?: unknown;
48
+ imageUrl?: unknown;
45
49
  name?: unknown;
46
50
  role?: unknown;
47
51
  status?: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/types/iam/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAoC,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3F,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWrB,CAAC"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/types/iam/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,UAAU,EAChB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYrB,CAAC"}
@@ -8,6 +8,7 @@ exports.UserSchema = genkit_1.z.object({
8
8
  deletedAt: genkit_1.z.custom().optional(),
9
9
  email: genkit_1.z.string().email(),
10
10
  id: genkit_1.z.string(),
11
+ imageUrl: genkit_1.z.string().url().optional(),
11
12
  name: genkit_1.z.string().min(1).max(50),
12
13
  role: enums_1.UserRoleSchema,
13
14
  status: enums_1.UserStatusSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/types/iam/user.ts"],"names":[],"mappings":";;;AAAA,mCAA2B;AAE3B,mCAA2F;AAe9E,QAAA,UAAU,GAAG,UAAC,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,UAAC,CAAC,MAAM,EAAa;IAChC,SAAS,EAAE,UAAC,CAAC,MAAM,EAAa,CAAC,QAAQ,EAAE;IAC3C,KAAK,EAAE,UAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IACzB,EAAE,EAAE,UAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,UAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,sBAAc;IACpB,MAAM,EAAE,wBAAgB;IACxB,cAAc,EAAE,UAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,UAAC,CAAC,MAAM,EAAa;IAChC,QAAQ,EAAE,UAAC,CAAC,OAAO,EAAE;CACtB,CAAC,CAAC"}
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/types/iam/user.ts"],"names":[],"mappings":";;;AAAA,mCAA2B;AAE3B,mCAKiB;AAgBJ,QAAA,UAAU,GAAG,UAAC,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,UAAC,CAAC,MAAM,EAAa;IAChC,SAAS,EAAE,UAAC,CAAC,MAAM,EAAa,CAAC,QAAQ,EAAE;IAC3C,KAAK,EAAE,UAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IACzB,EAAE,EAAE,UAAC,CAAC,MAAM,EAAE;IACd,QAAQ,EAAE,UAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACrC,IAAI,EAAE,UAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,sBAAc;IACpB,MAAM,EAAE,wBAAgB;IACxB,cAAc,EAAE,UAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,UAAC,CAAC,MAAM,EAAa;IAChC,QAAQ,EAAE,UAAC,CAAC,OAAO,EAAE;CACtB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,56 +1,56 @@
1
- {
2
- "name": "@cravery/core",
3
- "version": "0.0.20",
4
- "description": "Clean architecture foundation for Cravery",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "exports": {
8
- ".": {
9
- "types": "./dist/index.d.ts",
10
- "default": "./dist/index.js"
11
- },
12
- "./types": {
13
- "types": "./dist/types/index.d.ts",
14
- "default": "./dist/types/index.js"
15
- },
16
- "./config": {
17
- "types": "./dist/config/index.d.ts",
18
- "default": "./dist/config/index.js"
19
- }
20
- },
21
- "typesVersions": {
22
- "*": {
23
- "types": [
24
- "dist/types/index.d.ts"
25
- ],
26
- "config": [
27
- "dist/config/index.d.ts"
28
- ]
29
- }
30
- },
31
- "scripts": {
32
- "build": "tsc",
33
- "build:watch": "tsc --watch",
34
- "build:clean": "rm -rf dist && npm run build",
35
- "lint": "eslint .",
36
- "test": "jest",
37
- "test:watch": "jest --watch",
38
- "test:coverage": "jest --coverage"
39
- },
40
- "keywords": [],
41
- "dependencies": {
42
- "@genkit-ai/google-genai": "^1.27.0",
43
- "genkit": "^1.27.0"
44
- },
45
- "devDependencies": {
46
- "typescript": "^5.9.3"
47
- },
48
- "peerDependencies": {
49
- "firebase-admin": "^13.6.0",
50
- "firebase-functions": "^7.0.2"
51
- },
52
- "files": [
53
- "dist/**/*",
54
- "src/**/*"
55
- ]
56
- }
1
+ {
2
+ "name": "@cravery/core",
3
+ "version": "0.0.22",
4
+ "description": "Clean architecture foundation for Cravery",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
+ },
12
+ "./types": {
13
+ "types": "./dist/types/index.d.ts",
14
+ "default": "./dist/types/index.js"
15
+ },
16
+ "./config": {
17
+ "types": "./dist/config/index.d.ts",
18
+ "default": "./dist/config/index.js"
19
+ }
20
+ },
21
+ "typesVersions": {
22
+ "*": {
23
+ "types": [
24
+ "dist/types/index.d.ts"
25
+ ],
26
+ "config": [
27
+ "dist/config/index.d.ts"
28
+ ]
29
+ }
30
+ },
31
+ "scripts": {
32
+ "build": "tsc",
33
+ "build:watch": "tsc --watch",
34
+ "build:clean": "rm -rf dist && npm run build",
35
+ "lint": "eslint .",
36
+ "test": "jest",
37
+ "test:watch": "jest --watch",
38
+ "test:coverage": "jest --coverage"
39
+ },
40
+ "keywords": [],
41
+ "dependencies": {
42
+ "@genkit-ai/google-genai": "^1.27.0",
43
+ "genkit": "^1.27.0"
44
+ },
45
+ "devDependencies": {
46
+ "typescript": "^5.9.3"
47
+ },
48
+ "peerDependencies": {
49
+ "firebase-admin": "^13.6.0",
50
+ "firebase-functions": "^7.0.2"
51
+ },
52
+ "files": [
53
+ "dist/**/*",
54
+ "src/**/*"
55
+ ]
56
+ }
@@ -1,5 +1,6 @@
1
1
  import { FieldValue } from "firebase-admin/firestore";
2
2
  import { defineFirestoreRetriever } from "@genkit-ai/firebase";
3
+ import { onInit } from "firebase-functions/v2/core";
3
4
  import { firestore } from "../firebase";
4
5
  import { ai, geminiEmbedding001 } from "./genkit";
5
6
  import { logAIUsage } from "./cost";
@@ -46,13 +47,18 @@ export const storeEmbedding = async (
46
47
  });
47
48
  };
48
49
 
49
- export const recipesRetriever = defineFirestoreRetriever(ai, {
50
- name: "recipesRetriever",
51
- firestore,
52
- collection: "recipes",
53
- contentField: "searchTerms",
54
- vectorField: "titleEmbedding",
55
- embedder: geminiEmbedding001,
56
- distanceMeasure: "COSINE",
57
- distanceResultField: "distance",
50
+ // Defer retriever initialization to avoid deployment timeout
51
+ export let recipesRetriever: any;
52
+
53
+ onInit(() => {
54
+ recipesRetriever = defineFirestoreRetriever(ai, {
55
+ name: "recipesRetriever",
56
+ firestore,
57
+ collection: "recipes",
58
+ contentField: "searchTerms",
59
+ vectorField: "titleEmbedding",
60
+ embedder: geminiEmbedding001,
61
+ distanceMeasure: "COSINE",
62
+ distanceResultField: "distance",
63
+ });
58
64
  });
@@ -1,89 +1,89 @@
1
- import { z } from "genkit";
2
- import { AI_MODELS } from "../../config/ai";
3
- import { logAIUsage } from "./cost";
4
- import { ai } from "./genkit";
5
- import { uploadImageToStorage } from "../storage";
6
- import { AIModelConfig } from "../../types";
7
-
8
- export const ImagenOutputSchema = z.object({
9
- images: z.array(
10
- z.object({
11
- url: z.string(),
12
- path: z.string(),
13
- }),
14
- ),
15
- });
16
-
17
- export type FlowHandler<T, R> = (input: T, output: R | null) => Promise<R>;
18
- export type ImageFlowHandler<T> = (
19
- input: T,
20
- prompt: string,
21
- ) => Promise<{ base64Data: string; storagePath: string }[]>;
22
-
23
- export const createGeminiFlow = <T, R>(
24
- name: string,
25
- inputSchema: z.ZodSchema<T>,
26
- outputSchema: z.ZodSchema<R>,
27
- handler: FlowHandler<T, R>,
28
- model: AIModelConfig = AI_MODELS.Gemini25Flash,
29
- ) => {
30
- const FlowInputSchema = ai.defineSchema(`${name}InputSchema`, inputSchema);
31
- const FlowOutputSchema = ai.defineSchema(`${name}OutputSchema`, outputSchema);
32
- const prompt = ai.prompt<
33
- typeof FlowInputSchema,
34
- typeof FlowOutputSchema,
35
- z.ZodTypeAny
36
- >(name);
37
-
38
- return ai.defineFlow(
39
- {
40
- name: name,
41
- inputSchema: inputSchema,
42
- outputSchema: outputSchema,
43
- },
44
- async (input: T) => {
45
- const response = await prompt(input);
46
- logAIUsage({
47
- type: "multimodal",
48
- flowName: name,
49
- model,
50
- inputTokens: response.usage?.inputTokens || 0,
51
- outputTokens: response.usage?.outputTokens || 0,
52
- });
53
- return handler(input, response.output);
54
- },
55
- );
56
- };
57
-
58
- export const createImagenFlow = <T>(
59
- name: string,
60
- inputSchema: z.ZodSchema<T>,
61
- handler: ImageFlowHandler<T>,
62
- model: AIModelConfig = AI_MODELS.Imagen4Fast,
63
- ) => {
64
- return ai.defineFlow(
65
- {
66
- name: name,
67
- inputSchema: inputSchema,
68
- outputSchema: ImagenOutputSchema,
69
- },
70
- async (input: T) => {
71
- const imageData = await handler(input, name);
72
- const uploadPromises = imageData.map(({ base64Data, storagePath }) =>
73
- uploadImageToStorage(base64Data, storagePath).catch((err) => {
74
- throw err;
75
- }),
76
- );
77
- const uploadedImages = await Promise.all(uploadPromises);
78
- logAIUsage({
79
- type: "image",
80
- flowName: name,
81
- model,
82
- imageCount: imageData.length,
83
- });
84
- return {
85
- images: uploadedImages,
86
- };
87
- },
88
- );
89
- };
1
+ import { z } from "genkit";
2
+ import { AI_MODELS } from "../../config/ai";
3
+ import { logAIUsage } from "./cost";
4
+ import { ai } from "./genkit";
5
+ import { uploadImageToStorage } from "../storage";
6
+ import { AIModelConfig } from "../../types";
7
+
8
+ export const ImagenOutputSchema = z.object({
9
+ images: z.array(
10
+ z.object({
11
+ url: z.string(),
12
+ path: z.string(),
13
+ }),
14
+ ),
15
+ });
16
+
17
+ export type FlowHandler<T, R> = (input: T, output: R | null) => Promise<R>;
18
+ export type ImageFlowHandler<T> = (
19
+ input: T,
20
+ prompt: string,
21
+ ) => Promise<{ base64Data: string; storagePath: string }[]>;
22
+
23
+ export const createGeminiFlow = <T, R>(
24
+ name: string,
25
+ inputSchema: z.ZodSchema<T>,
26
+ outputSchema: z.ZodSchema<R>,
27
+ handler: FlowHandler<T, R>,
28
+ model: AIModelConfig = AI_MODELS.Gemini25Flash,
29
+ ) => {
30
+ const FlowInputSchema = ai.defineSchema(`${name}InputSchema`, inputSchema);
31
+ const FlowOutputSchema = ai.defineSchema(`${name}OutputSchema`, outputSchema);
32
+ const prompt = ai.prompt<
33
+ typeof FlowInputSchema,
34
+ typeof FlowOutputSchema,
35
+ z.ZodTypeAny
36
+ >(name);
37
+
38
+ return ai.defineFlow(
39
+ {
40
+ name: name,
41
+ inputSchema: inputSchema,
42
+ outputSchema: outputSchema,
43
+ },
44
+ async (input: T) => {
45
+ const response = await prompt(input);
46
+ logAIUsage({
47
+ type: "multimodal",
48
+ flowName: name,
49
+ model,
50
+ inputTokens: response.usage?.inputTokens || 0,
51
+ outputTokens: response.usage?.outputTokens || 0,
52
+ });
53
+ return handler(input, response.output);
54
+ },
55
+ );
56
+ };
57
+
58
+ export const createImagenFlow = <T>(
59
+ name: string,
60
+ inputSchema: z.ZodSchema<T>,
61
+ handler: ImageFlowHandler<T>,
62
+ model: AIModelConfig = AI_MODELS.Imagen4Fast,
63
+ ) => {
64
+ return ai.defineFlow(
65
+ {
66
+ name: name,
67
+ inputSchema: inputSchema,
68
+ outputSchema: ImagenOutputSchema,
69
+ },
70
+ async (input: T) => {
71
+ const imageData = await handler(input, name);
72
+ const uploadPromises = imageData.map(({ base64Data, storagePath }) =>
73
+ uploadImageToStorage(base64Data, storagePath).catch((err) => {
74
+ throw err;
75
+ }),
76
+ );
77
+ const uploadedImages = await Promise.all(uploadPromises);
78
+ logAIUsage({
79
+ type: "image",
80
+ flowName: name,
81
+ model,
82
+ imageCount: imageData.length,
83
+ });
84
+ return {
85
+ images: uploadedImages,
86
+ };
87
+ },
88
+ );
89
+ };
@@ -1,18 +1,24 @@
1
- import { genkit, EmbedderReference } from "genkit";
1
+ import { genkit, EmbedderReference, Genkit } from "genkit";
2
2
  import { vertexAI } from "@genkit-ai/google-genai";
3
+ import { onInit } from "firebase-functions/v2/core";
3
4
 
4
5
  const projectId =
5
6
  process.env.GCLOUD_PROJECT || process.env.GCP_PROJECT || "canary-cravery";
6
7
 
7
- export const ai = genkit({
8
- plugins: [
9
- vertexAI({
10
- location: "us-central1",
11
- projectId,
12
- }),
13
- ],
14
- });
8
+ // Declare but don't initialize yet - will be initialized in onInit
9
+ export let ai: Genkit;
10
+ export let geminiEmbedding001: EmbedderReference;
11
+
12
+ // Initialize during Firebase Functions init phase, not at module load
13
+ onInit(() => {
14
+ ai = genkit({
15
+ plugins: [
16
+ vertexAI({
17
+ location: "us-central1",
18
+ projectId,
19
+ }),
20
+ ],
21
+ });
15
22
 
16
- export const geminiEmbedding001: EmbedderReference = vertexAI.embedder(
17
- "gemini-embedding-001",
18
- );
23
+ geminiEmbedding001 = vertexAI.embedder("gemini-embedding-001");
24
+ });