dcl-catalyst-client 22.0.0 → 22.0.1-38482794215.commit-a4a4e71

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.
Files changed (34) hide show
  1. package/README.md +47 -0
  2. package/dist/client/CatalystClient.d.ts.map +1 -1
  3. package/dist/client/CatalystClient.js +2 -1
  4. package/dist/client/CatalystClient.js.map +1 -1
  5. package/dist/client/ContentClient.d.ts +10 -2
  6. package/dist/client/ContentClient.d.ts.map +1 -1
  7. package/dist/client/ContentClient.js +500 -10
  8. package/dist/client/ContentClient.js.map +1 -1
  9. package/dist/client/index.d.ts +1 -0
  10. package/dist/client/index.d.ts.map +1 -1
  11. package/dist/client/index.js +6 -0
  12. package/dist/client/index.js.map +1 -1
  13. package/dist/client/types.d.ts +75 -0
  14. package/dist/client/types.d.ts.map +1 -1
  15. package/dist/client/utils/batching.d.ts +20 -0
  16. package/dist/client/utils/batching.d.ts.map +1 -0
  17. package/dist/client/utils/batching.js +39 -0
  18. package/dist/client/utils/batching.js.map +1 -0
  19. package/dist/client/utils/errors.d.ts +43 -0
  20. package/dist/client/utils/errors.d.ts.map +1 -0
  21. package/dist/client/utils/errors.js +66 -0
  22. package/dist/client/utils/errors.js.map +1 -0
  23. package/dist/client/utils/upload-progress.d.ts +57 -0
  24. package/dist/client/utils/upload-progress.d.ts.map +1 -0
  25. package/dist/client/utils/upload-progress.js +246 -0
  26. package/dist/client/utils/upload-progress.js.map +1 -0
  27. package/dist/contracts-snapshots/data.d.ts.map +1 -1
  28. package/dist/contracts-snapshots/data.js +7 -1
  29. package/dist/contracts-snapshots/data.js.map +1 -1
  30. package/dist/index.d.ts +4 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +9 -0
  33. package/dist/index.js.map +1 -1
  34. package/package.json +2 -2
package/README.md CHANGED
@@ -15,3 +15,50 @@ npm install dcl-catalyst-client
15
15
  ### Examples
16
16
 
17
17
  Please check the [examples repository](https://github.com/decentraland/catalyst-client-examples)
18
+
19
+ ### Partial (batched) deployments
20
+
21
+ For entities too large to upload in a single request, use `deployPartial`. It splits the content into
22
+ size-bounded batches and uploads them across several `POST /entities` requests; the entity only becomes
23
+ live once the server has all of it (the server finalizes automatically on the completing request).
24
+
25
+ ```ts
26
+ const result = await client.deployPartial(
27
+ { entityId, authChain, files },
28
+ {
29
+ // default: 100 MiB per request — requests larger than ~200MB are timed out by the
30
+ // infrastructure in front of the content servers, so keep a margin under that.
31
+ maxBatchSizeBytes: 100 * 1024 * 1024,
32
+ concurrency: 2, // default: 2 parallel batch uploads (after the first)
33
+ maxResumeAttempts: 3, // default: 3 — resumes on network/5xx failures
34
+ onProgress: ({ uploadedBytes, totalBytes }) => console.log(`${uploadedBytes}/${totalBytes}`),
35
+ // byte-level progress, also accepted by deploy()
36
+ onUploadProgress: ({ phase, sentBytes, totalBytes }) => console.log(phase, `${sentBytes}/${totalBytes}`)
37
+ }
38
+ )
39
+ console.log(result.creationTimestamp)
40
+ ```
41
+
42
+ Notes:
43
+
44
+ - Use the regular `deploy()` for normal-sized deployments; it accepts `onUploadProgress` too.
45
+ - `onUploadProgress` reports file bytes handed to the HTTP client across every request, in the phases
46
+ `checking` (asking the server which files it has), `uploading` and `processing` (every scheduled byte
47
+ sent, waiting for the server). Events are throttled to one every 200 ms, plus every phase change and the
48
+ latest count at the end of each window. A resolved deployment ends with `processing` and every byte sent.
49
+ Re-sent content (retries, the server's missing list) grows `totalBytes`.
50
+ - By default a request's bytes count when its response arrives. For live progress, create the client with
51
+ `streamingUploads: true`: on Node the body is then streamed with an exact `Content-Length`, at the cost of
52
+ memory: each request in flight holds its form plus an encoded copy of it, about twice the batch size, so
53
+ `deployPartial` with the default `concurrency` (2) and 100 MiB batches holds up to ~400 MiB on top of the
54
+ scene's files. Only set it when the fetcher passes the body to the global
55
+ (undici) `fetch`, forwards the `duplex` option and headers unchanged, and never retries a POST with the
56
+ same options (the stream can only be read once). `@dcl/fetch-component` qualifies; node-fetch does not.
57
+ - The target server must support partial deployments. Against an older server that does not, a
58
+ single-batch deployment still succeeds, but a multi-batch one rejects with
59
+ `PartialDeploymentNotSupportedError` — fall back to `deploy()` in that case.
60
+ - A validation failure on the finalizing request (e.g. exceeding the size budget) rejects with
61
+ `PartialDeploymentValidationError`.
62
+ - Files are never split across requests: a single file larger than the batch cap is sent alone in its
63
+ own request. Per-file server caps still apply to it, and a request beyond ~200MB may be timed out by
64
+ the infrastructure regardless of the configured cap.
@@ -1 +1 @@
1
- {"version":3,"file":"CatalystClient.d.ts","sourceRoot":"","sources":["../../src/client/CatalystClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,iBAAiB,CAAA;AACpE,OAAO,EAAE,aAAa,EAAuB,MAAM,iBAAiB,CAAA;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGvC,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAA;IAC5B,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAA;IAC1C,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAA;CAC3C,CAAA;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,CA4D3E"}
1
+ {"version":3,"file":"CatalystClient.d.ts","sourceRoot":"","sources":["../../src/client/CatalystClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,iBAAiB,CAAA;AACpE,OAAO,EAAE,aAAa,EAAuB,MAAM,iBAAiB,CAAA;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGvC,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAA;IAC5B,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAA;IAC1C,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAA;CAC3C,CAAA;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,CA6D3E"}
@@ -28,7 +28,8 @@ function createCatalystClient(options) {
28
28
  }
29
29
  contentClient = (0, ContentClient_1.createContentClient)({
30
30
  url: about.content.publicUrl,
31
- fetcher
31
+ fetcher,
32
+ streamingUploads: options.streamingUploads
32
33
  });
33
34
  return contentClient;
34
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CatalystClient.js","sourceRoot":"","sources":["../../src/client/CatalystClient.ts"],"names":[],"mappings":";;;AAAA,mDAAoE;AACpE,mDAAoE;AAGpE,2CAA4C;AAQ5C,SAAgB,oBAAoB,CAAC,OAAsB;IACzD,MAAM,WAAW,GAAG,IAAA,oBAAW,EAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAE3B,IAAI,aAAa,GAA8B,SAAS,CAAA;IACxD,IAAI,aAAa,GAA8B,SAAS,CAAA;IACxD,IAAI,KAAK,GAAsB,SAAS,CAAA;IAExC,KAAK,UAAU,UAAU;QACvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAA;QAC1D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QAEpC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;SAC1C;QAED,KAAK,GAAG,QAAQ,CAAA;QAEhB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,UAAU,gBAAgB;QAC7B,IAAI,aAAa,EAAE;YACjB,OAAO,aAAa,CAAA;SACrB;QAED,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,MAAM,UAAU,EAAE,CAAA;SAC3B;QAED,aAAa,GAAG,IAAA,mCAAmB,EAAC;YAClC,GAAG,EAAE,KAAK,CAAC,OAAQ,CAAC,SAAS;YAC7B,OAAO;SACR,CAAC,CAAA;QAEF,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,KAAK,UAAU,gBAAgB;QAC7B,IAAI,aAAa,EAAE;YACjB,OAAO,aAAa,CAAA;SACrB;QAED,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,MAAM,UAAU,EAAE,CAAA;SAC3B;QAED,aAAa,GAAG,IAAA,mCAAmB,EAAC;YAClC,GAAG,EAAE,KAAK,CAAC,OAAQ,CAAC,SAAS;YAC7B,OAAO;SACR,CAAC,CAAA;QAEF,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,OAAO;QACL,UAAU;QACV,gBAAgB;QAChB,gBAAgB;KACjB,CAAA;AACH,CAAC;AA5DD,oDA4DC"}
1
+ {"version":3,"file":"CatalystClient.js","sourceRoot":"","sources":["../../src/client/CatalystClient.ts"],"names":[],"mappings":";;;AAAA,mDAAoE;AACpE,mDAAoE;AAGpE,2CAA4C;AAQ5C,SAAgB,oBAAoB,CAAC,OAAsB;IACzD,MAAM,WAAW,GAAG,IAAA,oBAAW,EAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAE3B,IAAI,aAAa,GAA8B,SAAS,CAAA;IACxD,IAAI,aAAa,GAA8B,SAAS,CAAA;IACxD,IAAI,KAAK,GAAsB,SAAS,CAAA;IAExC,KAAK,UAAU,UAAU;QACvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAA;QAC1D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QAEpC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;SAC1C;QAED,KAAK,GAAG,QAAQ,CAAA;QAEhB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,UAAU,gBAAgB;QAC7B,IAAI,aAAa,EAAE;YACjB,OAAO,aAAa,CAAA;SACrB;QAED,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,MAAM,UAAU,EAAE,CAAA;SAC3B;QAED,aAAa,GAAG,IAAA,mCAAmB,EAAC;YAClC,GAAG,EAAE,KAAK,CAAC,OAAQ,CAAC,SAAS;YAC7B,OAAO;YACP,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC3C,CAAC,CAAA;QAEF,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,KAAK,UAAU,gBAAgB;QAC7B,IAAI,aAAa,EAAE;YACjB,OAAO,aAAa,CAAA;SACrB;QAED,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,MAAM,UAAU,EAAE,CAAA;SAC3B;QAED,aAAa,GAAG,IAAA,mCAAmB,EAAC;YAClC,GAAG,EAAE,KAAK,CAAC,OAAQ,CAAC,SAAS;YAC7B,OAAO;SACR,CAAC,CAAA;QAEF,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,OAAO;QACL,UAAU;QACV,gBAAgB;QAChB,gBAAgB;KACjB,CAAA;AACH,CAAC;AA7DD,oDA6DC"}
@@ -1,5 +1,5 @@
1
1
  import { Entity } from '@dcl/schemas';
2
- import { ClientOptions, DeploymentData, IFetchComponent, ParallelConfig, RequestOptions } from './types';
2
+ import { ClientOptions, DeploymentData, IFetchComponent, ParallelConfig, PartialDeploymentOptions, PartialDeploymentResult, RequestOptions, UploadProgressOptions } from './types';
3
3
  export type AvailableContentResult = {
4
4
  cid: string;
5
5
  available: boolean;
@@ -21,7 +21,15 @@ export type ContentClient = {
21
21
  /**
22
22
  * Deploys an entity to the content server.
23
23
  */
24
- deploy(deployData: DeploymentData, options?: RequestOptions): Promise<unknown>;
24
+ deploy(deployData: DeploymentData, options?: RequestOptions & UploadProgressOptions): Promise<unknown>;
25
+ /**
26
+ * Deploys an entity across multiple requests (partial deployment, ADR-325): content files are split into
27
+ * size-bounded batches and uploaded in several `POST /entities` requests, and the entity only becomes
28
+ * live once the server has all of it. Useful for scenes too large for a single request. The server
29
+ * must support the partial-deployment protocol; against one that doesn't, if everything fits in a
30
+ * single batch this still succeeds, otherwise it rejects with {@link PartialDeploymentNotSupportedError}.
31
+ */
32
+ deployPartial(deployData: DeploymentData, options?: RequestOptions & PartialDeploymentOptions): Promise<PartialDeploymentResult>;
25
33
  /**
26
34
  * Checks if a pointer is consistent across multiple content servers
27
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ContentClient.d.ts","sourceRoot":"","sources":["../../src/client/ContentClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAIxG,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,OAAO,CAAA;CACnB,EAAE,CAAA;AAEH,MAAM,MAAM,aAAa,GAAG;IAC1B,gCAAgC,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAEzG,0BAA0B;IAC1B,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACxF,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC9G,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACtG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAE/G,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAE7F;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAE9E;;OAEG;IACH,uBAAuB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE,GACvD,OAAO,CAAC;QACT,YAAY,EAAE,OAAO,CAAA;QACrB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;QAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;KAC5B,CAAC,CAAA;CACH,CAAA;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5D,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAoQzE"}
1
+ {"version":3,"file":"ContentClient.d.ts","sourceRoot":"","sources":["../../src/client/ContentClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EACL,aAAa,EACb,cAAc,EAEd,eAAe,EACf,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EACvB,cAAc,EAEd,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAiHhB,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,OAAO,CAAA;CACnB,EAAE,CAAA;AAEH,MAAM,MAAM,aAAa,GAAG;IAC1B,gCAAgC,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAEzG,0BAA0B;IAC1B,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACxF,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC9G,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACtG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAE/G,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAE7F;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEtG;;;;;;OAMG;IACH,aAAa,CACX,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,cAAc,GAAG,wBAAwB,GAClD,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAEnC;;OAEG;IACH,uBAAuB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,GAAG;QAAE,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE,GACvD,OAAO,CAAC;QACT,YAAY,EAAE,OAAO,CAAA;QACrB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;QAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;KAC5B,CAAC,CAAA;CACH,CAAA;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5D,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAwsBzE"}