{"version":3,"sources":["../src/user-engagement.ts"],"sourcesContent":["/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { z } from 'genkit';\nimport { appendSpan, SPAN_TYPE_ATTR } from 'genkit/tracing';\n\n/** Explicit user sentiment of response. */\nexport enum FirebaseUserFeedbackEnum {\n  /** The user reacted positively to the response. */\n  POSITIVE = 'positive',\n  /** The user reacted negatively to the response. */\n  NEGATIVE = 'negative',\n}\n\n/** Implicit user acceptance of response. */\nexport enum FirebaseUserAcceptanceEnum {\n  /** The user took the desired action. */\n  ACCEPTED = 'accepted',\n  /** The user did not take the desired action. */\n  REJECTED = 'rejected',\n}\n\n/** Explicit user feedback on response. */\nexport const FirebaseUserFeedbackSchema = z.object({\n  /** User sentiment of response. */\n  value: z.nativeEnum(FirebaseUserFeedbackEnum),\n  /** Optional free text feedback to supplement score. */\n  text: z.optional(z.string()),\n});\n\n/** Implicit user acceptance of response. */\nexport const FirebaseUserAcceptanceSchema = z.object({\n  /** Whether the user took the desired action based on the response. */\n  value: z.nativeEnum(FirebaseUserAcceptanceEnum),\n});\n\n/** Schema for providing user engagement metadata. One or both of feedback and acceptance should be provided. */\nexport const FirebaseUserEngagementSchema = z.object({\n  /** Flow or feature name. */\n  name: z.string(),\n  /**\n   * The trace ID of the execution for which we've received user engagement data.\n   */\n  traceId: z.string(),\n  /** The root span ID of the execution for which we've received user engagement data. */\n  spanId: z.string(),\n  /** Explicit user feedback on response. */\n  feedback: z.optional(FirebaseUserFeedbackSchema),\n  /** Implicit user acceptance of response. */\n  acceptance: z.optional(FirebaseUserAcceptanceSchema),\n});\nexport type FirebaseUserEngagement = z.infer<\n  typeof FirebaseUserEngagementSchema\n>;\n\n/** Associates user engagement metadata with the specified flow execution. */\nexport async function collectUserEngagement(\n  userEngagement: FirebaseUserEngagement\n) {\n  // Collect user feedback, if provided\n  if (userEngagement.feedback?.value) {\n    const metadata = {\n      feedbackValue: userEngagement.feedback.value,\n      subtype: 'userFeedback',\n    };\n    if (userEngagement.feedback.text) {\n      metadata['textFeedback'] = userEngagement.feedback.text;\n    }\n\n    await appendSpan(\n      userEngagement.traceId,\n      userEngagement.spanId,\n      {\n        name: 'user-feedback',\n        path: `/{${userEngagement.name}}`,\n        metadata: metadata,\n      },\n      {\n        [SPAN_TYPE_ATTR]: 'userEngagement',\n      }\n    );\n  }\n\n  // Collect user acceptance, if provided\n  if (userEngagement.acceptance?.value) {\n    await appendSpan(\n      userEngagement.traceId,\n      userEngagement.spanId,\n      {\n        name: 'user-acceptance',\n        path: `/{${userEngagement.name}}`,\n        metadata: {\n          acceptanceValue: userEngagement.acceptance.value,\n          subtype: 'userAcceptance',\n        },\n      },\n      {\n        [SPAN_TYPE_ATTR]: 'userEngagement',\n      }\n    );\n  }\n}\n"],"mappings":"AAgBA,SAAS,SAAS;AAClB,SAAS,YAAY,sBAAsB;AAGpC,IAAK,2BAAL,kBAAKA,8BAAL;AAEL,EAAAA,0BAAA,cAAW;AAEX,EAAAA,0BAAA,cAAW;AAJD,SAAAA;AAAA,GAAA;AAQL,IAAK,6BAAL,kBAAKC,gCAAL;AAEL,EAAAA,4BAAA,cAAW;AAEX,EAAAA,4BAAA,cAAW;AAJD,SAAAA;AAAA,GAAA;AAQL,MAAM,6BAA6B,EAAE,OAAO;AAAA;AAAA,EAEjD,OAAO,EAAE,WAAW,wBAAwB;AAAA;AAAA,EAE5C,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;AAC7B,CAAC;AAGM,MAAM,+BAA+B,EAAE,OAAO;AAAA;AAAA,EAEnD,OAAO,EAAE,WAAW,0BAA0B;AAChD,CAAC;AAGM,MAAM,+BAA+B,EAAE,OAAO;AAAA;AAAA,EAEnD,MAAM,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,EAIf,SAAS,EAAE,OAAO;AAAA;AAAA,EAElB,QAAQ,EAAE,OAAO;AAAA;AAAA,EAEjB,UAAU,EAAE,SAAS,0BAA0B;AAAA;AAAA,EAE/C,YAAY,EAAE,SAAS,4BAA4B;AACrD,CAAC;AAMD,eAAsB,sBACpB,gBACA;AAEA,MAAI,eAAe,UAAU,OAAO;AAClC,UAAM,WAAW;AAAA,MACf,eAAe,eAAe,SAAS;AAAA,MACvC,SAAS;AAAA,IACX;AACA,QAAI,eAAe,SAAS,MAAM;AAChC,eAAS,cAAc,IAAI,eAAe,SAAS;AAAA,IACrD;AAEA,UAAM;AAAA,MACJ,eAAe;AAAA,MACf,eAAe;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,MAAM,KAAK,eAAe,IAAI;AAAA,QAC9B;AAAA,MACF;AAAA,MACA;AAAA,QACE,CAAC,cAAc,GAAG;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAGA,MAAI,eAAe,YAAY,OAAO;AACpC,UAAM;AAAA,MACJ,eAAe;AAAA,MACf,eAAe;AAAA,MACf;AAAA,QACE,MAAM;AAAA,QACN,MAAM,KAAK,eAAe,IAAI;AAAA,QAC9B,UAAU;AAAA,UACR,iBAAiB,eAAe,WAAW;AAAA,UAC3C,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MACA;AAAA,QACE,CAAC,cAAc,GAAG;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACF;","names":["FirebaseUserFeedbackEnum","FirebaseUserAcceptanceEnum"]}