@amplitude/plugin-engagement-react-native 0.1.1-alpha.10

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 (44) hide show
  1. package/LICENSE +20 -0
  2. package/PluginEngagementReactNative.podspec +22 -0
  3. package/README.md +95 -0
  4. package/android/build.gradle +89 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/src/main/AndroidManifest.xml +2 -0
  7. package/android/src/main/java/com/amplitude/pluginengagementreactnative/PluginEngagementReactNativeModule.kt +183 -0
  8. package/android/src/main/java/com/amplitude/pluginengagementreactnative/PluginEngagementReactNativePackage.kt +33 -0
  9. package/ios/AmplitudeEngagementAdapter.swift +121 -0
  10. package/ios/PluginEngagementReactNative.h +5 -0
  11. package/ios/PluginEngagementReactNative.mm +87 -0
  12. package/lib/module/AmplitudeEngagement.js +42 -0
  13. package/lib/module/AmplitudeEngagement.js.map +1 -0
  14. package/lib/module/AmplitudeEngagementPlugin.js +29 -0
  15. package/lib/module/AmplitudeEngagementPlugin.js.map +1 -0
  16. package/lib/module/NativePluginEngagementReactNative.js +5 -0
  17. package/lib/module/NativePluginEngagementReactNative.js.map +1 -0
  18. package/lib/module/index.js +64 -0
  19. package/lib/module/index.js.map +1 -0
  20. package/lib/module/logger.js +53 -0
  21. package/lib/module/logger.js.map +1 -0
  22. package/lib/module/package.json +1 -0
  23. package/lib/module/types.js +2 -0
  24. package/lib/module/types.js.map +1 -0
  25. package/lib/typescript/package.json +1 -0
  26. package/lib/typescript/src/AmplitudeEngagement.d.ts +17 -0
  27. package/lib/typescript/src/AmplitudeEngagement.d.ts.map +1 -0
  28. package/lib/typescript/src/AmplitudeEngagementPlugin.d.ts +10 -0
  29. package/lib/typescript/src/AmplitudeEngagementPlugin.d.ts.map +1 -0
  30. package/lib/typescript/src/NativePluginEngagementReactNative.d.ts +18 -0
  31. package/lib/typescript/src/NativePluginEngagementReactNative.d.ts.map +1 -0
  32. package/lib/typescript/src/index.d.ts +13 -0
  33. package/lib/typescript/src/index.d.ts.map +1 -0
  34. package/lib/typescript/src/logger.d.ts +28 -0
  35. package/lib/typescript/src/logger.d.ts.map +1 -0
  36. package/lib/typescript/src/types.d.ts +7 -0
  37. package/lib/typescript/src/types.d.ts.map +1 -0
  38. package/package.json +168 -0
  39. package/src/AmplitudeEngagement.ts +62 -0
  40. package/src/AmplitudeEngagementPlugin.ts +47 -0
  41. package/src/NativePluginEngagementReactNative.ts +28 -0
  42. package/src/index.tsx +78 -0
  43. package/src/logger.ts +72 -0
  44. package/src/types.ts +7 -0
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ import { NativeModules } from 'react-native';
4
+ const isTurboModuleEnabled = global.__turboModuleProxy != null;
5
+ const PluginEngagementReactNative = isTurboModuleEnabled ? require('./NativePluginEngagementReactNative').default : NativeModules.PluginEngagementReactNative;
6
+ export class AmplitudeEngagement {
7
+ constructor(apiKey) {
8
+ // Initialize the plugin with the API key
9
+ this.id = PluginEngagementReactNative.newInstance(apiKey);
10
+ }
11
+ boot(user_id, device_id) {
12
+ PluginEngagementReactNative.boot(this.id, user_id, device_id);
13
+ }
14
+ setThemeMode(themeMode) {
15
+ return PluginEngagementReactNative.setThemeMode(this.id, themeMode);
16
+ }
17
+ reset(key, stepIndex) {
18
+ return PluginEngagementReactNative.reset(this.id, key, stepIndex);
19
+ }
20
+ list() {
21
+ return PluginEngagementReactNative.list(this.id);
22
+ }
23
+ show(key, stepIndex) {
24
+ return PluginEngagementReactNative.show(this.id, key, stepIndex);
25
+ }
26
+ screen(screenName) {
27
+ return PluginEngagementReactNative.screen(this.id, screenName);
28
+ }
29
+ closeAll() {
30
+ return PluginEngagementReactNative.closeAll(this.id);
31
+ }
32
+ forwardEvent(event) {
33
+ return PluginEngagementReactNative.forwardEvent(this.id, event);
34
+ }
35
+ addCallback(key, func) {
36
+ return PluginEngagementReactNative.addCallback(this.id, key, func);
37
+ }
38
+ handleURL(url) {
39
+ return PluginEngagementReactNative.handleURL(this.id, url);
40
+ }
41
+ }
42
+ //# sourceMappingURL=AmplitudeEngagement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeModules","isTurboModuleEnabled","global","__turboModuleProxy","PluginEngagementReactNative","require","default","AmplitudeEngagement","constructor","apiKey","id","newInstance","boot","user_id","device_id","setThemeMode","themeMode","reset","key","stepIndex","list","show","screen","screenName","closeAll","forwardEvent","event","addCallback","func","handleURL","url"],"sourceRoot":"../../src","sources":["AmplitudeEngagement.ts"],"mappings":";;AACA,SAASA,aAAa,QAAQ,cAAc;AAM5C,MAAMC,oBAAoB,GAAIC,MAAM,CAASC,kBAAkB,IAAI,IAAI;AAEvE,MAAMC,2BAA4D,GAChEH,oBAAoB,GAChBI,OAAO,CAAC,qCAAqC,CAAC,CAACC,OAAO,GACtDN,aAAa,CAACI,2BAA2B;AAE/C,OAAO,MAAMG,mBAAmB,CAAC;EAG/BC,WAAWA,CAACC,MAAc,EAAE;IAC1B;IACA,IAAI,CAACC,EAAE,GAAGN,2BAA2B,CAACO,WAAW,CAACF,MAAM,CAAC;EAC3D;EAEAG,IAAIA,CAACC,OAAe,EAAEC,SAAiB,EAAQ;IAC7CV,2BAA2B,CAACQ,IAAI,CAAC,IAAI,CAACF,EAAE,EAAEG,OAAO,EAAEC,SAAS,CAAC;EAC/D;EAEAC,YAAYA,CAACC,SAAoB,EAAQ;IACvC,OAAOZ,2BAA2B,CAACW,YAAY,CAAC,IAAI,CAACL,EAAE,EAAEM,SAAS,CAAC;EACrE;EAEAC,KAAKA,CAACC,GAAW,EAAEC,SAAiB,EAAQ;IAC1C,OAAOf,2BAA2B,CAACa,KAAK,CAAC,IAAI,CAACP,EAAE,EAAEQ,GAAG,EAAEC,SAAS,CAAC;EACnE;EAEAC,IAAIA,CAAA,EAAoB;IACtB,OAAOhB,2BAA2B,CAACgB,IAAI,CAAC,IAAI,CAACV,EAAE,CAAC;EAClD;EAEAW,IAAIA,CAACH,GAAW,EAAEC,SAAiB,EAAQ;IACzC,OAAOf,2BAA2B,CAACiB,IAAI,CAAC,IAAI,CAACX,EAAE,EAAEQ,GAAG,EAAEC,SAAS,CAAC;EAClE;EAEAG,MAAMA,CAACC,UAAkB,EAAQ;IAC/B,OAAOnB,2BAA2B,CAACkB,MAAM,CAAC,IAAI,CAACZ,EAAE,EAAEa,UAAU,CAAC;EAChE;EAEAC,QAAQA,CAAA,EAAS;IACf,OAAOpB,2BAA2B,CAACoB,QAAQ,CAAC,IAAI,CAACd,EAAE,CAAC;EACtD;EAEAe,YAAYA,CAACC,KAAgB,EAAQ;IACnC,OAAOtB,2BAA2B,CAACqB,YAAY,CAAC,IAAI,CAACf,EAAE,EAAEgB,KAAK,CAAC;EACjE;EAEAC,WAAWA,CAACT,GAAW,EAAEU,IAAgB,EAAQ;IAC/C,OAAOxB,2BAA2B,CAACuB,WAAW,CAAC,IAAI,CAACjB,EAAE,EAAEQ,GAAG,EAAEU,IAAI,CAAC;EACpE;EAEAC,SAASA,CAACC,GAAW,EAAW;IAC9B,OAAO1B,2BAA2B,CAACyB,SAAS,CAAC,IAAI,CAACnB,EAAE,EAAEoB,GAAG,CAAC;EAC5D;AACF","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ import { forwardEvent, init, screen } from "./index.js";
4
+ import { Logger } from "./logger.js";
5
+ export class AmplitudeEngagementPlugin {
6
+ name = 'AmplitudeEngagementPlugin';
7
+ type = 'enrichment';
8
+ logger = new Logger('AmplitudeEngagementPlugin');
9
+ async setup(config, _client) {
10
+ try {
11
+ console.log('initializing with apiKey', config.apiKey);
12
+ init(config.apiKey);
13
+ } catch (error) {
14
+ this.logger.error('AmplitudeEngagementPlugin#setup failed to initialize', error);
15
+ }
16
+
17
+ // TODO: call "boot" here -- but we don't have the user_id and device_id yet so we cannot
18
+ }
19
+ async execute(context) {
20
+ console.log(`AmplitudeEngagement#execute event=${JSON.stringify(context)}`);
21
+ if (context.event_type === '[Amplitude] Screen Viewed' && typeof context.event_properties?.['[Amplitude] Screen Name'] === 'string') {
22
+ const screenName = context.event_properties['[Amplitude] Screen Name'];
23
+ screen(screenName);
24
+ }
25
+ forwardEvent(context);
26
+ return context;
27
+ }
28
+ }
29
+ //# sourceMappingURL=AmplitudeEngagementPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["forwardEvent","init","screen","Logger","AmplitudeEngagementPlugin","name","type","logger","setup","config","_client","console","log","apiKey","error","execute","context","JSON","stringify","event_type","event_properties","screenName"],"sourceRoot":"../../src","sources":["AmplitudeEngagementPlugin.ts"],"mappings":";;AAMA,SAASA,YAAY,EAAEC,IAAI,EAAEC,MAAM,QAAQ,YAAG;AAC9C,SAASC,MAAM,QAA8B,aAAU;AAEvD,OAAO,MAAMC,yBAAyB,CAA6B;EACjEC,IAAI,GAAG,2BAA2B;EAClCC,IAAI,GAAG,YAAY;EAEnBC,MAAM,GAAoB,IAAIJ,MAAM,CAAC,2BAA2B,CAAC;EAEjE,MAAMK,KAAKA,CAACC,MAAc,EAAEC,OAAmB,EAAiB;IAC9D,IAAI;MACFC,OAAO,CAACC,GAAG,CAAC,0BAA0B,EAAEH,MAAM,CAACI,MAAM,CAAC;MACtDZ,IAAI,CAACQ,MAAM,CAACI,MAAM,CAAC;IACrB,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd,IAAI,CAACP,MAAM,CAACO,KAAK,CACf,sDAAsD,EACtDA,KACF,CAAC;IACH;;IAEA;EACF;EAEA,MAAMC,OAAOA,CAACC,OAAc,EAAyB;IACnDL,OAAO,CAACC,GAAG,CAAC,qCAAqCK,IAAI,CAACC,SAAS,CAACF,OAAO,CAAC,EAAE,CAAC;IAE3E,IACEA,OAAO,CAACG,UAAU,KAAK,2BAA2B,IAClD,OAAOH,OAAO,CAACI,gBAAgB,GAAG,yBAAyB,CAAC,KAAK,QAAQ,EACzE;MACA,MAAMC,UAAU,GAAGL,OAAO,CAACI,gBAAgB,CACzC,yBAAyB,CAChB;MACXlB,MAAM,CAACmB,UAAU,CAAC;IACpB;IAEArB,YAAY,CAACgB,OAAO,CAAC;IAErB,OAAOA,OAAO;EAChB;AACF","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ export default TurboModuleRegistry.getEnforcing('PluginEngagementReactNative');
5
+ //# sourceMappingURL=NativePluginEngagementReactNative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativePluginEngagementReactNative.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AAwBlD,eAAeA,mBAAmB,CAACC,YAAY,CAC7C,6BACF,CAAC","ignoreList":[]}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ import { AmplitudeEngagement } from "./AmplitudeEngagement.js";
4
+ import { AmplitudeEngagementPlugin } from "./AmplitudeEngagementPlugin.js";
5
+ let globalEngagement = null;
6
+ let toNotify = [];
7
+ async function getGlobalEngagement() {
8
+ if (globalEngagement) {
9
+ return globalEngagement;
10
+ } else {
11
+ return await new Promise((resolve, _reject) => {
12
+ toNotify.push(engagement => {
13
+ resolve(engagement);
14
+ });
15
+ });
16
+ }
17
+ }
18
+ export function init(apiKey) {
19
+ // Initialize the plugin with the API key
20
+ if (globalEngagement) {
21
+ throw new Error('AmplitudeEngagement already initialized');
22
+ }
23
+ globalEngagement = new AmplitudeEngagement(apiKey);
24
+ toNotify.forEach(callback => {
25
+ callback(globalEngagement);
26
+ });
27
+ toNotify = [];
28
+ }
29
+ export async function boot(user_id, device_id) {
30
+ const e = await getGlobalEngagement();
31
+ return e.boot(user_id, device_id);
32
+ }
33
+ export async function list() {
34
+ const e = await getGlobalEngagement();
35
+ return e.list();
36
+ }
37
+ export async function show(key, stepIndex) {
38
+ const e = await getGlobalEngagement();
39
+ return e.show(key, stepIndex);
40
+ }
41
+ export async function screen(screenName) {
42
+ const e = await getGlobalEngagement();
43
+ return e.screen(screenName);
44
+ }
45
+ export async function closeAll() {
46
+ const e = await getGlobalEngagement();
47
+ return e.closeAll();
48
+ }
49
+ export async function forwardEvent(event) {
50
+ const e = await getGlobalEngagement();
51
+ return e.forwardEvent(event);
52
+ }
53
+ export async function addCallback(key, func) {
54
+ const e = await getGlobalEngagement();
55
+ return e.addCallback(key, func);
56
+ }
57
+ export async function handleURL(url) {
58
+ const e = await getGlobalEngagement();
59
+ return e.handleURL(url);
60
+ }
61
+ export function getPlugin() {
62
+ return new AmplitudeEngagementPlugin();
63
+ }
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AmplitudeEngagement","AmplitudeEngagementPlugin","globalEngagement","toNotify","getGlobalEngagement","Promise","resolve","_reject","push","engagement","init","apiKey","Error","forEach","callback","boot","user_id","device_id","e","list","show","key","stepIndex","screen","screenName","closeAll","forwardEvent","event","addCallback","func","handleURL","url","getPlugin"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,mBAAmB,QAAQ,0BAAuB;AAC3D,SAASC,yBAAyB,QAAQ,gCAA6B;AAIvE,IAAIC,gBAAqC,GAAG,IAAW;AACvD,IAAIC,QAAuD,GAAG,EAAE;AAEhE,eAAeC,mBAAmBA,CAAA,EAAiC;EACjE,IAAIF,gBAAgB,EAAE;IACpB,OAAOA,gBAAgB;EACzB,CAAC,MAAM;IACL,OAAO,MAAM,IAAIG,OAAO,CAAC,CAACC,OAAO,EAAEC,OAAO,KAAK;MAC7CJ,QAAQ,CAACK,IAAI,CAAEC,UAAU,IAAK;QAC5BH,OAAO,CAACG,UAAU,CAAC;MACrB,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;AACF;AAEA,OAAO,SAASC,IAAIA,CAACC,MAAc,EAAQ;EACzC;EACA,IAAIT,gBAAgB,EAAE;IACpB,MAAM,IAAIU,KAAK,CAAC,yCAAyC,CAAC;EAC5D;EACAV,gBAAgB,GAAG,IAAIF,mBAAmB,CAACW,MAAM,CAAC;EAClDR,QAAQ,CAACU,OAAO,CAAEC,QAAQ,IAAK;IAC7BA,QAAQ,CAACZ,gBAAgB,CAAC;EAC5B,CAAC,CAAC;EACFC,QAAQ,GAAG,EAAE;AACf;AAEA,OAAO,eAAeY,IAAIA,CAACC,OAAe,EAAEC,SAAiB,EAAiB;EAC5E,MAAMC,CAAC,GAAG,MAAMd,mBAAmB,CAAC,CAAC;EACrC,OAAOc,CAAC,CAACH,IAAI,CAACC,OAAO,EAAEC,SAAS,CAAC;AACnC;AAEA,OAAO,eAAeE,IAAIA,CAAA,EAA6B;EACrD,MAAMD,CAAC,GAAG,MAAMd,mBAAmB,CAAC,CAAC;EACrC,OAAOc,CAAC,CAACC,IAAI,CAAC,CAAC;AACjB;AAEA,OAAO,eAAeC,IAAIA,CAACC,GAAW,EAAEC,SAAiB,EAAiB;EACxE,MAAMJ,CAAC,GAAG,MAAMd,mBAAmB,CAAC,CAAC;EACrC,OAAOc,CAAC,CAACE,IAAI,CAACC,GAAG,EAAEC,SAAS,CAAC;AAC/B;AAEA,OAAO,eAAeC,MAAMA,CAACC,UAAkB,EAAiB;EAC9D,MAAMN,CAAC,GAAG,MAAMd,mBAAmB,CAAC,CAAC;EACrC,OAAOc,CAAC,CAACK,MAAM,CAACC,UAAU,CAAC;AAC7B;AAEA,OAAO,eAAeC,QAAQA,CAAA,EAAkB;EAC9C,MAAMP,CAAC,GAAG,MAAMd,mBAAmB,CAAC,CAAC;EACrC,OAAOc,CAAC,CAACO,QAAQ,CAAC,CAAC;AACrB;AAEA,OAAO,eAAeC,YAAYA,CAACC,KAAgB,EAAiB;EAClE,MAAMT,CAAC,GAAG,MAAMd,mBAAmB,CAAC,CAAC;EACrC,OAAOc,CAAC,CAACQ,YAAY,CAACC,KAAK,CAAC;AAC9B;AAEA,OAAO,eAAeC,WAAWA,CAC/BP,GAAW,EACXQ,IAAgB,EACD;EACf,MAAMX,CAAC,GAAG,MAAMd,mBAAmB,CAAC,CAAC;EACrC,OAAOc,CAAC,CAACU,WAAW,CAACP,GAAG,EAAEQ,IAAI,CAAC;AACjC;AAEA,OAAO,eAAeC,SAASA,CAACC,GAAW,EAAoB;EAC7D,MAAMb,CAAC,GAAG,MAAMd,mBAAmB,CAAC,CAAC;EACrC,OAAOc,CAAC,CAACY,SAAS,CAACC,GAAG,CAAC;AACzB;AAEA,OAAO,SAASC,SAASA,CAAA,EAAW;EAClC,OAAO,IAAI/B,yBAAyB,CAAC,CAAC;AACxC","ignoreList":[]}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ export let AmplitudeLogLevel = /*#__PURE__*/function (AmplitudeLogLevel) {
4
+ AmplitudeLogLevel[AmplitudeLogLevel["verbose"] = 0] = "verbose";
5
+ AmplitudeLogLevel[AmplitudeLogLevel["debug"] = 1] = "debug";
6
+ AmplitudeLogLevel[AmplitudeLogLevel["warn"] = 2] = "warn";
7
+ AmplitudeLogLevel[AmplitudeLogLevel["error"] = 3] = "error";
8
+ AmplitudeLogLevel[AmplitudeLogLevel["none"] = 4] = "none";
9
+ return AmplitudeLogLevel;
10
+ }({});
11
+ export class Logger {
12
+ currentLogLevel = AmplitudeLogLevel.debug;
13
+ constructor(name = 'AmplitudeEngagementSwift') {
14
+ this.prefix = `[${name}]`;
15
+ }
16
+ disable() {
17
+ this.currentLogLevel = AmplitudeLogLevel.none;
18
+ }
19
+ enable(logLevel) {
20
+ this.currentLogLevel = logLevel;
21
+ }
22
+ log(...args) {
23
+ if (this.currentLogLevel <= AmplitudeLogLevel.verbose) {
24
+ console.info(this.format(args, 'INFO'));
25
+ }
26
+ }
27
+ warn(...args) {
28
+ if (this.currentLogLevel <= AmplitudeLogLevel.warn) {
29
+ console.warn(this.format(args, 'WARNING'));
30
+ }
31
+ }
32
+ error(...args) {
33
+ if (this.currentLogLevel <= AmplitudeLogLevel.error) {
34
+ console.error(this.format(args, 'ERROR'));
35
+ }
36
+ }
37
+ debug(...args) {
38
+ if (this.currentLogLevel <= AmplitudeLogLevel.debug) {
39
+ console.debug(this.format(args, 'DEBUG'));
40
+ }
41
+ }
42
+ format(args, level) {
43
+ const message = args.map(a => String(a)).join(' ');
44
+ const emoji = {
45
+ DEBUG: '🔍',
46
+ INFO: 'ℹ️',
47
+ WARNING: '⚠️',
48
+ ERROR: '🔴'
49
+ }[level];
50
+ return `${this.prefix} ${emoji} ${level}: ${message}`;
51
+ }
52
+ }
53
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AmplitudeLogLevel","Logger","currentLogLevel","debug","constructor","name","prefix","disable","none","enable","logLevel","log","args","verbose","console","info","format","warn","error","level","message","map","a","String","join","emoji","DEBUG","INFO","WARNING","ERROR"],"sourceRoot":"../../src","sources":["logger.ts"],"mappings":";;AAAA,WAAYA,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAiB7B,OAAO,MAAMC,MAAM,CAA4B;EAErCC,eAAe,GAAsBF,iBAAiB,CAACG,KAAK;EAEpEC,WAAWA,CAACC,IAAY,GAAG,0BAA0B,EAAE;IACrD,IAAI,CAACC,MAAM,GAAG,IAAID,IAAI,GAAG;EAC3B;EAEAE,OAAOA,CAAA,EAAS;IACd,IAAI,CAACL,eAAe,GAAGF,iBAAiB,CAACQ,IAAI;EAC/C;EAEAC,MAAMA,CAACC,QAA2B,EAAQ;IACxC,IAAI,CAACR,eAAe,GAAGQ,QAAQ;EACjC;EAEAC,GAAGA,CAAC,GAAGC,IAAW,EAAQ;IACxB,IAAI,IAAI,CAACV,eAAe,IAAIF,iBAAiB,CAACa,OAAO,EAAE;MACrDC,OAAO,CAACC,IAAI,CAAC,IAAI,CAACC,MAAM,CAACJ,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC;EACF;EAEAK,IAAIA,CAAC,GAAGL,IAAW,EAAQ;IACzB,IAAI,IAAI,CAACV,eAAe,IAAIF,iBAAiB,CAACiB,IAAI,EAAE;MAClDH,OAAO,CAACG,IAAI,CAAC,IAAI,CAACD,MAAM,CAACJ,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C;EACF;EAEAM,KAAKA,CAAC,GAAGN,IAAW,EAAQ;IAC1B,IAAI,IAAI,CAACV,eAAe,IAAIF,iBAAiB,CAACkB,KAAK,EAAE;MACnDJ,OAAO,CAACI,KAAK,CAAC,IAAI,CAACF,MAAM,CAACJ,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C;EACF;EAEAT,KAAKA,CAAC,GAAGS,IAAW,EAAQ;IAC1B,IAAI,IAAI,CAACV,eAAe,IAAIF,iBAAiB,CAACG,KAAK,EAAE;MACnDW,OAAO,CAACX,KAAK,CAAC,IAAI,CAACa,MAAM,CAACJ,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C;EACF;EAEQI,MAAMA,CACZJ,IAAW,EACXO,KAA6C,EACrC;IACR,MAAMC,OAAO,GAAGR,IAAI,CAACS,GAAG,CAAEC,CAAC,IAAKC,MAAM,CAACD,CAAC,CAAC,CAAC,CAACE,IAAI,CAAC,GAAG,CAAC;IAEpD,MAAMC,KAAK,GAAG;MACZC,KAAK,EAAE,IAAI;MACXC,IAAI,EAAE,IAAI;MACVC,OAAO,EAAE,IAAI;MACbC,KAAK,EAAE;IACT,CAAC,CAACV,KAAK,CAAC;IACR,OAAO,GAAG,IAAI,CAACb,MAAM,IAAImB,KAAK,IAAIN,KAAK,KAAKC,OAAO,EAAE;EACvD;AACF","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,17 @@
1
+ import type { GuideOrSurvey, ThemeMode } from './types';
2
+ import type { BaseEvent } from '@amplitude/analytics-types';
3
+ export declare class AmplitudeEngagement {
4
+ id: number;
5
+ constructor(apiKey: string);
6
+ boot(user_id: string, device_id: string): void;
7
+ setThemeMode(themeMode: ThemeMode): void;
8
+ reset(key: string, stepIndex: number): void;
9
+ list(): GuideOrSurvey[];
10
+ show(key: string, stepIndex: number): void;
11
+ screen(screenName: string): void;
12
+ closeAll(): void;
13
+ forwardEvent(event: BaseEvent): void;
14
+ addCallback(key: string, func: () => void): void;
15
+ handleURL(url: string): boolean;
16
+ }
17
+ //# sourceMappingURL=AmplitudeEngagement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmplitudeEngagement.d.ts","sourceRoot":"","sources":["../../../src/AmplitudeEngagement.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAW5D,qBAAa,mBAAmB;IAC9B,EAAE,EAAE,MAAM,CAAC;gBAEC,MAAM,EAAE,MAAM;IAK1B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI9C,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIxC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI3C,IAAI,IAAI,aAAa,EAAE;IAIvB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI1C,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIhC,QAAQ,IAAI,IAAI;IAIhB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIpC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI;IAIhD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAGhC"}
@@ -0,0 +1,10 @@
1
+ import type { Config, CoreClient, EnrichmentPlugin, Event } from '@amplitude/analytics-types';
2
+ import { type AmplitudeLogger } from './logger';
3
+ export declare class AmplitudeEngagementPlugin implements EnrichmentPlugin {
4
+ name: string;
5
+ type: "enrichment";
6
+ logger: AmplitudeLogger;
7
+ setup(config: Config, _client: CoreClient): Promise<void>;
8
+ execute(context: Event): Promise<Event | null>;
9
+ }
10
+ //# sourceMappingURL=AmplitudeEngagementPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmplitudeEngagementPlugin.d.ts","sourceRoot":"","sources":["../../../src/AmplitudeEngagementPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,KAAK,EACN,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAU,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAExD,qBAAa,yBAA0B,YAAW,gBAAgB;IAChE,IAAI,SAA+B;IACnC,IAAI,EAAG,YAAY,CAAU;IAE7B,MAAM,EAAE,eAAe,CAA2C;IAE5D,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAczD,OAAO,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAiBrD"}
@@ -0,0 +1,18 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import type { GuideOrSurvey } from './types';
3
+ export interface Spec extends TurboModule {
4
+ newInstance(apiKey: string): number;
5
+ boot(id: number, user_id: string, device_id: string): void;
6
+ setThemeMode(id: number, themeMode: 'auto' | 'dark_mode' | 'light_mode'): void;
7
+ reset(id: number, key: string, stepIndex: number): void;
8
+ list(id: number): GuideOrSurvey[];
9
+ show(id: number, key: string, stepIndex: number): void;
10
+ screen(id: number, screenName: string): void;
11
+ closeAll(id: number): void;
12
+ forwardEvent(id: number, event: Object): void;
13
+ addCallback(id: number, key: string, func: () => void): void;
14
+ handleURL(id: number, url: string): boolean;
15
+ }
16
+ declare const _default: Spec;
17
+ export default _default;
18
+ //# sourceMappingURL=NativePluginEngagementReactNative.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativePluginEngagementReactNative.d.ts","sourceRoot":"","sources":["../../../src/NativePluginEngagementReactNative.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAEpC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,YAAY,CACV,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,GAC7C,IAAI,CAAC;IACR,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAExD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAElC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAmB,IAAI,CAAC;IAC9D,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAE7D,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7C;;AAED,wBAEE"}
@@ -0,0 +1,13 @@
1
+ import type { GuideOrSurvey } from './types';
2
+ import type { BaseEvent, Plugin } from '@amplitude/analytics-types';
3
+ export declare function init(apiKey: string): void;
4
+ export declare function boot(user_id: string, device_id: string): Promise<void>;
5
+ export declare function list(): Promise<GuideOrSurvey[]>;
6
+ export declare function show(key: string, stepIndex: number): Promise<void>;
7
+ export declare function screen(screenName: string): Promise<void>;
8
+ export declare function closeAll(): Promise<void>;
9
+ export declare function forwardEvent(event: BaseEvent): Promise<void>;
10
+ export declare function addCallback(key: string, func: () => void): Promise<void>;
11
+ export declare function handleURL(url: string): Promise<boolean>;
12
+ export declare function getPlugin(): Plugin;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAiBpE,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAUzC;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAGrD;AAED,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED,wBAAsB,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9C;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlE;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,IAAI,GACf,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG7D;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
@@ -0,0 +1,28 @@
1
+ export declare enum AmplitudeLogLevel {
2
+ verbose = 0,
3
+ debug = 1,
4
+ warn = 2,
5
+ error = 3,
6
+ none = 4
7
+ }
8
+ export interface AmplitudeLogger {
9
+ disable(): void;
10
+ enable(logLevel: AmplitudeLogLevel): void;
11
+ log(...args: any[]): void;
12
+ warn(...args: any[]): void;
13
+ error(...args: any[]): void;
14
+ debug(...args: any[]): void;
15
+ }
16
+ export declare class Logger implements AmplitudeLogger {
17
+ private prefix;
18
+ private currentLogLevel;
19
+ constructor(name?: string);
20
+ disable(): void;
21
+ enable(logLevel: AmplitudeLogLevel): void;
22
+ log(...args: any[]): void;
23
+ warn(...args: any[]): void;
24
+ error(...args: any[]): void;
25
+ debug(...args: any[]): void;
26
+ private format;
27
+ }
28
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/logger.ts"],"names":[],"mappings":"AAAA,oBAAY,iBAAiB;IAC3B,OAAO,IAAI;IACX,KAAK,IAAI;IACT,IAAI,IAAI;IACR,KAAK,IAAI;IACT,IAAI,IAAI;CACT;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CAC7B;AAED,qBAAa,MAAO,YAAW,eAAe;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAA8C;gBAEzD,IAAI,GAAE,MAAmC;IAIrD,OAAO,IAAI,IAAI;IAIf,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAIzC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAMzB,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM1B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM3B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM3B,OAAO,CAAC,MAAM;CAcf"}
@@ -0,0 +1,7 @@
1
+ export type GuideOrSurvey = {
2
+ id: number;
3
+ step: number;
4
+ title: string;
5
+ };
6
+ export type ThemeMode = 'auto' | 'dark_mode' | 'light_mode';
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,YAAY,CAAC"}
package/package.json ADDED
@@ -0,0 +1,168 @@
1
+ {
2
+ "name": "@amplitude/plugin-engagement-react-native",
3
+ "version": "0.1.1-alpha.10",
4
+ "description": "Amplitude Engagement plugin for React Native",
5
+ "main": "./lib/module/index.js",
6
+ "types": "./lib/typescript/src/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "source": "./src/index.tsx",
10
+ "types": "./lib/typescript/src/index.d.ts",
11
+ "default": "./lib/module/index.js"
12
+ },
13
+ "./package.json": "./package.json"
14
+ },
15
+ "files": [
16
+ "src",
17
+ "lib",
18
+ "android",
19
+ "ios",
20
+ "cpp",
21
+ "*.podspec",
22
+ "react-native.config.js",
23
+ "!ios/build",
24
+ "!android/build",
25
+ "!android/gradle",
26
+ "!android/gradlew",
27
+ "!android/gradlew.bat",
28
+ "!android/local.properties",
29
+ "!**/__tests__",
30
+ "!**/__fixtures__",
31
+ "!**/__mocks__",
32
+ "!**/.*"
33
+ ],
34
+ "scripts": {
35
+ "example": "yarn workspace @amplitude/plugin-engagement-react-native-example",
36
+ "test": "jest",
37
+ "typecheck": "tsc",
38
+ "lint": "eslint \"**/*.{js,ts,tsx}\"",
39
+ "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
40
+ "prepare": "bob build",
41
+ "release": "npm version prerelease --preid alpha && npm publish",
42
+ "_release": "release-it --only-version"
43
+ },
44
+ "keywords": [
45
+ "react-native",
46
+ "ios",
47
+ "android"
48
+ ],
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "git+https://amplitude.com.git"
52
+ },
53
+ "author": "Amplitude, Inc. <dev@amplitude.com> (https://github.com/amplitude)",
54
+ "license": "MIT",
55
+ "bugs": {
56
+ "url": "https://amplitude.com/issues"
57
+ },
58
+ "homepage": "https://amplitude.com#readme",
59
+ "publishConfig": {
60
+ "registry": "https://registry.npmjs.org/"
61
+ },
62
+ "devDependencies": {
63
+ "@commitlint/config-conventional": "^19.6.0",
64
+ "@eslint/compat": "^1.2.7",
65
+ "@eslint/eslintrc": "^3.3.0",
66
+ "@eslint/js": "^9.22.0",
67
+ "@react-native-community/cli": "15.0.0-alpha.2",
68
+ "@react-native/babel-preset": "0.79.2",
69
+ "@react-native/eslint-config": "^0.78.0",
70
+ "@release-it/conventional-changelog": "^9.0.2",
71
+ "@types/jest": "^29.5.5",
72
+ "@types/react": "^19.0.0",
73
+ "commitlint": "^19.6.1",
74
+ "del-cli": "^5.1.0",
75
+ "eslint": "^9.22.0",
76
+ "eslint-config-prettier": "^10.1.1",
77
+ "eslint-plugin-prettier": "^5.2.3",
78
+ "jest": "^29.7.0",
79
+ "prettier": "^3.0.3",
80
+ "react": "19.0.0",
81
+ "react-native": "0.79.2",
82
+ "react-native-builder-bob": "^0.40.11",
83
+ "release-it": "^17.10.0",
84
+ "turbo": "^1.10.7",
85
+ "typescript": "^5.8.3"
86
+ },
87
+ "peerDependencies": {
88
+ "@react-native-async-storage/async-storage": "^2.1.2",
89
+ "react": "*",
90
+ "react-native": "*"
91
+ },
92
+ "workspaces": [
93
+ "example"
94
+ ],
95
+ "packageManager": "yarn@3.6.1",
96
+ "jest": {
97
+ "preset": "react-native",
98
+ "modulePathIgnorePatterns": [
99
+ "<rootDir>/example/node_modules",
100
+ "<rootDir>/lib/"
101
+ ]
102
+ },
103
+ "commitlint": {
104
+ "extends": [
105
+ "@commitlint/config-conventional"
106
+ ]
107
+ },
108
+ "release-it": {
109
+ "git": {
110
+ "commitMessage": "chore: release ${version}",
111
+ "tagName": "v${version}"
112
+ },
113
+ "npm": {
114
+ "publish": true
115
+ },
116
+ "github": {
117
+ "release": true
118
+ },
119
+ "plugins": {
120
+ "@release-it/conventional-changelog": {
121
+ "preset": {
122
+ "name": "angular"
123
+ }
124
+ }
125
+ }
126
+ },
127
+ "prettier": {
128
+ "quoteProps": "consistent",
129
+ "singleQuote": true,
130
+ "tabWidth": 2,
131
+ "trailingComma": "es5",
132
+ "useTabs": false
133
+ },
134
+ "react-native-builder-bob": {
135
+ "source": "src",
136
+ "output": "lib",
137
+ "targets": [
138
+ [
139
+ "module",
140
+ {
141
+ "esm": true
142
+ }
143
+ ],
144
+ [
145
+ "typescript",
146
+ {
147
+ "project": "tsconfig.build.json"
148
+ }
149
+ ]
150
+ ]
151
+ },
152
+ "codegenConfig": {
153
+ "name": "PluginEngagementReactNativeSpec",
154
+ "type": "modules",
155
+ "jsSrcsDir": "src",
156
+ "android": {
157
+ "javaPackageName": "com.amplitude.pluginengagementreactnative"
158
+ }
159
+ },
160
+ "create-react-native-library": {
161
+ "languages": "kotlin-objc",
162
+ "type": "turbo-module",
163
+ "version": "0.50.3"
164
+ },
165
+ "dependencies": {
166
+ "@amplitude/analytics-types": "^1.3.5"
167
+ }
168
+ }
@@ -0,0 +1,62 @@
1
+ import type { Spec } from './NativePluginEngagementReactNative';
2
+ import { NativeModules } from 'react-native';
3
+ import type { GuideOrSurvey, ThemeMode } from './types';
4
+ import type { BaseEvent } from '@amplitude/analytics-types';
5
+
6
+ type PluginEngagementReactNativeType = Exclude<Spec, 'getConstants'>;
7
+
8
+ const isTurboModuleEnabled = (global as any).__turboModuleProxy != null;
9
+
10
+ const PluginEngagementReactNative: PluginEngagementReactNativeType =
11
+ isTurboModuleEnabled
12
+ ? require('./NativePluginEngagementReactNative').default
13
+ : NativeModules.PluginEngagementReactNative;
14
+
15
+ export class AmplitudeEngagement {
16
+ id: number;
17
+
18
+ constructor(apiKey: string) {
19
+ // Initialize the plugin with the API key
20
+ this.id = PluginEngagementReactNative.newInstance(apiKey);
21
+ }
22
+
23
+ boot(user_id: string, device_id: string): void {
24
+ PluginEngagementReactNative.boot(this.id, user_id, device_id);
25
+ }
26
+
27
+ setThemeMode(themeMode: ThemeMode): void {
28
+ return PluginEngagementReactNative.setThemeMode(this.id, themeMode);
29
+ }
30
+
31
+ reset(key: string, stepIndex: number): void {
32
+ return PluginEngagementReactNative.reset(this.id, key, stepIndex);
33
+ }
34
+
35
+ list(): GuideOrSurvey[] {
36
+ return PluginEngagementReactNative.list(this.id);
37
+ }
38
+
39
+ show(key: string, stepIndex: number): void {
40
+ return PluginEngagementReactNative.show(this.id, key, stepIndex);
41
+ }
42
+
43
+ screen(screenName: string): void {
44
+ return PluginEngagementReactNative.screen(this.id, screenName);
45
+ }
46
+
47
+ closeAll(): void {
48
+ return PluginEngagementReactNative.closeAll(this.id);
49
+ }
50
+
51
+ forwardEvent(event: BaseEvent): void {
52
+ return PluginEngagementReactNative.forwardEvent(this.id, event);
53
+ }
54
+
55
+ addCallback(key: string, func: () => void): void {
56
+ return PluginEngagementReactNative.addCallback(this.id, key, func);
57
+ }
58
+
59
+ handleURL(url: string): boolean {
60
+ return PluginEngagementReactNative.handleURL(this.id, url);
61
+ }
62
+ }
@@ -0,0 +1,47 @@
1
+ import type {
2
+ Config,
3
+ CoreClient,
4
+ EnrichmentPlugin,
5
+ Event,
6
+ } from '@amplitude/analytics-types';
7
+ import { forwardEvent, init, screen } from '.';
8
+ import { Logger, type AmplitudeLogger } from './logger';
9
+
10
+ export class AmplitudeEngagementPlugin implements EnrichmentPlugin {
11
+ name = 'AmplitudeEngagementPlugin';
12
+ type = 'enrichment' as const;
13
+
14
+ logger: AmplitudeLogger = new Logger('AmplitudeEngagementPlugin');
15
+
16
+ async setup(config: Config, _client: CoreClient): Promise<void> {
17
+ try {
18
+ console.log('initializing with apiKey', config.apiKey);
19
+ init(config.apiKey);
20
+ } catch (error) {
21
+ this.logger.error(
22
+ 'AmplitudeEngagementPlugin#setup failed to initialize',
23
+ error
24
+ );
25
+ }
26
+
27
+ // TODO: call "boot" here -- but we don't have the user_id and device_id yet so we cannot
28
+ }
29
+
30
+ async execute(context: Event): Promise<Event | null> {
31
+ console.log(`AmplitudeEngagement#execute event=${JSON.stringify(context)}`);
32
+
33
+ if (
34
+ context.event_type === '[Amplitude] Screen Viewed' &&
35
+ typeof context.event_properties?.['[Amplitude] Screen Name'] === 'string'
36
+ ) {
37
+ const screenName = context.event_properties[
38
+ '[Amplitude] Screen Name'
39
+ ] as string;
40
+ screen(screenName);
41
+ }
42
+
43
+ forwardEvent(context);
44
+
45
+ return context;
46
+ }
47
+ }