@droppii-org/chat-mobile 0.2.91 → 0.2.92
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.
|
@@ -36,7 +36,16 @@ const parseLinkItems = chatLog => {
|
|
|
36
36
|
const metadata = ex?.urlMetadata;
|
|
37
37
|
const urls = content?.urls?.length ? content.urls : metadata?.url ? [metadata.url] : [];
|
|
38
38
|
return urls.map(linkUrl => {
|
|
39
|
-
|
|
39
|
+
// Some senders' `ex.urlMetadata` never echoes a `url` field at all
|
|
40
|
+
// (confirmed against staging: MinhBBBB's tuoitre.vn and spotify rows —
|
|
41
|
+
// full title/description/image, no `url` key) — likely a different
|
|
42
|
+
// client's convention, since this app always attaches `url` itself (see
|
|
43
|
+
// useFetchUrlMetadata.ts). Requiring an exact string match against a
|
|
44
|
+
// field that may simply not exist dropped perfectly valid metadata for
|
|
45
|
+
// those rows. Only fall back to an exact match when this row actually
|
|
46
|
+
// has more than one candidate url to disambiguate between — the only
|
|
47
|
+
// case where a wrong attribution is possible.
|
|
48
|
+
const matchesMetadata = urls.length > 1 ? !!metadata?.url && metadata.url === linkUrl : !!metadata;
|
|
40
49
|
return {
|
|
41
50
|
linkUrl,
|
|
42
51
|
linkTitle: matchesMetadata ? metadata?.title : undefined,
|
|
@@ -97,8 +106,18 @@ const parseThreadResourceItem = row => {
|
|
|
97
106
|
id: chatLog.clientMsgID,
|
|
98
107
|
...base
|
|
99
108
|
}];
|
|
100
|
-
|
|
101
|
-
|
|
109
|
+
// Confirmed against staging: BE splits a multi-url URL_TEXT (160)
|
|
110
|
+
// message into multiple ROWS itself (one url per row) — but every
|
|
111
|
+
// split row keeps the SAME clientMsgID/serverMsgID as the original
|
|
112
|
+
// message. So `linkItems.length` is 1 for each of those rows
|
|
113
|
+
// individually, and keying solely off clientMsgID (as an index-based
|
|
114
|
+
// suffix guarded by `linkItems.length > 1` used to do) collided across
|
|
115
|
+
// rows — `useThreadResources`'s de-dupe-by-id then dropped every url
|
|
116
|
+
// but the first. Suffixing with the url itself instead is unique
|
|
117
|
+
// whether the split happened server-side (many rows, one url each) or
|
|
118
|
+
// client-side (one row, `content.urls` with several entries).
|
|
119
|
+
return linkItems.map(fields => ({
|
|
120
|
+
id: `${chatLog.clientMsgID}_${fields.linkUrl}`,
|
|
102
121
|
...base,
|
|
103
122
|
...fields
|
|
104
123
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["apiInstance","getApiEndpoint","extractDomain","DThreadResourceContentType","safeJsonParse","raw","undefined","JSON","parse","parseLinkItems","chatLog","ex","content","metadata","urlMetadata","urls","length","url","map","linkUrl","matchesMetadata","linkTitle","title","linkDescription","description","linkImageUrl","image","linkDomain","parseThreadResourceItem","row","contentType","base","isRevoked","createdAt","sendTime","IMAGE","id","clientMsgID","sourceUrl","bigPicture","thumbnailUrl","snapshotPicture","VIDEO","videoUrl","snapshotUrl","duration","FILE","fileName","fileSize","mimeType","fileType","linkItems","fields","
|
|
1
|
+
{"version":3,"names":["apiInstance","getApiEndpoint","extractDomain","DThreadResourceContentType","safeJsonParse","raw","undefined","JSON","parse","parseLinkItems","chatLog","ex","content","metadata","urlMetadata","urls","length","url","map","linkUrl","matchesMetadata","linkTitle","title","linkDescription","description","linkImageUrl","image","linkDomain","parseThreadResourceItem","row","contentType","base","isRevoked","createdAt","sendTime","IMAGE","id","clientMsgID","sourceUrl","bigPicture","thumbnailUrl","snapshotPicture","VIDEO","videoUrl","snapshotUrl","duration","FILE","fileName","fileSize","mimeType","fileType","linkItems","fields","ResourceCenterService","_ResourceCenterService","fetchThreadResources","req","res","post","rows","data","items","flatMap","hasMore","pageSize","page"],"sourceRoot":"../../../src","sources":["services/resourceCenter.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceCenter.d.ts","sourceRoot":"","sources":["../../../../src/services/resourceCenter.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,eAAe,EAGpB,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"resourceCenter.d.ts","sourceRoot":"","sources":["../../../../src/services/resourceCenter.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,eAAe,EAGpB,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;AA2KvB,yBAAiB,qBAAqB,CAAC;IAC9B,MAAM,oBAAoB,GAC/B,KAAK,sBAAsB,KAC1B,OAAO,CAAC;QAAE,KAAK,EAAE,eAAe,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAWtE,CAAC;CACH"}
|
package/package.json
CHANGED
|
@@ -86,7 +86,19 @@ const parseLinkItems = (
|
|
|
86
86
|
? [metadata.url]
|
|
87
87
|
: [];
|
|
88
88
|
return urls.map((linkUrl) => {
|
|
89
|
-
|
|
89
|
+
// Some senders' `ex.urlMetadata` never echoes a `url` field at all
|
|
90
|
+
// (confirmed against staging: MinhBBBB's tuoitre.vn and spotify rows —
|
|
91
|
+
// full title/description/image, no `url` key) — likely a different
|
|
92
|
+
// client's convention, since this app always attaches `url` itself (see
|
|
93
|
+
// useFetchUrlMetadata.ts). Requiring an exact string match against a
|
|
94
|
+
// field that may simply not exist dropped perfectly valid metadata for
|
|
95
|
+
// those rows. Only fall back to an exact match when this row actually
|
|
96
|
+
// has more than one candidate url to disambiguate between — the only
|
|
97
|
+
// case where a wrong attribution is possible.
|
|
98
|
+
const matchesMetadata =
|
|
99
|
+
urls.length > 1
|
|
100
|
+
? !!metadata?.url && metadata.url === linkUrl
|
|
101
|
+
: !!metadata;
|
|
90
102
|
return {
|
|
91
103
|
linkUrl,
|
|
92
104
|
linkTitle: matchesMetadata ? metadata?.title : undefined,
|
|
@@ -148,11 +160,18 @@ const parseThreadResourceItem = (
|
|
|
148
160
|
default: {
|
|
149
161
|
const linkItems = parseLinkItems(chatLog);
|
|
150
162
|
if (!linkItems.length) return [{ id: chatLog.clientMsgID, ...base }];
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
163
|
+
// Confirmed against staging: BE splits a multi-url URL_TEXT (160)
|
|
164
|
+
// message into multiple ROWS itself (one url per row) — but every
|
|
165
|
+
// split row keeps the SAME clientMsgID/serverMsgID as the original
|
|
166
|
+
// message. So `linkItems.length` is 1 for each of those rows
|
|
167
|
+
// individually, and keying solely off clientMsgID (as an index-based
|
|
168
|
+
// suffix guarded by `linkItems.length > 1` used to do) collided across
|
|
169
|
+
// rows — `useThreadResources`'s de-dupe-by-id then dropped every url
|
|
170
|
+
// but the first. Suffixing with the url itself instead is unique
|
|
171
|
+
// whether the split happened server-side (many rows, one url each) or
|
|
172
|
+
// client-side (one row, `content.urls` with several entries).
|
|
173
|
+
return linkItems.map((fields) => ({
|
|
174
|
+
id: `${chatLog.clientMsgID}_${fields.linkUrl}`,
|
|
156
175
|
...base,
|
|
157
176
|
...fields,
|
|
158
177
|
}));
|