@ibm-aspera/sdk 0.5.0 → 0.7.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.
package/README.md CHANGED
@@ -29,4 +29,4 @@ Along with the examples, you can find an example test application [here](https:/
29
29
 
30
30
  ## Migration from Connect SDK
31
31
 
32
- Refer to [MIGRATION](MIGRATION.md) for recommended changes when migrating your web application from the Connect SDK (`@ibm-aspera/connect-sdk-js`).
32
+ Refer to [MIGRATION](https://github.com/IBM/aspera-sdk-js/blob/main/MIGRATION.md) for recommended changes when migrating your web application from the Connect SDK (`@ibm-aspera/connect-sdk-js`).
@@ -1,5 +1,5 @@
1
1
  import { AsperaSdkInfo, TransferResponse } from '../models/aspera-sdk.model';
2
- import { CustomBrandingOptions, DataTransferResponse, AsperaSdkSpec, AsperaSdkTransfer, FileDialogOptions, FolderDialogOptions, InitOptions, ModifyTransferOptions, Pagination, PaginatedFilesResponse, ResumeTransferOptions, TransferSpec, WebsocketEvent, ReadChunkAsArrayBufferResponse, ReadAsArrayBufferResponse, SdkCapabilities } from '../models/models';
2
+ import { CustomBrandingOptions, DataTransferResponse, AsperaSdkSpec, AsperaSdkTransfer, FileDialogOptions, FolderDialogOptions, InitOptions, ModifyTransferOptions, Pagination, PaginatedFilesResponse, ResumeTransferOptions, TransferSpec, WebsocketEvent, ReadChunkAsArrayBufferResponse, ReadAsArrayBufferResponse, SdkCapabilities, GetChecksumOptions, ChecksumFileResponse } from '../models/models';
3
3
  import * as ConnectTypes from '@ibm-aspera/connect-sdk-js/dist/esm/core/types';
4
4
  /**
5
5
  * Check if IBM Aspera for Desktop connection works. This function is called by init
@@ -220,6 +220,14 @@ export declare const readAsArrayBuffer: (path: string) => Promise<ReadAsArrayBuf
220
220
  * @returns a promise that resolves with the file chunk data as a base64-encoded string and mime type
221
221
  */
222
222
  export declare const readChunkAsArrayBuffer: (path: string, offset: number, chunkSize: number) => Promise<ReadChunkAsArrayBufferResponse>;
223
+ /**
224
+ * Get a checksum of the specified chunk size of the file.
225
+ *
226
+ * @param options checksum options including path, offset, chunkSize, and checksumMethod
227
+ *
228
+ * @returns a promise that resolves with the checksum information
229
+ */
230
+ export declare const getChecksum: (options: GetChecksumOptions) => Promise<ChecksumFileResponse>;
223
231
  /**
224
232
  * Returns an object describing the high-level capabilities supported by the user's
225
233
  * transfer client (e.g. IBM Aspera for desktop, Connect, or HTTP Gateway).
@@ -11,7 +11,7 @@ var __assign = (this && this.__assign) || function () {
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.getCapabilities = exports.readChunkAsArrayBuffer = exports.readAsArrayBuffer = exports.getInfo = exports.removeDropzone = exports.createDropzone = exports.setBranding = exports.modifyTransfer = exports.showDirectory = exports.getFilesList = exports.getTransfer = exports.getAllTransfers = exports.showPreferences = exports.showSelectFolderDialog = exports.showSelectFileDialog = exports.resumeTransfer = exports.stopTransfer = exports.removeTransfer = exports.deregisterStatusCallback = exports.registerStatusCallback = exports.deregisterActivityCallback = exports.registerActivityCallback = exports.startTransfer = exports.init = exports.initDragDrop = exports.testConnection = void 0;
14
+ exports.getCapabilities = exports.getChecksum = exports.readChunkAsArrayBuffer = exports.readAsArrayBuffer = exports.getInfo = exports.removeDropzone = exports.createDropzone = exports.setBranding = exports.modifyTransfer = exports.showDirectory = exports.getFilesList = exports.getTransfer = exports.getAllTransfers = exports.showPreferences = exports.showSelectFolderDialog = exports.showSelectFileDialog = exports.resumeTransfer = exports.stopTransfer = exports.removeTransfer = exports.deregisterStatusCallback = exports.registerStatusCallback = exports.deregisterActivityCallback = exports.registerActivityCallback = exports.startTransfer = exports.init = exports.initDragDrop = exports.testConnection = void 0;
15
15
  var messages_1 = require("../constants/messages");
16
16
  var client_1 = require("../helpers/client/client");
17
17
  var helpers_1 = require("../helpers/helpers");
@@ -316,6 +316,9 @@ exports.removeTransfer = removeTransfer;
316
316
  * @returns a promise that resolves if transfer is stopped and rejects if transfer cannot be stopped
317
317
  */
318
318
  var stopTransfer = function (id) {
319
+ if (index_1.asperaSdk.useHttpGateway) {
320
+ return (0, core_1.httpStopTransfer)(id);
321
+ }
319
322
  if (index_1.asperaSdk.useConnect) {
320
323
  return index_1.asperaSdk.globals.connect.stopTransfer(id);
321
324
  }
@@ -817,7 +820,48 @@ var readChunkAsArrayBuffer = function (path, offset, chunkSize) {
817
820
  return promiseInfo.promise;
818
821
  };
819
822
  exports.readChunkAsArrayBuffer = readChunkAsArrayBuffer;
823
+ /**
824
+ * Get a checksum of the specified chunk size of the file.
825
+ *
826
+ * @param options checksum options including path, offset, chunkSize, and checksumMethod
827
+ *
828
+ * @returns a promise that resolves with the checksum information
829
+ */
830
+ var getChecksum = function (options) {
831
+ if (index_1.asperaSdk.useHttpGateway) {
832
+ return (0, helpers_1.throwError)(messages_1.messages.getChecksumNotSupported);
833
+ }
834
+ if (index_1.asperaSdk.useConnect) {
835
+ return index_1.asperaSdk.globals.connect.getChecksum(options);
836
+ }
837
+ if (!index_1.asperaSdk.isReady) {
838
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
839
+ }
840
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
841
+ var payload = {
842
+ request: {
843
+ path: options.path,
844
+ offset: options.offset || 0,
845
+ chunkSize: options.chunkSize || 0,
846
+ checksumMethod: options.checksumMethod || 'md5',
847
+ },
848
+ app_id: index_1.asperaSdk.globals.appId,
849
+ };
850
+ client_1.client.request('get_checksum', payload)
851
+ .then(function (data) { return promiseInfo.resolver(data); })
852
+ .catch(function (error) {
853
+ (0, helpers_1.errorLog)(messages_1.messages.getChecksumFailed, error);
854
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.getChecksumFailed, error));
855
+ });
856
+ return promiseInfo.promise;
857
+ };
858
+ exports.getChecksum = getChecksum;
820
859
  var supportsMethod = function (method) {
860
+ // We currently do not support calculating file checksums when using HTTP Gateway. In theory it should be possible
861
+ // to calculate this direclty in the browser similar to how `readAsArrayBuffer()` is implemented.
862
+ if (index_1.asperaSdk.useHttpGateway && method === 'get_checksum') {
863
+ return false;
864
+ }
821
865
  // HTTP Gateway and Connect do not have any RPC methods so fallback to true
822
866
  if (index_1.asperaSdk.useHttpGateway || index_1.asperaSdk.useConnect) {
823
867
  return true;
@@ -847,6 +891,7 @@ var supportsMethod = function (method) {
847
891
  var getCapabilities = function () {
848
892
  return {
849
893
  imagePreview: supportsMethod('read_as_array_buffer') && supportsMethod('read_chunk_as_array_buffer'),
894
+ fileChecksum: supportsMethod('get_checksum'),
850
895
  };
851
896
  };
852
897
  exports.getCapabilities = getCapabilities;
@@ -21,6 +21,7 @@ export declare const messages: {
21
21
  showSelectFolderDialogFailed: string;
22
22
  showPreferencesFailed: string;
23
23
  stopTransferFailed: string;
24
+ stopTransferFailedExternal: string;
24
25
  transferFailed: string;
25
26
  unableToFindElementOnPage: string;
26
27
  unableToReadDropped: string;
@@ -36,4 +37,6 @@ export declare const messages: {
36
37
  readChunkAsArrayBufferFailed: string;
37
38
  rpcDiscoverFailed: string;
38
39
  getFilesListFailed: string;
40
+ getChecksumFailed: string;
41
+ getChecksumNotSupported: string;
39
42
  };
@@ -24,6 +24,7 @@ exports.messages = {
24
24
  showSelectFolderDialogFailed: 'Unable to show select folder dialog',
25
25
  showPreferencesFailed: 'Unable to show preferences',
26
26
  stopTransferFailed: 'Unable to stop transfer',
27
+ stopTransferFailedExternal: 'Unable to stop transfer. The download must be canceled from the browser\'s download manager',
27
28
  transferFailed: 'The transfer failed to initiate',
28
29
  unableToFindElementOnPage: 'Unable to find the element on the current page',
29
30
  unableToReadDropped: 'The dropped item could not be parsed. Please try selecting via the select file/folder option',
@@ -39,4 +40,6 @@ exports.messages = {
39
40
  readChunkAsArrayBufferFailed: 'Unable to read file chunk as array buffer',
40
41
  rpcDiscoverFailed: 'Unable to discover RPC endpoints',
41
42
  getFilesListFailed: 'Unable to get files list for transfer',
43
+ getChecksumFailed: 'Unable to get file checksum',
44
+ getChecksumNotSupported: 'File checksum not supported for current transfer client',
42
45
  };
@@ -25,6 +25,18 @@ export declare const sendTransferUpdate: (transfer: AsperaSdkTransfer) => void;
25
25
  * @returns a promise that resolves when the HTTP Gateway is initialized
26
26
  */
27
27
  export declare const initHttpGateway: (response: HttpGatewayInfo) => Promise<void>;
28
+ /**
29
+ * Stop an in-progress HTTP Gateway transfer.
30
+ * Aborts the underlying HTTP request and sets the transfer status to 'canceled'.
31
+ *
32
+ * Note: If the download is being directly handled by the browser's download manager, this will return
33
+ * an error. The user must cancel the download themselves in the browser's download manger.
34
+ *
35
+ * @param id - ID of the transfer
36
+ *
37
+ * @returns Promise indicating success
38
+ */
39
+ export declare const httpStopTransfer: (id: string) => Promise<void>;
28
40
  /**
29
41
  * Remove a transfer from HTTP Gateway systems
30
42
  * @param id - ID of the transfer
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.httpGatewayReadChunkAsArrayBuffer = exports.httpGatewayReadAsArrayBuffer = exports.base64Encoding = exports.getMessageFromError = exports.getSdkTransfer = exports.httpGatewaySelectFileFolderDialog = exports.handleHttpGatewayDrop = exports.createHtmlInputElement = exports.httpGetTransfer = exports.httpGetAllTransfers = exports.httpRemoveTransfer = exports.initHttpGateway = exports.sendTransferUpdate = void 0;
3
+ exports.httpGatewayReadChunkAsArrayBuffer = exports.httpGatewayReadAsArrayBuffer = exports.base64Encoding = exports.getMessageFromError = exports.getSdkTransfer = exports.httpGatewaySelectFileFolderDialog = exports.handleHttpGatewayDrop = exports.createHtmlInputElement = exports.httpGetTransfer = exports.httpGetAllTransfers = exports.httpRemoveTransfer = exports.httpStopTransfer = exports.initHttpGateway = exports.sendTransferUpdate = void 0;
4
4
  var messages_1 = require("../constants/messages");
5
5
  var helpers_1 = require("../helpers/helpers");
6
6
  var index_1 = require("../index");
@@ -41,6 +41,8 @@ exports.sendTransferUpdate = sendTransferUpdate;
41
41
  var initHttpGateway = function (response) {
42
42
  index_1.asperaSdk.globals.httpGatewayInfo = response;
43
43
  index_1.asperaSdk.globals.httpGatewayVerified = true;
44
+ var majorVersion = Number(response.version.split('.')[0] || 3);
45
+ index_1.asperaSdk.globals.httpGatewayRoutePrefix = majorVersion >= 3 ? '/v3' : '';
44
46
  if (index_1.asperaSdk.useOldHttpGateway) {
45
47
  // Watch for old HTTP Gateway transfers in case used.
46
48
  (0, http_gateway_sdk_js_1.registerActivityCallback)(function (oldHttpTransfers) {
@@ -58,6 +60,39 @@ var initHttpGateway = function (response) {
58
60
  return Promise.resolve();
59
61
  };
60
62
  exports.initHttpGateway = initHttpGateway;
63
+ /**
64
+ * Stop an in-progress HTTP Gateway transfer.
65
+ * Aborts the underlying HTTP request and sets the transfer status to 'canceled'.
66
+ *
67
+ * Note: If the download is being directly handled by the browser's download manager, this will return
68
+ * an error. The user must cancel the download themselves in the browser's download manger.
69
+ *
70
+ * @param id - ID of the transfer
71
+ *
72
+ * @returns Promise indicating success
73
+ */
74
+ var httpStopTransfer = function (id) {
75
+ if (index_1.asperaSdk.useOldHttpGateway) {
76
+ (0, http_gateway_sdk_js_1.cancelTransfer)(id);
77
+ return Promise.resolve();
78
+ }
79
+ var transfer = index_1.asperaSdk.httpGatewayTransferStore.get(id);
80
+ if (!transfer) {
81
+ return Promise.reject((0, helpers_1.generateErrorBody)(messages_1.messages.stopTransferFailed, { reason: 'Not found' }));
82
+ }
83
+ else if (transfer.httpDownloadExternalHandle) {
84
+ return Promise.reject((0, helpers_1.generateErrorBody)(messages_1.messages.stopTransferFailedExternal, { reason: 'External handle' }));
85
+ }
86
+ transfer.status = 'canceled';
87
+ var request = index_1.asperaSdk.httpGatewayRequestStore.get(id);
88
+ if (request) {
89
+ request.abort();
90
+ index_1.asperaSdk.httpGatewayRequestStore.delete(id);
91
+ }
92
+ (0, exports.sendTransferUpdate)(transfer);
93
+ return Promise.resolve();
94
+ };
95
+ exports.httpStopTransfer = httpStopTransfer;
61
96
  /**
62
97
  * Remove a transfer from HTTP Gateway systems
63
98
  * @param id - ID of the transfer
@@ -69,14 +104,18 @@ var httpRemoveTransfer = function (id) {
69
104
  (0, http_gateway_sdk_js_1.removeTransfer)(id);
70
105
  return Promise.resolve({ removed: true });
71
106
  }
72
- var transfer = index_1.asperaSdk.httpGatewayTransferStore.get(id);
73
- if (transfer) {
107
+ /* Cancel the transfer before removing it.
108
+ *
109
+ * Note: This is slightly different from the behavior in the v2 JS SDK. When removing
110
+ * a transfer, v2 will NOT cancel it beforehand. In the desktop and Connect transfer clients,
111
+ * removing a transfer also stops it, so we do the same here for HTTP Gateway v3.
112
+ */
113
+ return (0, exports.httpStopTransfer)(id)
114
+ .catch(function () { })
115
+ .then(function () {
74
116
  index_1.asperaSdk.httpGatewayTransferStore.delete(id);
75
- return Promise.resolve({ removed: true });
76
- }
77
- else {
78
- return Promise.reject((0, helpers_1.generateErrorBody)(messages_1.messages.removeTransferFailed, { reason: 'Not found' }));
79
- }
117
+ return { removed: true };
118
+ });
80
119
  };
81
120
  exports.httpRemoveTransfer = httpRemoveTransfer;
82
121
  /**
@@ -31,6 +31,7 @@ var httpDownloadPresigned = function (transferSpec, asperaSdkSpec) {
31
31
  (0, core_1.sendTransferUpdate)(transferObject);
32
32
  };
33
33
  var url = new URL((asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_override_server_url) || index_1.asperaSdk.globals.httpGatewayUrl);
34
+ var baseUrl = (url.origin + url.pathname).replace(/\/+$/, '');
34
35
  var headers = {
35
36
  'Content-Type': 'application/json',
36
37
  accept: 'application/json',
@@ -40,7 +41,7 @@ var httpDownloadPresigned = function (transferSpec, asperaSdkSpec) {
40
41
  headers['X-Aspera-AccessKey'] = asperaSdkSpec.http_gateway_authentication.access_key;
41
42
  }
42
43
  var protocol = url.protocol === 'https:' ? 'https' : 'http';
43
- return fetch("".concat(url.toString(), "/presign"), {
44
+ return fetch("".concat(baseUrl).concat(index_1.asperaSdk.globals.httpGatewayRoutePrefix, "/presign"), {
44
45
  method: 'POST',
45
46
  headers: headers,
46
47
  body: (0, helpers_1.safeJsonString)({
@@ -108,7 +109,7 @@ var httpDownloadInBrowser = function (transferSpec, asperaSdkSpec) {
108
109
  headers['Authorization'] = "Bearer ".concat(asperaSdkSpec.http_gateway_authentication.token);
109
110
  headers['X-Aspera-AccessKey'] = asperaSdkSpec.http_gateway_authentication.access_key;
110
111
  }
111
- fetch("".concat((asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_override_server_url) || index_1.asperaSdk.globals.httpGatewayUrl, "/download"), { method: 'GET', headers: headers }).then(function (data) {
112
+ fetch("".concat((asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_override_server_url) || index_1.asperaSdk.globals.httpGatewayUrl).concat(index_1.asperaSdk.globals.httpGatewayRoutePrefix, "/download"), { method: 'GET', headers: headers }).then(function (data) {
112
113
  var responseHeaders = data.headers;
113
114
  transferObject.httpRequestId = responseHeaders.get('X-Request-Id');
114
115
  var chunks = [];
@@ -44,20 +44,25 @@ var httpUpload = function (transferSpec, asperaSdkSpec) {
44
44
  return (0, helpers_1.throwError)(messages_1.messages.fileNotAllowed, { type: 'upload', invalidFiles: hasBadFile, transferSpec: transferSpec });
45
45
  }
46
46
  var transferObject = (0, core_1.getSdkTransfer)(transferSpec);
47
+ index_1.asperaSdk.httpGatewayRequestStore.set(transferObject.uuid, request);
47
48
  if (asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_authentication) {
48
49
  request.setRequestHeader('Authorization', "Bearer ".concat(asperaSdkSpec.http_gateway_authentication.token));
49
50
  request.setRequestHeader('X-Aspera-AccessKey', asperaSdkSpec.http_gateway_authentication.access_key);
50
51
  }
51
- request.open('POST', "".concat((asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_override_server_url) || index_1.asperaSdk.globals.httpGatewayUrl, "/upload"), true);
52
+ request.open('POST', "".concat((asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_override_server_url) || index_1.asperaSdk.globals.httpGatewayUrl).concat(index_1.asperaSdk.globals.httpGatewayRoutePrefix, "/upload"), true);
52
53
  var triggerUpdate = function () {
53
54
  (0, core_1.sendTransferUpdate)(transferObject);
54
55
  };
55
56
  var triggerFailed = function () {
57
+ if (transferObject.status === 'canceled') {
58
+ return;
59
+ }
56
60
  var errorData = (0, core_1.getMessageFromError)(request.response);
57
61
  transferObject.httpRequestId = request.getResponseHeader('X-Request-Id');
58
62
  transferObject.status = 'failed';
59
63
  transferObject.error_code = errorData.code;
60
64
  transferObject.error_desc = errorData.message;
65
+ index_1.asperaSdk.httpGatewayRequestStore.delete(transferObject.uuid);
61
66
  triggerUpdate();
62
67
  };
63
68
  request.upload.addEventListener('progress', function (event) {
@@ -87,6 +92,7 @@ var httpUpload = function (transferSpec, asperaSdkSpec) {
87
92
  transferObject.bytes_written = event.loaded;
88
93
  transferObject.percentage = (event.loaded / event.total);
89
94
  }
95
+ index_1.asperaSdk.httpGatewayRequestStore.delete(transferObject.uuid);
90
96
  triggerUpdate();
91
97
  });
92
98
  request.upload.addEventListener('loadstart', function () {
@@ -1,11 +1,11 @@
1
1
  import { AsperaSdk } from './models/aspera-sdk.model';
2
- import { createDropzone, deregisterActivityCallback, deregisterStatusCallback, getAllTransfers, getCapabilities, getFilesList, getInfo, getTransfer, init, initDragDrop, modifyTransfer, readAsArrayBuffer, readChunkAsArrayBuffer, registerActivityCallback, registerStatusCallback, removeDropzone, removeTransfer, resumeTransfer, setBranding, showDirectory, showPreferences, showSelectFileDialog, showSelectFolderDialog, startTransfer, stopTransfer, testConnection } from './app/core';
2
+ import { createDropzone, deregisterActivityCallback, deregisterStatusCallback, getAllTransfers, getCapabilities, getChecksum, getFilesList, getInfo, getTransfer, init, initDragDrop, modifyTransfer, readAsArrayBuffer, readChunkAsArrayBuffer, registerActivityCallback, registerStatusCallback, removeDropzone, removeTransfer, resumeTransfer, setBranding, showDirectory, showPreferences, showSelectFileDialog, showSelectFolderDialog, startTransfer, stopTransfer, testConnection } from './app/core';
3
3
  import { getInstallerInfo } from './app/installer';
4
4
  import { getInstallerUrls, isSafari } from './helpers/helpers';
5
5
  export declare const asperaSdk: AsperaSdk;
6
6
  declare const launch: () => void;
7
- export { isSafari, init, testConnection, startTransfer, launch, registerActivityCallback, deregisterActivityCallback, removeTransfer, showDirectory, stopTransfer, resumeTransfer, getAllTransfers, getTransfer, getFilesList, showSelectFileDialog, showSelectFolderDialog, showPreferences, modifyTransfer, createDropzone, removeDropzone, initDragDrop, getInstallerInfo, registerStatusCallback, deregisterStatusCallback, setBranding, getInfo, readAsArrayBuffer, readChunkAsArrayBuffer, getInstallerUrls, getCapabilities, };
8
- export type { AsperaSdkSpec, AsperaSdkTransfer, BrowserStyleFile, CustomBrandingOptions, CustomTheme, CustomThemeItems, DataTransferResponse, FileDialogOptions, FileError, FileFilter, FileStat, FileStatus, FolderDialogOptions, InitOptions, InstallerInfo, InstallerInfoResponse, InstallerOptions, InstallerUrlInfo, ModifyTransferOptions, OverwritePolicy, PaginatedFilesResponse, Pagination, Path, ReadAsArrayBufferResponse, ReadChunkAsArrayBufferResponse, ResumePolicy, ResumeTransferOptions, SafariExtensionEvent, SdkCapabilities, TransferSpec, TransferStatus, WebsocketEvent, } from './models/models';
7
+ export { isSafari, init, testConnection, startTransfer, launch, registerActivityCallback, deregisterActivityCallback, removeTransfer, showDirectory, stopTransfer, resumeTransfer, getAllTransfers, getTransfer, getFilesList, showSelectFileDialog, showSelectFolderDialog, showPreferences, modifyTransfer, createDropzone, removeDropzone, initDragDrop, getInstallerInfo, registerStatusCallback, deregisterStatusCallback, setBranding, getInfo, readAsArrayBuffer, readChunkAsArrayBuffer, getInstallerUrls, getCapabilities, getChecksum, };
8
+ export type { AsperaSdkSpec, AsperaSdkTransfer, BrowserStyleFile, ChecksumFileResponse, CustomBrandingOptions, CustomTheme, CustomThemeItems, DataTransferResponse, FileDialogOptions, FileError, FileFilter, FileStat, FileStatus, FolderDialogOptions, GetChecksumOptions, InitOptions, InstallerInfo, InstallerInfoResponse, InstallerOptions, InstallerUrlInfo, ModifyTransferOptions, OverwritePolicy, PaginatedFilesResponse, Pagination, Path, ReadAsArrayBufferResponse, ReadChunkAsArrayBufferResponse, ResumePolicy, ResumeTransferOptions, SafariExtensionEvent, SdkCapabilities, TransferSpec, TransferStatus, WebsocketEvent, } from './models/models';
9
9
  export type { ActivityMessage, ActivityMessageTypes, AsperaSdkClientInfo, AsperaSdkInfo, TransferResponse, } from './models/aspera-sdk.model';
10
10
  export { AsperaSdk, AsperaSdkGlobals } from './models/aspera-sdk.model';
11
11
  export type { HttpGatewayInfo } from './http-gateway/models';
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.AsperaSdkGlobals = exports.AsperaSdk = exports.getCapabilities = exports.getInstallerUrls = exports.readChunkAsArrayBuffer = exports.readAsArrayBuffer = exports.getInfo = exports.setBranding = exports.deregisterStatusCallback = exports.registerStatusCallback = exports.getInstallerInfo = exports.initDragDrop = exports.removeDropzone = exports.createDropzone = exports.modifyTransfer = exports.showPreferences = exports.showSelectFolderDialog = exports.showSelectFileDialog = exports.getFilesList = exports.getTransfer = exports.getAllTransfers = exports.resumeTransfer = exports.stopTransfer = exports.showDirectory = exports.removeTransfer = exports.deregisterActivityCallback = exports.registerActivityCallback = exports.launch = exports.startTransfer = exports.testConnection = exports.init = exports.isSafari = exports.asperaSdk = void 0;
36
+ exports.AsperaSdkGlobals = exports.AsperaSdk = exports.getChecksum = exports.getCapabilities = exports.getInstallerUrls = exports.readChunkAsArrayBuffer = exports.readAsArrayBuffer = exports.getInfo = exports.setBranding = exports.deregisterStatusCallback = exports.registerStatusCallback = exports.getInstallerInfo = exports.initDragDrop = exports.removeDropzone = exports.createDropzone = exports.modifyTransfer = exports.showPreferences = exports.showSelectFolderDialog = exports.showSelectFileDialog = exports.getFilesList = exports.getTransfer = exports.getAllTransfers = exports.resumeTransfer = exports.stopTransfer = exports.showDirectory = exports.removeTransfer = exports.deregisterActivityCallback = exports.registerActivityCallback = exports.launch = exports.startTransfer = exports.testConnection = exports.init = exports.isSafari = exports.asperaSdk = void 0;
37
37
  var aspera_sdk_model_1 = require("./models/aspera-sdk.model");
38
38
  var core_1 = require("./app/core");
39
39
  Object.defineProperty(exports, "createDropzone", { enumerable: true, get: function () { return core_1.createDropzone; } });
@@ -41,6 +41,7 @@ Object.defineProperty(exports, "deregisterActivityCallback", { enumerable: true,
41
41
  Object.defineProperty(exports, "deregisterStatusCallback", { enumerable: true, get: function () { return core_1.deregisterStatusCallback; } });
42
42
  Object.defineProperty(exports, "getAllTransfers", { enumerable: true, get: function () { return core_1.getAllTransfers; } });
43
43
  Object.defineProperty(exports, "getCapabilities", { enumerable: true, get: function () { return core_1.getCapabilities; } });
44
+ Object.defineProperty(exports, "getChecksum", { enumerable: true, get: function () { return core_1.getChecksum; } });
44
45
  Object.defineProperty(exports, "getFilesList", { enumerable: true, get: function () { return core_1.getFilesList; } });
45
46
  Object.defineProperty(exports, "getInfo", { enumerable: true, get: function () { return core_1.getInfo; } });
46
47
  Object.defineProperty(exports, "getTransfer", { enumerable: true, get: function () { return core_1.getTransfer; } });
@@ -98,6 +99,7 @@ exports.asperaSdk.readChunkAsArrayBuffer = core_1.readChunkAsArrayBuffer;
98
99
  exports.asperaSdk.isSafari = helpers_1.isSafari;
99
100
  exports.asperaSdk.getInstallerUrls = helpers_1.getInstallerUrls;
100
101
  exports.asperaSdk.getCapabilities = core_1.getCapabilities;
102
+ exports.asperaSdk.getChecksum = core_1.getChecksum;
101
103
  exports.asperaSdk.httpGatewayCalls = httpGatewayCalls;
102
104
  var launch = exports.asperaSdk.globals.launch;
103
105
  exports.launch = launch;
@@ -1,4 +1,4 @@
1
- import { CustomBrandingOptions, DataTransferResponse, AsperaSdkSpec, AsperaSdkTransfer, FileDialogOptions, FolderDialogOptions, InitOptions, InstallerInfoResponse, InstallerOptions, ModifyTransferOptions, Pagination, PaginatedFilesResponse, ResumeTransferOptions, SafariExtensionEvent, TransferSpec, WebsocketEvent, InstallerUrlInfo, SdkCapabilities } from './models';
1
+ import { CustomBrandingOptions, DataTransferResponse, AsperaSdkSpec, AsperaSdkTransfer, FileDialogOptions, FolderDialogOptions, InitOptions, InstallerInfoResponse, InstallerOptions, ModifyTransferOptions, Pagination, PaginatedFilesResponse, ResumeTransferOptions, SafariExtensionEvent, TransferSpec, WebsocketEvent, InstallerUrlInfo, SdkCapabilities, GetChecksumOptions, ChecksumFileResponse } from './models';
2
2
  import { HttpGatewayInfo } from '../http-gateway/models';
3
3
  import * as ConnectTypes from '@ibm-aspera/connect-sdk-js/dist/esm/core/types';
4
4
  import { Connect, ConnectInstaller } from '@ibm-aspera/connect-sdk-js';
@@ -28,6 +28,8 @@ export declare class AsperaSdkGlobals {
28
28
  }[]>;
29
29
  /** HTTP Gateway URL after successful passing */
30
30
  httpGatewayUrl?: string;
31
+ /** Version-based route prefix for HTTP Gateway API endpoints (e.g. "/v3" for v3+, "" for v2) */
32
+ httpGatewayRoutePrefix: string;
31
33
  /** Indicate that the HTTP Gateway has been verified as working */
32
34
  httpGatewayVerified: boolean;
33
35
  /** HTTP Gateway info */
@@ -236,12 +238,16 @@ export declare class AsperaSdk {
236
238
  getInstallerUrls: () => InstallerUrlInfo;
237
239
  /** Function to get the SDK capabilities. */
238
240
  getCapabilities: () => SdkCapabilities;
241
+ /** Function to get a checksum for a file */
242
+ getChecksum: (options: GetChecksumOptions) => Promise<ChecksumFileResponse>;
239
243
  /** Indicate if Safari Extension is enabled. If the extension is disabled during the lifecycle this will not update to disabled. */
240
244
  SAFARI_EXTENSION_STATUS: SafariExtensionEvent;
241
245
  /** Aspera HTTP Gateway calls. This normally is not needed by clients but expose just in case. */
242
246
  httpGatewayCalls: unknown;
243
247
  /** Store of HTTP Gateway transfers */
244
248
  httpGatewayTransferStore: Map<string, AsperaSdkTransfer>;
249
+ /** Store of active HTTP Gateway XMLHttpRequests for cancellation. Key is transfer UUID. */
250
+ httpGatewayRequestStore: Map<string, XMLHttpRequest>;
245
251
  /** HTTP Gateway in app threshold limit. This can be changed globally for the app. */
246
252
  httpGatewayInBrowserDownloadThreshold: number;
247
253
  /**
@@ -35,6 +35,8 @@ var AsperaSdkGlobals = /** @class */ (function () {
35
35
  this.supportMultipleUsers = false;
36
36
  /** Map of drop zones created by querySelector */
37
37
  this.dropZonesCreated = new Map();
38
+ /** Version-based route prefix for HTTP Gateway API endpoints (e.g. "/v3" for v3+, "" for v2) */
39
+ this.httpGatewayRoutePrefix = '';
38
40
  /** Indicate that the HTTP Gateway has been verified as working */
39
41
  this.httpGatewayVerified = false;
40
42
  /** Connect status */
@@ -297,6 +299,8 @@ var AsperaSdk = /** @class */ (function () {
297
299
  this.SAFARI_EXTENSION_STATUS = 'DISABLED';
298
300
  /** Store of HTTP Gateway transfers */
299
301
  this.httpGatewayTransferStore = new Map();
302
+ /** Store of active HTTP Gateway XMLHttpRequests for cancellation. Key is transfer UUID. */
303
+ this.httpGatewayRequestStore = new Map();
300
304
  /** HTTP Gateway in app threshold limit. This can be changed globally for the app. */
301
305
  this.httpGatewayInBrowserDownloadThreshold = 1000000000;
302
306
  }
@@ -96,6 +96,24 @@ export interface ReadChunkAsArrayBufferResponse {
96
96
  /** Mime type of the file */
97
97
  type: string;
98
98
  }
99
+ /** Request to get a file checksum */
100
+ export interface GetChecksumOptions {
101
+ /** Absolute path to the file */
102
+ path: string;
103
+ /** Byte offset to start reading from. Default: 0 */
104
+ offset?: number;
105
+ /** Number of bytes to read. If 0, read entire file from offset to end. Default: 0 */
106
+ chunkSize?: number;
107
+ /** Hash algorithm to use. Default: 'md5' */
108
+ checksumMethod?: 'md5' | 'sha1' | 'sha256' | 'sha512';
109
+ }
110
+ /** Response containing file checksum information */
111
+ export interface ChecksumFileResponse {
112
+ /** Hexadecimal string representation of the computed hash */
113
+ checksum: string;
114
+ /** The algorithm used */
115
+ checksumMethod: 'md5' | 'sha1' | 'sha256' | 'sha512';
116
+ }
99
117
  export interface ModifyTransferOptions {
100
118
  /**
101
119
  * @deprecated Use `lock_min_rate_kbps` instead.
@@ -804,4 +822,8 @@ export interface SdkCapabilities {
804
822
  * with the required RPC methods.
805
823
  */
806
824
  imagePreview: boolean;
825
+ /**
826
+ * Whether the SDK can calculate checksums of a file chunk.
827
+ */
828
+ fileChecksum: boolean;
807
829
  }