react-native-smallcase-gateway 7.3.4 → 7.3.5

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.
@@ -149,7 +149,7 @@ def kotlin_version = getExtOrDefault('kotlinVersion')
149
149
  dependencies {
150
150
  //noinspection GradleDynamicVersion
151
151
  implementation 'com.facebook.react:react-native:+' // From node_modules
152
- implementation 'com.smallcase.gateway:sdk:6.0.5'
152
+ implementation 'com.smallcase.gateway:sdk:6.0.6'
153
153
  implementation 'com.smallcase.loans:sdk:5.1.1'
154
154
  implementation "androidx.core:core-ktx:1.3.1"
155
155
  implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
@@ -290,6 +290,27 @@ RCT_REMAP_METHOD(triggerTransaction,
290
290
  return;
291
291
  }
292
292
 
293
+ //MARK: intent - imr setup
294
+ if([response isKindOfClass: [ObjcTransactionIntentIMRSetup class]]) {
295
+ ObjcTransactionIntentIMRSetup *trxResponse = response;
296
+ [responseDict setValue:@"IMR_SETUP" forKey:@"transaction"];
297
+
298
+ NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
299
+ [dict setValue: trxResponse.authToken forKey:@"smallcaseAuthToken"];
300
+ [dict setValue: trxResponse.transactionId forKey:@"transactionId"];
301
+ [dict setValue: trxResponse.imrAction forKey:@"imrAction"];
302
+ [dict setValue: trxResponse.frequency forKey:@"frequency"];
303
+ [dict setValue: trxResponse.iscid forKey:@"iscid"];
304
+ [dict setValue: trxResponse.scheduledDate forKey:@"scheduledDate"];
305
+ [dict setValue: trxResponse.triggerDate forKey:@"triggerDate"];
306
+ [dict setValue: trxResponse.scid forKey:@"scid"];
307
+ [dict setValue: trxResponse.signup forKey:@"signup"];
308
+ [dict setValue: trxResponse.imrActive ? @"YES" : @"NO" forKey:@"imrActive"];
309
+
310
+ [responseDict setValue:dict forKey:@"data"];
311
+ resolve(responseDict);
312
+ return;
313
+ }
293
314
 
294
315
  //MARK: intent - authorize holdings
295
316
  if([response isKindOfClass: [ObjcTransactionIntentAuthoriseHoldings class]]) {
@@ -21,7 +21,8 @@ const SCGatewayEventTypes = exports.SCGatewayEventTypes = {
21
21
  ANALYTICS_EVENT: 'scgateway_analytics_event',
22
22
  SUPER_PROPERTIES_UPDATED: 'scgateway_super_properties_updated',
23
23
  USER_RESET: 'scgateway_user_reset',
24
- USER_IDENTIFY: 'scgateway_user_identify'
24
+ USER_IDENTIFY: 'scgateway_user_identify',
25
+ SMALLPLUG_ANALYTICS_EVENT: 'smallplug_analytics_event'
25
26
  };
26
27
  const SCGatewayNotificationEvent = 'scg_notification';
27
28
  class SCGatewayEvents {
@@ -83,6 +84,55 @@ class SCGatewayEvents {
83
84
  return subscription;
84
85
  }
85
86
 
87
+ /**
88
+ * Subscribe to SmallPlug / DM analytics events streamed during a launchSmallplug session.
89
+ * Events have shape: { eventName: string, data: object, timestamp: number }
90
+ * @param {(event: {eventName: string, data: any, timestamp: number}) => void} callback
91
+ * @returns {GatewayEventSubscription}
92
+ */
93
+ subscribeToSmallplugEvents(callback) {
94
+ if (!this.isInitialized) {
95
+ console.warn('[SCGatewayEvents] Event emitter not initialized');
96
+ return null;
97
+ }
98
+ if (typeof callback !== 'function') {
99
+ console.warn('[SCGatewayEvents] Invalid callback provided for SmallPlug subscription');
100
+ return null;
101
+ }
102
+ const subscription = this.eventEmitter.addListener(SCGatewayNotificationEvent, jsonString => {
103
+ if (!jsonString) return;
104
+ let parsed;
105
+ try {
106
+ parsed = JSON.parse(jsonString);
107
+ } catch (e) {
108
+ return;
109
+ }
110
+ if (parsed.type !== 'smallplug_analytics_event') return;
111
+ const {
112
+ eventName,
113
+ data
114
+ } = parsed.data ?? {};
115
+ callback({
116
+ eventName,
117
+ data,
118
+ timestamp: parsed.timestamp ?? Date.now()
119
+ });
120
+ });
121
+ this.subscriptions.push(subscription);
122
+ return subscription;
123
+ }
124
+
125
+ /**
126
+ * Unsubscribe from SmallPlug analytics events
127
+ * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToSmallplugEvents
128
+ */
129
+ unsubscribeFromSmallplugEvents(subscription) {
130
+ if (subscription && typeof subscription.remove === 'function') {
131
+ subscription.remove();
132
+ this.subscriptions = this.subscriptions.filter(sub => sub !== subscription);
133
+ }
134
+ }
135
+
86
136
  /**
87
137
  * Unsubscribe from Gateway Events
88
138
  * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToGatewayEvents
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","nativeModule","NativeModules","SCGatewayBridgeEmitter","SCGatewayEventTypes","exports","ANALYTICS_EVENT","SUPER_PROPERTIES_UPDATED","USER_RESET","USER_IDENTIFY","SCGatewayNotificationEvent","SCGatewayEvents","constructor","eventEmitter","subscriptions","initialize","isInitialized","NativeEventEmitter","console","warn","subscribeToGatewayEvents","callback","subscription","addListener","jsonString","eventData","JSON","parse","error","type","normalizedEvent","data","timestamp","Date","now","push","unsubscribeFromGatewayEvents","remove","filter","sub","cleanup","forEach","scGatewayEventManager","_default","default"],"sources":["SCGatewayEventEmitter.js"],"sourcesContent":["import { NativeEventEmitter, NativeModules } from 'react-native';\n\n/**\n * @typedef {Object} GatewayEvent\n * @property {string} type - Event type\n * @property {any} data - Event payload data\n * @property {number} timestamp - Event timestamp\n *\n * @typedef {Object} GatewayEventSubscription\n * @property {() => void} remove - Method to unsubscribe from gateway events\n *\n */\n\nconst nativeModule = NativeModules.SCGatewayBridgeEmitter;\n\nexport const SCGatewayEventTypes = {\n ANALYTICS_EVENT: 'scgateway_analytics_event',\n SUPER_PROPERTIES_UPDATED: 'scgateway_super_properties_updated',\n USER_RESET: 'scgateway_user_reset',\n USER_IDENTIFY: 'scgateway_user_identify',\n};\n\nconst SCGatewayNotificationEvent = 'scg_notification';\n\nclass SCGatewayEvents {\n constructor() {\n this.eventEmitter = null;\n this.subscriptions = [];\n this.initialize();\n }\n\n get isInitialized() {\n return this.eventEmitter !== null;\n }\n\n initialize() {\n if (nativeModule) {\n this.eventEmitter = new NativeEventEmitter(nativeModule);\n } else {\n console.warn('[SCGatewayEvents] Native module not available');\n }\n }\n\n // ===== GATEWAY EVENT METHODS =====\n /**\n * Subscribe to Gateway Events\n * @param {(event: GatewayEvent) => void} callback - Callback function to handle gateway events\n * @returns {GatewayEventSubscription} subscription - Subscription object with remove() method\n */\n subscribeToGatewayEvents(callback) {\n if (!this.isInitialized) {\n console.warn('[SCGatewayEvents] Event emitter not initialized');\n return null;\n }\n\n if (typeof callback !== 'function') {\n console.warn(\n '[SCGatewayEvents] Invalid callback provided for subscription'\n );\n return null;\n }\n\n const subscription = this.eventEmitter.addListener(\n SCGatewayNotificationEvent,\n (jsonString) => {\n if (!jsonString) {\n console.warn('[SCGatewayEvents] Received null/undefined event data');\n return;\n }\n\n let eventData;\n try {\n eventData = JSON.parse(jsonString);\n } catch (error) {\n console.warn(\n '[SCGatewayEvents] Failed to parse event JSON:',\n error,\n 'Raw data:',\n jsonString\n );\n return;\n }\n\n if (!eventData.type) {\n console.warn(\n '[SCGatewayEvents] Dropping event - missing event type:',\n eventData\n );\n return;\n }\n\n const normalizedEvent = {\n type: eventData.type,\n data: eventData.data,\n timestamp: eventData.timestamp || Date.now(),\n };\n\n callback(normalizedEvent);\n }\n );\n\n this.subscriptions.push(subscription);\n\n return subscription;\n }\n\n /**\n * Unsubscribe from Gateway Events\n * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToGatewayEvents\n */\n unsubscribeFromGatewayEvents(subscription) {\n if (subscription && typeof subscription.remove === 'function') {\n subscription.remove();\n this.subscriptions = this.subscriptions.filter(\n (sub) => sub !== subscription\n );\n }\n }\n\n cleanup() {\n this.subscriptions.forEach((subscription) => {\n if (subscription && typeof subscription.remove === 'function') {\n subscription.remove();\n }\n });\n this.subscriptions = [];\n }\n}\n\nconst scGatewayEventManager = new SCGatewayEvents();\n\nexport default scGatewayEventManager;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","nativeModule","NativeModules","SCGatewayBridgeEmitter","SCGatewayEventTypes","exports","ANALYTICS_EVENT","SUPER_PROPERTIES_UPDATED","USER_RESET","USER_IDENTIFY","SMALLPLUG_ANALYTICS_EVENT","SCGatewayNotificationEvent","SCGatewayEvents","constructor","eventEmitter","subscriptions","initialize","isInitialized","NativeEventEmitter","console","warn","subscribeToGatewayEvents","callback","subscription","addListener","jsonString","eventData","JSON","parse","error","type","normalizedEvent","data","timestamp","Date","now","push","subscribeToSmallplugEvents","parsed","e","eventName","unsubscribeFromSmallplugEvents","remove","filter","sub","unsubscribeFromGatewayEvents","cleanup","forEach","scGatewayEventManager","_default","default"],"sources":["SCGatewayEventEmitter.js"],"sourcesContent":["import { NativeEventEmitter, NativeModules } from 'react-native';\n\n/**\n * @typedef {Object} GatewayEvent\n * @property {string} type - Event type\n * @property {any} data - Event payload data\n * @property {number} timestamp - Event timestamp\n *\n * @typedef {Object} GatewayEventSubscription\n * @property {() => void} remove - Method to unsubscribe from gateway events\n *\n */\n\nconst nativeModule = NativeModules.SCGatewayBridgeEmitter;\n\nexport const SCGatewayEventTypes = {\n ANALYTICS_EVENT: 'scgateway_analytics_event',\n SUPER_PROPERTIES_UPDATED: 'scgateway_super_properties_updated',\n USER_RESET: 'scgateway_user_reset',\n USER_IDENTIFY: 'scgateway_user_identify',\n SMALLPLUG_ANALYTICS_EVENT: 'smallplug_analytics_event',\n};\n\nconst SCGatewayNotificationEvent = 'scg_notification';\n\nclass SCGatewayEvents {\n constructor() {\n this.eventEmitter = null;\n this.subscriptions = [];\n this.initialize();\n }\n\n get isInitialized() {\n return this.eventEmitter !== null;\n }\n\n initialize() {\n if (nativeModule) {\n this.eventEmitter = new NativeEventEmitter(nativeModule);\n } else {\n console.warn('[SCGatewayEvents] Native module not available');\n }\n }\n\n // ===== GATEWAY EVENT METHODS =====\n /**\n * Subscribe to Gateway Events\n * @param {(event: GatewayEvent) => void} callback - Callback function to handle gateway events\n * @returns {GatewayEventSubscription} subscription - Subscription object with remove() method\n */\n subscribeToGatewayEvents(callback) {\n if (!this.isInitialized) {\n console.warn('[SCGatewayEvents] Event emitter not initialized');\n return null;\n }\n\n if (typeof callback !== 'function') {\n console.warn(\n '[SCGatewayEvents] Invalid callback provided for subscription'\n );\n return null;\n }\n\n const subscription = this.eventEmitter.addListener(\n SCGatewayNotificationEvent,\n (jsonString) => {\n if (!jsonString) {\n console.warn('[SCGatewayEvents] Received null/undefined event data');\n return;\n }\n\n let eventData;\n try {\n eventData = JSON.parse(jsonString);\n } catch (error) {\n console.warn(\n '[SCGatewayEvents] Failed to parse event JSON:',\n error,\n 'Raw data:',\n jsonString\n );\n return;\n }\n\n if (!eventData.type) {\n console.warn(\n '[SCGatewayEvents] Dropping event - missing event type:',\n eventData\n );\n return;\n }\n\n const normalizedEvent = {\n type: eventData.type,\n data: eventData.data,\n timestamp: eventData.timestamp || Date.now(),\n };\n\n callback(normalizedEvent);\n }\n );\n\n this.subscriptions.push(subscription);\n\n return subscription;\n }\n\n /**\n * Subscribe to SmallPlug / DM analytics events streamed during a launchSmallplug session.\n * Events have shape: { eventName: string, data: object, timestamp: number }\n * @param {(event: {eventName: string, data: any, timestamp: number}) => void} callback\n * @returns {GatewayEventSubscription}\n */\n subscribeToSmallplugEvents(callback) {\n if (!this.isInitialized) {\n console.warn('[SCGatewayEvents] Event emitter not initialized');\n return null;\n }\n\n if (typeof callback !== 'function') {\n console.warn(\n '[SCGatewayEvents] Invalid callback provided for SmallPlug subscription'\n );\n return null;\n }\n\n const subscription = this.eventEmitter.addListener(\n SCGatewayNotificationEvent,\n (jsonString) => {\n if (!jsonString) return;\n let parsed;\n try {\n parsed = JSON.parse(jsonString);\n } catch (e) {\n return;\n }\n if (parsed.type !== 'smallplug_analytics_event') return;\n const { eventName, data } = parsed.data ?? {};\n callback({\n eventName,\n data,\n timestamp: parsed.timestamp ?? Date.now(),\n });\n }\n );\n\n this.subscriptions.push(subscription);\n return subscription;\n }\n\n /**\n * Unsubscribe from SmallPlug analytics events\n * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToSmallplugEvents\n */\n unsubscribeFromSmallplugEvents(subscription) {\n if (subscription && typeof subscription.remove === 'function') {\n subscription.remove();\n this.subscriptions = this.subscriptions.filter(\n (sub) => sub !== subscription\n );\n }\n }\n\n /**\n * Unsubscribe from Gateway Events\n * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToGatewayEvents\n */\n unsubscribeFromGatewayEvents(subscription) {\n if (subscription && typeof subscription.remove === 'function') {\n subscription.remove();\n this.subscriptions = this.subscriptions.filter(\n (sub) => sub !== subscription\n );\n }\n }\n\n cleanup() {\n this.subscriptions.forEach((subscription) => {\n if (subscription && typeof subscription.remove === 'function') {\n subscription.remove();\n }\n });\n this.subscriptions = [];\n }\n}\n\nconst scGatewayEventManager = new SCGatewayEvents();\n\nexport default scGatewayEventManager;\n"],"mappings":"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","ignoreList":[]}
@@ -12,6 +12,7 @@ const ENV = exports.ENV = {
12
12
  const TRANSACTION_TYPE = exports.TRANSACTION_TYPE = {
13
13
  connect: 'CONNECT',
14
14
  sipSetup: 'SIP_SETUP',
15
+ imrSetup: 'IMR_SETUP',
15
16
  fetchFunds: 'FETCH_FUNDS',
16
17
  transaction: 'TRANSACTION',
17
18
  holdingsImport: 'HOLDINGS_IMPORT',
@@ -1 +1 @@
1
- {"version":3,"names":["ENV","exports","STAG","DEV","PROD","TRANSACTION_TYPE","connect","sipSetup","fetchFunds","transaction","holdingsImport","authorizeHoldings","mfHoldingsImport","ERROR_MSG","init_sdk","no_order","no_broker","invalid_jwt","market_closed","user_mismatch","order_pending","internal_error","user_cancelled","consent_denied","order_in_queue","invalid_gateway","transaction_expired","invalid_transactionId","insufficient_holdings","transaction_in_process","no_compatible_browser"],"sources":["constants.js"],"sourcesContent":["export const ENV = {\n STAG: 'staging',\n DEV: 'development',\n PROD: 'production',\n};\n\nexport const TRANSACTION_TYPE = {\n connect: 'CONNECT',\n sipSetup: 'SIP_SETUP',\n fetchFunds: 'FETCH_FUNDS',\n transaction: 'TRANSACTION',\n holdingsImport: 'HOLDINGS_IMPORT',\n authorizeHoldings: 'AUTHORISE_HOLDINGS',\n mfHoldingsImport: 'MF_HOLDINGS_IMPORT',\n};\n\nexport const ERROR_MSG = {\n init_sdk: 'init_sdk',\n no_order: 'no_order',\n no_broker: 'no_broker',\n invalid_jwt: 'invalid_jwt',\n market_closed: 'market_closed',\n user_mismatch: 'user_mismatch',\n order_pending: 'order_pending',\n internal_error: 'internal_error',\n user_cancelled: 'user_cancelled',\n consent_denied: 'consent_denied',\n order_in_queue: 'order_in_queue',\n invalid_gateway: 'invalid_gateway',\n transaction_expired: 'transaction_expired',\n invalid_transactionId: 'invalid_transactionId',\n insufficient_holdings: 'insufficient_holdings',\n transaction_in_process: 'transaction_in_process',\n no_compatible_browser: 'no_compatible_browser',\n};\n"],"mappings":";;;;;;AAAO,MAAMA,GAAG,GAAAC,OAAA,CAAAD,GAAA,GAAG;EACjBE,IAAI,EAAE,SAAS;EACfC,GAAG,EAAE,aAAa;EAClBC,IAAI,EAAE;AACR,CAAC;AAEM,MAAMC,gBAAgB,GAAAJ,OAAA,CAAAI,gBAAA,GAAG;EAC9BC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,WAAW;EACrBC,UAAU,EAAE,aAAa;EACzBC,WAAW,EAAE,aAAa;EAC1BC,cAAc,EAAE,iBAAiB;EACjCC,iBAAiB,EAAE,oBAAoB;EACvCC,gBAAgB,EAAE;AACpB,CAAC;AAEM,MAAMC,SAAS,GAAAZ,OAAA,CAAAY,SAAA,GAAG;EACvBC,QAAQ,EAAE,UAAU;EACpBC,QAAQ,EAAE,UAAU;EACpBC,SAAS,EAAE,WAAW;EACtBC,WAAW,EAAE,aAAa;EAC1BC,aAAa,EAAE,eAAe;EAC9BC,aAAa,EAAE,eAAe;EAC9BC,aAAa,EAAE,eAAe;EAC9BC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,eAAe,EAAE,iBAAiB;EAClCC,mBAAmB,EAAE,qBAAqB;EAC1CC,qBAAqB,EAAE,uBAAuB;EAC9CC,qBAAqB,EAAE,uBAAuB;EAC9CC,sBAAsB,EAAE,wBAAwB;EAChDC,qBAAqB,EAAE;AACzB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["ENV","exports","STAG","DEV","PROD","TRANSACTION_TYPE","connect","sipSetup","imrSetup","fetchFunds","transaction","holdingsImport","authorizeHoldings","mfHoldingsImport","ERROR_MSG","init_sdk","no_order","no_broker","invalid_jwt","market_closed","user_mismatch","order_pending","internal_error","user_cancelled","consent_denied","order_in_queue","invalid_gateway","transaction_expired","invalid_transactionId","insufficient_holdings","transaction_in_process","no_compatible_browser"],"sources":["constants.js"],"sourcesContent":["export const ENV = {\n STAG: 'staging',\n DEV: 'development',\n PROD: 'production',\n};\n\nexport const TRANSACTION_TYPE = {\n connect: 'CONNECT',\n sipSetup: 'SIP_SETUP',\n imrSetup: 'IMR_SETUP',\n fetchFunds: 'FETCH_FUNDS',\n transaction: 'TRANSACTION',\n holdingsImport: 'HOLDINGS_IMPORT',\n authorizeHoldings: 'AUTHORISE_HOLDINGS',\n mfHoldingsImport: 'MF_HOLDINGS_IMPORT',\n};\n\nexport const ERROR_MSG = {\n init_sdk: 'init_sdk',\n no_order: 'no_order',\n no_broker: 'no_broker',\n invalid_jwt: 'invalid_jwt',\n market_closed: 'market_closed',\n user_mismatch: 'user_mismatch',\n order_pending: 'order_pending',\n internal_error: 'internal_error',\n user_cancelled: 'user_cancelled',\n consent_denied: 'consent_denied',\n order_in_queue: 'order_in_queue',\n invalid_gateway: 'invalid_gateway',\n transaction_expired: 'transaction_expired',\n invalid_transactionId: 'invalid_transactionId',\n insufficient_holdings: 'insufficient_holdings',\n transaction_in_process: 'transaction_in_process',\n no_compatible_browser: 'no_compatible_browser',\n};\n"],"mappings":";;;;;;AAAO,MAAMA,GAAG,GAAAC,OAAA,CAAAD,GAAA,GAAG;EACjBE,IAAI,EAAE,SAAS;EACfC,GAAG,EAAE,aAAa;EAClBC,IAAI,EAAE;AACR,CAAC;AAEM,MAAMC,gBAAgB,GAAAJ,OAAA,CAAAI,gBAAA,GAAG;EAC9BC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,WAAW;EACrBC,QAAQ,EAAE,WAAW;EACrBC,UAAU,EAAE,aAAa;EACzBC,WAAW,EAAE,aAAa;EAC1BC,cAAc,EAAE,iBAAiB;EACjCC,iBAAiB,EAAE,oBAAoB;EACvCC,gBAAgB,EAAE;AACpB,CAAC;AAEM,MAAMC,SAAS,GAAAb,OAAA,CAAAa,SAAA,GAAG;EACvBC,QAAQ,EAAE,UAAU;EACpBC,QAAQ,EAAE,UAAU;EACpBC,SAAS,EAAE,WAAW;EACtBC,WAAW,EAAE,aAAa;EAC1BC,aAAa,EAAE,eAAe;EAC9BC,aAAa,EAAE,eAAe;EAC9BC,aAAa,EAAE,eAAe;EAC9BC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,eAAe,EAAE,iBAAiB;EAClCC,mBAAmB,EAAE,qBAAqB;EAC1CC,qBAAqB,EAAE,uBAAuB;EAC9CC,qBAAqB,EAAE,uBAAuB;EAC9CC,sBAAsB,EAAE,wBAAwB;EAChDC,qBAAqB,EAAE;AACzB,CAAC","ignoreList":[]}
@@ -16,7 +16,8 @@ export const SCGatewayEventTypes = {
16
16
  ANALYTICS_EVENT: 'scgateway_analytics_event',
17
17
  SUPER_PROPERTIES_UPDATED: 'scgateway_super_properties_updated',
18
18
  USER_RESET: 'scgateway_user_reset',
19
- USER_IDENTIFY: 'scgateway_user_identify'
19
+ USER_IDENTIFY: 'scgateway_user_identify',
20
+ SMALLPLUG_ANALYTICS_EVENT: 'smallplug_analytics_event'
20
21
  };
21
22
  const SCGatewayNotificationEvent = 'scg_notification';
22
23
  class SCGatewayEvents {
@@ -78,6 +79,55 @@ class SCGatewayEvents {
78
79
  return subscription;
79
80
  }
80
81
 
82
+ /**
83
+ * Subscribe to SmallPlug / DM analytics events streamed during a launchSmallplug session.
84
+ * Events have shape: { eventName: string, data: object, timestamp: number }
85
+ * @param {(event: {eventName: string, data: any, timestamp: number}) => void} callback
86
+ * @returns {GatewayEventSubscription}
87
+ */
88
+ subscribeToSmallplugEvents(callback) {
89
+ if (!this.isInitialized) {
90
+ console.warn('[SCGatewayEvents] Event emitter not initialized');
91
+ return null;
92
+ }
93
+ if (typeof callback !== 'function') {
94
+ console.warn('[SCGatewayEvents] Invalid callback provided for SmallPlug subscription');
95
+ return null;
96
+ }
97
+ const subscription = this.eventEmitter.addListener(SCGatewayNotificationEvent, jsonString => {
98
+ if (!jsonString) return;
99
+ let parsed;
100
+ try {
101
+ parsed = JSON.parse(jsonString);
102
+ } catch (e) {
103
+ return;
104
+ }
105
+ if (parsed.type !== 'smallplug_analytics_event') return;
106
+ const {
107
+ eventName,
108
+ data
109
+ } = parsed.data ?? {};
110
+ callback({
111
+ eventName,
112
+ data,
113
+ timestamp: parsed.timestamp ?? Date.now()
114
+ });
115
+ });
116
+ this.subscriptions.push(subscription);
117
+ return subscription;
118
+ }
119
+
120
+ /**
121
+ * Unsubscribe from SmallPlug analytics events
122
+ * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToSmallplugEvents
123
+ */
124
+ unsubscribeFromSmallplugEvents(subscription) {
125
+ if (subscription && typeof subscription.remove === 'function') {
126
+ subscription.remove();
127
+ this.subscriptions = this.subscriptions.filter(sub => sub !== subscription);
128
+ }
129
+ }
130
+
81
131
  /**
82
132
  * Unsubscribe from Gateway Events
83
133
  * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToGatewayEvents
@@ -1 +1 @@
1
- {"version":3,"names":["NativeEventEmitter","NativeModules","nativeModule","SCGatewayBridgeEmitter","SCGatewayEventTypes","ANALYTICS_EVENT","SUPER_PROPERTIES_UPDATED","USER_RESET","USER_IDENTIFY","SCGatewayNotificationEvent","SCGatewayEvents","constructor","eventEmitter","subscriptions","initialize","isInitialized","console","warn","subscribeToGatewayEvents","callback","subscription","addListener","jsonString","eventData","JSON","parse","error","type","normalizedEvent","data","timestamp","Date","now","push","unsubscribeFromGatewayEvents","remove","filter","sub","cleanup","forEach","scGatewayEventManager"],"sources":["SCGatewayEventEmitter.js"],"sourcesContent":["import { NativeEventEmitter, NativeModules } from 'react-native';\n\n/**\n * @typedef {Object} GatewayEvent\n * @property {string} type - Event type\n * @property {any} data - Event payload data\n * @property {number} timestamp - Event timestamp\n *\n * @typedef {Object} GatewayEventSubscription\n * @property {() => void} remove - Method to unsubscribe from gateway events\n *\n */\n\nconst nativeModule = NativeModules.SCGatewayBridgeEmitter;\n\nexport const SCGatewayEventTypes = {\n ANALYTICS_EVENT: 'scgateway_analytics_event',\n SUPER_PROPERTIES_UPDATED: 'scgateway_super_properties_updated',\n USER_RESET: 'scgateway_user_reset',\n USER_IDENTIFY: 'scgateway_user_identify',\n};\n\nconst SCGatewayNotificationEvent = 'scg_notification';\n\nclass SCGatewayEvents {\n constructor() {\n this.eventEmitter = null;\n this.subscriptions = [];\n this.initialize();\n }\n\n get isInitialized() {\n return this.eventEmitter !== null;\n }\n\n initialize() {\n if (nativeModule) {\n this.eventEmitter = new NativeEventEmitter(nativeModule);\n } else {\n console.warn('[SCGatewayEvents] Native module not available');\n }\n }\n\n // ===== GATEWAY EVENT METHODS =====\n /**\n * Subscribe to Gateway Events\n * @param {(event: GatewayEvent) => void} callback - Callback function to handle gateway events\n * @returns {GatewayEventSubscription} subscription - Subscription object with remove() method\n */\n subscribeToGatewayEvents(callback) {\n if (!this.isInitialized) {\n console.warn('[SCGatewayEvents] Event emitter not initialized');\n return null;\n }\n\n if (typeof callback !== 'function') {\n console.warn(\n '[SCGatewayEvents] Invalid callback provided for subscription'\n );\n return null;\n }\n\n const subscription = this.eventEmitter.addListener(\n SCGatewayNotificationEvent,\n (jsonString) => {\n if (!jsonString) {\n console.warn('[SCGatewayEvents] Received null/undefined event data');\n return;\n }\n\n let eventData;\n try {\n eventData = JSON.parse(jsonString);\n } catch (error) {\n console.warn(\n '[SCGatewayEvents] Failed to parse event JSON:',\n error,\n 'Raw data:',\n jsonString\n );\n return;\n }\n\n if (!eventData.type) {\n console.warn(\n '[SCGatewayEvents] Dropping event - missing event type:',\n eventData\n );\n return;\n }\n\n const normalizedEvent = {\n type: eventData.type,\n data: eventData.data,\n timestamp: eventData.timestamp || Date.now(),\n };\n\n callback(normalizedEvent);\n }\n );\n\n this.subscriptions.push(subscription);\n\n return subscription;\n }\n\n /**\n * Unsubscribe from Gateway Events\n * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToGatewayEvents\n */\n unsubscribeFromGatewayEvents(subscription) {\n if (subscription && typeof subscription.remove === 'function') {\n subscription.remove();\n this.subscriptions = this.subscriptions.filter(\n (sub) => sub !== subscription\n );\n }\n }\n\n cleanup() {\n this.subscriptions.forEach((subscription) => {\n if (subscription && typeof subscription.remove === 'function') {\n subscription.remove();\n }\n });\n this.subscriptions = [];\n }\n}\n\nconst scGatewayEventManager = new SCGatewayEvents();\n\nexport default scGatewayEventManager;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["NativeEventEmitter","NativeModules","nativeModule","SCGatewayBridgeEmitter","SCGatewayEventTypes","ANALYTICS_EVENT","SUPER_PROPERTIES_UPDATED","USER_RESET","USER_IDENTIFY","SMALLPLUG_ANALYTICS_EVENT","SCGatewayNotificationEvent","SCGatewayEvents","constructor","eventEmitter","subscriptions","initialize","isInitialized","console","warn","subscribeToGatewayEvents","callback","subscription","addListener","jsonString","eventData","JSON","parse","error","type","normalizedEvent","data","timestamp","Date","now","push","subscribeToSmallplugEvents","parsed","e","eventName","unsubscribeFromSmallplugEvents","remove","filter","sub","unsubscribeFromGatewayEvents","cleanup","forEach","scGatewayEventManager"],"sources":["SCGatewayEventEmitter.js"],"sourcesContent":["import { NativeEventEmitter, NativeModules } from 'react-native';\n\n/**\n * @typedef {Object} GatewayEvent\n * @property {string} type - Event type\n * @property {any} data - Event payload data\n * @property {number} timestamp - Event timestamp\n *\n * @typedef {Object} GatewayEventSubscription\n * @property {() => void} remove - Method to unsubscribe from gateway events\n *\n */\n\nconst nativeModule = NativeModules.SCGatewayBridgeEmitter;\n\nexport const SCGatewayEventTypes = {\n ANALYTICS_EVENT: 'scgateway_analytics_event',\n SUPER_PROPERTIES_UPDATED: 'scgateway_super_properties_updated',\n USER_RESET: 'scgateway_user_reset',\n USER_IDENTIFY: 'scgateway_user_identify',\n SMALLPLUG_ANALYTICS_EVENT: 'smallplug_analytics_event',\n};\n\nconst SCGatewayNotificationEvent = 'scg_notification';\n\nclass SCGatewayEvents {\n constructor() {\n this.eventEmitter = null;\n this.subscriptions = [];\n this.initialize();\n }\n\n get isInitialized() {\n return this.eventEmitter !== null;\n }\n\n initialize() {\n if (nativeModule) {\n this.eventEmitter = new NativeEventEmitter(nativeModule);\n } else {\n console.warn('[SCGatewayEvents] Native module not available');\n }\n }\n\n // ===== GATEWAY EVENT METHODS =====\n /**\n * Subscribe to Gateway Events\n * @param {(event: GatewayEvent) => void} callback - Callback function to handle gateway events\n * @returns {GatewayEventSubscription} subscription - Subscription object with remove() method\n */\n subscribeToGatewayEvents(callback) {\n if (!this.isInitialized) {\n console.warn('[SCGatewayEvents] Event emitter not initialized');\n return null;\n }\n\n if (typeof callback !== 'function') {\n console.warn(\n '[SCGatewayEvents] Invalid callback provided for subscription'\n );\n return null;\n }\n\n const subscription = this.eventEmitter.addListener(\n SCGatewayNotificationEvent,\n (jsonString) => {\n if (!jsonString) {\n console.warn('[SCGatewayEvents] Received null/undefined event data');\n return;\n }\n\n let eventData;\n try {\n eventData = JSON.parse(jsonString);\n } catch (error) {\n console.warn(\n '[SCGatewayEvents] Failed to parse event JSON:',\n error,\n 'Raw data:',\n jsonString\n );\n return;\n }\n\n if (!eventData.type) {\n console.warn(\n '[SCGatewayEvents] Dropping event - missing event type:',\n eventData\n );\n return;\n }\n\n const normalizedEvent = {\n type: eventData.type,\n data: eventData.data,\n timestamp: eventData.timestamp || Date.now(),\n };\n\n callback(normalizedEvent);\n }\n );\n\n this.subscriptions.push(subscription);\n\n return subscription;\n }\n\n /**\n * Subscribe to SmallPlug / DM analytics events streamed during a launchSmallplug session.\n * Events have shape: { eventName: string, data: object, timestamp: number }\n * @param {(event: {eventName: string, data: any, timestamp: number}) => void} callback\n * @returns {GatewayEventSubscription}\n */\n subscribeToSmallplugEvents(callback) {\n if (!this.isInitialized) {\n console.warn('[SCGatewayEvents] Event emitter not initialized');\n return null;\n }\n\n if (typeof callback !== 'function') {\n console.warn(\n '[SCGatewayEvents] Invalid callback provided for SmallPlug subscription'\n );\n return null;\n }\n\n const subscription = this.eventEmitter.addListener(\n SCGatewayNotificationEvent,\n (jsonString) => {\n if (!jsonString) return;\n let parsed;\n try {\n parsed = JSON.parse(jsonString);\n } catch (e) {\n return;\n }\n if (parsed.type !== 'smallplug_analytics_event') return;\n const { eventName, data } = parsed.data ?? {};\n callback({\n eventName,\n data,\n timestamp: parsed.timestamp ?? Date.now(),\n });\n }\n );\n\n this.subscriptions.push(subscription);\n return subscription;\n }\n\n /**\n * Unsubscribe from SmallPlug analytics events\n * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToSmallplugEvents\n */\n unsubscribeFromSmallplugEvents(subscription) {\n if (subscription && typeof subscription.remove === 'function') {\n subscription.remove();\n this.subscriptions = this.subscriptions.filter(\n (sub) => sub !== subscription\n );\n }\n }\n\n /**\n * Unsubscribe from Gateway Events\n * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToGatewayEvents\n */\n unsubscribeFromGatewayEvents(subscription) {\n if (subscription && typeof subscription.remove === 'function') {\n subscription.remove();\n this.subscriptions = this.subscriptions.filter(\n (sub) => sub !== subscription\n );\n }\n }\n\n cleanup() {\n this.subscriptions.forEach((subscription) => {\n if (subscription && typeof subscription.remove === 'function') {\n subscription.remove();\n }\n });\n this.subscriptions = [];\n }\n}\n\nconst scGatewayEventManager = new SCGatewayEvents();\n\nexport default scGatewayEventManager;\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ export const ENV = {
6
6
  export const TRANSACTION_TYPE = {
7
7
  connect: 'CONNECT',
8
8
  sipSetup: 'SIP_SETUP',
9
+ imrSetup: 'IMR_SETUP',
9
10
  fetchFunds: 'FETCH_FUNDS',
10
11
  transaction: 'TRANSACTION',
11
12
  holdingsImport: 'HOLDINGS_IMPORT',
@@ -1 +1 @@
1
- {"version":3,"names":["ENV","STAG","DEV","PROD","TRANSACTION_TYPE","connect","sipSetup","fetchFunds","transaction","holdingsImport","authorizeHoldings","mfHoldingsImport","ERROR_MSG","init_sdk","no_order","no_broker","invalid_jwt","market_closed","user_mismatch","order_pending","internal_error","user_cancelled","consent_denied","order_in_queue","invalid_gateway","transaction_expired","invalid_transactionId","insufficient_holdings","transaction_in_process","no_compatible_browser"],"sources":["constants.js"],"sourcesContent":["export const ENV = {\n STAG: 'staging',\n DEV: 'development',\n PROD: 'production',\n};\n\nexport const TRANSACTION_TYPE = {\n connect: 'CONNECT',\n sipSetup: 'SIP_SETUP',\n fetchFunds: 'FETCH_FUNDS',\n transaction: 'TRANSACTION',\n holdingsImport: 'HOLDINGS_IMPORT',\n authorizeHoldings: 'AUTHORISE_HOLDINGS',\n mfHoldingsImport: 'MF_HOLDINGS_IMPORT',\n};\n\nexport const ERROR_MSG = {\n init_sdk: 'init_sdk',\n no_order: 'no_order',\n no_broker: 'no_broker',\n invalid_jwt: 'invalid_jwt',\n market_closed: 'market_closed',\n user_mismatch: 'user_mismatch',\n order_pending: 'order_pending',\n internal_error: 'internal_error',\n user_cancelled: 'user_cancelled',\n consent_denied: 'consent_denied',\n order_in_queue: 'order_in_queue',\n invalid_gateway: 'invalid_gateway',\n transaction_expired: 'transaction_expired',\n invalid_transactionId: 'invalid_transactionId',\n insufficient_holdings: 'insufficient_holdings',\n transaction_in_process: 'transaction_in_process',\n no_compatible_browser: 'no_compatible_browser',\n};\n"],"mappings":"AAAA,OAAO,MAAMA,GAAG,GAAG;EACjBC,IAAI,EAAE,SAAS;EACfC,GAAG,EAAE,aAAa;EAClBC,IAAI,EAAE;AACR,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAG;EAC9BC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,WAAW;EACrBC,UAAU,EAAE,aAAa;EACzBC,WAAW,EAAE,aAAa;EAC1BC,cAAc,EAAE,iBAAiB;EACjCC,iBAAiB,EAAE,oBAAoB;EACvCC,gBAAgB,EAAE;AACpB,CAAC;AAED,OAAO,MAAMC,SAAS,GAAG;EACvBC,QAAQ,EAAE,UAAU;EACpBC,QAAQ,EAAE,UAAU;EACpBC,SAAS,EAAE,WAAW;EACtBC,WAAW,EAAE,aAAa;EAC1BC,aAAa,EAAE,eAAe;EAC9BC,aAAa,EAAE,eAAe;EAC9BC,aAAa,EAAE,eAAe;EAC9BC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,eAAe,EAAE,iBAAiB;EAClCC,mBAAmB,EAAE,qBAAqB;EAC1CC,qBAAqB,EAAE,uBAAuB;EAC9CC,qBAAqB,EAAE,uBAAuB;EAC9CC,sBAAsB,EAAE,wBAAwB;EAChDC,qBAAqB,EAAE;AACzB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["ENV","STAG","DEV","PROD","TRANSACTION_TYPE","connect","sipSetup","imrSetup","fetchFunds","transaction","holdingsImport","authorizeHoldings","mfHoldingsImport","ERROR_MSG","init_sdk","no_order","no_broker","invalid_jwt","market_closed","user_mismatch","order_pending","internal_error","user_cancelled","consent_denied","order_in_queue","invalid_gateway","transaction_expired","invalid_transactionId","insufficient_holdings","transaction_in_process","no_compatible_browser"],"sources":["constants.js"],"sourcesContent":["export const ENV = {\n STAG: 'staging',\n DEV: 'development',\n PROD: 'production',\n};\n\nexport const TRANSACTION_TYPE = {\n connect: 'CONNECT',\n sipSetup: 'SIP_SETUP',\n imrSetup: 'IMR_SETUP',\n fetchFunds: 'FETCH_FUNDS',\n transaction: 'TRANSACTION',\n holdingsImport: 'HOLDINGS_IMPORT',\n authorizeHoldings: 'AUTHORISE_HOLDINGS',\n mfHoldingsImport: 'MF_HOLDINGS_IMPORT',\n};\n\nexport const ERROR_MSG = {\n init_sdk: 'init_sdk',\n no_order: 'no_order',\n no_broker: 'no_broker',\n invalid_jwt: 'invalid_jwt',\n market_closed: 'market_closed',\n user_mismatch: 'user_mismatch',\n order_pending: 'order_pending',\n internal_error: 'internal_error',\n user_cancelled: 'user_cancelled',\n consent_denied: 'consent_denied',\n order_in_queue: 'order_in_queue',\n invalid_gateway: 'invalid_gateway',\n transaction_expired: 'transaction_expired',\n invalid_transactionId: 'invalid_transactionId',\n insufficient_holdings: 'insufficient_holdings',\n transaction_in_process: 'transaction_in_process',\n no_compatible_browser: 'no_compatible_browser',\n};\n"],"mappings":"AAAA,OAAO,MAAMA,GAAG,GAAG;EACjBC,IAAI,EAAE,SAAS;EACfC,GAAG,EAAE,aAAa;EAClBC,IAAI,EAAE;AACR,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAG;EAC9BC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,WAAW;EACrBC,QAAQ,EAAE,WAAW;EACrBC,UAAU,EAAE,aAAa;EACzBC,WAAW,EAAE,aAAa;EAC1BC,cAAc,EAAE,iBAAiB;EACjCC,iBAAiB,EAAE,oBAAoB;EACvCC,gBAAgB,EAAE;AACpB,CAAC;AAED,OAAO,MAAMC,SAAS,GAAG;EACvBC,QAAQ,EAAE,UAAU;EACpBC,QAAQ,EAAE,UAAU;EACpBC,SAAS,EAAE,WAAW;EACtBC,WAAW,EAAE,aAAa;EAC1BC,aAAa,EAAE,eAAe;EAC9BC,aAAa,EAAE,eAAe;EAC9BC,aAAa,EAAE,eAAe;EAC9BC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,cAAc,EAAE,gBAAgB;EAChCC,eAAe,EAAE,iBAAiB;EAClCC,mBAAmB,EAAE,qBAAqB;EAC1CC,qBAAqB,EAAE,uBAAuB;EAC9CC,qBAAqB,EAAE,uBAAuB;EAC9CC,sBAAsB,EAAE,wBAAwB;EAChDC,qBAAqB,EAAE;AACzB,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-native-smallcase-gateway",
3
3
  "title": "React Native Smallcase Gateway",
4
- "version": "7.3.4",
4
+ "version": "7.3.5",
5
5
  "description": "smallcase gateway bindings for react native",
6
6
  "main": "src/index.js",
7
7
  "files": [
@@ -34,6 +34,6 @@ Pod::Spec.new do |s|
34
34
  s.dependency "ReactCommon/turbomodule/core"
35
35
  end
36
36
 
37
- s.dependency 'SCGateway', '7.1.5'
37
+ s.dependency 'SCGateway', '7.1.7'
38
38
  s.dependency 'SCLoans', '7.1.1'
39
39
  end
@@ -18,6 +18,7 @@ export const SCGatewayEventTypes = {
18
18
  SUPER_PROPERTIES_UPDATED: 'scgateway_super_properties_updated',
19
19
  USER_RESET: 'scgateway_user_reset',
20
20
  USER_IDENTIFY: 'scgateway_user_identify',
21
+ SMALLPLUG_ANALYTICS_EVENT: 'smallplug_analytics_event',
21
22
  };
22
23
 
23
24
  const SCGatewayNotificationEvent = 'scg_notification';
@@ -104,6 +105,62 @@ class SCGatewayEvents {
104
105
  return subscription;
105
106
  }
106
107
 
108
+ /**
109
+ * Subscribe to SmallPlug / DM analytics events streamed during a launchSmallplug session.
110
+ * Events have shape: { eventName: string, data: object, timestamp: number }
111
+ * @param {(event: {eventName: string, data: any, timestamp: number}) => void} callback
112
+ * @returns {GatewayEventSubscription}
113
+ */
114
+ subscribeToSmallplugEvents(callback) {
115
+ if (!this.isInitialized) {
116
+ console.warn('[SCGatewayEvents] Event emitter not initialized');
117
+ return null;
118
+ }
119
+
120
+ if (typeof callback !== 'function') {
121
+ console.warn(
122
+ '[SCGatewayEvents] Invalid callback provided for SmallPlug subscription'
123
+ );
124
+ return null;
125
+ }
126
+
127
+ const subscription = this.eventEmitter.addListener(
128
+ SCGatewayNotificationEvent,
129
+ (jsonString) => {
130
+ if (!jsonString) return;
131
+ let parsed;
132
+ try {
133
+ parsed = JSON.parse(jsonString);
134
+ } catch (e) {
135
+ return;
136
+ }
137
+ if (parsed.type !== 'smallplug_analytics_event') return;
138
+ const { eventName, data } = parsed.data ?? {};
139
+ callback({
140
+ eventName,
141
+ data,
142
+ timestamp: parsed.timestamp ?? Date.now(),
143
+ });
144
+ }
145
+ );
146
+
147
+ this.subscriptions.push(subscription);
148
+ return subscription;
149
+ }
150
+
151
+ /**
152
+ * Unsubscribe from SmallPlug analytics events
153
+ * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToSmallplugEvents
154
+ */
155
+ unsubscribeFromSmallplugEvents(subscription) {
156
+ if (subscription && typeof subscription.remove === 'function') {
157
+ subscription.remove();
158
+ this.subscriptions = this.subscriptions.filter(
159
+ (sub) => sub !== subscription
160
+ );
161
+ }
162
+ }
163
+
107
164
  /**
108
165
  * Unsubscribe from Gateway Events
109
166
  * @param {GatewayEventSubscription} subscription - Subscription returned from subscribeToGatewayEvents
package/src/constants.js CHANGED
@@ -7,6 +7,7 @@ export const ENV = {
7
7
  export const TRANSACTION_TYPE = {
8
8
  connect: 'CONNECT',
9
9
  sipSetup: 'SIP_SETUP',
10
+ imrSetup: 'IMR_SETUP',
10
11
  fetchFunds: 'FETCH_FUNDS',
11
12
  transaction: 'TRANSACTION',
12
13
  holdingsImport: 'HOLDINGS_IMPORT',
@@ -6,6 +6,7 @@ export namespace ENV {
6
6
  export namespace TRANSACTION_TYPE {
7
7
  const connect: string;
8
8
  const sipSetup: string;
9
+ const imrSetup: string;
9
10
  const fetchFunds: string;
10
11
  const transaction: string;
11
12
  const holdingsImport: string;
package/types/index.d.ts CHANGED
@@ -12,6 +12,12 @@ export interface LoansEvent {
12
12
  timestamp: number;
13
13
  }
14
14
 
15
+ export interface SmallplugAnalyticsEvent {
16
+ eventName: string;
17
+ data: Record<string, any>;
18
+ timestamp: number;
19
+ }
20
+
15
21
  export interface GatewayEventSubscription {
16
22
  remove(): void;
17
23
  }
@@ -22,6 +28,8 @@ export interface LoansEventSubscription {
22
28
 
23
29
  interface SCGatewayEventManagerInterface {
24
30
  subscribeToGatewayEvents(callback: ((event: GatewayEvent) => void)): GatewayEventSubscription | null;
31
+ subscribeToSmallplugEvents(callback: ((event: SmallplugAnalyticsEvent) => void)): GatewayEventSubscription | null;
32
+ unsubscribeFromSmallplugEvents(subscription: GatewayEventSubscription): void;
25
33
  unsubscribeFromGatewayEvents(subscription: GatewayEventSubscription): void;
26
34
  }
27
35
 
@@ -61,6 +69,7 @@ declare const _default: {
61
69
  TRANSACTION_TYPE: {
62
70
  connect: string;
63
71
  sipSetup: string;
72
+ imrSetup: string;
64
73
  fetchFunds: string;
65
74
  transaction: string;
66
75
  holdingsImport: string;
@@ -86,6 +95,7 @@ declare const _default: {
86
95
  SCLoansEventManager: SCLoansEventManagerInterface;
87
96
  subscribeToGatewayEvents: (callback: (event: GatewayEvent) => void) => GatewayEventSubscription | null;
88
97
  unsubscribeFromGatewayEvents: (subscription: GatewayEventSubscription) => void;
98
+ subscribeToSmallplugEvents: (callback: (event: SmallplugAnalyticsEvent) => void) => GatewayEventSubscription | null;
89
99
  subscribeToLoansEvent: (callback: (event: LoansEvent) => void) => LoansEventSubscription | null;
90
100
  unsubscribeFromLoansEvent: (subscription: LoansEventSubscription) => void;
91
101
  };