@ibm-aspera/sdk 0.2.29 → 0.4.12

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 (113) hide show
  1. package/README.md +17 -13
  2. package/dist/commonjs/app/core.d.ts +234 -0
  3. package/dist/commonjs/app/core.js +812 -0
  4. package/dist/commonjs/app/installer.d.ts +9 -0
  5. package/dist/commonjs/app/installer.js +50 -0
  6. package/dist/commonjs/connect/core.d.ts +11 -0
  7. package/dist/commonjs/connect/core.js +73 -0
  8. package/dist/commonjs/constants/constants.d.ts +8 -0
  9. package/dist/commonjs/constants/constants.js +11 -0
  10. package/dist/commonjs/constants/messages.d.ts +38 -0
  11. package/dist/commonjs/constants/messages.js +41 -0
  12. package/dist/commonjs/helpers/client/client.d.ts +5 -0
  13. package/dist/commonjs/helpers/client/client.js +7 -0
  14. package/dist/commonjs/helpers/client/http-client.d.ts +42 -0
  15. package/dist/commonjs/helpers/client/http-client.js +84 -0
  16. package/dist/commonjs/helpers/client/safari-client.d.ts +101 -0
  17. package/dist/commonjs/helpers/client/safari-client.js +264 -0
  18. package/dist/commonjs/helpers/helpers.d.ts +109 -0
  19. package/dist/commonjs/helpers/helpers.js +249 -0
  20. package/dist/commonjs/helpers/http.d.ts +16 -0
  21. package/dist/commonjs/helpers/http.js +42 -0
  22. package/dist/commonjs/helpers/ws.d.ts +62 -0
  23. package/dist/commonjs/helpers/ws.js +161 -0
  24. package/dist/commonjs/http-gateway/core.d.ts +98 -0
  25. package/dist/commonjs/http-gateway/core.js +388 -0
  26. package/dist/commonjs/http-gateway/download.d.ts +14 -0
  27. package/dist/commonjs/http-gateway/download.js +187 -0
  28. package/dist/commonjs/http-gateway/index.d.ts +11 -0
  29. package/dist/commonjs/http-gateway/index.js +11 -0
  30. package/dist/commonjs/http-gateway/models.d.ts +16 -0
  31. package/dist/commonjs/http-gateway/models.js +2 -0
  32. package/dist/commonjs/http-gateway/upload.d.ts +14 -0
  33. package/dist/commonjs/http-gateway/upload.js +124 -0
  34. package/dist/commonjs/index.d.ts +12 -0
  35. package/dist/commonjs/index.js +109 -0
  36. package/dist/commonjs/models/aspera-sdk.model.d.ts +259 -0
  37. package/dist/commonjs/models/aspera-sdk.model.js +349 -0
  38. package/dist/commonjs/models/models.d.ts +760 -0
  39. package/dist/commonjs/models/models.js +2 -0
  40. package/dist/js/aspera-sdk.js +3 -0
  41. package/dist/js/aspera-sdk.js.LICENSE.txt +15 -0
  42. package/dist/js/aspera-sdk.js.map +1 -0
  43. package/package.json +8 -5
  44. package/.editorconfig +0 -13
  45. package/.github/CODEOWNERS +0 -1
  46. package/.github/CODE_OF_CONDUCT.md +0 -128
  47. package/.github/CONTRIBUTING.md +0 -147
  48. package/.github/dependabot.yml +0 -10
  49. package/.github/workflows/ci.yml +0 -39
  50. package/.github/workflows/documentation.yml +0 -44
  51. package/.github/workflows/publish.yml +0 -23
  52. package/.github/workflows/version.yml +0 -32
  53. package/.whitesource +0 -3
  54. package/CHANGELOG.md +0 -204
  55. package/docs/DEVELOPMENT.md +0 -38
  56. package/eslint.config.js +0 -104
  57. package/example/README.md +0 -7
  58. package/example/index.html +0 -14
  59. package/example/package-lock.json +0 -2989
  60. package/example/package.json +0 -30
  61. package/example/public/404.html +0 -5
  62. package/example/public/sdk-code.js +0 -326
  63. package/example/src/App/App.scss +0 -40
  64. package/example/src/App/index.tsx +0 -196
  65. package/example/src/Views/AllTogether.tsx +0 -26
  66. package/example/src/Views/DragDrop.tsx +0 -23
  67. package/example/src/Views/Home.tsx +0 -10
  68. package/example/src/Views/Initialize.tsx +0 -31
  69. package/example/src/Views/Installer.tsx +0 -154
  70. package/example/src/Views/MonitorTransfers.tsx +0 -88
  71. package/example/src/Views/Other.tsx +0 -24
  72. package/example/src/Views/SelectItems.tsx +0 -46
  73. package/example/src/Views/StartTransfer.tsx +0 -37
  74. package/example/src/Views/Test.tsx +0 -20
  75. package/example/src/Views/Views.scss +0 -111
  76. package/example/src/helpers/index.ts +0 -19
  77. package/example/src/index.scss +0 -47
  78. package/example/src/main.tsx +0 -17
  79. package/example/src/vite-env.d.ts +0 -2
  80. package/example/tsconfig.json +0 -30
  81. package/example/vite.config.ts +0 -23
  82. package/jest.config.js +0 -19
  83. package/jest.setup.js +0 -0
  84. package/renovate.json +0 -12
  85. package/src/app/core.ts +0 -765
  86. package/src/app/installer.ts +0 -53
  87. package/src/connect/core.ts +0 -83
  88. package/src/constants/constants.ts +0 -19
  89. package/src/constants/messages.ts +0 -35
  90. package/src/helpers/client/client.ts +0 -11
  91. package/src/helpers/client/http-client.ts +0 -92
  92. package/src/helpers/client/safari-client.ts +0 -334
  93. package/src/helpers/helpers.ts +0 -253
  94. package/src/helpers/http.ts +0 -39
  95. package/src/helpers/ws.ts +0 -191
  96. package/src/http-gateway/core.ts +0 -273
  97. package/src/http-gateway/download.ts +0 -217
  98. package/src/http-gateway/index.ts +0 -19
  99. package/src/http-gateway/models.ts +0 -20
  100. package/src/http-gateway/upload.ts +0 -148
  101. package/src/index.ts +0 -72
  102. package/src/models/aspera-sdk.model.ts +0 -446
  103. package/src/models/models.ts +0 -740
  104. package/tests/client.spec.ts +0 -52
  105. package/tests/core.spec.ts +0 -13
  106. package/tests/helpers.spec.ts +0 -127
  107. package/tests/http.spec.ts +0 -14
  108. package/tests/installer.spec.ts +0 -135
  109. package/tests/mocks.ts +0 -11
  110. package/tsconfig.json +0 -14
  111. package/tsconfig.module.json +0 -16
  112. package/typedoc.js +0 -7
  113. package/webpack.config.js +0 -35
@@ -0,0 +1,812 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ 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
+ var messages_1 = require("../constants/messages");
5
+ var client_1 = require("../helpers/client/client");
6
+ var helpers_1 = require("../helpers/helpers");
7
+ var http_gateway_1 = require("../http-gateway");
8
+ var core_1 = require("../http-gateway/core");
9
+ var index_1 = require("../index");
10
+ var http_gateway_sdk_js_1 = require("@ibm-aspera/http-gateway-sdk-js");
11
+ var connect_sdk_js_1 = require("@ibm-aspera/connect-sdk-js");
12
+ var core_2 = require("../connect/core");
13
+ /**
14
+ * Check if IBM Aspera for Desktop connection works. This function is called by init
15
+ * when initializing the SDK. This function can be used at any point for checking.
16
+ *
17
+ * @returns a promise that resolves if server can connect or rejects if not
18
+ */
19
+ var testConnection = function () {
20
+ if (index_1.asperaSdk.useHttpGateway || index_1.asperaSdk.useConnect) {
21
+ return Promise.resolve(index_1.asperaSdk.globals.sdkResponseData);
22
+ }
23
+ return client_1.client.request('get_info')
24
+ .then(function (data) {
25
+ index_1.asperaSdk.globals.asperaSdkInfo = data;
26
+ index_1.asperaSdk.globals.asperaAppVerified = true;
27
+ return index_1.asperaSdk.globals.sdkResponseData;
28
+ });
29
+ };
30
+ exports.testConnection = testConnection;
31
+ /**
32
+ * RPC discovery used internally when initializing the SDK.
33
+ *
34
+ * @returns a promise that resolves if discovery is successful
35
+ */
36
+ var rpcDiscover = function () {
37
+ if (index_1.asperaSdk.useConnect || index_1.asperaSdk.useHttpGateway) {
38
+ return Promise.resolve({ methods: [] });
39
+ }
40
+ if (!index_1.asperaSdk.isReady) {
41
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
42
+ }
43
+ return client_1.client.request('rpc.discover')
44
+ .then(function (data) {
45
+ index_1.asperaSdk.globals.rpcMethods = data.methods.map(function (m) { return m.name; });
46
+ return data;
47
+ })
48
+ .catch(function (error) {
49
+ (0, helpers_1.errorLog)(messages_1.messages.rpcDiscoverFailed, error);
50
+ return Promise.reject((0, helpers_1.generateErrorBody)(messages_1.messages.rpcDiscoverFailed, error));
51
+ });
52
+ };
53
+ /**
54
+ * Initialize drag and drop. HTTP Gateway and Connect does not need to init.
55
+ * Ignore if only HTTP Gateway
56
+ * @param initCall - Indicate if called via init flow and should not reject
57
+ *
58
+ * @returns a promise that resolves if the initialization was successful or not
59
+ */
60
+ var initDragDrop = function (initCall) {
61
+ if (index_1.asperaSdk.useHttpGateway || index_1.asperaSdk.useConnect) {
62
+ return Promise.resolve(true);
63
+ }
64
+ else if (!index_1.asperaSdk.isReady) {
65
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
66
+ }
67
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
68
+ client_1.client.request('init_drag_drop')
69
+ .then(function (data) { return promiseInfo.resolver(data); })
70
+ .catch(function (error) {
71
+ (0, helpers_1.errorLog)(messages_1.messages.dragDropInitFailed, error);
72
+ if (initCall) {
73
+ promiseInfo.resolver(false);
74
+ (0, helpers_1.errorLog)(messages_1.messages.dragDropInitFailedInit, error);
75
+ }
76
+ else {
77
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.dragDropInitFailed, error));
78
+ }
79
+ });
80
+ return promiseInfo.promise;
81
+ };
82
+ exports.initDragDrop = initDragDrop;
83
+ /**
84
+ * Initialize IBM Aspera client. If client cannot (reject/catch), then
85
+ * client should attempt fixing server URL or trying again. If still fails disable UI elements.
86
+ *
87
+ * @param options initialization options:
88
+ *
89
+ * - `appId` the unique ID for the website. Transfers initiated during this session
90
+ * will be associated with this ID. It is recommended to use a unique ID to keep transfer
91
+ * information private from other websites.
92
+ *
93
+ * - `supportMultipleUsers` when enabled (defaults to false), the SDK will iterate over a port
94
+ * range and generate a session id to determine the running instance of the desktop app for the
95
+ * current user. This is needed when multiple users may be logged into the same machine
96
+ * simultaneously, for example on a Windows Server.
97
+ *
98
+ * @returns a promise that resolves if IBM Aspera Desktop is running properly or
99
+ * rejects if unable to connect
100
+ */
101
+ var init = function (options) {
102
+ var _a, _b, _c;
103
+ var appId = (_a = options === null || options === void 0 ? void 0 : options.appId) !== null && _a !== void 0 ? _a : (0, helpers_1.randomUUID)();
104
+ 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
+ // For now ignore multi user support in Safari
112
+ if ((options === null || options === void 0 ? void 0 : options.supportMultipleUsers) && !(0, helpers_1.isSafari)()) {
113
+ index_1.asperaSdk.globals.supportMultipleUsers = true;
114
+ index_1.asperaSdk.globals.sessionId = (0, helpers_1.randomUUID)();
115
+ }
116
+ var handleErrors = function (error) {
117
+ (0, helpers_1.errorLog)(messages_1.messages.serverError, error);
118
+ index_1.asperaSdk.globals.asperaAppVerified = false;
119
+ throw (0, helpers_1.generateErrorBody)(messages_1.messages.serverError, error);
120
+ };
121
+ var getConnectStartCalls = function () {
122
+ index_1.asperaSdk.globals.connect = new connect_sdk_js_1.Connect({
123
+ minVersion: options.connectSettings.minVersion || '3.10.1',
124
+ dragDropEnabled: options.connectSettings.dragDropEnabled,
125
+ connectMethod: options.connectSettings.method,
126
+ });
127
+ index_1.asperaSdk.globals.connectInstaller = new connect_sdk_js_1.ConnectInstaller({
128
+ sdkLocation: options.connectSettings.sdkLocation,
129
+ correlationId: options.connectSettings.correlationId,
130
+ style: 'carbon',
131
+ });
132
+ index_1.asperaSdk.globals.connectAW4 = {
133
+ Connect: connect_sdk_js_1.Connect,
134
+ ConnectInstaller: connect_sdk_js_1.ConnectInstaller,
135
+ };
136
+ return (0, core_2.initConnect)(!options.connectSettings.hideIncludedInstaller);
137
+ };
138
+ var getDesktopStartCalls = function () {
139
+ return index_1.asperaSdk.activityTracking.setup()
140
+ .then(function () { return (0, exports.testConnection)(); })
141
+ .then(function () { return rpcDiscover(); })
142
+ .then(function () { return (0, exports.initDragDrop)(true); })
143
+ .then(function () { return index_1.asperaSdk.globals.sdkResponseData; })
144
+ .catch(handleErrors);
145
+ };
146
+ if (((_b = options === null || options === void 0 ? void 0 : options.httpGatewaySettings) === null || _b === void 0 ? void 0 : _b.url) && !index_1.asperaSdk.globals.httpGatewayVerified) {
147
+ var finalHttpGatewayUrl = options.httpGatewaySettings.url.trim();
148
+ if (finalHttpGatewayUrl.indexOf('http') !== 0) {
149
+ finalHttpGatewayUrl = "https://".concat(finalHttpGatewayUrl);
150
+ }
151
+ if (finalHttpGatewayUrl.endsWith('/')) {
152
+ finalHttpGatewayUrl = finalHttpGatewayUrl.slice(0, -1);
153
+ }
154
+ index_1.asperaSdk.globals.httpGatewayUrl = finalHttpGatewayUrl;
155
+ return fetch("".concat(index_1.asperaSdk.globals.httpGatewayUrl, "/info"), { method: 'GET' }).then(function (response) {
156
+ return response.json().then(function (responseData) {
157
+ if (response.status >= 400) {
158
+ throw Error(responseData);
159
+ }
160
+ return responseData;
161
+ });
162
+ }).then(function (response) {
163
+ 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
+ if ((_a = options === null || options === void 0 ? void 0 : options.httpGatewaySettings) === null || _a === void 0 ? void 0 : _a.forceGateway) {
172
+ return Promise.resolve(index_1.asperaSdk.globals.sdkResponseData);
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
+ }
177
+ }).catch(function (error) {
178
+ var _a;
179
+ // If HTTP Gateway fails log and move on to desktop
180
+ (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();
182
+ });
183
+ }
184
+ return ((_c = options === null || options === void 0 ? void 0 : options.connectSettings) === null || _c === void 0 ? void 0 : _c.useConnect) ? getConnectStartCalls() : getDesktopStartCalls();
185
+ };
186
+ exports.init = init;
187
+ /**
188
+ * Start a transfer
189
+ *
190
+ * @param transferSpec standard transferSpec for transfer
191
+ * @param asperaSdkSpec IBM Aspera settings when starting a transfer.
192
+ *
193
+ * @returns a promise that resolves if transfer initiation is successful and rejects if transfer cannot be started
194
+ */
195
+ var startTransfer = function (transferSpec, asperaSdkSpec) {
196
+ if (!(0, helpers_1.isValidTransferSpec)(transferSpec)) {
197
+ return (0, helpers_1.throwError)(messages_1.messages.notValidTransferSpec, { transferSpec: transferSpec });
198
+ }
199
+ if (index_1.asperaSdk.useHttpGateway) {
200
+ return transferSpec.direction === 'receive' ? (0, http_gateway_1.httpDownload)(transferSpec, asperaSdkSpec) : (0, http_gateway_1.httpUpload)(transferSpec, asperaSdkSpec);
201
+ }
202
+ else if (index_1.asperaSdk.useConnect) {
203
+ return index_1.asperaSdk.globals.connect.startTransferPromise(transferSpec, asperaSdkSpec).then(function (response) {
204
+ return response.transfer_specs[0];
205
+ });
206
+ }
207
+ else if (!index_1.asperaSdk.isReady) {
208
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
209
+ }
210
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
211
+ var payload = {
212
+ transfer_spec: transferSpec,
213
+ desktop_spec: asperaSdkSpec,
214
+ app_id: index_1.asperaSdk.globals.appId,
215
+ };
216
+ client_1.client.request('start_transfer', payload)
217
+ .then(function (data) { return promiseInfo.resolver(data); })
218
+ .catch(function (error) {
219
+ (0, helpers_1.errorLog)(messages_1.messages.transferFailed, error);
220
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.transferFailed, error));
221
+ });
222
+ return promiseInfo.promise;
223
+ };
224
+ exports.startTransfer = startTransfer;
225
+ /**
226
+ * Register a callback event for getting transfer updates
227
+ *
228
+ * @param callback callback function to receive transfers
229
+ *
230
+ * @returns ID representing the callback for deregistration purposes
231
+ */
232
+ var registerActivityCallback = function (callback) {
233
+ return index_1.asperaSdk.activityTracking.setCallback(callback);
234
+ };
235
+ exports.registerActivityCallback = registerActivityCallback;
236
+ /**
237
+ * Remove a callback from the transfer callback
238
+ *
239
+ * @param id the ID returned by `registerActivityCallback`
240
+ */
241
+ var deregisterActivityCallback = function (id) {
242
+ index_1.asperaSdk.activityTracking.removeCallback(id);
243
+ };
244
+ exports.deregisterActivityCallback = deregisterActivityCallback;
245
+ /**
246
+ * Register a callback for getting updates about the connection status of IBM Aspera SDK.
247
+ *
248
+ * For example, to be notified of when the SDK loses connection with the application or connection
249
+ * is re-established. This can be useful if you want to handle the case where the user quits IBM Aspera
250
+ * after `init` has already been called, and want to prompt the user to relaunch the application.
251
+ *
252
+ * @param callback callback function to receive events
253
+ *
254
+ * @returns ID representing the callback for deregistration purposes
255
+ */
256
+ var registerStatusCallback = function (callback) {
257
+ return index_1.asperaSdk.activityTracking.setWebSocketEventCallback(callback);
258
+ };
259
+ exports.registerStatusCallback = registerStatusCallback;
260
+ /**
261
+ * Remove a callback from getting connection status events.
262
+ *
263
+ * @param id the ID returned by `registerStatusCallback`
264
+ */
265
+ var deregisterStatusCallback = function (id) {
266
+ index_1.asperaSdk.activityTracking.removeWebSocketEventCallback(id);
267
+ };
268
+ exports.deregisterStatusCallback = deregisterStatusCallback;
269
+ /**
270
+ * Remove a transfer. This will stop the transfer if it is in progress.
271
+ *
272
+ * @param id transfer uuid
273
+ *
274
+ * @returns a promise that resolves if transfer is removed and rejects if transfer cannot be removed
275
+ */
276
+ var removeTransfer = function (id) {
277
+ if (index_1.asperaSdk.useHttpGateway) {
278
+ return (0, core_1.httpRemoveTransfer)(id);
279
+ }
280
+ else if (index_1.asperaSdk.useConnect) {
281
+ return index_1.asperaSdk.globals.connect.removeTransfer(id);
282
+ }
283
+ if (!index_1.asperaSdk.isReady) {
284
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
285
+ }
286
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
287
+ var payload = {
288
+ transfer_id: id,
289
+ };
290
+ client_1.client.request('remove_transfer', payload)
291
+ .then(function (data) { return promiseInfo.resolver(data); })
292
+ .catch(function (error) {
293
+ (0, helpers_1.errorLog)(messages_1.messages.removeTransferFailed, error);
294
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.removeTransferFailed, error));
295
+ });
296
+ return promiseInfo.promise;
297
+ };
298
+ exports.removeTransfer = removeTransfer;
299
+ /**
300
+ * Stop a transfer.
301
+ *
302
+ * @param id transfer uuid
303
+ *
304
+ * @returns a promise that resolves if transfer is stopped and rejects if transfer cannot be stopped
305
+ */
306
+ var stopTransfer = function (id) {
307
+ if (index_1.asperaSdk.useConnect) {
308
+ return index_1.asperaSdk.globals.connect.stopTransfer(id);
309
+ }
310
+ if (!index_1.asperaSdk.isReady) {
311
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
312
+ }
313
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
314
+ var payload = {
315
+ transfer_id: id,
316
+ };
317
+ client_1.client.request('stop_transfer', payload)
318
+ .then(function (data) { return promiseInfo.resolver(data); })
319
+ .catch(function (error) {
320
+ (0, helpers_1.errorLog)(messages_1.messages.stopTransferFailed, error);
321
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.stopTransferFailed, error));
322
+ });
323
+ return promiseInfo.promise;
324
+ };
325
+ exports.stopTransfer = stopTransfer;
326
+ /**
327
+ * Resume a paused or failed transfer.
328
+ *
329
+ * @param id transfer uuid
330
+ * @param options resume transfer options
331
+ *
332
+ * @returns a promise that resolves with the new transfer object if transfer is resumed
333
+ */
334
+ var resumeTransfer = function (id, options) {
335
+ if (index_1.asperaSdk.useConnect) {
336
+ return index_1.asperaSdk.globals.connect.resumeTransfer(id, options).then(function (response) {
337
+ return response.transfer_spec;
338
+ });
339
+ }
340
+ if (!index_1.asperaSdk.isReady) {
341
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
342
+ }
343
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
344
+ var payload = {
345
+ transfer_id: id,
346
+ transfer_spec: options,
347
+ };
348
+ client_1.client.request('resume_transfer', payload)
349
+ .then(function (data) { return promiseInfo.resolver(data); })
350
+ .catch(function (error) {
351
+ (0, helpers_1.errorLog)(messages_1.messages.resumeTransferFailed, error);
352
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.resumeTransferFailed, error));
353
+ });
354
+ return promiseInfo.promise;
355
+ };
356
+ exports.resumeTransfer = resumeTransfer;
357
+ /**
358
+ * Displays a file browser dialog for the user to select files.
359
+ *
360
+ * @param options file dialog options
361
+ *
362
+ * @returns a promise that resolves with the selected file(s) and rejects if user cancels dialog
363
+ */
364
+ var showSelectFileDialog = function (options) {
365
+ if (index_1.asperaSdk.useHttpGateway) {
366
+ return (0, core_1.httpGatewaySelectFileFolderDialog)(options, false);
367
+ }
368
+ else if (index_1.asperaSdk.useConnect) {
369
+ return index_1.asperaSdk.globals.connect.showSelectFileDialogPromise(options).then(function (response) {
370
+ return response;
371
+ });
372
+ }
373
+ else if (!index_1.asperaSdk.isReady) {
374
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
375
+ }
376
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
377
+ var payload = {
378
+ options: options || {},
379
+ app_id: index_1.asperaSdk.globals.appId,
380
+ };
381
+ client_1.client.request('show_file_dialog', payload)
382
+ .then(function (data) { return promiseInfo.resolver(data); })
383
+ .catch(function (error) {
384
+ (0, helpers_1.errorLog)(messages_1.messages.showSelectFileDialogFailed, error);
385
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.showSelectFileDialogFailed, error));
386
+ });
387
+ return promiseInfo.promise;
388
+ };
389
+ exports.showSelectFileDialog = showSelectFileDialog;
390
+ /**
391
+ * Displays a folder browser dialog for the user to select folders.
392
+ *
393
+ * @param options folder dialog options
394
+ *
395
+ * @returns a promise that resolves with the selected folder(s) and rejects if user cancels dialog
396
+ */
397
+ var showSelectFolderDialog = function (options) {
398
+ if (index_1.asperaSdk.useHttpGateway) {
399
+ return (0, core_1.httpGatewaySelectFileFolderDialog)(options, true);
400
+ }
401
+ else if (index_1.asperaSdk.useConnect) {
402
+ return index_1.asperaSdk.globals.connect.showSelectFolderDialogPromise(options).then(function (response) {
403
+ return response;
404
+ });
405
+ }
406
+ else if (!index_1.asperaSdk.isReady) {
407
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
408
+ }
409
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
410
+ var payload = {
411
+ options: options || {},
412
+ app_id: index_1.asperaSdk.globals.appId,
413
+ };
414
+ client_1.client.request('show_folder_dialog', payload)
415
+ .then(function (data) { return promiseInfo.resolver(data); })
416
+ .catch(function (error) {
417
+ (0, helpers_1.errorLog)(messages_1.messages.showSelectFolderDialogFailed, error);
418
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.showSelectFolderDialogFailed, error));
419
+ });
420
+ return promiseInfo.promise;
421
+ };
422
+ exports.showSelectFolderDialog = showSelectFolderDialog;
423
+ /**
424
+ * Opens the IBM Aspera preferences page.
425
+ *
426
+ * @returns a promise that resolves when the preferences page is opened.
427
+ */
428
+ var showPreferences = function () {
429
+ if (index_1.asperaSdk.useConnect) {
430
+ return index_1.asperaSdk.globals.connect.showPreferences();
431
+ }
432
+ if (!index_1.asperaSdk.isReady) {
433
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
434
+ }
435
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
436
+ client_1.client.request('open_preferences')
437
+ .then(function (data) { return promiseInfo.resolver(data); })
438
+ .catch(function (error) {
439
+ (0, helpers_1.errorLog)(messages_1.messages.showPreferencesFailed, error);
440
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.showPreferencesFailed, error));
441
+ });
442
+ return promiseInfo.promise;
443
+ };
444
+ exports.showPreferences = showPreferences;
445
+ /**
446
+ * Get all transfers associated with the current application.
447
+ *
448
+ * @returns a promise that resolves with an array of transfers.
449
+ */
450
+ var getAllTransfers = function () {
451
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
452
+ if (index_1.asperaSdk.useHttpGateway) {
453
+ return Promise.resolve((0, core_1.httpGetAllTransfers)());
454
+ }
455
+ else if (index_1.asperaSdk.useConnect) {
456
+ index_1.asperaSdk.globals.connect.getAllTransfers({
457
+ success: function (data) {
458
+ promiseInfo.resolver(data.transfers);
459
+ }, error: function (error) {
460
+ promiseInfo.rejecter(error);
461
+ },
462
+ });
463
+ return promiseInfo.promise;
464
+ }
465
+ if (!index_1.asperaSdk.isReady) {
466
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
467
+ }
468
+ var payload = {
469
+ app_id: index_1.asperaSdk.globals.appId,
470
+ };
471
+ client_1.client.request('get_all_transfers', payload)
472
+ .then(function (data) { return promiseInfo.resolver(data); })
473
+ .catch(function (error) {
474
+ (0, helpers_1.errorLog)(messages_1.messages.getAllTransfersFailed, error);
475
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.getAllTransfersFailed, error));
476
+ });
477
+ return promiseInfo.promise;
478
+ };
479
+ exports.getAllTransfers = getAllTransfers;
480
+ /**
481
+ * Get a specific transfer by ID.
482
+ *
483
+ * @param id transfer uuid
484
+ *
485
+ * @returns a promise that resolves with the transfer.
486
+ */
487
+ var getTransfer = function (id) {
488
+ if (index_1.asperaSdk.useHttpGateway) {
489
+ var transfer = (0, core_1.httpGetTransfer)(id);
490
+ if (transfer) {
491
+ return Promise.resolve(transfer);
492
+ }
493
+ else {
494
+ return Promise.reject((0, helpers_1.generateErrorBody)(messages_1.messages.getTransferFailed, { reason: 'Not found' }));
495
+ }
496
+ }
497
+ else if (index_1.asperaSdk.useConnect) {
498
+ return index_1.asperaSdk.globals.connect.getTransfer(id).then(function (response) {
499
+ return response.transfer_info;
500
+ });
501
+ }
502
+ if (!index_1.asperaSdk.isReady) {
503
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
504
+ }
505
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
506
+ var payload = {
507
+ transfer_id: id,
508
+ };
509
+ client_1.client.request('get_transfer', payload)
510
+ .then(function (data) { return promiseInfo.resolver(data); })
511
+ .catch(function (error) {
512
+ (0, helpers_1.errorLog)(messages_1.messages.getTransferFailed, error);
513
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.getTransferFailed, error));
514
+ });
515
+ return promiseInfo.promise;
516
+ };
517
+ exports.getTransfer = getTransfer;
518
+ /**
519
+ * Opens and highlights the downloaded file in Finder or Windows Explorer. If multiple files,
520
+ * then only the first file will be selected.
521
+ *
522
+ * @param id transfer uuid
523
+ *
524
+ * @returns a promise that resolves if the file can be shown and rejects if not
525
+ */
526
+ var showDirectory = function (id) {
527
+ if (index_1.asperaSdk.useConnect) {
528
+ return index_1.asperaSdk.globals.connect.showDirectory(id);
529
+ }
530
+ if (!index_1.asperaSdk.isReady) {
531
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
532
+ }
533
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
534
+ var payload = {
535
+ transfer_id: id,
536
+ };
537
+ client_1.client.request('show_directory', payload)
538
+ .then(function (data) { return promiseInfo.resolver(data); })
539
+ .catch(function (error) {
540
+ (0, helpers_1.errorLog)(messages_1.messages.showDirectoryFailed, error);
541
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.showDirectoryFailed, error));
542
+ });
543
+ return promiseInfo.promise;
544
+ };
545
+ exports.showDirectory = showDirectory;
546
+ /**
547
+ * Modify the speed of a running transfer.
548
+ *
549
+ * @param id transfer uuid
550
+ * @param options transfer rate options
551
+ *
552
+ * @returns a promise that resolves if the transfer rate can be modified and rejects if not
553
+ */
554
+ var modifyTransfer = function (id, options) {
555
+ if (index_1.asperaSdk.useConnect) {
556
+ return index_1.asperaSdk.globals.connect.modifyTransfer(id, options).then(function (response) {
557
+ return response;
558
+ });
559
+ }
560
+ if (!index_1.asperaSdk.isReady) {
561
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
562
+ }
563
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
564
+ var payload = {
565
+ transfer_id: id,
566
+ transfer_spec: options,
567
+ };
568
+ client_1.client.request('modify_transfer', payload)
569
+ .then(function (data) { return promiseInfo.resolver(data); })
570
+ .catch(function (error) {
571
+ (0, helpers_1.errorLog)(messages_1.messages.modifyTransferFailed, error);
572
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.modifyTransferFailed, error));
573
+ });
574
+ return promiseInfo.promise;
575
+ };
576
+ exports.modifyTransfer = modifyTransfer;
577
+ /**
578
+ * Set the custom branding template to be used by IBM Aspera. If the app is already
579
+ * configured to use a different branding, then the branding template you specify will be
580
+ * stored by the app, allowing the end user to switch at any point.
581
+ *
582
+ * @param id custom branding template id. This should be consistent across page loads.
583
+ * @param options custom branding options
584
+ *
585
+ * @returns a promise that resolves if the branding was properly set.
586
+ */
587
+ var setBranding = function (id, options) {
588
+ if (!index_1.asperaSdk.isReady) {
589
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
590
+ }
591
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
592
+ var branding = {
593
+ id: id,
594
+ name: options.name,
595
+ theme: options.theme,
596
+ };
597
+ var payload = {
598
+ branding: branding,
599
+ };
600
+ client_1.client.request('update_branding', payload)
601
+ .then(function (data) { return promiseInfo.resolver(data); })
602
+ .catch(function (error) {
603
+ (0, helpers_1.errorLog)(messages_1.messages.setBrandingFailed, error);
604
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.setBrandingFailed, error));
605
+ });
606
+ return promiseInfo.promise;
607
+ };
608
+ exports.setBranding = setBranding;
609
+ /**
610
+ * Create a dropzone for the given element selector.
611
+ *
612
+ * @param callback the function to call once the files are dropped
613
+ * @param elementSelector the selector of the element on the page that should watch for drop events
614
+ * @param connectOptions options for connect
615
+ */
616
+ var createDropzone = function (callback, elementSelector, connectOptions) {
617
+ if (index_1.asperaSdk.useConnect) {
618
+ index_1.asperaSdk.globals.connect.setDragDropTargets(elementSelector, connectOptions, function (result) {
619
+ callback({
620
+ event: result.event,
621
+ files: result.files,
622
+ });
623
+ });
624
+ return;
625
+ }
626
+ var elements = document.querySelectorAll(elementSelector);
627
+ if (!elements || !elements.length) {
628
+ (0, helpers_1.errorLog)(messages_1.messages.unableToFindElementOnPage);
629
+ return;
630
+ }
631
+ var dragEvent = function (event) {
632
+ event.preventDefault();
633
+ };
634
+ var dropEvent = function (event) {
635
+ event.preventDefault();
636
+ if (event.dataTransfer && event.dataTransfer.files && event.dataTransfer.files.length && event.dataTransfer.files[0]) {
637
+ var files = [];
638
+ for (var i = 0; i < event.dataTransfer.files.length; i++) {
639
+ var file = event.dataTransfer.files[i];
640
+ files.push({
641
+ lastModified: file.lastModified,
642
+ name: file.name,
643
+ size: file.size,
644
+ type: file.type
645
+ });
646
+ }
647
+ var payload = {
648
+ files: files,
649
+ app_id: index_1.asperaSdk.globals.appId,
650
+ };
651
+ if (index_1.asperaSdk.isReady) {
652
+ client_1.client.request('dropped_files', payload)
653
+ .then(function (data) { return callback({ event: event, files: data }); })
654
+ .catch(function (error) {
655
+ (0, helpers_1.errorLog)(messages_1.messages.unableToReadDropped, error);
656
+ });
657
+ }
658
+ else if (index_1.asperaSdk.httpGatewayIsReady) {
659
+ (0, core_1.handleHttpGatewayDrop)(event.dataTransfer.items, callback, event);
660
+ }
661
+ }
662
+ };
663
+ elements.forEach(function (element) {
664
+ element.addEventListener('dragover', dragEvent);
665
+ element.addEventListener('drop', dropEvent);
666
+ index_1.asperaSdk.globals.dropZonesCreated.set(elementSelector, [{ event: 'dragover', callback: dragEvent }, { event: 'drop', callback: dropEvent }]);
667
+ });
668
+ };
669
+ exports.createDropzone = createDropzone;
670
+ /**
671
+ * Remove dropzone.
672
+ *
673
+ * @param elementSelector the selector of the element on the page that should remove
674
+ */
675
+ var removeDropzone = function (elementSelector) {
676
+ var foundDropzone = index_1.asperaSdk.globals.dropZonesCreated.get(elementSelector);
677
+ if (foundDropzone) {
678
+ foundDropzone.forEach(function (data) {
679
+ var elements = document.querySelectorAll(elementSelector);
680
+ if (elements && elements.length) {
681
+ elements.forEach(function (element) {
682
+ element.removeEventListener(data.event, data.callback);
683
+ });
684
+ }
685
+ });
686
+ }
687
+ };
688
+ exports.removeDropzone = removeDropzone;
689
+ /**
690
+ * Get metadata about the IBM Aspera installation.
691
+ *
692
+ * @returns a promise that returns information about the user's IBM Aspera installation.
693
+ */
694
+ var getInfo = function () {
695
+ if (index_1.asperaSdk.useHttpGateway || index_1.asperaSdk.useConnect) {
696
+ return Promise.resolve(index_1.asperaSdk.globals.sdkResponseData);
697
+ }
698
+ if (!index_1.asperaSdk.isReady) {
699
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
700
+ }
701
+ return new Promise(function (resolve, _) {
702
+ resolve(index_1.asperaSdk.globals.sdkResponseData);
703
+ });
704
+ };
705
+ exports.getInfo = getInfo;
706
+ /**
707
+ * Read an entire file as an array buffer (base64-encoded).
708
+ *
709
+ * Note: The maximum file size allowed is 50 MiB.
710
+ *
711
+ * @param path path to the file to read
712
+ *
713
+ * @returns a promise that resolves with the file data as a base64-encoded string and mime type
714
+ */
715
+ var readAsArrayBuffer = function (path) {
716
+ if (index_1.asperaSdk.useHttpGateway) {
717
+ return (0, core_1.httpGatewayReadAsArrayBuffer)(path);
718
+ }
719
+ else if (index_1.asperaSdk.useConnect) {
720
+ return index_1.asperaSdk.globals.connect.readAsArrayBuffer({ path: path });
721
+ }
722
+ if (!index_1.asperaSdk.isReady) {
723
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
724
+ }
725
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
726
+ var payload = {
727
+ request: {
728
+ path: path,
729
+ },
730
+ app_id: index_1.asperaSdk.globals.appId,
731
+ };
732
+ client_1.client.request('read_as_array_buffer', payload)
733
+ .then(function (data) { return promiseInfo.resolver(data); })
734
+ .catch(function (error) {
735
+ (0, helpers_1.errorLog)(messages_1.messages.readAsArrayBufferFailed, error);
736
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.readAsArrayBufferFailed, error));
737
+ });
738
+ return promiseInfo.promise;
739
+ };
740
+ exports.readAsArrayBuffer = readAsArrayBuffer;
741
+ /**
742
+ * Read a chunk of a file as an array buffer (base64-encoded).
743
+ *
744
+ * Note: The maximum chunk size allowed is 50 MiB.
745
+ *
746
+ * @param path path to the file to read
747
+ * @param offset offset to start reading the file, in bytes
748
+ * @param chunkSize the size of the chunk to read, in bytes
749
+ *
750
+ * @returns a promise that resolves with the file chunk data as a base64-encoded string and mime type
751
+ */
752
+ var readChunkAsArrayBuffer = function (path, offset, chunkSize) {
753
+ if (index_1.asperaSdk.useHttpGateway) {
754
+ return (0, core_1.httpGatewayReadChunkAsArrayBuffer)(path, offset, chunkSize);
755
+ }
756
+ else if (index_1.asperaSdk.useConnect) {
757
+ return index_1.asperaSdk.globals.connect.readChunkAsArrayBuffer({ path: path, offset: offset, chunkSize: chunkSize });
758
+ }
759
+ if (!index_1.asperaSdk.isReady) {
760
+ return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);
761
+ }
762
+ var promiseInfo = (0, helpers_1.generatePromiseObjects)();
763
+ var payload = {
764
+ request: {
765
+ path: path,
766
+ offset: offset,
767
+ chunkSize: chunkSize,
768
+ },
769
+ app_id: index_1.asperaSdk.globals.appId,
770
+ };
771
+ client_1.client.request('read_chunk_as_array_buffer', payload)
772
+ .then(function (data) { return promiseInfo.resolver(data); })
773
+ .catch(function (error) {
774
+ (0, helpers_1.errorLog)(messages_1.messages.readChunkAsArrayBufferFailed, error);
775
+ promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.readChunkAsArrayBufferFailed, error));
776
+ });
777
+ return promiseInfo.promise;
778
+ };
779
+ exports.readChunkAsArrayBuffer = readChunkAsArrayBuffer;
780
+ var supportsMethod = function (method) {
781
+ // HTTP Gateway and Connect do not have any RPC methods so fallback to true
782
+ if (index_1.asperaSdk.useHttpGateway || index_1.asperaSdk.useConnect) {
783
+ return true;
784
+ }
785
+ return index_1.asperaSdk.globals.rpcMethods.includes(method);
786
+ };
787
+ /**
788
+ * Returns an object describing the high-level capabilities supported by the user's
789
+ * transfer client (e.g. IBM Aspera for desktop, Connect, or HTTP Gateway).
790
+ *
791
+ * Use this for feature detection at a semantic level rather than checking individual RPC methods.
792
+ * Capabitilies may depend on multiple underlying RPC methods and also may vary by transfer client.
793
+ *
794
+ * Some capabitilies may depend on newer versions of the transfer client. This function may be useful
795
+ * if you want to conditionally perform certain actions rather than potentially getting an error.
796
+ *
797
+ * @returns an object with boolean flags for each capability.
798
+ *
799
+ * @example
800
+ * // Conditionally render UI based on capabilities
801
+ * const caps = asperaSdk.getCapabilities();
802
+ * // Determine if your web application can render image previews for user selected files
803
+ * if (caps.imagePreview) {
804
+ * asperaSdk.readAsArrayBuffer(path);
805
+ * }
806
+ */
807
+ var getCapabilities = function () {
808
+ return {
809
+ imagePreview: supportsMethod('read_as_array_buffer') && supportsMethod('read_chunk_as_array_buffer'),
810
+ };
811
+ };
812
+ exports.getCapabilities = getCapabilities;