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.
- package/android/build.gradle +1 -1
- package/ios/SmallcaseGateway.m +21 -0
- package/lib/commonjs/SCGatewayEventEmitter.js +51 -1
- package/lib/commonjs/SCGatewayEventEmitter.js.map +1 -1
- package/lib/commonjs/constants.js +1 -0
- package/lib/commonjs/constants.js.map +1 -1
- package/lib/module/SCGatewayEventEmitter.js +51 -1
- package/lib/module/SCGatewayEventEmitter.js.map +1 -1
- package/lib/module/constants.js +1 -0
- package/lib/module/constants.js.map +1 -1
- package/package.json +1 -1
- package/react-native-smallcase-gateway.podspec +1 -1
- package/src/SCGatewayEventEmitter.js +57 -0
- package/src/constants.js +1 -0
- package/types/constants.d.ts +1 -0
- package/types/index.d.ts +10 -0
package/android/build.gradle
CHANGED
|
@@ -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.
|
|
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"
|
package/ios/SmallcaseGateway.m
CHANGED
|
@@ -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","
|
|
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":[]}
|
|
@@ -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,
|
|
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","
|
|
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":[]}
|
package/lib/module/constants.js
CHANGED
|
@@ -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
|
@@ -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
package/types/constants.d.ts
CHANGED
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
|
};
|