spec-3nweb-server 1.3.5 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/build/3nstorage/3nstorage-app.js +4 -4
  2. package/build/3nstorage/owner.js +21 -21
  3. package/build/3nstorage/resources/store.js +25 -24
  4. package/build/3nstorage/resources/users.js +2 -2
  5. package/build/3nstorage/routes/owner/archive-obj-version.d.ts +2 -2
  6. package/build/3nstorage/routes/owner/archive-obj-version.js +3 -2
  7. package/build/3nstorage/routes/owner/cancel-trans.js +1 -1
  8. package/build/3nstorage/routes/owner/delete-obj.js +1 -1
  9. package/build/3nstorage/routes/owner/get-archived-obj-ver.js +2 -2
  10. package/build/3nstorage/routes/owner/get-current-obj.js +2 -2
  11. package/build/3nstorage/routes/owner/list-obj-archive.js +3 -2
  12. package/build/3nstorage/routes/owner/param-getter.js +3 -2
  13. package/build/3nstorage/routes/owner/param-setter.js +3 -2
  14. package/build/3nstorage/routes/owner/put-current-obj.js +12 -10
  15. package/build/3nstorage/routes/owner/session-params.js +4 -3
  16. package/build/admin/admin-app.js +7 -5
  17. package/build/admin/resources/users.d.ts +10 -4
  18. package/build/admin/resources/users.js +90 -37
  19. package/build/admin/routes/add.js +3 -3
  20. package/build/admin/routes/get-available-domains.d.ts +3 -0
  21. package/build/admin/routes/get-available-domains.js +38 -0
  22. package/build/admin/signup-tokens.js +11 -11
  23. package/build/asmail/asmail-app.js +7 -7
  24. package/build/asmail/config.js +9 -8
  25. package/build/asmail/delivery.js +10 -9
  26. package/build/asmail/resources/delivery-sessions.js +5 -4
  27. package/build/asmail/resources/inbox.d.ts +1 -1
  28. package/build/asmail/resources/inbox.js +22 -22
  29. package/build/asmail/resources/recipients.d.ts +2 -1
  30. package/build/asmail/resources/recipients.js +4 -4
  31. package/build/asmail/resources/sessions.js +2 -1
  32. package/build/asmail/retrieval.js +13 -8
  33. package/build/asmail/routes/config/param-getter.js +3 -2
  34. package/build/asmail/routes/config/param-setter.js +3 -2
  35. package/build/asmail/routes/delivery/finalize-delivery.js +3 -2
  36. package/build/asmail/routes/delivery/pre-flight.js +5 -4
  37. package/build/asmail/routes/delivery/provide-recipient-pubkey.js +3 -2
  38. package/build/asmail/routes/delivery/put-metadata.js +3 -2
  39. package/build/asmail/routes/delivery/put-obj.js +4 -4
  40. package/build/asmail/routes/delivery/restart-session.js +4 -3
  41. package/build/asmail/routes/delivery/sender-authorization.d.ts +1 -3
  42. package/build/asmail/routes/delivery/sender-authorization.js +3 -2
  43. package/build/asmail/routes/delivery/start-session.js +5 -4
  44. package/build/asmail/routes/retrieval/get-message-meta.js +3 -2
  45. package/build/asmail/routes/retrieval/get-message-obj.js +4 -3
  46. package/build/asmail/routes/retrieval/list-messages.js +3 -2
  47. package/build/asmail/routes/retrieval/remove-message.js +3 -2
  48. package/build/lib-common/admin-api/signup.d.ts +9 -0
  49. package/build/lib-common/admin-api/signup.js +11 -2
  50. package/build/lib-common/async-fs-node.js +13 -13
  51. package/build/lib-common/byte-streaming/common.js +9 -9
  52. package/build/lib-common/canonical-address.js +1 -1
  53. package/build/lib-common/ipc/generic-ipc.js +12 -12
  54. package/build/lib-common/ipc/ws-ipc.js +2 -2
  55. package/build/lib-common/mid-sigs-NaCl-Ed.js +14 -14
  56. package/build/lib-common/objs-on-disk/file-layout.js +10 -10
  57. package/build/lib-common/objs-on-disk/obj-file.js +11 -11
  58. package/build/lib-common/objs-on-disk/utils.js +3 -3
  59. package/build/lib-common/processes.js +1 -1
  60. package/build/lib-common/random-node.js +7 -7
  61. package/build/lib-common/service-api/3nstorage/owner.d.ts +5 -4
  62. package/build/lib-common/service-api/3nstorage/owner.js +11 -10
  63. package/build/lib-common/service-api/asmail/delivery.js +2 -2
  64. package/build/lib-common/service-api/asmail/retrieval.js +1 -1
  65. package/build/lib-server/conf-util.js +2 -1
  66. package/build/lib-server/middleware/body-parsers.js +16 -16
  67. package/build/lib-server/middleware/error-handler.js +1 -1
  68. package/build/lib-server/resources/mailerid-authorizer.js +3 -3
  69. package/build/lib-server/resources/mem-backed-sessions-factory.d.ts +1 -1
  70. package/build/lib-server/resources/mem-backed-sessions-factory.js +35 -10
  71. package/build/lib-server/resources/server-data-folders.js +23 -23
  72. package/build/lib-server/resources/sessions.js +5 -5
  73. package/build/lib-server/resources/user-files.js +8 -8
  74. package/build/lib-server/routes/pub-key-login/complete-exchange.js +4 -3
  75. package/build/lib-server/routes/pub-key-login/start-exchange.js +7 -6
  76. package/build/lib-server/routes/sessions/mid-auth.js +6 -5
  77. package/build/lib-server/routes/sessions/start.js +4 -3
  78. package/build/lib-server/web-sockets/app.js +6 -5
  79. package/build/lib-server/web-sockets/server-events.js +5 -4
  80. package/build/mailerId/mailerId-app.js +7 -7
  81. package/build/mailerId/resources/certifier.d.ts +4 -6
  82. package/build/mailerId/resources/certifier.js +8 -7
  83. package/build/mailerId/resources/compute-login-dhshared-key.js +2 -1
  84. package/build/mailerId/resources/sessions.js +2 -1
  85. package/build/mailerId/resources/users.js +4 -4
  86. package/build/mailerId/routes/certify.js +1 -1
  87. package/build/main.js +10 -10
  88. package/build/mock/dns.js +1 -1
  89. package/build/mock/mock-as-child-proc.js +10 -10
  90. package/build/mock/node-child-ipc.js +2 -2
  91. package/build/mock/run-in-proc.js +7 -7
  92. package/build/run-config.js +10 -10
  93. package/build/run.js +4 -4
  94. package/build/services.js +5 -5
  95. package/package.json +7 -4
@@ -44,13 +44,13 @@ function setupStaticEntryRoute(app) {
44
44
  }
45
45
  function makeApp(dataFolder, domain, midAuthorizer) {
46
46
  const app = new app_1.AppWithWSs();
47
- const ownersSessions = sessions_1.makeSessionFactory(20 * 60);
48
- const sharingSessions = sessions_1.makeSessionFactory(20 * 60);
49
- const users = users_1.makeFactory(dataFolder);
47
+ const ownersSessions = (0, sessions_1.makeSessionFactory)(20 * 60);
48
+ const sharingSessions = (0, sessions_1.makeSessionFactory)(20 * 60);
49
+ const users = (0, users_1.makeFactory)(dataFolder);
50
50
  setupStaticEntryRoute(app.http);
51
51
  app.use(PATHS.owner, owners.makeApp(domain, ownersSessions, users, midAuthorizer));
52
52
  app.http.use(PATHS.shared, sharing.makeApp(sharingSessions, users));
53
- app.http.use(error_handler_1.makeErrHandler((err, req) => {
53
+ app.http.use((0, error_handler_1.makeErrHandler)((err, req) => {
54
54
  if (typeof err.status !== 'number') {
55
55
  console.error(`\n --- Error occured in storage, when handling ${req.method} request to ${req.originalUrl}`);
56
56
  console.error(err);
@@ -59,44 +59,44 @@ const MAX_CHUNK_SIZE = '0.5mb';
59
59
  function setHttpPart(app, domain, sessions, users, midAuthorizer) {
60
60
  app.http.disable('etag');
61
61
  // Login
62
- app.http.post('/' + api.midLogin.START_URL_END, sessions.checkSession(), body_parsers_1.json('1kb'), start_1.startSession(users.exists, sessions.generate));
63
- app.http.post('/' + api.midLogin.AUTH_URL_END, sessions.ensureOpenedSession(), body_parsers_1.json('4kb'), mid_auth_1.midLogin(domain, midAuthorizer));
62
+ app.http.post('/' + api.midLogin.START_URL_END, sessions.checkSession(), (0, body_parsers_1.json)('1kb'), (0, start_1.startSession)(users.exists, sessions.generate));
63
+ app.http.post('/' + api.midLogin.AUTH_URL_END, sessions.ensureOpenedSession(), (0, body_parsers_1.json)('4kb'), (0, mid_auth_1.midLogin)(domain, midAuthorizer));
64
64
  // *** Require authorized session for everything below ***
65
65
  app.http.use(sessions.ensureAuthorizedSession());
66
- app.http.post('/' + api.closeSession.URL_END, body_parsers_1.emptyBody(), close_1.closeSession());
66
+ app.http.post('/' + api.closeSession.URL_END, (0, body_parsers_1.emptyBody)(), (0, close_1.closeSession)());
67
67
  // Session params
68
- app.http.get('/' + api.sessionParams.URL_END, session_params_1.sessionParams(MAX_CHUNK_SIZE));
68
+ app.http.get('/' + api.sessionParams.URL_END, (0, session_params_1.sessionParams)(MAX_CHUNK_SIZE));
69
69
  // Key derivation params
70
70
  app.http.route('/' + api.keyDerivParams.URL_END)
71
- .get(param_getter_1.getParam(users.getKeyDerivParams))
72
- .put(body_parsers_1.json('1kb'), param_setter_1.setParam(users.setKeyDerivParams));
71
+ .get((0, param_getter_1.getParam)(users.getKeyDerivParams))
72
+ .put((0, body_parsers_1.json)('1kb'), (0, param_setter_1.setParam)(users.setKeyDerivParams));
73
73
  // Transaction canceling
74
- app.http.post('/' + api.cancelTransaction.EXPRESS_URL_END, body_parsers_1.emptyBody(), cancel_trans_1.cancelTransaction(false, users.cancelTransaction));
75
- app.http.post('/' + api.cancelRootTransaction.EXPRESS_URL_END, body_parsers_1.emptyBody(), cancel_trans_1.cancelTransaction(true, users.cancelTransaction));
74
+ app.http.post('/' + api.cancelTransaction.EXPRESS_URL_END, (0, body_parsers_1.emptyBody)(), (0, cancel_trans_1.cancelTransaction)(false, users.cancelTransaction));
75
+ app.http.post('/' + api.cancelRootTransaction.EXPRESS_URL_END, (0, body_parsers_1.emptyBody)(), (0, cancel_trans_1.cancelTransaction)(true, users.cancelTransaction));
76
76
  // Getting current root object
77
77
  app.http.route('/' + api.currentRootObj.EXPRESS_URL_END)
78
- .get(get_current_obj_1.getCurrentObj(true, users.getCurrentRootObj))
79
- .put(put_current_obj_1.saveCurrentObj(true, users.saveNewRootVersion, MAX_CHUNK_SIZE));
78
+ .get((0, get_current_obj_1.getCurrentObj)(true, users.getCurrentRootObj))
79
+ .put((0, put_current_obj_1.saveCurrentObj)(true, users.saveNewRootVersion, MAX_CHUNK_SIZE));
80
80
  // Getting current non-root objects
81
81
  app.http.route('/' + api.currentObj.EXPRESS_URL_END)
82
- .get(get_current_obj_1.getCurrentObj(false, users.getCurrentObj))
83
- .delete(delete_obj_1.deleteObj(false, true, users.deleteObj))
84
- .put(put_current_obj_1.saveCurrentObj(false, users.saveNewObjVersion, MAX_CHUNK_SIZE));
82
+ .get((0, get_current_obj_1.getCurrentObj)(false, users.getCurrentObj))
83
+ .delete((0, delete_obj_1.deleteObj)(false, true, users.deleteObj))
84
+ .put((0, put_current_obj_1.saveCurrentObj)(false, users.saveNewObjVersion, MAX_CHUNK_SIZE));
85
85
  // Archive root's current version
86
86
  app.http.route('/' + api.archiveRoot.URL_END)
87
- .get(list_obj_archive_1.listObjArchive(true, users.listObjArchive))
88
- .put(body_parsers_1.emptyBody(), archive_obj_version_1.archiveCurrentObjVersion(true, users.archiveObjVersion));
87
+ .get((0, list_obj_archive_1.listObjArchive)(true, users.listObjArchive))
88
+ .put((0, body_parsers_1.emptyBody)(), (0, archive_obj_version_1.archiveCurrentObjVersion)(true, users.archiveObjVersion));
89
89
  // Archive non-root object's current version
90
90
  app.http.route('/' + api.archiveObj.EXPRESS_URL_END)
91
- .get(list_obj_archive_1.listObjArchive(false, users.listObjArchive))
92
- .put(body_parsers_1.emptyBody(), archive_obj_version_1.archiveCurrentObjVersion(false, users.archiveObjVersion));
91
+ .get((0, list_obj_archive_1.listObjArchive)(false, users.listObjArchive))
92
+ .put((0, body_parsers_1.emptyBody)(), (0, archive_obj_version_1.archiveCurrentObjVersion)(false, users.archiveObjVersion));
93
93
  // Archived root versions
94
94
  app.http.route('/' + api.archivedRootVersion.EXPRESS_URL_END)
95
- .get(get_archived_obj_ver_1.getArchivedObjVersion(true, users.getArchivedRootVersion))
96
- .delete(delete_obj_1.deleteObj(true, false, users.deleteObj));
95
+ .get((0, get_archived_obj_ver_1.getArchivedObjVersion)(true, users.getArchivedRootVersion))
96
+ .delete((0, delete_obj_1.deleteObj)(true, false, users.deleteObj));
97
97
  // Removing archived and current versions of non-root object
98
98
  app.http.route('/' + api.archivedObjVersion.EXPRESS_URL_END)
99
- .get(get_archived_obj_ver_1.getArchivedObjVersion(true, users.getArchivedObjVersion))
100
- .delete(delete_obj_1.deleteObj(false, false, users.deleteObj));
99
+ .get((0, get_archived_obj_ver_1.getArchivedObjVersion)(true, users.getArchivedObjVersion))
100
+ .delete((0, delete_obj_1.deleteObj)(false, false, users.deleteObj));
101
101
  }
102
102
  Object.freeze(exports);
@@ -131,7 +131,7 @@ class Store extends user_files_1.UserFiles {
131
131
  Object.freeze(this);
132
132
  }
133
133
  static async make(userFolder, userId, storageEventsSink, writeBufferSize, readBufferSize) {
134
- const path = path_1.join(userFolder, 'store');
134
+ const path = (0, path_1.join)(userFolder, 'store');
135
135
  const store = new Store(userId, path, storageEventsSink, writeBufferSize, readBufferSize);
136
136
  await store.ensureUserExistsOnDisk();
137
137
  return store;
@@ -153,7 +153,7 @@ class Store extends user_files_1.UserFiles {
153
153
  await spaceTracker.change(this, byteLen);
154
154
  }
155
155
  const params = {
156
- isNewObj: (opts.ver === 1),
156
+ isNewObj: opts.create,
157
157
  version: opts.ver,
158
158
  baseVersion: (diff ? diff.baseVersion : undefined)
159
159
  };
@@ -163,10 +163,10 @@ class Store extends user_files_1.UserFiles {
163
163
  const filePath = this.transactions.objFileWritingPath(objId);
164
164
  file = await this.objVerFiles.forNewFile(objId, trans.version, filePath);
165
165
  if (diff) {
166
- await file.setSegsLayout(utils_1.diffToLayout(diff), false);
166
+ await file.setSegsLayout((0, utils_1.diffToLayout)(diff), false);
167
167
  }
168
- const chunks = utils_1.chunksInOrderedStream(byteLen, opts.header, 0);
169
- await utils_1.streamToObjFile(file, chunks, bytes, this.fileWritingBufferSize);
168
+ const chunks = (0, utils_1.chunksInOrderedStream)(byteLen, opts.header, 0);
169
+ await (0, utils_1.streamToObjFile)(file, chunks, bytes, this.fileWritingBufferSize);
170
170
  if (opts.last) {
171
171
  if (!file.isFileComplete()) {
172
172
  throw exports.SC.OBJ_FILE_INCOMPLETE;
@@ -183,7 +183,7 @@ class Store extends user_files_1.UserFiles {
183
183
  }
184
184
  catch (err) {
185
185
  await spaceTracker.change(this, -byteLen);
186
- await this.transactions.cancel(objId, trans.transactionId).catch(() => { });
186
+ await this.transactions.cancel(objId, trans.transactionId).catch(noop);
187
187
  throw err;
188
188
  }
189
189
  }
@@ -206,8 +206,8 @@ class Store extends user_files_1.UserFiles {
206
206
  const file = await this.objVerFiles.forExistingFile(objId, trans.version, filePath);
207
207
  if (byteLen > 0) {
208
208
  await spaceTracker.change(this, byteLen);
209
- const chunks = utils_1.chunksInOrderedStream(byteLen, undefined, opts.ofs);
210
- await utils_1.streamToObjFile(file, chunks, bytes, this.fileWritingBufferSize);
209
+ const chunks = (0, utils_1.chunksInOrderedStream)(byteLen, undefined, opts.ofs);
210
+ await (0, utils_1.streamToObjFile)(file, chunks, bytes, this.fileWritingBufferSize);
211
211
  }
212
212
  if (opts.last) {
213
213
  if (!file.isFileComplete()) {
@@ -302,14 +302,14 @@ class Store extends user_files_1.UserFiles {
302
302
  len: (segBytesToRead + headerLen),
303
303
  segsLen,
304
304
  headerLen,
305
- pipe: utils_1.makeObjPipe(file, true, segsOfs, segBytesToRead, objId, this.getObjFile)
305
+ pipe: (0, utils_1.makeObjPipe)(file, true, segsOfs, segBytesToRead, objId, this.getObjFile)
306
306
  };
307
307
  }
308
308
  else {
309
309
  reader = {
310
310
  len: segBytesToRead,
311
311
  segsLen,
312
- pipe: utils_1.makeObjPipe(file, false, segsOfs, segBytesToRead, objId, this.getObjFile)
312
+ pipe: (0, utils_1.makeObjPipe)(file, false, segsOfs, segBytesToRead, objId, this.getObjFile)
313
313
  };
314
314
  }
315
315
  Object.freeze(reader);
@@ -394,7 +394,7 @@ class Store extends user_files_1.UserFiles {
394
394
  throw exports.SC.OBJ_UNKNOWN;
395
395
  }
396
396
  for (const fName of objFiles) {
397
- await fs.unlink(path_1.join(objFolder, fName)).catch(() => { });
397
+ await fs.unlink((0, path_1.join)(objFolder, fName)).catch(() => { });
398
398
  }
399
399
  }
400
400
  // XXX need both, archiving and removal transactions for atomic locking
@@ -501,8 +501,8 @@ class ObjStatuses {
501
501
  }
502
502
  objFolder(objId) {
503
503
  return (objId ?
504
- path_1.join(this.path, 'objects', objId) :
505
- path_1.join(this.path, 'root'));
504
+ (0, path_1.join)(this.path, 'objects', objId) :
505
+ (0, path_1.join)(this.path, 'root'));
506
506
  }
507
507
  async get(objId) {
508
508
  let status = this.cache.get(objId);
@@ -513,7 +513,7 @@ class ObjStatuses {
513
513
  return status;
514
514
  }
515
515
  async fromFile(objId) {
516
- const filePath = path_1.join(this.objFolder(objId), STATUS_FILE);
516
+ const filePath = (0, path_1.join)(this.objFolder(objId), STATUS_FILE);
517
517
  const str = await fs.readFile(filePath, { encoding: 'utf8', flag: 'r' }).catch((exc) => {
518
518
  if (exc.notFound) {
519
519
  throw exports.SC.OBJ_UNKNOWN;
@@ -524,7 +524,7 @@ class ObjStatuses {
524
524
  return JSON.parse(str);
525
525
  }
526
526
  catch (err) {
527
- throw error_1.errWithCause(err, `Can't parse content of obj status file`);
527
+ throw (0, error_1.errWithCause)(err, `Can't parse content of obj status file`);
528
528
  }
529
529
  }
530
530
  async set(objId, status) {
@@ -532,7 +532,7 @@ class ObjStatuses {
532
532
  await this.saveToFile(objId, status);
533
533
  }
534
534
  async saveToFile(objId, status) {
535
- const filePath = path_1.join(this.objFolder(objId), STATUS_FILE);
535
+ const filePath = (0, path_1.join)(this.objFolder(objId), STATUS_FILE);
536
536
  const str = JSON.stringify(status);
537
537
  const procId = (objId ? objId : 'null');
538
538
  await this.saveProcs.startOrChain(procId, () => fs.writeFile(filePath, str, { encoding: 'utf8', flag: 'w' }));
@@ -540,7 +540,7 @@ class ObjStatuses {
540
540
  async deleteWithObj(objId) {
541
541
  this.cache.delete(objId);
542
542
  if (objId === null) {
543
- await fs.unlink(path_1.join(this.objFolder(null), STATUS_FILE))
543
+ await fs.unlink((0, path_1.join)(this.objFolder(null), STATUS_FILE))
544
544
  .catch(() => { });
545
545
  }
546
546
  else {
@@ -571,7 +571,7 @@ class ObjStatuses {
571
571
  });
572
572
  }
573
573
  objFileReadingPath(objId, version) {
574
- return path_1.join(this.objFolder(objId), toFName(version));
574
+ return (0, path_1.join)(this.objFolder(objId), toFName(version));
575
575
  }
576
576
  }
577
577
  Object.freeze(ObjStatuses.prototype);
@@ -587,8 +587,8 @@ class ObjTransactions {
587
587
  }
588
588
  transactionFolder(objId) {
589
589
  return (objId ?
590
- path_1.join(this.path, 'transactions', objId) :
591
- path_1.join(this.path, 'root', 'transaction'));
590
+ (0, path_1.join)(this.path, 'transactions', objId) :
591
+ (0, path_1.join)(this.path, 'root', 'transaction'));
592
592
  }
593
593
  async get(objId, transactionId) {
594
594
  let isInCache = true;
@@ -606,7 +606,7 @@ class ObjTransactions {
606
606
  return trans;
607
607
  }
608
608
  transactionFilePath(objId) {
609
- return path_1.join(this.transactionFolder(objId), 'transaction');
609
+ return (0, path_1.join)(this.transactionFolder(objId), 'transaction');
610
610
  }
611
611
  async fromFile(objId) {
612
612
  const filePath = this.transactionFilePath(objId);
@@ -625,7 +625,7 @@ class ObjTransactions {
625
625
  return JSON.parse(str);
626
626
  }
627
627
  catch (err) {
628
- throw error_1.errWithCause(err, `Can't parse content of obj transaction file`);
628
+ throw (0, error_1.errWithCause)(err, `Can't parse content of obj transaction file`);
629
629
  }
630
630
  }
631
631
  async set(objId, status) {
@@ -639,11 +639,11 @@ class ObjTransactions {
639
639
  await this.saveProcs.startOrChain(procId, () => fs.writeFile(filePath, str, { encoding: 'utf8', flag: 'w' }));
640
640
  }
641
641
  objFileWritingPath(objId) {
642
- return path_1.join(this.transactionFolder(objId), 'new');
642
+ return (0, path_1.join)(this.transactionFolder(objId), 'new');
643
643
  }
644
644
  async startNew(objId, reqTrans) {
645
645
  const trans = reqTrans;
646
- trans.transactionId = await random_node_1.stringOfB64UrlSafeChars(10);
646
+ trans.transactionId = await (0, random_node_1.stringOfB64UrlSafeChars)(10);
647
647
  trans.transactionType = 'write';
648
648
  await this.makeTransactionFolder(objId);
649
649
  await this.set(objId, trans);
@@ -735,4 +735,5 @@ Object.freeze(ObjStatuses);
735
735
  function toFName(version) {
736
736
  return `${version}.`;
737
737
  }
738
+ function noop() { }
738
739
  Object.freeze(exports);
@@ -16,7 +16,7 @@
16
16
  this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.makeFactory = void 0;
19
+ exports.makeFactory = exports.SC = void 0;
20
20
  const store_1 = require("./store");
21
21
  const server_data_folders_1 = require("../../lib-server/resources/server-data-folders");
22
22
  var store_2 = require("./store");
@@ -40,7 +40,7 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
40
40
  }
41
41
  }
42
42
  else {
43
- const userFolder = server_data_folders_1.userDataInRootFolder(rootFolder, userId);
43
+ const userFolder = (0, server_data_folders_1.userDataInRootFolder)(rootFolder, userId);
44
44
  const store = await store_1.Store.make(userFolder, userId, storageEventsSink, writeBufferSize, readBufferSize);
45
45
  stores.set(userId, store);
46
46
  return store;
@@ -1,3 +1,3 @@
1
- import * as express from 'express';
1
+ import { RequestHandler } from 'express';
2
2
  import { ArchiveObjCurrentVersion } from '../../resources/users';
3
- export declare function archiveCurrentObjVersion(root: boolean, archiveObjVerFunc: ArchiveObjCurrentVersion): express.RequestHandler;
3
+ export declare function archiveCurrentObjVersion(root: boolean, archiveObjVerFunc: ArchiveObjCurrentVersion): RequestHandler;
@@ -13,7 +13,8 @@
13
13
  See the GNU General Public License for more details.
14
14
 
15
15
  You should have received a copy of the GNU General Public License along with
16
- this program. If not, see <http://www.gnu.org/licenses/>. */
16
+ this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
17
18
  Object.defineProperty(exports, "__esModule", { value: true });
18
19
  exports.archiveCurrentObjVersion = void 0;
19
20
  const owner_1 = require("../../../lib-common/service-api/3nstorage/owner");
@@ -22,7 +23,7 @@ function archiveCurrentObjVersion(root, archiveObjVerFunc) {
22
23
  if ('function' !== typeof archiveObjVerFunc) {
23
24
  throw new TypeError("Given argument 'archiveObjVerFunc' must be function, but is not.");
24
25
  }
25
- return async function (req, res, next) {
26
+ return async (req, res, next) => {
26
27
  next(new Error('Not implemented, yet.'));
27
28
  // const userId = req.session.params.userId;
28
29
  // const objId: string = (root ? null : req.params.objId);
@@ -23,7 +23,7 @@ function cancelTransaction(root, cancelTransFunc) {
23
23
  if ('function' !== typeof cancelTransFunc) {
24
24
  throw new TypeError("Given argument 'cancelTransFunc' must be function, but is not.");
25
25
  }
26
- return async function (req, res, next) {
26
+ return async (req, res, next) => {
27
27
  const userId = req.session.params.userId;
28
28
  const objId = (root ? null : req.params.objId);
29
29
  const transactionId = req.params.transactionId;
@@ -23,7 +23,7 @@ function deleteObj(root, delCurrent, deleteObjFunc) {
23
23
  if ('function' !== typeof deleteObjFunc) {
24
24
  throw new TypeError("Given argument 'deleteObjFunc' must be function, but is not.");
25
25
  }
26
- return async function (req, res, next) {
26
+ return async (req, res, next) => {
27
27
  const userId = req.session.params.userId;
28
28
  const objId = (root ? null : req.params.objId);
29
29
  const version = (delCurrent ? null : req.params.version);
@@ -49,7 +49,7 @@ function getArchivedObjVersion(root, getArchivedObjFunc) {
49
49
  if ('function' !== typeof getArchivedObjFunc) {
50
50
  throw new TypeError("Given argument 'getArchivedObjFunc' must be function, but is not.");
51
51
  }
52
- return async function (req, res, next) {
52
+ return async (req, res, next) => {
53
53
  const userId = req.session.params.userId;
54
54
  const objId = (root ? null : req.params.objId);
55
55
  const opts = extractQueryOptions(req);
@@ -71,7 +71,7 @@ function getArchivedObjVersion(root, getArchivedObjFunc) {
71
71
  await reader.pipe(res);
72
72
  }
73
73
  catch (err) {
74
- console.error(error_1.errWithCause(err, `Wasn't able to complete sending segments due to error in piping`));
74
+ console.error((0, error_1.errWithCause)(err, `Wasn't able to complete sending segments due to error in piping`));
75
75
  }
76
76
  finally {
77
77
  res.end();
@@ -54,7 +54,7 @@ function getCurrentObj(root, getCurrentObjFunc) {
54
54
  if ('function' !== typeof getCurrentObjFunc) {
55
55
  throw new TypeError("Given argument 'getCurrentObjFunc' must be function, but is not.");
56
56
  }
57
- return async function (req, res, next) {
57
+ return async (req, res, next) => {
58
58
  const userId = req.session.params.userId;
59
59
  const objId = (root ? null : req.params.objId);
60
60
  const opts = extractQueryOptions(req);
@@ -86,7 +86,7 @@ function getCurrentObj(root, getCurrentObjFunc) {
86
86
  await reader.pipe(res);
87
87
  }
88
88
  catch (err) {
89
- console.error(error_1.stringifyErr(error_1.errWithCause(err, `Wasn't able to complete sending segments due to error in piping`)));
89
+ console.error((0, error_1.stringifyErr)((0, error_1.errWithCause)(err, `Wasn't able to complete sending segments due to error in piping`)));
90
90
  }
91
91
  finally {
92
92
  res.end();
@@ -13,14 +13,15 @@
13
13
  See the GNU General Public License for more details.
14
14
 
15
15
  You should have received a copy of the GNU General Public License along with
16
- this program. If not, see <http://www.gnu.org/licenses/>. */
16
+ this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
17
18
  Object.defineProperty(exports, "__esModule", { value: true });
18
19
  exports.listObjArchive = void 0;
19
20
  function listObjArchive(root, listObjArchiveFunc) {
20
21
  if ('function' !== typeof listObjArchiveFunc) {
21
22
  throw new TypeError("Given argument 'listObjArchiveFunc' must be function, but is not.");
22
23
  }
23
- return async function (req, res, next) {
24
+ return async (req, res, next) => {
24
25
  next(new Error('Not implemented, yet.'));
25
26
  // const userId = req.session.params.userId;
26
27
  // const objId: string = (root ? null : req.params.objId);
@@ -13,7 +13,8 @@
13
13
  See the GNU General Public License for more details.
14
14
 
15
15
  You should have received a copy of the GNU General Public License along with
16
- this program. If not, see <http://www.gnu.org/licenses/>. */
16
+ this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
17
18
  Object.defineProperty(exports, "__esModule", { value: true });
18
19
  exports.getParam = void 0;
19
20
  const users_1 = require("../../resources/users");
@@ -22,7 +23,7 @@ function getParam(paramGetter) {
22
23
  if ('function' !== typeof paramGetter) {
23
24
  throw new TypeError("Given argument 'paramGetter' must be function, but is not.");
24
25
  }
25
- return async function (req, res, next) {
26
+ return async (req, res, next) => {
26
27
  const session = req.session;
27
28
  const userId = session.params.userId;
28
29
  try {
@@ -13,7 +13,8 @@
13
13
  See the GNU General Public License for more details.
14
14
 
15
15
  You should have received a copy of the GNU General Public License along with
16
- this program. If not, see <http://www.gnu.org/licenses/>. */
16
+ this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
17
18
  Object.defineProperty(exports, "__esModule", { value: true });
18
19
  exports.setParam = void 0;
19
20
  const users_1 = require("../../resources/users");
@@ -22,7 +23,7 @@ function setParam(paramSetter) {
22
23
  if ('function' !== typeof paramSetter) {
23
24
  throw new TypeError("Given argument 'paramSetter' must be function, but is not.");
24
25
  }
25
- return async function (req, res, next) {
26
+ return async (req, res, next) => {
26
27
  const session = req.session;
27
28
  const userId = session.params.userId;
28
29
  const pValue = req.body;
@@ -28,10 +28,10 @@ function saveCurrentObj(root, saveObjFunc, chunkLimit) {
28
28
  if ('function' !== typeof saveObjFunc) {
29
29
  throw new TypeError("Given argument 'saveObjFunc' must be function, but is not.");
30
30
  }
31
- const maxChunkSize = conf_util_1.stringToNumOfBytes(chunkLimit);
32
- return async function (req, res, next) {
31
+ const maxChunkSize = (0, conf_util_1.stringToNumOfBytes)(chunkLimit);
32
+ return async (req, res, next) => {
33
33
  if (!req.is(owner_1.BIN_TYPE)) {
34
- body_parsers_1.attachByteDrainToRequest(req);
34
+ (0, body_parsers_1.attachByteDrainToRequest)(req);
35
35
  res.status(owner_1.ERR_SC.wrongContentType).json({
36
36
  error: `Content-Type must be ${owner_1.BIN_TYPE} for this call.`
37
37
  });
@@ -42,7 +42,7 @@ function saveCurrentObj(root, saveObjFunc, chunkLimit) {
42
42
  // get and check Content-Length, implicitly sending replies for bad length
43
43
  let len = getContentLenOrSendError(req, res, maxChunkSize);
44
44
  if (len === undefined) {
45
- body_parsers_1.attachByteDrainToRequest(req);
45
+ (0, body_parsers_1.attachByteDrainToRequest)(req);
46
46
  return;
47
47
  }
48
48
  // extract and check query parameters
@@ -53,7 +53,7 @@ function saveCurrentObj(root, saveObjFunc, chunkLimit) {
53
53
  const { fstReq, sndReq } = opts;
54
54
  let diff;
55
55
  if (fstReq) {
56
- if ((fstReq.ver === 1) && objId) {
56
+ if (fstReq.create && objId) {
57
57
  if (!buffer_utils_1.base64urlSafe.allCharsFromAlphabet(objId)) {
58
58
  return replyToMalformed(req, "Bad object id", res);
59
59
  }
@@ -66,7 +66,7 @@ function saveCurrentObj(root, saveObjFunc, chunkLimit) {
66
66
  }
67
67
  // read diff, if it is expected
68
68
  if (fstReq.diff) {
69
- let diffBytes = await readChunkFrom(req, fstReq.diff).catch((err) => { });
69
+ let diffBytes = await readChunkFrom(req, fstReq.diff).catch(noop);
70
70
  if (diffBytes) {
71
71
  len -= fstReq.diff;
72
72
  }
@@ -75,7 +75,7 @@ function saveCurrentObj(root, saveObjFunc, chunkLimit) {
75
75
  }
76
76
  try {
77
77
  const diffFromReq = JSON.parse(buffer_utils_1.utf8.open(diffBytes));
78
- diff = owner_1.sanitizedDiff(diffFromReq, fstReq.ver);
78
+ diff = (0, owner_1.sanitizedDiff)(diffFromReq, fstReq.ver);
79
79
  if (!diff) {
80
80
  return replyToMalformed(req, "Malformed diff info", res);
81
81
  }
@@ -171,6 +171,7 @@ function extractQueryOptions(req) {
171
171
  // this is the first request
172
172
  // query fields are string or undefined, yet, type info helps the show
173
173
  const query = req.query;
174
+ const create = (query.create === 'true');
174
175
  const ver = parseInt(query.ver);
175
176
  if (isNaN(ver) || (ver < 1)) {
176
177
  return;
@@ -186,7 +187,7 @@ function extractQueryOptions(req) {
186
187
  return;
187
188
  }
188
189
  const last = (query.last === 'true');
189
- return { fstReq: { diff, header, last, ver } };
190
+ return { fstReq: { diff, header, last, ver, create } };
190
191
  }
191
192
  }
192
193
  function getContentLenOrSendError(req, res, maxChunkSize) {
@@ -219,7 +220,7 @@ function readChunkFrom(stream, bytesToRead) {
219
220
  throw new Error(`Illegal number of bytes to read from stream: ${bytesToRead}`);
220
221
  }
221
222
  const buffer = new common_1.BytesFIFOBuffer();
222
- let deferred = processes_1.defer();
223
+ let deferred = (0, processes_1.defer)();
223
224
  const complete = (bytes, err) => {
224
225
  if (!deferred) {
225
226
  return;
@@ -270,7 +271,8 @@ function readChunkFrom(stream, bytesToRead) {
270
271
  return deferred.promise;
271
272
  }
272
273
  function replyToMalformed(req, msg, res) {
273
- body_parsers_1.attachByteDrainToRequest(req);
274
+ (0, body_parsers_1.attachByteDrainToRequest)(req);
274
275
  res.status(owner_1.ERR_SC.malformed).json({ error: msg });
275
276
  }
277
+ function noop() { }
276
278
  Object.freeze(exports);
@@ -13,15 +13,16 @@
13
13
  See the GNU General Public License for more details.
14
14
 
15
15
  You should have received a copy of the GNU General Public License along with
16
- this program. If not, see <http://www.gnu.org/licenses/>. */
16
+ this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
17
18
  Object.defineProperty(exports, "__esModule", { value: true });
18
19
  exports.sessionParams = void 0;
19
20
  const users_1 = require("../../resources/users");
20
21
  const owner_1 = require("../../../lib-common/service-api/3nstorage/owner");
21
22
  const conf_util_1 = require("../../../lib-server/conf-util");
22
23
  function sessionParams(maxChunk) {
23
- const maxChunkSize = conf_util_1.stringToNumOfBytes(maxChunk);
24
- return async function (req, res, next) {
24
+ const maxChunkSize = (0, conf_util_1.stringToNumOfBytes)(maxChunk);
25
+ return async (req, res, next) => {
25
26
  const userId = req.session.params.userId;
26
27
  try {
27
28
  const reply = { maxChunkSize };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2015 - 2016, 2020 3NSoft Inc.
3
+ Copyright (C) 2015 - 2016, 2020 - 2021 3NSoft Inc.
4
4
 
5
5
  This program is free software: you can redistribute it and/or modify it under
6
6
  the terms of the GNU General Public License as published by the Free Software
@@ -23,22 +23,24 @@ const error_handler_1 = require("../lib-server/middleware/error-handler");
23
23
  const users_1 = require("./resources/users");
24
24
  const add_1 = require("./routes/add");
25
25
  const get_available_addresses_1 = require("./routes/get-available-addresses");
26
+ const get_available_domains_1 = require("./routes/get-available-domains");
26
27
  const signupApi = require("../lib-common/admin-api/signup");
27
28
  function apiPart(users) {
28
29
  const app = express();
29
30
  app.disable('etag');
30
- app.post('/' + signupApi.availableAddressesForName.URL_END, body_parsers_1.json('1kb'), get_available_addresses_1.availableAddresses(users.getAvailableAddresses));
31
- app.post('/' + signupApi.addUser.URL_END, body_parsers_1.json('4kb'), add_1.addUser(users.add));
31
+ app.post('/' + signupApi.availableDomains.URL_END, (0, body_parsers_1.json)('1kb'), (0, get_available_domains_1.availableDomains)(users.getAvailableDomains));
32
+ app.post('/' + signupApi.availableAddressesForName.URL_END, (0, body_parsers_1.json)('1kb'), (0, get_available_addresses_1.availableAddresses)(users.getAvailableAddresses));
33
+ app.post('/' + signupApi.addUser.URL_END, (0, body_parsers_1.json)('4kb'), (0, add_1.addUser)(users.add));
32
34
  return app;
33
35
  }
34
36
  function makeApp(conf) {
35
37
  const app = express();
36
38
  const noTokenFile = (conf.signup ? conf.signup.noTokenFile : undefined);
37
- const users = users_1.makeFactory(conf.rootFolder, noTokenFile);
39
+ const users = (0, users_1.makeFactory)(conf.rootFolder, noTokenFile);
38
40
  if (conf.signup) {
39
41
  app.use('/signup', apiPart(users));
40
42
  }
41
- app.use(error_handler_1.makeErrHandler());
43
+ app.use((0, error_handler_1.makeErrHandler)());
42
44
  return app;
43
45
  }
44
46
  exports.makeApp = makeApp;
@@ -6,16 +6,20 @@ export declare const SC: {
6
6
  export declare function validateUserMidParams(params: UserMidParams): boolean;
7
7
  export declare function validateUserStorageParams(params: UserStorageParams): boolean;
8
8
  /**
9
- * This returns a promise, resolvable to
10
- * - true, when given new id is available,
11
- * - false, when there is already a user with given id.
9
+ * This returns a promise, resolvable to an array of domains, that are
10
+ * available for a given token. Array may be empty, when there are no
11
+ * such domains.
12
+ * @param signupToken
13
+ * @return a promise, resolvable to available addresses for a given name.
14
+ * If array is empty, there are no available addresses for a given name.
12
15
  */
13
- export declare type IUserIdAvailable = (newUserId: string, signupToken: string | undefined) => Promise<boolean>;
16
+ export declare type IAvailableDomains = (signupToken: string | undefined) => Promise<string[]>;
14
17
  /**
15
18
  * This returns a promise, resolvable to an array of addresses, that are
16
19
  * available for a given string. Array may be empty, when there are no
17
20
  * such addresses.
18
21
  * @param name is a name part of address, or not a domain part.
22
+ * @param signupToken
19
23
  * @return a promise, resolvable to available addresses for a given name.
20
24
  * If array is empty, there are no available addresses for a given name.
21
25
  */
@@ -27,11 +31,13 @@ export declare type IAvailableAddressesForName = (name: string, signupToken: str
27
31
  * but user-likable variant.
28
32
  * @param midParams MailerId parameters to save
29
33
  * @param storeParams storage parameters to save
34
+ * @param signupToken
30
35
  * @return a promise, resolvable, when user is added, and all parameters are
31
36
  * saved.
32
37
  */
33
38
  export declare type IAdd = (userId: string, midParams: UserMidParams, storeParams: any, signupToken: string | undefined) => Promise<void>;
34
39
  export interface Factory {
40
+ getAvailableDomains: IAvailableDomains;
35
41
  getAvailableAddresses: IAvailableAddressesForName;
36
42
  add: IAdd;
37
43
  }