@verdaccio/local-storage 10.3.0 → 10.3.2
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/lib/index.js +0 -3
- package/lib/index.js.map +1 -1
- package/lib/local-database.js +13 -101
- package/lib/local-database.js.map +1 -1
- package/lib/local-fs.js +11 -89
- package/lib/local-fs.js.map +1 -1
- package/lib/pkg-utils.js +2 -11
- package/lib/pkg-utils.js.map +1 -1
- package/lib/token.js +3 -33
- package/lib/token.js.map +1 -1
- package/lib/utils.js +3 -20
- package/lib/utils.js.map +1 -1
- package/package.json +5 -7
- package/lib/index.d.ts +0 -3
- package/lib/local-database.d.ts +0 -50
- package/lib/local-fs.d.ts +0 -47
- package/lib/pkg-utils.d.ts +0 -2
- package/lib/token.d.ts +0 -12
- package/lib/utils.d.ts +0 -8
package/lib/local-fs.js
CHANGED
|
@@ -4,26 +4,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.resourceNotAvailable = exports.pkgFileName = exports.noSuchFile = exports.fileExist = exports.fSError = exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _fs = _interopRequireDefault(require("fs"));
|
|
9
|
-
|
|
10
8
|
var _path = _interopRequireDefault(require("path"));
|
|
11
|
-
|
|
12
9
|
var _debug = _interopRequireDefault(require("debug"));
|
|
13
|
-
|
|
14
10
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
|
-
|
|
16
11
|
var _mkdirp = _interopRequireDefault(require("mkdirp"));
|
|
17
|
-
|
|
18
12
|
var _streams = require("@verdaccio/streams");
|
|
19
|
-
|
|
20
13
|
var _fileLocking = require("@verdaccio/file-locking");
|
|
21
|
-
|
|
22
14
|
var _commonsApi = require("@verdaccio/commons-api");
|
|
23
|
-
|
|
24
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
-
|
|
26
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
16
|
+
/* eslint-disable no-undef */
|
|
27
17
|
|
|
28
18
|
const fileExist = 'EEXISTS';
|
|
29
19
|
exports.fileExist = fileExist;
|
|
@@ -34,56 +24,44 @@ exports.resourceNotAvailable = resourceNotAvailable;
|
|
|
34
24
|
const pkgFileName = 'package.json';
|
|
35
25
|
exports.pkgFileName = pkgFileName;
|
|
36
26
|
const debug = (0, _debug.default)('verdaccio:plugin:local-storage:fs');
|
|
37
|
-
|
|
38
27
|
const fSError = function (message, code = 409) {
|
|
39
|
-
const err = (0, _commonsApi.getCode)(code, message);
|
|
28
|
+
const err = (0, _commonsApi.getCode)(code, message);
|
|
29
|
+
// FIXME: we should return http-status codes here instead, future improvement
|
|
40
30
|
// @ts-ignore
|
|
41
|
-
|
|
42
31
|
err.code = message;
|
|
43
32
|
return err;
|
|
44
33
|
};
|
|
45
|
-
|
|
46
34
|
exports.fSError = fSError;
|
|
47
|
-
|
|
48
35
|
const tempFile = function (str) {
|
|
49
36
|
return `${str}.tmp${String(Math.random()).substr(2)}`;
|
|
50
37
|
};
|
|
51
|
-
|
|
52
38
|
const renameTmp = function (src, dst, _cb) {
|
|
53
39
|
const cb = err => {
|
|
54
40
|
if (err) {
|
|
55
41
|
_fs.default.unlink(src, () => {});
|
|
56
42
|
}
|
|
57
|
-
|
|
58
43
|
_cb(err);
|
|
59
44
|
};
|
|
60
|
-
|
|
61
45
|
if (process.platform !== 'win32') {
|
|
62
46
|
return _fs.default.rename(src, dst, cb);
|
|
63
|
-
}
|
|
64
|
-
// but it seem to be able to rename it
|
|
65
|
-
|
|
47
|
+
}
|
|
66
48
|
|
|
49
|
+
// windows can't remove opened file,
|
|
50
|
+
// but it seem to be able to rename it
|
|
67
51
|
const tmp = tempFile(dst);
|
|
68
|
-
|
|
69
52
|
_fs.default.rename(dst, tmp, function (err) {
|
|
70
53
|
_fs.default.rename(src, dst, cb);
|
|
71
|
-
|
|
72
54
|
if (!err) {
|
|
73
55
|
_fs.default.unlink(tmp, () => {});
|
|
74
56
|
}
|
|
75
57
|
});
|
|
76
58
|
};
|
|
77
|
-
|
|
78
59
|
class LocalFS {
|
|
79
60
|
constructor(path, logger) {
|
|
80
|
-
_defineProperty(this, "path", void 0);
|
|
81
|
-
|
|
82
|
-
_defineProperty(this, "logger", void 0);
|
|
83
|
-
|
|
84
61
|
this.path = path;
|
|
85
62
|
this.logger = logger;
|
|
86
63
|
}
|
|
64
|
+
|
|
87
65
|
/**
|
|
88
66
|
* This function allows to update the package thread-safely
|
|
89
67
|
Algorithm:
|
|
@@ -99,24 +77,20 @@ class LocalFS {
|
|
|
99
77
|
* @param {*} transformPackage
|
|
100
78
|
* @param {*} onEnd
|
|
101
79
|
*/
|
|
102
|
-
|
|
103
|
-
|
|
104
80
|
updatePackage(name, updateHandler, onWrite, transformPackage, onEnd) {
|
|
105
81
|
this._lockAndReadJSON(pkgFileName, (err, json) => {
|
|
106
82
|
let locked = false;
|
|
107
|
-
const self = this;
|
|
108
|
-
|
|
83
|
+
const self = this;
|
|
84
|
+
// callback that cleans up lock first
|
|
109
85
|
const unLockCallback = function (lockError) {
|
|
110
86
|
// eslint-disable-next-line prefer-rest-params
|
|
111
87
|
const _args = arguments;
|
|
112
|
-
|
|
113
88
|
if (locked) {
|
|
114
89
|
self._unlockJSON(pkgFileName, () => {
|
|
115
90
|
// ignore any error from the unlock
|
|
116
91
|
if (lockError !== null) {
|
|
117
92
|
debug('lock file: %o has failed with error %o', name, lockError);
|
|
118
93
|
}
|
|
119
|
-
|
|
120
94
|
onEnd.apply(lockError, _args);
|
|
121
95
|
});
|
|
122
96
|
} else {
|
|
@@ -124,12 +98,10 @@ class LocalFS {
|
|
|
124
98
|
onEnd(..._args);
|
|
125
99
|
}
|
|
126
100
|
};
|
|
127
|
-
|
|
128
101
|
if (!err) {
|
|
129
102
|
locked = true;
|
|
130
103
|
debug('file: %o has been locked', name);
|
|
131
104
|
}
|
|
132
|
-
|
|
133
105
|
if (_lodash.default.isNil(err) === false) {
|
|
134
106
|
if (err.code === resourceNotAvailable) {
|
|
135
107
|
return unLockCallback((0, _commonsApi.getInternalError)('resource temporarily unavailable'));
|
|
@@ -139,43 +111,32 @@ class LocalFS {
|
|
|
139
111
|
return unLockCallback(err);
|
|
140
112
|
}
|
|
141
113
|
}
|
|
142
|
-
|
|
143
114
|
updateHandler(json, err => {
|
|
144
115
|
if (err) {
|
|
145
116
|
return unLockCallback(err);
|
|
146
117
|
}
|
|
147
|
-
|
|
148
118
|
onWrite(name, transformPackage(json), unLockCallback);
|
|
149
119
|
});
|
|
150
120
|
});
|
|
151
121
|
}
|
|
152
|
-
|
|
153
122
|
deletePackage(packageName, callback) {
|
|
154
123
|
debug('delete a package %o', packageName);
|
|
155
124
|
return _fs.default.unlink(this._getStorage(packageName), callback);
|
|
156
125
|
}
|
|
157
|
-
|
|
158
126
|
removePackage(callback) {
|
|
159
127
|
debug('remove a package %o', this.path);
|
|
160
|
-
|
|
161
128
|
_fs.default.rmdir(this._getStorage('.'), callback);
|
|
162
129
|
}
|
|
163
|
-
|
|
164
130
|
createPackage(name, value, cb) {
|
|
165
131
|
debug('create a package %o', name);
|
|
166
|
-
|
|
167
132
|
this._createFile(this._getStorage(pkgFileName), this._convertToString(value), cb);
|
|
168
133
|
}
|
|
169
|
-
|
|
170
134
|
savePackage(name, value, cb) {
|
|
171
135
|
debug('save a package %o', name);
|
|
172
|
-
|
|
173
136
|
this._writeFile(this._getStorage(pkgFileName), this._convertToString(value), cb);
|
|
174
137
|
}
|
|
175
|
-
|
|
176
138
|
readPackage(name, cb) {
|
|
177
139
|
debug('read a package %o', name);
|
|
178
|
-
|
|
179
140
|
this._readStorageFile(this._getStorage(pkgFileName)).then(res => {
|
|
180
141
|
try {
|
|
181
142
|
const data = JSON.parse(res.toString('utf8'));
|
|
@@ -190,7 +151,6 @@ class LocalFS {
|
|
|
190
151
|
return cb(err);
|
|
191
152
|
});
|
|
192
153
|
}
|
|
193
|
-
|
|
194
154
|
writeTarball(name) {
|
|
195
155
|
const uploadStream = new _streams.UploadTarball({});
|
|
196
156
|
debug('write a tarball for a package %o', name);
|
|
@@ -198,26 +158,18 @@ class LocalFS {
|
|
|
198
158
|
uploadStream.on('end', function () {
|
|
199
159
|
_ended = 1;
|
|
200
160
|
});
|
|
201
|
-
|
|
202
161
|
const pathName = this._getStorage(name);
|
|
203
|
-
|
|
204
162
|
_fs.default.access(pathName, fileNotFound => {
|
|
205
163
|
const exists = !fileNotFound;
|
|
206
|
-
|
|
207
164
|
if (exists) {
|
|
208
165
|
uploadStream.emit('error', fSError(fileExist));
|
|
209
166
|
} else {
|
|
210
167
|
const temporalName = _path.default.join(this.path, `${name}.tmp-${String(Math.random()).replace(/^0\./, '')}`);
|
|
211
|
-
|
|
212
168
|
debug('write a temporal name %o', temporalName);
|
|
213
|
-
|
|
214
169
|
const file = _fs.default.createWriteStream(temporalName);
|
|
215
|
-
|
|
216
170
|
const removeTempFile = () => _fs.default.unlink(temporalName, () => {});
|
|
217
|
-
|
|
218
171
|
let opened = false;
|
|
219
172
|
uploadStream.pipe(file);
|
|
220
|
-
|
|
221
173
|
uploadStream.done = function () {
|
|
222
174
|
const onend = function () {
|
|
223
175
|
file.on('close', function () {
|
|
@@ -231,14 +183,12 @@ class LocalFS {
|
|
|
231
183
|
});
|
|
232
184
|
file.end();
|
|
233
185
|
};
|
|
234
|
-
|
|
235
186
|
if (_ended) {
|
|
236
187
|
onend();
|
|
237
188
|
} else {
|
|
238
189
|
uploadStream.on('end', onend);
|
|
239
190
|
}
|
|
240
191
|
};
|
|
241
|
-
|
|
242
192
|
uploadStream.abort = function () {
|
|
243
193
|
if (opened) {
|
|
244
194
|
opened = false;
|
|
@@ -249,13 +199,11 @@ class LocalFS {
|
|
|
249
199
|
// if the file does not recieve any byte never is opened and has to be removed anyway.
|
|
250
200
|
removeTempFile();
|
|
251
201
|
}
|
|
252
|
-
|
|
253
202
|
file.end();
|
|
254
203
|
};
|
|
255
|
-
|
|
256
204
|
file.on('open', function () {
|
|
257
|
-
opened = true;
|
|
258
|
-
|
|
205
|
+
opened = true;
|
|
206
|
+
// re-emitting open because it's handled in storage.js
|
|
259
207
|
uploadStream.emit('open');
|
|
260
208
|
});
|
|
261
209
|
file.on('error', function (err) {
|
|
@@ -263,18 +211,13 @@ class LocalFS {
|
|
|
263
211
|
});
|
|
264
212
|
}
|
|
265
213
|
});
|
|
266
|
-
|
|
267
214
|
return uploadStream;
|
|
268
215
|
}
|
|
269
|
-
|
|
270
216
|
readTarball(name) {
|
|
271
217
|
const pathName = this._getStorage(name);
|
|
272
|
-
|
|
273
218
|
debug('read a a tarball %o on path %o', name, pathName);
|
|
274
219
|
const readTarballStream = new _streams.ReadTarball({});
|
|
275
|
-
|
|
276
220
|
const readStream = _fs.default.createReadStream(pathName);
|
|
277
|
-
|
|
278
221
|
readStream.on('error', function (err) {
|
|
279
222
|
debug('error on read a tarball %o with error %o', name, err);
|
|
280
223
|
readTarballStream.emit('error', err);
|
|
@@ -285,25 +228,20 @@ class LocalFS {
|
|
|
285
228
|
debug('error on read a tarball %o with error %o', name, err);
|
|
286
229
|
return readTarballStream.emit('error', err);
|
|
287
230
|
}
|
|
288
|
-
|
|
289
231
|
readTarballStream.emit('content-length', stats.size);
|
|
290
232
|
readTarballStream.emit('open');
|
|
291
233
|
debug('open on read a tarball %o', name);
|
|
292
234
|
readStream.pipe(readTarballStream);
|
|
293
235
|
});
|
|
294
236
|
});
|
|
295
|
-
|
|
296
237
|
readTarballStream.abort = function () {
|
|
297
238
|
debug('abort on read a tarball %o', name);
|
|
298
239
|
readStream.close();
|
|
299
240
|
};
|
|
300
|
-
|
|
301
241
|
return readTarballStream;
|
|
302
242
|
}
|
|
303
|
-
|
|
304
243
|
_createFile(name, contents, callback) {
|
|
305
244
|
debug(' create a new file: %o', name);
|
|
306
|
-
|
|
307
245
|
_fs.default.open(name, 'wx', err => {
|
|
308
246
|
if (err) {
|
|
309
247
|
// native EEXIST used here to check exception on fs.open
|
|
@@ -312,15 +250,12 @@ class LocalFS {
|
|
|
312
250
|
return callback(fSError(fileExist));
|
|
313
251
|
}
|
|
314
252
|
}
|
|
315
|
-
|
|
316
253
|
this._writeFile(name, contents, callback);
|
|
317
254
|
});
|
|
318
255
|
}
|
|
319
|
-
|
|
320
256
|
_readStorageFile(name) {
|
|
321
257
|
return new Promise((resolve, reject) => {
|
|
322
258
|
debug('reading the file: %o', name);
|
|
323
|
-
|
|
324
259
|
_fs.default.readFile(name, (err, data) => {
|
|
325
260
|
if (err) {
|
|
326
261
|
debug('error reading the file: %o with error %o', name, err);
|
|
@@ -332,32 +267,25 @@ class LocalFS {
|
|
|
332
267
|
});
|
|
333
268
|
});
|
|
334
269
|
}
|
|
335
|
-
|
|
336
270
|
_convertToString(value) {
|
|
337
271
|
return JSON.stringify(value, null, '\t');
|
|
338
272
|
}
|
|
339
|
-
|
|
340
273
|
_getStorage(fileName = '') {
|
|
341
274
|
const storagePath = _path.default.join(this.path, fileName);
|
|
342
|
-
|
|
343
275
|
return storagePath;
|
|
344
276
|
}
|
|
345
|
-
|
|
346
277
|
_writeFile(dest, data, cb) {
|
|
347
278
|
const createTempFile = cb => {
|
|
348
279
|
const tempFilePath = tempFile(dest);
|
|
349
|
-
|
|
350
280
|
_fs.default.writeFile(tempFilePath, data, err => {
|
|
351
281
|
if (err) {
|
|
352
282
|
debug('error on write the file: %o', dest);
|
|
353
283
|
return cb(err);
|
|
354
284
|
}
|
|
355
|
-
|
|
356
285
|
debug('creating a new file:: %o', dest);
|
|
357
286
|
renameTmp(tempFilePath, dest, cb);
|
|
358
287
|
});
|
|
359
288
|
};
|
|
360
|
-
|
|
361
289
|
createTempFile(err => {
|
|
362
290
|
if (err && err.code === noSuchFile) {
|
|
363
291
|
(0, _mkdirp.default)(_path.default.dirname(dest)).then(() => {
|
|
@@ -370,10 +298,8 @@ class LocalFS {
|
|
|
370
298
|
}
|
|
371
299
|
});
|
|
372
300
|
}
|
|
373
|
-
|
|
374
301
|
_lockAndReadJSON(name, cb) {
|
|
375
302
|
const fileName = this._getStorage(name);
|
|
376
|
-
|
|
377
303
|
(0, _fileLocking.readFile)(fileName, {
|
|
378
304
|
lock: true,
|
|
379
305
|
parse: true
|
|
@@ -382,17 +308,13 @@ class LocalFS {
|
|
|
382
308
|
debug('error on lock and read json for file: %o', name);
|
|
383
309
|
return cb(err);
|
|
384
310
|
}
|
|
385
|
-
|
|
386
311
|
debug('lock and read json for file: %o', name);
|
|
387
312
|
return cb(null, res);
|
|
388
313
|
});
|
|
389
314
|
}
|
|
390
|
-
|
|
391
315
|
_unlockJSON(name, cb) {
|
|
392
316
|
(0, _fileLocking.unlockFile)(this._getStorage(name), cb);
|
|
393
317
|
}
|
|
394
|
-
|
|
395
318
|
}
|
|
396
|
-
|
|
397
319
|
exports.default = LocalFS;
|
|
398
320
|
//# sourceMappingURL=local-fs.js.map
|
package/lib/local-fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-fs.js","names":["fileExist","noSuchFile","resourceNotAvailable","pkgFileName","debug","buildDebug","fSError","message","code","err","getCode","tempFile","str","String","Math","random","substr","renameTmp","src","dst","_cb","cb","fs","unlink","process","platform","rename","tmp","LocalFS","constructor","path","logger","updatePackage","name","updateHandler","onWrite","transformPackage","onEnd","_lockAndReadJSON","json","locked","self","unLockCallback","lockError","_args","arguments","_unlockJSON","apply","_","isNil","getInternalError","getNotFound","deletePackage","packageName","callback","_getStorage","removePackage","rmdir","createPackage","value","_createFile","_convertToString","savePackage","_writeFile","readPackage","_readStorageFile","then","res","data","JSON","parse","toString","writeTarball","uploadStream","UploadTarball","_ended","on","pathName","access","fileNotFound","exists","emit","temporalName","join","replace","file","createWriteStream","removeTempFile","opened","pipe","done","onend","end","abort","readTarball","readTarballStream","ReadTarball","readStream","createReadStream","fd","fstat","stats","size","close","contents","open","Promise","resolve","reject","readFile","stringify","fileName","storagePath","dest","createTempFile","tempFilePath","writeFile","mkdirp","dirname","catch","lock","unlockFile"],"sources":["../src/local-fs.ts"],"sourcesContent":["/* eslint-disable no-undef */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport mkdirp from 'mkdirp';\nimport { UploadTarball, ReadTarball } from '@verdaccio/streams';\nimport { unlockFile, readFile } from '@verdaccio/file-locking';\nimport { Callback, Logger, Package, ILocalPackageManager, IUploadTarball } from '@verdaccio/types';\nimport { getCode, getInternalError, getNotFound, VerdaccioError } from '@verdaccio/commons-api';\n\nexport const fileExist = 'EEXISTS';\nexport const noSuchFile = 'ENOENT';\nexport const resourceNotAvailable = 'EAGAIN';\nexport const pkgFileName = 'package.json';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage:fs');\n\nexport const fSError = function(message: string, code = 409): VerdaccioError {\n const err: VerdaccioError = getCode(code, message);\n // FIXME: we should return http-status codes here instead, future improvement\n // @ts-ignore\n err.code = message;\n\n return err;\n};\n\nconst tempFile = function(str): string {\n return `${str}.tmp${String(Math.random()).substr(2)}`;\n};\n\nconst renameTmp = function(src, dst, _cb): void {\n const cb = (err): void => {\n if (err) {\n fs.unlink(src, () => {});\n }\n _cb(err);\n };\n\n if (process.platform !== 'win32') {\n return fs.rename(src, dst, cb);\n }\n\n // windows can't remove opened file,\n // but it seem to be able to rename it\n const tmp = tempFile(dst);\n fs.rename(dst, tmp, function(err) {\n fs.rename(src, dst, cb);\n if (!err) {\n fs.unlink(tmp, () => {});\n }\n });\n};\n\nexport type ILocalFSPackageManager = ILocalPackageManager & { path: string };\n\nexport default class LocalFS implements ILocalFSPackageManager {\n public path: string;\n public logger: Logger;\n\n public constructor(path: string, logger: Logger) {\n this.path = path;\n this.logger = logger;\n }\n\n /**\n * This function allows to update the package thread-safely\n Algorithm:\n 1. lock package.json for writing\n 2. read package.json\n 3. updateFn(pkg, cb), and wait for cb\n 4. write package.json.tmp\n 5. move package.json.tmp package.json\n 6. callback(err?)\n * @param {*} name\n * @param {*} updateHandler\n * @param {*} onWrite\n * @param {*} transformPackage\n * @param {*} onEnd\n */\n public updatePackage(\n name: string,\n updateHandler: Callback,\n onWrite: Callback,\n transformPackage: Function,\n onEnd: Callback\n ): void {\n this._lockAndReadJSON(pkgFileName, (err, json) => {\n let locked = false;\n const self = this;\n // callback that cleans up lock first\n const unLockCallback = function(lockError: Error): void {\n // eslint-disable-next-line prefer-rest-params\n const _args = arguments;\n\n if (locked) {\n self._unlockJSON(pkgFileName, () => {\n // ignore any error from the unlock\n if (lockError !== null) {\n debug('lock file: %o has failed with error %o', name, lockError);\n }\n\n onEnd.apply(lockError, _args);\n });\n } else {\n debug('file: %o has been updated', name);\n onEnd(..._args);\n }\n };\n\n if (!err) {\n locked = true;\n debug('file: %o has been locked', name);\n }\n\n if (_.isNil(err) === false) {\n if (err.code === resourceNotAvailable) {\n return unLockCallback(getInternalError('resource temporarily unavailable'));\n } else if (err.code === noSuchFile) {\n return unLockCallback(getNotFound());\n } else {\n return unLockCallback(err);\n }\n }\n\n updateHandler(json, err => {\n if (err) {\n return unLockCallback(err);\n }\n\n onWrite(name, transformPackage(json), unLockCallback);\n });\n });\n }\n\n public deletePackage(packageName: string, callback: (err: NodeJS.ErrnoException | null) => void): void {\n debug('delete a package %o', packageName);\n\n return fs.unlink(this._getStorage(packageName), callback);\n }\n\n public removePackage(callback: (err: NodeJS.ErrnoException | null) => void): void {\n debug('remove a package %o', this.path);\n\n fs.rmdir(this._getStorage('.'), callback);\n }\n\n public createPackage(name: string, value: Package, cb: Callback): void {\n debug('create a package %o', name);\n\n this._createFile(this._getStorage(pkgFileName), this._convertToString(value), cb);\n }\n\n public savePackage(name: string, value: Package, cb: Callback): void {\n debug('save a package %o', name);\n\n this._writeFile(this._getStorage(pkgFileName), this._convertToString(value), cb);\n }\n\n public readPackage(name: string, cb: Callback): void {\n debug('read a package %o', name);\n\n this._readStorageFile(this._getStorage(pkgFileName)).then(\n res => {\n try {\n const data: any = JSON.parse(res.toString('utf8'));\n\n debug('read storage file %o has succeed', name);\n cb(null, data);\n } catch (err) {\n debug('parse storage file %o has failed with error %o', name, err);\n cb(err);\n }\n },\n err => {\n debug('read storage file %o has failed with error %o', name, err);\n\n return cb(err);\n }\n );\n }\n\n public writeTarball(name: string): IUploadTarball {\n const uploadStream = new UploadTarball({});\n debug('write a tarball for a package %o', name);\n\n let _ended = 0;\n uploadStream.on('end', function() {\n _ended = 1;\n });\n\n const pathName: string = this._getStorage(name);\n\n fs.access(pathName, fileNotFound => {\n const exists = !fileNotFound;\n if (exists) {\n uploadStream.emit('error', fSError(fileExist));\n } else {\n const temporalName = path.join(this.path, `${name}.tmp-${String(Math.random()).replace(/^0\\./, '')}`);\n debug('write a temporal name %o', temporalName);\n const file = fs.createWriteStream(temporalName);\n const removeTempFile = (): void => fs.unlink(temporalName, () => {});\n let opened = false;\n uploadStream.pipe(file);\n\n uploadStream.done = function(): void {\n const onend = function(): void {\n file.on('close', function() {\n renameTmp(temporalName, pathName, function(err) {\n if (err) {\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n });\n });\n file.end();\n };\n if (_ended) {\n onend();\n } else {\n uploadStream.on('end', onend);\n }\n };\n\n uploadStream.abort = function(): void {\n if (opened) {\n opened = false;\n file.on('close', function() {\n removeTempFile();\n });\n } else {\n // if the file does not recieve any byte never is opened and has to be removed anyway.\n removeTempFile();\n }\n file.end();\n };\n\n file.on('open', function() {\n opened = true;\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n file.on('error', function(err) {\n uploadStream.emit('error', err);\n });\n }\n });\n\n return uploadStream;\n }\n\n public readTarball(name: string): ReadTarball {\n const pathName: string = this._getStorage(name);\n debug('read a a tarball %o on path %o', name, pathName);\n\n const readTarballStream = new ReadTarball({});\n\n const readStream = fs.createReadStream(pathName);\n\n readStream.on('error', function(err) {\n debug('error on read a tarball %o with error %o', name, err);\n readTarballStream.emit('error', err);\n });\n\n readStream.on('open', function(fd) {\n fs.fstat(fd, function(err, stats) {\n if (_.isNil(err) === false) {\n debug('error on read a tarball %o with error %o', name, err);\n return readTarballStream.emit('error', err);\n }\n readTarballStream.emit('content-length', stats.size);\n readTarballStream.emit('open');\n debug('open on read a tarball %o', name);\n readStream.pipe(readTarballStream);\n });\n });\n\n readTarballStream.abort = function(): void {\n debug('abort on read a tarball %o', name);\n readStream.close();\n };\n\n return readTarballStream;\n }\n\n private _createFile(name: string, contents: any, callback: Function): void {\n debug(' create a new file: %o', name);\n\n fs.open(name, 'wx', err => {\n if (err) {\n // native EEXIST used here to check exception on fs.open\n if (err.code === 'EEXIST') {\n debug('file %o cannot be created, it already exists: %o', name);\n return callback(fSError(fileExist));\n }\n }\n\n this._writeFile(name, contents, callback);\n });\n }\n\n private _readStorageFile(name: string): Promise<any> {\n return new Promise((resolve, reject): void => {\n debug('reading the file: %o', name);\n\n fs.readFile(name, (err, data) => {\n if (err) {\n debug('error reading the file: %o with error %o', name, err);\n reject(err);\n } else {\n debug('read file %o succeed', name);\n\n resolve(data);\n }\n });\n });\n }\n\n private _convertToString(value: Package): string {\n return JSON.stringify(value, null, '\\t');\n }\n\n private _getStorage(fileName = ''): string {\n const storagePath: string = path.join(this.path, fileName);\n\n return storagePath;\n }\n\n private _writeFile(dest: string, data: string, cb: Callback): void {\n const createTempFile = (cb): void => {\n const tempFilePath = tempFile(dest);\n\n fs.writeFile(tempFilePath, data, err => {\n if (err) {\n debug('error on write the file: %o', dest);\n return cb(err);\n }\n\n debug('creating a new file:: %o', dest);\n renameTmp(tempFilePath, dest, cb);\n });\n };\n\n createTempFile(err => {\n if (err && err.code === noSuchFile) {\n mkdirp(path.dirname(dest))\n .then(() => {\n createTempFile(cb);\n })\n .catch(err => {\n return cb(err);\n });\n } else {\n cb(err);\n }\n });\n }\n\n private _lockAndReadJSON(name: string, cb: Function): void {\n const fileName: string = this._getStorage(name);\n\n readFile(\n fileName,\n {\n lock: true,\n parse: true,\n },\n (err, res) => {\n if (err) {\n debug('error on lock and read json for file: %o', name);\n\n return cb(err);\n }\n debug('lock and read json for file: %o', name);\n\n return cb(null, res);\n }\n );\n }\n\n private _unlockJSON(name: string, cb: Function): void {\n unlockFile(this._getStorage(name), cb);\n }\n}\n"],"mappings":";;;;;;;AAEA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;AAEO,MAAMA,SAAS,GAAG,SAAlB;;AACA,MAAMC,UAAU,GAAG,QAAnB;;AACA,MAAMC,oBAAoB,GAAG,QAA7B;;AACA,MAAMC,WAAW,GAAG,cAApB;;AAEP,MAAMC,KAAK,GAAG,IAAAC,cAAA,EAAW,mCAAX,CAAd;;AAEO,MAAMC,OAAO,GAAG,UAASC,OAAT,EAA0BC,IAAI,GAAG,GAAjC,EAAsD;EAC3E,MAAMC,GAAmB,GAAG,IAAAC,mBAAA,EAAQF,IAAR,EAAcD,OAAd,CAA5B,CAD2E,CAE3E;EACA;;EACAE,GAAG,CAACD,IAAJ,GAAWD,OAAX;EAEA,OAAOE,GAAP;AACD,CAPM;;;;AASP,MAAME,QAAQ,GAAG,UAASC,GAAT,EAAsB;EACrC,OAAQ,GAAEA,GAAI,OAAMC,MAAM,CAACC,IAAI,CAACC,MAAL,EAAD,CAAN,CAAsBC,MAAtB,CAA6B,CAA7B,CAAgC,EAApD;AACD,CAFD;;AAIA,MAAMC,SAAS,GAAG,UAASC,GAAT,EAAcC,GAAd,EAAmBC,GAAnB,EAA8B;EAC9C,MAAMC,EAAE,GAAIZ,GAAD,IAAe;IACxB,IAAIA,GAAJ,EAAS;MACPa,WAAA,CAAGC,MAAH,CAAUL,GAAV,EAAe,MAAM,CAAE,CAAvB;IACD;;IACDE,GAAG,CAACX,GAAD,CAAH;EACD,CALD;;EAOA,IAAIe,OAAO,CAACC,QAAR,KAAqB,OAAzB,EAAkC;IAChC,OAAOH,WAAA,CAAGI,MAAH,CAAUR,GAAV,EAAeC,GAAf,EAAoBE,EAApB,CAAP;EACD,CAV6C,CAY9C;EACA;;;EACA,MAAMM,GAAG,GAAGhB,QAAQ,CAACQ,GAAD,CAApB;;EACAG,WAAA,CAAGI,MAAH,CAAUP,GAAV,EAAeQ,GAAf,EAAoB,UAASlB,GAAT,EAAc;IAChCa,WAAA,CAAGI,MAAH,CAAUR,GAAV,EAAeC,GAAf,EAAoBE,EAApB;;IACA,IAAI,CAACZ,GAAL,EAAU;MACRa,WAAA,CAAGC,MAAH,CAAUI,GAAV,EAAe,MAAM,CAAE,CAAvB;IACD;EACF,CALD;AAMD,CArBD;;AAyBe,MAAMC,OAAN,CAAgD;EAItDC,WAAW,CAACC,IAAD,EAAeC,MAAf,EAA+B;IAAA;;IAAA;;IAC/C,KAAKD,IAAL,GAAYA,IAAZ;IACA,KAAKC,MAAL,GAAcA,MAAd;EACD;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;EACSC,aAAa,CAClBC,IADkB,EAElBC,aAFkB,EAGlBC,OAHkB,EAIlBC,gBAJkB,EAKlBC,KALkB,EAMZ;IACN,KAAKC,gBAAL,CAAsBnC,WAAtB,EAAmC,CAACM,GAAD,EAAM8B,IAAN,KAAe;MAChD,IAAIC,MAAM,GAAG,KAAb;MACA,MAAMC,IAAI,GAAG,IAAb,CAFgD,CAGhD;;MACA,MAAMC,cAAc,GAAG,UAASC,SAAT,EAAiC;QACtD;QACA,MAAMC,KAAK,GAAGC,SAAd;;QAEA,IAAIL,MAAJ,EAAY;UACVC,IAAI,CAACK,WAAL,CAAiB3C,WAAjB,EAA8B,MAAM;YAClC;YACA,IAAIwC,SAAS,KAAK,IAAlB,EAAwB;cACtBvC,KAAK,CAAC,wCAAD,EAA2C6B,IAA3C,EAAiDU,SAAjD,CAAL;YACD;;YAEDN,KAAK,CAACU,KAAN,CAAYJ,SAAZ,EAAuBC,KAAvB;UACD,CAPD;QAQD,CATD,MASO;UACLxC,KAAK,CAAC,2BAAD,EAA8B6B,IAA9B,CAAL;UACAI,KAAK,CAAC,GAAGO,KAAJ,CAAL;QACD;MACF,CAjBD;;MAmBA,IAAI,CAACnC,GAAL,EAAU;QACR+B,MAAM,GAAG,IAAT;QACApC,KAAK,CAAC,0BAAD,EAA6B6B,IAA7B,CAAL;MACD;;MAED,IAAIe,eAAA,CAAEC,KAAF,CAAQxC,GAAR,MAAiB,KAArB,EAA4B;QAC1B,IAAIA,GAAG,CAACD,IAAJ,KAAaN,oBAAjB,EAAuC;UACrC,OAAOwC,cAAc,CAAC,IAAAQ,4BAAA,EAAiB,kCAAjB,CAAD,CAArB;QACD,CAFD,MAEO,IAAIzC,GAAG,CAACD,IAAJ,KAAaP,UAAjB,EAA6B;UAClC,OAAOyC,cAAc,CAAC,IAAAS,uBAAA,GAAD,CAArB;QACD,CAFM,MAEA;UACL,OAAOT,cAAc,CAACjC,GAAD,CAArB;QACD;MACF;;MAEDyB,aAAa,CAACK,IAAD,EAAO9B,GAAG,IAAI;QACzB,IAAIA,GAAJ,EAAS;UACP,OAAOiC,cAAc,CAACjC,GAAD,CAArB;QACD;;QAED0B,OAAO,CAACF,IAAD,EAAOG,gBAAgB,CAACG,IAAD,CAAvB,EAA+BG,cAA/B,CAAP;MACD,CANY,CAAb;IAOD,CA7CD;EA8CD;;EAEMU,aAAa,CAACC,WAAD,EAAsBC,QAAtB,EAAmF;IACrGlD,KAAK,CAAC,qBAAD,EAAwBiD,WAAxB,CAAL;IAEA,OAAO/B,WAAA,CAAGC,MAAH,CAAU,KAAKgC,WAAL,CAAiBF,WAAjB,CAAV,EAAyCC,QAAzC,CAAP;EACD;;EAEME,aAAa,CAACF,QAAD,EAA8D;IAChFlD,KAAK,CAAC,qBAAD,EAAwB,KAAK0B,IAA7B,CAAL;;IAEAR,WAAA,CAAGmC,KAAH,CAAS,KAAKF,WAAL,CAAiB,GAAjB,CAAT,EAAgCD,QAAhC;EACD;;EAEMI,aAAa,CAACzB,IAAD,EAAe0B,KAAf,EAA+BtC,EAA/B,EAAmD;IACrEjB,KAAK,CAAC,qBAAD,EAAwB6B,IAAxB,CAAL;;IAEA,KAAK2B,WAAL,CAAiB,KAAKL,WAAL,CAAiBpD,WAAjB,CAAjB,EAAgD,KAAK0D,gBAAL,CAAsBF,KAAtB,CAAhD,EAA8EtC,EAA9E;EACD;;EAEMyC,WAAW,CAAC7B,IAAD,EAAe0B,KAAf,EAA+BtC,EAA/B,EAAmD;IACnEjB,KAAK,CAAC,mBAAD,EAAsB6B,IAAtB,CAAL;;IAEA,KAAK8B,UAAL,CAAgB,KAAKR,WAAL,CAAiBpD,WAAjB,CAAhB,EAA+C,KAAK0D,gBAAL,CAAsBF,KAAtB,CAA/C,EAA6EtC,EAA7E;EACD;;EAEM2C,WAAW,CAAC/B,IAAD,EAAeZ,EAAf,EAAmC;IACnDjB,KAAK,CAAC,mBAAD,EAAsB6B,IAAtB,CAAL;;IAEA,KAAKgC,gBAAL,CAAsB,KAAKV,WAAL,CAAiBpD,WAAjB,CAAtB,EAAqD+D,IAArD,CACEC,GAAG,IAAI;MACL,IAAI;QACF,MAAMC,IAAS,GAAGC,IAAI,CAACC,KAAL,CAAWH,GAAG,CAACI,QAAJ,CAAa,MAAb,CAAX,CAAlB;QAEAnE,KAAK,CAAC,kCAAD,EAAqC6B,IAArC,CAAL;QACAZ,EAAE,CAAC,IAAD,EAAO+C,IAAP,CAAF;MACD,CALD,CAKE,OAAO3D,GAAP,EAAY;QACZL,KAAK,CAAC,gDAAD,EAAmD6B,IAAnD,EAAyDxB,GAAzD,CAAL;QACAY,EAAE,CAACZ,GAAD,CAAF;MACD;IACF,CAXH,EAYEA,GAAG,IAAI;MACLL,KAAK,CAAC,+CAAD,EAAkD6B,IAAlD,EAAwDxB,GAAxD,CAAL;MAEA,OAAOY,EAAE,CAACZ,GAAD,CAAT;IACD,CAhBH;EAkBD;;EAEM+D,YAAY,CAACvC,IAAD,EAA+B;IAChD,MAAMwC,YAAY,GAAG,IAAIC,sBAAJ,CAAkB,EAAlB,CAArB;IACAtE,KAAK,CAAC,kCAAD,EAAqC6B,IAArC,CAAL;IAEA,IAAI0C,MAAM,GAAG,CAAb;IACAF,YAAY,CAACG,EAAb,CAAgB,KAAhB,EAAuB,YAAW;MAChCD,MAAM,GAAG,CAAT;IACD,CAFD;;IAIA,MAAME,QAAgB,GAAG,KAAKtB,WAAL,CAAiBtB,IAAjB,CAAzB;;IAEAX,WAAA,CAAGwD,MAAH,CAAUD,QAAV,EAAoBE,YAAY,IAAI;MAClC,MAAMC,MAAM,GAAG,CAACD,YAAhB;;MACA,IAAIC,MAAJ,EAAY;QACVP,YAAY,CAACQ,IAAb,CAAkB,OAAlB,EAA2B3E,OAAO,CAACN,SAAD,CAAlC;MACD,CAFD,MAEO;QACL,MAAMkF,YAAY,GAAGpD,aAAA,CAAKqD,IAAL,CAAU,KAAKrD,IAAf,EAAsB,GAAEG,IAAK,QAAOpB,MAAM,CAACC,IAAI,CAACC,MAAL,EAAD,CAAN,CAAsBqE,OAAtB,CAA8B,MAA9B,EAAsC,EAAtC,CAA0C,EAA9E,CAArB;;QACAhF,KAAK,CAAC,0BAAD,EAA6B8E,YAA7B,CAAL;;QACA,MAAMG,IAAI,GAAG/D,WAAA,CAAGgE,iBAAH,CAAqBJ,YAArB,CAAb;;QACA,MAAMK,cAAc,GAAG,MAAYjE,WAAA,CAAGC,MAAH,CAAU2D,YAAV,EAAwB,MAAM,CAAE,CAAhC,CAAnC;;QACA,IAAIM,MAAM,GAAG,KAAb;QACAf,YAAY,CAACgB,IAAb,CAAkBJ,IAAlB;;QAEAZ,YAAY,CAACiB,IAAb,GAAoB,YAAiB;UACnC,MAAMC,KAAK,GAAG,YAAiB;YAC7BN,IAAI,CAACT,EAAL,CAAQ,OAAR,EAAiB,YAAW;cAC1B3D,SAAS,CAACiE,YAAD,EAAeL,QAAf,EAAyB,UAASpE,GAAT,EAAc;gBAC9C,IAAIA,GAAJ,EAAS;kBACPgE,YAAY,CAACQ,IAAb,CAAkB,OAAlB,EAA2BxE,GAA3B;gBACD,CAFD,MAEO;kBACLgE,YAAY,CAACQ,IAAb,CAAkB,SAAlB;gBACD;cACF,CANQ,CAAT;YAOD,CARD;YASAI,IAAI,CAACO,GAAL;UACD,CAXD;;UAYA,IAAIjB,MAAJ,EAAY;YACVgB,KAAK;UACN,CAFD,MAEO;YACLlB,YAAY,CAACG,EAAb,CAAgB,KAAhB,EAAuBe,KAAvB;UACD;QACF,CAlBD;;QAoBAlB,YAAY,CAACoB,KAAb,GAAqB,YAAiB;UACpC,IAAIL,MAAJ,EAAY;YACVA,MAAM,GAAG,KAAT;YACAH,IAAI,CAACT,EAAL,CAAQ,OAAR,EAAiB,YAAW;cAC1BW,cAAc;YACf,CAFD;UAGD,CALD,MAKO;YACL;YACAA,cAAc;UACf;;UACDF,IAAI,CAACO,GAAL;QACD,CAXD;;QAaAP,IAAI,CAACT,EAAL,CAAQ,MAAR,EAAgB,YAAW;UACzBY,MAAM,GAAG,IAAT,CADyB,CAEzB;;UACAf,YAAY,CAACQ,IAAb,CAAkB,MAAlB;QACD,CAJD;QAMAI,IAAI,CAACT,EAAL,CAAQ,OAAR,EAAiB,UAASnE,GAAT,EAAc;UAC7BgE,YAAY,CAACQ,IAAb,CAAkB,OAAlB,EAA2BxE,GAA3B;QACD,CAFD;MAGD;IACF,CAvDD;;IAyDA,OAAOgE,YAAP;EACD;;EAEMqB,WAAW,CAAC7D,IAAD,EAA4B;IAC5C,MAAM4C,QAAgB,GAAG,KAAKtB,WAAL,CAAiBtB,IAAjB,CAAzB;;IACA7B,KAAK,CAAC,gCAAD,EAAmC6B,IAAnC,EAAyC4C,QAAzC,CAAL;IAEA,MAAMkB,iBAAiB,GAAG,IAAIC,oBAAJ,CAAgB,EAAhB,CAA1B;;IAEA,MAAMC,UAAU,GAAG3E,WAAA,CAAG4E,gBAAH,CAAoBrB,QAApB,CAAnB;;IAEAoB,UAAU,CAACrB,EAAX,CAAc,OAAd,EAAuB,UAASnE,GAAT,EAAc;MACnCL,KAAK,CAAC,0CAAD,EAA6C6B,IAA7C,EAAmDxB,GAAnD,CAAL;MACAsF,iBAAiB,CAACd,IAAlB,CAAuB,OAAvB,EAAgCxE,GAAhC;IACD,CAHD;IAKAwF,UAAU,CAACrB,EAAX,CAAc,MAAd,EAAsB,UAASuB,EAAT,EAAa;MACjC7E,WAAA,CAAG8E,KAAH,CAASD,EAAT,EAAa,UAAS1F,GAAT,EAAc4F,KAAd,EAAqB;QAChC,IAAIrD,eAAA,CAAEC,KAAF,CAAQxC,GAAR,MAAiB,KAArB,EAA4B;UAC1BL,KAAK,CAAC,0CAAD,EAA6C6B,IAA7C,EAAmDxB,GAAnD,CAAL;UACA,OAAOsF,iBAAiB,CAACd,IAAlB,CAAuB,OAAvB,EAAgCxE,GAAhC,CAAP;QACD;;QACDsF,iBAAiB,CAACd,IAAlB,CAAuB,gBAAvB,EAAyCoB,KAAK,CAACC,IAA/C;QACAP,iBAAiB,CAACd,IAAlB,CAAuB,MAAvB;QACA7E,KAAK,CAAC,2BAAD,EAA8B6B,IAA9B,CAAL;QACAgE,UAAU,CAACR,IAAX,CAAgBM,iBAAhB;MACD,CATD;IAUD,CAXD;;IAaAA,iBAAiB,CAACF,KAAlB,GAA0B,YAAiB;MACzCzF,KAAK,CAAC,4BAAD,EAA+B6B,IAA/B,CAAL;MACAgE,UAAU,CAACM,KAAX;IACD,CAHD;;IAKA,OAAOR,iBAAP;EACD;;EAEOnC,WAAW,CAAC3B,IAAD,EAAeuE,QAAf,EAA8BlD,QAA9B,EAAwD;IACzElD,KAAK,CAAC,wBAAD,EAA2B6B,IAA3B,CAAL;;IAEAX,WAAA,CAAGmF,IAAH,CAAQxE,IAAR,EAAc,IAAd,EAAoBxB,GAAG,IAAI;MACzB,IAAIA,GAAJ,EAAS;QACP;QACA,IAAIA,GAAG,CAACD,IAAJ,KAAa,QAAjB,EAA2B;UACzBJ,KAAK,CAAC,kDAAD,EAAqD6B,IAArD,CAAL;UACA,OAAOqB,QAAQ,CAAChD,OAAO,CAACN,SAAD,CAAR,CAAf;QACD;MACF;;MAED,KAAK+D,UAAL,CAAgB9B,IAAhB,EAAsBuE,QAAtB,EAAgClD,QAAhC;IACD,CAVD;EAWD;;EAEOW,gBAAgB,CAAChC,IAAD,EAA6B;IACnD,OAAO,IAAIyE,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAA2B;MAC5CxG,KAAK,CAAC,sBAAD,EAAyB6B,IAAzB,CAAL;;MAEAX,WAAA,CAAGuF,QAAH,CAAY5E,IAAZ,EAAkB,CAACxB,GAAD,EAAM2D,IAAN,KAAe;QAC/B,IAAI3D,GAAJ,EAAS;UACPL,KAAK,CAAC,0CAAD,EAA6C6B,IAA7C,EAAmDxB,GAAnD,CAAL;UACAmG,MAAM,CAACnG,GAAD,CAAN;QACD,CAHD,MAGO;UACLL,KAAK,CAAC,sBAAD,EAAyB6B,IAAzB,CAAL;UAEA0E,OAAO,CAACvC,IAAD,CAAP;QACD;MACF,CATD;IAUD,CAbM,CAAP;EAcD;;EAEOP,gBAAgB,CAACF,KAAD,EAAyB;IAC/C,OAAOU,IAAI,CAACyC,SAAL,CAAenD,KAAf,EAAsB,IAAtB,EAA4B,IAA5B,CAAP;EACD;;EAEOJ,WAAW,CAACwD,QAAQ,GAAG,EAAZ,EAAwB;IACzC,MAAMC,WAAmB,GAAGlF,aAAA,CAAKqD,IAAL,CAAU,KAAKrD,IAAf,EAAqBiF,QAArB,CAA5B;;IAEA,OAAOC,WAAP;EACD;;EAEOjD,UAAU,CAACkD,IAAD,EAAe7C,IAAf,EAA6B/C,EAA7B,EAAiD;IACjE,MAAM6F,cAAc,GAAI7F,EAAD,IAAc;MACnC,MAAM8F,YAAY,GAAGxG,QAAQ,CAACsG,IAAD,CAA7B;;MAEA3F,WAAA,CAAG8F,SAAH,CAAaD,YAAb,EAA2B/C,IAA3B,EAAiC3D,GAAG,IAAI;QACtC,IAAIA,GAAJ,EAAS;UACPL,KAAK,CAAC,6BAAD,EAAgC6G,IAAhC,CAAL;UACA,OAAO5F,EAAE,CAACZ,GAAD,CAAT;QACD;;QAEDL,KAAK,CAAC,0BAAD,EAA6B6G,IAA7B,CAAL;QACAhG,SAAS,CAACkG,YAAD,EAAeF,IAAf,EAAqB5F,EAArB,CAAT;MACD,CARD;IASD,CAZD;;IAcA6F,cAAc,CAACzG,GAAG,IAAI;MACpB,IAAIA,GAAG,IAAIA,GAAG,CAACD,IAAJ,KAAaP,UAAxB,EAAoC;QAClC,IAAAoH,eAAA,EAAOvF,aAAA,CAAKwF,OAAL,CAAaL,IAAb,CAAP,EACG/C,IADH,CACQ,MAAM;UACVgD,cAAc,CAAC7F,EAAD,CAAd;QACD,CAHH,EAIGkG,KAJH,CAIS9G,GAAG,IAAI;UACZ,OAAOY,EAAE,CAACZ,GAAD,CAAT;QACD,CANH;MAOD,CARD,MAQO;QACLY,EAAE,CAACZ,GAAD,CAAF;MACD;IACF,CAZa,CAAd;EAaD;;EAEO6B,gBAAgB,CAACL,IAAD,EAAeZ,EAAf,EAAmC;IACzD,MAAM0F,QAAgB,GAAG,KAAKxD,WAAL,CAAiBtB,IAAjB,CAAzB;;IAEA,IAAA4E,qBAAA,EACEE,QADF,EAEE;MACES,IAAI,EAAE,IADR;MAEElD,KAAK,EAAE;IAFT,CAFF,EAME,CAAC7D,GAAD,EAAM0D,GAAN,KAAc;MACZ,IAAI1D,GAAJ,EAAS;QACPL,KAAK,CAAC,0CAAD,EAA6C6B,IAA7C,CAAL;QAEA,OAAOZ,EAAE,CAACZ,GAAD,CAAT;MACD;;MACDL,KAAK,CAAC,iCAAD,EAAoC6B,IAApC,CAAL;MAEA,OAAOZ,EAAE,CAAC,IAAD,EAAO8C,GAAP,CAAT;IACD,CAfH;EAiBD;;EAEOrB,WAAW,CAACb,IAAD,EAAeZ,EAAf,EAAmC;IACpD,IAAAoG,uBAAA,EAAW,KAAKlE,WAAL,CAAiBtB,IAAjB,CAAX,EAAmCZ,EAAnC;EACD;;AAxU4D"}
|
|
1
|
+
{"version":3,"file":"local-fs.js","names":["_fs","_interopRequireDefault","require","_path","_debug","_lodash","_mkdirp","_streams","_fileLocking","_commonsApi","obj","__esModule","default","fileExist","exports","noSuchFile","resourceNotAvailable","pkgFileName","debug","buildDebug","fSError","message","code","err","getCode","tempFile","str","String","Math","random","substr","renameTmp","src","dst","_cb","cb","fs","unlink","process","platform","rename","tmp","LocalFS","constructor","path","logger","updatePackage","name","updateHandler","onWrite","transformPackage","onEnd","_lockAndReadJSON","json","locked","self","unLockCallback","lockError","_args","arguments","_unlockJSON","apply","_","isNil","getInternalError","getNotFound","deletePackage","packageName","callback","_getStorage","removePackage","rmdir","createPackage","value","_createFile","_convertToString","savePackage","_writeFile","readPackage","_readStorageFile","then","res","data","JSON","parse","toString","writeTarball","uploadStream","UploadTarball","_ended","on","pathName","access","fileNotFound","exists","emit","temporalName","join","replace","file","createWriteStream","removeTempFile","opened","pipe","done","onend","end","abort","readTarball","readTarballStream","ReadTarball","readStream","createReadStream","fd","fstat","stats","size","close","contents","open","Promise","resolve","reject","readFile","stringify","fileName","storagePath","dest","createTempFile","tempFilePath","writeFile","mkdirp","dirname","catch","lock","unlockFile"],"sources":["../src/local-fs.ts"],"sourcesContent":["/* eslint-disable no-undef */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport mkdirp from 'mkdirp';\nimport { UploadTarball, ReadTarball } from '@verdaccio/streams';\nimport { unlockFile, readFile } from '@verdaccio/file-locking';\nimport { Callback, Logger, Package, ILocalPackageManager, IUploadTarball } from '@verdaccio/legacy-types';\nimport { getCode, getInternalError, getNotFound, VerdaccioError } from '@verdaccio/commons-api';\n\nexport const fileExist = 'EEXISTS';\nexport const noSuchFile = 'ENOENT';\nexport const resourceNotAvailable = 'EAGAIN';\nexport const pkgFileName = 'package.json';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage:fs');\n\nexport const fSError = function(message: string, code = 409): VerdaccioError {\n const err: VerdaccioError = getCode(code, message);\n // FIXME: we should return http-status codes here instead, future improvement\n // @ts-ignore\n err.code = message;\n\n return err;\n};\n\nconst tempFile = function(str): string {\n return `${str}.tmp${String(Math.random()).substr(2)}`;\n};\n\nconst renameTmp = function(src, dst, _cb): void {\n const cb = (err): void => {\n if (err) {\n fs.unlink(src, () => {});\n }\n _cb(err);\n };\n\n if (process.platform !== 'win32') {\n return fs.rename(src, dst, cb);\n }\n\n // windows can't remove opened file,\n // but it seem to be able to rename it\n const tmp = tempFile(dst);\n fs.rename(dst, tmp, function(err) {\n fs.rename(src, dst, cb);\n if (!err) {\n fs.unlink(tmp, () => {});\n }\n });\n};\n\nexport type ILocalFSPackageManager = ILocalPackageManager & { path: string };\n\nexport default class LocalFS implements ILocalFSPackageManager {\n public path: string;\n public logger: Logger;\n\n public constructor(path: string, logger: Logger) {\n this.path = path;\n this.logger = logger;\n }\n\n /**\n * This function allows to update the package thread-safely\n Algorithm:\n 1. lock package.json for writing\n 2. read package.json\n 3. updateFn(pkg, cb), and wait for cb\n 4. write package.json.tmp\n 5. move package.json.tmp package.json\n 6. callback(err?)\n * @param {*} name\n * @param {*} updateHandler\n * @param {*} onWrite\n * @param {*} transformPackage\n * @param {*} onEnd\n */\n public updatePackage(\n name: string,\n updateHandler: Callback,\n onWrite: Callback,\n transformPackage: Function,\n onEnd: Callback\n ): void {\n this._lockAndReadJSON(pkgFileName, (err, json) => {\n let locked = false;\n const self = this;\n // callback that cleans up lock first\n const unLockCallback = function(lockError: Error): void {\n // eslint-disable-next-line prefer-rest-params\n const _args = arguments;\n\n if (locked) {\n self._unlockJSON(pkgFileName, () => {\n // ignore any error from the unlock\n if (lockError !== null) {\n debug('lock file: %o has failed with error %o', name, lockError);\n }\n\n onEnd.apply(lockError, _args);\n });\n } else {\n debug('file: %o has been updated', name);\n onEnd(..._args);\n }\n };\n\n if (!err) {\n locked = true;\n debug('file: %o has been locked', name);\n }\n\n if (_.isNil(err) === false) {\n if (err.code === resourceNotAvailable) {\n return unLockCallback(getInternalError('resource temporarily unavailable'));\n } else if (err.code === noSuchFile) {\n return unLockCallback(getNotFound());\n } else {\n return unLockCallback(err);\n }\n }\n\n updateHandler(json, err => {\n if (err) {\n return unLockCallback(err);\n }\n\n onWrite(name, transformPackage(json), unLockCallback);\n });\n });\n }\n\n public deletePackage(packageName: string, callback: (err: NodeJS.ErrnoException | null) => void): void {\n debug('delete a package %o', packageName);\n\n return fs.unlink(this._getStorage(packageName), callback);\n }\n\n public removePackage(callback: (err: NodeJS.ErrnoException | null) => void): void {\n debug('remove a package %o', this.path);\n\n fs.rmdir(this._getStorage('.'), callback);\n }\n\n public createPackage(name: string, value: Package, cb: Callback): void {\n debug('create a package %o', name);\n\n this._createFile(this._getStorage(pkgFileName), this._convertToString(value), cb);\n }\n\n public savePackage(name: string, value: Package, cb: Callback): void {\n debug('save a package %o', name);\n\n this._writeFile(this._getStorage(pkgFileName), this._convertToString(value), cb);\n }\n\n public readPackage(name: string, cb: Callback): void {\n debug('read a package %o', name);\n\n this._readStorageFile(this._getStorage(pkgFileName)).then(\n res => {\n try {\n const data: any = JSON.parse(res.toString('utf8'));\n\n debug('read storage file %o has succeed', name);\n cb(null, data);\n } catch (err) {\n debug('parse storage file %o has failed with error %o', name, err);\n cb(err);\n }\n },\n err => {\n debug('read storage file %o has failed with error %o', name, err);\n\n return cb(err);\n }\n );\n }\n\n public writeTarball(name: string): IUploadTarball {\n const uploadStream = new UploadTarball({});\n debug('write a tarball for a package %o', name);\n\n let _ended = 0;\n uploadStream.on('end', function() {\n _ended = 1;\n });\n\n const pathName: string = this._getStorage(name);\n\n fs.access(pathName, fileNotFound => {\n const exists = !fileNotFound;\n if (exists) {\n uploadStream.emit('error', fSError(fileExist));\n } else {\n const temporalName = path.join(this.path, `${name}.tmp-${String(Math.random()).replace(/^0\\./, '')}`);\n debug('write a temporal name %o', temporalName);\n const file = fs.createWriteStream(temporalName);\n const removeTempFile = (): void => fs.unlink(temporalName, () => {});\n let opened = false;\n uploadStream.pipe(file);\n\n uploadStream.done = function(): void {\n const onend = function(): void {\n file.on('close', function() {\n renameTmp(temporalName, pathName, function(err) {\n if (err) {\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n });\n });\n file.end();\n };\n if (_ended) {\n onend();\n } else {\n uploadStream.on('end', onend);\n }\n };\n\n uploadStream.abort = function(): void {\n if (opened) {\n opened = false;\n file.on('close', function() {\n removeTempFile();\n });\n } else {\n // if the file does not recieve any byte never is opened and has to be removed anyway.\n removeTempFile();\n }\n file.end();\n };\n\n file.on('open', function() {\n opened = true;\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n file.on('error', function(err) {\n uploadStream.emit('error', err);\n });\n }\n });\n\n return uploadStream;\n }\n\n public readTarball(name: string): ReadTarball {\n const pathName: string = this._getStorage(name);\n debug('read a a tarball %o on path %o', name, pathName);\n\n const readTarballStream = new ReadTarball({});\n\n const readStream = fs.createReadStream(pathName);\n\n readStream.on('error', function(err) {\n debug('error on read a tarball %o with error %o', name, err);\n readTarballStream.emit('error', err);\n });\n\n readStream.on('open', function(fd) {\n fs.fstat(fd, function(err, stats) {\n if (_.isNil(err) === false) {\n debug('error on read a tarball %o with error %o', name, err);\n return readTarballStream.emit('error', err);\n }\n readTarballStream.emit('content-length', stats.size);\n readTarballStream.emit('open');\n debug('open on read a tarball %o', name);\n readStream.pipe(readTarballStream);\n });\n });\n\n readTarballStream.abort = function(): void {\n debug('abort on read a tarball %o', name);\n readStream.close();\n };\n\n return readTarballStream;\n }\n\n private _createFile(name: string, contents: any, callback: Function): void {\n debug(' create a new file: %o', name);\n\n fs.open(name, 'wx', err => {\n if (err) {\n // native EEXIST used here to check exception on fs.open\n if (err.code === 'EEXIST') {\n debug('file %o cannot be created, it already exists: %o', name);\n return callback(fSError(fileExist));\n }\n }\n\n this._writeFile(name, contents, callback);\n });\n }\n\n private _readStorageFile(name: string): Promise<any> {\n return new Promise((resolve, reject): void => {\n debug('reading the file: %o', name);\n\n fs.readFile(name, (err, data) => {\n if (err) {\n debug('error reading the file: %o with error %o', name, err);\n reject(err);\n } else {\n debug('read file %o succeed', name);\n\n resolve(data);\n }\n });\n });\n }\n\n private _convertToString(value: Package): string {\n return JSON.stringify(value, null, '\\t');\n }\n\n private _getStorage(fileName = ''): string {\n const storagePath: string = path.join(this.path, fileName);\n\n return storagePath;\n }\n\n private _writeFile(dest: string, data: string, cb: Callback): void {\n const createTempFile = (cb): void => {\n const tempFilePath = tempFile(dest);\n\n fs.writeFile(tempFilePath, data, err => {\n if (err) {\n debug('error on write the file: %o', dest);\n return cb(err);\n }\n\n debug('creating a new file:: %o', dest);\n renameTmp(tempFilePath, dest, cb);\n });\n };\n\n createTempFile(err => {\n if (err && err.code === noSuchFile) {\n mkdirp(path.dirname(dest))\n .then(() => {\n createTempFile(cb);\n })\n .catch(err => {\n return cb(err);\n });\n } else {\n cb(err);\n }\n });\n }\n\n private _lockAndReadJSON(name: string, cb: Function): void {\n const fileName: string = this._getStorage(name);\n\n readFile(\n fileName,\n {\n lock: true,\n parse: true,\n },\n (err, res) => {\n if (err) {\n debug('error on lock and read json for file: %o', name);\n\n return cb(err);\n }\n debug('lock and read json for file: %o', name);\n\n return cb(null, res);\n }\n );\n }\n\n private _unlockJSON(name: string, cb: Function): void {\n unlockFile(this._getStorage(name), cb);\n }\n}\n"],"mappings":"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"}
|
package/lib/pkg-utils.js
CHANGED
|
@@ -4,44 +4,35 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.loadPrivatePackages = loadPrivatePackages;
|
|
7
|
-
|
|
8
7
|
var _fs = _interopRequireDefault(require("fs"));
|
|
9
|
-
|
|
10
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
|
-
|
|
12
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
10
|
function loadPrivatePackages(path, logger) {
|
|
15
11
|
const list = [];
|
|
16
12
|
const emptyDatabase = {
|
|
17
13
|
list,
|
|
18
14
|
secret: ''
|
|
19
15
|
};
|
|
20
|
-
|
|
21
16
|
const data = _fs.default.readFileSync(path, 'utf8');
|
|
22
|
-
|
|
23
17
|
if (_lodash.default.isNil(data)) {
|
|
24
18
|
// readFileSync is platform specific, FreeBSD might return null
|
|
25
19
|
return emptyDatabase;
|
|
26
20
|
}
|
|
27
|
-
|
|
28
21
|
let db;
|
|
29
|
-
|
|
30
22
|
try {
|
|
31
23
|
db = JSON.parse(data);
|
|
32
24
|
} catch (err) {
|
|
33
25
|
logger.error({
|
|
34
26
|
err: err.mesage,
|
|
35
27
|
path
|
|
36
|
-
},
|
|
28
|
+
},
|
|
29
|
+
// eslint-disable-next-line max-len
|
|
37
30
|
`Package database file corrupted (invalid JSON), please check the error @{err}.\nFile Path: @{path}`);
|
|
38
31
|
throw Error('Package database file corrupted (invalid JSON)');
|
|
39
32
|
}
|
|
40
|
-
|
|
41
33
|
if (_lodash.default.isEmpty(db)) {
|
|
42
34
|
return emptyDatabase;
|
|
43
35
|
}
|
|
44
|
-
|
|
45
36
|
return db;
|
|
46
37
|
}
|
|
47
38
|
//# sourceMappingURL=pkg-utils.js.map
|
package/lib/pkg-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pkg-utils.js","names":["loadPrivatePackages","path","logger","list","emptyDatabase","secret","data","fs","readFileSync","_","isNil","db","JSON","parse","err","error","mesage","Error","isEmpty"],"sources":["../src/pkg-utils.ts"],"sourcesContent":["import fs from 'fs';\n\nimport _ from 'lodash';\nimport { LocalStorage, StorageList, Logger } from '@verdaccio/types';\n\nexport function loadPrivatePackages(path: string, logger: Logger): LocalStorage {\n const list: StorageList = [];\n const emptyDatabase = { list, secret: '' };\n const data = fs.readFileSync(path, 'utf8');\n\n if (_.isNil(data)) {\n // readFileSync is platform specific, FreeBSD might return null\n return emptyDatabase;\n }\n\n let db;\n try {\n db = JSON.parse(data);\n } catch (err: any) {\n logger.error(\n {\n err: err.mesage,\n path,\n }, // eslint-disable-next-line max-len\n `Package database file corrupted (invalid JSON), please check the error @{err}.\\nFile Path: @{path}`\n );\n throw Error('Package database file corrupted (invalid JSON)');\n }\n\n if (_.isEmpty(db)) {\n return emptyDatabase;\n }\n\n return db;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"pkg-utils.js","names":["_fs","_interopRequireDefault","require","_lodash","obj","__esModule","default","loadPrivatePackages","path","logger","list","emptyDatabase","secret","data","fs","readFileSync","_","isNil","db","JSON","parse","err","error","mesage","Error","isEmpty"],"sources":["../src/pkg-utils.ts"],"sourcesContent":["import fs from 'fs';\n\nimport _ from 'lodash';\nimport { LocalStorage, StorageList, Logger } from '@verdaccio/legacy-types';\n\nexport function loadPrivatePackages(path: string, logger: Logger): LocalStorage {\n const list: StorageList = [];\n const emptyDatabase = { list, secret: '' };\n const data = fs.readFileSync(path, 'utf8');\n\n if (_.isNil(data)) {\n // readFileSync is platform specific, FreeBSD might return null\n return emptyDatabase;\n }\n\n let db;\n try {\n db = JSON.parse(data);\n } catch (err: any) {\n logger.error(\n {\n err: err.mesage,\n path,\n }, // eslint-disable-next-line max-len\n `Package database file corrupted (invalid JSON), please check the error @{err}.\\nFile Path: @{path}`\n );\n throw Error('Package database file corrupted (invalid JSON)');\n }\n\n if (_.isEmpty(db)) {\n return emptyDatabase;\n }\n\n return db;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAuB,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAGhB,SAASG,mBAAmBA,CAACC,IAAY,EAAEC,MAAc,EAAgB;EAC9E,MAAMC,IAAiB,GAAG,EAAE;EAC5B,MAAMC,aAAa,GAAG;IAAED,IAAI;IAAEE,MAAM,EAAE;EAAG,CAAC;EAC1C,MAAMC,IAAI,GAAGC,WAAE,CAACC,YAAY,CAACP,IAAI,EAAE,MAAM,CAAC;EAE1C,IAAIQ,eAAC,CAACC,KAAK,CAACJ,IAAI,CAAC,EAAE;IACjB;IACA,OAAOF,aAAa;EACtB;EAEA,IAAIO,EAAE;EACN,IAAI;IACFA,EAAE,GAAGC,IAAI,CAACC,KAAK,CAACP,IAAI,CAAC;EACvB,CAAC,CAAC,OAAOQ,GAAQ,EAAE;IACjBZ,MAAM,CAACa,KAAK,CACV;MACED,GAAG,EAAEA,GAAG,CAACE,MAAM;MACff;IACF,CAAC;IAAE;IACF,oGAAmG,CACrG;IACD,MAAMgB,KAAK,CAAC,gDAAgD,CAAC;EAC/D;EAEA,IAAIR,eAAC,CAACS,OAAO,CAACP,EAAE,CAAC,EAAE;IACjB,OAAOP,aAAa;EACtB;EAEA,OAAOO,EAAE;AACX"}
|
package/lib/token.js
CHANGED
|
@@ -4,91 +4,64 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
|
|
10
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
|
-
|
|
12
9
|
var _lowdb = _interopRequireDefault(require("lowdb"));
|
|
13
|
-
|
|
14
10
|
var _FileAsync = _interopRequireDefault(require("lowdb/adapters/FileAsync"));
|
|
15
|
-
|
|
16
11
|
var _Memory = _interopRequireDefault(require("lowdb/adapters/Memory"));
|
|
17
|
-
|
|
18
12
|
var _debug = _interopRequireDefault(require("debug"));
|
|
19
|
-
|
|
20
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
-
|
|
22
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
23
|
-
|
|
24
14
|
const debug = (0, _debug.default)('verdaccio:plugin:local-storage:token');
|
|
25
15
|
const TOKEN_DB_NAME = '.token-db.json';
|
|
26
|
-
|
|
27
16
|
class TokenActions {
|
|
28
17
|
constructor(config) {
|
|
29
|
-
_defineProperty(this, "config", void 0);
|
|
30
|
-
|
|
31
|
-
_defineProperty(this, "tokenDb", void 0);
|
|
32
|
-
|
|
33
18
|
this.config = config;
|
|
34
19
|
this.tokenDb = null;
|
|
35
20
|
}
|
|
36
|
-
|
|
37
21
|
_dbGenPath(dbName, config) {
|
|
38
|
-
return _path.default.join(_path.default.resolve(_path.default.dirname(config.
|
|
22
|
+
return _path.default.join(_path.default.resolve(_path.default.dirname(config.self_path || ''), config.storage, dbName));
|
|
39
23
|
}
|
|
40
|
-
|
|
41
24
|
async getTokenDb() {
|
|
42
25
|
if (!this.tokenDb) {
|
|
43
26
|
debug('token database is not defined');
|
|
44
27
|
let adapter;
|
|
45
|
-
|
|
46
28
|
if (process.env.NODE_ENV === 'test') {
|
|
47
29
|
debug('token memory adapter');
|
|
48
30
|
adapter = new _Memory.default('');
|
|
49
31
|
} else {
|
|
50
32
|
debug('token async adapter');
|
|
51
|
-
|
|
52
33
|
const pathDb = this._dbGenPath(TOKEN_DB_NAME, this.config);
|
|
53
|
-
|
|
54
34
|
adapter = new _FileAsync.default(pathDb);
|
|
55
35
|
}
|
|
56
|
-
|
|
57
36
|
debug('token bd generated');
|
|
58
37
|
this.tokenDb = await (0, _lowdb.default)(adapter);
|
|
59
38
|
}
|
|
60
|
-
|
|
61
39
|
return this.tokenDb;
|
|
62
40
|
}
|
|
63
|
-
|
|
64
41
|
async saveToken(token) {
|
|
65
42
|
debug('token key %o', token.key);
|
|
66
43
|
const db = await this.getTokenDb();
|
|
67
44
|
const userData = await db.get(token.user).value();
|
|
68
45
|
debug('user data %o', userData);
|
|
69
|
-
|
|
70
46
|
if (_lodash.default.isNil(userData)) {
|
|
71
47
|
await db.set(token.user, [token]).write();
|
|
72
48
|
debug('token user %o new database', token.user);
|
|
73
49
|
} else {
|
|
74
50
|
// types does not match with valid implementation
|
|
75
51
|
// @ts-ignore
|
|
76
|
-
await db.get(token.user)
|
|
52
|
+
await db.get(token.user)
|
|
53
|
+
// @ts-ignore
|
|
77
54
|
.push(token).write();
|
|
78
55
|
}
|
|
79
|
-
|
|
80
56
|
debug('data %o', await db.getState());
|
|
81
57
|
debug('token saved %o', token.user);
|
|
82
58
|
}
|
|
83
|
-
|
|
84
59
|
async deleteToken(user, tokenKey) {
|
|
85
60
|
const db = await this.getTokenDb();
|
|
86
61
|
const userTokens = await db.get(user).value();
|
|
87
|
-
|
|
88
62
|
if (_lodash.default.isNil(userTokens)) {
|
|
89
63
|
throw new Error('user not found');
|
|
90
64
|
}
|
|
91
|
-
|
|
92
65
|
debug('tokens %o - %o', userTokens, userTokens.length);
|
|
93
66
|
const remainingTokens = userTokens.filter(({
|
|
94
67
|
key
|
|
@@ -99,7 +72,6 @@ class TokenActions {
|
|
|
99
72
|
await db.set(user, remainingTokens).write();
|
|
100
73
|
debug('removed tokens key %o', tokenKey);
|
|
101
74
|
}
|
|
102
|
-
|
|
103
75
|
async readTokens(filter) {
|
|
104
76
|
const {
|
|
105
77
|
user
|
|
@@ -109,8 +81,6 @@ class TokenActions {
|
|
|
109
81
|
const tokens = await db.get(user).value();
|
|
110
82
|
return tokens || [];
|
|
111
83
|
}
|
|
112
|
-
|
|
113
84
|
}
|
|
114
|
-
|
|
115
85
|
exports.default = TokenActions;
|
|
116
86
|
//# sourceMappingURL=token.js.map
|