@ibm-aspera/sdk 0.4.14 → 0.4.18

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.
@@ -43,7 +43,7 @@ export declare const init: (options?: InitOptions) => Promise<any>;
43
43
  *
44
44
  * @returns a promise that resolves if transfer initiation is successful and rejects if transfer cannot be started
45
45
  */
46
- export declare const startTransfer: (transferSpec: TransferSpec, asperaSdkSpec: AsperaSdkSpec) => Promise<AsperaSdkTransfer>;
46
+ export declare const startTransfer: (transferSpec: TransferSpec, asperaSdkSpec?: AsperaSdkSpec) => Promise<AsperaSdkTransfer>;
47
47
  /**
48
48
  * Register a callback event for getting transfer updates
49
49
  *
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  Object.defineProperty(exports, "__esModule", { value: true });
3
14
  exports.getCapabilities = exports.readChunkAsArrayBuffer = exports.readAsArrayBuffer = exports.getInfo = exports.removeDropzone = exports.createDropzone = exports.setBranding = exports.modifyTransfer = exports.showDirectory = 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;
4
15
  var messages_1 = require("../constants/messages");
@@ -7,7 +18,6 @@ var helpers_1 = require("../helpers/helpers");
7
18
  var http_gateway_1 = require("../http-gateway");
8
19
  var core_1 = require("../http-gateway/core");
9
20
  var index_1 = require("../index");
10
- var http_gateway_sdk_js_1 = require("@ibm-aspera/http-gateway-sdk-js");
11
21
  var connect_sdk_js_1 = require("@ibm-aspera/connect-sdk-js");
12
22
  var core_2 = require("../connect/core");
13
23
  /**
@@ -17,6 +27,7 @@ var core_2 = require("../connect/core");
17
27
  * @returns a promise that resolves if server can connect or rejects if not
18
28
  */
19
29
  var testConnection = function () {
30
+ // FIXME: If force HTTP gateway is false this ends up preventing SDK from verifying IBM Aspera for desktop is running.
20
31
  if (index_1.asperaSdk.useHttpGateway || index_1.asperaSdk.useConnect) {
21
32
  return Promise.resolve(index_1.asperaSdk.globals.sdkResponseData);
22
33
  }
@@ -102,12 +113,6 @@ var init = function (options) {
102
113
  var _a, _b, _c;
103
114
  var appId = (_a = options === null || options === void 0 ? void 0 : options.appId) !== null && _a !== void 0 ? _a : (0, helpers_1.randomUUID)();
104
115
  index_1.asperaSdk.globals.appId = appId;
105
- // Watch for old HTTP Gateway transfers in case used.
106
- (0, http_gateway_sdk_js_1.registerActivityCallback)(function (oldHttpTransfers) {
107
- oldHttpTransfers.transfers.forEach(function (oldHttpTransfer) {
108
- (0, core_1.sendTransferUpdate)(oldHttpTransfer);
109
- });
110
- });
111
116
  // For now ignore multi user support in Safari
112
117
  if ((options === null || options === void 0 ? void 0 : options.supportMultipleUsers) && !(0, helpers_1.isSafari)()) {
113
118
  index_1.asperaSdk.globals.supportMultipleUsers = true;
@@ -160,25 +165,21 @@ var init = function (options) {
160
165
  return responseData;
161
166
  });
162
167
  }).then(function (response) {
168
+ return (0, http_gateway_1.initHttpGateway)(response);
169
+ }).then(function () {
163
170
  var _a, _b;
164
- index_1.asperaSdk.globals.httpGatewayInfo = response;
165
- index_1.asperaSdk.globals.httpGatewayVerified = true;
166
- var iframeContainer = document.createElement('div');
167
- iframeContainer.id = 'aspera-http-gateway-iframes';
168
- iframeContainer.style = 'display: none;';
169
- document.body.appendChild(iframeContainer);
170
- index_1.asperaSdk.globals.httpGatewayIframeContainer = iframeContainer;
171
171
  if ((_a = options === null || options === void 0 ? void 0 : options.httpGatewaySettings) === null || _a === void 0 ? void 0 : _a.forceGateway) {
172
172
  return Promise.resolve(index_1.asperaSdk.globals.sdkResponseData);
173
173
  }
174
- else {
175
- return ((_b = options === null || options === void 0 ? void 0 : options.connectSettings) === null || _b === void 0 ? void 0 : _b.useConnect) ? getConnectStartCalls() : getDesktopStartCalls();
176
- }
174
+ return ((_b = options === null || options === void 0 ? void 0 : options.connectSettings) === null || _b === void 0 ? void 0 : _b.useConnect) ? getConnectStartCalls() : getDesktopStartCalls();
177
175
  }).catch(function (error) {
178
- var _a;
179
- // If HTTP Gateway fails log and move on to desktop
176
+ var _a, _b;
177
+ // If HTTP Gateway fails log and move on to transfer client
180
178
  (0, helpers_1.errorLog)(messages_1.messages.httpInitFail, error);
181
- return ((_a = options === null || options === void 0 ? void 0 : options.connectSettings) === null || _a === void 0 ? void 0 : _a.useConnect) ? getConnectStartCalls() : getDesktopStartCalls();
179
+ if ((_a = options === null || options === void 0 ? void 0 : options.httpGatewaySettings) === null || _a === void 0 ? void 0 : _a.forceGateway) {
180
+ throw (0, helpers_1.generateErrorBody)(messages_1.messages.httpInitFail, error);
181
+ }
182
+ return ((_b = options === null || options === void 0 ? void 0 : options.connectSettings) === null || _b === void 0 ? void 0 : _b.useConnect) ? getConnectStartCalls() : getDesktopStartCalls();
182
183
  });
183
184
  }
184
185
  return ((_c = options === null || options === void 0 ? void 0 : options.connectSettings) === null || _c === void 0 ? void 0 : _c.useConnect) ? getConnectStartCalls() : getDesktopStartCalls();
@@ -200,6 +201,17 @@ var startTransfer = function (transferSpec, asperaSdkSpec) {
200
201
  return transferSpec.direction === 'receive' ? (0, http_gateway_1.httpDownload)(transferSpec, asperaSdkSpec) : (0, http_gateway_1.httpUpload)(transferSpec, asperaSdkSpec);
201
202
  }
202
203
  else if (index_1.asperaSdk.useConnect) {
204
+ /**
205
+ * There is a bug in the Connect transfer client where Connect's HTTP server will no longer return ANY responses if a dialog was opened
206
+ * when starting the transfer (ex: request or file overwrite confirmation).
207
+ */
208
+ if ((asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.allow_dialogs) !== false) {
209
+ console.warn('[Aspera SDK] `allow_dialogs` was not set to `false` in AsperaSdkSpec and has been overridden. ' +
210
+ 'Connect dialogs block all subsequent HTTP responses. ' +
211
+ 'Set `allow_dialogs: false` explicitly to suppress this warning. ' +
212
+ 'More info: https://github.com/IBM/aspera-sdk-js/issues/196');
213
+ asperaSdkSpec = __assign(__assign({}, asperaSdkSpec), { allow_dialogs: false });
214
+ }
203
215
  return index_1.asperaSdk.globals.connect.startTransferPromise(transferSpec, asperaSdkSpec).then(function (response) {
204
216
  return response.transfer_specs[0];
205
217
  });
@@ -210,7 +222,7 @@ var startTransfer = function (transferSpec, asperaSdkSpec) {
210
222
  var promiseInfo = (0, helpers_1.generatePromiseObjects)();
211
223
  var payload = {
212
224
  transfer_spec: transferSpec,
213
- desktop_spec: asperaSdkSpec,
225
+ desktop_spec: asperaSdkSpec || {},
214
226
  app_id: index_1.asperaSdk.globals.appId,
215
227
  };
216
228
  client_1.client.request('start_transfer', payload)
@@ -1,4 +1,5 @@
1
1
  import { FileDialogOptions, DataTransferResponse, TransferSpec, AsperaSdkTransfer, ReadAsArrayBufferResponse, ReadChunkAsArrayBufferResponse } from '../models/models';
2
+ import { HttpGatewayInfo } from './models';
2
3
  /**
3
4
  * HTTP Gateway Core Logic
4
5
  * - File/Folder picking
@@ -8,6 +9,22 @@ import { FileDialogOptions, DataTransferResponse, TransferSpec, AsperaSdkTransfe
8
9
  * Most logic is called directly by Desktop SDK functions
9
10
  * You may not need to import anything from this file.
10
11
  */
12
+ /**
13
+ * Send a transfer update through the SDK
14
+ *
15
+ * @param transfer - Transsfer object to send to consumers
16
+ */
17
+ export declare const sendTransferUpdate: (transfer: AsperaSdkTransfer) => void;
18
+ /**
19
+ * Initialize the HTTP Gateway after the /info response has been received and verified.
20
+ * For v2 gateways, delegates to the old HTTP Gateway SDK.
21
+ * For v3 gateways, sets up the iframe container for downloads.
22
+ *
23
+ * @param response - The /info response from the HTTP Gateway server
24
+ *
25
+ * @returns a promise that resolves when the HTTP Gateway is initialized
26
+ */
27
+ export declare const initHttpGateway: (response: HttpGatewayInfo) => Promise<void>;
11
28
  /**
12
29
  * Remove a transfer from HTTP Gateway systems
13
30
  * @param id - ID of the transfer
@@ -56,12 +73,6 @@ export declare const httpGatewaySelectFileFolderDialog: (options?: FileDialogOpt
56
73
  * @returns a transfer object to track status and send to consumers
57
74
  */
58
75
  export declare const getSdkTransfer: (transferSpec: TransferSpec) => AsperaSdkTransfer;
59
- /**
60
- * Send a transfer update through the SDK
61
- *
62
- * @param transfer - Transsfer object to send to consumers
63
- */
64
- export declare const sendTransferUpdate: (transfer: AsperaSdkTransfer) => void;
65
76
  /**
66
77
  * Try to parse and get a useful string from API calls for HTTP Gateway
67
78
  *
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.httpGatewayReadChunkAsArrayBuffer = exports.httpGatewayReadAsArrayBuffer = exports.base64Encoding = exports.getMessageFromError = exports.sendTransferUpdate = exports.getSdkTransfer = exports.httpGatewaySelectFileFolderDialog = exports.handleHttpGatewayDrop = exports.createHtmlInputElement = exports.httpGetTransfer = exports.httpGetAllTransfers = exports.httpRemoveTransfer = 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.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");
7
7
  var http_gateway_sdk_js_1 = require("@ibm-aspera/http-gateway-sdk-js");
8
- // 50MiB which matches the limits in Connect and IBM Aspera for desktop
8
+ // Maximum file size for generating image previews for files. 50MiB matches the limits in both Connect and IBM Aspera for desktop.
9
9
  var MAX_FILE_SIZE = 50 * 1024 * 1024;
10
10
  /**
11
11
  * HTTP Gateway Core Logic
@@ -16,6 +16,48 @@ var MAX_FILE_SIZE = 50 * 1024 * 1024;
16
16
  * Most logic is called directly by Desktop SDK functions
17
17
  * You may not need to import anything from this file.
18
18
  */
19
+ /**
20
+ * Send a transfer update through the SDK
21
+ *
22
+ * @param transfer - Transsfer object to send to consumers
23
+ */
24
+ var sendTransferUpdate = function (transfer) {
25
+ index_1.asperaSdk.httpGatewayTransferStore.set(transfer.uuid, transfer);
26
+ index_1.asperaSdk.activityTracking.handleTransferActivity({
27
+ type: 'transferUpdated',
28
+ data: { transfers: [transfer] },
29
+ });
30
+ };
31
+ exports.sendTransferUpdate = sendTransferUpdate;
32
+ /**
33
+ * Initialize the HTTP Gateway after the /info response has been received and verified.
34
+ * For v2 gateways, delegates to the old HTTP Gateway SDK.
35
+ * For v3 gateways, sets up the iframe container for downloads.
36
+ *
37
+ * @param response - The /info response from the HTTP Gateway server
38
+ *
39
+ * @returns a promise that resolves when the HTTP Gateway is initialized
40
+ */
41
+ var initHttpGateway = function (response) {
42
+ index_1.asperaSdk.globals.httpGatewayInfo = response;
43
+ index_1.asperaSdk.globals.httpGatewayVerified = true;
44
+ if (index_1.asperaSdk.useOldHttpGateway) {
45
+ // Watch for old HTTP Gateway transfers in case used.
46
+ (0, http_gateway_sdk_js_1.registerActivityCallback)(function (oldHttpTransfers) {
47
+ oldHttpTransfers.transfers.forEach(function (oldHttpTransfer) {
48
+ (0, exports.sendTransferUpdate)(oldHttpTransfer);
49
+ });
50
+ });
51
+ return (0, http_gateway_sdk_js_1.initHttpGateway)(index_1.asperaSdk.globals.httpGatewayUrl).then(function () { });
52
+ }
53
+ var iframeContainer = document.createElement('div');
54
+ iframeContainer.id = 'aspera-http-gateway-iframes';
55
+ iframeContainer.style = 'display: none;';
56
+ document.body.appendChild(iframeContainer);
57
+ index_1.asperaSdk.globals.httpGatewayIframeContainer = iframeContainer;
58
+ return Promise.resolve();
59
+ };
60
+ exports.initHttpGateway = initHttpGateway;
19
61
  /**
20
62
  * Remove a transfer from HTTP Gateway systems
21
63
  * @param id - ID of the transfer
@@ -205,19 +247,6 @@ var getSdkTransfer = function (transferSpec) {
205
247
  };
206
248
  };
207
249
  exports.getSdkTransfer = getSdkTransfer;
208
- /**
209
- * Send a transfer update through the SDK
210
- *
211
- * @param transfer - Transsfer object to send to consumers
212
- */
213
- var sendTransferUpdate = function (transfer) {
214
- index_1.asperaSdk.httpGatewayTransferStore.set(transfer.uuid, transfer);
215
- index_1.asperaSdk.activityTracking.handleTransferActivity({
216
- type: 'transferUpdated',
217
- data: { transfers: [transfer] },
218
- });
219
- };
220
- exports.sendTransferUpdate = sendTransferUpdate;
221
250
  /**
222
251
  * Try to parse and get a useful string from API calls for HTTP Gateway
223
252
  *
@@ -1,6 +1,6 @@
1
1
  import { httpDownload } from './download';
2
2
  import { httpUpload } from './upload';
3
- import { handleHttpGatewayDrop, httpGatewaySelectFileFolderDialog, createHtmlInputElement } from './core';
3
+ import { handleHttpGatewayDrop, httpGatewaySelectFileFolderDialog, createHtmlInputElement, initHttpGateway } from './core';
4
4
  /**
5
5
  * HTTP Gateway Exports
6
6
  *
@@ -8,4 +8,4 @@ import { handleHttpGatewayDrop, httpGatewaySelectFileFolderDialog, createHtmlInp
8
8
  * Most logic is called directly by Desktop SDK functions
9
9
  * You may not need to import anything from this file.
10
10
  */
11
- export { httpUpload, httpDownload, handleHttpGatewayDrop, httpGatewaySelectFileFolderDialog, createHtmlInputElement, };
11
+ export { httpUpload, httpDownload, handleHttpGatewayDrop, httpGatewaySelectFileFolderDialog, createHtmlInputElement, initHttpGateway, };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createHtmlInputElement = exports.httpGatewaySelectFileFolderDialog = exports.handleHttpGatewayDrop = exports.httpDownload = exports.httpUpload = void 0;
3
+ exports.initHttpGateway = exports.createHtmlInputElement = exports.httpGatewaySelectFileFolderDialog = exports.handleHttpGatewayDrop = exports.httpDownload = exports.httpUpload = void 0;
4
4
  var download_1 = require("./download");
5
5
  Object.defineProperty(exports, "httpDownload", { enumerable: true, get: function () { return download_1.httpDownload; } });
6
6
  var upload_1 = require("./upload");
@@ -9,3 +9,4 @@ var core_1 = require("./core");
9
9
  Object.defineProperty(exports, "handleHttpGatewayDrop", { enumerable: true, get: function () { return core_1.handleHttpGatewayDrop; } });
10
10
  Object.defineProperty(exports, "httpGatewaySelectFileFolderDialog", { enumerable: true, get: function () { return core_1.httpGatewaySelectFileFolderDialog; } });
11
11
  Object.defineProperty(exports, "createHtmlInputElement", { enumerable: true, get: function () { return core_1.createHtmlInputElement; } });
12
+ Object.defineProperty(exports, "initHttpGateway", { enumerable: true, get: function () { return core_1.initHttpGateway; } });
@@ -89,9 +89,9 @@ export declare class ActivityTracking {
89
89
  /** Keep track of the last notified WebSocket event **/
90
90
  private lastNotifiedWebSocketEvent;
91
91
  /**
92
- * Notify all consumers when a message is received from the websocket
92
+ * Notify all consumers when a message is received from the transfer client.
93
93
  *
94
- * @param message the message received from the websocket
94
+ * @param message the message received
95
95
  */
96
96
  handleTransferActivity(message: ActivityMessage): void;
97
97
  /**
@@ -94,15 +94,18 @@ var ActivityTracking = /** @class */ (function () {
94
94
  this.lastNotifiedWebSocketEvent = undefined;
95
95
  }
96
96
  /**
97
- * Notify all consumers when a message is received from the websocket
97
+ * Notify all consumers when a message is received from the transfer client.
98
98
  *
99
- * @param message the message received from the websocket
99
+ * @param message the message received
100
100
  */
101
101
  ActivityTracking.prototype.handleTransferActivity = function (message) {
102
+ var data = message.data && typeof message.data === 'object' && 'transfers' in message.data
103
+ ? message.data
104
+ : { transfers: [message.data] };
102
105
  if (message.type === 'transferUpdated' || message.type === 'transferRemoved') {
103
106
  this.activity_callbacks.forEach(function (callback) {
104
107
  if (typeof callback === 'function') {
105
- callback(message.data);
108
+ callback(data);
106
109
  }
107
110
  });
108
111
  }