@inweb/client 26.6.4 → 26.6.6

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.
@@ -250,14 +250,17 @@ export declare class Assembly extends Endpoint {
250
250
  * descriptions, or geometry data.
251
251
  *
252
252
  * @param dataId - Resource file name.
253
- * @param ranges - A range of resource file contents to download.
254
- * @param requestId - Request ID for download progress callback.
253
+ * @param ranges - A ranges of resource file contents to download. See
254
+ * {@link https://developer.mozilla.org/docs/Web/HTTP/Guides/Range_requests | HTTP range requests} for
255
+ * more details.
256
+ * @param requestId - Specify a non-empty `requestId` to append the `?requestId=` search parameter to
257
+ * the server request. If specified, server-side caching may not work.
255
258
  * @param onProgress - Download progress callback.
256
259
  * @param signal - An
257
260
  * {@link https://developer.mozilla.org/docs/Web/API/AbortController | AbortController} signal. Allows
258
261
  * to communicate with a fetch request and abort it if desired.
259
262
  */
260
- downloadResourceRange(dataId: string, requestId: number, ranges: Array<{
263
+ downloadResourceRange(dataId: string, requestId: number | string, ranges: Array<{
261
264
  begin: number;
262
265
  end: number;
263
266
  requestId: number;
package/lib/Api/File.d.ts CHANGED
@@ -375,14 +375,17 @@ export declare class File extends Endpoint {
375
375
  * contain model scene descriptions, or geometry data, or exported files.
376
376
  *
377
377
  * @param dataId - Resource file name.
378
- * @param ranges - A range of resource file contents to download.
379
- * @param requestId - Request ID for download progress callback.
378
+ * @param ranges - A ranges of resource file contents to download. See
379
+ * {@link https://developer.mozilla.org/docs/Web/HTTP/Guides/Range_requests | HTTP range requests} for
380
+ * more details.
381
+ * @param requestId - Specify a non-empty `requestId` to append the `?requestId=` search parameter to
382
+ * the server request. If specified, server-side caching may not work.
380
383
  * @param onProgress - Download progress callback.
381
384
  * @param signal - An
382
385
  * {@link https://developer.mozilla.org/docs/Web/API/AbortController | AbortController} signal. Allows
383
386
  * to communicate with a fetch request and abort it if desired.
384
387
  */
385
- downloadResourceRange(dataId: string, requestId: number, ranges: Array<{
388
+ downloadResourceRange(dataId: string, requestId: number | string, ranges: Array<{
386
389
  begin: number;
387
390
  end: number;
388
391
  requestId: number;
@@ -11,7 +11,7 @@ export declare class HttpClient implements IHttpClient {
11
11
  delete(relativePath: string, init?: RequestInit): Promise<Response>;
12
12
  uploadFile(relativePath: string, file: File, onProgress?: (progress: number) => void, init?: RequestInit): Promise<XMLHttpRequest>;
13
13
  downloadFile(relativePath: string, onProgress?: (progress: number, chunk: Uint8Array) => void, init?: RequestInit): Promise<Response>;
14
- downloadFileRange(relativePath: string, reserved: number, ranges: Array<{
14
+ downloadFileRange(relativePath: string, reserved: number | string, ranges: Array<{
15
15
  begin: number;
16
16
  end: number;
17
17
  requestId: number;
@@ -89,12 +89,14 @@ export interface IHttpClient {
89
89
  *
90
90
  * @param relativePath - Download endpoint relative path.
91
91
  * @param reserved - Reserved, do not use.
92
- * @param ranges - A ranges of resource file contents to download.
92
+ * @param ranges - A ranges of resource file contents to download. See
93
+ * {@link https://developer.mozilla.org/docs/Web/HTTP/Guides/Range_requests | HTTP range requests} for
94
+ * more details.
93
95
  * @param onProgress - Download progress callback.
94
96
  * @param init - A set of options that can be used to configure a fetch request. See
95
97
  * {@link https://developer.mozilla.org/docs/Web/API/RequestInit | RequestInit} for more details.
96
98
  */
97
- downloadFileRange(relativePath: string, reserved: number, ranges: Array<{
99
+ downloadFileRange(relativePath: string, reserved: number | string, ranges: Array<{
98
100
  begin: number;
99
101
  end: number;
100
102
  requestId: number;
@@ -146,8 +146,11 @@ export declare class Model extends Endpoint {
146
146
  * or geometry data.
147
147
  *
148
148
  * @param dataId - Resource file name.
149
- * @param ranges - A range of resource file contents to download.
150
- * @param requestId - Request ID for download progress callback.
149
+ * @param ranges - A ranges of resource file contents to download. See
150
+ * {@link https://developer.mozilla.org/docs/Web/HTTP/Guides/Range_requests | HTTP range requests} for
151
+ * more details.
152
+ * @param requestId - Specify a non-empty `requestId` to append the `?requestId=` search parameter to
153
+ * the server request. If specified, server-side caching may not work.
151
154
  * @param onProgress - Download progress callback.
152
155
  * @param signal - An
153
156
  * {@link https://developer.mozilla.org/docs/Web/API/AbortController | AbortController} signal. Allows
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inweb/client",
3
- "version": "26.6.4",
3
+ "version": "26.6.6",
4
4
  "description": "JavaScript REST API client for the Open Cloud Server",
5
5
  "homepage": "https://cloud.opendesign.com/docs/index.html",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -26,6 +26,6 @@
26
26
  "docs": "typedoc"
27
27
  },
28
28
  "dependencies": {
29
- "@inweb/eventemitter2": "~26.6.4"
29
+ "@inweb/eventemitter2": "~26.6.6"
30
30
  }
31
31
  }
@@ -435,8 +435,11 @@ export class Assembly extends Endpoint {
435
435
  * descriptions, or geometry data.
436
436
  *
437
437
  * @param dataId - Resource file name.
438
- * @param ranges - A range of resource file contents to download.
439
- * @param requestId - Request ID for download progress callback.
438
+ * @param ranges - A ranges of resource file contents to download. See
439
+ * {@link https://developer.mozilla.org/docs/Web/HTTP/Guides/Range_requests | HTTP range requests} for
440
+ * more details.
441
+ * @param requestId - Specify a non-empty `requestId` to append the `?requestId=` search parameter to
442
+ * the server request. If specified, server-side caching may not work.
440
443
  * @param onProgress - Download progress callback.
441
444
  * @param signal - An
442
445
  * {@link https://developer.mozilla.org/docs/Web/API/AbortController | AbortController} signal. Allows
@@ -444,14 +447,14 @@ export class Assembly extends Endpoint {
444
447
  */
445
448
  downloadResourceRange(
446
449
  dataId: string,
447
- requestId: number,
450
+ requestId: number | string,
448
451
  ranges: Array<{ begin: number; end: number; requestId: number }>,
449
452
  onProgress?: (progress: number, chunk: Uint8Array, requestId: number) => void,
450
453
  signal?: AbortSignal
451
454
  ): Promise<ArrayBuffer> {
452
455
  return this.httpClient
453
456
  .downloadFileRange(
454
- this.getEndpointPath(`/downloads/${dataId}?requestId=${requestId}`),
457
+ this.getEndpointPath(`/downloads/${dataId}${requestId ? "?requestId=" + requestId : ""}`),
455
458
  requestId,
456
459
  ranges,
457
460
  onProgress,
@@ -54,6 +54,8 @@ export class Endpoint {
54
54
  this.headers = headers;
55
55
  }
56
56
 
57
+ // Internal: append the `?version=` search param to the specified relative path.
58
+
57
59
  appendVersionParam(relativePath: string): string {
58
60
  if (this._useVersion === undefined) return relativePath;
59
61
  const delimiter = relativePath.includes("?") ? "&" : "?";
package/src/Api/File.ts CHANGED
@@ -606,8 +606,11 @@ export class File extends Endpoint {
606
606
  * contain model scene descriptions, or geometry data, or exported files.
607
607
  *
608
608
  * @param dataId - Resource file name.
609
- * @param ranges - A range of resource file contents to download.
610
- * @param requestId - Request ID for download progress callback.
609
+ * @param ranges - A ranges of resource file contents to download. See
610
+ * {@link https://developer.mozilla.org/docs/Web/HTTP/Guides/Range_requests | HTTP range requests} for
611
+ * more details.
612
+ * @param requestId - Specify a non-empty `requestId` to append the `?requestId=` search parameter to
613
+ * the server request. If specified, server-side caching may not work.
611
614
  * @param onProgress - Download progress callback.
612
615
  * @param signal - An
613
616
  * {@link https://developer.mozilla.org/docs/Web/API/AbortController | AbortController} signal. Allows
@@ -615,14 +618,14 @@ export class File extends Endpoint {
615
618
  */
616
619
  downloadResourceRange(
617
620
  dataId: string,
618
- requestId: number,
621
+ requestId: number | string,
619
622
  ranges: Array<{ begin: number; end: number; requestId: number }>,
620
623
  onProgress?: (progress: number, chunk: Uint8Array, requestId: number) => void,
621
624
  signal?: AbortSignal
622
625
  ): Promise<ArrayBuffer> {
623
626
  return this.httpClient
624
627
  .downloadFileRange(
625
- this.getEndpointPath(`/downloads/${dataId}?requestId=${requestId}`),
628
+ this.getEndpointPath(`/downloads/${dataId}${requestId ? "?requestId=" + requestId : ""}`),
626
629
  requestId,
627
630
  ranges,
628
631
  onProgress,
@@ -85,101 +85,87 @@ export class HttpClient implements IHttpClient {
85
85
  });
86
86
  }
87
87
 
88
- // async downloadFile(
89
- // relativePath: string,
90
- // onProgress?: (progress: number, chunk: Uint8Array) => void,
91
- // init: RequestInit = {}
92
- // ): Promise<Response> {
93
- // const response = await this.get(relativePath, init);
94
- // const teedOff = response.body.tee();
95
- // if (onProgress) {
96
- // const contentLength = response.headers.get("Content-Length");
97
- // const total = parseInt(contentLength, 10) || 1;
98
- // let loaded = 0;
99
- // const reader = teedOff[0].getReader();
100
- // reader.read().then(function processChunk({ done, value }) {
101
- // if (done) return;
102
- // loaded += value.length;
103
- // onProgress(loaded / total, value);
104
- // reader.read().then(processChunk);
105
- // });
106
- // }
107
- // return new Response(teedOff[1]);
108
- // }
109
-
110
88
  async downloadFile(
111
89
  relativePath: string,
112
90
  onProgress?: (progress: number, chunk: Uint8Array) => void,
113
91
  init: RequestInit = {}
114
92
  ): Promise<Response> {
115
93
  const response = await this.get(relativePath, init);
94
+ if (!onProgress) return response;
95
+
116
96
  const contentLength = response.headers.get("Content-Length");
117
97
  const total = parseInt(contentLength || "", 10) || 1;
118
- return new Response(
119
- new ReadableStream({
120
- async start(controller) {
121
- const reader = response.body.getReader();
122
- let loaded = 0;
123
- while (true) {
124
- const { done, value } = await reader.read();
125
- if (done) break;
126
- controller.enqueue(value);
127
- loaded += value.length;
128
- if (onProgress) onProgress(loaded / total, value);
129
- }
130
- controller.close();
131
- },
132
- })
133
- );
98
+
99
+ const stream = new ReadableStream({
100
+ async start(controller) {
101
+ const reader = response.body.getReader();
102
+ let loaded = 0;
103
+ while (true) {
104
+ const { done, value } = await reader.read();
105
+ if (done) break;
106
+ controller.enqueue(value);
107
+ loaded += value.length;
108
+ onProgress(loaded / total, value);
109
+ }
110
+ controller.close();
111
+ },
112
+ });
113
+
114
+ return new Response(stream);
134
115
  }
135
116
 
136
117
  async downloadFileRange(
137
118
  relativePath: string,
138
- reserved: number,
119
+ reserved: number | string,
139
120
  ranges: Array<{ begin: number; end: number; requestId: number }>,
140
121
  onProgress?: (progress: number, chunk: Uint8Array, requestId: number) => void,
141
122
  init: RequestInit = {}
142
123
  ): Promise<Response> {
143
- const headers = { ...init.headers };
144
- headers["Range"] = "bytes=" + ranges.map((x) => `${x.begin}-${x.end}`).join(",");
124
+ const headers = {
125
+ ...init.headers,
126
+ Range: "bytes=" + ranges.map((x) => `${x.begin}-${x.end}`).join(","),
127
+ };
145
128
  const response = await this.get(relativePath, { ...init, headers });
129
+ if (!onProgress) return response;
130
+
146
131
  const contentLength = response.headers.get("content-length");
147
132
  const total = parseInt(contentLength || "", 10) || 1;
148
- return new Response(
149
- new ReadableStream({
150
- async start(controller) {
151
- const reader = response.body.getReader();
152
- let loaded = 0;
153
- let rangedIndex = 0;
154
- let rangePos = 0;
155
- while (true) {
156
- const { done, value } = await reader.read();
157
- if (done) break;
158
- controller.enqueue(value);
159
- loaded += value.length;
160
- let chunkLeft = value.length;
161
- let chunkPos = 0;
162
- while (chunkLeft > 0) {
163
- const range = ranges[rangedIndex];
164
- const rangeLeft = range.end - range.begin - rangePos;
165
- if (chunkLeft < rangeLeft) {
166
- const chunk = value.subarray(chunkPos, chunkPos + chunkLeft);
167
- if (onProgress) onProgress(loaded / total, chunk, range.requestId);
168
- rangePos += chunkLeft;
169
- chunkLeft = 0;
170
- } else {
171
- const chunk = value.subarray(chunkPos, chunkPos + rangeLeft);
172
- if (onProgress) onProgress(loaded / total, chunk, range.requestId);
173
- chunkPos += rangeLeft;
174
- chunkLeft -= rangeLeft;
175
- rangedIndex++;
176
- rangePos = 0;
177
- }
133
+
134
+ const stream = new ReadableStream({
135
+ async start(controller) {
136
+ const reader = response.body.getReader();
137
+ let loaded = 0;
138
+ let rangedIndex = 0;
139
+ let rangePos = 0;
140
+ while (true) {
141
+ const { done, value } = await reader.read();
142
+ if (done) break;
143
+ controller.enqueue(value);
144
+ loaded += value.length;
145
+ let chunkLeft = value.length;
146
+ let chunkPos = 0;
147
+ while (chunkLeft > 0) {
148
+ const range = ranges[rangedIndex];
149
+ const rangeLeft = range.end - range.begin + 1 - rangePos;
150
+ if (chunkLeft < rangeLeft) {
151
+ const chunk = value.subarray(chunkPos, chunkPos + chunkLeft);
152
+ onProgress(loaded / total, chunk, range.requestId);
153
+ rangePos += chunkLeft;
154
+ chunkLeft = 0;
155
+ } else {
156
+ const chunk = value.subarray(chunkPos, chunkPos + rangeLeft);
157
+ onProgress(loaded / total, chunk, range.requestId);
158
+ chunkPos += rangeLeft;
159
+ chunkLeft -= rangeLeft;
160
+ rangedIndex++;
161
+ rangePos = 0;
178
162
  }
179
163
  }
180
- controller.close();
181
- },
182
- })
183
- );
164
+ }
165
+ controller.close();
166
+ },
167
+ });
168
+
169
+ return new Response(stream);
184
170
  }
185
171
  }
@@ -131,14 +131,16 @@ export interface IHttpClient {
131
131
  *
132
132
  * @param relativePath - Download endpoint relative path.
133
133
  * @param reserved - Reserved, do not use.
134
- * @param ranges - A ranges of resource file contents to download.
134
+ * @param ranges - A ranges of resource file contents to download. See
135
+ * {@link https://developer.mozilla.org/docs/Web/HTTP/Guides/Range_requests | HTTP range requests} for
136
+ * more details.
135
137
  * @param onProgress - Download progress callback.
136
138
  * @param init - A set of options that can be used to configure a fetch request. See
137
139
  * {@link https://developer.mozilla.org/docs/Web/API/RequestInit | RequestInit} for more details.
138
140
  */
139
141
  downloadFileRange(
140
142
  relativePath: string,
141
- reserved: number,
143
+ reserved: number | string,
142
144
  ranges: Array<{ begin: number; end: number; requestId: number }>,
143
145
  onProgress?: (progress: number, chunk: Uint8Array, requestId: number) => void,
144
146
  init?: RequestInit
package/src/Api/Model.ts CHANGED
@@ -253,8 +253,11 @@ export class Model extends Endpoint {
253
253
  * or geometry data.
254
254
  *
255
255
  * @param dataId - Resource file name.
256
- * @param ranges - A range of resource file contents to download.
257
- * @param requestId - Request ID for download progress callback.
256
+ * @param ranges - A ranges of resource file contents to download. See
257
+ * {@link https://developer.mozilla.org/docs/Web/HTTP/Guides/Range_requests | HTTP range requests} for
258
+ * more details.
259
+ * @param requestId - Specify a non-empty `requestId` to append the `?requestId=` search parameter to
260
+ * the server request. If specified, server-side caching may not work.
258
261
  * @param onProgress - Download progress callback.
259
262
  * @param signal - An
260
263
  * {@link https://developer.mozilla.org/docs/Web/API/AbortController | AbortController} signal. Allows