@ethora/chat-component-rn 26.6.10 → 26.6.12

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 (66) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/lib/commonjs/components/MainComponents/MediaMessage.js +8 -2
  3. package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
  4. package/lib/commonjs/components/MessageBubble/InteractionsOverlay.js +1 -1
  5. package/lib/commonjs/components/MessageBubble/InteractionsOverlay.js.map +1 -1
  6. package/lib/commonjs/components/MessageBubble/Message.js +1 -1
  7. package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
  8. package/lib/commonjs/components/MessageBubble/MessageInteractions.js +1 -1
  9. package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
  10. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +7 -4
  11. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  12. package/lib/commonjs/components/Modals/FilePreviewModal/GViewWebView.js +1 -1
  13. package/lib/commonjs/components/Modals/FilePreviewModal/GViewWebView.js.map +1 -1
  14. package/lib/commonjs/components/VideoCalls/VideoCallSession.js +6 -3
  15. package/lib/commonjs/components/VideoCalls/VideoCallSession.js.map +1 -1
  16. package/lib/commonjs/components/styled/MediaFilePreview.js +1 -1
  17. package/lib/commonjs/components/styled/MediaFilePreview.js.map +1 -1
  18. package/lib/commonjs/components/styled/VideoMessage.js +111 -61
  19. package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
  20. package/lib/commonjs/hooks/useSendMessage.js +2 -2
  21. package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
  22. package/lib/commonjs/networking/api-requests/auth.api.js +81 -52
  23. package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
  24. package/lib/module/components/MainComponents/MediaMessage.js +8 -2
  25. package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
  26. package/lib/module/components/MessageBubble/InteractionsOverlay.js +1 -1
  27. package/lib/module/components/MessageBubble/InteractionsOverlay.js.map +1 -1
  28. package/lib/module/components/MessageBubble/Message.js +1 -1
  29. package/lib/module/components/MessageBubble/Message.js.map +1 -1
  30. package/lib/module/components/MessageBubble/MessageInteractions.js +1 -1
  31. package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
  32. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +7 -4
  33. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  34. package/lib/module/components/Modals/FilePreviewModal/GViewWebView.js +1 -1
  35. package/lib/module/components/Modals/FilePreviewModal/GViewWebView.js.map +1 -1
  36. package/lib/module/components/VideoCalls/VideoCallSession.js +6 -3
  37. package/lib/module/components/VideoCalls/VideoCallSession.js.map +1 -1
  38. package/lib/module/components/styled/MediaFilePreview.js +1 -1
  39. package/lib/module/components/styled/MediaFilePreview.js.map +1 -1
  40. package/lib/module/components/styled/VideoMessage.js +112 -62
  41. package/lib/module/components/styled/VideoMessage.js.map +1 -1
  42. package/lib/module/hooks/useSendMessage.js +3 -3
  43. package/lib/module/hooks/useSendMessage.js.map +1 -1
  44. package/lib/module/networking/api-requests/auth.api.js +80 -51
  45. package/lib/module/networking/api-requests/auth.api.js.map +1 -1
  46. package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
  47. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
  48. package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts.map +1 -1
  49. package/lib/typescript/components/styled/VideoMessage.d.ts +2 -0
  50. package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
  51. package/lib/typescript/hooks/useCustomTypingIndicator.d.ts +16 -4
  52. package/lib/typescript/hooks/useCustomTypingIndicator.d.ts.map +1 -1
  53. package/lib/typescript/networking/api-requests/auth.api.d.ts +27 -1
  54. package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
  55. package/package.json +29 -28
  56. package/src/components/MainComponents/MediaMessage.tsx +6 -1
  57. package/src/components/MessageBubble/InteractionsOverlay.tsx +1 -1
  58. package/src/components/MessageBubble/Message.tsx +1 -1
  59. package/src/components/MessageBubble/MessageInteractions.tsx +1 -1
  60. package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +6 -3
  61. package/src/components/Modals/FilePreviewModal/GViewWebView.tsx +1 -1
  62. package/src/components/VideoCalls/VideoCallSession.tsx +8 -3
  63. package/src/components/styled/MediaFilePreview.tsx +1 -1
  64. package/src/components/styled/VideoMessage.tsx +115 -54
  65. package/src/hooks/useSendMessage.tsx +3 -3
  66. package/src/networking/api-requests/auth.api.ts +79 -44
@@ -121,69 +121,98 @@ export function uploadFile(formData) {
121
121
  }
122
122
  });
123
123
  }
124
- export async function uploadFileViaFetch(formData) {
124
+ const UPLOAD_PATH = '/files/';
125
+
126
+ /**
127
+ * Multipart upload of a picked file, sent over `XMLHttpRequest`.
128
+ *
129
+ * The transport matters here, and both obvious alternatives are wrong:
130
+ *
131
+ * - `fetch`. Expo SDK 54 shipped a WinterCG-compliant fetch and SDK 57
132
+ * installs it as the GLOBAL fetch. It accepts only `Blob` / `File` /
133
+ * string form parts, so React Native's own `{ uri, type, name }` part
134
+ * — which is exactly what an image/document picker hands us — is
135
+ * rejected with "Unsupported FormDataPart implementation", surfacing
136
+ * to the caller as ERR_NETWORK. A host can set
137
+ * `EXPO_PUBLIC_USE_RN_FETCH=1`, but that opts their whole app out of
138
+ * Expo's fetch just to satisfy this SDK; not a cost we get to impose
139
+ * on a consumer.
140
+ * - axios. It forces its own `Content-Type: multipart/form-data`
141
+ * WITHOUT a boundary, so the server mis-parses one file as many and
142
+ * answers HTTP 413 TOO_MANY_FILES (bug #10 — this is why the upload
143
+ * was moved off axios in the first place).
144
+ *
145
+ * `XMLHttpRequest` avoids both. Expo replaces `fetch`, not `XHR`, so the
146
+ * request still goes through React Native's native networking module,
147
+ * which understands the `{ uri, type, name }` part, streams the file
148
+ * straight from disk (a 50MB video never lands in JS memory) and writes
149
+ * its own `Content-Type` with a valid boundary — which is precisely why
150
+ * we must NOT set that header ourselves below.
151
+ */
152
+ export function uploadFileMultipart(formData) {
125
153
  const token = store.getState().chatSettingStore?.user?.token ?? '';
126
154
  const baseUrl = getCurrentBaseURL();
127
- const url = `${baseUrl.replace(/\/$/, '')}/files/`;
128
- pushLog('http', `→ POST ${url} (fetch)`, {
155
+ const url = `${baseUrl.replace(/\/$/, '')}${UPLOAD_PATH}`;
156
+ pushLog('http', `→ POST ${url} (xhr)`, {
129
157
  headers: {
130
158
  Authorization: token ? token.slice(0, 16) + '…' : '[empty]',
131
159
  Accept: '*/*'
132
160
  }
133
161
  });
134
- let res;
135
- try {
136
- res = await fetch(url, {
137
- method: 'POST',
138
- headers: {
139
- Authorization: token,
140
- Accept: '*/*'
141
- },
142
- body: formData
143
- });
144
- } catch (e) {
145
- pushLog('http', `← ERR fetch /files/`, {
146
- name: e?.name,
147
- message: e?.message,
148
- stack: e?.stack
149
- });
150
- const err = new Error(e?.message || 'Network request failed');
151
- err.code = 'ERR_NETWORK';
152
- err.cause = e;
153
- err.config = {
154
- url: '/files/'
162
+ return new Promise((resolve, reject) => {
163
+ const xhr = new XMLHttpRequest();
164
+ const failNetwork = reason => {
165
+ pushLog('http', `← ERR xhr ${UPLOAD_PATH}`, {
166
+ reason
167
+ });
168
+ const err = new Error(reason);
169
+ err.code = 'ERR_NETWORK';
170
+ err.config = {
171
+ url: UPLOAD_PATH
172
+ };
173
+ reject(err);
155
174
  };
156
- throw err;
157
- }
158
- if (!res.ok) {
159
- let body = null;
160
- try {
161
- body = await res.json();
162
- } catch {
175
+ xhr.onload = () => {
176
+ const status = xhr.status;
177
+ let body = null;
163
178
  try {
164
- body = await res.text();
179
+ body = JSON.parse(xhr.responseText);
165
180
  } catch {
166
- body = null;
181
+ body = xhr.responseText || null;
167
182
  }
168
- }
169
- pushLog('http', `← ${res.status} POST /files/ (fetch)`, body);
170
- const err = new Error(`Upload failed: ${res.status}`);
171
- err.response = {
172
- status: res.status,
173
- statusText: res.statusText,
174
- data: body
175
- };
176
- err.config = {
177
- url: '/files/'
183
+ if (status < 200 || status >= 300) {
184
+ pushLog('http', `← ${status} POST ${UPLOAD_PATH} (xhr)`, body);
185
+ const err = new Error(`Upload failed: ${status}`);
186
+ // Shaped like an axios error so callers' `err.response.status`
187
+ // checks keep working — notably useSendMessage's retry with the
188
+ // singular "file" field on 500.
189
+ err.response = {
190
+ status,
191
+ statusText: xhr.statusText,
192
+ data: body
193
+ };
194
+ err.config = {
195
+ url: UPLOAD_PATH
196
+ };
197
+ reject(err);
198
+ return;
199
+ }
200
+ pushLog('http', `← ${status} POST ${UPLOAD_PATH} (xhr)`, {
201
+ resultsCount: Array.isArray(body?.results) ? body.results.length : 'n/a'
202
+ });
203
+ resolve({
204
+ data: body
205
+ });
178
206
  };
179
- throw err;
180
- }
181
- const data = await res.json();
182
- pushLog('http', `← ${res.status} POST /files/ (fetch)`, {
183
- resultsCount: Array.isArray(data?.results) ? data.results.length : 'n/a'
207
+ xhr.onerror = () => failNetwork('Network request failed');
208
+ xhr.ontimeout = () => failNetwork('Upload timed out');
209
+ xhr.onabort = () => failNetwork('Upload aborted');
210
+ xhr.open('POST', url);
211
+ xhr.setRequestHeader('Authorization', token);
212
+ xhr.setRequestHeader('Accept', '*/*');
213
+ // Deliberately no Content-Type — see the note above: RN fills it in
214
+ // along with the multipart boundary it generated.
215
+ xhr.send(formData);
184
216
  });
185
- return {
186
- data
187
- };
188
217
  }
189
218
  //# sourceMappingURL=auth.api.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["http","getCurrentAppToken","getCurrentBaseURL","store","pushLog","loginEmail","email","password","res","post","headers","Authorization","console","log","data","loginSocial","idToken","accessToken","loginType","authToken","registerSocial","signUpPlan","signupPlan","checkEmailExist","get","loginViaJwt","clientToken","response","hasUser","user","hasToken","token","hasRefreshToken","refreshToken","userData","_id","firstName","lastName","xmppUsername","uploadFile","formData","getState","chatSettingStore","Accept","transformRequest","delete","uploadFileViaFetch","baseUrl","url","replace","slice","fetch","method","body","e","name","message","stack","err","Error","code","cause","config","ok","json","text","status","statusText","resultsCount","Array","isArray","results","length"],"sourceRoot":"../../../../src","sources":["networking/api-requests/auth.api.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["http","getCurrentAppToken","getCurrentBaseURL","store","pushLog","loginEmail","email","password","res","post","headers","Authorization","console","log","data","loginSocial","idToken","accessToken","loginType","authToken","registerSocial","signUpPlan","signupPlan","checkEmailExist","get","loginViaJwt","clientToken","response","hasUser","user","hasToken","token","hasRefreshToken","refreshToken","userData","_id","firstName","lastName","xmppUsername","uploadFile","formData","getState","chatSettingStore","Accept","transformRequest","delete","UPLOAD_PATH","uploadFileMultipart","baseUrl","url","replace","slice","Promise","resolve","reject","xhr","XMLHttpRequest","failNetwork","reason","err","Error","code","config","onload","status","body","JSON","parse","responseText","statusText","resultsCount","Array","isArray","results","length","onerror","ontimeout","onabort","open","setRequestHeader","send"],"sourceRoot":"../../../../src","sources":["networking/api-requests/auth.api.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"MediaMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/MainComponents/MediaMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAiB7C,UAAU,iBAAiB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;AAgHD,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgH7C,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"MediaMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/MainComponents/MediaMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAiB7C,UAAU,iBAAiB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;AAgHD,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAqH7C,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FilePreviewModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/Modals/FilePreviewModal/FilePreviewModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAyG3D,UAAU,qBAAqB;IAC7B,gBAAgB,EAAE,GAAG,CAAC;CACvB;AAED,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA2TrD,CAAC;AAkBF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"FilePreviewModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/Modals/FilePreviewModal/FilePreviewModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AA4G3D,UAAU,qBAAqB;IAC7B,gBAAgB,EAAE,GAAG,CAAC;CACvB;AAED,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA2TrD,CAAC;AAkBF,eAAe,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"VideoCallSession.d.ts","sourceRoot":"","sources":["../../../../src/components/VideoCalls/VideoCallSession.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,EAAE,EAMH,MAAM,OAAO,CAAC;AASf,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA6CnD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA+btD,CAAC;AAoIF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"VideoCallSession.d.ts","sourceRoot":"","sources":["../../../../src/components/VideoCalls/VideoCallSession.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,EAAE,EAMH,MAAM,OAAO,CAAC;AASf,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA6CnD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAoctD,CAAC;AAoIF,eAAe,gBAAgB,CAAC"}
@@ -3,6 +3,8 @@ interface CustomMessageVideoProps {
3
3
  fileName: string;
4
4
  fileURL: string;
5
5
  mimetype: string;
6
+ /** The backend-generated poster frame (message.locationPreview). */
7
+ previewURL?: string;
6
8
  }
7
9
  declare const CustomMessageVideo: React.FC<CustomMessageVideoProps>;
8
10
  export default CustomMessageVideo;
@@ -1 +1 @@
1
- {"version":3,"file":"VideoMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/styled/VideoMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAgBnD,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAgEzD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"VideoMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/styled/VideoMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAenD,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAqGD,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAyBzD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -67,7 +67,10 @@ export declare const useCustomTypingIndicator: (roomJID: string) => {
67
67
  cursor?: import("react-native").CursorValue | undefined;
68
68
  filter?: ReadonlyArray<import("react-native").FilterFunction> | string | undefined;
69
69
  mixBlendMode?: import("react-native").BlendMode | undefined;
70
- experimental_backgroundImage?: ReadonlyArray<import("react-native").GradientValue> | string | undefined;
70
+ experimental_backgroundImage?: ReadonlyArray<import("react-native").BackgroundImageValue> | string | undefined;
71
+ experimental_backgroundSize?: ReadonlyArray<import("react-native").BackgroundSizeValue> | string | undefined;
72
+ experimental_backgroundPosition?: ReadonlyArray<import("react-native").BackgroundPositionValue> | string | undefined;
73
+ experimental_backgroundRepeat?: ReadonlyArray<import("react-native").BackgroundRepeatValue> | string | undefined;
71
74
  alignContent?: "flex-start" | "flex-end" | "center" | "stretch" | "space-between" | "space-around" | "space-evenly" | undefined;
72
75
  alignItems?: import("react-native").FlexAlignType | undefined;
73
76
  alignSelf?: "auto" | import("react-native").FlexAlignType | undefined;
@@ -202,7 +205,10 @@ export declare const useCustomTypingIndicator: (roomJID: string) => {
202
205
  boxShadow?: ReadonlyArray<import("react-native").BoxShadowValue> | string | undefined;
203
206
  filter?: ReadonlyArray<import("react-native").FilterFunction> | string | undefined;
204
207
  mixBlendMode?: import("react-native").BlendMode | undefined;
205
- experimental_backgroundImage?: ReadonlyArray<import("react-native").GradientValue> | string | undefined;
208
+ experimental_backgroundImage?: ReadonlyArray<import("react-native").BackgroundImageValue> | string | undefined;
209
+ experimental_backgroundSize?: ReadonlyArray<import("react-native").BackgroundSizeValue> | string | undefined;
210
+ experimental_backgroundPosition?: ReadonlyArray<import("react-native").BackgroundPositionValue> | string | undefined;
211
+ experimental_backgroundRepeat?: ReadonlyArray<import("react-native").BackgroundRepeatValue> | string | undefined;
206
212
  alignContent?: "flex-start" | "flex-end" | "center" | "stretch" | "space-between" | "space-around" | "space-evenly" | undefined;
207
213
  alignItems?: import("react-native").FlexAlignType | undefined;
208
214
  alignSelf?: "auto" | import("react-native").FlexAlignType | undefined;
@@ -335,7 +341,10 @@ export declare const useCustomTypingIndicator: (roomJID: string) => {
335
341
  cursor?: import("react-native").CursorValue | undefined;
336
342
  filter?: ReadonlyArray<import("react-native").FilterFunction> | string | undefined;
337
343
  mixBlendMode?: import("react-native").BlendMode | undefined;
338
- experimental_backgroundImage?: ReadonlyArray<import("react-native").GradientValue> | string | undefined;
344
+ experimental_backgroundImage?: ReadonlyArray<import("react-native").BackgroundImageValue> | string | undefined;
345
+ experimental_backgroundSize?: ReadonlyArray<import("react-native").BackgroundSizeValue> | string | undefined;
346
+ experimental_backgroundPosition?: ReadonlyArray<import("react-native").BackgroundPositionValue> | string | undefined;
347
+ experimental_backgroundRepeat?: ReadonlyArray<import("react-native").BackgroundRepeatValue> | string | undefined;
339
348
  alignContent?: "flex-start" | "flex-end" | "center" | "stretch" | "space-between" | "space-around" | "space-evenly" | undefined;
340
349
  alignItems?: import("react-native").FlexAlignType | undefined;
341
350
  alignSelf?: "auto" | import("react-native").FlexAlignType | undefined;
@@ -465,7 +474,10 @@ export declare const useCustomTypingIndicator: (roomJID: string) => {
465
474
  boxShadow?: ReadonlyArray<import("react-native").BoxShadowValue> | string | undefined;
466
475
  filter?: ReadonlyArray<import("react-native").FilterFunction> | string | undefined;
467
476
  mixBlendMode?: import("react-native").BlendMode | undefined;
468
- experimental_backgroundImage?: ReadonlyArray<import("react-native").GradientValue> | string | undefined;
477
+ experimental_backgroundImage?: ReadonlyArray<import("react-native").BackgroundImageValue> | string | undefined;
478
+ experimental_backgroundSize?: ReadonlyArray<import("react-native").BackgroundSizeValue> | string | undefined;
479
+ experimental_backgroundPosition?: ReadonlyArray<import("react-native").BackgroundPositionValue> | string | undefined;
480
+ experimental_backgroundRepeat?: ReadonlyArray<import("react-native").BackgroundRepeatValue> | string | undefined;
469
481
  alignContent?: "flex-start" | "flex-end" | "center" | "stretch" | "space-between" | "space-around" | "space-evenly" | undefined;
470
482
  alignItems?: import("react-native").FlexAlignType | undefined;
471
483
  alignSelf?: "auto" | import("react-native").FlexAlignType | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"useCustomTypingIndicator.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCustomTypingIndicator.tsx"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM;;;;;;;;;;;;;;;;iCAYtC,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;;kCAkC/C,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEpB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;4BAWjB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAqCA,MAAM,EAAE;8BAMd,MAAM,EAAE;+BAIP,MAAM,EAAE;;CAIlC,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"useCustomTypingIndicator.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCustomTypingIndicator.tsx"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM;;;;;;;;;;;;;;;;iCAYtC,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;;kCAkC/C,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEpB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;4BAWjB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAqCA,MAAM,EAAE;8BAMd,MAAM,EAAE;+BAIP,MAAM,EAAE;;CAIlC,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
@@ -9,7 +9,33 @@ export declare function registerSocial(idToken: string, accessToken: string, aut
9
9
  export declare function checkEmailExist(email: string): Promise<import("axios").AxiosResponse<any, any, {}>>;
10
10
  export declare function loginViaJwt(clientToken: string): Promise<User>;
11
11
  export declare function uploadFile(formData: FormData): Promise<import("axios").AxiosResponse<any, any, {}>>;
12
- export declare function uploadFileViaFetch(formData: FormData): Promise<{
12
+ /**
13
+ * Multipart upload of a picked file, sent over `XMLHttpRequest`.
14
+ *
15
+ * The transport matters here, and both obvious alternatives are wrong:
16
+ *
17
+ * - `fetch`. Expo SDK 54 shipped a WinterCG-compliant fetch and SDK 57
18
+ * installs it as the GLOBAL fetch. It accepts only `Blob` / `File` /
19
+ * string form parts, so React Native's own `{ uri, type, name }` part
20
+ * — which is exactly what an image/document picker hands us — is
21
+ * rejected with "Unsupported FormDataPart implementation", surfacing
22
+ * to the caller as ERR_NETWORK. A host can set
23
+ * `EXPO_PUBLIC_USE_RN_FETCH=1`, but that opts their whole app out of
24
+ * Expo's fetch just to satisfy this SDK; not a cost we get to impose
25
+ * on a consumer.
26
+ * - axios. It forces its own `Content-Type: multipart/form-data`
27
+ * WITHOUT a boundary, so the server mis-parses one file as many and
28
+ * answers HTTP 413 TOO_MANY_FILES (bug #10 — this is why the upload
29
+ * was moved off axios in the first place).
30
+ *
31
+ * `XMLHttpRequest` avoids both. Expo replaces `fetch`, not `XHR`, so the
32
+ * request still goes through React Native's native networking module,
33
+ * which understands the `{ uri, type, name }` part, streams the file
34
+ * straight from disk (a 50MB video never lands in JS memory) and writes
35
+ * its own `Content-Type` with a valid boundary — which is precisely why
36
+ * we must NOT set that header ourselves below.
37
+ */
38
+ export declare function uploadFileMultipart(formData: FormData): Promise<{
13
39
  data: any;
14
40
  }>;
15
41
  //# sourceMappingURL=auth.api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.api.d.ts","sourceRoot":"","sources":["../../../../src/networking/api-requests/auth.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAezC,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;UAEtD,IAAI;kBACI,MAAM;WACb,MAAM;aAahB;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAoB,wDAYhC;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,wDAapB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,wDAM5C;AAED,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpE;AAuBD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,wDAa5C;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,CAAC,CAmDnF"}
1
+ {"version":3,"file":"auth.api.d.ts","sourceRoot":"","sources":["../../../../src/networking/api-requests/auth.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAezC,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;UAEtD,IAAI;kBACI,MAAM;WACb,MAAM;aAahB;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAoB,wDAYhC;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,wDAapB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,wDAM5C;AAED,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpE;AAuBD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,wDAa5C;AAID;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,CAAA;CAAE,CAAC,CA0D9E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethora/chat-component-rn",
3
- "version": "26.6.10",
3
+ "version": "26.6.12",
4
4
  "description": "Drop-in XMPP chat component for React Native / Expo. <Chat config={...}/> and you're done.",
5
5
  "main": "index.js",
6
6
  "module": "lib/module/main.js",
@@ -139,7 +139,7 @@
139
139
  "@xmpp/client": "^0.13.1",
140
140
  "axios": "^1.7.9",
141
141
  "js-sha256": "^0.11.0",
142
- "react-native-keyboard-controller": "^1.18.5",
142
+ "react-native-keyboard-controller": "^1.22.3",
143
143
  "react-native-webview": "^13.16.1",
144
144
  "react-redux": "^9.2.0",
145
145
  "styled-components": "^6.1.13"
@@ -148,44 +148,45 @@
148
148
  "@babel/core": "^7.25.2",
149
149
  "@babel/preset-env": "^7.25.3",
150
150
  "@babel/runtime": "^7.25.0",
151
- "@livekit/react-native": "2.7.6",
152
- "@livekit/react-native-webrtc": "125.0.11",
151
+ "@livekit/react-native": "2.12.0",
152
+ "@livekit/react-native-webrtc": "144.1.2",
153
153
  "@react-native-async-storage/async-storage": "2.2.0",
154
- "@react-native-community/netinfo": "11.4.1",
154
+ "@react-native-community/netinfo": "12.0.1",
155
+ "@react-native/eslint-config": "^0.86.2",
155
156
  "@types/jest": "^29.5.12",
156
- "@types/react": "~19.1.0",
157
+ "@types/react": "~19.2.0",
157
158
  "@types/react-test-renderer": "^19.1.0",
158
159
  "babel-jest": "^29.6.3",
159
160
  "eslint": "^8.19.0",
160
- "eslint-config-expo": "~9.2.0",
161
- "expo": "~54.0.0",
162
- "expo-audio": "~1.1.1",
163
- "expo-build-properties": "^55.0.14",
164
- "expo-clipboard": "~8.0.8",
165
- "expo-document-picker": "~14.0.0",
166
- "expo-image-manipulator": "~14.0.0",
167
- "expo-image-picker": "~17.0.0",
168
- "expo-media-library": "~18.2.1",
169
- "expo-status-bar": "~3.0.0",
170
- "expo-video": "~3.0.16",
161
+ "eslint-config-expo": "~57.0.1",
162
+ "expo": "~57.0.0",
163
+ "expo-audio": "~57.0.3",
164
+ "expo-build-properties": "~57.0.10",
165
+ "expo-clipboard": "~57.0.1",
166
+ "expo-document-picker": "~57.0.1",
167
+ "expo-image-manipulator": "~57.0.9",
168
+ "expo-image-picker": "~57.0.9",
169
+ "expo-media-library": "~57.0.3",
170
+ "expo-status-bar": "~57.0.1",
171
+ "expo-video": "~57.0.2",
171
172
  "jest": "^29.6.3",
172
- "jest-expo": "~54.0.0",
173
- "livekit-client": "2.9.0",
173
+ "jest-expo": "~57.0.4",
174
+ "livekit-client": "2.21.0",
174
175
  "patch-package": "^8.0.1",
175
176
  "prettier": "2.8.8",
176
- "react": "19.1.0",
177
- "react-native": "0.81.5",
177
+ "react": "19.2.8",
178
+ "react-native": "0.86.2",
178
179
  "react-native-builder-bob": "^0.41.0",
179
180
  "react-native-callkeep": "4.3.16",
180
- "react-native-gesture-handler": "~2.28.0",
181
+ "react-native-gesture-handler": "~2.32.0",
181
182
  "react-native-get-random-values": "~1.11.0",
182
- "react-native-reanimated": "~4.1.0",
183
- "react-native-safe-area-context": "~5.6.0",
184
- "react-native-screens": "~4.16.0",
185
- "react-native-svg": "15.12.1",
186
- "react-native-worklets": "~0.5.0",
183
+ "react-native-reanimated": "~4.5.1",
184
+ "react-native-safe-area-context": "~5.7.0",
185
+ "react-native-screens": "~4.26.0",
186
+ "react-native-svg": "15.15.4",
187
+ "react-native-worklets": "~0.10.1",
187
188
  "react-qr-code": "^2.0.15",
188
- "react-test-renderer": "19.1.0",
189
+ "react-test-renderer": "19.2.8",
189
190
  "typescript": "~5.9.0"
190
191
  },
191
192
  "engines": {
@@ -183,6 +183,11 @@ const MediaMessage: React.FC<MediaMessageProps> = ({
183
183
  <CustomMessageVideo
184
184
  fileName={displayName}
185
185
  fileURL={location || ''}
186
+ // `messageText` is the message's locationPreview — the poster
187
+ // frame the backend generated for this video. Handing it over
188
+ // lets the bubble render as a still + play badge instead of
189
+ // mounting a video surface per row (see VideoMessage).
190
+ previewURL={messageText}
186
191
  mimetype={mimeType}
187
192
  />
188
193
  );
@@ -263,7 +268,7 @@ const styles = StyleSheet.create({
263
268
  height: '100%',
264
269
  },
265
270
  pendingImageOverlay: {
266
- ...StyleSheet.absoluteFillObject,
271
+ ...StyleSheet.absoluteFill,
267
272
  alignItems: 'center',
268
273
  justifyContent: 'center',
269
274
  gap: 8,
@@ -115,7 +115,7 @@ export const InteractionsOverlayProvider: React.FC<{
115
115
 
116
116
  const styles = StyleSheet.create({
117
117
  host: { flex: 1 },
118
- overlay: { ...StyleSheet.absoluteFillObject, zIndex: 9999, elevation: 9999 },
118
+ overlay: { ...StyleSheet.absoluteFill, zIndex: 9999, elevation: 9999 },
119
119
  });
120
120
 
121
121
  export default InteractionsOverlayProvider;
@@ -605,7 +605,7 @@ const styles = StyleSheet.create({
605
605
  position: 'relative',
606
606
  },
607
607
  overlay: {
608
- ...StyleSheet.absoluteFillObject,
608
+ ...StyleSheet.absoluteFill,
609
609
  position: 'absolute',
610
610
  top: 0,
611
611
  left: 0,
@@ -235,7 +235,7 @@ export default MessageInteractions;
235
235
 
236
236
  const styles = StyleSheet.create({
237
237
  overlayFill: {
238
- ...StyleSheet.absoluteFillObject,
238
+ ...StyleSheet.absoluteFill,
239
239
  backgroundColor: 'transparent',
240
240
  },
241
241
  contextMenu: {
@@ -82,7 +82,10 @@ const ModalVideo: React.FC<{ uri: string }> = ({ uri }) => {
82
82
  contentFit="contain"
83
83
  nativeControls
84
84
  surfaceType="textureView"
85
- allowsFullscreen
85
+ // Fullscreen stays available by default on both expo-video lines:
86
+ // `allowsFullscreen` (SDK 54, default true) was replaced by
87
+ // `fullscreenOptions.enable` (SDK 57, default true). Passing neither
88
+ // keeps this file compiling against both.
86
89
  />
87
90
  {/* Play affordance shown immediately on open; tapping starts
88
91
  playback and the native controls take over. */}
@@ -90,7 +93,7 @@ const ModalVideo: React.FC<{ uri: string }> = ({ uri }) => {
90
93
  <TouchableOpacity
91
94
  activeOpacity={0.8}
92
95
  onPress={handlePlay}
93
- style={StyleSheet.absoluteFillObject}
96
+ style={StyleSheet.absoluteFill}
94
97
  >
95
98
  <View style={styles.playOverlay}>
96
99
  <View style={styles.playButton}>
@@ -426,7 +429,7 @@ const FilePreviewModal: React.FC<FilePreviewModalProps> = ({
426
429
 
427
430
  const styles = StyleSheet.create({
428
431
  playOverlay: {
429
- ...StyleSheet.absoluteFillObject,
432
+ ...StyleSheet.absoluteFill,
430
433
  justifyContent: 'center',
431
434
  alignItems: 'center',
432
435
  },
@@ -134,7 +134,7 @@ const styles = StyleSheet.create({
134
134
  container: { flex: 1, width: '100%', backgroundColor: '#fff' },
135
135
  webview: { flex: 1, backgroundColor: '#fff' },
136
136
  loadingOverlay: {
137
- ...StyleSheet.absoluteFillObject,
137
+ ...StyleSheet.absoluteFill,
138
138
  justifyContent: 'center',
139
139
  alignItems: 'center',
140
140
  backgroundColor: '#ffffff',
@@ -345,9 +345,14 @@ export const VideoCallSession: FC<VideoCallSessionProps> = ({
345
345
  if (!runtime) {return;}
346
346
  try {
347
347
  if (Platform.OS === 'android') {
348
- await runtime.AudioSession.setAndroidAudioConfiguration?.({
349
- preferredOutputList: next ? ['speaker'] : ['earpiece'],
350
- });
348
+ // NB: not `setAndroidAudioConfiguration` — that method has never
349
+ // existed on AudioSession (the old `?.` call silently no-oped, so
350
+ // the speaker icon toggled while audio stayed on the earpiece).
351
+ // `selectAudioOutput` routes directly; on Android its device ids
352
+ // are the literal strings 'speaker' / 'earpiece'.
353
+ await runtime.AudioSession.selectAudioOutput(
354
+ next ? 'speaker' : 'earpiece'
355
+ );
351
356
  } else {
352
357
  await runtime.AudioSession.setAppleAudioConfiguration?.({
353
358
  audioCategory: 'playAndRecord',
@@ -110,7 +110,7 @@ const styles = StyleSheet.create({
110
110
  backgroundColor: '#1a1a1a',
111
111
  },
112
112
  playOverlay: {
113
- ...StyleSheet.absoluteFillObject,
113
+ ...StyleSheet.absoluteFill,
114
114
  justifyContent: 'center',
115
115
  alignItems: 'center',
116
116
  backgroundColor: 'rgba(0,0,0,0.3)',