@grupalia/rn-ui-kit 0.119.0 → 0.121.0

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 (33) hide show
  1. package/lib/commonjs/hooks/useNotifications.js +26 -7
  2. package/lib/commonjs/hooks/useNotifications.js.map +1 -1
  3. package/lib/commonjs/utils/createFcmDispatcher.js +26 -0
  4. package/lib/commonjs/utils/createFcmDispatcher.js.map +1 -0
  5. package/lib/commonjs/utils/index.js +24 -0
  6. package/lib/commonjs/utils/index.js.map +1 -1
  7. package/lib/commonjs/utils/pendingResourceEventQueue.js +59 -0
  8. package/lib/commonjs/utils/pendingResourceEventQueue.js.map +1 -0
  9. package/lib/module/hooks/useNotifications.js +27 -9
  10. package/lib/module/hooks/useNotifications.js.map +1 -1
  11. package/lib/module/utils/createFcmDispatcher.js +22 -0
  12. package/lib/module/utils/createFcmDispatcher.js.map +1 -0
  13. package/lib/module/utils/index.js +2 -0
  14. package/lib/module/utils/index.js.map +1 -1
  15. package/lib/module/utils/pendingResourceEventQueue.js +54 -0
  16. package/lib/module/utils/pendingResourceEventQueue.js.map +1 -0
  17. package/lib/typescript/commonjs/hooks/useNotifications.d.ts +15 -6
  18. package/lib/typescript/commonjs/hooks/useNotifications.d.ts.map +1 -1
  19. package/lib/typescript/commonjs/utils/createFcmDispatcher.d.ts +13 -0
  20. package/lib/typescript/commonjs/utils/createFcmDispatcher.d.ts.map +1 -0
  21. package/lib/typescript/commonjs/utils/index.d.ts +2 -0
  22. package/lib/typescript/commonjs/utils/index.d.ts.map +1 -1
  23. package/lib/typescript/commonjs/utils/pendingResourceEventQueue.d.ts +5 -0
  24. package/lib/typescript/commonjs/utils/pendingResourceEventQueue.d.ts.map +1 -0
  25. package/lib/typescript/module/hooks/useNotifications.d.ts +15 -6
  26. package/lib/typescript/module/hooks/useNotifications.d.ts.map +1 -1
  27. package/lib/typescript/module/utils/createFcmDispatcher.d.ts +13 -0
  28. package/lib/typescript/module/utils/createFcmDispatcher.d.ts.map +1 -0
  29. package/lib/typescript/module/utils/index.d.ts +2 -0
  30. package/lib/typescript/module/utils/index.d.ts.map +1 -1
  31. package/lib/typescript/module/utils/pendingResourceEventQueue.d.ts +5 -0
  32. package/lib/typescript/module/utils/pendingResourceEventQueue.d.ts.map +1 -0
  33. package/package.json +1 -1
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  exports.deleteAllChannels = deleteAllChannels;
8
8
  exports.getDeviceToken = getDeviceToken;
9
+ exports.registerBackgroundFcmHandler = registerBackgroundFcmHandler;
9
10
  exports.registerChannels = registerChannels;
10
11
  exports.requestUserPermission = requestUserPermission;
11
12
  exports.subscribeToTopics = subscribeToTopics;
@@ -15,6 +16,7 @@ var _reactNative = _interopRequireWildcard(require("@notifee/react-native"));
15
16
  var _messaging = require("@react-native-firebase/messaging");
16
17
  var _react = require("react");
17
18
  var _reactNative2 = require("react-native");
19
+ var _pendingResourceEventQueue = require("../utils/pendingResourceEventQueue");
18
20
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
19
21
  async function requestUserPermission() {
20
22
  const settings = await _reactNative.default.requestPermission();
@@ -34,10 +36,11 @@ function extractNotificationData(message) {
34
36
  return message.data ?? {};
35
37
  }
36
38
  async function displayForegroundNotification(message, config) {
39
+ if (!message.notification) return;
37
40
  const data = extractNotificationData(message);
38
41
  await _reactNative.default.displayNotification({
39
- title: message.notification?.title ?? undefined,
40
- body: message.notification?.body ?? undefined,
42
+ title: message.notification.title ?? undefined,
43
+ body: message.notification.body ?? undefined,
41
44
  data: message.data,
42
45
  android: {
43
46
  channelId: data.channelId || config.defaultChannelId || 'default',
@@ -58,23 +61,28 @@ function useNotifications(config) {
58
61
  registerChannels(config.androidChannels);
59
62
  }
60
63
 
61
- // Cold start: app was killed, user tapped OS notification
64
+ // Cold start: app was killed, user tapped OS notification.
65
+ // We only fire `onNotificationOpened` (for deep linking). The data-event
66
+ // dispatch is the consumer's responsibility. See the bg-handler queue
67
+ // pattern for catching killed-state events regardless of tap.
62
68
  (0, _messaging.getInitialNotification)(messaging).then(message => {
63
- if (message) {
64
- const data = extractNotificationData(message);
65
- config.onNotificationOpened?.(data, message.messageId);
66
- }
69
+ if (!message) return;
70
+ const data = extractNotificationData(message);
71
+ config.onNotificationOpened?.(data, message.messageId);
67
72
  });
68
73
  // eslint-disable-next-line react-hooks/exhaustive-deps
69
74
  }, []);
70
75
  (0, _react.useEffect)(() => {
71
76
  const unsubscribeOnMessage = (0, _messaging.onMessage)(messaging, message => {
77
+ const data = extractNotificationData(message);
78
+ config.onMessageData?.(data);
72
79
  displayForegroundNotification(message, config);
73
80
  });
74
81
 
75
82
  // Background → foreground: user tapped OS notification
76
83
  const unsubscribeOnOpened = (0, _messaging.onNotificationOpenedApp)(messaging, message => {
77
84
  const data = extractNotificationData(message);
85
+ config.onMessageData?.(data);
78
86
  config.onNotificationOpened?.(data, message.messageId);
79
87
  });
80
88
  const unsubscribeOnForegroundTap = _reactNative.default.onForegroundEvent(event => {
@@ -118,6 +126,17 @@ async function subscribeToTopics(topics) {
118
126
  const messaging = (0, _messaging.getMessaging)();
119
127
  await Promise.all(topics.map(topic => (0, _messaging.subscribeToTopic)(messaging, topic)));
120
128
  }
129
+
130
+ // `setBackgroundMessageHandler` must be registered at module top-level on the
131
+ // consumer side, before the JS runtime is suspended. Calling it from inside a
132
+ // React component is too late. Consumers invoke this from their entry file
133
+ function registerBackgroundFcmHandler(handler) {
134
+ (0, _messaging.setBackgroundMessageHandler)((0, _messaging.getMessaging)(), async message => {
135
+ const data = extractNotificationData(message);
136
+ await handler(data);
137
+ await (0, _pendingResourceEventQueue.appendPendingResourceEvent)(data);
138
+ });
139
+ }
121
140
  async function unsubscribeFromTopics(topics) {
122
141
  const messaging = (0, _messaging.getMessaging)();
123
142
  await Promise.all(topics.map(topic => (0, _messaging.unsubscribeFromTopic)(messaging, topic)));
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","_interopRequireWildcard","require","_messaging","_react","_reactNative2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","requestUserPermission","settings","notifee","requestPermission","authorizationStatus","AuthorizationStatus","AUTHORIZED","getDeviceToken","enabled","getToken","getMessaging","registerChannels","channels","registered","getChannels","registeredIds","Set","map","channel","id","Promise","all","filter","createChannel","extractNotificationData","message","data","displayForegroundNotification","config","displayNotification","title","notification","undefined","body","android","channelId","defaultChannelId","smallIcon","androidSmallIcon","pressAction","useNotifications","isSignedIn","messaging","useEffect","androidChannels","length","Platform","OS","getInitialNotification","then","onNotificationOpened","messageId","unsubscribeOnMessage","onMessage","unsubscribeOnOpened","onNotificationOpenedApp","unsubscribeOnForegroundTap","onForegroundEvent","event","type","EventType","PRESS","detail","acquireAndRegisterToken","token","onTokenAcquired","error","console","deleteAllChannels","deleteChannel","subscribeToTopics","topics","topic","subscribeToTopic","unsubscribeFromTopics","unsubscribeFromTopic","_default","exports"],"sourceRoot":"../../../src","sources":["hooks/useNotifications.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","_interopRequireWildcard","require","_messaging","_react","_reactNative2","_pendingResourceEventQueue","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","requestUserPermission","settings","notifee","requestPermission","authorizationStatus","AuthorizationStatus","AUTHORIZED","getDeviceToken","enabled","getToken","getMessaging","registerChannels","channels","registered","getChannels","registeredIds","Set","map","channel","id","Promise","all","filter","createChannel","extractNotificationData","message","data","displayForegroundNotification","config","notification","displayNotification","title","undefined","body","android","channelId","defaultChannelId","smallIcon","androidSmallIcon","pressAction","useNotifications","isSignedIn","messaging","useEffect","androidChannels","length","Platform","OS","getInitialNotification","then","onNotificationOpened","messageId","unsubscribeOnMessage","onMessage","onMessageData","unsubscribeOnOpened","onNotificationOpenedApp","unsubscribeOnForegroundTap","onForegroundEvent","event","type","EventType","PRESS","detail","acquireAndRegisterToken","token","onTokenAcquired","error","console","deleteAllChannels","deleteChannel","subscribeToTopics","topics","topic","subscribeToTopic","registerBackgroundFcmHandler","handler","setBackgroundMessageHandler","appendPendingResourceEvent","unsubscribeFromTopics","unsubscribeFromTopic","_default","exports"],"sourceRoot":"../../../src","sources":["hooks/useNotifications.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createFcmDispatcher = createFcmDispatcher;
7
+ var _log = _interopRequireDefault(require("./log"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ function createFcmDispatcher(handlers, options = {}) {
10
+ return data => {
11
+ if (!data.resource_type || !data.action) return;
12
+ const key = `${data.resource_type}:${data.action}`;
13
+ const handler = handlers[key];
14
+ if (!handler) return;
15
+ try {
16
+ handler(data);
17
+ } catch (err) {
18
+ if (options.onError) {
19
+ options.onError(err, key);
20
+ } else {
21
+ (0, _log.default)('fcm', `handler error: ${key}`, err instanceof Error ? err : String(err));
22
+ }
23
+ }
24
+ };
25
+ }
26
+ //# sourceMappingURL=createFcmDispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_log","_interopRequireDefault","require","e","__esModule","default","createFcmDispatcher","handlers","options","data","resource_type","action","key","handler","err","onError","log","Error","String"],"sourceRoot":"../../../src","sources":["utils/createFcmDispatcher.ts"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAwB,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAsBxB,SAASG,mBAAmBA,CAC1BC,QAA4C,EAC5CC,OAAmC,GAAG,CAAC,CAAC,EACP;EACjC,OAAQC,IAAI,IAAK;IACf,IAAI,CAACA,IAAI,CAACC,aAAa,IAAI,CAACD,IAAI,CAACE,MAAM,EAAE;IAEzC,MAAMC,GAAG,GAAG,GAAGH,IAAI,CAACC,aAAa,IAAID,IAAI,CAACE,MAAM,EAAsC;IACtF,MAAME,OAAO,GAAGN,QAAQ,CAACK,GAAG,CAAC;IAC7B,IAAI,CAACC,OAAO,EAAE;IAEd,IAAI;MACFA,OAAO,CAACJ,IAAI,CAAC;IACf,CAAC,CAAC,OAAOK,GAAG,EAAE;MACZ,IAAIN,OAAO,CAACO,OAAO,EAAE;QACnBP,OAAO,CAACO,OAAO,CAACD,GAAG,EAAEF,GAAG,CAAC;MAC3B,CAAC,MAAM;QACL,IAAAI,YAAG,EAAC,KAAK,EAAE,kBAAkBJ,GAAG,EAAE,EAAEE,GAAG,YAAYG,KAAK,GAAGH,GAAG,GAAGI,MAAM,CAACJ,GAAG,CAAC,CAAC;MAC/E;IACF;EACF,CAAC;AACH","ignoreList":[]}
@@ -132,6 +132,30 @@ Object.keys(_keyboard).forEach(function (key) {
132
132
  }
133
133
  });
134
134
  });
135
+ var _createFcmDispatcher = require("./createFcmDispatcher");
136
+ Object.keys(_createFcmDispatcher).forEach(function (key) {
137
+ if (key === "default" || key === "__esModule") return;
138
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
139
+ if (key in exports && exports[key] === _createFcmDispatcher[key]) return;
140
+ Object.defineProperty(exports, key, {
141
+ enumerable: true,
142
+ get: function () {
143
+ return _createFcmDispatcher[key];
144
+ }
145
+ });
146
+ });
147
+ var _pendingResourceEventQueue = require("./pendingResourceEventQueue");
148
+ Object.keys(_pendingResourceEventQueue).forEach(function (key) {
149
+ if (key === "default" || key === "__esModule") return;
150
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
151
+ if (key in exports && exports[key] === _pendingResourceEventQueue[key]) return;
152
+ Object.defineProperty(exports, key, {
153
+ enumerable: true,
154
+ get: function () {
155
+ return _pendingResourceEventQueue[key];
156
+ }
157
+ });
158
+ });
135
159
  var _delay = _interopRequireDefault(require("./delay"));
136
160
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
137
161
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_clabe","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_fileDirectoryUtils","_timeConstants","_filters","_log","_svg","_openExternalURL","_openFileInSystemViewer","_downloadFileToLocalStorage","_keyboard","_delay","_interopRequireDefault","e","__esModule","default"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,mBAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,mBAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,mBAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,mBAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,cAAA,GAAAd,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAY,cAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,cAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,cAAA,CAAAV,GAAA;IAAA;EAAA;AAAA;AACA,IAAAW,QAAA,GAAAf,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAa,QAAA,EAAAZ,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAW,QAAA,CAAAX,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,QAAA,CAAAX,GAAA;IAAA;EAAA;AAAA;AACA,IAAAY,IAAA,GAAAhB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAc,IAAA,EAAAb,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAY,IAAA,CAAAZ,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,IAAA,CAAAZ,GAAA;IAAA;EAAA;AAAA;AACA,IAAAa,IAAA,GAAAjB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAe,IAAA,EAAAd,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAa,IAAA,CAAAb,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAK,IAAA,CAAAb,GAAA;IAAA;EAAA;AAAA;AACA,IAAAc,gBAAA,GAAAlB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAgB,gBAAA,EAAAf,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAc,gBAAA,CAAAd,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAM,gBAAA,CAAAd,GAAA;IAAA;EAAA;AAAA;AACA,IAAAe,uBAAA,GAAAnB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAiB,uBAAA,EAAAhB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAe,uBAAA,CAAAf,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAO,uBAAA,CAAAf,GAAA;IAAA;EAAA;AAAA;AACA,IAAAgB,2BAAA,GAAApB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAkB,2BAAA,EAAAjB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAgB,2BAAA,CAAAhB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAQ,2BAAA,CAAAhB,GAAA;IAAA;EAAA;AAAA;AACA,IAAAiB,SAAA,GAAArB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAmB,SAAA,EAAAlB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAiB,SAAA,CAAAjB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAS,SAAA,CAAAjB,GAAA;IAAA;EAAA;AAAA;AACA,IAAAkB,MAAA,GAAAC,sBAAA,CAAAvB,OAAA;AAA2C,SAAAuB,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
1
+ {"version":3,"names":["_clabe","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_fileDirectoryUtils","_timeConstants","_filters","_log","_svg","_openExternalURL","_openFileInSystemViewer","_downloadFileToLocalStorage","_keyboard","_createFcmDispatcher","_pendingResourceEventQueue","_delay","_interopRequireDefault","e","__esModule","default"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,mBAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,mBAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,mBAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,mBAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,cAAA,GAAAd,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAY,cAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,cAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,cAAA,CAAAV,GAAA;IAAA;EAAA;AAAA;AACA,IAAAW,QAAA,GAAAf,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAa,QAAA,EAAAZ,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAW,QAAA,CAAAX,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,QAAA,CAAAX,GAAA;IAAA;EAAA;AAAA;AACA,IAAAY,IAAA,GAAAhB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAc,IAAA,EAAAb,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAY,IAAA,CAAAZ,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,IAAA,CAAAZ,GAAA;IAAA;EAAA;AAAA;AACA,IAAAa,IAAA,GAAAjB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAe,IAAA,EAAAd,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAa,IAAA,CAAAb,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAK,IAAA,CAAAb,GAAA;IAAA;EAAA;AAAA;AACA,IAAAc,gBAAA,GAAAlB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAgB,gBAAA,EAAAf,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAc,gBAAA,CAAAd,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAM,gBAAA,CAAAd,GAAA;IAAA;EAAA;AAAA;AACA,IAAAe,uBAAA,GAAAnB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAiB,uBAAA,EAAAhB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAe,uBAAA,CAAAf,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAO,uBAAA,CAAAf,GAAA;IAAA;EAAA;AAAA;AACA,IAAAgB,2BAAA,GAAApB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAkB,2BAAA,EAAAjB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAgB,2BAAA,CAAAhB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAQ,2BAAA,CAAAhB,GAAA;IAAA;EAAA;AAAA;AACA,IAAAiB,SAAA,GAAArB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAmB,SAAA,EAAAlB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAiB,SAAA,CAAAjB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAS,SAAA,CAAAjB,GAAA;IAAA;EAAA;AAAA;AACA,IAAAkB,oBAAA,GAAAtB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAoB,oBAAA,EAAAnB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAkB,oBAAA,CAAAlB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAU,oBAAA,CAAAlB,GAAA;IAAA;EAAA;AAAA;AACA,IAAAmB,0BAAA,GAAAvB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAqB,0BAAA,EAAApB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAmB,0BAAA,CAAAnB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAW,0BAAA,CAAAnB,GAAA;IAAA;EAAA;AAAA;AACA,IAAAoB,MAAA,GAAAC,sBAAA,CAAAzB,OAAA;AAA2C,SAAAyB,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.appendPendingResourceEvent = appendPendingResourceEvent;
7
+ exports.flushPendingResourceEventQueue = flushPendingResourceEventQueue;
8
+ var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
9
+ var _reactNative = require("@sentry/react-native");
10
+ var _log = _interopRequireDefault(require("./log"));
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ // Resource events extracted from killed-state FCM data messages are persisted
13
+ // here by the bg-handler so they can be dispatched on the next cold mount
14
+ // after the queryClient hydrates. Catches the "killed + open without tap" and
15
+ // "data-only killed" cases that `getInitialNotification` can't observe.
16
+ const PENDING_RESOURCE_EVENT_QUEUE_KEY = 'PENDING_RESOURCE_EVENTS';
17
+ async function readQueue() {
18
+ try {
19
+ const raw = await _asyncStorage.default.getItem(PENDING_RESOURCE_EVENT_QUEUE_KEY);
20
+ if (!raw) return [];
21
+ const parsed = JSON.parse(raw);
22
+ return Array.isArray(parsed) ? parsed : [];
23
+ } catch (err) {
24
+ (0, _log.default)('fcm', 'pendingResourceEventQueue.read error', err instanceof Error ? err : String(err));
25
+ return [];
26
+ }
27
+ }
28
+ async function doAppend(data) {
29
+ if (!data.resource_type || !data.action) return;
30
+ const queue = await readQueue();
31
+ const deduped = queue.filter(e => !(e.resource_type === data.resource_type && e.action === data.action));
32
+ deduped.push(data);
33
+ try {
34
+ await _asyncStorage.default.setItem(PENDING_RESOURCE_EVENT_QUEUE_KEY, JSON.stringify(deduped));
35
+ } catch (err) {
36
+ (0, _log.default)('fcm', 'pendingResourceEventQueue.append error', err instanceof Error ? err : String(err));
37
+ }
38
+ }
39
+
40
+ // "atomize" AsyncStorage read-modify-write
41
+ let appendChain = Promise.resolve();
42
+ function appendPendingResourceEvent(data) {
43
+ const next = appendChain.then(() => doAppend(data)).catch(err => {
44
+ (0, _reactNative.captureException)(err);
45
+ });
46
+ appendChain = next;
47
+ return next;
48
+ }
49
+ async function flushPendingResourceEventQueue(handler) {
50
+ const queue = await readQueue();
51
+ if (queue.length === 0) return;
52
+ try {
53
+ await _asyncStorage.default.removeItem(PENDING_RESOURCE_EVENT_QUEUE_KEY);
54
+ } catch (err) {
55
+ (0, _log.default)('fcm', 'pendingResourceEventQueue.clear error', err instanceof Error ? err : String(err));
56
+ }
57
+ queue.forEach(event => handler(event));
58
+ }
59
+ //# sourceMappingURL=pendingResourceEventQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_asyncStorage","_interopRequireDefault","require","_reactNative","_log","e","__esModule","default","PENDING_RESOURCE_EVENT_QUEUE_KEY","readQueue","raw","AsyncStorage","getItem","parsed","JSON","parse","Array","isArray","err","log","Error","String","doAppend","data","resource_type","action","queue","deduped","filter","push","setItem","stringify","appendChain","Promise","resolve","appendPendingResourceEvent","next","then","catch","captureException","flushPendingResourceEventQueue","handler","length","removeItem","forEach","event"],"sourceRoot":"../../../src","sources":["utils/pendingResourceEventQueue.ts"],"mappings":";;;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,IAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAwB,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAMxB;AACA;AACA;AACA;AACA,MAAMG,gCAAgC,GAAG,yBAAyB;AAElE,eAAeC,SAASA,CAAA,EAEyB;EAC/C,IAAI;IACF,MAAMC,GAAG,GAAG,MAAMC,qBAAY,CAACC,OAAO,CAACJ,gCAAgC,CAAC;IACxE,IAAI,CAACE,GAAG,EAAE,OAAO,EAAE;IACnB,MAAMG,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACL,GAAG,CAAC;IAC9B,OAAOM,KAAK,CAACC,OAAO,CAACJ,MAAM,CAAC,GAAGA,MAAM,GAAG,EAAE;EAC5C,CAAC,CAAC,OAAOK,GAAG,EAAE;IACZ,IAAAC,YAAG,EAAC,KAAK,EAAE,sCAAsC,EAAED,GAAG,YAAYE,KAAK,GAAGF,GAAG,GAAGG,MAAM,CAACH,GAAG,CAAC,CAAC;IAC5F,OAAO,EAAE;EACX;AACF;AAEA,eAAeI,QAAQA,CAErBC,IAAsC,EAAiB;EACvD,IAAI,CAACA,IAAI,CAACC,aAAa,IAAI,CAACD,IAAI,CAACE,MAAM,EAAE;EAEzC,MAAMC,KAAK,GAAG,MAAMjB,SAAS,CAAiB,CAAC;EAC/C,MAAMkB,OAAO,GAAGD,KAAK,CAACE,MAAM,CACzBvB,CAAC,IAAK,EAAEA,CAAC,CAACmB,aAAa,KAAKD,IAAI,CAACC,aAAa,IAAInB,CAAC,CAACoB,MAAM,KAAKF,IAAI,CAACE,MAAM,CAC7E,CAAC;EACDE,OAAO,CAACE,IAAI,CAACN,IAAI,CAAC;EAElB,IAAI;IACF,MAAMZ,qBAAY,CAACmB,OAAO,CAACtB,gCAAgC,EAAEM,IAAI,CAACiB,SAAS,CAACJ,OAAO,CAAC,CAAC;EACvF,CAAC,CAAC,OAAOT,GAAG,EAAE;IACZ,IAAAC,YAAG,EAAC,KAAK,EAAE,wCAAwC,EAAED,GAAG,YAAYE,KAAK,GAAGF,GAAG,GAAGG,MAAM,CAACH,GAAG,CAAC,CAAC;EAChG;AACF;;AAEA;AACA,IAAIc,WAA6B,GAAGC,OAAO,CAACC,OAAO,CAAC,CAAC;AAErD,SAASC,0BAA0BA,CAEjCZ,IAAsC,EAAiB;EACvD,MAAMa,IAAI,GAAGJ,WAAW,CACrBK,IAAI,CAAC,MAAMf,QAAQ,CAACC,IAAI,CAAC,CAAC,CAC1Be,KAAK,CAAEpB,GAAG,IAAK;IACd,IAAAqB,6BAAgB,EAACrB,GAAG,CAAC;EACvB,CAAC,CAAC;EACJc,WAAW,GAAGI,IAAI;EAClB,OAAOA,IAAI;AACb;AAEA,eAAeI,8BAA8BA,CAE3CC,OAAyD,EAAiB;EAC1E,MAAMf,KAAK,GAAG,MAAMjB,SAAS,CAAiB,CAAC;EAC/C,IAAIiB,KAAK,CAACgB,MAAM,KAAK,CAAC,EAAE;EAExB,IAAI;IACF,MAAM/B,qBAAY,CAACgC,UAAU,CAACnC,gCAAgC,CAAC;EACjE,CAAC,CAAC,OAAOU,GAAG,EAAE;IACZ,IAAAC,YAAG,EAAC,KAAK,EAAE,uCAAuC,EAAED,GAAG,YAAYE,KAAK,GAAGF,GAAG,GAAGG,MAAM,CAACH,GAAG,CAAC,CAAC;EAC/F;EAEAQ,KAAK,CAACkB,OAAO,CAAEC,KAAK,IAAKJ,OAAO,CAACI,KAAK,CAAC,CAAC;AAC1C","ignoreList":[]}
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  import notifee, { EventType } from '@notifee/react-native';
4
- import { getMessaging, getToken, AuthorizationStatus, getInitialNotification, onMessage, onNotificationOpenedApp, subscribeToTopic, unsubscribeFromTopic } from '@react-native-firebase/messaging';
4
+ import { getMessaging, getToken, AuthorizationStatus, getInitialNotification, onMessage, onNotificationOpenedApp, setBackgroundMessageHandler, subscribeToTopic, unsubscribeFromTopic } from '@react-native-firebase/messaging';
5
5
  import { useEffect } from 'react';
6
6
  import { Platform } from 'react-native';
7
+ import { appendPendingResourceEvent } from "../utils/pendingResourceEventQueue.js";
7
8
  async function requestUserPermission() {
8
9
  const settings = await notifee.requestPermission();
9
10
  return settings.authorizationStatus >= AuthorizationStatus.AUTHORIZED;
@@ -22,10 +23,11 @@ function extractNotificationData(message) {
22
23
  return message.data ?? {};
23
24
  }
24
25
  async function displayForegroundNotification(message, config) {
26
+ if (!message.notification) return;
25
27
  const data = extractNotificationData(message);
26
28
  await notifee.displayNotification({
27
- title: message.notification?.title ?? undefined,
28
- body: message.notification?.body ?? undefined,
29
+ title: message.notification.title ?? undefined,
30
+ body: message.notification.body ?? undefined,
29
31
  data: message.data,
30
32
  android: {
31
33
  channelId: data.channelId || config.defaultChannelId || 'default',
@@ -46,23 +48,28 @@ function useNotifications(config) {
46
48
  registerChannels(config.androidChannels);
47
49
  }
48
50
 
49
- // Cold start: app was killed, user tapped OS notification
51
+ // Cold start: app was killed, user tapped OS notification.
52
+ // We only fire `onNotificationOpened` (for deep linking). The data-event
53
+ // dispatch is the consumer's responsibility. See the bg-handler queue
54
+ // pattern for catching killed-state events regardless of tap.
50
55
  getInitialNotification(messaging).then(message => {
51
- if (message) {
52
- const data = extractNotificationData(message);
53
- config.onNotificationOpened?.(data, message.messageId);
54
- }
56
+ if (!message) return;
57
+ const data = extractNotificationData(message);
58
+ config.onNotificationOpened?.(data, message.messageId);
55
59
  });
56
60
  // eslint-disable-next-line react-hooks/exhaustive-deps
57
61
  }, []);
58
62
  useEffect(() => {
59
63
  const unsubscribeOnMessage = onMessage(messaging, message => {
64
+ const data = extractNotificationData(message);
65
+ config.onMessageData?.(data);
60
66
  displayForegroundNotification(message, config);
61
67
  });
62
68
 
63
69
  // Background → foreground: user tapped OS notification
64
70
  const unsubscribeOnOpened = onNotificationOpenedApp(messaging, message => {
65
71
  const data = extractNotificationData(message);
72
+ config.onMessageData?.(data);
66
73
  config.onNotificationOpened?.(data, message.messageId);
67
74
  });
68
75
  const unsubscribeOnForegroundTap = notifee.onForegroundEvent(event => {
@@ -106,10 +113,21 @@ async function subscribeToTopics(topics) {
106
113
  const messaging = getMessaging();
107
114
  await Promise.all(topics.map(topic => subscribeToTopic(messaging, topic)));
108
115
  }
116
+
117
+ // `setBackgroundMessageHandler` must be registered at module top-level on the
118
+ // consumer side, before the JS runtime is suspended. Calling it from inside a
119
+ // React component is too late. Consumers invoke this from their entry file
120
+ function registerBackgroundFcmHandler(handler) {
121
+ setBackgroundMessageHandler(getMessaging(), async message => {
122
+ const data = extractNotificationData(message);
123
+ await handler(data);
124
+ await appendPendingResourceEvent(data);
125
+ });
126
+ }
109
127
  async function unsubscribeFromTopics(topics) {
110
128
  const messaging = getMessaging();
111
129
  await Promise.all(topics.map(topic => unsubscribeFromTopic(messaging, topic)));
112
130
  }
113
- export { deleteAllChannels, getDeviceToken, registerChannels, requestUserPermission, subscribeToTopics, unsubscribeFromTopics, useNotifications };
131
+ export { deleteAllChannels, getDeviceToken, registerBackgroundFcmHandler, registerChannels, requestUserPermission, subscribeToTopics, unsubscribeFromTopics, useNotifications };
114
132
  export default useNotifications;
115
133
  //# sourceMappingURL=useNotifications.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["notifee","EventType","getMessaging","getToken","AuthorizationStatus","getInitialNotification","onMessage","onNotificationOpenedApp","subscribeToTopic","unsubscribeFromTopic","useEffect","Platform","requestUserPermission","settings","requestPermission","authorizationStatus","AUTHORIZED","getDeviceToken","enabled","registerChannels","channels","registered","getChannels","registeredIds","Set","map","channel","id","Promise","all","filter","has","createChannel","extractNotificationData","message","data","displayForegroundNotification","config","displayNotification","title","notification","undefined","body","android","channelId","defaultChannelId","smallIcon","androidSmallIcon","pressAction","useNotifications","isSignedIn","messaging","androidChannels","length","OS","then","onNotificationOpened","messageId","unsubscribeOnMessage","unsubscribeOnOpened","unsubscribeOnForegroundTap","onForegroundEvent","event","type","PRESS","detail","acquireAndRegisterToken","token","onTokenAcquired","error","console","deleteAllChannels","deleteChannel","subscribeToTopics","topics","topic","unsubscribeFromTopics"],"sourceRoot":"../../../src","sources":["hooks/useNotifications.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["notifee","EventType","getMessaging","getToken","AuthorizationStatus","getInitialNotification","onMessage","onNotificationOpenedApp","setBackgroundMessageHandler","subscribeToTopic","unsubscribeFromTopic","useEffect","Platform","appendPendingResourceEvent","requestUserPermission","settings","requestPermission","authorizationStatus","AUTHORIZED","getDeviceToken","enabled","registerChannels","channels","registered","getChannels","registeredIds","Set","map","channel","id","Promise","all","filter","has","createChannel","extractNotificationData","message","data","displayForegroundNotification","config","notification","displayNotification","title","undefined","body","android","channelId","defaultChannelId","smallIcon","androidSmallIcon","pressAction","useNotifications","isSignedIn","messaging","androidChannels","length","OS","then","onNotificationOpened","messageId","unsubscribeOnMessage","onMessageData","unsubscribeOnOpened","unsubscribeOnForegroundTap","onForegroundEvent","event","type","PRESS","detail","acquireAndRegisterToken","token","onTokenAcquired","error","console","deleteAllChannels","deleteChannel","subscribeToTopics","topics","topic","registerBackgroundFcmHandler","handler","unsubscribeFromTopics"],"sourceRoot":"../../../src","sources":["hooks/useNotifications.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ import log from "./log.js";
4
+ function createFcmDispatcher(handlers, options = {}) {
5
+ return data => {
6
+ if (!data.resource_type || !data.action) return;
7
+ const key = `${data.resource_type}:${data.action}`;
8
+ const handler = handlers[key];
9
+ if (!handler) return;
10
+ try {
11
+ handler(data);
12
+ } catch (err) {
13
+ if (options.onError) {
14
+ options.onError(err, key);
15
+ } else {
16
+ log('fcm', `handler error: ${key}`, err instanceof Error ? err : String(err));
17
+ }
18
+ }
19
+ };
20
+ }
21
+ export { createFcmDispatcher };
22
+ //# sourceMappingURL=createFcmDispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["log","createFcmDispatcher","handlers","options","data","resource_type","action","key","handler","err","onError","Error","String"],"sourceRoot":"../../../src","sources":["utils/createFcmDispatcher.ts"],"mappings":";;AAAA,OAAOA,GAAG,MAAM,UAAO;AAsBvB,SAASC,mBAAmBA,CAC1BC,QAA4C,EAC5CC,OAAmC,GAAG,CAAC,CAAC,EACP;EACjC,OAAQC,IAAI,IAAK;IACf,IAAI,CAACA,IAAI,CAACC,aAAa,IAAI,CAACD,IAAI,CAACE,MAAM,EAAE;IAEzC,MAAMC,GAAG,GAAG,GAAGH,IAAI,CAACC,aAAa,IAAID,IAAI,CAACE,MAAM,EAAsC;IACtF,MAAME,OAAO,GAAGN,QAAQ,CAACK,GAAG,CAAC;IAC7B,IAAI,CAACC,OAAO,EAAE;IAEd,IAAI;MACFA,OAAO,CAACJ,IAAI,CAAC;IACf,CAAC,CAAC,OAAOK,GAAG,EAAE;MACZ,IAAIN,OAAO,CAACO,OAAO,EAAE;QACnBP,OAAO,CAACO,OAAO,CAACD,GAAG,EAAEF,GAAG,CAAC;MAC3B,CAAC,MAAM;QACLP,GAAG,CAAC,KAAK,EAAE,kBAAkBO,GAAG,EAAE,EAAEE,GAAG,YAAYE,KAAK,GAAGF,GAAG,GAAGG,MAAM,CAACH,GAAG,CAAC,CAAC;MAC/E;IACF;EACF,CAAC;AACH;AAEA,SACER,mBAAmB","ignoreList":[]}
@@ -10,5 +10,7 @@ export * from "./openExternalURL.js";
10
10
  export * from "./openFileInSystemViewer.js";
11
11
  export * from "./downloadFileToLocalStorage.js";
12
12
  export * from "./keyboard.js";
13
+ export * from "./createFcmDispatcher.js";
14
+ export * from "./pendingResourceEventQueue.js";
13
15
  export { default as delay } from "./delay.js";
14
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["default","delay"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;AAAA,cAAc,YAAS;AACvB,cAAc,yBAAsB;AACpC,cAAc,oBAAiB;AAC/B,cAAc,cAAW;AACzB,cAAc,UAAO;AACrB,cAAc,UAAO;AACrB,cAAc,sBAAmB;AACjC,cAAc,6BAA0B;AACxC,cAAc,iCAA8B;AAC5C,cAAc,eAAY;AAC1B,SAASA,OAAO,IAAIC,KAAK,QAAQ,YAAS","ignoreList":[]}
1
+ {"version":3,"names":["default","delay"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;AAAA,cAAc,YAAS;AACvB,cAAc,yBAAsB;AACpC,cAAc,oBAAiB;AAC/B,cAAc,cAAW;AACzB,cAAc,UAAO;AACrB,cAAc,UAAO;AACrB,cAAc,sBAAmB;AACjC,cAAc,6BAA0B;AACxC,cAAc,iCAA8B;AAC5C,cAAc,eAAY;AAC1B,cAAc,0BAAuB;AACrC,cAAc,gCAA6B;AAC3C,SAASA,OAAO,IAAIC,KAAK,QAAQ,YAAS","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ import AsyncStorage from '@react-native-async-storage/async-storage';
4
+ import { captureException } from '@sentry/react-native';
5
+ import log from "./log.js";
6
+ // Resource events extracted from killed-state FCM data messages are persisted
7
+ // here by the bg-handler so they can be dispatched on the next cold mount
8
+ // after the queryClient hydrates. Catches the "killed + open without tap" and
9
+ // "data-only killed" cases that `getInitialNotification` can't observe.
10
+ const PENDING_RESOURCE_EVENT_QUEUE_KEY = 'PENDING_RESOURCE_EVENTS';
11
+ async function readQueue() {
12
+ try {
13
+ const raw = await AsyncStorage.getItem(PENDING_RESOURCE_EVENT_QUEUE_KEY);
14
+ if (!raw) return [];
15
+ const parsed = JSON.parse(raw);
16
+ return Array.isArray(parsed) ? parsed : [];
17
+ } catch (err) {
18
+ log('fcm', 'pendingResourceEventQueue.read error', err instanceof Error ? err : String(err));
19
+ return [];
20
+ }
21
+ }
22
+ async function doAppend(data) {
23
+ if (!data.resource_type || !data.action) return;
24
+ const queue = await readQueue();
25
+ const deduped = queue.filter(e => !(e.resource_type === data.resource_type && e.action === data.action));
26
+ deduped.push(data);
27
+ try {
28
+ await AsyncStorage.setItem(PENDING_RESOURCE_EVENT_QUEUE_KEY, JSON.stringify(deduped));
29
+ } catch (err) {
30
+ log('fcm', 'pendingResourceEventQueue.append error', err instanceof Error ? err : String(err));
31
+ }
32
+ }
33
+
34
+ // "atomize" AsyncStorage read-modify-write
35
+ let appendChain = Promise.resolve();
36
+ function appendPendingResourceEvent(data) {
37
+ const next = appendChain.then(() => doAppend(data)).catch(err => {
38
+ captureException(err);
39
+ });
40
+ appendChain = next;
41
+ return next;
42
+ }
43
+ async function flushPendingResourceEventQueue(handler) {
44
+ const queue = await readQueue();
45
+ if (queue.length === 0) return;
46
+ try {
47
+ await AsyncStorage.removeItem(PENDING_RESOURCE_EVENT_QUEUE_KEY);
48
+ } catch (err) {
49
+ log('fcm', 'pendingResourceEventQueue.clear error', err instanceof Error ? err : String(err));
50
+ }
51
+ queue.forEach(event => handler(event));
52
+ }
53
+ export { appendPendingResourceEvent, flushPendingResourceEventQueue };
54
+ //# sourceMappingURL=pendingResourceEventQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AsyncStorage","captureException","log","PENDING_RESOURCE_EVENT_QUEUE_KEY","readQueue","raw","getItem","parsed","JSON","parse","Array","isArray","err","Error","String","doAppend","data","resource_type","action","queue","deduped","filter","e","push","setItem","stringify","appendChain","Promise","resolve","appendPendingResourceEvent","next","then","catch","flushPendingResourceEventQueue","handler","length","removeItem","forEach","event"],"sourceRoot":"../../../src","sources":["utils/pendingResourceEventQueue.ts"],"mappings":";;AAAA,OAAOA,YAAY,MAAM,2CAA2C;AACpE,SAASC,gBAAgB,QAAQ,sBAAsB;AAEvD,OAAOC,GAAG,MAAM,UAAO;AAMvB;AACA;AACA;AACA;AACA,MAAMC,gCAAgC,GAAG,yBAAyB;AAElE,eAAeC,SAASA,CAAA,EAEyB;EAC/C,IAAI;IACF,MAAMC,GAAG,GAAG,MAAML,YAAY,CAACM,OAAO,CAACH,gCAAgC,CAAC;IACxE,IAAI,CAACE,GAAG,EAAE,OAAO,EAAE;IACnB,MAAME,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACJ,GAAG,CAAC;IAC9B,OAAOK,KAAK,CAACC,OAAO,CAACJ,MAAM,CAAC,GAAGA,MAAM,GAAG,EAAE;EAC5C,CAAC,CAAC,OAAOK,GAAG,EAAE;IACZV,GAAG,CAAC,KAAK,EAAE,sCAAsC,EAAEU,GAAG,YAAYC,KAAK,GAAGD,GAAG,GAAGE,MAAM,CAACF,GAAG,CAAC,CAAC;IAC5F,OAAO,EAAE;EACX;AACF;AAEA,eAAeG,QAAQA,CAErBC,IAAsC,EAAiB;EACvD,IAAI,CAACA,IAAI,CAACC,aAAa,IAAI,CAACD,IAAI,CAACE,MAAM,EAAE;EAEzC,MAAMC,KAAK,GAAG,MAAMf,SAAS,CAAiB,CAAC;EAC/C,MAAMgB,OAAO,GAAGD,KAAK,CAACE,MAAM,CACzBC,CAAC,IAAK,EAAEA,CAAC,CAACL,aAAa,KAAKD,IAAI,CAACC,aAAa,IAAIK,CAAC,CAACJ,MAAM,KAAKF,IAAI,CAACE,MAAM,CAC7E,CAAC;EACDE,OAAO,CAACG,IAAI,CAACP,IAAI,CAAC;EAElB,IAAI;IACF,MAAMhB,YAAY,CAACwB,OAAO,CAACrB,gCAAgC,EAAEK,IAAI,CAACiB,SAAS,CAACL,OAAO,CAAC,CAAC;EACvF,CAAC,CAAC,OAAOR,GAAG,EAAE;IACZV,GAAG,CAAC,KAAK,EAAE,wCAAwC,EAAEU,GAAG,YAAYC,KAAK,GAAGD,GAAG,GAAGE,MAAM,CAACF,GAAG,CAAC,CAAC;EAChG;AACF;;AAEA;AACA,IAAIc,WAA6B,GAAGC,OAAO,CAACC,OAAO,CAAC,CAAC;AAErD,SAASC,0BAA0BA,CAEjCb,IAAsC,EAAiB;EACvD,MAAMc,IAAI,GAAGJ,WAAW,CACrBK,IAAI,CAAC,MAAMhB,QAAQ,CAACC,IAAI,CAAC,CAAC,CAC1BgB,KAAK,CAAEpB,GAAG,IAAK;IACdX,gBAAgB,CAACW,GAAG,CAAC;EACvB,CAAC,CAAC;EACJc,WAAW,GAAGI,IAAI;EAClB,OAAOA,IAAI;AACb;AAEA,eAAeG,8BAA8BA,CAE3CC,OAAyD,EAAiB;EAC1E,MAAMf,KAAK,GAAG,MAAMf,SAAS,CAAiB,CAAC;EAC/C,IAAIe,KAAK,CAACgB,MAAM,KAAK,CAAC,EAAE;EAExB,IAAI;IACF,MAAMnC,YAAY,CAACoC,UAAU,CAACjC,gCAAgC,CAAC;EACjE,CAAC,CAAC,OAAOS,GAAG,EAAE;IACZV,GAAG,CAAC,KAAK,EAAE,uCAAuC,EAAEU,GAAG,YAAYC,KAAK,GAAGD,GAAG,GAAGE,MAAM,CAACF,GAAG,CAAC,CAAC;EAC/F;EAEAO,KAAK,CAACkB,OAAO,CAAEC,KAAK,IAAKJ,OAAO,CAACI,KAAK,CAAC,CAAC;AAC1C;AAEA,SAAST,0BAA0B,EAAEI,8BAA8B","ignoreList":[]}
@@ -1,25 +1,34 @@
1
1
  import { AndroidChannel } from '@notifee/react-native';
2
2
  export type { AndroidChannel };
3
- export interface NotificationData {
3
+ export type NotificationResourceEvent = {
4
+ resource_type: string;
5
+ action: string;
6
+ };
7
+ export type NotificationData<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent> = (TResourceEvent | {
8
+ resource_type: undefined;
9
+ action: undefined;
10
+ }) & {
4
11
  url?: string;
5
12
  channelId?: string;
6
13
  [key: string]: string | undefined;
7
- }
8
- export interface NotificationsConfig {
14
+ };
15
+ export interface NotificationsConfig<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent> {
9
16
  onTokenAcquired: (token: string) => Promise<void>;
10
17
  isSignedIn: boolean;
11
18
  androidChannels?: AndroidChannel[];
12
19
  androidSmallIcon?: string;
13
20
  defaultChannelId?: string;
14
- onNotificationOpened?: (data: NotificationData, messageId?: string) => void;
21
+ onNotificationOpened?: (data: NotificationData<TResourceEvent>, messageId?: string) => void;
22
+ onMessageData?: (data: NotificationData<TResourceEvent>) => void;
15
23
  }
16
24
  declare function requestUserPermission(): Promise<boolean>;
17
25
  declare function getDeviceToken(): Promise<string | null>;
18
26
  declare function registerChannels(channels: AndroidChannel[]): Promise<void>;
19
- declare function useNotifications(config: NotificationsConfig): void;
27
+ declare function useNotifications<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent>(config: NotificationsConfig<TResourceEvent>): void;
20
28
  declare function deleteAllChannels(): Promise<void>;
21
29
  declare function subscribeToTopics(topics: string[]): Promise<void>;
30
+ declare function registerBackgroundFcmHandler<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent>(handler: (data: NotificationData<TResourceEvent>) => void | Promise<void>): void;
22
31
  declare function unsubscribeFromTopics(topics: string[]): Promise<void>;
23
- export { deleteAllChannels, getDeviceToken, registerChannels, requestUserPermission, subscribeToTopics, unsubscribeFromTopics, useNotifications, };
32
+ export { deleteAllChannels, getDeviceToken, registerBackgroundFcmHandler, registerChannels, requestUserPermission, subscribeToTopics, unsubscribeFromTopics, useNotifications, };
24
33
  export default useNotifications;
25
34
  //# sourceMappingURL=useNotifications.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNotifications.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useNotifications.ts"],"names":[],"mappings":"AAAA,OAAgB,EAGd,cAAc,EACf,MAAM,uBAAuB,CAAC;AAe/B,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7E;AAED,iBAAe,qBAAqB,qBAInC;AAED,iBAAe,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKtD;AAED,iBAAe,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASzE;AA0BD,iBAAS,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAkE3D;AAED,iBAAe,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhD;AAED,iBAAe,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;AAED,iBAAe,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE;AAED,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GACjB,CAAC;AACF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"useNotifications.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useNotifications.ts"],"names":[],"mappings":"AAAA,OAAgB,EAGd,cAAc,EACf,MAAM,uBAAuB,CAAC;AAkB/B,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,MAAM,MAAM,yBAAyB,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,MAAM,MAAM,gBAAgB,CAC1B,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,IAC1E,CAAC,cAAc,GAAG;IAAE,aAAa,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC,GAAG;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF,MAAM,WAAW,mBAAmB,CAClC,cAAc,SAAS,yBAAyB,GAAG,yBAAyB;IAE5E,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5F,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CAClE;AAED,iBAAe,qBAAqB,qBAInC;AAED,iBAAe,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKtD;AAED,iBAAe,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASzE;AA4BD,iBAAS,gBAAgB,CACvB,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,EAC5E,MAAM,EAAE,mBAAmB,CAAC,cAAc,CAAC,GAAG,IAAI,CAuEnD;AAED,iBAAe,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhD;AAED,iBAAe,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;AAKD,iBAAS,4BAA4B,CACnC,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,EAE5E,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACxE,IAAI,CAMN;AAED,iBAAe,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE;AAED,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,4BAA4B,EAC5B,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GACjB,CAAC;AACF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { NotificationData, NotificationResourceEvent } from '../hooks/useNotifications';
2
+ type ResourceEventKey<TResourceEvent extends NotificationResourceEvent> = TResourceEvent extends {
3
+ resource_type: infer R extends string;
4
+ action: infer A extends string;
5
+ } ? `${R}:${A}` : never;
6
+ type FcmEventHandler<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent> = (data: NotificationData<TResourceEvent>) => void;
7
+ type FcmEventHandlerMap<TResourceEvent extends NotificationResourceEvent> = Record<ResourceEventKey<TResourceEvent>, FcmEventHandler<TResourceEvent>>;
8
+ interface CreateFcmDispatcherOptions {
9
+ onError?: (err: unknown, key: string) => void;
10
+ }
11
+ declare function createFcmDispatcher<TResourceEvent extends NotificationResourceEvent>(handlers: FcmEventHandlerMap<TResourceEvent>, options?: CreateFcmDispatcherOptions): FcmEventHandler<TResourceEvent>;
12
+ export { createFcmDispatcher, type CreateFcmDispatcherOptions, type FcmEventHandler, type FcmEventHandlerMap, type ResourceEventKey, };
13
+ //# sourceMappingURL=createFcmDispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFcmDispatcher.d.ts","sourceRoot":"","sources":["../../../../src/utils/createFcmDispatcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,2BAA2B,CAAC;AAEnC,KAAK,gBAAgB,CAAC,cAAc,SAAS,yBAAyB,IACpE,cAAc,SAAS;IAAE,aAAa,EAAE,MAAM,CAAC,SAAS,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GAC5F,GAAG,CAAC,IAAI,CAAC,EAAE,GACX,KAAK,CAAC;AAEZ,KAAK,eAAe,CAClB,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,IAC1E,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;AAErD,KAAK,kBAAkB,CAAC,cAAc,SAAS,yBAAyB,IACtE,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;AAE5E,UAAU,0BAA0B;IAClC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,iBAAS,mBAAmB,CAAC,cAAc,SAAS,yBAAyB,EAC3E,QAAQ,EAAE,kBAAkB,CAAC,cAAc,CAAC,EAC5C,OAAO,GAAE,0BAA+B,GACvC,eAAe,CAAC,cAAc,CAAC,CAkBjC;AAED,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,CAAC"}
@@ -8,5 +8,7 @@ export * from './openExternalURL';
8
8
  export * from './openFileInSystemViewer';
9
9
  export * from './downloadFileToLocalStorage';
10
10
  export * from './keyboard';
11
+ export * from './createFcmDispatcher';
12
+ export * from './pendingResourceEventQueue';
11
13
  export { default as delay } from './delay';
12
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { NotificationData, NotificationResourceEvent } from '../hooks/useNotifications';
2
+ declare function appendPendingResourceEvent<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent>(data: NotificationData<TResourceEvent>): Promise<void>;
3
+ declare function flushPendingResourceEventQueue<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent>(handler: (data: NotificationData<TResourceEvent>) => void): Promise<void>;
4
+ export { appendPendingResourceEvent, flushPendingResourceEventQueue };
5
+ //# sourceMappingURL=pendingResourceEventQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingResourceEventQueue.d.ts","sourceRoot":"","sources":["../../../../src/utils/pendingResourceEventQueue.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,2BAA2B,CAAC;AA2CnC,iBAAS,0BAA0B,CACjC,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,EAC5E,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvD;AAED,iBAAe,8BAA8B,CAC3C,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,EAC5E,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAW1E;AAED,OAAO,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,CAAC"}
@@ -1,25 +1,34 @@
1
1
  import { AndroidChannel } from '@notifee/react-native';
2
2
  export type { AndroidChannel };
3
- export interface NotificationData {
3
+ export type NotificationResourceEvent = {
4
+ resource_type: string;
5
+ action: string;
6
+ };
7
+ export type NotificationData<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent> = (TResourceEvent | {
8
+ resource_type: undefined;
9
+ action: undefined;
10
+ }) & {
4
11
  url?: string;
5
12
  channelId?: string;
6
13
  [key: string]: string | undefined;
7
- }
8
- export interface NotificationsConfig {
14
+ };
15
+ export interface NotificationsConfig<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent> {
9
16
  onTokenAcquired: (token: string) => Promise<void>;
10
17
  isSignedIn: boolean;
11
18
  androidChannels?: AndroidChannel[];
12
19
  androidSmallIcon?: string;
13
20
  defaultChannelId?: string;
14
- onNotificationOpened?: (data: NotificationData, messageId?: string) => void;
21
+ onNotificationOpened?: (data: NotificationData<TResourceEvent>, messageId?: string) => void;
22
+ onMessageData?: (data: NotificationData<TResourceEvent>) => void;
15
23
  }
16
24
  declare function requestUserPermission(): Promise<boolean>;
17
25
  declare function getDeviceToken(): Promise<string | null>;
18
26
  declare function registerChannels(channels: AndroidChannel[]): Promise<void>;
19
- declare function useNotifications(config: NotificationsConfig): void;
27
+ declare function useNotifications<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent>(config: NotificationsConfig<TResourceEvent>): void;
20
28
  declare function deleteAllChannels(): Promise<void>;
21
29
  declare function subscribeToTopics(topics: string[]): Promise<void>;
30
+ declare function registerBackgroundFcmHandler<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent>(handler: (data: NotificationData<TResourceEvent>) => void | Promise<void>): void;
22
31
  declare function unsubscribeFromTopics(topics: string[]): Promise<void>;
23
- export { deleteAllChannels, getDeviceToken, registerChannels, requestUserPermission, subscribeToTopics, unsubscribeFromTopics, useNotifications, };
32
+ export { deleteAllChannels, getDeviceToken, registerBackgroundFcmHandler, registerChannels, requestUserPermission, subscribeToTopics, unsubscribeFromTopics, useNotifications, };
24
33
  export default useNotifications;
25
34
  //# sourceMappingURL=useNotifications.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNotifications.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useNotifications.ts"],"names":[],"mappings":"AAAA,OAAgB,EAGd,cAAc,EACf,MAAM,uBAAuB,CAAC;AAe/B,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7E;AAED,iBAAe,qBAAqB,qBAInC;AAED,iBAAe,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKtD;AAED,iBAAe,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASzE;AA0BD,iBAAS,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAkE3D;AAED,iBAAe,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhD;AAED,iBAAe,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;AAED,iBAAe,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE;AAED,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GACjB,CAAC;AACF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"useNotifications.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useNotifications.ts"],"names":[],"mappings":"AAAA,OAAgB,EAGd,cAAc,EACf,MAAM,uBAAuB,CAAC;AAkB/B,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,MAAM,MAAM,yBAAyB,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,MAAM,MAAM,gBAAgB,CAC1B,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,IAC1E,CAAC,cAAc,GAAG;IAAE,aAAa,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC,GAAG;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF,MAAM,WAAW,mBAAmB,CAClC,cAAc,SAAS,yBAAyB,GAAG,yBAAyB;IAE5E,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5F,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CAClE;AAED,iBAAe,qBAAqB,qBAInC;AAED,iBAAe,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKtD;AAED,iBAAe,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASzE;AA4BD,iBAAS,gBAAgB,CACvB,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,EAC5E,MAAM,EAAE,mBAAmB,CAAC,cAAc,CAAC,GAAG,IAAI,CAuEnD;AAED,iBAAe,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhD;AAED,iBAAe,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;AAKD,iBAAS,4BAA4B,CACnC,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,EAE5E,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACxE,IAAI,CAMN;AAED,iBAAe,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE;AAED,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,4BAA4B,EAC5B,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GACjB,CAAC;AACF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { NotificationData, NotificationResourceEvent } from '../hooks/useNotifications';
2
+ type ResourceEventKey<TResourceEvent extends NotificationResourceEvent> = TResourceEvent extends {
3
+ resource_type: infer R extends string;
4
+ action: infer A extends string;
5
+ } ? `${R}:${A}` : never;
6
+ type FcmEventHandler<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent> = (data: NotificationData<TResourceEvent>) => void;
7
+ type FcmEventHandlerMap<TResourceEvent extends NotificationResourceEvent> = Record<ResourceEventKey<TResourceEvent>, FcmEventHandler<TResourceEvent>>;
8
+ interface CreateFcmDispatcherOptions {
9
+ onError?: (err: unknown, key: string) => void;
10
+ }
11
+ declare function createFcmDispatcher<TResourceEvent extends NotificationResourceEvent>(handlers: FcmEventHandlerMap<TResourceEvent>, options?: CreateFcmDispatcherOptions): FcmEventHandler<TResourceEvent>;
12
+ export { createFcmDispatcher, type CreateFcmDispatcherOptions, type FcmEventHandler, type FcmEventHandlerMap, type ResourceEventKey, };
13
+ //# sourceMappingURL=createFcmDispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFcmDispatcher.d.ts","sourceRoot":"","sources":["../../../../src/utils/createFcmDispatcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,2BAA2B,CAAC;AAEnC,KAAK,gBAAgB,CAAC,cAAc,SAAS,yBAAyB,IACpE,cAAc,SAAS;IAAE,aAAa,EAAE,MAAM,CAAC,SAAS,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GAC5F,GAAG,CAAC,IAAI,CAAC,EAAE,GACX,KAAK,CAAC;AAEZ,KAAK,eAAe,CAClB,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,IAC1E,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;AAErD,KAAK,kBAAkB,CAAC,cAAc,SAAS,yBAAyB,IACtE,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;AAE5E,UAAU,0BAA0B;IAClC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,iBAAS,mBAAmB,CAAC,cAAc,SAAS,yBAAyB,EAC3E,QAAQ,EAAE,kBAAkB,CAAC,cAAc,CAAC,EAC5C,OAAO,GAAE,0BAA+B,GACvC,eAAe,CAAC,cAAc,CAAC,CAkBjC;AAED,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,CAAC"}
@@ -8,5 +8,7 @@ export * from './openExternalURL';
8
8
  export * from './openFileInSystemViewer';
9
9
  export * from './downloadFileToLocalStorage';
10
10
  export * from './keyboard';
11
+ export * from './createFcmDispatcher';
12
+ export * from './pendingResourceEventQueue';
11
13
  export { default as delay } from './delay';
12
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { NotificationData, NotificationResourceEvent } from '../hooks/useNotifications';
2
+ declare function appendPendingResourceEvent<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent>(data: NotificationData<TResourceEvent>): Promise<void>;
3
+ declare function flushPendingResourceEventQueue<TResourceEvent extends NotificationResourceEvent = NotificationResourceEvent>(handler: (data: NotificationData<TResourceEvent>) => void): Promise<void>;
4
+ export { appendPendingResourceEvent, flushPendingResourceEventQueue };
5
+ //# sourceMappingURL=pendingResourceEventQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingResourceEventQueue.d.ts","sourceRoot":"","sources":["../../../../src/utils/pendingResourceEventQueue.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,2BAA2B,CAAC;AA2CnC,iBAAS,0BAA0B,CACjC,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,EAC5E,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvD;AAED,iBAAe,8BAA8B,CAC3C,cAAc,SAAS,yBAAyB,GAAG,yBAAyB,EAC5E,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAW1E;AAED,OAAO,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grupalia/rn-ui-kit",
3
- "version": "0.119.0",
3
+ "version": "0.121.0",
4
4
  "description": "Grupalia React Native UI Kit",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/module/index.d.ts",