@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
- const matchesMetadata = !!metadata?.url && metadata.url === linkUrl;
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
- return linkItems.map((fields, index) => ({
101
- id: linkItems.length > 1 ? `${chatLog.clientMsgID}_${index}` : chatLog.clientMsgID,
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","index","ResourceCenterService","_ResourceCenterService","fetchThreadResources","req","res","post","rows","data","items","flatMap","hasMore","pageSize","page"],"sourceRoot":"../../../src","sources":["services/resourceCenter.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,WAAQ;AACpC,SAASC,cAAc,QAAQ,4BAAyB;AACxD,SAASC,aAAa,QAAQ,iBAAc;AAE5C,SACEC,0BAA0B,QAKrB,kBAAe;;AAoBtB;AACA;AACA;;AAKA;AACA;AACA;;AAcA,MAAMC,aAAa,GAAOC,GAAuB,IAAoB;EACnE,IAAI,CAACA,GAAG,EAAE,OAAOC,SAAS;EAC1B,IAAI;IACF,OAAOC,IAAI,CAACC,KAAK,CAACH,GAAG,CAAC;EACxB,CAAC,CAAC,MAAM;IACN,OAAOC,SAAS;EAClB;AACF,CAAC;AAOD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,cAAc,GAClBC,OAAyC,IACxB;EACjB,MAAMC,EAAE,GAAGP,aAAa,CAAeM,OAAO,CAACC,EAAE,CAAC;EAClD,MAAMC,OAAO,GAAGR,aAAa,CAAoBM,OAAO,CAACE,OAAO,CAAC;EACjE,MAAMC,QAAQ,GAAGF,EAAE,EAAEG,WAAW;EAChC,MAAMC,IAAI,GAAGH,OAAO,EAAEG,IAAI,EAAEC,MAAM,GAC9BJ,OAAO,CAACG,IAAI,GACZF,QAAQ,EAAEI,GAAG,GACX,CAACJ,QAAQ,CAACI,GAAG,CAAC,GACd,EAAE;EACR,OAAOF,IAAI,CAACG,GAAG,CAAEC,OAAO,IAAK;IAC3B,MAAMC,eAAe,GAAG,CAAC,CAACP,QAAQ,EAAEI,GAAG,IAAIJ,QAAQ,CAACI,GAAG,KAAKE,OAAO;IACnE,OAAO;MACLA,OAAO;MACPE,SAAS,EAAED,eAAe,GAAGP,QAAQ,EAAES,KAAK,GAAGhB,SAAS;MACxDiB,eAAe,EAAEH,eAAe,GAAGP,QAAQ,EAAEW,WAAW,GAAGlB,SAAS;MACpEmB,YAAY,EAAEL,eAAe,GAAGP,QAAQ,EAAEa,KAAK,GAAGpB,SAAS;MAC3DqB,UAAU,EAAEzB,aAAa,CAACiB,OAAO;IACnC,CAAC;EACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAMS,uBAAuB,GAC3BC,GAA0B,IACJ;EACtB,MAAM;IAAEnB;EAAQ,CAAC,GAAGmB,GAAG;EACvB,MAAMC,WAAW,GAAGpB,OAAO,CAACoB,WAAyC;EACrE,MAAMC,IAAI,GAAG;IACXD,WAAW;IACXE,SAAS,EAAEH,GAAG,CAACG,SAAS;IACxBC,SAAS,EAAEvB,OAAO,CAACwB;EACrB,CAAC;EAED,QAAQJ,WAAW;IACjB,KAAK3B,0BAA0B,CAACgC,KAAK;MAAE;QACrC,MAAMvB,OAAO,GAAGR,aAAa,CAAoBM,OAAO,CAACE,OAAO,CAAC;QACjE,OAAO,CACL;UACEwB,EAAE,EAAE1B,OAAO,CAAC2B,WAAW;UACvB,GAAGN,IAAI;UACPO,SAAS,EAAE1B,OAAO,EAAE2B,UAAU,EAAEtB,GAAG;UACnCuB,YAAY,EAAE5B,OAAO,EAAE6B,eAAe,EAAExB;QAC1C,CAAC,CACF;MACH;IACA,KAAKd,0BAA0B,CAACuC,KAAK;MAAE;QACrC,MAAM9B,OAAO,GAAGR,aAAa,CAAkBM,OAAO,CAACE,OAAO,CAAC;QAC/D,OAAO,CACL;UACEwB,EAAE,EAAE1B,OAAO,CAAC2B,WAAW;UACvB,GAAGN,IAAI;UACPO,SAAS,EAAE1B,OAAO,EAAE+B,QAAQ;UAC5BH,YAAY,EAAE5B,OAAO,EAAEgC,WAAW;UAClCC,QAAQ,EAAEjC,OAAO,EAAEiC;QACrB,CAAC,CACF;MACH;IACA,KAAK1C,0BAA0B,CAAC2C,IAAI;MAAE;QACpC,MAAMlC,OAAO,GAAGR,aAAa,CAAiBM,OAAO,CAACE,OAAO,CAAC;QAC9D,OAAO,CACL;UACEwB,EAAE,EAAE1B,OAAO,CAAC2B,WAAW;UACvB,GAAGN,IAAI;UACPO,SAAS,EAAE1B,OAAO,EAAE0B,SAAS;UAC7BS,QAAQ,EAAEnC,OAAO,EAAEmC,QAAQ;UAC3BC,QAAQ,EAAEpC,OAAO,EAAEoC,QAAQ;UAC3BC,QAAQ,EAAErC,OAAO,EAAEsC;QACrB,CAAC,CACF;MACH;IACA;MAAS;QACP,MAAMC,SAAS,GAAG1C,cAAc,CAACC,OAAO,CAAC;QACzC,IAAI,CAACyC,SAAS,CAACnC,MAAM,EAAE,OAAO,CAAC;UAAEoB,EAAE,EAAE1B,OAAO,CAAC2B,WAAW;UAAE,GAAGN;QAAK,CAAC,CAAC;QACpE,OAAOoB,SAAS,CAACjC,GAAG,CAAC,CAACkC,MAAM,EAAEC,KAAK,MAAM;UACvCjB,EAAE,EACAe,SAAS,CAACnC,MAAM,GAAG,CAAC,GAChB,GAAGN,OAAO,CAAC2B,WAAW,IAAIgB,KAAK,EAAE,GACjC3C,OAAO,CAAC2B,WAAW;UACzB,GAAGN,IAAI;UACP,GAAGqB;QACL,CAAC,CAAC,CAAC;MACL;EACF;AACF,CAAC;AAAC,WAEeE,qBAAqB;AAAA,WAAAC,sBAAA;EAC7B,MAAMC,oBAAoB,GAAAD,sBAAA,CAAAC,oBAAA,GAAG,MAClCC,GAA2B,IAC+C;IAC1E,MAAMC,GAAG,GAAG,MAAM1D,WAAW,EAAE2D,IAAI,CAEjC1D,cAAc,CAAC,mBAAmB,CAAC,EAAEwD,GAAG,CAAC;IAC3C,MAAMG,IAAI,GAAGF,GAAG,EAAEG,IAAI,EAAEA,IAAI,IAAI,EAAE;IAClC,MAAMC,KAAK,GAAGF,IAAI,CAACG,OAAO,CAACnC,uBAAuB,CAAC;IACnD;IACA;IACA;IACA,MAAMoC,OAAO,GAAGF,KAAK,CAAC9C,MAAM,IAAIyC,GAAG,CAACQ,QAAQ;IAC5C,OAAO;MAAEH,KAAK;MAAEI,IAAI,EAAET,GAAG,CAACS,IAAI;MAAEF;IAAQ,CAAC;EAC3C,CAAC;AAAC,GAdaV,qBAAqB,KAArBA,qBAAqB","ignoreList":[]}
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;AAwJvB,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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@droppii-org/chat-mobile",
3
- "version": "0.2.91",
3
+ "version": "0.2.92",
4
4
  "description": "Droppii chat mobile",
5
5
  "keywords": [
6
6
  "react-native",
@@ -86,7 +86,19 @@ const parseLinkItems = (
86
86
  ? [metadata.url]
87
87
  : [];
88
88
  return urls.map((linkUrl) => {
89
- const matchesMetadata = !!metadata?.url && metadata.url === linkUrl;
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
- return linkItems.map((fields, index) => ({
152
- id:
153
- linkItems.length > 1
154
- ? `${chatLog.clientMsgID}_${index}`
155
- : chatLog.clientMsgID,
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
  }));