@internxt/sdk 1.4.76
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/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/auth/index.d.ts +81 -0
- package/dist/auth/index.js +233 -0
- package/dist/auth/types.d.ts +43 -0
- package/dist/auth/types.js +26 -0
- package/dist/drive/backups/index.d.ts +18 -0
- package/dist/drive/backups/index.js +40 -0
- package/dist/drive/backups/types.d.ts +27 -0
- package/dist/drive/backups/types.js +2 -0
- package/dist/drive/index.d.ts +7 -0
- package/dist/drive/index.js +19 -0
- package/dist/drive/payments/index.d.ts +40 -0
- package/dist/drive/payments/index.js +91 -0
- package/dist/drive/payments/types.d.ts +104 -0
- package/dist/drive/payments/types.js +32 -0
- package/dist/drive/referrals/index.d.ts +19 -0
- package/dist/drive/referrals/index.js +51 -0
- package/dist/drive/referrals/types.d.ts +21 -0
- package/dist/drive/referrals/types.js +18 -0
- package/dist/drive/share/index.d.ts +74 -0
- package/dist/drive/share/index.js +156 -0
- package/dist/drive/share/types.d.ts +78 -0
- package/dist/drive/share/types.js +2 -0
- package/dist/drive/storage/index.d.ts +93 -0
- package/dist/drive/storage/index.js +243 -0
- package/dist/drive/storage/types.d.ts +174 -0
- package/dist/drive/storage/types.js +7 -0
- package/dist/drive/trash/index.d.ts +44 -0
- package/dist/drive/trash/index.js +132 -0
- package/dist/drive/trash/types.d.ts +19 -0
- package/dist/drive/trash/types.js +2 -0
- package/dist/drive/users/index.d.ts +67 -0
- package/dist/drive/users/index.js +123 -0
- package/dist/drive/users/types.d.ts +21 -0
- package/dist/drive/users/types.js +2 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +30 -0
- package/dist/network/download.d.ts +8 -0
- package/dist/network/download.js +123 -0
- package/dist/network/errors/codes.d.ts +24 -0
- package/dist/network/errors/codes.js +48 -0
- package/dist/network/errors/context.d.ts +35 -0
- package/dist/network/errors/context.js +39 -0
- package/dist/network/errors/download.d.ts +4 -0
- package/dist/network/errors/download.js +48 -0
- package/dist/network/errors/index.d.ts +3 -0
- package/dist/network/errors/index.js +15 -0
- package/dist/network/errors/upload.d.ts +13 -0
- package/dist/network/errors/upload.js +78 -0
- package/dist/network/index.d.ts +71 -0
- package/dist/network/index.js +310 -0
- package/dist/network/types.d.ts +102 -0
- package/dist/network/types.js +18 -0
- package/dist/network/upload.d.ts +4 -0
- package/dist/network/upload.js +159 -0
- package/dist/photos/devices/index.d.ts +10 -0
- package/dist/photos/devices/index.js +79 -0
- package/dist/photos/index.d.ts +17 -0
- package/dist/photos/index.js +52 -0
- package/dist/photos/photos/index.d.ts +60 -0
- package/dist/photos/photos/index.js +225 -0
- package/dist/photos/shares/index.d.ts +8 -0
- package/dist/photos/shares/index.js +34 -0
- package/dist/photos/types.d.ts +154 -0
- package/dist/photos/types.js +19 -0
- package/dist/photos/users/index.d.ts +7 -0
- package/dist/photos/users/index.js +46 -0
- package/dist/shared/headers/index.d.ts +45 -0
- package/dist/shared/headers/index.js +71 -0
- package/dist/shared/http/client.d.ts +78 -0
- package/dist/shared/http/client.js +166 -0
- package/dist/shared/http/types.d.ts +7 -0
- package/dist/shared/http/types.js +2 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +13 -0
- package/dist/shared/types/apiConnection.d.ts +12 -0
- package/dist/shared/types/apiConnection.js +2 -0
- package/dist/shared/types/appsumo.d.ts +16 -0
- package/dist/shared/types/appsumo.js +12 -0
- package/dist/shared/types/errors.d.ts +4 -0
- package/dist/shared/types/errors.js +27 -0
- package/dist/shared/types/teams.d.ts +9 -0
- package/dist/shared/types/teams.js +2 -0
- package/dist/shared/types/userSettings.d.ts +27 -0
- package/dist/shared/types/userSettings.js +2 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +25 -0
- package/package.json +53 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { BridgeUrl, StartUploadResponse, FinishUploadResponse, GetDownloadLinksResponse, NetworkRequestConfig, FinishUploadPayload, FinishMultipartUploadPayload } from './types';
|
|
2
|
+
import { AppDetails } from '../shared';
|
|
3
|
+
import { BasicAuth } from '../auth/types';
|
|
4
|
+
import { StartUploadPayload } from './types';
|
|
5
|
+
export * from './types';
|
|
6
|
+
export declare class DuplicatedIndexesError extends Error {
|
|
7
|
+
constructor();
|
|
8
|
+
}
|
|
9
|
+
export declare class InvalidFileIndexError extends Error {
|
|
10
|
+
constructor();
|
|
11
|
+
}
|
|
12
|
+
export declare class InvalidUploadIndexError extends Error {
|
|
13
|
+
constructor();
|
|
14
|
+
}
|
|
15
|
+
export declare class InvalidUploadSizeError extends Error {
|
|
16
|
+
constructor();
|
|
17
|
+
}
|
|
18
|
+
export declare class FileTooSmallForMultipartError extends Error {
|
|
19
|
+
constructor();
|
|
20
|
+
}
|
|
21
|
+
export declare class InvalidMultipartValueError extends Error {
|
|
22
|
+
constructor();
|
|
23
|
+
}
|
|
24
|
+
export declare class Network {
|
|
25
|
+
private readonly client;
|
|
26
|
+
private readonly appDetails;
|
|
27
|
+
private readonly auth;
|
|
28
|
+
static client(apiUrl: BridgeUrl, appDetails: AppDetails, opts: {
|
|
29
|
+
bridgeUser: string;
|
|
30
|
+
userId: string;
|
|
31
|
+
}): Network;
|
|
32
|
+
private constructor();
|
|
33
|
+
get credentials(): BasicAuth;
|
|
34
|
+
startUpload(bucketId: string, payload: StartUploadPayload, parts?: number): Promise<StartUploadResponse>;
|
|
35
|
+
finishUpload(bucketId: string, payload: FinishUploadPayload): Promise<FinishUploadResponse>;
|
|
36
|
+
finishMultipartUpload(bucketId: string, payload: FinishMultipartUploadPayload): Promise<FinishUploadResponse>;
|
|
37
|
+
getDownloadLinks(bucketId: string, fileId: string, token?: string): Promise<GetDownloadLinksResponse>;
|
|
38
|
+
deleteFile(bucketId: string, fileId: string): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Creates entries for every upload in the request, returns the urls to upload
|
|
41
|
+
* @param bucketId
|
|
42
|
+
* @param uploads
|
|
43
|
+
*/
|
|
44
|
+
static startUpload(bucketId: string, payload: StartUploadPayload, { client, appDetails, auth }: NetworkRequestConfig, parts?: number): Promise<StartUploadResponse>;
|
|
45
|
+
/**
|
|
46
|
+
* Finishes the upload of a file
|
|
47
|
+
* @param bucketId
|
|
48
|
+
* @param index
|
|
49
|
+
* @param shards
|
|
50
|
+
*/
|
|
51
|
+
private static finishUpload;
|
|
52
|
+
/**
|
|
53
|
+
* Gets the download links for a file
|
|
54
|
+
* @param bucketId
|
|
55
|
+
* @param file
|
|
56
|
+
*/
|
|
57
|
+
private static getDownloadLinks;
|
|
58
|
+
/**
|
|
59
|
+
* Deletes a file
|
|
60
|
+
* @param bucketId
|
|
61
|
+
* @param file
|
|
62
|
+
*/
|
|
63
|
+
private static deleteFile;
|
|
64
|
+
/**
|
|
65
|
+
* Gets headers with basic auth
|
|
66
|
+
* @param appDetails
|
|
67
|
+
* @param auth
|
|
68
|
+
*/
|
|
69
|
+
private static headersWithBasicAuth;
|
|
70
|
+
private static headersWithAuthToken;
|
|
71
|
+
}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __assign = (this && this.__assign) || function () {
|
|
18
|
+
__assign = Object.assign || function(t) {
|
|
19
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
+
s = arguments[i];
|
|
21
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
+
t[p] = s[p];
|
|
23
|
+
}
|
|
24
|
+
return t;
|
|
25
|
+
};
|
|
26
|
+
return __assign.apply(this, arguments);
|
|
27
|
+
};
|
|
28
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
31
|
+
}) : (function(o, m, k, k2) {
|
|
32
|
+
if (k2 === undefined) k2 = k;
|
|
33
|
+
o[k2] = m[k];
|
|
34
|
+
}));
|
|
35
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
36
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
|
+
};
|
|
38
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
39
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
40
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
41
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
42
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
43
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
44
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
48
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
49
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
50
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
51
|
+
function step(op) {
|
|
52
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
53
|
+
while (_) try {
|
|
54
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
55
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
56
|
+
switch (op[0]) {
|
|
57
|
+
case 0: case 1: t = op; break;
|
|
58
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
59
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
60
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
61
|
+
default:
|
|
62
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
63
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
64
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
65
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
66
|
+
if (t[2]) _.ops.pop();
|
|
67
|
+
_.trys.pop(); continue;
|
|
68
|
+
}
|
|
69
|
+
op = body.call(thisArg, _);
|
|
70
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
71
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
75
|
+
exports.Network = exports.InvalidMultipartValueError = exports.FileTooSmallForMultipartError = exports.InvalidUploadSizeError = exports.InvalidUploadIndexError = exports.InvalidFileIndexError = exports.DuplicatedIndexesError = void 0;
|
|
76
|
+
var uuid_1 = require("uuid");
|
|
77
|
+
var client_1 = require("../shared/http/client");
|
|
78
|
+
var index_1 = require("../shared/headers/index");
|
|
79
|
+
var utils_1 = require("../utils");
|
|
80
|
+
__exportStar(require("./types"), exports);
|
|
81
|
+
var DuplicatedIndexesError = /** @class */ (function (_super) {
|
|
82
|
+
__extends(DuplicatedIndexesError, _super);
|
|
83
|
+
function DuplicatedIndexesError() {
|
|
84
|
+
var _this = _super.call(this, 'Duplicated indexes found') || this;
|
|
85
|
+
Object.setPrototypeOf(_this, DuplicatedIndexesError.prototype);
|
|
86
|
+
return _this;
|
|
87
|
+
}
|
|
88
|
+
return DuplicatedIndexesError;
|
|
89
|
+
}(Error));
|
|
90
|
+
exports.DuplicatedIndexesError = DuplicatedIndexesError;
|
|
91
|
+
var InvalidFileIndexError = /** @class */ (function (_super) {
|
|
92
|
+
__extends(InvalidFileIndexError, _super);
|
|
93
|
+
function InvalidFileIndexError() {
|
|
94
|
+
var _this = _super.call(this, 'Invalid file index') || this;
|
|
95
|
+
Object.setPrototypeOf(_this, InvalidFileIndexError.prototype);
|
|
96
|
+
return _this;
|
|
97
|
+
}
|
|
98
|
+
return InvalidFileIndexError;
|
|
99
|
+
}(Error));
|
|
100
|
+
exports.InvalidFileIndexError = InvalidFileIndexError;
|
|
101
|
+
var InvalidUploadIndexError = /** @class */ (function (_super) {
|
|
102
|
+
__extends(InvalidUploadIndexError, _super);
|
|
103
|
+
function InvalidUploadIndexError() {
|
|
104
|
+
var _this = _super.call(this, 'Invalid upload index') || this;
|
|
105
|
+
Object.setPrototypeOf(_this, InvalidUploadIndexError.prototype);
|
|
106
|
+
return _this;
|
|
107
|
+
}
|
|
108
|
+
return InvalidUploadIndexError;
|
|
109
|
+
}(Error));
|
|
110
|
+
exports.InvalidUploadIndexError = InvalidUploadIndexError;
|
|
111
|
+
var InvalidUploadSizeError = /** @class */ (function (_super) {
|
|
112
|
+
__extends(InvalidUploadSizeError, _super);
|
|
113
|
+
function InvalidUploadSizeError() {
|
|
114
|
+
var _this = _super.call(this, 'Invalid size') || this;
|
|
115
|
+
Object.setPrototypeOf(_this, InvalidUploadSizeError.prototype);
|
|
116
|
+
return _this;
|
|
117
|
+
}
|
|
118
|
+
return InvalidUploadSizeError;
|
|
119
|
+
}(Error));
|
|
120
|
+
exports.InvalidUploadSizeError = InvalidUploadSizeError;
|
|
121
|
+
var FileTooSmallForMultipartError = /** @class */ (function (_super) {
|
|
122
|
+
__extends(FileTooSmallForMultipartError, _super);
|
|
123
|
+
function FileTooSmallForMultipartError() {
|
|
124
|
+
var _this = _super.call(this, 'File is too small for multipart upload') || this;
|
|
125
|
+
Object.setPrototypeOf(_this, FileTooSmallForMultipartError.prototype);
|
|
126
|
+
return _this;
|
|
127
|
+
}
|
|
128
|
+
return FileTooSmallForMultipartError;
|
|
129
|
+
}(Error));
|
|
130
|
+
exports.FileTooSmallForMultipartError = FileTooSmallForMultipartError;
|
|
131
|
+
var InvalidMultipartValueError = /** @class */ (function (_super) {
|
|
132
|
+
__extends(InvalidMultipartValueError, _super);
|
|
133
|
+
function InvalidMultipartValueError() {
|
|
134
|
+
var _this = _super.call(this, 'Invalid multipart value') || this;
|
|
135
|
+
Object.setPrototypeOf(_this, InvalidMultipartValueError.prototype);
|
|
136
|
+
return _this;
|
|
137
|
+
}
|
|
138
|
+
return InvalidMultipartValueError;
|
|
139
|
+
}(Error));
|
|
140
|
+
exports.InvalidMultipartValueError = InvalidMultipartValueError;
|
|
141
|
+
var Network = /** @class */ (function () {
|
|
142
|
+
function Network(apiUrl, appDetails, opts) {
|
|
143
|
+
this.client = client_1.HttpClient.create(apiUrl);
|
|
144
|
+
this.appDetails = appDetails;
|
|
145
|
+
this.auth = {
|
|
146
|
+
username: opts.bridgeUser,
|
|
147
|
+
password: opts.userId,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
Network.client = function (apiUrl, appDetails, opts) {
|
|
151
|
+
return new Network(apiUrl, appDetails, opts);
|
|
152
|
+
};
|
|
153
|
+
Object.defineProperty(Network.prototype, "credentials", {
|
|
154
|
+
get: function () {
|
|
155
|
+
return this.auth;
|
|
156
|
+
},
|
|
157
|
+
enumerable: false,
|
|
158
|
+
configurable: true
|
|
159
|
+
});
|
|
160
|
+
Network.prototype.startUpload = function (bucketId, payload, parts) {
|
|
161
|
+
if (parts === void 0) { parts = 1; }
|
|
162
|
+
var totalSize = 0;
|
|
163
|
+
for (var _i = 0, _a = payload.uploads; _i < _a.length; _i++) {
|
|
164
|
+
var _b = _a[_i], index = _b.index, size = _b.size;
|
|
165
|
+
if (index < 0) {
|
|
166
|
+
throw new InvalidUploadIndexError();
|
|
167
|
+
}
|
|
168
|
+
if (size < 0) {
|
|
169
|
+
throw new InvalidUploadSizeError();
|
|
170
|
+
}
|
|
171
|
+
totalSize += size;
|
|
172
|
+
}
|
|
173
|
+
var MB100 = 100 * 1024 * 1024;
|
|
174
|
+
if (totalSize < MB100 && parts > 1) {
|
|
175
|
+
throw new FileTooSmallForMultipartError();
|
|
176
|
+
}
|
|
177
|
+
if (!Number.isInteger(parts) || parts < 1) {
|
|
178
|
+
throw new InvalidMultipartValueError();
|
|
179
|
+
}
|
|
180
|
+
var uploadIndexesWithoutDuplicates = new Set(payload.uploads.map(function (upload) { return upload.index; }));
|
|
181
|
+
if (uploadIndexesWithoutDuplicates.size < payload.uploads.length) {
|
|
182
|
+
throw new DuplicatedIndexesError();
|
|
183
|
+
}
|
|
184
|
+
return Network.startUpload(bucketId, payload, {
|
|
185
|
+
client: this.client,
|
|
186
|
+
appDetails: this.appDetails,
|
|
187
|
+
auth: this.auth,
|
|
188
|
+
}, parts);
|
|
189
|
+
};
|
|
190
|
+
Network.prototype.finishUpload = function (bucketId, payload) {
|
|
191
|
+
var index = payload.index, shards = payload.shards;
|
|
192
|
+
if (!(0, utils_1.isHexString)(index) || index.length !== 64) {
|
|
193
|
+
throw new InvalidFileIndexError();
|
|
194
|
+
}
|
|
195
|
+
for (var _i = 0, shards_1 = shards; _i < shards_1.length; _i++) {
|
|
196
|
+
var shard = shards_1[_i];
|
|
197
|
+
if (!(0, uuid_1.validate)(shard.uuid)) {
|
|
198
|
+
throw new Error('Invalid UUID');
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return Network.finishUpload(bucketId, payload, {
|
|
202
|
+
client: this.client,
|
|
203
|
+
appDetails: this.appDetails,
|
|
204
|
+
auth: this.auth,
|
|
205
|
+
});
|
|
206
|
+
};
|
|
207
|
+
Network.prototype.finishMultipartUpload = function (bucketId, payload) {
|
|
208
|
+
var index = payload.index, shards = payload.shards;
|
|
209
|
+
if (!(0, utils_1.isHexString)(index) || index.length !== 64) {
|
|
210
|
+
throw new InvalidFileIndexError();
|
|
211
|
+
}
|
|
212
|
+
for (var _i = 0, shards_2 = shards; _i < shards_2.length; _i++) {
|
|
213
|
+
var shard = shards_2[_i];
|
|
214
|
+
if (!(0, uuid_1.validate)(shard.uuid)) {
|
|
215
|
+
throw new Error('Invalid UUID');
|
|
216
|
+
}
|
|
217
|
+
if (!shard.UploadId) {
|
|
218
|
+
throw new Error('Missing UploadId');
|
|
219
|
+
}
|
|
220
|
+
if (!shard.parts) {
|
|
221
|
+
throw new Error('Missing parts');
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return Network.finishUpload(bucketId, payload, {
|
|
225
|
+
client: this.client,
|
|
226
|
+
appDetails: this.appDetails,
|
|
227
|
+
auth: this.auth,
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
Network.prototype.getDownloadLinks = function (bucketId, fileId, token) {
|
|
231
|
+
return Network.getDownloadLinks(bucketId, fileId, {
|
|
232
|
+
client: this.client,
|
|
233
|
+
appDetails: this.appDetails,
|
|
234
|
+
auth: this.auth,
|
|
235
|
+
}, token);
|
|
236
|
+
};
|
|
237
|
+
Network.prototype.deleteFile = function (bucketId, fileId) {
|
|
238
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
239
|
+
return __generator(this, function (_a) {
|
|
240
|
+
switch (_a.label) {
|
|
241
|
+
case 0: return [4 /*yield*/, Network.deleteFile(bucketId, fileId, {
|
|
242
|
+
client: this.client,
|
|
243
|
+
appDetails: this.appDetails,
|
|
244
|
+
auth: this.auth,
|
|
245
|
+
})];
|
|
246
|
+
case 1:
|
|
247
|
+
_a.sent();
|
|
248
|
+
return [2 /*return*/];
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
};
|
|
253
|
+
/**
|
|
254
|
+
* Creates entries for every upload in the request, returns the urls to upload
|
|
255
|
+
* @param bucketId
|
|
256
|
+
* @param uploads
|
|
257
|
+
*/
|
|
258
|
+
Network.startUpload = function (bucketId, payload, _a, parts) {
|
|
259
|
+
var client = _a.client, appDetails = _a.appDetails, auth = _a.auth;
|
|
260
|
+
if (parts === void 0) { parts = 1; }
|
|
261
|
+
var headers = Network.headersWithBasicAuth(appDetails, auth);
|
|
262
|
+
return client.post("/v2/buckets/" + bucketId + "/files/start?multiparts=" + parts, payload, headers);
|
|
263
|
+
};
|
|
264
|
+
/**
|
|
265
|
+
* Finishes the upload of a file
|
|
266
|
+
* @param bucketId
|
|
267
|
+
* @param index
|
|
268
|
+
* @param shards
|
|
269
|
+
*/
|
|
270
|
+
Network.finishUpload = function (bucketId, payload, _a) {
|
|
271
|
+
var client = _a.client, appDetails = _a.appDetails, auth = _a.auth;
|
|
272
|
+
var headers = Network.headersWithBasicAuth(appDetails, auth);
|
|
273
|
+
return client.post("/v2/buckets/" + bucketId + "/files/finish", payload, headers);
|
|
274
|
+
};
|
|
275
|
+
/**
|
|
276
|
+
* Gets the download links for a file
|
|
277
|
+
* @param bucketId
|
|
278
|
+
* @param file
|
|
279
|
+
*/
|
|
280
|
+
Network.getDownloadLinks = function (bucketId, fileId, _a, token) {
|
|
281
|
+
var client = _a.client, appDetails = _a.appDetails, auth = _a.auth;
|
|
282
|
+
var headers = token
|
|
283
|
+
? Network.headersWithAuthToken(appDetails, token)
|
|
284
|
+
: Network.headersWithBasicAuth(appDetails, auth);
|
|
285
|
+
return client.get("/buckets/" + bucketId + "/files/" + fileId + "/info", __assign(__assign({}, headers), { 'x-api-version': '2' }));
|
|
286
|
+
};
|
|
287
|
+
/**
|
|
288
|
+
* Deletes a file
|
|
289
|
+
* @param bucketId
|
|
290
|
+
* @param file
|
|
291
|
+
*/
|
|
292
|
+
Network.deleteFile = function (bucketId, fileId, _a) {
|
|
293
|
+
var client = _a.client, appDetails = _a.appDetails, auth = _a.auth;
|
|
294
|
+
var headers = Network.headersWithBasicAuth(appDetails, auth);
|
|
295
|
+
return client.delete("/v2/buckets/" + bucketId + "/files/" + fileId, headers);
|
|
296
|
+
};
|
|
297
|
+
/**
|
|
298
|
+
* Gets headers with basic auth
|
|
299
|
+
* @param appDetails
|
|
300
|
+
* @param auth
|
|
301
|
+
*/
|
|
302
|
+
Network.headersWithBasicAuth = function (appDetails, auth) {
|
|
303
|
+
return (0, index_1.headersWithBasicAuth)(appDetails.clientName, appDetails.clientVersion, auth);
|
|
304
|
+
};
|
|
305
|
+
Network.headersWithAuthToken = function (appDetails, token) {
|
|
306
|
+
return (0, index_1.headersWithAuthToken)(appDetails.clientName, appDetails.clientVersion, token);
|
|
307
|
+
};
|
|
308
|
+
return Network;
|
|
309
|
+
}());
|
|
310
|
+
exports.Network = Network;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { AppDetails } from '../shared';
|
|
2
|
+
import { HttpClient } from '../shared/http/client';
|
|
3
|
+
import { BasicAuth } from '../auth/types';
|
|
4
|
+
declare type Hash = string;
|
|
5
|
+
export declare type BridgeUrl = string;
|
|
6
|
+
export interface Shard {
|
|
7
|
+
uuid: string;
|
|
8
|
+
hash: Hash;
|
|
9
|
+
}
|
|
10
|
+
export interface ShardForMultipart extends Shard {
|
|
11
|
+
UploadId: string;
|
|
12
|
+
parts: {
|
|
13
|
+
PartNumber: number;
|
|
14
|
+
ETag: string;
|
|
15
|
+
}[];
|
|
16
|
+
}
|
|
17
|
+
export interface StartUploadResponse {
|
|
18
|
+
uploads: {
|
|
19
|
+
index: number;
|
|
20
|
+
uuid: Shard['uuid'];
|
|
21
|
+
url: string | null;
|
|
22
|
+
urls: string[] | null;
|
|
23
|
+
UploadId?: string;
|
|
24
|
+
}[];
|
|
25
|
+
}
|
|
26
|
+
export declare type FinishUploadResponse = BucketEntry;
|
|
27
|
+
export interface BucketEntry {
|
|
28
|
+
id: string;
|
|
29
|
+
index: string;
|
|
30
|
+
bucket: string;
|
|
31
|
+
name: string;
|
|
32
|
+
mimetype: string;
|
|
33
|
+
created: Date;
|
|
34
|
+
}
|
|
35
|
+
export interface DownloadableShard {
|
|
36
|
+
index: number;
|
|
37
|
+
size: number;
|
|
38
|
+
hash: Shard['hash'];
|
|
39
|
+
url: string;
|
|
40
|
+
}
|
|
41
|
+
export interface GetDownloadLinksResponse {
|
|
42
|
+
bucket: string;
|
|
43
|
+
index: string;
|
|
44
|
+
created: Date;
|
|
45
|
+
shards: DownloadableShard[];
|
|
46
|
+
version?: number;
|
|
47
|
+
size: number;
|
|
48
|
+
}
|
|
49
|
+
export interface NetworkRequestConfig {
|
|
50
|
+
client: HttpClient;
|
|
51
|
+
appDetails: AppDetails;
|
|
52
|
+
auth: BasicAuth;
|
|
53
|
+
}
|
|
54
|
+
declare type UploadPayload = {
|
|
55
|
+
index: number;
|
|
56
|
+
size: number;
|
|
57
|
+
};
|
|
58
|
+
export declare type StartUploadPayload = {
|
|
59
|
+
uploads: UploadPayload[];
|
|
60
|
+
};
|
|
61
|
+
export declare type FinishUploadPayload = {
|
|
62
|
+
index: string;
|
|
63
|
+
shards: Shard[];
|
|
64
|
+
};
|
|
65
|
+
export declare type FinishMultipartUploadPayload = {
|
|
66
|
+
index: string;
|
|
67
|
+
shards: ShardForMultipart[];
|
|
68
|
+
};
|
|
69
|
+
export declare type UploadFileFunction = (url: string) => Promise<Hash>;
|
|
70
|
+
export declare type UploadFileMultipartFunction = (urls: string[]) => Promise<{
|
|
71
|
+
hash: Hash;
|
|
72
|
+
parts: {
|
|
73
|
+
PartNumber: number;
|
|
74
|
+
ETag: string;
|
|
75
|
+
}[];
|
|
76
|
+
}>;
|
|
77
|
+
export declare type DownloadFileFunction = (downloadables: DownloadableShard[], fileSize: number) => Promise<void>;
|
|
78
|
+
export declare type BinaryData = {
|
|
79
|
+
slice: (from: number, to: number) => BinaryData;
|
|
80
|
+
toString(encoding: 'hex'): string;
|
|
81
|
+
};
|
|
82
|
+
export declare enum BinaryDataEncoding {
|
|
83
|
+
HEX = "hex"
|
|
84
|
+
}
|
|
85
|
+
export declare type ToBinaryDataFunction = (input: string, encoding: BinaryDataEncoding) => BinaryData;
|
|
86
|
+
export declare enum SymmetricCryptoAlgorithm {
|
|
87
|
+
AES256CTR = "AES256CTR"
|
|
88
|
+
}
|
|
89
|
+
export declare type Algorithm = {
|
|
90
|
+
type: SymmetricCryptoAlgorithm;
|
|
91
|
+
ivSize: number;
|
|
92
|
+
};
|
|
93
|
+
export declare const ALGORITHMS: Record<SymmetricCryptoAlgorithm, Algorithm>;
|
|
94
|
+
export declare type Crypto = {
|
|
95
|
+
algorithm: Algorithm;
|
|
96
|
+
validateMnemonic: (mnemonic: string) => boolean;
|
|
97
|
+
randomBytes: (bytesLength: number) => BinaryData;
|
|
98
|
+
generateFileKey: (mnemonic: string, bucketId: string, index: BinaryData | string) => Promise<BinaryData>;
|
|
99
|
+
};
|
|
100
|
+
export declare type EncryptFileFunction = (algorithm: SymmetricCryptoAlgorithm, key: BinaryData, iv: BinaryData) => Promise<void>;
|
|
101
|
+
export declare type DecryptFileFunction = (algorithm: SymmetricCryptoAlgorithm, key: BinaryData, iv: BinaryData, fileSize: number) => Promise<void>;
|
|
102
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ALGORITHMS = exports.SymmetricCryptoAlgorithm = exports.BinaryDataEncoding = void 0;
|
|
5
|
+
var BinaryDataEncoding;
|
|
6
|
+
(function (BinaryDataEncoding) {
|
|
7
|
+
BinaryDataEncoding["HEX"] = "hex";
|
|
8
|
+
})(BinaryDataEncoding = exports.BinaryDataEncoding || (exports.BinaryDataEncoding = {}));
|
|
9
|
+
var SymmetricCryptoAlgorithm;
|
|
10
|
+
(function (SymmetricCryptoAlgorithm) {
|
|
11
|
+
SymmetricCryptoAlgorithm["AES256CTR"] = "AES256CTR";
|
|
12
|
+
})(SymmetricCryptoAlgorithm = exports.SymmetricCryptoAlgorithm || (exports.SymmetricCryptoAlgorithm = {}));
|
|
13
|
+
exports.ALGORITHMS = (_a = {},
|
|
14
|
+
_a[SymmetricCryptoAlgorithm.AES256CTR] = {
|
|
15
|
+
type: SymmetricCryptoAlgorithm.AES256CTR,
|
|
16
|
+
ivSize: 32
|
|
17
|
+
},
|
|
18
|
+
_a);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Network } from '.';
|
|
2
|
+
import { Crypto, EncryptFileFunction, UploadFileFunction, UploadFileMultipartFunction } from './types';
|
|
3
|
+
export declare function uploadFile(network: Network, crypto: Crypto, bucketId: string, mnemonic: string, fileSize: number, encryptFile: EncryptFileFunction, uploadFile: UploadFileFunction): Promise<string>;
|
|
4
|
+
export declare function uploadMultipartFile(network: Network, crypto: Crypto, bucketId: string, mnemonic: string, fileSize: number, encryptFile: EncryptFileFunction, uploadMultiparts: UploadFileMultipartFunction, parts?: number): Promise<string>;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.uploadMultipartFile = exports.uploadFile = void 0;
|
|
40
|
+
var errors_1 = require("./errors");
|
|
41
|
+
function uploadFile(network, crypto, bucketId, mnemonic, fileSize, encryptFile, uploadFile) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
43
|
+
var index, iv, key, mnemonicIsValid, uploads, _a, url, uuid, hash, finishUploadPayload, finishUploadResponse, err_1, context;
|
|
44
|
+
return __generator(this, function (_b) {
|
|
45
|
+
switch (_b.label) {
|
|
46
|
+
case 0:
|
|
47
|
+
_b.trys.push([0, 6, , 7]);
|
|
48
|
+
mnemonicIsValid = crypto.validateMnemonic(mnemonic);
|
|
49
|
+
if (!mnemonicIsValid) {
|
|
50
|
+
throw new errors_1.UploadInvalidMnemonicError();
|
|
51
|
+
}
|
|
52
|
+
index = crypto.randomBytes(crypto.algorithm.ivSize);
|
|
53
|
+
iv = index.slice(0, 16);
|
|
54
|
+
return [4 /*yield*/, crypto.generateFileKey(mnemonic, bucketId, index)];
|
|
55
|
+
case 1:
|
|
56
|
+
key = _b.sent();
|
|
57
|
+
return [4 /*yield*/, network.startUpload(bucketId, {
|
|
58
|
+
uploads: [{
|
|
59
|
+
index: 0,
|
|
60
|
+
size: fileSize
|
|
61
|
+
}]
|
|
62
|
+
})];
|
|
63
|
+
case 2:
|
|
64
|
+
uploads = (_b.sent()).uploads;
|
|
65
|
+
_a = uploads[0], url = _a.url, uuid = _a.uuid;
|
|
66
|
+
if (!url) {
|
|
67
|
+
throw new errors_1.UrlNotReceivedFromNetworkError();
|
|
68
|
+
}
|
|
69
|
+
return [4 /*yield*/, encryptFile(crypto.algorithm.type, key, iv)];
|
|
70
|
+
case 3:
|
|
71
|
+
_b.sent();
|
|
72
|
+
return [4 /*yield*/, uploadFile(url)];
|
|
73
|
+
case 4:
|
|
74
|
+
hash = _b.sent();
|
|
75
|
+
finishUploadPayload = {
|
|
76
|
+
index: index.toString('hex'),
|
|
77
|
+
shards: [{ hash: hash, uuid: uuid }]
|
|
78
|
+
};
|
|
79
|
+
return [4 /*yield*/, network.finishUpload(bucketId, finishUploadPayload)];
|
|
80
|
+
case 5:
|
|
81
|
+
finishUploadResponse = _b.sent();
|
|
82
|
+
return [2 /*return*/, finishUploadResponse.id];
|
|
83
|
+
case 6:
|
|
84
|
+
err_1 = _b.sent();
|
|
85
|
+
context = (0, errors_1.getNetworkErrorContext)({
|
|
86
|
+
bucketId: bucketId,
|
|
87
|
+
fileSize: fileSize,
|
|
88
|
+
user: network.credentials.username,
|
|
89
|
+
pass: network.credentials.password,
|
|
90
|
+
crypto: {
|
|
91
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
92
|
+
index: index ? index.toString('hex') : 'none',
|
|
93
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
94
|
+
iv: iv ? iv.toString('hex') : 'none',
|
|
95
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
96
|
+
key: key ? key.toString('hex') : 'none',
|
|
97
|
+
mnemonic: mnemonic
|
|
98
|
+
}
|
|
99
|
+
}, err_1);
|
|
100
|
+
err_1.context = context;
|
|
101
|
+
throw err_1;
|
|
102
|
+
case 7: return [2 /*return*/];
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
exports.uploadFile = uploadFile;
|
|
108
|
+
function uploadMultipartFile(network, crypto, bucketId, mnemonic, fileSize, encryptFile, uploadMultiparts, parts) {
|
|
109
|
+
if (parts === void 0) { parts = 1; }
|
|
110
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
111
|
+
var mnemonicIsValid, index, iv, key, uploads, _a, urls, uuid, UploadId, _b, hash, uploadedPartsReference, finishUploadPayload, finishUploadResponse;
|
|
112
|
+
return __generator(this, function (_c) {
|
|
113
|
+
switch (_c.label) {
|
|
114
|
+
case 0:
|
|
115
|
+
mnemonicIsValid = crypto.validateMnemonic(mnemonic);
|
|
116
|
+
if (!mnemonicIsValid) {
|
|
117
|
+
throw new errors_1.UploadInvalidMnemonicError();
|
|
118
|
+
}
|
|
119
|
+
index = crypto.randomBytes(crypto.algorithm.ivSize);
|
|
120
|
+
iv = index.slice(0, 16);
|
|
121
|
+
return [4 /*yield*/, crypto.generateFileKey(mnemonic, bucketId, index)];
|
|
122
|
+
case 1:
|
|
123
|
+
key = _c.sent();
|
|
124
|
+
return [4 /*yield*/, network.startUpload(bucketId, {
|
|
125
|
+
uploads: [
|
|
126
|
+
{
|
|
127
|
+
index: 0,
|
|
128
|
+
size: fileSize,
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
}, parts)];
|
|
132
|
+
case 2:
|
|
133
|
+
uploads = (_c.sent()).uploads;
|
|
134
|
+
_a = uploads[0], urls = _a.urls, uuid = _a.uuid, UploadId = _a.UploadId;
|
|
135
|
+
if (!urls) {
|
|
136
|
+
throw new errors_1.UrlsNotReceivedFromNetworkError();
|
|
137
|
+
}
|
|
138
|
+
if (!UploadId) {
|
|
139
|
+
throw new errors_1.UploadIdNotReceivedFromNetworkError();
|
|
140
|
+
}
|
|
141
|
+
return [4 /*yield*/, encryptFile(crypto.algorithm.type, key, iv)];
|
|
142
|
+
case 3:
|
|
143
|
+
_c.sent();
|
|
144
|
+
return [4 /*yield*/, uploadMultiparts(urls)];
|
|
145
|
+
case 4:
|
|
146
|
+
_b = _c.sent(), hash = _b.hash, uploadedPartsReference = _b.parts;
|
|
147
|
+
finishUploadPayload = {
|
|
148
|
+
index: index.toString('hex'),
|
|
149
|
+
shards: [{ hash: hash, uuid: uuid, UploadId: UploadId, parts: uploadedPartsReference }],
|
|
150
|
+
};
|
|
151
|
+
return [4 /*yield*/, network.finishUpload(bucketId, finishUploadPayload)];
|
|
152
|
+
case 5:
|
|
153
|
+
finishUploadResponse = _c.sent();
|
|
154
|
+
return [2 /*return*/, finishUploadResponse.id];
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
exports.uploadMultipartFile = uploadMultipartFile;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CreateDeviceData, Device, DeviceId, PhotosSdkModel } from '..';
|
|
2
|
+
export default class DevicesSubmodule {
|
|
3
|
+
private model;
|
|
4
|
+
constructor(model: PhotosSdkModel);
|
|
5
|
+
getDeviceById(deviceId: DeviceId): Promise<Device>;
|
|
6
|
+
getDevices(): Promise<Device[]>;
|
|
7
|
+
createDevice(data: CreateDeviceData): Promise<Device>;
|
|
8
|
+
deleteDevice(deviceId: DeviceId): Promise<void>;
|
|
9
|
+
private parse;
|
|
10
|
+
}
|