@edulib-france/expo-yawl 0.0.2 → 0.0.4

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/README.md CHANGED
@@ -1,12 +1,9 @@
1
+ ![NPM Version](https://img.shields.io/npm/v/@edulib-france/expo-yawl)
2
+
1
3
  # @edulib-france/expo-yawl
2
4
 
3
5
  Yawl for React Native
4
6
 
5
- # API documentation
6
-
7
- - [Documentation for the latest stable release](https://docs.expo.dev/versions/latest/sdk/@edulib-france/yawl/)
8
- - [Documentation for the main branch](https://docs.expo.dev/versions/unversioned/sdk/@edulib-france/yawl/)
9
-
10
7
  # Installation in managed Expo projects
11
8
 
12
9
  For [managed](https://docs.expo.dev/archive/managed-vs-bare/) Expo projects, please follow the installation instructions in the [API documentation for the latest stable release](#api-documentation). If you follow the link and there is no documentation available then this library is not yet usable within managed projects — it is likely to be included in an upcoming Expo SDK release.
@@ -21,15 +18,47 @@ For bare React Native projects, you must ensure that you have [installed and con
21
18
  npm install @edulib-france/expo-yawl
22
19
  ```
23
20
 
24
- ### Configure for Android
21
+ ### Configure for iOS
25
22
 
23
+ Run `npx pod-install` after installing the npm package.
26
24
 
25
+ # Configuration
27
26
 
27
+ ```ts
28
+ export const yawl = new Yawl({
29
+ apiKey: "key",
30
+ env: "staging | prod", // default is prod
31
+ });
32
+ ```
28
33
 
29
- ### Configure for iOS
34
+ # Usage
30
35
 
31
- Run `npx pod-install` after installing the npm package.
36
+ ## Initialize Yawl
32
37
 
33
- # Contributing
38
+ Must be called before any other Yawl method.
34
39
 
35
- Contributions are very welcome! Please refer to guidelines described in the [contributing guide]( https://github.com/expo/expo#contributing).
40
+ ```ts
41
+ await yawl.init();
42
+ ```
43
+
44
+ ## Track Events
45
+
46
+ ```ts
47
+ yawl.track({
48
+ name: string,
49
+ ean?: string,
50
+ establishment_account_id?: string,
51
+ properties?: Record<string, unknown>,
52
+ user_type?: string
53
+ });
54
+ ```
55
+
56
+ ## Track Views
57
+
58
+ We still need to find the best way to get the view name in React Native. For now, we can use the `page` property to set the view name.
59
+
60
+ ```ts
61
+ yawl.trackView({
62
+ page: "page_name",
63
+ });
64
+ ```
@@ -1,8 +1,11 @@
1
1
  export type YawlEvent = {
2
2
  name: string;
3
3
  ean?: string;
4
- establishment_account_id: string;
4
+ establishment_account_id?: string;
5
5
  properties?: Record<string, unknown>;
6
- user_type: string;
6
+ user_type?: string;
7
+ };
8
+ export type YawlView = {
9
+ page: string;
7
10
  };
8
11
  //# sourceMappingURL=Yawl.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Yawl.types.d.ts","sourceRoot":"","sources":["../src/Yawl.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wBAAwB,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
1
+ {"version":3,"file":"Yawl.types.d.ts","sourceRoot":"","sources":["../src/Yawl.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Yawl.types.js","sourceRoot":"","sources":["../src/Yawl.types.ts"],"names":[],"mappings":"","sourcesContent":["export type YawlEvent = {\n name: string;\n ean?: string;\n establishment_account_id: string;\n properties?: Record<string, unknown>;\n user_type: string;\n};\n"]}
1
+ {"version":3,"file":"Yawl.types.js","sourceRoot":"","sources":["../src/Yawl.types.ts"],"names":[],"mappings":"","sourcesContent":["export type YawlEvent = {\n name: string;\n ean?: string;\n establishment_account_id?: string;\n properties?: Record<string, unknown>;\n user_type?: string;\n};\n\nexport type YawlView = {\n page: string;\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { YawlEvent } from "../Yawl.types";
1
+ import { YawlEvent, YawlView } from "../Yawl.types";
2
2
  import { Env } from "./api";
3
3
  export default class Yawl {
4
4
  private visitId;
@@ -13,7 +13,31 @@ export default class Yawl {
13
13
  });
14
14
  init: () => Promise<void>;
15
15
  setVisitId: (visitId: string) => Promise<void>;
16
- track: (event: YawlEvent) => YawlEvent;
16
+ track: (event: YawlEvent) => {
17
+ event: {
18
+ name: string;
19
+ ean?: string;
20
+ establishment_account_id?: string;
21
+ properties?: Record<string, unknown>;
22
+ user_type?: string;
23
+ id: string;
24
+ visit_token: string;
25
+ visitor_token: string;
26
+ timestamp: number;
27
+ };
28
+ };
29
+ trackView: (view: YawlView) => {
30
+ event: {
31
+ name: string;
32
+ url: string;
33
+ title: string;
34
+ page: string;
35
+ id: string;
36
+ visit_token: string;
37
+ visitor_token: string;
38
+ timestamp: number;
39
+ };
40
+ };
17
41
  private loadVisitorId;
18
42
  private getVisitData;
19
43
  private initConnection;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAoB,MAAM,OAAO,CAAC;AA6B9C,MAAM,CAAC,OAAO,OAAO,IAAI;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,GAAG,CAAU;gBAET,EAAE,MAAM,EAAE,GAAY,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE;IAMnE,IAAI,sBAMF;IAEF,UAAU,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAMjD;IAEF,KAAK,GAAI,OAAO,SAAS,eAgBvB;YAEY,aAAa;YASb,YAAY;IAU1B,OAAO,CAAC,cAAc,CAMpB;IAEF,OAAO,CAAC,SAAS,CAIf;IAEF,OAAO,CAAC,UAAU,CAAwC;IAE1D,OAAO,CAAC,SAAS,CAQf;IAEF,OAAO,CAAC,iBAAiB,CAUvB;IAEF,OAAO,CAAC,iBAAiB,CA4BvB;IAEF,OAAO,CAAC,gBAAgB,CA6BtB;CACH"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,GAAG,EAAoB,MAAM,OAAO,CAAC;AA6B9C,MAAM,CAAC,OAAO,OAAO,IAAI;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,GAAG,CAAU;gBAET,EAAE,MAAM,EAAE,GAAY,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE;IAMnE,IAAI,sBAMF;IAEF,UAAU,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAMjD;IAEF,KAAK,GAAI,OAAO,SAAS;;;;;;;;;;;;MAgBvB;IAEF,SAAS,GAAI,MAAM,QAAQ;;;;;;;;;;;MAezB;YAEY,aAAa;YASb,YAAY;IAU1B,OAAO,CAAC,cAAc,CAMpB;IAEF,OAAO,CAAC,SAAS,CAIf;IAEF,OAAO,CAAC,UAAU,CAAwC;IAE1D,OAAO,CAAC,SAAS,CAQf;IAEF,OAAO,CAAC,iBAAiB,CAUvB;IAEF,OAAO,CAAC,iBAAiB,CA4BvB;IAEF,OAAO,CAAC,gBAAgB,CA6BtB;CACH"}
@@ -67,7 +67,23 @@ export default class Yawl {
67
67
  // await this.onTrackingInvoke("started", event);
68
68
  // Create ahoy job and add to queue
69
69
  this.createJob(JOB_TRACKING, _event);
70
- return event;
70
+ return _event;
71
+ };
72
+ trackView = (view) => {
73
+ const _event = {
74
+ event: {
75
+ name: "$view",
76
+ url: view.page,
77
+ title: view.page,
78
+ page: view.page,
79
+ id: generateUUID(),
80
+ visit_token: this.visitId,
81
+ visitor_token: this.visitorId,
82
+ timestamp: new Date().getTime() / 1000.0,
83
+ },
84
+ };
85
+ this.createJob(JOB_TRACKING, _event);
86
+ return _event;
71
87
  };
72
88
  async loadVisitorId() {
73
89
  const visitorIdKey = "yawl_visitorId";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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","sourcesContent":["import AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport { addNetworkStateListener, getNetworkStateAsync } from \"expo-network\";\nimport queueFactory from \"react-native-queue\";\n\nimport { YawlEvent } from \"../Yawl.types\";\nimport { Env, YawlApi, yawlApi } from \"./api\";\nimport { getDeviceInfo } from \"./deviceInfo\";\nimport { generateUUID } from \"./generateUUID\";\n\n/*\n\nINPUT PARAMETERS:\n{\n visitorId: string - visitor id\n visitData: object - extra visit data to be sent to ahoy server\n onTracking: {\n started: async (event) - function that will be invoked after tracking start\n succeeded: async (event) - function that will be invoked when tracking success\n failure: async (event) - function that will be invoked when tracking failure (before failed)\n failed: async (event) - function that will be invoked if tracking fails\n error: async ({ name, error }) - function that will be invoked when error occured\n }\n offlineMode: boolean - ONLY FOR TESTING PURPOSES, indicates if you want to test with no internet\n}\n*/\n\nconst JOB_VISITOR = \"visitor\";\nconst JOB_TRACKING = \"tracking\";\ntype JOB_TYPES = typeof JOB_TRACKING | typeof JOB_VISITOR;\nconst WORKERS_OPTIONS = {\n timeout: 20000,\n attempts: 1000,\n concurrency: 1,\n};\nexport default class Yawl {\n private visitId: string;\n private visitorId: string;\n private offlineMode: boolean = false;\n private hasInternetAccess: boolean | undefined = true;\n private queue: any;\n private api: YawlApi;\n\n constructor({ apiKey, env = \"prod\" }: { apiKey: string; env?: Env }) {\n this.api = yawlApi({ apiKey, env });\n this.visitId = generateUUID();\n this.visitorId = generateUUID();\n }\n\n init = async () => {\n await this.initConnection();\n await this.initQueue();\n await this.loadVisitorId();\n const data = await this.getVisitData();\n this.createJob(JOB_VISITOR, data);\n };\n\n setVisitId = async (visitId: string): Promise<void> => {\n this.visitId = visitId;\n\n if (this.hasInternetAccess) {\n this.trackVisit(await this.getVisitData());\n }\n };\n\n track = (event: YawlEvent) => {\n const _event = {\n event: {\n id: generateUUID(),\n visit_token: this.visitId,\n visitor_token: this.visitorId,\n timestamp: new Date().getTime() / 1000.0,\n ...event,\n // properties: this.prepareProperties(event.properties),\n },\n };\n // Send event to all services before ahoy queue\n // await this.onTrackingInvoke(\"started\", event);\n // Create ahoy job and add to queue\n this.createJob(JOB_TRACKING, _event);\n return event;\n };\n\n private async loadVisitorId(): Promise<void> {\n const visitorIdKey = \"yawl_visitorId\";\n const visitorId = await AsyncStorage.getItem(visitorIdKey);\n if (!visitorId)\n return await AsyncStorage.setItem(visitorIdKey, this.visitorId);\n\n this.visitorId = visitorId;\n }\n\n private async getVisitData(): Promise<object> {\n return {\n visit: {\n visit_token: this.visitId,\n visitor_token: this.visitorId,\n ...getDeviceInfo(),\n },\n };\n }\n\n private initConnection = async () => {\n const state = await getNetworkStateAsync();\n this.hasInternetAccess = state.isConnected;\n addNetworkStateListener(\n (state) => (this.hasInternetAccess = state.isConnected)\n );\n };\n\n private initQueue = async () => {\n this.queue = await queueFactory(true);\n this.addTrackingWorker();\n this.addVisitorWorker();\n };\n\n private trackVisit = (event) => this.api.sendVisit(event);\n\n private createJob = (name: JOB_TYPES, event: object) => {\n if (this.offlineMode) {\n this.hasInternetAccess = false;\n }\n\n if (this.queue) {\n this.queue.createJob(name, event);\n }\n };\n\n private prepareProperties = (inter: object) => {\n const properties = {\n // applicationBundleId: this.applicationBundleId,\n };\n Object.keys(inter).map((name, key) => {\n const k = name.replace(/[^a-z0-9_]/gi, \"\");\n const val = inter[name];\n properties[k] = typeof val === \"boolean\" ? val.toString() : val;\n });\n return properties;\n };\n\n private addTrackingWorker = () => {\n this.queue.addWorker(\n JOB_TRACKING,\n async (id, event) => {\n if (this.hasInternetAccess) {\n const res = await this.api.sendEvent(event);\n // TODO: parse response\n console.debug(\"🚀 ===> ~ res:\", res);\n return { ok: true };\n }\n throw new Error(\"Network request failed\");\n },\n {\n onSuccess: async (id, event) => {\n console.debug(\"🚀 ===> JOB_TRACKING onSuccess\", id, event);\n // await this.onTrackingInvoke(\"succeeded\", event);\n },\n onFailure: async (id, event, error) => {\n console.debug(\"🚀 ===> JOB_TRACKING onFailure\", id, event, error);\n // await this.onTrackingInvoke(\"failure\", event, error);\n },\n onFailed: async (id, event, error) => {\n console.debug(\"🚀 ===> JOB_TRACKING onFailed\", id, event, error);\n // await this.onTrackingInvoke(\"failed\", event, error);\n },\n ...WORKERS_OPTIONS,\n }\n );\n };\n\n private addVisitorWorker = () => {\n this.queue.addWorker(\n JOB_VISITOR,\n async (id, event) => {\n if (this.hasInternetAccess) {\n const res = await this.trackVisit(event);\n // TODO: parse response\n console.debug(\"🚀 ===> ~ res:\", res);\n return { ok: true };\n }\n\n throw new Error(\"Network request failed\");\n },\n {\n onSuccess: async (id, event) => {\n console.debug(\"🚀 ===> JOB_VISITOR ~ onSuccess: ~ event:\", id, event);\n // await this.onTrackingInvoke(\"succeeded\", event);\n },\n onFailure: async (id, event, error) => {\n console.debug(\"🚀 ===> JOB_VISITOR ~ onFailure: ~ error:\", id, error);\n // await this.onTrackingInvoke(\"failure\", event, error);\n },\n onFailed: async (id, event, error) => {\n console.debug(\"🚀 ===> JOB_VISITOR ~ onFailed: ~ error:\", id, error);\n // await this.onTrackingInvoke(\"failed\", event, error);\n },\n ...WORKERS_OPTIONS,\n }\n );\n };\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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","sourcesContent":["import AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport { addNetworkStateListener, getNetworkStateAsync } from \"expo-network\";\nimport queueFactory from \"react-native-queue\";\n\nimport { YawlEvent, YawlView } from \"../Yawl.types\";\nimport { Env, YawlApi, yawlApi } from \"./api\";\nimport { getDeviceInfo } from \"./deviceInfo\";\nimport { generateUUID } from \"./generateUUID\";\n\n/*\n\nINPUT PARAMETERS:\n{\n visitorId: string - visitor id\n visitData: object - extra visit data to be sent to ahoy server\n onTracking: {\n started: async (event) - function that will be invoked after tracking start\n succeeded: async (event) - function that will be invoked when tracking success\n failure: async (event) - function that will be invoked when tracking failure (before failed)\n failed: async (event) - function that will be invoked if tracking fails\n error: async ({ name, error }) - function that will be invoked when error occured\n }\n offlineMode: boolean - ONLY FOR TESTING PURPOSES, indicates if you want to test with no internet\n}\n*/\n\nconst JOB_VISITOR = \"visitor\";\nconst JOB_TRACKING = \"tracking\";\ntype JOB_TYPES = typeof JOB_TRACKING | typeof JOB_VISITOR;\nconst WORKERS_OPTIONS = {\n timeout: 20000,\n attempts: 1000,\n concurrency: 1,\n};\nexport default class Yawl {\n private visitId: string;\n private visitorId: string;\n private offlineMode: boolean = false;\n private hasInternetAccess: boolean | undefined = true;\n private queue: any;\n private api: YawlApi;\n\n constructor({ apiKey, env = \"prod\" }: { apiKey: string; env?: Env }) {\n this.api = yawlApi({ apiKey, env });\n this.visitId = generateUUID();\n this.visitorId = generateUUID();\n }\n\n init = async () => {\n await this.initConnection();\n await this.initQueue();\n await this.loadVisitorId();\n const data = await this.getVisitData();\n this.createJob(JOB_VISITOR, data);\n };\n\n setVisitId = async (visitId: string): Promise<void> => {\n this.visitId = visitId;\n\n if (this.hasInternetAccess) {\n this.trackVisit(await this.getVisitData());\n }\n };\n\n track = (event: YawlEvent) => {\n const _event = {\n event: {\n id: generateUUID(),\n visit_token: this.visitId,\n visitor_token: this.visitorId,\n timestamp: new Date().getTime() / 1000.0,\n ...event,\n // properties: this.prepareProperties(event.properties),\n },\n };\n // Send event to all services before ahoy queue\n // await this.onTrackingInvoke(\"started\", event);\n // Create ahoy job and add to queue\n this.createJob(JOB_TRACKING, _event);\n return _event;\n };\n\n trackView = (view: YawlView) => {\n const _event = {\n event: {\n name: \"$view\",\n url: view.page,\n title: view.page,\n page: view.page,\n id: generateUUID(),\n visit_token: this.visitId,\n visitor_token: this.visitorId,\n timestamp: new Date().getTime() / 1000.0,\n },\n };\n this.createJob(JOB_TRACKING, _event);\n return _event;\n };\n\n private async loadVisitorId(): Promise<void> {\n const visitorIdKey = \"yawl_visitorId\";\n const visitorId = await AsyncStorage.getItem(visitorIdKey);\n if (!visitorId)\n return await AsyncStorage.setItem(visitorIdKey, this.visitorId);\n\n this.visitorId = visitorId;\n }\n\n private async getVisitData(): Promise<object> {\n return {\n visit: {\n visit_token: this.visitId,\n visitor_token: this.visitorId,\n ...getDeviceInfo(),\n },\n };\n }\n\n private initConnection = async () => {\n const state = await getNetworkStateAsync();\n this.hasInternetAccess = state.isConnected;\n addNetworkStateListener(\n (state) => (this.hasInternetAccess = state.isConnected)\n );\n };\n\n private initQueue = async () => {\n this.queue = await queueFactory(true);\n this.addTrackingWorker();\n this.addVisitorWorker();\n };\n\n private trackVisit = (event) => this.api.sendVisit(event);\n\n private createJob = (name: JOB_TYPES, event: object) => {\n if (this.offlineMode) {\n this.hasInternetAccess = false;\n }\n\n if (this.queue) {\n this.queue.createJob(name, event);\n }\n };\n\n private prepareProperties = (inter: object) => {\n const properties = {\n // applicationBundleId: this.applicationBundleId,\n };\n Object.keys(inter).map((name, key) => {\n const k = name.replace(/[^a-z0-9_]/gi, \"\");\n const val = inter[name];\n properties[k] = typeof val === \"boolean\" ? val.toString() : val;\n });\n return properties;\n };\n\n private addTrackingWorker = () => {\n this.queue.addWorker(\n JOB_TRACKING,\n async (id, event) => {\n if (this.hasInternetAccess) {\n const res = await this.api.sendEvent(event);\n // TODO: parse response\n console.debug(\"🚀 ===> ~ res:\", res);\n return { ok: true };\n }\n throw new Error(\"Network request failed\");\n },\n {\n onSuccess: async (id, event) => {\n console.debug(\"🚀 ===> JOB_TRACKING onSuccess\", id, event);\n // await this.onTrackingInvoke(\"succeeded\", event);\n },\n onFailure: async (id, event, error) => {\n console.debug(\"🚀 ===> JOB_TRACKING onFailure\", id, event, error);\n // await this.onTrackingInvoke(\"failure\", event, error);\n },\n onFailed: async (id, event, error) => {\n console.debug(\"🚀 ===> JOB_TRACKING onFailed\", id, event, error);\n // await this.onTrackingInvoke(\"failed\", event, error);\n },\n ...WORKERS_OPTIONS,\n }\n );\n };\n\n private addVisitorWorker = () => {\n this.queue.addWorker(\n JOB_VISITOR,\n async (id, event) => {\n if (this.hasInternetAccess) {\n const res = await this.trackVisit(event);\n // TODO: parse response\n console.debug(\"🚀 ===> ~ res:\", res);\n return { ok: true };\n }\n\n throw new Error(\"Network request failed\");\n },\n {\n onSuccess: async (id, event) => {\n console.debug(\"🚀 ===> JOB_VISITOR ~ onSuccess: ~ event:\", id, event);\n // await this.onTrackingInvoke(\"succeeded\", event);\n },\n onFailure: async (id, event, error) => {\n console.debug(\"🚀 ===> JOB_VISITOR ~ onFailure: ~ error:\", id, error);\n // await this.onTrackingInvoke(\"failure\", event, error);\n },\n onFailed: async (id, event, error) => {\n console.debug(\"🚀 ===> JOB_VISITOR ~ onFailed: ~ error:\", id, error);\n // await this.onTrackingInvoke(\"failed\", event, error);\n },\n ...WORKERS_OPTIONS,\n }\n );\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edulib-france/expo-yawl",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -15,6 +15,7 @@
15
15
  "test": "vitest",
16
16
  "prepare": "expo-module prepare",
17
17
  "prepublishOnly": "expo-module prepublishOnly",
18
+ "publish:npm": "npm run clean && npm run build && npm publish",
18
19
  "expo-module": "expo-module",
19
20
  "open:ios": "xed example/ios",
20
21
  "open:android": "open -a \"Android Studio\" example/android"
@@ -37,7 +38,7 @@
37
38
  "homepage": "https://github.com/edulib-france/expo-yawl#readme",
38
39
  "dependencies": {
39
40
  "@react-native-async-storage/async-storage": "1.23.1",
40
- "react-native-queue": "git+https://github.com/Bravado-network/react-native-queue-asyncstorage.git#async-storage-galatea-384",
41
+ "react-native-queue": "git+https://github.com/edulib-france/react-native-queue-asyncstorage.git#005bb41",
41
42
  "wretch": "^2.11.0",
42
43
  "expo-device": "~7.0.3",
43
44
  "expo-application": "~6.0.2",
package/src/Yawl.types.ts CHANGED
@@ -1,7 +1,11 @@
1
1
  export type YawlEvent = {
2
2
  name: string;
3
3
  ean?: string;
4
- establishment_account_id: string;
4
+ establishment_account_id?: string;
5
5
  properties?: Record<string, unknown>;
6
- user_type: string;
6
+ user_type?: string;
7
+ };
8
+
9
+ export type YawlView = {
10
+ page: string;
7
11
  };
package/src/core/index.ts CHANGED
@@ -2,7 +2,7 @@ import AsyncStorage from "@react-native-async-storage/async-storage";
2
2
  import { addNetworkStateListener, getNetworkStateAsync } from "expo-network";
3
3
  import queueFactory from "react-native-queue";
4
4
 
5
- import { YawlEvent } from "../Yawl.types";
5
+ import { YawlEvent, YawlView } from "../Yawl.types";
6
6
  import { Env, YawlApi, yawlApi } from "./api";
7
7
  import { getDeviceInfo } from "./deviceInfo";
8
8
  import { generateUUID } from "./generateUUID";
@@ -77,7 +77,24 @@ export default class Yawl {
77
77
  // await this.onTrackingInvoke("started", event);
78
78
  // Create ahoy job and add to queue
79
79
  this.createJob(JOB_TRACKING, _event);
80
- return event;
80
+ return _event;
81
+ };
82
+
83
+ trackView = (view: YawlView) => {
84
+ const _event = {
85
+ event: {
86
+ name: "$view",
87
+ url: view.page,
88
+ title: view.page,
89
+ page: view.page,
90
+ id: generateUUID(),
91
+ visit_token: this.visitId,
92
+ visitor_token: this.visitorId,
93
+ timestamp: new Date().getTime() / 1000.0,
94
+ },
95
+ };
96
+ this.createJob(JOB_TRACKING, _event);
97
+ return _event;
81
98
  };
82
99
 
83
100
  private async loadVisitorId(): Promise<void> {