@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.
- package/CHANGELOG.md +19 -0
- package/lib/commonjs/components/MainComponents/MediaMessage.js +8 -2
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/InteractionsOverlay.js +1 -1
- package/lib/commonjs/components/MessageBubble/InteractionsOverlay.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/Message.js +1 -1
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +7 -4
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/GViewWebView.js +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/GViewWebView.js.map +1 -1
- package/lib/commonjs/components/VideoCalls/VideoCallSession.js +6 -3
- package/lib/commonjs/components/VideoCalls/VideoCallSession.js.map +1 -1
- package/lib/commonjs/components/styled/MediaFilePreview.js +1 -1
- package/lib/commonjs/components/styled/MediaFilePreview.js.map +1 -1
- package/lib/commonjs/components/styled/VideoMessage.js +111 -61
- package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
- package/lib/commonjs/hooks/useSendMessage.js +2 -2
- package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
- package/lib/commonjs/networking/api-requests/auth.api.js +81 -52
- package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
- package/lib/module/components/MainComponents/MediaMessage.js +8 -2
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MessageBubble/InteractionsOverlay.js +1 -1
- package/lib/module/components/MessageBubble/InteractionsOverlay.js.map +1 -1
- package/lib/module/components/MessageBubble/Message.js +1 -1
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +7 -4
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/GViewWebView.js +1 -1
- package/lib/module/components/Modals/FilePreviewModal/GViewWebView.js.map +1 -1
- package/lib/module/components/VideoCalls/VideoCallSession.js +6 -3
- package/lib/module/components/VideoCalls/VideoCallSession.js.map +1 -1
- package/lib/module/components/styled/MediaFilePreview.js +1 -1
- package/lib/module/components/styled/MediaFilePreview.js.map +1 -1
- package/lib/module/components/styled/VideoMessage.js +112 -62
- package/lib/module/components/styled/VideoMessage.js.map +1 -1
- package/lib/module/hooks/useSendMessage.js +3 -3
- package/lib/module/hooks/useSendMessage.js.map +1 -1
- package/lib/module/networking/api-requests/auth.api.js +80 -51
- package/lib/module/networking/api-requests/auth.api.js.map +1 -1
- package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
- package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts.map +1 -1
- package/lib/typescript/components/styled/VideoMessage.d.ts +2 -0
- package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
- package/lib/typescript/hooks/useCustomTypingIndicator.d.ts +16 -4
- package/lib/typescript/hooks/useCustomTypingIndicator.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts +27 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
- package/package.json +29 -28
- package/src/components/MainComponents/MediaMessage.tsx +6 -1
- package/src/components/MessageBubble/InteractionsOverlay.tsx +1 -1
- package/src/components/MessageBubble/Message.tsx +1 -1
- package/src/components/MessageBubble/MessageInteractions.tsx +1 -1
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +6 -3
- package/src/components/Modals/FilePreviewModal/GViewWebView.tsx +1 -1
- package/src/components/VideoCalls/VideoCallSession.tsx +8 -3
- package/src/components/styled/MediaFilePreview.tsx +1 -1
- package/src/components/styled/VideoMessage.tsx +115 -54
- package/src/hooks/useSendMessage.tsx +3 -3
- 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
|
-
|
|
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(/\/$/, '')}
|
|
128
|
-
pushLog('http', `→ POST ${url} (
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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 =
|
|
179
|
+
body = JSON.parse(xhr.responseText);
|
|
165
180
|
} catch {
|
|
166
|
-
body = null;
|
|
181
|
+
body = xhr.responseText || null;
|
|
167
182
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
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
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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","
|
|
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,
|
|
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;
|
|
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,
|
|
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;
|
|
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").
|
|
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").
|
|
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").
|
|
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").
|
|
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
|
|
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
|
-
|
|
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;
|
|
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.
|
|
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.
|
|
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.
|
|
152
|
-
"@livekit/react-native-webrtc": "
|
|
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": "
|
|
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.
|
|
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": "~
|
|
161
|
-
"expo": "~
|
|
162
|
-
"expo-audio": "~
|
|
163
|
-
"expo-build-properties": "
|
|
164
|
-
"expo-clipboard": "~
|
|
165
|
-
"expo-document-picker": "~
|
|
166
|
-
"expo-image-manipulator": "~
|
|
167
|
-
"expo-image-picker": "~
|
|
168
|
-
"expo-media-library": "~
|
|
169
|
-
"expo-status-bar": "~
|
|
170
|
-
"expo-video": "~
|
|
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": "~
|
|
173
|
-
"livekit-client": "2.
|
|
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.
|
|
177
|
-
"react-native": "0.
|
|
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.
|
|
181
|
+
"react-native-gesture-handler": "~2.32.0",
|
|
181
182
|
"react-native-get-random-values": "~1.11.0",
|
|
182
|
-
"react-native-reanimated": "~4.1
|
|
183
|
-
"react-native-safe-area-context": "~5.
|
|
184
|
-
"react-native-screens": "~4.
|
|
185
|
-
"react-native-svg": "15.
|
|
186
|
-
"react-native-worklets": "~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.
|
|
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.
|
|
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.
|
|
118
|
+
overlay: { ...StyleSheet.absoluteFill, zIndex: 9999, elevation: 9999 },
|
|
119
119
|
});
|
|
120
120
|
|
|
121
121
|
export default InteractionsOverlayProvider;
|
|
@@ -82,7 +82,10 @@ const ModalVideo: React.FC<{ uri: string }> = ({ uri }) => {
|
|
|
82
82
|
contentFit="contain"
|
|
83
83
|
nativeControls
|
|
84
84
|
surfaceType="textureView"
|
|
85
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
349
|
-
|
|
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.
|
|
113
|
+
...StyleSheet.absoluteFill,
|
|
114
114
|
justifyContent: 'center',
|
|
115
115
|
alignItems: 'center',
|
|
116
116
|
backgroundColor: 'rgba(0,0,0,0.3)',
|