@amityco/ts-sdk-react-native 7.26.0 → 7.26.1-30c953a9.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.
@@ -42,12 +42,21 @@ declare global {
42
42
  width: number;
43
43
  height: number;
44
44
  isFull: boolean;
45
+ [key: string]: unknown;
45
46
  };
46
- type VideoMetadata = Record<string, never>;
47
+ type VideoMetadata = Record<string, unknown>;
47
48
  type ClipMetadata = Record<string, never>;
48
49
  type AudioMetadata = Record<string, never>;
49
50
  type MetadataFor<T extends FileType> = T extends 'file' ? FileMetadata : T extends 'image' ? ImageMetadata : T extends 'video' ? VideoMetadata : T extends 'clip' ? ClipMetadata : T extends 'audio' ? AudioMetadata : never;
50
- type File<T extends FileType = any> = Amity.FilePayload<T>;
51
+ type FileLinkedObject<T extends FileType> = (T extends 'image' ? {
52
+ getWidth(): number;
53
+ getHeight(): number;
54
+ } : unknown) & (T extends 'video' ? {
55
+ getWidth(): number;
56
+ getHeight(): number;
57
+ getRotation(): number;
58
+ } : unknown);
59
+ type File<T extends FileType = any> = Amity.FilePayload<T> & Amity.FileLinkedObject<T>;
51
60
  }
52
61
  }
53
62
  //# sourceMappingURL=file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/@types/domains/file.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;EAMnB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;EAKjC,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;EAKpB,CAAC;AAEH,oBAAY,kBAAkB;IAC5B,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,KAAK,CAAC;QACd,KAAK,cAAc,GAAG,GAAG,kBAAkB,EAAE,CAAC;QAE9C,KAAK,QAAQ,GAAG,OAAO,CAAC,OAAO,QAAQ,CAAC,CAAC;QAEzC,KAAK,eAAe,GAAG,OAAO,CAAC,OAAO,eAAe,CAAC,CAAC;QAEvD,KAAK,sBAAsB,GAAG,OAAO,CAAC,OAAO,sBAAsB,CAAC,CAAC;QAErE,KAAK,SAAS,GAAG,OAAO,CAAC,OAAO,SAAS,CAAC,CAAC;QAE3C,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE1C,KAAK,aAAa,GAAG;YACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC7B,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,OAAO,CAAC;SACjB,CAAC;QAEF,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE3C,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE1C,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE3C,KAAK,WAAW,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,SAAS,MAAM,GACnD,YAAY,GACZ,CAAC,SAAS,OAAO,GACjB,aAAa,GACb,CAAC,SAAS,OAAO,GACjB,aAAa,GACb,CAAC,SAAS,MAAM,GAChB,YAAY,GACZ,CAAC,SAAS,OAAO,GACjB,aAAa,GACb,KAAK,CAAC;QAEV,KAAK,IAAI,CAAC,CAAC,SAAS,QAAQ,GAAG,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KAC5D;CACF"}
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/@types/domains/file.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;EAMnB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;EAKjC,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;EAKpB,CAAC;AAEH,oBAAY,kBAAkB;IAC5B,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,KAAK,CAAC;QACd,KAAK,cAAc,GAAG,GAAG,kBAAkB,EAAE,CAAC;QAE9C,KAAK,QAAQ,GAAG,OAAO,CAAC,OAAO,QAAQ,CAAC,CAAC;QAEzC,KAAK,eAAe,GAAG,OAAO,CAAC,OAAO,eAAe,CAAC,CAAC;QAEvD,KAAK,sBAAsB,GAAG,OAAO,CAAC,OAAO,sBAAsB,CAAC,CAAC;QAErE,KAAK,SAAS,GAAG,OAAO,CAAC,OAAO,SAAS,CAAC,CAAC;QAE3C,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE1C,KAAK,aAAa,GAAG;YACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC7B,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,OAAO,CAAC;YAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;SACxB,CAAC;QAEF,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE7C,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE1C,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE3C,KAAK,WAAW,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,SAAS,MAAM,GACnD,YAAY,GACZ,CAAC,SAAS,OAAO,GACjB,aAAa,GACb,CAAC,SAAS,OAAO,GACjB,aAAa,GACb,CAAC,SAAS,MAAM,GAChB,YAAY,GACZ,CAAC,SAAS,OAAO,GACjB,aAAa,GACb,KAAK,CAAC;QAEV,KAAK,gBAAgB,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,CAAC,SAAS,OAAO,GAC1D;YAAE,QAAQ,IAAI,MAAM,CAAC;YAAC,SAAS,IAAI,MAAM,CAAA;SAAE,GAC3C,OAAO,CAAC,GACV,CAAC,CAAC,SAAS,OAAO,GACd;YAAE,QAAQ,IAAI,MAAM,CAAC;YAAC,SAAS,IAAI,MAAM,CAAC;YAAC,WAAW,IAAI,MAAM,CAAA;SAAE,GAClE,OAAO,CAAC,CAAC;QAEf,KAAK,IAAI,CAAC,CAAC,SAAS,QAAQ,GAAG,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;KACxF;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cache/utils/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAC1C,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAEjD,eAAO,MAAM,sBAAsB,QAAa,CAAC;AACjD,eAAO,MAAM,cAAc,QAAa,CAAC;AACzC,eAAO,MAAM,wBAAwB,QAAa,CAAC;AAkBnD;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,2BAA0B,MACmC,CAAC;AAEpF;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,QAAS,MAAM,mBAAoC,CAAC;AAE1E;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,cAAe,GAAG,aAAa,GAAG,KAAG,OAa7D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,4BAA6B,GAAG,2BACU,CAAC;AAEhE;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,cAAe,MAAM,WAAW,KAAG,OACS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cache/utils/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAC1C,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAEjD,eAAO,MAAM,sBAAsB,QAAa,CAAC;AACjD,eAAO,MAAM,cAAc,QAAa,CAAC;AACzC,eAAO,MAAM,wBAAwB,QAAa,CAAC;AAyBnD;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,2BAA0B,MAuB5C,CAAC;AAEL;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,QAAS,MAAM,mBAAoC,CAAC;AAE1E;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,cAAe,GAAG,aAAa,GAAG,KAAG,OAa7D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,4BAA6B,GAAG,2BACU,CAAC;AAEhE;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,cAAe,MAAM,WAAW,KAAG,OACS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getFile.d.ts","sourceRoot":"","sources":["../../../src/fileRepository/api/getFile.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,OAAO;6CACV,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAChC,QAAQ,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAmBpC;;;;;;;;;;;;OAYG;oBACwB,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS;CAhB1F,CAAC"}
1
+ {"version":3,"file":"getFile.d.ts","sourceRoot":"","sources":["../../../src/fileRepository/api/getFile.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,OAAO;6CACV,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAChC,QAAQ,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAmBpC;;;;;;;;;;;;OAYG;oBACwB,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS;CAhB1F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"uploadImage.d.ts","sourceRoot":"","sources":["../../../src/fileRepository/api/uploadImage.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,WAAW,aACZ,QAAQ,0BACK,MAAM,KAAK,IAAI,yBAC5B,MAAM,KACf,QAAQ,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAuD7C,CAAC"}
1
+ {"version":3,"file":"uploadImage.d.ts","sourceRoot":"","sources":["../../../src/fileRepository/api/uploadImage.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,WAAW,aACZ,QAAQ,0BACK,MAAM,KAAK,IAAI,yBAC5B,MAAM,KACf,QAAQ,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAuD7C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"uploadVideo.d.ts","sourceRoot":"","sources":["../../../src/fileRepository/api/uploadVideo.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,WAAW,aACZ,QAAQ,aACP,MAAM,eAAe,0BACT,MAAM,KAAK,IAAI,kBACrC,QAAQ,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CA2C7C,CAAC"}
1
+ {"version":3,"file":"uploadVideo.d.ts","sourceRoot":"","sources":["../../../src/fileRepository/api/uploadVideo.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,WAAW,aACZ,QAAQ,aACP,MAAM,eAAe,0BACT,MAAM,KAAK,IAAI,kBACrC,QAAQ,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CA2C7C,CAAC"}
package/dist/index.cjs.js CHANGED
@@ -390,6 +390,12 @@ const CACHE_LIFESPAN_TOMBSTONE = 3 * MINUTE; // 3 minutes
390
390
  const normalize = (source) => Object.keys(source)
391
391
  .sort()
392
392
  .reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: source[key] })), {});
393
+ /**
394
+ * Keys already reported by encodeKey, so one recurring bad payload does not
395
+ * flood the console — a null segment usually arrives on a realtime event that
396
+ * repeats.
397
+ */
398
+ const reportedNullKeys = new Set();
393
399
  /**
394
400
  * Encodes a given {@link Amity.CacheKey} to a plain string
395
401
  *
@@ -399,7 +405,26 @@ const normalize = (source) => Object.keys(source)
399
405
  * @category Cache
400
406
  * @hidden
401
407
  */
402
- const encodeKey = (key) => JSON.stringify(key, (_, val) => (typeof val === 'object' ? normalize(val) : val));
408
+ const encodeKey = (key) => JSON.stringify(key, (_, val) => {
409
+ // `typeof null` is `'object'`, so a nullish segment would reach normalize()
410
+ // and throw on Object.keys(null) — taking down whichever cache read built
411
+ // the key. Amity.Serializable does not admit null in the first place, so a
412
+ // null here is a payload that broke its own contract: encode it as null and
413
+ // let the miss be a miss.
414
+ if (val === null) {
415
+ // Diagnostic: the guard makes the key harmless, but it hides which
416
+ // caller built it. Printing the whole key names the domain and the shape
417
+ // ('post'/'get'/null vs something else), which is the one thing needed
418
+ // to find the producer.
419
+ const printed = JSON.stringify(key);
420
+ if (!reportedNullKeys.has(printed)) {
421
+ reportedNullKeys.add(printed);
422
+ console.warn('[AmitySDK] null segment in cache key', printed);
423
+ }
424
+ return val;
425
+ }
426
+ return typeof val === 'object' ? normalize(val) : val;
427
+ });
403
428
  /**
404
429
  * Decodes a string back into a {@link Amity.CacheKey}
405
430
 
@@ -12645,7 +12670,7 @@ const getWatchSessionStorage = () => {
12645
12670
  return storageInstance;
12646
12671
  };
12647
12672
 
12648
- const privateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHo80SecH7FuF2\nhFYnb+l26/VN8UMLXAQFLnxciNTEwkGVFMpdezlH8rU2HtUJL4RETogbAOLVY0XM\njs6sPn8G1nALmh9qeDpUtVqFOVtBHxEZ910TLOtQiunjqJKO5nWdqZ71EC3OFluR\niGQkO84BiIFbv37ub7xl3S8XarbtKoLcyVpkDHi+1wx1pgCAn6gtBUgckPL5NR8j\nLseabl3HAXQfhTCKo4tmOFM2Dxwl1IUMmIJrJg/aIU/U0tj/1Eoo7mG0JcNWX19l\nW3EecCbi0ncCJOrkUdwlBrcjaMayaX/ubEwyUeTGiLdyc4L3GRLHjyK8xgVNXRMH\nbZWJ2a5NAgMBAAECggEASxuE+35zTFO/XydKgmvIGcWL9FbgMlXb7Vcf0nBoG945\nbiz0NVc2paraIhJXc608xbYF3qLmtAE1MVBI0ORyRdBHNxY024l/6H6SH60Ed+uI\nM4ysp5ourY6Vj+DLwpdRiI9YDjqYAQDIUmhNxJP7XPhOMoZI6st+xZQBM34ic/bv\nAMSJm9OZphSp3+qXVkFZztr2mxD2EZSJJLYxi8BCdgM2qhazalbcJ6zDKHCZWVWm\n8RRxDGldyMb/237JxETzP40tAlzOZDmBAbUgEnurDJ93RVDIE3rbZUshwgeQd18a\nem096mWgvB1AIKYgsTAR3pw+V19YWAjq/glP6fz8wQKBgQD/oQq+ukKF0PRgBeM5\ngeTjSwsdGppQLmf5ndujvoiz/TpdjDEPu6R8kigQr1rG2t4K/yfdZoI8RdmJD1al\n3Q7N9hofooSy4rj6E3txzWZCHJjHad2cnCp/O26HiReGAl7wTcfTmNdiFHhZQzm5\nJBkvWAiwuvQMNfEbnXxw6/vIDwKBgQDH7fX8gsc77JLvAWgp1MaQN/sbqVb6JeT1\nFQfR8E/WFCSmzQBtNzd5KgYuCeelwr/8DyYytvN2BzCYZXp73gI1jF3YlW5jVn74\nOY6TwQ095digwo6Z0yuxopdIOApKgAkL9PRKgNrqAf3NAyMua6lOGifzjDojC3KU\nfylQmxMn4wKBgHp2B9O/H0dEBw5JQ8W0+JX6yWQz7mEjGiR2/1W+XXb8hQ1zr709\nw1r6Gb+EghRpnZ3fBpYGGbYOMFx8wKHM+N6qW3F0ReX8v2juFGE8aRSa5oYBrWzt\nU16Idjbv8hj84cZ1PJmdyvDtpYn9rpWHOZl4rxEbPvbqkIsOMyNVqdT5AoGAOSge\nmwIIU2le2FVeohbibXiToWTYKMuMmURZ5/r72AgKMmWJKbAPe+Q3wBG01/7FRBpQ\noU8Ma0HC8s6QJbliiEyIx9JwrJWd1vkdecBHONrtA4ibm/5zD2WcOllLF+FitLhi\n3qnX6+6F0IaFGFBPJrTzlv0P4dTz/OAdv52V7GECgYEA2TttOKBAqWllgOaZOkql\nLVMJVmgR7s6tLi1+cEP8ZcapV9aRbRzTAKXm4f8AEhtlG9F9kCOvHYCYGi6JaiWJ\nZkHjeex3T+eE6Di6y5Bm/Ift5jtVhJ4jCVwHOKTMej79NPUFTJfv8hCo29haBDv6\nRXFrv+T21KCcw8k3sJeJWWQ=\n-----END PRIVATE KEY-----";
12673
+ const privateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDAARz+hmBgi8pJ\nQb8LeY41gtHhk+ACMwRfhsn7GqpqRQNG2qU0755mzZuVDUqjQMGSo8THJB7O+OJs\nflbZRkFXlFoFOVNw1UpNOgwEQZ6wB9oRwzepTJAfF1sVhm/o/ixvXh1zDFNDy6yZ\npXyiiJHUVxqyjllZhxnwdvjoVtDs6hW6awG09bB9nh/TTejlUKXoAgzqVwu/1QMu\nUVViET495elEe19aUarEy+oL2iKeXCEvqda/pWNBdbieFyJvvZ08HN8dPuT88wq2\njZLEAth1vrwQ2IAa4ktaLcBQdLJgIkrbDvAiVZ8lQAjS/bq5vXQikTGvoPlC5bbn\nvuOM/3eLAgMBAAECggEAVZ+peHAghq2QVj71nX5lxsNCKaCyYwixSJBpfouTt7Rz\nE6PpzMOXFi1W1o+I22jDakuSM2SOQKqI/u0QefB0r0O/KVk5NrZHXk0mkrdYtxOp\nUgaGyf8UvmjB+8VqHrNKyZdk9qtmbnNj01kTTcAtmE4H39zPR7eR/8Rul94vaZbs\nwCnKJS3mLT3JxyGug6lxanveKkjG+CKC1nJQYWaxCJxaFSzbwXQPvDhB+TvrIbee\npd5v4EAyEJohpr+T9oDGGJkb/KARBZCtwLyB976PKJwwBA8MRVL1i5QwawuMiMq5\nUtnOnbGKtCeFzaLbNU0Qi8bqyims84EQxC6DOu1fkQKBgQDdvsoBsEhsOXV7hlIJ\naEd0eSJZVkdqimxH8uGoMM2FeNaOrcB6yBXqTSP0R3OIyf8eaY6yjRvP30ZNXcll\n/gD3O1Mu6YmWQdt1W2WA6pKOsUuPXasf0pdOF7IiFZKlSabz5YHXFqwVuqm8loaj\nsXel3YWqPVdHiankE7tz+3ssnQKBgQDdqi4TNdD1MdEpihx19jr0QjUiXW3939FK\nqp30HESPEGDGQzXdmJgif9HhZb+cJSuWaHEbjgBrYahvgCF+y6LbEpOD+D/dmT+s\nDEAQaR84sah6dokwPjV8fjBSrcVFjCS+doxv0d3p/9OUEeyUhFrY03nxtIEYkLIE\n/Zvn37b4RwKBgQCLENVFe9XfsaVhQ5r9dV2iyTlmh7qgMZG5CbTFs12hQGhm8McO\n+Z7s41YSJCFr/yq1WwP4LJDtrBw99vyQr1zRsG35tNLp3gGRNzGQSQyC2uQFVHw2\np+7mNewsfhUK/gbrXNsyFnDz6635rPlhfbII3sWuP2wWXFqkxE9CbMwR7QKBgQC6\nawDMzxmo2/iYArrkyevSuEuPVxvFwpF1RgAI6C0QVCnPE38dmdN4UB7mfHekje4W\nVEercMURidPp0cxZolCYBQtilUjAyL0vqC3In1/Ogjq6oy3FEMxSop1pKxMY5j+Q\nnoqFD+6deLUrddeNH7J3X4LSr4dSbX4JjG+tlgt+yQKBgQCuwTL4hA6KqeInQ0Ta\n9VQX5Qr8hFlqJz1gpymi/k63tW/Ob8yedbg3WWNWyShwRMFYyY9S81ITFWM95uL6\nvF3x9rmRjwElJw9PMwVu6dmf/CO0Z1wzXSp2VVD12gbrUD/0/d7MUoJ9LgC8X8f/\nn0txLHYGHbx+nf95+JUg6lV3hg==\n-----END PRIVATE KEY-----";
12649
12674
  /*
12650
12675
  * The crypto algorithm used for importing key and signing string
12651
12676
  */
@@ -13073,6 +13098,21 @@ const productTagLinkedObject = (productTag) => {
13073
13098
  return Object.assign(Object.assign({}, productTag), { product: internalProduct ? productLinkedObject(internalProduct) : undefined });
13074
13099
  };
13075
13100
 
13101
+ const fileLinkedObject = (file) => {
13102
+ var _a, _b, _c;
13103
+ if (!file)
13104
+ return file;
13105
+ if (file.type === 'video') {
13106
+ const video = (_b = (_a = file.attributes) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.video;
13107
+ return Object.assign(Object.assign({}, file), { getWidth: () => { var _a; return (_a = video === null || video === void 0 ? void 0 : video.width) !== null && _a !== void 0 ? _a : 0; }, getHeight: () => { var _a; return (_a = video === null || video === void 0 ? void 0 : video.height) !== null && _a !== void 0 ? _a : 0; }, getRotation: () => { var _a; return (_a = video === null || video === void 0 ? void 0 : video.rotation) !== null && _a !== void 0 ? _a : 0; } });
13108
+ }
13109
+ if (file.type === 'image') {
13110
+ const metadata = (_c = file.attributes) === null || _c === void 0 ? void 0 : _c.metadata;
13111
+ return Object.assign(Object.assign({}, file), { getWidth: () => { var _a; return (_a = metadata === null || metadata === void 0 ? void 0 : metadata.width) !== null && _a !== void 0 ? _a : 0; }, getHeight: () => { var _a; return (_a = metadata === null || metadata === void 0 ? void 0 : metadata.height) !== null && _a !== void 0 ? _a : 0; } });
13112
+ }
13113
+ return file;
13114
+ };
13115
+
13076
13116
  const postLinkedObject = (post) => {
13077
13117
  return shallowClone(post, {
13078
13118
  childrenPosts: post.children
@@ -13130,19 +13170,19 @@ const postLinkedObject = (post) => {
13130
13170
  getImageInfo() {
13131
13171
  var _a, _b;
13132
13172
  return isAmityImagePost(post)
13133
- ? (_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.fileId])) === null || _b === void 0 ? void 0 : _b.data
13173
+ ? fileLinkedObject((_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.fileId])) === null || _b === void 0 ? void 0 : _b.data)
13134
13174
  : undefined;
13135
13175
  },
13136
13176
  getVideoInfo() {
13137
13177
  var _a, _b, _c;
13138
13178
  return isAmityVideoPost(post)
13139
- ? (_c = pullFromCache(['file', 'get', (_b = (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.videoFileId) === null || _b === void 0 ? void 0 : _b.original])) === null || _c === void 0 ? void 0 : _c.data
13179
+ ? fileLinkedObject((_c = pullFromCache(['file', 'get', (_b = (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.videoFileId) === null || _b === void 0 ? void 0 : _b.original])) === null || _c === void 0 ? void 0 : _c.data)
13140
13180
  : undefined;
13141
13181
  },
13142
13182
  getVideoThumbnailInfo() {
13143
13183
  var _a, _b;
13144
13184
  return isAmityVideoPost(post)
13145
- ? (_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.thumbnailFileId])) === null || _b === void 0 ? void 0 : _b.data
13185
+ ? fileLinkedObject((_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.thumbnailFileId])) === null || _b === void 0 ? void 0 : _b.data)
13146
13186
  : undefined;
13147
13187
  },
13148
13188
  getFileInfo() {
@@ -14133,6 +14173,7 @@ const eventLinkedObject = (event) => {
14133
14173
  };
14134
14174
 
14135
14175
  const LinkedObject = {
14176
+ file: fileLinkedObject,
14136
14177
  ad: adLinkedObject,
14137
14178
  comment: commentLinkedObject,
14138
14179
  post: postLinkedObject,
@@ -15480,7 +15521,7 @@ const getFile = async (fileId) => {
15480
15521
  if (client.cache)
15481
15522
  ingestInCache({ files: [data] }, { cachedAt });
15482
15523
  return {
15483
- data,
15524
+ data: fileLinkedObject(data),
15484
15525
  cachedAt,
15485
15526
  };
15486
15527
  };
@@ -15507,7 +15548,7 @@ getFile.locally = (fileId) => {
15507
15548
  if (!cached)
15508
15549
  return;
15509
15550
  return {
15510
- data: cached.data,
15551
+ data: fileLinkedObject(cached.data),
15511
15552
  cachedAt: cached.cachedAt,
15512
15553
  };
15513
15554
  };
@@ -15644,7 +15685,7 @@ const uploadVideo = async (formData, feedType, onProgress) => {
15644
15685
  if (client.cache)
15645
15686
  ingestInCache({ files: data }, { cachedAt });
15646
15687
  return {
15647
- data,
15688
+ data: data.map(file => fileLinkedObject(file)),
15648
15689
  cachedAt,
15649
15690
  };
15650
15691
  };
@@ -15705,7 +15746,7 @@ const uploadImage = async (formData, onProgress, altText) => {
15705
15746
  if (client.cache)
15706
15747
  ingestInCache({ files: data }, { cachedAt });
15707
15748
  return {
15708
- data,
15749
+ data: data.map(file => fileLinkedObject(file)),
15709
15750
  cachedAt,
15710
15751
  };
15711
15752
  };
@@ -16668,6 +16709,39 @@ removeReaction.optimistically = (referenceType, referenceId, reactionName) => {
16668
16709
  return !((_d = reaction === null || reaction === void 0 ? void 0 : reaction.myReactions) === null || _d === void 0 ? void 0 : _d.includes(reactionName));
16669
16710
  };
16670
16711
 
16712
+ /**
16713
+ * Resolves the id of the parent post that a child-post payload belongs to.
16714
+ *
16715
+ * `parentId` and `parentPostId` name the same post, but a payload does not
16716
+ * always carry both — and the delete/create child handlers decide *whether* a
16717
+ * post is a child from `parentId` while reading the cache with `parentPostId`.
16718
+ * When only the former is set that read builds `['post', 'get', undefined]`,
16719
+ * which cannot match anything and, when the value is null, breaks key encoding
16720
+ * outright. Reading whichever id is present keeps the decision and the lookup
16721
+ * on the same post.
16722
+ *
16723
+ * @param post the child post payload
16724
+ * @returns the parent post id, or undefined when the payload carries neither
16725
+ *
16726
+ * @category Post Events
16727
+ * @hidden
16728
+ */
16729
+ const resolveParentPostId = (post) => {
16730
+ if (post.parentPostId)
16731
+ return post.parentPostId;
16732
+ if (post.parentId) {
16733
+ // Diagnostic: we do not know yet whether the server actually emits this
16734
+ // shape. If this warning is never seen in practice the fallback can go.
16735
+ console.warn('[AmitySDK] post payload carries `parentId` without `parentPostId` — falling back to `parentId`', {
16736
+ postId: post.postId,
16737
+ parentId: post.parentId,
16738
+ parentPostId: post.parentPostId,
16739
+ });
16740
+ return post.parentId;
16741
+ }
16742
+ return undefined;
16743
+ };
16744
+
16671
16745
  const processDeleteChildPost = (payload) => {
16672
16746
  var _a;
16673
16747
  const post = payload.posts[0];
@@ -16679,7 +16753,10 @@ const processDeleteChildPost = (payload) => {
16679
16753
  }
16680
16754
  else {
16681
16755
  // child post in a parent post
16682
- const parentPost = (_a = pullFromCache(['post', 'get', post.parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16756
+ const parentPostId = resolveParentPostId(post);
16757
+ if (!parentPostId)
16758
+ return;
16759
+ const parentPost = (_a = pullFromCache(['post', 'get', parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16683
16760
  if (!parentPost)
16684
16761
  return;
16685
16762
  pushToCache(['post', 'get', parentPost.postId], Object.assign(Object.assign({}, parentPost), { children: parentPost.children.filter(childId => childId !== post.postId) }));
@@ -16690,7 +16767,10 @@ const processCreateChildPost = (payload) => {
16690
16767
  const post = payload.posts[0];
16691
16768
  if (!post.parentId)
16692
16769
  return;
16693
- const parentPost = (_a = pullFromCache(['post', 'get', post.parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16770
+ const parentPostId = resolveParentPostId(post);
16771
+ if (!parentPostId)
16772
+ return;
16773
+ const parentPost = (_a = pullFromCache(['post', 'get', parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16694
16774
  if (!parentPost)
16695
16775
  return;
16696
16776
  pushToCache(['post', 'get', parentPost.postId], Object.assign(Object.assign({}, parentPost), { children: [...new Set([post.postId, ...parentPost.children])] }));
package/dist/index.esm.js CHANGED
@@ -355,6 +355,12 @@ const CACHE_LIFESPAN_TOMBSTONE = 3 * MINUTE; // 3 minutes
355
355
  const normalize = (source) => Object.keys(source)
356
356
  .sort()
357
357
  .reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: source[key] })), {});
358
+ /**
359
+ * Keys already reported by encodeKey, so one recurring bad payload does not
360
+ * flood the console — a null segment usually arrives on a realtime event that
361
+ * repeats.
362
+ */
363
+ const reportedNullKeys = new Set();
358
364
  /**
359
365
  * Encodes a given {@link Amity.CacheKey} to a plain string
360
366
  *
@@ -364,7 +370,26 @@ const normalize = (source) => Object.keys(source)
364
370
  * @category Cache
365
371
  * @hidden
366
372
  */
367
- const encodeKey = (key) => JSON.stringify(key, (_, val) => (typeof val === 'object' ? normalize(val) : val));
373
+ const encodeKey = (key) => JSON.stringify(key, (_, val) => {
374
+ // `typeof null` is `'object'`, so a nullish segment would reach normalize()
375
+ // and throw on Object.keys(null) — taking down whichever cache read built
376
+ // the key. Amity.Serializable does not admit null in the first place, so a
377
+ // null here is a payload that broke its own contract: encode it as null and
378
+ // let the miss be a miss.
379
+ if (val === null) {
380
+ // Diagnostic: the guard makes the key harmless, but it hides which
381
+ // caller built it. Printing the whole key names the domain and the shape
382
+ // ('post'/'get'/null vs something else), which is the one thing needed
383
+ // to find the producer.
384
+ const printed = JSON.stringify(key);
385
+ if (!reportedNullKeys.has(printed)) {
386
+ reportedNullKeys.add(printed);
387
+ console.warn('[AmitySDK] null segment in cache key', printed);
388
+ }
389
+ return val;
390
+ }
391
+ return typeof val === 'object' ? normalize(val) : val;
392
+ });
368
393
  /**
369
394
  * Decodes a string back into a {@link Amity.CacheKey}
370
395
 
@@ -12626,7 +12651,7 @@ const getWatchSessionStorage = () => {
12626
12651
  return storageInstance;
12627
12652
  };
12628
12653
 
12629
- const privateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHo80SecH7FuF2\nhFYnb+l26/VN8UMLXAQFLnxciNTEwkGVFMpdezlH8rU2HtUJL4RETogbAOLVY0XM\njs6sPn8G1nALmh9qeDpUtVqFOVtBHxEZ910TLOtQiunjqJKO5nWdqZ71EC3OFluR\niGQkO84BiIFbv37ub7xl3S8XarbtKoLcyVpkDHi+1wx1pgCAn6gtBUgckPL5NR8j\nLseabl3HAXQfhTCKo4tmOFM2Dxwl1IUMmIJrJg/aIU/U0tj/1Eoo7mG0JcNWX19l\nW3EecCbi0ncCJOrkUdwlBrcjaMayaX/ubEwyUeTGiLdyc4L3GRLHjyK8xgVNXRMH\nbZWJ2a5NAgMBAAECggEASxuE+35zTFO/XydKgmvIGcWL9FbgMlXb7Vcf0nBoG945\nbiz0NVc2paraIhJXc608xbYF3qLmtAE1MVBI0ORyRdBHNxY024l/6H6SH60Ed+uI\nM4ysp5ourY6Vj+DLwpdRiI9YDjqYAQDIUmhNxJP7XPhOMoZI6st+xZQBM34ic/bv\nAMSJm9OZphSp3+qXVkFZztr2mxD2EZSJJLYxi8BCdgM2qhazalbcJ6zDKHCZWVWm\n8RRxDGldyMb/237JxETzP40tAlzOZDmBAbUgEnurDJ93RVDIE3rbZUshwgeQd18a\nem096mWgvB1AIKYgsTAR3pw+V19YWAjq/glP6fz8wQKBgQD/oQq+ukKF0PRgBeM5\ngeTjSwsdGppQLmf5ndujvoiz/TpdjDEPu6R8kigQr1rG2t4K/yfdZoI8RdmJD1al\n3Q7N9hofooSy4rj6E3txzWZCHJjHad2cnCp/O26HiReGAl7wTcfTmNdiFHhZQzm5\nJBkvWAiwuvQMNfEbnXxw6/vIDwKBgQDH7fX8gsc77JLvAWgp1MaQN/sbqVb6JeT1\nFQfR8E/WFCSmzQBtNzd5KgYuCeelwr/8DyYytvN2BzCYZXp73gI1jF3YlW5jVn74\nOY6TwQ095digwo6Z0yuxopdIOApKgAkL9PRKgNrqAf3NAyMua6lOGifzjDojC3KU\nfylQmxMn4wKBgHp2B9O/H0dEBw5JQ8W0+JX6yWQz7mEjGiR2/1W+XXb8hQ1zr709\nw1r6Gb+EghRpnZ3fBpYGGbYOMFx8wKHM+N6qW3F0ReX8v2juFGE8aRSa5oYBrWzt\nU16Idjbv8hj84cZ1PJmdyvDtpYn9rpWHOZl4rxEbPvbqkIsOMyNVqdT5AoGAOSge\nmwIIU2le2FVeohbibXiToWTYKMuMmURZ5/r72AgKMmWJKbAPe+Q3wBG01/7FRBpQ\noU8Ma0HC8s6QJbliiEyIx9JwrJWd1vkdecBHONrtA4ibm/5zD2WcOllLF+FitLhi\n3qnX6+6F0IaFGFBPJrTzlv0P4dTz/OAdv52V7GECgYEA2TttOKBAqWllgOaZOkql\nLVMJVmgR7s6tLi1+cEP8ZcapV9aRbRzTAKXm4f8AEhtlG9F9kCOvHYCYGi6JaiWJ\nZkHjeex3T+eE6Di6y5Bm/Ift5jtVhJ4jCVwHOKTMej79NPUFTJfv8hCo29haBDv6\nRXFrv+T21KCcw8k3sJeJWWQ=\n-----END PRIVATE KEY-----";
12654
+ const privateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDAARz+hmBgi8pJ\nQb8LeY41gtHhk+ACMwRfhsn7GqpqRQNG2qU0755mzZuVDUqjQMGSo8THJB7O+OJs\nflbZRkFXlFoFOVNw1UpNOgwEQZ6wB9oRwzepTJAfF1sVhm/o/ixvXh1zDFNDy6yZ\npXyiiJHUVxqyjllZhxnwdvjoVtDs6hW6awG09bB9nh/TTejlUKXoAgzqVwu/1QMu\nUVViET495elEe19aUarEy+oL2iKeXCEvqda/pWNBdbieFyJvvZ08HN8dPuT88wq2\njZLEAth1vrwQ2IAa4ktaLcBQdLJgIkrbDvAiVZ8lQAjS/bq5vXQikTGvoPlC5bbn\nvuOM/3eLAgMBAAECggEAVZ+peHAghq2QVj71nX5lxsNCKaCyYwixSJBpfouTt7Rz\nE6PpzMOXFi1W1o+I22jDakuSM2SOQKqI/u0QefB0r0O/KVk5NrZHXk0mkrdYtxOp\nUgaGyf8UvmjB+8VqHrNKyZdk9qtmbnNj01kTTcAtmE4H39zPR7eR/8Rul94vaZbs\nwCnKJS3mLT3JxyGug6lxanveKkjG+CKC1nJQYWaxCJxaFSzbwXQPvDhB+TvrIbee\npd5v4EAyEJohpr+T9oDGGJkb/KARBZCtwLyB976PKJwwBA8MRVL1i5QwawuMiMq5\nUtnOnbGKtCeFzaLbNU0Qi8bqyims84EQxC6DOu1fkQKBgQDdvsoBsEhsOXV7hlIJ\naEd0eSJZVkdqimxH8uGoMM2FeNaOrcB6yBXqTSP0R3OIyf8eaY6yjRvP30ZNXcll\n/gD3O1Mu6YmWQdt1W2WA6pKOsUuPXasf0pdOF7IiFZKlSabz5YHXFqwVuqm8loaj\nsXel3YWqPVdHiankE7tz+3ssnQKBgQDdqi4TNdD1MdEpihx19jr0QjUiXW3939FK\nqp30HESPEGDGQzXdmJgif9HhZb+cJSuWaHEbjgBrYahvgCF+y6LbEpOD+D/dmT+s\nDEAQaR84sah6dokwPjV8fjBSrcVFjCS+doxv0d3p/9OUEeyUhFrY03nxtIEYkLIE\n/Zvn37b4RwKBgQCLENVFe9XfsaVhQ5r9dV2iyTlmh7qgMZG5CbTFs12hQGhm8McO\n+Z7s41YSJCFr/yq1WwP4LJDtrBw99vyQr1zRsG35tNLp3gGRNzGQSQyC2uQFVHw2\np+7mNewsfhUK/gbrXNsyFnDz6635rPlhfbII3sWuP2wWXFqkxE9CbMwR7QKBgQC6\nawDMzxmo2/iYArrkyevSuEuPVxvFwpF1RgAI6C0QVCnPE38dmdN4UB7mfHekje4W\nVEercMURidPp0cxZolCYBQtilUjAyL0vqC3In1/Ogjq6oy3FEMxSop1pKxMY5j+Q\nnoqFD+6deLUrddeNH7J3X4LSr4dSbX4JjG+tlgt+yQKBgQCuwTL4hA6KqeInQ0Ta\n9VQX5Qr8hFlqJz1gpymi/k63tW/Ob8yedbg3WWNWyShwRMFYyY9S81ITFWM95uL6\nvF3x9rmRjwElJw9PMwVu6dmf/CO0Z1wzXSp2VVD12gbrUD/0/d7MUoJ9LgC8X8f/\nn0txLHYGHbx+nf95+JUg6lV3hg==\n-----END PRIVATE KEY-----";
12630
12655
  /*
12631
12656
  * The crypto algorithm used for importing key and signing string
12632
12657
  */
@@ -13054,6 +13079,21 @@ const productTagLinkedObject = (productTag) => {
13054
13079
  return Object.assign(Object.assign({}, productTag), { product: internalProduct ? productLinkedObject(internalProduct) : undefined });
13055
13080
  };
13056
13081
 
13082
+ const fileLinkedObject = (file) => {
13083
+ var _a, _b, _c;
13084
+ if (!file)
13085
+ return file;
13086
+ if (file.type === 'video') {
13087
+ const video = (_b = (_a = file.attributes) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.video;
13088
+ return Object.assign(Object.assign({}, file), { getWidth: () => { var _a; return (_a = video === null || video === void 0 ? void 0 : video.width) !== null && _a !== void 0 ? _a : 0; }, getHeight: () => { var _a; return (_a = video === null || video === void 0 ? void 0 : video.height) !== null && _a !== void 0 ? _a : 0; }, getRotation: () => { var _a; return (_a = video === null || video === void 0 ? void 0 : video.rotation) !== null && _a !== void 0 ? _a : 0; } });
13089
+ }
13090
+ if (file.type === 'image') {
13091
+ const metadata = (_c = file.attributes) === null || _c === void 0 ? void 0 : _c.metadata;
13092
+ return Object.assign(Object.assign({}, file), { getWidth: () => { var _a; return (_a = metadata === null || metadata === void 0 ? void 0 : metadata.width) !== null && _a !== void 0 ? _a : 0; }, getHeight: () => { var _a; return (_a = metadata === null || metadata === void 0 ? void 0 : metadata.height) !== null && _a !== void 0 ? _a : 0; } });
13093
+ }
13094
+ return file;
13095
+ };
13096
+
13057
13097
  const postLinkedObject = (post) => {
13058
13098
  return shallowClone(post, {
13059
13099
  childrenPosts: post.children
@@ -13111,19 +13151,19 @@ const postLinkedObject = (post) => {
13111
13151
  getImageInfo() {
13112
13152
  var _a, _b;
13113
13153
  return isAmityImagePost(post)
13114
- ? (_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.fileId])) === null || _b === void 0 ? void 0 : _b.data
13154
+ ? fileLinkedObject((_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.fileId])) === null || _b === void 0 ? void 0 : _b.data)
13115
13155
  : undefined;
13116
13156
  },
13117
13157
  getVideoInfo() {
13118
13158
  var _a, _b, _c;
13119
13159
  return isAmityVideoPost(post)
13120
- ? (_c = pullFromCache(['file', 'get', (_b = (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.videoFileId) === null || _b === void 0 ? void 0 : _b.original])) === null || _c === void 0 ? void 0 : _c.data
13160
+ ? fileLinkedObject((_c = pullFromCache(['file', 'get', (_b = (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.videoFileId) === null || _b === void 0 ? void 0 : _b.original])) === null || _c === void 0 ? void 0 : _c.data)
13121
13161
  : undefined;
13122
13162
  },
13123
13163
  getVideoThumbnailInfo() {
13124
13164
  var _a, _b;
13125
13165
  return isAmityVideoPost(post)
13126
- ? (_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.thumbnailFileId])) === null || _b === void 0 ? void 0 : _b.data
13166
+ ? fileLinkedObject((_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.thumbnailFileId])) === null || _b === void 0 ? void 0 : _b.data)
13127
13167
  : undefined;
13128
13168
  },
13129
13169
  getFileInfo() {
@@ -14114,6 +14154,7 @@ const eventLinkedObject = (event) => {
14114
14154
  };
14115
14155
 
14116
14156
  const LinkedObject = {
14157
+ file: fileLinkedObject,
14117
14158
  ad: adLinkedObject,
14118
14159
  comment: commentLinkedObject,
14119
14160
  post: postLinkedObject,
@@ -15461,7 +15502,7 @@ const getFile = async (fileId) => {
15461
15502
  if (client.cache)
15462
15503
  ingestInCache({ files: [data] }, { cachedAt });
15463
15504
  return {
15464
- data,
15505
+ data: fileLinkedObject(data),
15465
15506
  cachedAt,
15466
15507
  };
15467
15508
  };
@@ -15488,7 +15529,7 @@ getFile.locally = (fileId) => {
15488
15529
  if (!cached)
15489
15530
  return;
15490
15531
  return {
15491
- data: cached.data,
15532
+ data: fileLinkedObject(cached.data),
15492
15533
  cachedAt: cached.cachedAt,
15493
15534
  };
15494
15535
  };
@@ -15625,7 +15666,7 @@ const uploadVideo = async (formData, feedType, onProgress) => {
15625
15666
  if (client.cache)
15626
15667
  ingestInCache({ files: data }, { cachedAt });
15627
15668
  return {
15628
- data,
15669
+ data: data.map(file => fileLinkedObject(file)),
15629
15670
  cachedAt,
15630
15671
  };
15631
15672
  };
@@ -15686,7 +15727,7 @@ const uploadImage = async (formData, onProgress, altText) => {
15686
15727
  if (client.cache)
15687
15728
  ingestInCache({ files: data }, { cachedAt });
15688
15729
  return {
15689
- data,
15730
+ data: data.map(file => fileLinkedObject(file)),
15690
15731
  cachedAt,
15691
15732
  };
15692
15733
  };
@@ -16649,6 +16690,39 @@ removeReaction.optimistically = (referenceType, referenceId, reactionName) => {
16649
16690
  return !((_d = reaction === null || reaction === void 0 ? void 0 : reaction.myReactions) === null || _d === void 0 ? void 0 : _d.includes(reactionName));
16650
16691
  };
16651
16692
 
16693
+ /**
16694
+ * Resolves the id of the parent post that a child-post payload belongs to.
16695
+ *
16696
+ * `parentId` and `parentPostId` name the same post, but a payload does not
16697
+ * always carry both — and the delete/create child handlers decide *whether* a
16698
+ * post is a child from `parentId` while reading the cache with `parentPostId`.
16699
+ * When only the former is set that read builds `['post', 'get', undefined]`,
16700
+ * which cannot match anything and, when the value is null, breaks key encoding
16701
+ * outright. Reading whichever id is present keeps the decision and the lookup
16702
+ * on the same post.
16703
+ *
16704
+ * @param post the child post payload
16705
+ * @returns the parent post id, or undefined when the payload carries neither
16706
+ *
16707
+ * @category Post Events
16708
+ * @hidden
16709
+ */
16710
+ const resolveParentPostId = (post) => {
16711
+ if (post.parentPostId)
16712
+ return post.parentPostId;
16713
+ if (post.parentId) {
16714
+ // Diagnostic: we do not know yet whether the server actually emits this
16715
+ // shape. If this warning is never seen in practice the fallback can go.
16716
+ console.warn('[AmitySDK] post payload carries `parentId` without `parentPostId` — falling back to `parentId`', {
16717
+ postId: post.postId,
16718
+ parentId: post.parentId,
16719
+ parentPostId: post.parentPostId,
16720
+ });
16721
+ return post.parentId;
16722
+ }
16723
+ return undefined;
16724
+ };
16725
+
16652
16726
  const processDeleteChildPost = (payload) => {
16653
16727
  var _a;
16654
16728
  const post = payload.posts[0];
@@ -16660,7 +16734,10 @@ const processDeleteChildPost = (payload) => {
16660
16734
  }
16661
16735
  else {
16662
16736
  // child post in a parent post
16663
- const parentPost = (_a = pullFromCache(['post', 'get', post.parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16737
+ const parentPostId = resolveParentPostId(post);
16738
+ if (!parentPostId)
16739
+ return;
16740
+ const parentPost = (_a = pullFromCache(['post', 'get', parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16664
16741
  if (!parentPost)
16665
16742
  return;
16666
16743
  pushToCache(['post', 'get', parentPost.postId], Object.assign(Object.assign({}, parentPost), { children: parentPost.children.filter(childId => childId !== post.postId) }));
@@ -16671,7 +16748,10 @@ const processCreateChildPost = (payload) => {
16671
16748
  const post = payload.posts[0];
16672
16749
  if (!post.parentId)
16673
16750
  return;
16674
- const parentPost = (_a = pullFromCache(['post', 'get', post.parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16751
+ const parentPostId = resolveParentPostId(post);
16752
+ if (!parentPostId)
16753
+ return;
16754
+ const parentPost = (_a = pullFromCache(['post', 'get', parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16675
16755
  if (!parentPost)
16676
16756
  return;
16677
16757
  pushToCache(['post', 'get', parentPost.postId], Object.assign(Object.assign({}, parentPost), { children: [...new Set([post.postId, ...parentPost.children])] }));