@nitida/sdk 0.32.0 → 0.32.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitida/sdk",
3
- "version": "0.32.0",
3
+ "version": "0.32.2",
4
4
  "description": "nitida — the media SDK: browser and mobile upload with resume, client-side compression, on-the-fly transforms behind a CDN, video transcode, HLS ladders and AI proxies. Multi-tenant.",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -73,7 +73,7 @@
73
73
  },
74
74
  "peerDependencies": {
75
75
  "react": ">=18",
76
- "@nitida/asset-client": "^0.20.2",
76
+ "@nitida/asset-client": "^0.20.3",
77
77
  "@nitida/asset-compressor-web": "^0.6.1",
78
78
  "@nitida/asset-compressor-native": "^0.2.1"
79
79
  },
package/src/index.ts CHANGED
@@ -1166,6 +1166,45 @@ export type UploadResult = {
1166
1166
  * privado, servida sin una queja, que después da 404.
1167
1167
  */
1168
1168
  visibility: "public" | "private";
1169
+ /**
1170
+ * La cadena compacta de variantes que EXISTEN (`"lmoqs"`, `"o"`, …).
1171
+ *
1172
+ * ⭐⭐ EL QUINTO DEFECTO DE LA MISMA FAMILIA
1173
+ *
1174
+ * `getAssetUrl` **cambia de estrategia según este campo**. Con él, un preset
1175
+ * de imagen ausente cae a `/t/…width=N/` y el borde lo genera al vuelo:
1176
+ * **200**. Sin él, el builder no sabe qué existe, asume que todo existe, y
1177
+ * devuelve la clave de variante — que da **404 en silencio**.
1178
+ *
1179
+ * Medido 2026-08-25 sobre un asset con `presets: "lmoqs"`:
1180
+ *
1181
+ * sin `presets` → /f/v/<sha>-x.webp 404
1182
+ * con `presets` → /t/format=webp,width=3840/<sha>.webp 200
1183
+ *
1184
+ * `UploadResult` no lo llevaba, así que `getAssetUrl(up, "xl")` —el patrón
1185
+ * que enseña toda la doc— caía del lado malo.
1186
+ *
1187
+ * ⚠️ Es el mismo error que `sha`, `mime` y `oext`, por cuarta vez: **un tipo
1188
+ * de retorno que omite lo que la próxima llamada necesita convierte la
1189
+ * llamada obvia en un 404 silencioso.** Y el guarda que escribí para esto
1190
+ * fijaba los tres *hints* de `original`; `presets` no es un hint, es lo que
1191
+ * gobierna el fallback, así que quedaba afuera de lo que el guarda miraba.
1192
+ */
1193
+ presets: string;
1194
+ /**
1195
+ * La lista de variantes tal como el servidor las guardó.
1196
+ *
1197
+ * ⭐ **La SEXTA instancia del mismo defecto, y la primera que encontró un
1198
+ * guarda en vez de un usuario.**
1199
+ *
1200
+ * Para `original`, `getAssetUrl` prefiere la URL almacenada sobre cualquier
1201
+ * derivación — porque ESA es la clave real, y derivarla del mime es una
1202
+ * suposición que ya falló dos veces (`-o.bin`, `-o.jpeg`). Sin este campo, el
1203
+ * resultado de `upload()` obligaba a suponer.
1204
+ *
1205
+ * Sale gratis: `upload()` ya espera el DTO, que la trae.
1206
+ */
1207
+ variants: AssetVariant[];
1169
1208
  };
1170
1209
 
1171
1210
  async function computeSha256(
@@ -1718,6 +1757,8 @@ export class NitidaClient {
1718
1757
  // DTO does carry `sha` today — but relying on that is how the other
1719
1758
  // branch broke, and the value we hashed ourselves is authoritative.
1720
1759
  visibility: existing.visibility ?? "public",
1760
+ presets: existing.presets ?? "",
1761
+ variants: existing.variants ?? [],
1721
1762
  cdnUrl: this.publicUrlOrNull(
1722
1763
  { ...existing, sha: sha.slice(0, 16) },
1723
1764
  this.bestPresetForAsset(existing, mime),
@@ -1810,6 +1851,8 @@ export class NitidaClient {
1810
1851
  // `defaultPresetForMime`, which is a guess made before anything exists.
1811
1852
  // Guessing was safe only while this branch never ran.
1812
1853
  visibility: settled.visibility ?? "public",
1854
+ presets: settled.presets ?? "",
1855
+ variants: settled.variants ?? [],
1813
1856
  cdnUrl: this.publicUrlOrNull(
1814
1857
  { ...settled, sha: short },
1815
1858
  this.bestPresetForAsset(settled, mime),
@@ -1867,6 +1910,8 @@ export class NitidaClient {
1867
1910
  mime: final.mime ?? mime,
1868
1911
  oext: final.oext ?? null,
1869
1912
  visibility: final.visibility ?? "public",
1913
+ presets: final.presets ?? "",
1914
+ variants: final.variants ?? [],
1870
1915
  cdnUrl: this.publicUrlOrNull(final, this.bestPresetForAsset(final, mime)),
1871
1916
  };
1872
1917
  }