@ethora/chat-component-rn 26.10.5 → 26.10.7

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 (426) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +18 -0
  3. package/app.plugin.js +2 -0
  4. package/lib/commonjs/assets/icons.js +2 -2
  5. package/lib/commonjs/assets/icons.js.map +1 -1
  6. package/lib/commonjs/components/MainComponents/AlbumGrid.js +152 -0
  7. package/lib/commonjs/components/MainComponents/AlbumGrid.js.map +1 -0
  8. package/lib/commonjs/components/MainComponents/ChatRoom.js +2 -2
  9. package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
  10. package/lib/commonjs/components/MainComponents/MediaMessage.js +199 -123
  11. package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
  12. package/lib/commonjs/components/MainComponents/MediaUploadOverlay.js +109 -0
  13. package/lib/commonjs/components/MainComponents/MediaUploadOverlay.js.map +1 -0
  14. package/lib/commonjs/components/MessageBubble/MediaCaption.js +51 -0
  15. package/lib/commonjs/components/MessageBubble/MediaCaption.js.map +1 -0
  16. package/lib/commonjs/components/MessageBubble/Message.js +40 -1
  17. package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
  18. package/lib/commonjs/components/MessageBubble/MessageInteractions.js +2 -1
  19. package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
  20. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +75 -0
  21. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  22. package/lib/commonjs/components/RoomComponents/LastMessageItem.js +20 -4
  23. package/lib/commonjs/components/RoomComponents/LastMessageItem.js.map +1 -1
  24. package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js +3 -2
  25. package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
  26. package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js +3 -2
  27. package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
  28. package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js +3 -2
  29. package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
  30. package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js +3 -2
  31. package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
  32. package/lib/commonjs/components/Thread/ThreadWrapper.js +3 -2
  33. package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
  34. package/lib/commonjs/components/styled/MediaFilePreview.js +60 -47
  35. package/lib/commonjs/components/styled/MediaFilePreview.js.map +1 -1
  36. package/lib/commonjs/components/styled/MessageImage.js +16 -6
  37. package/lib/commonjs/components/styled/MessageImage.js.map +1 -1
  38. package/lib/commonjs/components/styled/SendInput.js +99 -68
  39. package/lib/commonjs/components/styled/SendInput.js.map +1 -1
  40. package/lib/commonjs/components/styled/VideoMessage.js +24 -10
  41. package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
  42. package/lib/commonjs/context/xmppProvider.js +46 -0
  43. package/lib/commonjs/context/xmppProvider.js.map +1 -1
  44. package/lib/commonjs/e2ee/fileEnvelope.js +6 -0
  45. package/lib/commonjs/e2ee/fileEnvelope.js.map +1 -1
  46. package/lib/commonjs/e2ee/sealedBody.js +32 -2
  47. package/lib/commonjs/e2ee/sealedBody.js.map +1 -1
  48. package/lib/commonjs/helpers/albumLayout.js +150 -0
  49. package/lib/commonjs/helpers/albumLayout.js.map +1 -0
  50. package/lib/commonjs/helpers/attachments.js +255 -0
  51. package/lib/commonjs/helpers/attachments.js.map +1 -0
  52. package/lib/commonjs/helpers/caption.js +214 -0
  53. package/lib/commonjs/helpers/caption.js.map +1 -0
  54. package/lib/commonjs/helpers/createMainMessageForThread.js +5 -1
  55. package/lib/commonjs/helpers/createMainMessageForThread.js.map +1 -1
  56. package/lib/commonjs/helpers/createMessageFromXml.js +19 -5
  57. package/lib/commonjs/helpers/createMessageFromXml.js.map +1 -1
  58. package/lib/commonjs/helpers/fileKind.js +40 -0
  59. package/lib/commonjs/helpers/fileKind.js.map +1 -0
  60. package/lib/commonjs/helpers/getDataFromXml.js +6 -1
  61. package/lib/commonjs/helpers/getDataFromXml.js.map +1 -1
  62. package/lib/commonjs/helpers/mapWithConcurrency.js +41 -0
  63. package/lib/commonjs/helpers/mapWithConcurrency.js.map +1 -0
  64. package/lib/commonjs/helpers/mediaLimits.js +33 -0
  65. package/lib/commonjs/helpers/mediaLimits.js.map +1 -0
  66. package/lib/commonjs/helpers/mediaSendRetry.js +64 -0
  67. package/lib/commonjs/helpers/mediaSendRetry.js.map +1 -0
  68. package/lib/commonjs/helpers/mediaWireData.js +62 -0
  69. package/lib/commonjs/helpers/mediaWireData.js.map +1 -0
  70. package/lib/commonjs/helpers/mentionSpans.js +19 -0
  71. package/lib/commonjs/helpers/mentionSpans.js.map +1 -0
  72. package/lib/commonjs/helpers/mimeToExtension.js +45 -0
  73. package/lib/commonjs/helpers/mimeToExtension.js.map +1 -1
  74. package/lib/commonjs/helpers/readReceipts.js +173 -0
  75. package/lib/commonjs/helpers/readReceipts.js.map +1 -0
  76. package/lib/commonjs/helpers/repairFilenameEncoding.js +79 -0
  77. package/lib/commonjs/helpers/repairFilenameEncoding.js.map +1 -0
  78. package/lib/commonjs/helpers/safeJson.js +18 -0
  79. package/lib/commonjs/helpers/safeJson.js.map +1 -0
  80. package/lib/commonjs/helpers/secureStoreRuntime.js +10 -1
  81. package/lib/commonjs/helpers/secureStoreRuntime.js.map +1 -1
  82. package/lib/commonjs/hooks/useSendMessage.js +384 -193
  83. package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
  84. package/lib/commonjs/i18n/strings.js +96 -0
  85. package/lib/commonjs/i18n/strings.js.map +1 -1
  86. package/lib/commonjs/main.js +81 -0
  87. package/lib/commonjs/main.js.map +1 -1
  88. package/lib/commonjs/networking/api-requests/auth.api.js +62 -3
  89. package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
  90. package/lib/commonjs/networking/api-requests/push.api.js +22 -7
  91. package/lib/commonjs/networking/api-requests/push.api.js.map +1 -1
  92. package/lib/commonjs/networking/stanzaHandlers.js +100 -3
  93. package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
  94. package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js +4 -2
  95. package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
  96. package/lib/commonjs/networking/xmpp/sendDisplayedMarker.xmpp.js +28 -0
  97. package/lib/commonjs/networking/xmpp/sendDisplayedMarker.xmpp.js.map +1 -0
  98. package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js +53 -2
  99. package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
  100. package/lib/commonjs/networking/xmpp/sendReceivedReceipt.xmpp.js +28 -0
  101. package/lib/commonjs/networking/xmpp/sendReceivedReceipt.xmpp.js.map +1 -0
  102. package/lib/commonjs/networking/xmppClient.js +64 -0
  103. package/lib/commonjs/networking/xmppClient.js.map +1 -1
  104. package/lib/commonjs/push/pushKeyStore.js +169 -0
  105. package/lib/commonjs/push/pushKeyStore.js.map +1 -0
  106. package/lib/commonjs/push/sealedBox.js +106 -0
  107. package/lib/commonjs/push/sealedBox.js.map +1 -0
  108. package/lib/commonjs/push/sealedPush.js +124 -0
  109. package/lib/commonjs/push/sealedPush.js.map +1 -0
  110. package/lib/commonjs/push/sealedPushTask.js +195 -0
  111. package/lib/commonjs/push/sealedPushTask.js.map +1 -0
  112. package/lib/commonjs/roomStore/persistence.js +78 -5
  113. package/lib/commonjs/roomStore/persistence.js.map +1 -1
  114. package/lib/commonjs/roomStore/roomHeapSlice.js +4 -0
  115. package/lib/commonjs/roomStore/roomHeapSlice.js.map +1 -1
  116. package/lib/commonjs/roomStore/roomsSlice.js +114 -1
  117. package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
  118. package/lib/commonjs/services/pushRegistration.js +12 -7
  119. package/lib/commonjs/services/pushRegistration.js.map +1 -1
  120. package/lib/commonjs/types/models/attachment.model.js +2 -0
  121. package/lib/commonjs/types/models/attachment.model.js.map +1 -0
  122. package/lib/commonjs/version.js +1 -1
  123. package/lib/module/assets/icons.js +1 -1
  124. package/lib/module/assets/icons.js.map +1 -1
  125. package/lib/module/components/MainComponents/AlbumGrid.js +146 -0
  126. package/lib/module/components/MainComponents/AlbumGrid.js.map +1 -0
  127. package/lib/module/components/MainComponents/ChatRoom.js +2 -2
  128. package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
  129. package/lib/module/components/MainComponents/MediaMessage.js +200 -124
  130. package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
  131. package/lib/module/components/MainComponents/MediaUploadOverlay.js +104 -0
  132. package/lib/module/components/MainComponents/MediaUploadOverlay.js.map +1 -0
  133. package/lib/module/components/MessageBubble/MediaCaption.js +46 -0
  134. package/lib/module/components/MessageBubble/MediaCaption.js.map +1 -0
  135. package/lib/module/components/MessageBubble/Message.js +44 -5
  136. package/lib/module/components/MessageBubble/Message.js.map +1 -1
  137. package/lib/module/components/MessageBubble/MessageInteractions.js +2 -1
  138. package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
  139. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +75 -0
  140. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  141. package/lib/module/components/RoomComponents/LastMessageItem.js +20 -4
  142. package/lib/module/components/RoomComponents/LastMessageItem.js.map +1 -1
  143. package/lib/module/components/RoomComponents/styled/LastAudioMessage.js +3 -2
  144. package/lib/module/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
  145. package/lib/module/components/RoomComponents/styled/LastMessageFile.js +3 -2
  146. package/lib/module/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
  147. package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js +3 -2
  148. package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
  149. package/lib/module/components/RoomComponents/styled/LastMessageVideo.js +3 -2
  150. package/lib/module/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
  151. package/lib/module/components/Thread/ThreadWrapper.js +3 -2
  152. package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
  153. package/lib/module/components/styled/MediaFilePreview.js +61 -48
  154. package/lib/module/components/styled/MediaFilePreview.js.map +1 -1
  155. package/lib/module/components/styled/MessageImage.js +16 -6
  156. package/lib/module/components/styled/MessageImage.js.map +1 -1
  157. package/lib/module/components/styled/SendInput.js +99 -68
  158. package/lib/module/components/styled/SendInput.js.map +1 -1
  159. package/lib/module/components/styled/VideoMessage.js +24 -10
  160. package/lib/module/components/styled/VideoMessage.js.map +1 -1
  161. package/lib/module/context/xmppProvider.js +46 -0
  162. package/lib/module/context/xmppProvider.js.map +1 -1
  163. package/lib/module/e2ee/fileEnvelope.js +1 -1
  164. package/lib/module/e2ee/fileEnvelope.js.map +1 -1
  165. package/lib/module/e2ee/sealedBody.js +32 -2
  166. package/lib/module/e2ee/sealedBody.js.map +1 -1
  167. package/lib/module/helpers/albumLayout.js +143 -0
  168. package/lib/module/helpers/albumLayout.js.map +1 -0
  169. package/lib/module/helpers/attachments.js +245 -0
  170. package/lib/module/helpers/attachments.js.map +1 -0
  171. package/lib/module/helpers/caption.js +207 -0
  172. package/lib/module/helpers/caption.js.map +1 -0
  173. package/lib/module/helpers/createMainMessageForThread.js +5 -1
  174. package/lib/module/helpers/createMainMessageForThread.js.map +1 -1
  175. package/lib/module/helpers/createMessageFromXml.js +20 -6
  176. package/lib/module/helpers/createMessageFromXml.js.map +1 -1
  177. package/lib/module/helpers/fileKind.js +34 -0
  178. package/lib/module/helpers/fileKind.js.map +1 -0
  179. package/lib/module/helpers/getDataFromXml.js +6 -1
  180. package/lib/module/helpers/getDataFromXml.js.map +1 -1
  181. package/lib/module/helpers/mapWithConcurrency.js +37 -0
  182. package/lib/module/helpers/mapWithConcurrency.js.map +1 -0
  183. package/lib/module/helpers/mediaLimits.js +27 -0
  184. package/lib/module/helpers/mediaLimits.js.map +1 -0
  185. package/lib/module/helpers/mediaSendRetry.js +55 -0
  186. package/lib/module/helpers/mediaSendRetry.js.map +1 -0
  187. package/lib/module/helpers/mediaWireData.js +58 -0
  188. package/lib/module/helpers/mediaWireData.js.map +1 -0
  189. package/lib/module/helpers/mentionSpans.js +14 -0
  190. package/lib/module/helpers/mentionSpans.js.map +1 -0
  191. package/lib/module/helpers/mimeToExtension.js +43 -0
  192. package/lib/module/helpers/mimeToExtension.js.map +1 -1
  193. package/lib/module/helpers/readReceipts.js +160 -0
  194. package/lib/module/helpers/readReceipts.js.map +1 -0
  195. package/lib/module/helpers/repairFilenameEncoding.js +74 -0
  196. package/lib/module/helpers/repairFilenameEncoding.js.map +1 -0
  197. package/lib/module/helpers/safeJson.js +13 -0
  198. package/lib/module/helpers/safeJson.js.map +1 -0
  199. package/lib/module/helpers/secureStoreRuntime.js +10 -1
  200. package/lib/module/helpers/secureStoreRuntime.js.map +1 -1
  201. package/lib/module/hooks/useSendMessage.js +387 -195
  202. package/lib/module/hooks/useSendMessage.js.map +1 -1
  203. package/lib/module/i18n/strings.js +96 -0
  204. package/lib/module/i18n/strings.js.map +1 -1
  205. package/lib/module/main.js +6 -0
  206. package/lib/module/main.js.map +1 -1
  207. package/lib/module/networking/api-requests/auth.api.js +62 -3
  208. package/lib/module/networking/api-requests/auth.api.js.map +1 -1
  209. package/lib/module/networking/api-requests/push.api.js +21 -6
  210. package/lib/module/networking/api-requests/push.api.js.map +1 -1
  211. package/lib/module/networking/stanzaHandlers.js +97 -4
  212. package/lib/module/networking/stanzaHandlers.js.map +1 -1
  213. package/lib/module/networking/xmpp/handleStanzas.xmpp.js +5 -3
  214. package/lib/module/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
  215. package/lib/module/networking/xmpp/sendDisplayedMarker.xmpp.js +25 -0
  216. package/lib/module/networking/xmpp/sendDisplayedMarker.xmpp.js.map +1 -0
  217. package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js +53 -2
  218. package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
  219. package/lib/module/networking/xmpp/sendReceivedReceipt.xmpp.js +25 -0
  220. package/lib/module/networking/xmpp/sendReceivedReceipt.xmpp.js.map +1 -0
  221. package/lib/module/networking/xmppClient.js +64 -0
  222. package/lib/module/networking/xmppClient.js.map +1 -1
  223. package/lib/module/push/pushKeyStore.js +159 -0
  224. package/lib/module/push/pushKeyStore.js.map +1 -0
  225. package/lib/module/push/sealedBox.js +97 -0
  226. package/lib/module/push/sealedBox.js.map +1 -0
  227. package/lib/module/push/sealedPush.js +117 -0
  228. package/lib/module/push/sealedPush.js.map +1 -0
  229. package/lib/module/push/sealedPushTask.js +187 -0
  230. package/lib/module/push/sealedPushTask.js.map +1 -0
  231. package/lib/module/roomStore/persistence.js +78 -5
  232. package/lib/module/roomStore/persistence.js.map +1 -1
  233. package/lib/module/roomStore/roomHeapSlice.js +4 -0
  234. package/lib/module/roomStore/roomHeapSlice.js.map +1 -1
  235. package/lib/module/roomStore/roomsSlice.js +109 -0
  236. package/lib/module/roomStore/roomsSlice.js.map +1 -1
  237. package/lib/module/services/pushRegistration.js +12 -7
  238. package/lib/module/services/pushRegistration.js.map +1 -1
  239. package/lib/module/types/models/attachment.model.js +2 -0
  240. package/lib/module/types/models/attachment.model.js.map +1 -0
  241. package/lib/module/version.js +1 -1
  242. package/lib/typescript/assets/icons.d.ts +6 -1
  243. package/lib/typescript/assets/icons.d.ts.map +1 -1
  244. package/lib/typescript/components/MainComponents/AlbumGrid.d.ts +21 -0
  245. package/lib/typescript/components/MainComponents/AlbumGrid.d.ts.map +1 -0
  246. package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
  247. package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
  248. package/lib/typescript/components/MainComponents/MediaUploadOverlay.d.ts +17 -0
  249. package/lib/typescript/components/MainComponents/MediaUploadOverlay.d.ts.map +1 -0
  250. package/lib/typescript/components/MessageBubble/MediaCaption.d.ts +12 -0
  251. package/lib/typescript/components/MessageBubble/MediaCaption.d.ts.map +1 -0
  252. package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
  253. package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
  254. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
  255. package/lib/typescript/components/RoomComponents/LastMessageItem.d.ts.map +1 -1
  256. package/lib/typescript/components/RoomComponents/styled/LastAudioMessage.d.ts +2 -0
  257. package/lib/typescript/components/RoomComponents/styled/LastAudioMessage.d.ts.map +1 -1
  258. package/lib/typescript/components/RoomComponents/styled/LastMessageFile.d.ts +2 -0
  259. package/lib/typescript/components/RoomComponents/styled/LastMessageFile.d.ts.map +1 -1
  260. package/lib/typescript/components/RoomComponents/styled/LastMessagePhoto.d.ts +2 -0
  261. package/lib/typescript/components/RoomComponents/styled/LastMessagePhoto.d.ts.map +1 -1
  262. package/lib/typescript/components/RoomComponents/styled/LastMessageVideo.d.ts +2 -0
  263. package/lib/typescript/components/RoomComponents/styled/LastMessageVideo.d.ts.map +1 -1
  264. package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
  265. package/lib/typescript/components/styled/MediaFilePreview.d.ts.map +1 -1
  266. package/lib/typescript/components/styled/MessageImage.d.ts +10 -0
  267. package/lib/typescript/components/styled/MessageImage.d.ts.map +1 -1
  268. package/lib/typescript/components/styled/SendInput.d.ts +7 -1
  269. package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
  270. package/lib/typescript/components/styled/VideoMessage.d.ts +7 -0
  271. package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
  272. package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
  273. package/lib/typescript/e2ee/fileEnvelope.d.ts +1 -1
  274. package/lib/typescript/e2ee/fileEnvelope.d.ts.map +1 -1
  275. package/lib/typescript/e2ee/sealedBody.d.ts +16 -0
  276. package/lib/typescript/e2ee/sealedBody.d.ts.map +1 -1
  277. package/lib/typescript/helpers/albumLayout.d.ts +66 -0
  278. package/lib/typescript/helpers/albumLayout.d.ts.map +1 -0
  279. package/lib/typescript/helpers/attachments.d.ts +55 -0
  280. package/lib/typescript/helpers/attachments.d.ts.map +1 -0
  281. package/lib/typescript/helpers/caption.d.ts +64 -0
  282. package/lib/typescript/helpers/caption.d.ts.map +1 -0
  283. package/lib/typescript/helpers/createMainMessageForThread.d.ts.map +1 -1
  284. package/lib/typescript/helpers/createMessageFromXml.d.ts.map +1 -1
  285. package/lib/typescript/helpers/fileKind.d.ts +20 -0
  286. package/lib/typescript/helpers/fileKind.d.ts.map +1 -0
  287. package/lib/typescript/helpers/getDataFromXml.d.ts.map +1 -1
  288. package/lib/typescript/helpers/mapWithConcurrency.d.ts +9 -0
  289. package/lib/typescript/helpers/mapWithConcurrency.d.ts.map +1 -0
  290. package/lib/typescript/helpers/mediaLimits.d.ts +13 -0
  291. package/lib/typescript/helpers/mediaLimits.d.ts.map +1 -0
  292. package/lib/typescript/helpers/mediaSendRetry.d.ts +26 -0
  293. package/lib/typescript/helpers/mediaSendRetry.d.ts.map +1 -0
  294. package/lib/typescript/helpers/mediaWireData.d.ts +16 -0
  295. package/lib/typescript/helpers/mediaWireData.d.ts.map +1 -0
  296. package/lib/typescript/helpers/mentionSpans.d.ts +8 -0
  297. package/lib/typescript/helpers/mentionSpans.d.ts.map +1 -0
  298. package/lib/typescript/helpers/mimeToExtension.d.ts +7 -0
  299. package/lib/typescript/helpers/mimeToExtension.d.ts.map +1 -1
  300. package/lib/typescript/helpers/readReceipts.d.ts +82 -0
  301. package/lib/typescript/helpers/readReceipts.d.ts.map +1 -0
  302. package/lib/typescript/helpers/repairFilenameEncoding.d.ts +12 -0
  303. package/lib/typescript/helpers/repairFilenameEncoding.d.ts.map +1 -0
  304. package/lib/typescript/helpers/safeJson.d.ts +2 -0
  305. package/lib/typescript/helpers/safeJson.d.ts.map +1 -0
  306. package/lib/typescript/helpers/secureStoreRuntime.d.ts +17 -3
  307. package/lib/typescript/helpers/secureStoreRuntime.d.ts.map +1 -1
  308. package/lib/typescript/hooks/useSendMessage.d.ts +2 -1
  309. package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
  310. package/lib/typescript/i18n/strings.d.ts.map +1 -1
  311. package/lib/typescript/main.d.ts +6 -0
  312. package/lib/typescript/main.d.ts.map +1 -1
  313. package/lib/typescript/networking/api-requests/auth.api.d.ts +2 -0
  314. package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
  315. package/lib/typescript/networking/api-requests/push.api.d.ts +14 -2
  316. package/lib/typescript/networking/api-requests/push.api.d.ts.map +1 -1
  317. package/lib/typescript/networking/stanzaHandlers.d.ts +7 -3
  318. package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
  319. package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts.map +1 -1
  320. package/lib/typescript/networking/xmpp/sendDisplayedMarker.xmpp.d.ts +3 -0
  321. package/lib/typescript/networking/xmpp/sendDisplayedMarker.xmpp.d.ts.map +1 -0
  322. package/lib/typescript/networking/xmpp/sendMediaMessage.xmpp.d.ts +12 -0
  323. package/lib/typescript/networking/xmpp/sendMediaMessage.xmpp.d.ts.map +1 -1
  324. package/lib/typescript/networking/xmpp/sendReceivedReceipt.xmpp.d.ts +3 -0
  325. package/lib/typescript/networking/xmpp/sendReceivedReceipt.xmpp.d.ts.map +1 -0
  326. package/lib/typescript/networking/xmppClient.d.ts +15 -0
  327. package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
  328. package/lib/typescript/push/pushKeyStore.d.ts +35 -0
  329. package/lib/typescript/push/pushKeyStore.d.ts.map +1 -0
  330. package/lib/typescript/push/sealedBox.d.ts +24 -0
  331. package/lib/typescript/push/sealedBox.d.ts.map +1 -0
  332. package/lib/typescript/push/sealedPush.d.ts +61 -0
  333. package/lib/typescript/push/sealedPush.d.ts.map +1 -0
  334. package/lib/typescript/push/sealedPushTask.d.ts +33 -0
  335. package/lib/typescript/push/sealedPushTask.d.ts.map +1 -0
  336. package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
  337. package/lib/typescript/roomStore/roomHeapSlice.d.ts +22 -1
  338. package/lib/typescript/roomStore/roomHeapSlice.d.ts.map +1 -1
  339. package/lib/typescript/roomStore/roomsSlice.d.ts +67 -3
  340. package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
  341. package/lib/typescript/services/pushRegistration.d.ts +8 -0
  342. package/lib/typescript/services/pushRegistration.d.ts.map +1 -1
  343. package/lib/typescript/types/models/attachment.model.d.ts +52 -0
  344. package/lib/typescript/types/models/attachment.model.d.ts.map +1 -0
  345. package/lib/typescript/types/models/message.model.d.ts +26 -0
  346. package/lib/typescript/types/models/message.model.d.ts.map +1 -1
  347. package/lib/typescript/types/models/modal.model.d.ts +7 -0
  348. package/lib/typescript/types/models/modal.model.d.ts.map +1 -1
  349. package/lib/typescript/types/models/room.model.d.ts +2 -0
  350. package/lib/typescript/types/models/room.model.d.ts.map +1 -1
  351. package/lib/typescript/types/types.d.ts +35 -1
  352. package/lib/typescript/types/types.d.ts.map +1 -1
  353. package/lib/typescript/version.d.ts +1 -1
  354. package/package.json +14 -1
  355. package/plugins/notification-service/Info.plist +31 -0
  356. package/plugins/notification-service/NotificationService.swift +195 -0
  357. package/plugins/notification-service/SealedBox.swift +355 -0
  358. package/plugins/notification-service/check/gen-vectors.mjs +24 -0
  359. package/plugins/notification-service/check/main.swift +37 -0
  360. package/plugins/notification-service/check/run.sh +12 -0
  361. package/plugins/notification-service/check/vectors.json +1 -0
  362. package/plugins/withNotificationServiceExtension.js +189 -0
  363. package/src/assets/icons.tsx +20 -2
  364. package/src/components/MainComponents/AlbumGrid.tsx +183 -0
  365. package/src/components/MainComponents/ChatRoom.tsx +4 -2
  366. package/src/components/MainComponents/MediaMessage.tsx +246 -130
  367. package/src/components/MainComponents/MediaUploadOverlay.tsx +102 -0
  368. package/src/components/MessageBubble/MediaCaption.tsx +45 -0
  369. package/src/components/MessageBubble/Message.tsx +71 -3
  370. package/src/components/MessageBubble/MessageInteractions.tsx +2 -1
  371. package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +64 -0
  372. package/src/components/RoomComponents/LastMessageItem.tsx +15 -4
  373. package/src/components/RoomComponents/styled/LastAudioMessage.tsx +6 -3
  374. package/src/components/RoomComponents/styled/LastMessageFile.tsx +6 -2
  375. package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +6 -2
  376. package/src/components/RoomComponents/styled/LastMessageVideo.tsx +6 -2
  377. package/src/components/Thread/ThreadWrapper.tsx +5 -9
  378. package/src/components/styled/MediaFilePreview.tsx +49 -34
  379. package/src/components/styled/MessageImage.tsx +21 -5
  380. package/src/components/styled/SendInput.tsx +101 -87
  381. package/src/components/styled/VideoMessage.tsx +34 -9
  382. package/src/context/xmppProvider.tsx +32 -0
  383. package/src/e2ee/fileEnvelope.ts +1 -1
  384. package/src/e2ee/sealedBody.ts +44 -5
  385. package/src/helpers/albumLayout.ts +207 -0
  386. package/src/helpers/attachments.ts +316 -0
  387. package/src/helpers/caption.ts +283 -0
  388. package/src/helpers/createMainMessageForThread.ts +6 -1
  389. package/src/helpers/createMessageFromXml.ts +21 -5
  390. package/src/helpers/fileKind.ts +38 -0
  391. package/src/helpers/getDataFromXml.ts +5 -1
  392. package/src/helpers/mapWithConcurrency.ts +32 -0
  393. package/src/helpers/mediaLimits.ts +27 -0
  394. package/src/helpers/mediaSendRetry.ts +59 -0
  395. package/src/helpers/mediaWireData.ts +57 -0
  396. package/src/helpers/mentionSpans.ts +17 -0
  397. package/src/helpers/mimeToExtension.ts +51 -0
  398. package/src/helpers/readReceipts.ts +219 -0
  399. package/src/helpers/repairFilenameEncoding.ts +82 -0
  400. package/src/helpers/safeJson.ts +11 -0
  401. package/src/helpers/secureStoreRuntime.ts +21 -3
  402. package/src/hooks/useSendMessage.tsx +448 -249
  403. package/src/i18n/strings.ts +96 -0
  404. package/src/main.ts +30 -0
  405. package/src/networking/api-requests/auth.api.ts +60 -3
  406. package/src/networking/api-requests/push.api.ts +29 -4
  407. package/src/networking/stanzaHandlers.ts +91 -2
  408. package/src/networking/xmpp/handleStanzas.xmpp.ts +6 -2
  409. package/src/networking/xmpp/sendDisplayedMarker.xmpp.ts +31 -0
  410. package/src/networking/xmpp/sendMediaMessage.xmpp.ts +60 -3
  411. package/src/networking/xmpp/sendReceivedReceipt.xmpp.ts +31 -0
  412. package/src/networking/xmppClient.ts +48 -0
  413. package/src/push/pushKeyStore.ts +163 -0
  414. package/src/push/sealedBox.ts +104 -0
  415. package/src/push/sealedPush.ts +127 -0
  416. package/src/push/sealedPushTask.ts +175 -0
  417. package/src/roomStore/persistence.ts +94 -3
  418. package/src/roomStore/roomHeapSlice.ts +23 -1
  419. package/src/roomStore/roomsSlice.ts +112 -1
  420. package/src/services/pushRegistration.ts +25 -5
  421. package/src/types/models/attachment.model.ts +51 -0
  422. package/src/types/models/message.model.ts +29 -0
  423. package/src/types/models/modal.model.ts +7 -0
  424. package/src/types/models/room.model.ts +2 -0
  425. package/src/types/types.ts +41 -1
  426. package/src/version.ts +1 -1
@@ -0,0 +1,219 @@
1
+ import type { IMessage, IRoom } from '../types/types';
2
+ import { msgSortableMs } from './msgSortableMs';
3
+ import { isOwnMessage } from './isOwnMessage';
4
+ import { createUserNameFromSetUser } from './createUserNameFromSetUser';
5
+
6
+ // Delivery (XEP-0184) and read (XEP-0333) state for the reader's own messages.
7
+ // Pure helpers: the reducers, the stanza handlers, the flush that sends the
8
+ // read watermark and the bubble all read the same rules from here.
9
+ //
10
+ // Receipts are session-only. receivedBy / lastDisplayedByUser are never
11
+ // written to disk (see persistence.ts), so after a reload every own message
12
+ // falls back to "sent" until the peers acknowledge again.
13
+
14
+ export type ReceiptStatus = 'sent' | 'delivered' | 'seen';
15
+
16
+ /** Names listed in a "Read by" / "Delivered to" sheet before the rest become "+N". */
17
+ export const RECEIPT_NAME_LIMIT = 5;
18
+
19
+ const NO_VIEWERS: string[] = [];
20
+
21
+ /** Stanza ids of the receipt and marker frames (never chat messages). */
22
+ export const isReceiptMarkerId = (id: unknown): boolean => {
23
+ const value = String(id ?? '');
24
+ return value.startsWith('message-received') || value.startsWith('message-displayed');
25
+ };
26
+
27
+ // A message the reader can be shown as displayed: not an optimistic send,
28
+ // not the "New messages" divider, not a client-only call-log row.
29
+ const isDisplayableForReceipts = (message: IMessage | undefined | null): boolean => {
30
+ if (!message) return false;
31
+ if (message.pending) return false;
32
+ if (message.id === 'delimiter-new') return false;
33
+ if (String(message.id || '').startsWith('calllog-')) return false;
34
+ return true;
35
+ };
36
+
37
+ /**
38
+ * The message id that becomes this reader's read watermark, or null when
39
+ * nothing should be sent: no displayable message, the newest message is the
40
+ * reader's own (nothing to report), or a read boundary (the reader scrolled
41
+ * up) sits before every message. With a boundary the watermark is the newest
42
+ * message at or before it, so a scrolled-up reader never claims messages they
43
+ * did not reach.
44
+ */
45
+ export const getReadWatermarkMessageId = (
46
+ room: Pick<IRoom, 'messages'> | null | undefined,
47
+ selfXmppUsername: string,
48
+ boundaryTs?: number | null
49
+ ): string | null => {
50
+ if (!selfXmppUsername) return null;
51
+ const messages = (room?.messages || []).filter(isDisplayableForReceipts);
52
+ if (messages.length === 0) return null;
53
+ const newest = messages[messages.length - 1];
54
+ if (isOwnMessage(newest, selfXmppUsername)) return null;
55
+ if (typeof boundaryTs === 'number' && boundaryTs > 0) {
56
+ for (let i = messages.length - 1; i >= 0; i--) {
57
+ if (msgSortableMs(messages[i]) <= boundaryTs) return String(messages[i].id);
58
+ }
59
+ return null;
60
+ }
61
+ return String(newest.id);
62
+ };
63
+
64
+ /** The slice of the redux state the receipt rules read. */
65
+ export interface ReceiptStoreState {
66
+ chatSettingStore?: {
67
+ config?: { disableLastRead?: boolean; disableReadReceipts?: boolean } | null;
68
+ user?: { xmppUsername?: string | null; walletAddress?: string | null } | null;
69
+ } | null;
70
+ rooms: {
71
+ rooms: Record<string, IRoom>;
72
+ visibleRoomJID: string | null;
73
+ jumpWindow: { roomJID: string } | null;
74
+ readBoundaries: Record<string, number>;
75
+ };
76
+ }
77
+
78
+ // The reader's identity as the message list resolves it (xmppUsername, then
79
+ // walletAddress), so the watermark and the bubble agree on "own".
80
+ export const selfIdentity = (state: ReceiptStoreState): string =>
81
+ state.chatSettingStore?.user?.xmppUsername || state.chatSettingStore?.user?.walletAddress || '';
82
+
83
+ /**
84
+ * Watermark to send for `roomJid` right now, or null. Sends only while the
85
+ * room is the one on screen, never while an old-history jump window is open,
86
+ * and never when read markers are switched off (`disableLastRead` or
87
+ * `disableReadReceipts`).
88
+ */
89
+ export const computeReadWatermark = (
90
+ state: ReceiptStoreState,
91
+ roomJid: string
92
+ ): string | null => {
93
+ if (!roomJid) return null;
94
+ const config = state.chatSettingStore?.config;
95
+ if (config?.disableLastRead || config?.disableReadReceipts) return null;
96
+ const rooms = state.rooms;
97
+ if (rooms.visibleRoomJID !== roomJid) return null;
98
+ if (rooms.jumpWindow?.roomJID === roomJid) return null;
99
+ return getReadWatermarkMessageId(
100
+ rooms.rooms?.[roomJid],
101
+ selfIdentity(state),
102
+ rooms.readBoundaries?.[roomJid] ?? null
103
+ );
104
+ };
105
+
106
+ /**
107
+ * Other occupants whose read watermark sits at or after `messageId` in the
108
+ * room's list. Returns the shared empty array when there are none, so the
109
+ * selector result stays shallow-equal between store updates.
110
+ */
111
+ export const viewersAtOrAfter = (
112
+ room: Pick<IRoom, 'messages' | 'lastDisplayedByUser'> | null | undefined,
113
+ messageId: string,
114
+ selfXmppUsername: string
115
+ ): string[] => {
116
+ const watermark = room?.lastDisplayedByUser;
117
+ const messages = room?.messages;
118
+ if (!watermark || !messages || messages.length === 0 || !messageId) return NO_VIEWERS;
119
+ const viewers = Object.keys(watermark).filter(
120
+ (xmppUsername) => xmppUsername !== selfXmppUsername
121
+ );
122
+ if (viewers.length === 0) return NO_VIEWERS;
123
+ const indexOf = (id: string): number => {
124
+ for (let i = messages.length - 1; i >= 0; i--) {
125
+ if (messages[i].id === id) return i;
126
+ }
127
+ return -1;
128
+ };
129
+ const thisIndex = indexOf(messageId);
130
+ if (thisIndex === -1) return NO_VIEWERS;
131
+ const seen = viewers.filter((xmppUsername) => {
132
+ const displayedIndex = indexOf(watermark[xmppUsername]);
133
+ return displayedIndex !== -1 && displayedIndex >= thisIndex;
134
+ });
135
+ return seen.length > 0 ? seen : NO_VIEWERS;
136
+ };
137
+
138
+ /** Selector form of viewersAtOrAfter, keyed by room and message. */
139
+ export const selectSeenBy = (
140
+ state: { rooms: { rooms: Record<string, IRoom> } },
141
+ roomJid: string,
142
+ messageId: string,
143
+ selfXmppUsername: string
144
+ ): string[] =>
145
+ viewersAtOrAfter(state.rooms.rooms?.[roomJid], messageId, selfXmppUsername);
146
+
147
+ /**
148
+ * sent / delivered / seen for one of the reader's own messages. "seen" wins
149
+ * over "delivered", which wins over "sent". Only other occupants count.
150
+ */
151
+ export const deliveredToOthers = (
152
+ message: Pick<IMessage, 'receivedBy'>,
153
+ selfXmppUsername: string
154
+ ): string[] =>
155
+ Object.keys(message.receivedBy || {}).filter(
156
+ (xmppUsername) => xmppUsername !== selfXmppUsername
157
+ );
158
+
159
+ export const statusOf = (seenBy: string[], deliveredTo: string[]): ReceiptStatus =>
160
+ seenBy.length > 0 ? 'seen' : deliveredTo.length > 0 ? 'delivered' : 'sent';
161
+
162
+ export const getReceiptStatus = (
163
+ message: Pick<IMessage, 'id' | 'receivedBy'>,
164
+ room: Pick<IRoom, 'messages' | 'lastDisplayedByUser'> | null | undefined,
165
+ selfXmppUsername: string
166
+ ): { status: ReceiptStatus; seenBy: string[]; deliveredTo: string[] } => {
167
+ const deliveredTo = deliveredToOthers(message, selfXmppUsername);
168
+ const seenBy = viewersAtOrAfter(room, String(message.id), selfXmppUsername);
169
+ return { status: statusOf(seenBy, deliveredTo), seenBy, deliveredTo };
170
+ };
171
+
172
+ /** Display name for a receipt entry: usersSet first, the raw username as the last resort. */
173
+ export const receiptNameFor = (
174
+ usersSet: Record<string, any> | undefined,
175
+ xmppUsername: string
176
+ ): string => {
177
+ const name = createUserNameFromSetUser(usersSet || {}, xmppUsername);
178
+ return name && name !== 'Deleted User' ? name : xmppUsername;
179
+ };
180
+
181
+ const formatNames = (names: string[]): string => {
182
+ const shown = names.slice(0, RECEIPT_NAME_LIMIT);
183
+ const extra = names.length - shown.length;
184
+ return extra > 0 ? `${shown.join(', ')} +${extra}` : shown.join(', ');
185
+ };
186
+
187
+ /**
188
+ * Text for the tick's details sheet. Groups name the readers or recipients
189
+ * (capped, then "+N"); a 1:1 room only says Read / Delivered.
190
+ */
191
+ export const describeReceipt = ({
192
+ status,
193
+ isGroup,
194
+ seenBy,
195
+ deliveredTo,
196
+ nameOf,
197
+ t,
198
+ }: {
199
+ status: ReceiptStatus;
200
+ isGroup: boolean;
201
+ seenBy: string[];
202
+ deliveredTo: string[];
203
+ nameOf: (xmppUsername: string) => string;
204
+ t: (key: string, vars?: Record<string, string | number>) => string;
205
+ }): string => {
206
+ if (status === 'seen') {
207
+ return isGroup
208
+ ? t('message.receipt.readBy', { names: formatNames(seenBy.map(nameOf)) })
209
+ : t('message.receipt.read');
210
+ }
211
+ if (status === 'delivered') {
212
+ return isGroup
213
+ ? t('message.receipt.deliveredTo', {
214
+ names: formatNames(deliveredTo.map(nameOf)),
215
+ })
216
+ : t('message.receipt.delivered');
217
+ }
218
+ return t('message.receipt.sent');
219
+ };
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Repairs file names the backend returns as UTF-8 bytes read as Latin-1
3
+ * (the classic multer/busboy `originalname` problem): "Список.pdf" arrives
4
+ * as "СпиÑок.pdf".
5
+ *
6
+ * Pure and conservative: a name is only replaced when every character fits
7
+ * in one byte, the bytes decode as strict UTF-8, the result differs, holds
8
+ * no replacement or control characters and contains at least one letter
9
+ * outside basic Latin. A correct name is returned untouched.
10
+ */
11
+
12
+ const hasMultiByteSignature = (value: string): boolean =>
13
+ // UTF-8 lead bytes C2-F4 followed by a continuation byte 80-BF.
14
+ /[Â-ô][\u0080-¿]/.test(value);
15
+
16
+ const looksLikePercentEncoded = (value: string): boolean =>
17
+ /%[0-9A-Fa-f]{2}/.test(value);
18
+
19
+ // C0 controls, DEL and the C1 range, checked per UTF-16 code unit.
20
+ const hasControlChars = (value: string): boolean => {
21
+ for (let i = 0; i < value.length; i += 1) {
22
+ const code = value.charCodeAt(i);
23
+ if (code < 0x20 || (code >= 0x7f && code <= 0x9f)) return true;
24
+ }
25
+ return false;
26
+ };
27
+
28
+ // Any code unit above ASCII (same as the former [^\u0000-\u007F] test).
29
+ const hasNonAscii = (value: string): boolean => /[\u0080-\uFFFF]/.test(value);
30
+
31
+ const decodeLatin1AsUtf8 = (value: string): string | null => {
32
+ if (typeof TextDecoder === 'undefined') return null;
33
+ const bytes = new Uint8Array(value.length);
34
+ for (let i = 0; i < value.length; i += 1) {
35
+ const code = value.charCodeAt(i);
36
+ if (code > 0xff) return null;
37
+ bytes[i] = code;
38
+ }
39
+ try {
40
+ return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
41
+ } catch {
42
+ return null;
43
+ }
44
+ };
45
+
46
+ const isPlausibleRepair = (original: string, repaired: string): boolean =>
47
+ repaired !== original &&
48
+ !repaired.includes('�') &&
49
+ !hasControlChars(repaired) &&
50
+ // Must contain a letter from a non-Latin-1 script or a real accented
51
+ // letter, otherwise the "fix" is just noise.
52
+ hasNonAscii(repaired) &&
53
+ /\p{L}/u.test(repaired);
54
+
55
+ const tryPercentDecode = (value: string): string => {
56
+ if (!looksLikePercentEncoded(value)) return value;
57
+ try {
58
+ const decoded = decodeURIComponent(value);
59
+ return hasControlChars(decoded) || decoded.includes('�') ? value : decoded;
60
+ } catch {
61
+ return value;
62
+ }
63
+ };
64
+
65
+ export const repairFilenameEncoding = (name: string): string => {
66
+ if (typeof name !== 'string' || name === '') return name;
67
+
68
+ let current = name;
69
+
70
+ // Percent-encoded names ("%D0%A1...") first; they may also be mojibake
71
+ // after decoding, so run the byte repair on the result.
72
+ const unescaped = tryPercentDecode(current);
73
+ if (unescaped !== current && hasNonAscii(unescaped)) {
74
+ current = unescaped;
75
+ }
76
+
77
+ if (!hasMultiByteSignature(current)) return current;
78
+
79
+ const repaired = decodeLatin1AsUtf8(current);
80
+ if (repaired !== null && isPlausibleRepair(current, repaired)) return repaired;
81
+ return current;
82
+ };
@@ -0,0 +1,11 @@
1
+ export const safeJsonParse = <T>(rawValue: unknown, fallback: T): T => {
2
+ if (typeof rawValue !== 'string' || rawValue.trim() === '') {
3
+ return fallback;
4
+ }
5
+
6
+ try {
7
+ return JSON.parse(rawValue) as T;
8
+ } catch {
9
+ return fallback;
10
+ }
11
+ };
@@ -12,10 +12,25 @@
12
12
  * AsyncStorage rather than crash (see `secureKeyValue.ts`).
13
13
  */
14
14
 
15
+ /**
16
+ * The subset of expo-secure-store's options the SDK uses. `keychainService`
17
+ * must be repeated on every read of an item written with it; the
18
+ * accessibility constants come from `SecureStoreRuntime.accessible`.
19
+ */
20
+ export interface SecureStoreOptions {
21
+ keychainService?: string;
22
+ /** iOS only: one of `accessible`; ignored on Android. */
23
+ keychainAccessible?: unknown;
24
+ }
25
+
15
26
  export interface SecureStoreRuntime {
16
- getItemAsync: (key: string) => Promise<string | null>;
17
- setItemAsync: (key: string, value: string) => Promise<void>;
18
- deleteItemAsync: (key: string) => Promise<void>;
27
+ getItemAsync: (key: string, options?: SecureStoreOptions) => Promise<string | null>;
28
+ setItemAsync: (key: string, value: string, options?: SecureStoreOptions) => Promise<void>;
29
+ deleteItemAsync: (key: string, options?: SecureStoreOptions) => Promise<void>;
30
+ /** expo-secure-store's iOS keychain accessibility constants (undefined on older versions). */
31
+ accessible: {
32
+ afterFirstUnlockThisDeviceOnly?: unknown;
33
+ };
19
34
  }
20
35
 
21
36
  let cached: SecureStoreRuntime | null | undefined;
@@ -45,6 +60,9 @@ export const loadSecureStore = (): SecureStoreRuntime | null => {
45
60
  getItemAsync: mod.getItemAsync,
46
61
  setItemAsync: mod.setItemAsync,
47
62
  deleteItemAsync: mod.deleteItemAsync,
63
+ accessible: {
64
+ afterFirstUnlockThisDeviceOnly: mod.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY,
65
+ },
48
66
  };
49
67
  }
50
68
  } catch {