@repzo/widget-react-native 1.3.1 → 1.5.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 (240) hide show
  1. package/CHANGELOG.md +173 -5
  2. package/README.md +99 -13
  3. package/lib/commonjs/api/client.js +125 -28
  4. package/lib/commonjs/api/client.js.map +1 -1
  5. package/lib/commonjs/attachments/file-size.js +52 -0
  6. package/lib/commonjs/attachments/file-size.js.map +1 -0
  7. package/lib/commonjs/attachments/local-previews.js +40 -0
  8. package/lib/commonjs/attachments/local-previews.js.map +1 -0
  9. package/lib/commonjs/attachments/pickers.js +20 -29
  10. package/lib/commonjs/attachments/pickers.js.map +1 -1
  11. package/lib/commonjs/i18n.js +22 -3
  12. package/lib/commonjs/i18n.js.map +1 -1
  13. package/lib/commonjs/index.js.map +1 -1
  14. package/lib/commonjs/locales.js +12 -3
  15. package/lib/commonjs/locales.js.map +1 -1
  16. package/lib/commonjs/state/user-update-queue.js +168 -0
  17. package/lib/commonjs/state/user-update-queue.js.map +1 -0
  18. package/lib/commonjs/state/widget-store.js +303 -33
  19. package/lib/commonjs/state/widget-store.js.map +1 -1
  20. package/lib/commonjs/storage.js +3 -1
  21. package/lib/commonjs/storage.js.map +1 -1
  22. package/lib/commonjs/types.js.map +1 -1
  23. package/lib/commonjs/ui/WidgetProvider.js +33 -13
  24. package/lib/commonjs/ui/WidgetProvider.js.map +1 -1
  25. package/lib/commonjs/ui/components/AttachmentChips.js +109 -40
  26. package/lib/commonjs/ui/components/AttachmentChips.js.map +1 -1
  27. package/lib/commonjs/ui/components/ConversationRow.js +65 -10
  28. package/lib/commonjs/ui/components/ConversationRow.js.map +1 -1
  29. package/lib/commonjs/ui/components/ImageViewer.js +229 -24
  30. package/lib/commonjs/ui/components/ImageViewer.js.map +1 -1
  31. package/lib/commonjs/ui/components/RatingCard.js +5 -2
  32. package/lib/commonjs/ui/components/RatingCard.js.map +1 -1
  33. package/lib/commonjs/ui/components/ZoomableImage.js +58 -10
  34. package/lib/commonjs/ui/components/ZoomableImage.js.map +1 -1
  35. package/lib/commonjs/ui/hooks/use-retained-state.js +39 -0
  36. package/lib/commonjs/ui/hooks/use-retained-state.js.map +1 -0
  37. package/lib/commonjs/ui/screens/chat/ChatView.js +651 -165
  38. package/lib/commonjs/ui/screens/chat/ChatView.js.map +1 -1
  39. package/lib/commonjs/ui/screens/chat/ChatView.styles.js +138 -1
  40. package/lib/commonjs/ui/screens/chat/ChatView.styles.js.map +1 -1
  41. package/lib/commonjs/ui/screens/conversations/ConversationsList.js +1 -0
  42. package/lib/commonjs/ui/screens/conversations/ConversationsList.js.map +1 -1
  43. package/lib/commonjs/ui/screens/home/HomeView.js +38 -55
  44. package/lib/commonjs/ui/screens/home/HomeView.js.map +1 -1
  45. package/lib/commonjs/ui/screens/home/HomeView.styles.js +36 -45
  46. package/lib/commonjs/ui/screens/home/HomeView.styles.js.map +1 -1
  47. package/lib/commonjs/ui/utils/html.js +13 -0
  48. package/lib/commonjs/ui/utils/html.js.map +1 -1
  49. package/lib/commonjs/ui/utils/image-load-queue.js +114 -0
  50. package/lib/commonjs/ui/utils/image-load-queue.js.map +1 -0
  51. package/lib/commonjs/ui/utils/inline-attachments.js +88 -0
  52. package/lib/commonjs/ui/utils/inline-attachments.js.map +1 -0
  53. package/lib/module/api/client.js +123 -27
  54. package/lib/module/api/client.js.map +1 -1
  55. package/lib/module/attachments/file-size.js +47 -0
  56. package/lib/module/attachments/file-size.js.map +1 -0
  57. package/lib/module/attachments/local-previews.js +33 -0
  58. package/lib/module/attachments/local-previews.js.map +1 -0
  59. package/lib/module/attachments/pickers.js +15 -25
  60. package/lib/module/attachments/pickers.js.map +1 -1
  61. package/lib/module/i18n.js +22 -3
  62. package/lib/module/i18n.js.map +1 -1
  63. package/lib/module/index.js.map +1 -1
  64. package/lib/module/locales.js +12 -3
  65. package/lib/module/locales.js.map +1 -1
  66. package/lib/module/state/user-update-queue.js +163 -0
  67. package/lib/module/state/user-update-queue.js.map +1 -0
  68. package/lib/module/state/widget-store.js +305 -35
  69. package/lib/module/state/widget-store.js.map +1 -1
  70. package/lib/module/storage.js +2 -0
  71. package/lib/module/storage.js.map +1 -1
  72. package/lib/module/types.js.map +1 -1
  73. package/lib/module/ui/WidgetProvider.js +33 -13
  74. package/lib/module/ui/WidgetProvider.js.map +1 -1
  75. package/lib/module/ui/components/AttachmentChips.js +111 -42
  76. package/lib/module/ui/components/AttachmentChips.js.map +1 -1
  77. package/lib/module/ui/components/ConversationRow.js +65 -10
  78. package/lib/module/ui/components/ConversationRow.js.map +1 -1
  79. package/lib/module/ui/components/ImageViewer.js +231 -26
  80. package/lib/module/ui/components/ImageViewer.js.map +1 -1
  81. package/lib/module/ui/components/RatingCard.js +5 -2
  82. package/lib/module/ui/components/RatingCard.js.map +1 -1
  83. package/lib/module/ui/components/ZoomableImage.js +58 -10
  84. package/lib/module/ui/components/ZoomableImage.js.map +1 -1
  85. package/lib/module/ui/hooks/use-retained-state.js +34 -0
  86. package/lib/module/ui/hooks/use-retained-state.js.map +1 -0
  87. package/lib/module/ui/screens/chat/ChatView.js +655 -169
  88. package/lib/module/ui/screens/chat/ChatView.js.map +1 -1
  89. package/lib/module/ui/screens/chat/ChatView.styles.js +140 -2
  90. package/lib/module/ui/screens/chat/ChatView.styles.js.map +1 -1
  91. package/lib/module/ui/screens/conversations/ConversationsList.js +1 -0
  92. package/lib/module/ui/screens/conversations/ConversationsList.js.map +1 -1
  93. package/lib/module/ui/screens/home/HomeView.js +40 -57
  94. package/lib/module/ui/screens/home/HomeView.js.map +1 -1
  95. package/lib/module/ui/screens/home/HomeView.styles.js +36 -45
  96. package/lib/module/ui/screens/home/HomeView.styles.js.map +1 -1
  97. package/lib/module/ui/utils/html.js +12 -0
  98. package/lib/module/ui/utils/html.js.map +1 -1
  99. package/lib/module/ui/utils/image-load-queue.js +109 -0
  100. package/lib/module/ui/utils/image-load-queue.js.map +1 -0
  101. package/lib/module/ui/utils/inline-attachments.js +85 -0
  102. package/lib/module/ui/utils/inline-attachments.js.map +1 -0
  103. package/lib/typescript/commonjs/api/client.d.ts +20 -6
  104. package/lib/typescript/commonjs/api/client.d.ts.map +1 -1
  105. package/lib/typescript/commonjs/attachments/file-size.d.ts +15 -0
  106. package/lib/typescript/commonjs/attachments/file-size.d.ts.map +1 -0
  107. package/lib/typescript/commonjs/attachments/local-previews.d.ts +14 -0
  108. package/lib/typescript/commonjs/attachments/local-previews.d.ts.map +1 -0
  109. package/lib/typescript/commonjs/attachments/pickers.d.ts +15 -2
  110. package/lib/typescript/commonjs/attachments/pickers.d.ts.map +1 -1
  111. package/lib/typescript/commonjs/i18n.d.ts +12 -3
  112. package/lib/typescript/commonjs/i18n.d.ts.map +1 -1
  113. package/lib/typescript/commonjs/index.d.ts +5 -0
  114. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  115. package/lib/typescript/commonjs/locales.d.ts.map +1 -1
  116. package/lib/typescript/commonjs/state/user-update-queue.d.ts +62 -0
  117. package/lib/typescript/commonjs/state/user-update-queue.d.ts.map +1 -0
  118. package/lib/typescript/commonjs/state/widget-store.d.ts +44 -1
  119. package/lib/typescript/commonjs/state/widget-store.d.ts.map +1 -1
  120. package/lib/typescript/commonjs/storage.d.ts +2 -0
  121. package/lib/typescript/commonjs/storage.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/types.d.ts +53 -0
  123. package/lib/typescript/commonjs/types.d.ts.map +1 -1
  124. package/lib/typescript/commonjs/ui/WidgetProvider.d.ts.map +1 -1
  125. package/lib/typescript/commonjs/ui/components/AttachmentChips.d.ts +13 -3
  126. package/lib/typescript/commonjs/ui/components/AttachmentChips.d.ts.map +1 -1
  127. package/lib/typescript/commonjs/ui/components/ConversationRow.d.ts +15 -1
  128. package/lib/typescript/commonjs/ui/components/ConversationRow.d.ts.map +1 -1
  129. package/lib/typescript/commonjs/ui/components/ImageViewer.d.ts +26 -6
  130. package/lib/typescript/commonjs/ui/components/ImageViewer.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/ui/components/RatingCard.d.ts.map +1 -1
  132. package/lib/typescript/commonjs/ui/components/ZoomableImage.d.ts +10 -1
  133. package/lib/typescript/commonjs/ui/components/ZoomableImage.d.ts.map +1 -1
  134. package/lib/typescript/commonjs/ui/hooks/use-retained-state.d.ts +11 -0
  135. package/lib/typescript/commonjs/ui/hooks/use-retained-state.d.ts.map +1 -0
  136. package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts +4 -4
  137. package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts.map +1 -1
  138. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts +144 -0
  139. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
  140. package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts +26 -1
  141. package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts.map +1 -1
  142. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.d.ts.map +1 -1
  143. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.types.d.ts +2 -0
  144. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.types.d.ts.map +1 -1
  145. package/lib/typescript/commonjs/ui/screens/home/HomeView.d.ts +7 -5
  146. package/lib/typescript/commonjs/ui/screens/home/HomeView.d.ts.map +1 -1
  147. package/lib/typescript/commonjs/ui/screens/home/HomeView.styles.d.ts +30 -35
  148. package/lib/typescript/commonjs/ui/screens/home/HomeView.styles.d.ts.map +1 -1
  149. package/lib/typescript/commonjs/ui/screens/home/HomeView.types.d.ts +5 -6
  150. package/lib/typescript/commonjs/ui/screens/home/HomeView.types.d.ts.map +1 -1
  151. package/lib/typescript/commonjs/ui/utils/html.d.ts +5 -0
  152. package/lib/typescript/commonjs/ui/utils/html.d.ts.map +1 -1
  153. package/lib/typescript/commonjs/ui/utils/image-load-queue.d.ts +44 -0
  154. package/lib/typescript/commonjs/ui/utils/image-load-queue.d.ts.map +1 -0
  155. package/lib/typescript/commonjs/ui/utils/inline-attachments.d.ts +29 -0
  156. package/lib/typescript/commonjs/ui/utils/inline-attachments.d.ts.map +1 -0
  157. package/lib/typescript/module/api/client.d.ts +20 -6
  158. package/lib/typescript/module/api/client.d.ts.map +1 -1
  159. package/lib/typescript/module/attachments/file-size.d.ts +15 -0
  160. package/lib/typescript/module/attachments/file-size.d.ts.map +1 -0
  161. package/lib/typescript/module/attachments/local-previews.d.ts +14 -0
  162. package/lib/typescript/module/attachments/local-previews.d.ts.map +1 -0
  163. package/lib/typescript/module/attachments/pickers.d.ts +15 -2
  164. package/lib/typescript/module/attachments/pickers.d.ts.map +1 -1
  165. package/lib/typescript/module/i18n.d.ts +12 -3
  166. package/lib/typescript/module/i18n.d.ts.map +1 -1
  167. package/lib/typescript/module/index.d.ts +5 -0
  168. package/lib/typescript/module/index.d.ts.map +1 -1
  169. package/lib/typescript/module/locales.d.ts.map +1 -1
  170. package/lib/typescript/module/state/user-update-queue.d.ts +62 -0
  171. package/lib/typescript/module/state/user-update-queue.d.ts.map +1 -0
  172. package/lib/typescript/module/state/widget-store.d.ts +44 -1
  173. package/lib/typescript/module/state/widget-store.d.ts.map +1 -1
  174. package/lib/typescript/module/storage.d.ts +2 -0
  175. package/lib/typescript/module/storage.d.ts.map +1 -1
  176. package/lib/typescript/module/types.d.ts +53 -0
  177. package/lib/typescript/module/types.d.ts.map +1 -1
  178. package/lib/typescript/module/ui/WidgetProvider.d.ts.map +1 -1
  179. package/lib/typescript/module/ui/components/AttachmentChips.d.ts +13 -3
  180. package/lib/typescript/module/ui/components/AttachmentChips.d.ts.map +1 -1
  181. package/lib/typescript/module/ui/components/ConversationRow.d.ts +15 -1
  182. package/lib/typescript/module/ui/components/ConversationRow.d.ts.map +1 -1
  183. package/lib/typescript/module/ui/components/ImageViewer.d.ts +26 -6
  184. package/lib/typescript/module/ui/components/ImageViewer.d.ts.map +1 -1
  185. package/lib/typescript/module/ui/components/RatingCard.d.ts.map +1 -1
  186. package/lib/typescript/module/ui/components/ZoomableImage.d.ts +10 -1
  187. package/lib/typescript/module/ui/components/ZoomableImage.d.ts.map +1 -1
  188. package/lib/typescript/module/ui/hooks/use-retained-state.d.ts +11 -0
  189. package/lib/typescript/module/ui/hooks/use-retained-state.d.ts.map +1 -0
  190. package/lib/typescript/module/ui/screens/chat/ChatView.d.ts +4 -4
  191. package/lib/typescript/module/ui/screens/chat/ChatView.d.ts.map +1 -1
  192. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts +144 -0
  193. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
  194. package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts +26 -1
  195. package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts.map +1 -1
  196. package/lib/typescript/module/ui/screens/conversations/ConversationsList.d.ts.map +1 -1
  197. package/lib/typescript/module/ui/screens/conversations/ConversationsList.types.d.ts +2 -0
  198. package/lib/typescript/module/ui/screens/conversations/ConversationsList.types.d.ts.map +1 -1
  199. package/lib/typescript/module/ui/screens/home/HomeView.d.ts +7 -5
  200. package/lib/typescript/module/ui/screens/home/HomeView.d.ts.map +1 -1
  201. package/lib/typescript/module/ui/screens/home/HomeView.styles.d.ts +30 -35
  202. package/lib/typescript/module/ui/screens/home/HomeView.styles.d.ts.map +1 -1
  203. package/lib/typescript/module/ui/screens/home/HomeView.types.d.ts +5 -6
  204. package/lib/typescript/module/ui/screens/home/HomeView.types.d.ts.map +1 -1
  205. package/lib/typescript/module/ui/utils/html.d.ts +5 -0
  206. package/lib/typescript/module/ui/utils/html.d.ts.map +1 -1
  207. package/lib/typescript/module/ui/utils/image-load-queue.d.ts +44 -0
  208. package/lib/typescript/module/ui/utils/image-load-queue.d.ts.map +1 -0
  209. package/lib/typescript/module/ui/utils/inline-attachments.d.ts +29 -0
  210. package/lib/typescript/module/ui/utils/inline-attachments.d.ts.map +1 -0
  211. package/package.json +1 -1
  212. package/src/api/client.ts +149 -38
  213. package/src/attachments/file-size.ts +42 -0
  214. package/src/attachments/local-previews.ts +32 -0
  215. package/src/attachments/pickers.ts +23 -25
  216. package/src/i18n.ts +22 -3
  217. package/src/index.tsx +5 -0
  218. package/src/locales.ts +12 -3
  219. package/src/state/user-update-queue.ts +178 -0
  220. package/src/state/widget-store.ts +346 -51
  221. package/src/storage.ts +2 -0
  222. package/src/types.ts +53 -0
  223. package/src/ui/WidgetProvider.tsx +35 -8
  224. package/src/ui/components/AttachmentChips.tsx +100 -29
  225. package/src/ui/components/ConversationRow.tsx +90 -9
  226. package/src/ui/components/ImageViewer.tsx +242 -24
  227. package/src/ui/components/RatingCard.tsx +5 -2
  228. package/src/ui/components/ZoomableImage.tsx +58 -5
  229. package/src/ui/hooks/use-retained-state.ts +35 -0
  230. package/src/ui/screens/chat/ChatView.styles.ts +139 -1
  231. package/src/ui/screens/chat/ChatView.tsx +735 -198
  232. package/src/ui/screens/chat/ChatView.types.ts +26 -1
  233. package/src/ui/screens/conversations/ConversationsList.tsx +1 -0
  234. package/src/ui/screens/conversations/ConversationsList.types.ts +2 -0
  235. package/src/ui/screens/home/HomeView.styles.ts +36 -45
  236. package/src/ui/screens/home/HomeView.tsx +54 -70
  237. package/src/ui/screens/home/HomeView.types.ts +5 -6
  238. package/src/ui/utils/html.ts +26 -0
  239. package/src/ui/utils/image-load-queue.ts +108 -0
  240. package/src/ui/utils/inline-attachments.ts +71 -0
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.splitInlineAttachments = splitInlineAttachments;
7
+ var _html = require("./html.js");
8
+ /**
9
+ * Agent replies with images between their paragraphs. Workstation marks such
10
+ * images `inline` among the message's attachments and keeps an `<img>` for
11
+ * each in the HTML body, where the teammate put it. Same split as the web
12
+ * Messenger, so both show the text and images in the order they were written.
13
+ */
14
+
15
+ /** Markdown for the bubble to draw, or one attachment. */
16
+
17
+ /**
18
+ * The body and its inline images in order, plus the other attachments
19
+ * (`files`) that show after them. Null when nothing is inline: the bubble then
20
+ * shows the body, followed by every attachment.
21
+ *
22
+ * An `<img>` finds its attachment by the id in its URL. In a body whose
23
+ * images carry no ids, they take the attachments in order instead; in one
24
+ * that does, an image without an id (a logo, an emoji) isn't one of the files
25
+ * and takes nothing. One whose id names no remaining attachment (the same file
26
+ * twice) takes nothing either. Inline attachments with no `<img>` go at the end.
27
+ */
28
+ function splitInlineAttachments(body, attachments) {
29
+ const inline = (attachments ?? []).filter(isInline);
30
+ if (!body || inline.length === 0) return null;
31
+ const remaining = [...inline];
32
+ const parts = [];
33
+ const pushText = html => {
34
+ const text = (0, _html.htmlToMarkdown)(html);
35
+ if (text) parts.push({
36
+ text
37
+ });
38
+ };
39
+ const image = /<img\b[^>]*?\bsrc=(["'])(.*?)\1[^>]*>/gi;
40
+ const images = [];
41
+ for (let match = image.exec(body); match; match = image.exec(body)) {
42
+ images.push({
43
+ start: match.index,
44
+ end: image.lastIndex,
45
+ id: mediaId(match[2] ?? '')
46
+ });
47
+ }
48
+ const byId = images.some(found => found.id !== null);
49
+ let last = 0;
50
+ for (const {
51
+ start,
52
+ end,
53
+ id
54
+ } of images) {
55
+ // Left in the text, which drops it as it always has.
56
+ if (byId && !id) continue;
57
+ pushText(body.slice(last, start));
58
+ last = end;
59
+ const index = id ? remaining.findIndex(attachment => attachment.id === id) : 0;
60
+ if (index < 0) continue;
61
+ const [attachment] = remaining.splice(index, 1);
62
+ if (attachment) parts.push({
63
+ attachment
64
+ });
65
+ }
66
+ pushText(body.slice(last));
67
+ remaining.forEach(attachment => parts.push({
68
+ attachment
69
+ }));
70
+ return {
71
+ parts,
72
+ files: (attachments ?? []).filter(attachment => !isInline(attachment))
73
+ };
74
+ }
75
+
76
+ /**
77
+ * Workstation's media URLs carry the attachment's id, as
78
+ * `/api/widget/media/<id>?…` (what replies carry) or `/api/media/<id>/download`.
79
+ */
80
+ function mediaId(src) {
81
+ return /\/api\/(?:widget\/)?media\/([^/?#"'&]+)/.exec(src)?.[1] ?? null;
82
+ }
83
+
84
+ /** Only Workstation's agent replies set `inline`, so it isn't on `WidgetAttachment`. */
85
+ function isInline(attachment) {
86
+ return attachment.inline === true;
87
+ }
88
+ //# sourceMappingURL=inline-attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_html","require","splitInlineAttachments","body","attachments","inline","filter","isInline","length","remaining","parts","pushText","html","text","htmlToMarkdown","push","image","images","match","exec","start","index","end","lastIndex","id","mediaId","byId","some","found","last","slice","findIndex","attachment","splice","forEach","files","src"],"sourceRoot":"../../../../src","sources":["ui/utils/inline-attachments.ts"],"mappings":"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","ignoreList":[]}
@@ -10,6 +10,7 @@
10
10
  * The token itself lives in `SecureStorage`.
11
11
  */
12
12
 
13
+ import { measureFileSize } from "../attachments/file-size.js";
13
14
  import { SecureStorage, TOKEN_KEY } from "../storage.js";
14
15
  import { isHttpUrl, urlScheme } from "../ui/utils/safe-url.js";
15
16
 
@@ -19,24 +20,90 @@ export function isTerminalErrorCode(code) {
19
20
  return !!code && TERMINAL_CODES.has(code);
20
21
  }
21
22
  export class RepzoWidgetError extends Error {
22
- constructor(message, status, code = 'http') {
23
+ /**
24
+ * Seconds Workstation asked to wait before trying again, on a 429
25
+ * (`Retry-After`). Undefined when it didn't say.
26
+ * @since 1.5.0
27
+ */
28
+
29
+ constructor(message, status, code = 'http', retryAfter) {
23
30
  super(message);
24
31
  this.name = 'RepzoWidgetError';
25
32
  this.status = status;
26
33
  this.code = code;
34
+ if (retryAfter !== undefined) this.retryAfter = retryAfter;
27
35
  }
28
36
 
29
37
  /** Builds the error for a non-2xx `{ message, code }` body. */
30
- static fromResponse(status, body) {
38
+ static fromResponse(status, body, retryAfterHeader) {
31
39
  const payload = body && typeof body === 'object' ? body : {};
32
40
  const message = typeof payload.message === 'string' && payload.message ? payload.message : null;
33
41
  const code = status === 403 && typeof payload.code === 'string' && isTerminalErrorCode(payload.code) ? payload.code : 'http';
34
- return new RepzoWidgetError(message || `HTTP ${status}`, status, code);
42
+ const retryAfter = status === 429 ? parseRetryAfter(retryAfterHeader, payload.retryAfter) : undefined;
43
+ return new RepzoWidgetError(message || `HTTP ${status}`, status, code, retryAfter);
35
44
  }
36
45
  }
37
46
 
47
+ /**
48
+ * Seconds from a `Retry-After` header (seconds or an HTTP date), falling back
49
+ * to the `retryAfter` seconds Workstation also puts in the 429 body.
50
+ */
51
+ function parseRetryAfter(header, bodyValue) {
52
+ const value = header?.trim();
53
+ if (value) {
54
+ if (/^\d+(\.\d+)?$/.test(value)) return Number(value);
55
+ const at = Date.parse(value);
56
+ if (Number.isFinite(at)) return Math.max(0, (at - Date.now()) / 1000);
57
+ }
58
+ if (typeof bodyValue === 'number' && Number.isFinite(bodyValue) && bodyValue >= 0) return bodyValue;
59
+ return undefined;
60
+ }
61
+
38
62
  /** A Send message part asked for on its own, which may share one request with others. */
39
63
 
64
+ /**
65
+ * Sends a local file as the request body straight from disk and resolves the
66
+ * HTTP status. React Native streams a `{ uri }` body natively; `fetch` would
67
+ * stringify it, so this goes through XMLHttpRequest.
68
+ */
69
+ function sendFileFromDisk(url, method, headers, file, signal) {
70
+ return new Promise((resolve, reject) => {
71
+ const xhr = new XMLHttpRequest();
72
+ const cancel = () => xhr.abort();
73
+ const settle = finish => {
74
+ signal?.removeEventListener('abort', cancel);
75
+ finish();
76
+ };
77
+ xhr.onload = () => settle(() => resolve(xhr.status));
78
+ xhr.onerror = () => settle(() => reject(new RepzoWidgetError('Network request failed', 0, 'network')));
79
+ xhr.ontimeout = xhr.onerror;
80
+ xhr.onabort = () => settle(() => reject(new RepzoWidgetError('Upload cancelled', 0, 'network')));
81
+ xhr.open(method, url);
82
+ Object.entries(headers).forEach(([name, value]) => xhr.setRequestHeader(name, value));
83
+ // Android refuses a `{ uri }` body without one.
84
+ if (!Object.keys(headers).some(name => name.toLowerCase() === 'content-type')) {
85
+ xhr.setRequestHeader('Content-Type', file.contentType);
86
+ }
87
+ signal?.addEventListener('abort', cancel);
88
+ xhr.send({
89
+ uri: file.uri
90
+ });
91
+ });
92
+ }
93
+
94
+ /**
95
+ * How long Workstation keeps an upload for a message to name, when its answer
96
+ * has no usable `expiresAt` (deployments without it, or a phone clock that
97
+ * reads it as already past).
98
+ */
99
+ const UPLOAD_LIFETIME_MS = 60 * 60 * 1000;
100
+
101
+ /** A file in storage, waiting for the message that names it. */
102
+
103
+ function uploadExpiry(expiresAt, now) {
104
+ const at = typeof expiresAt === 'string' ? Date.parse(expiresAt) : typeof expiresAt === 'number' ? expiresAt : NaN;
105
+ return at > now ? at : now + UPLOAD_LIFETIME_MS;
106
+ }
40
107
  export class WidgetApiClient {
41
108
  baseUrl = '';
42
109
  channelAccountId = '';
@@ -124,7 +191,7 @@ export class WidgetApiClient {
124
191
  }
125
192
  if (!response.ok) {
126
193
  const body = await response.json().catch(() => null);
127
- const error = RepzoWidgetError.fromResponse(response.status, body);
194
+ const error = RepzoWidgetError.fromResponse(response.status, body, response.headers?.get?.('Retry-After'));
128
195
  // skipReauth calls (init, logout-time) are handled by their caller,
129
196
  // which knows whether the result is still current.
130
197
  if (isTerminalErrorCode(error.code) && !options.skipReauth) this.onTerminalError?.(error);
@@ -278,41 +345,70 @@ export class WidgetApiClient {
278
345
  /**
279
346
  * Puts a local file in storage ahead of the message, which then names it by
280
347
  * the returned upload token. The target is presigned storage, or a path on
281
- * the server where its storage can't presign. The file is read as a native
282
- * blob, so it never becomes a JS string; its size is the blob's, since the
283
- * upload URL is signed for exactly the size asked for.
348
+ * the server where its storage can't presign. The upload URL is signed for
349
+ * exactly the size asked for: a `file://` file whose size `expo-file-system`
350
+ * can read streams from disk, anything else is read as a native blob and
351
+ * measured. `signal` cancels the transfer (the visitor removed the file, or
352
+ * left the conversation). Resolves the token and when it expires.
284
353
  */
285
- async uploadAttachment(file) {
286
- let blob;
287
- try {
288
- blob = await (await fetch(file.uri)).blob();
289
- } catch (error) {
290
- throw new RepzoWidgetError(error instanceof Error ? error.message : 'Could not read the file', 0, 'network');
354
+ async uploadAttachment(file, signal) {
355
+ // A file removed early is never read, nor given a slot in storage.
356
+ const stopIfCancelled = () => {
357
+ if (signal?.aborted) throw new RepzoWidgetError('Upload cancelled', 0, 'network');
358
+ };
359
+ stopIfCancelled();
360
+ // Streaming matters on Android: React Native also copies a blob it reads
361
+ // into a Base64 string for its network inspector, so a file past ~30 MB
362
+ // runs the app out of memory. Only file:// gives an exact Content-Length.
363
+ const streamedSize = urlScheme(file.uri) === 'file:' ? await measureFileSize(file.uri) : null;
364
+ let blob = null;
365
+ if (streamedSize === null) {
366
+ try {
367
+ blob = await (await fetch(file.uri, {
368
+ signal
369
+ })).blob();
370
+ } catch (error) {
371
+ throw new RepzoWidgetError(error instanceof Error ? error.message : 'Could not read the file', 0, 'network');
372
+ }
291
373
  }
374
+ stopIfCancelled();
292
375
  const target = await this.request('/api/widget/uploads', {
293
376
  method: 'POST',
294
377
  body: {
295
378
  fileName: file.name,
296
379
  contentType: file.contentType,
297
- size: blob.size || file.size
380
+ size: streamedSize ?? (blob?.size || file.size)
298
381
  }
299
382
  });
383
+ // Counted from when the token was issued, not from when the file is up.
384
+ const expiresAt = uploadExpiry(target.expiresAt, Date.now());
300
385
  const uploadUrl = this.resolveUrl(target.uploadUrl);
301
386
  if (!uploadUrl) throw new RepzoWidgetError('Invalid upload target', 0, 'http');
302
- let response;
303
- try {
304
- response = await fetch(uploadUrl, {
305
- method: target.method ?? 'PUT',
306
- headers: target.headers ?? {
307
- 'Content-Type': file.contentType
308
- },
309
- body: blob
310
- });
311
- } catch (error) {
312
- throw new RepzoWidgetError(error instanceof Error ? error.message : 'Upload failed', 0, 'network');
387
+ stopIfCancelled();
388
+ const method = target.method ?? 'PUT';
389
+ const headers = target.headers ?? {
390
+ 'Content-Type': file.contentType
391
+ };
392
+ let status;
393
+ if (blob) {
394
+ try {
395
+ status = (await fetch(uploadUrl, {
396
+ method,
397
+ headers,
398
+ body: blob,
399
+ signal
400
+ })).status;
401
+ } catch (error) {
402
+ throw new RepzoWidgetError(error instanceof Error ? error.message : 'Upload failed', 0, 'network');
403
+ }
404
+ } else {
405
+ status = await sendFileFromDisk(uploadUrl, method, headers, file, signal);
313
406
  }
314
- if (!response.ok) throw new RepzoWidgetError('Upload failed', response.status, 'http');
315
- return target.uploadToken;
407
+ if (status < 200 || status >= 300) throw new RepzoWidgetError('Upload failed', status, 'http');
408
+ return {
409
+ uploadToken: target.uploadToken,
410
+ expiresAt
411
+ };
316
412
  }
317
413
  listConversations() {
318
414
  return this.request('/api/widget/conversations');
@@ -1 +1 @@
1
- {"version":3,"names":["SecureStorage","TOKEN_KEY","isHttpUrl","urlScheme","TERMINAL_CODES","Set","isTerminalErrorCode","code","has","RepzoWidgetError","Error","constructor","message","status","name","fromResponse","body","payload","WidgetApiClient","baseUrl","channelAccountId","token","tokenLoaded","reauthorize","onTerminalError","sendPartBatch","configure","replace","getBaseUrl","getChannelAccountId","getToken","getItem","setToken","setItem","clearToken","removeItem","resolveUrl","url","trimmed","trim","resolved","startsWith","request","path","options","sentToken","send","headers","authToken","undefined","Authorization","fetch","method","JSON","stringify","error","response","skipReauth","refreshed","ok","json","catch","getConfig","platform","query","encodeURIComponent","getOutboundMessage","askSendPart","getPost","part","own","Promise","resolve","reject","setTimeout","flushSendParts","push","asks","parts","Array","from","map","ask","answer","length","join","value","then","sendPostInteraction","campaignId","kind","init","params","visitorToken","resumeToken","user","email","phone","userId","user_id","userHash","user_hash","account","id","signedUpAt","signed_up_at","Date","toISOString","trackingVisitorId","sdkVersion","logout","sendMessage","data","uploadAttachment","file","blob","uri","target","fileName","contentType","size","uploadUrl","uploadToken","listConversations","listMessages","conversationId","cursor","markConversationRead","rateConversation","ratingId","identify","sendTyping","isTyping","trackEvent","registerPushToken","reportPushOpened","deliveryId","removePushToken","auth"],"sourceRoot":"../../../src","sources":["api/client.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["measureFileSize","SecureStorage","TOKEN_KEY","isHttpUrl","urlScheme","TERMINAL_CODES","Set","isTerminalErrorCode","code","has","RepzoWidgetError","Error","constructor","message","status","retryAfter","name","undefined","fromResponse","body","retryAfterHeader","payload","parseRetryAfter","header","bodyValue","value","trim","test","Number","at","Date","parse","isFinite","Math","max","now","sendFileFromDisk","url","method","headers","file","signal","Promise","resolve","reject","xhr","XMLHttpRequest","cancel","abort","settle","finish","removeEventListener","onload","onerror","ontimeout","onabort","open","Object","entries","forEach","setRequestHeader","keys","some","toLowerCase","contentType","addEventListener","send","uri","UPLOAD_LIFETIME_MS","uploadExpiry","expiresAt","NaN","WidgetApiClient","baseUrl","channelAccountId","token","tokenLoaded","reauthorize","onTerminalError","sendPartBatch","configure","replace","getBaseUrl","getChannelAccountId","getToken","getItem","setToken","setItem","clearToken","removeItem","resolveUrl","trimmed","resolved","startsWith","request","path","options","sentToken","authToken","Authorization","fetch","JSON","stringify","error","response","skipReauth","refreshed","ok","json","catch","get","getConfig","platform","query","encodeURIComponent","getOutboundMessage","askSendPart","getPost","part","own","setTimeout","flushSendParts","push","asks","parts","Array","from","map","ask","answer","length","join","then","sendPostInteraction","campaignId","kind","init","params","visitorToken","resumeToken","user","email","phone","userId","user_id","userHash","user_hash","account","id","signedUpAt","signed_up_at","toISOString","trackingVisitorId","sdkVersion","logout","sendMessage","data","uploadAttachment","stopIfCancelled","aborted","streamedSize","blob","target","fileName","size","uploadUrl","uploadToken","listConversations","listMessages","conversationId","cursor","markConversationRead","rateConversation","ratingId","identify","sendTyping","isTyping","trackEvent","registerPushToken","reportPushOpened","deliveryId","removePushToken","auth"],"sourceRoot":"../../../src","sources":["api/client.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Local file sizes from the host's `expo-file-system` (optional, like the
5
+ * pickers): read from the file's metadata, never from its contents. Shared by
6
+ * the pickers and the upload client, so the client doesn't pull in pickers.
7
+ *
8
+ * No `react-native` import on purpose: it stays testable in plain Node.
9
+ */
10
+
11
+ let fileSystem = null;
12
+ try {
13
+ fileSystem = require('expo-file-system') ?? null;
14
+ } catch {
15
+ fileSystem = null;
16
+ }
17
+
18
+ /** A positive, finite byte count, or null. */
19
+ export function validSize(size) {
20
+ return typeof size === 'number' && Number.isFinite(size) && size > 0 ? size : null;
21
+ }
22
+
23
+ /**
24
+ * A local file's exact size in bytes, from its metadata without reading it.
25
+ * Null without `expo-file-system`, or when it can't tell.
26
+ */
27
+ export async function measureFileSize(uri) {
28
+ if (typeof fileSystem?.File === 'function') {
29
+ try {
30
+ const size = validSize(new fileSystem.File(uri).size);
31
+ if (size !== null) return size;
32
+ } catch {
33
+ // Fall through to the next reader.
34
+ }
35
+ }
36
+ if (typeof fileSystem?.getInfoAsync === 'function') {
37
+ try {
38
+ return validSize((await fileSystem.getInfoAsync(uri, {
39
+ size: true
40
+ }))?.size);
41
+ } catch {
42
+ return null;
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ //# sourceMappingURL=file-size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["fileSystem","require","validSize","size","Number","isFinite","measureFileSize","uri","File","getInfoAsync"],"sourceRoot":"../../../src","sources":["attachments/file-size.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAIA,UAAe,GAAG,IAAI;AAC1B,IAAI;EACFA,UAAU,GAAGC,OAAO,CAAC,kBAAkB,CAAC,IAAI,IAAI;AAClD,CAAC,CAAC,MAAM;EACND,UAAU,GAAG,IAAI;AACnB;;AAEA;AACA,OAAO,SAASE,SAASA,CAACC,IAAa,EAAiB;EACtD,OAAO,OAAOA,IAAI,KAAK,QAAQ,IAAIC,MAAM,CAACC,QAAQ,CAACF,IAAI,CAAC,IAAIA,IAAI,GAAG,CAAC,GAAGA,IAAI,GAAG,IAAI;AACpF;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeG,eAAeA,CAACC,GAAW,EAA0B;EACzE,IAAI,OAAOP,UAAU,EAAEQ,IAAI,KAAK,UAAU,EAAE;IAC1C,IAAI;MACF,MAAML,IAAI,GAAGD,SAAS,CAAC,IAAIF,UAAU,CAACQ,IAAI,CAACD,GAAG,CAAC,CAACJ,IAAI,CAAC;MACrD,IAAIA,IAAI,KAAK,IAAI,EAAE,OAAOA,IAAI;IAChC,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;EACA,IAAI,OAAOH,UAAU,EAAES,YAAY,KAAK,UAAU,EAAE;IAClD,IAAI;MACF,OAAOP,SAAS,CAAC,CAAC,MAAMF,UAAU,CAACS,YAAY,CAACF,GAAG,EAAE;QAAEJ,IAAI,EAAE;MAAK,CAAC,CAAC,GAAGA,IAAI,CAAC;IAC9E,CAAC,CAAC,MAAM;MACN,OAAO,IAAI;IACb;EACF;EACA,OAAO,IAAI;AACb","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The phone's copy of each file the visitor sent, by the URL of the stored
5
+ * copy that replaced it in the thread. Right after a send the stored copy
6
+ * may not load yet (Workstation can still be storing it), so a photo keeps
7
+ * showing from the phone instead of turning into a file row. Kept in memory
8
+ * only: a later session shows the stored copy.
9
+ */
10
+
11
+ const MAX_PREVIEWS = 50;
12
+ const previews = new Map();
13
+ export function rememberLocalPreview(storedUrl, localUrl) {
14
+ if (!storedUrl || !localUrl) return;
15
+ previews.delete(storedUrl);
16
+ previews.set(storedUrl, localUrl);
17
+ // Oldest first: a Map iterates in insertion order.
18
+ if (previews.size > MAX_PREVIEWS) previews.delete(previews.keys().next().value);
19
+ }
20
+ export function localPreviewFor(storedUrl) {
21
+ return storedUrl && previews.get(storedUrl) || null;
22
+ }
23
+
24
+ /** One that failed to load (the OS cleared the picker's cache): every view moves to the stored copy. */
25
+ export function forgetLocalPreview(storedUrl) {
26
+ previews.delete(storedUrl);
27
+ }
28
+
29
+ /** Signing out forgets them: the next visitor on the phone doesn't inherit the paths. */
30
+ export function clearLocalPreviews() {
31
+ previews.clear();
32
+ }
33
+ //# sourceMappingURL=local-previews.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MAX_PREVIEWS","previews","Map","rememberLocalPreview","storedUrl","localUrl","delete","set","size","keys","next","value","localPreviewFor","get","forgetLocalPreview","clearLocalPreviews","clear"],"sourceRoot":"../../../src","sources":["attachments/local-previews.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,YAAY,GAAG,EAAE;AACvB,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAAiB,CAAC;AAE1C,OAAO,SAASC,oBAAoBA,CAACC,SAAiB,EAAEC,QAAgB,EAAQ;EAC9E,IAAI,CAACD,SAAS,IAAI,CAACC,QAAQ,EAAE;EAC7BJ,QAAQ,CAACK,MAAM,CAACF,SAAS,CAAC;EAC1BH,QAAQ,CAACM,GAAG,CAACH,SAAS,EAAEC,QAAQ,CAAC;EACjC;EACA,IAAIJ,QAAQ,CAACO,IAAI,GAAGR,YAAY,EAAEC,QAAQ,CAACK,MAAM,CAACL,QAAQ,CAACQ,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,KAAe,CAAC;AAC3F;AAEA,OAAO,SAASC,eAAeA,CAACR,SAAiB,EAAiB;EAChE,OAAQA,SAAS,IAAIH,QAAQ,CAACY,GAAG,CAACT,SAAS,CAAC,IAAK,IAAI;AACvD;;AAEA;AACA,OAAO,SAASU,kBAAkBA,CAACV,SAAiB,EAAQ;EAC1DH,QAAQ,CAACK,MAAM,CAACF,SAAS,CAAC;AAC5B;;AAEA;AACA,OAAO,SAASW,kBAAkBA,CAAA,EAAS;EACzCd,QAAQ,CAACe,KAAK,CAAC,CAAC;AAClB","ignoreList":[]}
@@ -4,7 +4,7 @@
4
4
  * Visitor attachments: picking photos/files for `POST /api/widget/messages`.
5
5
  *
6
6
  * A server that takes uploads names its cap (`maxAttachmentBytes`): a picked
7
- * file then stays a local URI and is uploaded when the message is sent. An
7
+ * file then stays a local URI, which the composer uploads right away. An
8
8
  * older server only takes files inline, as base64 data URLs within the
9
9
  * 1.5 MB / 6 MB caps below.
10
10
  *
@@ -25,6 +25,8 @@
25
25
  * testable in plain Node.
26
26
  */
27
27
 
28
+ import { measureFileSize, validSize } from "./file-size.js";
29
+
28
30
  /** The server keeps the first five and silently drops the rest. */
29
31
  export const MAX_ATTACHMENTS = 5;
30
32
  /** Per inline file, decoded. The server silently drops anything larger. */
@@ -86,6 +88,11 @@ let hostOptions = null;
86
88
  export function setAttachmentOptions(options) {
87
89
  hostOptions = options;
88
90
  }
91
+
92
+ /** Whether a picked file starts uploading before Send (`attachments.uploadOnPick`). */
93
+ export function uploadsOnPick() {
94
+ return hostOptions?.uploadOnPick !== false;
95
+ }
89
96
  const ALL_SOURCES = ['photo', 'camera', 'file'];
90
97
 
91
98
  /**
@@ -323,7 +330,7 @@ async function toDraft(file) {
323
330
  };
324
331
  }
325
332
 
326
- /** A file that's uploaded when the message is sent: only its size is read here. */
333
+ /** A file that's uploaded on its own, ahead of the message: only its size is read here. */
327
334
  async function toUploadDraft(file, uploadLimit) {
328
335
  const uri = file.uri;
329
336
  const size = validSize(file.size) ?? (await readFileSize(uri));
@@ -342,25 +349,9 @@ async function toUploadDraft(file, uploadLimit) {
342
349
 
343
350
  /** A local file's size in bytes, or 0 when nothing can tell. */
344
351
  async function readFileSize(uri) {
345
- if (typeof fileSystem?.File === 'function') {
346
- try {
347
- const size = validSize(new fileSystem.File(uri).size);
348
- if (size !== null) return size;
349
- } catch {
350
- // Fall through to the next reader.
351
- }
352
- }
353
- if (typeof fileSystem?.getInfoAsync === 'function') {
354
- try {
355
- const size = validSize((await fileSystem.getInfoAsync(uri, {
356
- size: true
357
- }))?.size);
358
- if (size !== null) return size;
359
- } catch {
360
- // Fall through to fetch.
361
- }
362
- }
363
- // A native blob: its size is known without reading it into JS.
352
+ const size = await measureFileSize(uri);
353
+ if (size !== null) return size;
354
+ // Last resort: the native blob reads the whole file (on Android, into memory).
364
355
  const blob = await (await fetch(uri)).blob();
365
356
  return validSize(blob.size) ?? 0;
366
357
  }
@@ -486,9 +477,6 @@ export function formatBytes(bytes) {
486
477
  export function isImageAttachment(contentType) {
487
478
  return !!contentType && contentType.toLowerCase().startsWith('image/');
488
479
  }
489
- function validSize(size) {
490
- return typeof size === 'number' && Number.isFinite(size) && size > 0 ? size : null;
491
- }
492
480
  function fileNameFromUri(uri) {
493
481
  if (!uri) return null;
494
482
  const last = uri.split(/[?#]/)[0]?.split('/').pop();
@@ -522,7 +510,9 @@ const CONTENT_TYPES = {
522
510
  mp4: 'video/mp4',
523
511
  mov: 'video/quicktime'
524
512
  };
525
- function guessContentType(nameOrUri) {
513
+
514
+ /** The type a file name's extension implies, or null for one this table doesn't know. */
515
+ export function guessContentType(nameOrUri) {
526
516
  const extension = /\.([a-z0-9]+)$/i.exec(nameOrUri?.split(/[?#]/)[0] ?? '')?.[1];
527
517
  return extension ? CONTENT_TYPES[extension.toLowerCase()] ?? null : null;
528
518
  }