@reservamos/browser-analytics 1.0.12 → 1.0.13

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reservamos/browser-analytics",
3
- "version": "1.0.12",
3
+ "version": "1.0.13",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/reservamos/reservamos-browser-analytics.git"
@@ -88,6 +88,6 @@
88
88
  "upgradeps": "^2.0.6",
89
89
  "vite": "^5.0.12",
90
90
  "vitest": "^1.2.1",
91
- "@reservamos/js-api-client": "6.0.0-alpha.5"
91
+ "@reservamos/js-api-client": "6.0.0-alpha.6"
92
92
  }
93
93
  }
package/src/index.ts CHANGED
@@ -10,10 +10,11 @@ import type { SearchProps } from '@/events/search';
10
10
  import type { SeatChangeProps } from '@/events/seatChange';
11
11
  import type { ViewResultsProps } from '@/events/viewResults';
12
12
  import type { CreateAnonymousProfileProps } from '@/profiles/createAnonymousProfile';
13
+ import type { CreateFrequentPassengersSchemaProps } from '@/recommendations/createFrequentPassengers';
13
14
  import type { CreateRecommendedSeatsSchemaProps } from '@/recommendations/createRecommendedSeats';
14
15
  import type { GetRecommendedSeatsSchemaProps } from '@/recommendations/getRecommendedSeats';
15
- import type { EventData, EventMetadata } from '@/types/eventData';
16
16
  import type { GetRecommendedTripsProps } from '@/recommendations/getRecommendedTrips';
17
+ import type { EventData, EventMetadata } from '@/types/eventData';
17
18
  import trackCustomEvent from '@/events/customEvent';
18
19
  import identify from '@/events/identify';
19
20
  import trackInterestInHome from '@/events/interestInHome';
@@ -28,7 +29,9 @@ import trackSeatChange from '@/events/seatChange';
28
29
  import trackViewResults from '@/events/viewResults';
29
30
  import init, { isTrackerReady } from '@/init';
30
31
  import createAnonymousProfile from '@/profiles/createAnonymousProfile';
32
+ import createFrequentPassengers from '@/recommendations/createFrequentPassengers';
31
33
  import createRecommendedSeats from '@/recommendations/createRecommendedSeats';
34
+ import getFrequentPassengers from '@/recommendations/getFrequentPassengers';
32
35
  import getRecommendedPlaces from '@/recommendations/getRecommendedPlaces';
33
36
  import getRecommendedSeats from '@/recommendations/getRecommendedSeats';
34
37
  import getRecommendedTrips from '@/recommendations/getRecommendedTrips';
@@ -51,6 +54,8 @@ const analytics = {
51
54
  createRecommendedSeats,
52
55
  getRecommendedSeats,
53
56
  getRecommendedTrips,
57
+ createFrequentPassengers,
58
+ getFrequentPassengers,
54
59
  },
55
60
  track: {
56
61
  search: trackSearch,
@@ -85,6 +90,7 @@ export type {
85
90
  GetRecommendedSeatsSchemaProps,
86
91
  CreateRecommendedSeatsSchemaProps,
87
92
  GetRecommendedTripsProps,
93
+ CreateFrequentPassengersSchemaProps,
88
94
  };
89
95
 
90
96
  export default analytics;
@@ -0,0 +1,35 @@
1
+ import type { CreateFrequentPassengersResponse } from '@reservamos/js-api-client/core';
2
+ import type { CreateFrequentPassengersSchemaProps } from './createFrequentPassengersSchema';
3
+ import coreApi from '@reservamos/js-api-client/core';
4
+ import fingerprintService from '@/services/fingerprint';
5
+ import mixpanelService from '@/services/mixpanel';
6
+ import validatorService from '@/services/validator';
7
+ import CreateFrequentPassengersSchema from './createFrequentPassengersSchema';
8
+
9
+ /**
10
+ * Creates frequent passengers for a user and associates them with Mixpanel tracking.
11
+ * @param {CreateFrequentPassengersSchemaProps} payload - The passenger information to be created
12
+ * @returns {Promise<CreateFrequentPassengersResponse>} A promise that resolves with the created passengers data
13
+ * @throws error if distinct id is not found, props are invalid or if the backend request fails
14
+ */
15
+ async function createFrequentPassengers(
16
+ payload: CreateFrequentPassengersSchemaProps,
17
+ ): Promise<CreateFrequentPassengersResponse> {
18
+ try {
19
+ validatorService.validateProps(payload, CreateFrequentPassengersSchema);
20
+ const distinctId = mixpanelService.getMixpanelDistinctId();
21
+ const userFingerprintId = fingerprintService.getCachedFingerprint();
22
+ if (!distinctId) {
23
+ throw new Error('No distinct ID found');
24
+ }
25
+ return await coreApi.recommendations.createFrequentPassengers({
26
+ ...payload,
27
+ distinct_id: distinctId,
28
+ device_fingerprint: userFingerprintId || '',
29
+ });
30
+ } catch (error) {
31
+ throw new Error(error instanceof Error ? error.message : String(error));
32
+ }
33
+ }
34
+
35
+ export default createFrequentPassengers;
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+
3
+ const FrequentPassengersSchema = z.object({
4
+ id: z.number(),
5
+ first_name: z.string(),
6
+ last_name: z.string(),
7
+ second_last_name: z.string(),
8
+ category: z.string(),
9
+ bus_category: z.string(),
10
+ gender: z.string(),
11
+ email: z.string(),
12
+ });
13
+
14
+ const CreateFrequentPassengersSchema = z.object({
15
+ passengers: z.array(FrequentPassengersSchema).min(1),
16
+ });
17
+
18
+ type CreateFrequentPassengersSchemaProps = z.infer<
19
+ typeof CreateFrequentPassengersSchema
20
+ >;
21
+
22
+ export type { CreateFrequentPassengersSchemaProps };
23
+ export default CreateFrequentPassengersSchema;
@@ -0,0 +1,5 @@
1
+ import type { CreateFrequentPassengersSchemaProps } from './createFrequentPassengersSchema';
2
+ import createFrequentPassengers from './createFrequentPassengers';
3
+
4
+ export type { CreateFrequentPassengersSchemaProps };
5
+ export default createFrequentPassengers;
@@ -0,0 +1,24 @@
1
+ import type { FrequentPassengersResponse } from '@reservamos/js-api-client/core';
2
+ import coreApi from '@reservamos/js-api-client/core';
3
+ import mixpanelService from '@/services/mixpanel';
4
+
5
+ /**
6
+ * Retrieves frequent passengers data using the Mixpanel distinct ID.
7
+ * @async
8
+ * @returns {Promise<FrequentPassengersResponse>} A promise that resolves to the frequent passengers data
9
+ * @throws {Error} if distinct id is not found, props are invalid or if the backend request fails
10
+ * @throws {Error} When the API request fails
11
+ */
12
+ async function getFrequentPassengers(): Promise<FrequentPassengersResponse> {
13
+ try {
14
+ const distinctId = mixpanelService.getMixpanelDistinctId();
15
+ if (!distinctId) {
16
+ throw new Error('No distinct ID found');
17
+ }
18
+ return await coreApi.recommendations.getFrequentPassengers(distinctId);
19
+ } catch (error) {
20
+ throw new Error(error instanceof Error ? error.message : String(error));
21
+ }
22
+ }
23
+
24
+ export default getFrequentPassengers;
@@ -0,0 +1,3 @@
1
+ import getFrequentPassengers from './getFrequentPassengers';
2
+
3
+ export default getFrequentPassengers;