@secrecy/lib 1.0.0-dev.67 → 1.0.0-dev.68

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 (99) hide show
  1. package/dist/BaseClient.cjs +1 -1
  2. package/dist/BaseClient.cjs.map +1 -1
  3. package/dist/BaseClient.js +1 -1
  4. package/dist/BaseClient.js.map +1 -1
  5. package/dist/PopupTools.cjs +1 -1
  6. package/dist/PopupTools.js +1 -1
  7. package/dist/ZeusThunder.cjs +1 -1
  8. package/dist/ZeusThunder.cjs.map +1 -1
  9. package/dist/ZeusThunder.js +1 -1
  10. package/dist/ZeusThunder.js.map +1 -1
  11. package/dist/cache.cjs +1 -1
  12. package/dist/cache.js +1 -1
  13. package/dist/chunk-UPFDSEKI.js +2 -0
  14. package/dist/{chunk-KMTF2BZE.js.map → chunk-UPFDSEKI.js.map} +0 -0
  15. package/dist/chunk-XDPEU3HV.cjs +2 -0
  16. package/dist/{chunk-5WPCTUWH.cjs.map → chunk-XDPEU3HV.cjs.map} +0 -0
  17. package/dist/client/SecrecyAppClient.cjs +1 -1
  18. package/dist/client/SecrecyAppClient.cjs.map +1 -1
  19. package/dist/client/SecrecyAppClient.js +1 -1
  20. package/dist/client/SecrecyAppClient.js.map +1 -1
  21. package/dist/client/SecrecyCloudClient.cjs +1 -1
  22. package/dist/client/SecrecyCloudClient.cjs.map +1 -1
  23. package/dist/client/SecrecyCloudClient.js +1 -1
  24. package/dist/client/SecrecyCloudClient.js.map +1 -1
  25. package/dist/client/SecrecyDbClient.cjs +1 -1
  26. package/dist/client/SecrecyDbClient.cjs.map +1 -1
  27. package/dist/client/SecrecyDbClient.js +1 -1
  28. package/dist/client/SecrecyDbClient.js.map +1 -1
  29. package/dist/client/SecrecyMailClient.cjs +1 -1
  30. package/dist/client/SecrecyMailClient.cjs.map +1 -1
  31. package/dist/client/SecrecyMailClient.js +1 -1
  32. package/dist/client/SecrecyMailClient.js.map +1 -1
  33. package/dist/client/SecrecyPayClient.cjs +1 -1
  34. package/dist/client/SecrecyPayClient.js +1 -1
  35. package/dist/client/SecrecyWalletClient.cjs +1 -1
  36. package/dist/client/SecrecyWalletClient.cjs.map +1 -1
  37. package/dist/client/SecrecyWalletClient.js +1 -1
  38. package/dist/client/SecrecyWalletClient.js.map +1 -1
  39. package/dist/client/convert/file.cjs +1 -1
  40. package/dist/client/convert/file.js +1 -1
  41. package/dist/client/convert/mail.cjs +1 -1
  42. package/dist/client/convert/mail.js +1 -1
  43. package/dist/client/convert/node.cjs +1 -1
  44. package/dist/client/convert/node.cjs.map +1 -1
  45. package/dist/client/convert/node.js +1 -1
  46. package/dist/client/convert/node.js.map +1 -1
  47. package/dist/client/helpers.cjs +1 -1
  48. package/dist/client/helpers.js +1 -1
  49. package/dist/client/index.cjs +1 -1
  50. package/dist/client/index.cjs.map +1 -1
  51. package/dist/client/index.js +1 -1
  52. package/dist/client/index.js.map +1 -1
  53. package/dist/client/storage.cjs +1 -1
  54. package/dist/client/storage.js +1 -1
  55. package/dist/client/types/selectors.cjs +1 -1
  56. package/dist/client/types/selectors.js +1 -1
  57. package/dist/crypto/file.cjs +1 -1
  58. package/dist/crypto/file.cjs.map +1 -1
  59. package/dist/crypto/file.js +1 -1
  60. package/dist/crypto/file.js.map +1 -1
  61. package/dist/crypto/index.cjs +1 -1
  62. package/dist/crypto/index.js +1 -1
  63. package/dist/index.cjs +1 -1
  64. package/dist/index.js +1 -1
  65. package/dist/minify/index.cjs +1 -1
  66. package/dist/minify/index.js +1 -1
  67. package/dist/minify/lz4.cjs +1 -1
  68. package/dist/minify/lz4.js +1 -1
  69. package/dist/sodium.cjs +1 -1
  70. package/dist/sodium.cjs.map +1 -1
  71. package/dist/sodium.js +1 -1
  72. package/dist/sodium.js.map +1 -1
  73. package/dist/utils/store-buddy.cjs +1 -1
  74. package/dist/utils/store-buddy.js +1 -1
  75. package/dist/utils/time.cjs +1 -1
  76. package/dist/utils/time.js +1 -1
  77. package/dist/utils/utils.cjs +1 -1
  78. package/dist/utils/utils.cjs.map +1 -1
  79. package/dist/utils/utils.js +1 -1
  80. package/dist/utils/utils.js.map +1 -1
  81. package/dist/worker/md5.cjs +1 -1
  82. package/dist/worker/md5.cjs.map +1 -1
  83. package/dist/worker/md5.js +1 -1
  84. package/dist/worker/md5.js.map +1 -1
  85. package/dist/worker/sodium.cjs +1 -1
  86. package/dist/worker/sodium.cjs.map +1 -1
  87. package/dist/worker/sodium.js +1 -1
  88. package/dist/worker/sodium.js.map +1 -1
  89. package/dist/worker/workerCodes.cjs +1 -1
  90. package/dist/worker/workerCodes.js +1 -1
  91. package/dist/zeus/const.cjs +1 -1
  92. package/dist/zeus/const.js +1 -1
  93. package/dist/zeus/index.cjs +2 -2
  94. package/dist/zeus/index.cjs.map +1 -1
  95. package/dist/zeus/index.js +2 -2
  96. package/dist/zeus/index.js.map +1 -1
  97. package/package.json +3 -3
  98. package/dist/chunk-5WPCTUWH.cjs +0 -2
  99. package/dist/chunk-KMTF2BZE.js +0 -2
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunk5WPCTUWHcjs = require('../chunk-5WPCTUWH.cjs');var P,l,p;var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _ky = require('ky'); var _ky2 = _interopRequireDefault(_ky);var _indexjs = require('../index.js');var _cachejs = require('../cache.js');var _filejs = require('../crypto/file.js');var _indexjs3 = require('../crypto/index.js');var _indexjs5 = require('../minify/index.js');var _sodiumjs = require('../sodium.js');var _utilsjs = require('../utils/utils.js');var _md5js = require('../worker/md5.js');var _sodiumjs3 = require('../worker/sodium.js');var _filejs3 = require('./convert/file.js');var _nodejs = require('./convert/node.js');var _selectorsjs = require('./types/selectors.js');class Ne{constructor(r,t,e){_chunk5WPCTUWHcjs.e.call(void 0, this,P,void 0);_chunk5WPCTUWHcjs.e.call(void 0, this,l,void 0);_chunk5WPCTUWHcjs.e.call(void 0, this,p,void 0);_chunk5WPCTUWHcjs.c.call(void 0, this,"perNode",async(r,t)=>{var i;let e=_cachejs.nodesCache.get(r);if(!e&&(await this.node({id:r}),e=_cachejs.nodesCache.get(r),!e))return null;const o=(i=e.access)==null?void 0:i.nameKey;return o?{id:e.id,nameKey:_sodiumjs.sodium.to_hex(_indexjs3.encryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(o),t,_chunk5WPCTUWHcjs.d.call(void 0, this,l).privateKey)),files:"history"in e?e.history.map(s=>({id:s.id,key:_sodiumjs.sodium.to_hex(_indexjs3.encryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(s.key),t,_chunk5WPCTUWHcjs.d.call(void 0, this,l).privateKey))})):[]}:null});_chunk5WPCTUWHcjs.f.call(void 0, this,P,r),_chunk5WPCTUWHcjs.f.call(void 0, this,l,t),_chunk5WPCTUWHcjs.f.call(void 0, this,p,e)}async addFileToHistory({fileId:r,nodeId:t}){const{addFileToHistory:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({addFileToHistory:[{fileId:r,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on AddFileToHistoryResponse":{__typename:!0,addFileToHistory:_selectorsjs.nodeFullSelector}}]});if(!e)return null;if(e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorNotExist")return e;const o=await _nodejs.gqlNodeFullToInternalFull.call(void 0, e.addFileToHistory,_chunk5WPCTUWHcjs.d.call(void 0, this,l)),i=o.history.find(c=>c.id===r);if(i){const c=o.users.filter(([m])=>m.publicKey!==_chunk5WPCTUWHcjs.d.call(void 0, this,l).publicKey),u={fileId:i.id,users:c.map(([m])=>({id:m.id,key:_sodiumjs.sodium.to_hex(_indexjs3.encryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(i.key),_chunk5WPCTUWHcjs.d.call(void 0, this,l).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,l).privateKey))}))};await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({shareFileInHistory:[{input:u,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareFileInHistoryResponse":{__typename:!0,shareFileInHistory:!0}}]})}const s=_nodejs.internalNodeToNode.call(void 0, o);return{__typename:"SuccessResponse",data:s}}async uploadFile({file:r,encryptProgress:t,uploadProgress:e,signal:o}){const i=_filejs.secretstreamKeygen.call(void 0, ),s=r instanceof File?new Uint8Array(await r.arrayBuffer()):r,c=_indexjs5.compress.call(void 0, s),{data:u,md5:m,md5Encrypted:h}=await _sodiumjs3.encrypt.call(void 0, i,c,t,o),A=_indexjs3.encryptCryptoBox.call(void 0, i,_chunk5WPCTUWHcjs.d.call(void 0, this,l).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,l).privateKey),{uploadFile:a}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation",{scalars:{Json:{encode:d=>JSON.stringify(d),decode:d=>JSON.parse(d)},DateTime:{decode:d=>new Date(d),encode:d=>d.toISOString()},BigInt:{decode:d=>BigInt(d),encode:d=>d.toString()}}})({uploadFile:[{fileSize:u.byteLength,fileSizeBefore:s.byteLength,fileKey:_sodiumjs.sodium.to_hex(A),md5Encrypted:h,md5:m},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorLimit":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UploadFileResponse":{__typename:!0,uploadFile:{fileId:!0,filePartSize:!0,parts:{fields:!0,order:!0,url:!0}}}}]});if(!a)return null;if(a.__typename==="ErrorAccessDenied"||a.__typename==="ErrorLimit"||a.__typename==="ErrorNotFound")return a;if(!a.uploadFile)return null;if(e==null||e({total:u.byteLength,current:0,percent:0}),a.uploadFile.parts.length===0)return e==null||e({total:u.byteLength,current:u.byteLength,percent:1}),{__typename:"SuccessResponse",data:a.uploadFile.fileId};const g=async(d,N)=>{if(!a.uploadFile)return null;const{uploadFilePartEnd:E}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({uploadFilePartEnd:[{fileId:a.uploadFile.fileId,md5:d,order:N},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on UploadFilePartEndResponse":{__typename:!0,uploadFilePartEnd:!0}}]});return E?E.__typename==="ErrorAccessDenied"?E:{__typename:"SuccessResponse",data:E.uploadFilePartEnd}:null},w=async()=>{if(!a.uploadFile)return null;const{uploadFileEnd:d}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({uploadFileEnd:[{fileId:a.uploadFile.fileId},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UploadFileEndResponse":{__typename:!0,uploadFileEnd:!0}}]});return d?d.__typename==="ErrorAccessDenied"||d.__typename==="ErrorNotFound"?d:d.uploadFileEnd?{__typename:"SuccessResponse",data:d.uploadFileEnd}:null:null},y=new Array;for(const[d,N]of _utilsjs.enumerate.call(void 0, _utilsjs.chunks.call(void 0, u,Number(a.uploadFile.filePartSize))))y.push({order:d+1,data:N,md5:await _md5js.md5.call(void 0, N)});const _={},F=(d,N)=>{_[d]=N;const E=Object.values(_).reduce((b,B)=>b+B.loaded,0);e==null||e({percent:E/u.byteLength,total:u.byteLength,current:E})},S=async d=>{if(!a.uploadFile)return;const N=new FormData,E=y.find(b=>b.order===d.order);if(!!E){for(const[b,B]of Object.entries(d.fields))N.append(b,B);N.append("file",new Blob([E.data]),`${a.uploadFile.fileId}-${E.order}`),await _axios2.default.post(d.url,N,{onUploadProgress:b=>F(d.order,b),signal:o}),await g(E.md5,E.order)}};if(!a.uploadFile)return null;await _utilsjs.promiseAllLimit.call(void 0, 3,a.uploadFile.parts.map(d=>()=>S(d)));const D=await w();return D?D.__typename==="ErrorAccessDenied"||D.__typename==="ErrorNotFound"?D:{__typename:"SuccessResponse",data:D.data}:null}async uploadFileInCloud({file:r,name:t,nodeId:e,encryptProgress:o,uploadProgress:i,signal:s}){const c=await this.uploadFile({file:r,encryptProgress:o,uploadProgress:i,signal:s});if(!c)return null;if(c.__typename==="ErrorAccessDenied"||c.__typename==="ErrorLimit"||c.__typename==="ErrorNotFound")return c;const u=await this.saveInCloud({fileId:c.data,name:t,nodeId:e});return u?u.__typename==="ErrorAccessDenied"||u.__typename==="ErrorBasic"||u.__typename==="ErrorLimit"||u.__typename==="ErrorNotFound"||u.__typename==="ErrorNotExist"?u:{__typename:"SuccessResponse",data:u.data}:null}async deletedNodes(){const{deletedNodes:r}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"query")({deletedNodes:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeletedNodesResponse":{__typename:!0,deletedNodes:_selectorsjs.nodeSelector}}});if(!r)return null;if(r.__typename==="ErrorAccessDenied")return r;const t=new Array;for(const e of r.deletedNodes)t.push(await _nodejs.gqlNodeToExternal.call(void 0, e,_chunk5WPCTUWHcjs.d.call(void 0, this,l)));return{__typename:"SuccessResponse",data:t}}async sharedNodes(){const{sharedNodes:r}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"query")({sharedNodes:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on SharedNodesResponse":{__typename:!0,sharedNodes:_selectorsjs.nodeSelector}}});if(!r)return null;if(r.__typename==="ErrorAccessDenied")return r;const t=new Array;for(const e of r.sharedNodes)t.push(await _nodejs.gqlNodeToExternal.call(void 0, e,_chunk5WPCTUWHcjs.d.call(void 0, this,l)));return{__typename:"SuccessResponse",data:t}}async nodesSharedWithMe(r){const{nodesSharedWithMe:t}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"query")({nodesSharedWithMe:[{type:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on NodesSharedWithMeResponse":{__typename:!0,nodesSharedWithMe:_selectorsjs.nodeSelector}}]});if(!t)return null;if(t.__typename==="ErrorAccessDenied")return t;const e=new Array;for(const o of t.nodesSharedWithMe)e.push(await _nodejs.gqlNodeToExternal.call(void 0, o,_chunk5WPCTUWHcjs.d.call(void 0, this,l)));return{__typename:"SuccessResponse",data:e}}async deleteNodeSharing({nodeId:r,userId:t}){const{deleteNodeSharing:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({deleteNodeSharing:[{nodeId:r,userId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeSharingResponse":{__typename:!0,deleteNodeSharing:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:{__typename:"SuccessResponse",data:e.deleteNodeSharing}:null}async duplicateNode({nodeId:r,folderId:t,customName:e}){var s;let o=_cachejs.nodesCache.get(r);if(!o&&(await this.node({id:r}),o=_cachejs.nodesCache.get(r),!o))throw new Error(`Node (${r}) does not exists`);if(!((s=o.access)!=null&&s.nameKey))throw new Error(`Can't have access to node ${r}`);e=e?await _indexjs.encryptName.call(void 0, e,o.access.nameKey):null;const{duplicateNode:i}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({duplicateNode:[{nodeId:r,folderId:t,customName:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DuplicateNodeResponse":{__typename:!0,duplicateNode:!0}}]});return i?i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorNotFound"?i:{__typename:"SuccessResponse",data:i.duplicateNode}:null}async deleteNodeCloudTrash({ids:r}){var e;const{deleteNodeCloudTrash:t}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({deleteNodeCloudTrash:[{ids:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeCloudTrashResponse":{__typename:!0,deleteNodeCloudTrash:!0}}]});return t?t.__typename==="ErrorAccessDenied"?t:{__typename:"SuccessResponse",data:(e=t.deleteNodeCloudTrash)!=null?e:!1}:null}async createFolder({name:r,parentFolderId:t}){var m,h,A;const e=_filejs.secretstreamKeygen.call(void 0, ),o=await _indexjs.encryptName.call(void 0, r,_sodiumjs.sodium.to_hex(e)),i=_indexjs3.encryptCryptoBox.call(void 0, e,_chunk5WPCTUWHcjs.d.call(void 0, this,l).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,l).privateKey),{createFolder:s}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({createFolder:[{name:o,parentFolderId:t,key:_sodiumjs.sodium.to_hex(i)},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on CreateFolderResponse":{__typename:!0,createFolder:_selectorsjs.nodeFullSelector}}]});if(!s)return null;if(s.__typename==="ErrorAccessDenied"||s.__typename==="ErrorNotExist")return s;if(!s.createFolder)return null;const c=await _nodejs.gqlNodeToExternalNodeFull.call(void 0, s.createFolder,_chunk5WPCTUWHcjs.d.call(void 0, this,l)),u=(A=(h=(m=c.parent)==null?void 0:m.users)==null?void 0:h.filter(([a])=>a.publicKey!==_chunk5WPCTUWHcjs.d.call(void 0, this,l).publicKey))!=null?A:[];return u.length&&await Promise.all(u.map(([a,g])=>this.shareNode({nodeId:c.id,rights:g,userId:a.id}))),{__typename:"SuccessResponse",data:c}}async node({id:r,deleted:t}={}){const{node:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"query")({node:[{deleted:t,id:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on NodeResponse":{__typename:!0,node:_selectorsjs.nodeFullSelector}}]});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;if(!e.node)return null;const o=await _nodejs.gqlNodeToExternalNodeFull.call(void 0, e.node,_chunk5WPCTUWHcjs.d.call(void 0, this,l));return{__typename:"SuccessResponse",data:o}}async fileMetadata({id:r}){const{file:t}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"query")({file:[{id:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on FileQueryResponse":{__typename:!0,file:_selectorsjs.fileSelector}}]});if(!t)return null;if(t.__typename==="ErrorAccessDenied")return t;if(!t.file)return null;const e=_filejs3.gqlFileToExternal.call(void 0, t.file,_chunk5WPCTUWHcjs.d.call(void 0, this,l));return{__typename:"SuccessResponse",data:e}}async shareNode({nodeId:r,userId:t,rights:e}){var u;const o=await _chunk5WPCTUWHcjs.d.call(void 0, this,P).user({userId:t,withPublicKey:!0});if(!o||o.__typename==="ErrorNotFound")return o;const{shareNode:i}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({shareNode:[{nodeId:r,userId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareNodeResponse":{__typename:!0,nodes:!0}}]});if(!i)return null;if(i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorNotFound")return i;const s={nodes:[]};for(const m of i.nodes){const h=await this.perNode(m,o.data.publicKey);h&&s.nodes.push(h)}const{shareNodeFinish:c}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({shareNodeFinish:[{rights:e,userId:t,shareNodes:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareNodeFinishResponse":{__typename:!0,shareNodeFinish:!0}}]});return c?c.__typename==="ErrorAccessDenied"||c.__typename==="ErrorNotFound"?c:{__typename:"SuccessResponse",data:(u=c.shareNodeFinish)!=null?u:!1}:null}async updateNode({nodeId:r,name:t,isFavorite:e,deletedAt:o}){var u,m;let i=_cachejs.nodesCache.get(r);if(!i&&(await this.node({id:r}),i=_cachejs.nodesCache.get(r),!i))throw`Can't find Node ${r}`;if(!((u=i.access)!=null&&u.nameKey))throw new Error(`Can't have access to node ${r}`);t=t?(m=i.access)!=null&&m.nameKey?await _indexjs.encryptName.call(void 0, t,i.access.nameKey):t:null;const{updateNode:s}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({updateNode:[{nodeId:r,name:t,isFavorite:e,deletedAt:o},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on UpdateNodeResponse":{__typename:!0,updateNode:_selectorsjs.nodeFullSelector}}]});if(!s)return null;if(s.__typename==="ErrorAccessDenied"||s.__typename==="ErrorNotExist")return s;if(!s.updateNode)return null;const c=await _nodejs.gqlNodeToExternalNodeFull.call(void 0, s.updateNode,_chunk5WPCTUWHcjs.d.call(void 0, this,l));return{__typename:"SuccessResponse",data:c}}async fileContent({fileId:r,onDownloadProgress:t,progressDecrypt:e,signal:o}){const{fileContent:i}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"query",{scalars:{Bytes:{decode:a=>(console.log(a,typeof a),Uint8Array.from([1,2,3])),encode:a=>a.toString()}}})({fileContent:[{fileId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on FileContentResponse":{__typename:!0,file:{"...on FileContentCloud":{__typename:!0,parts:{contentUrl:!0,order:!0,md5:!0},key:!0,publicKey:!0,totalSize:!0,md5:!0,md5Encrypted:!0},"...on FileContentLite":{__typename:!0,content:!0,id:!0,key:!0,publicKey:!0,md5:!0,md5Encrypted:!0,totalSize:!0},"...on FileContentReceivedMail":{__typename:!0,maybeParts:{contentUrl:!0,order:!0,md5:!0},maybeContent:!0,key:!0,senderPublicKey:!0,totalSize:!0,md5:!0,md5Encrypted:!0},"...on FileContentSentMail":{__typename:!0,maybeParts:{contentUrl:!0,order:!0,md5:!0},maybeContent:!0,key:!0,totalSize:!0,md5:!0,md5Encrypted:!0}}}}]});if(!i)return null;if(i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorBasic")return i;const s=i.file;if(!s)return null;const c={},u=(a,g)=>{c[a]=g;const w=Object.values(c).reduce((_,F)=>_+F.transferredBytes,0),y=Number(s.totalSize);t==null||t({percent:w/y,totalBytes:y,transferredBytes:w})},m=async a=>{const g=new Array,w=async y=>{const _=new Uint8Array(await _ky2.default.get(y.contentUrl,{timeout:!1,onDownloadProgress:S=>u(y.order,S),signal:o}).arrayBuffer());if(await _md5js.md5.call(void 0, _)!==y.md5)throw new Error(`Invalid md5 for part ${y.order} of file ${r}`);g.push({data:_,order:y.order})};return await _utilsjs.promiseAllLimit.call(void 0, 3,a.map(y=>()=>w(y))),_utilsjs.concatenate.call(void 0, ...g.sort((y,_)=>y.order-_.order).map(y=>y.data))},h=async a=>{if(await _md5js.md5.call(void 0, a)!==s.md5Encrypted)throw new Error("Encrypted content does not match");const w=_indexjs3.decryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(s.key),s.__typename==="FileContentReceivedMail"?s.senderPublicKey:s.__typename==="FileContentCloud"?s.publicKey:_chunk5WPCTUWHcjs.d.call(void 0, this,l).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,l).privateKey),y=await _sodiumjs3.decrypt.call(void 0, w,a,e,o);if(await _md5js.md5.call(void 0, y)!==s.md5)throw new Error("Content does not match");return _indexjs5.uncompress.call(void 0, y)},A=s.__typename==="FileContentLite"?s.content:s.__typename==="FileContentCloud"?await m(s.parts):s.maybeContent?s.maybeContent:s.maybeParts?await m(s.maybeParts):null;return A?{__typename:"SuccessResponse",data:await h(A)}:null}async deleteFile({fileId:r,nodeId:t}){const{deleteFile:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({deleteFile:[{fileId:r,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on DeleteFileResponse":{__typename:!0,deleteFile:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorNotExist"?e:{__typename:"SuccessResponse",data:e.deleteFile}:null}async deleteNode({nodeId:r}){const{deleteNode:t}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({deleteNode:[{id:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeResponse":{__typename:!0,deleteNode:!0}}]});return t?t.__typename==="ErrorAccessDenied"?t:{__typename:"SuccessResponse",data:t.deleteNode}:null}async emptyTrash(){const{emptyCloudTrash:r}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({emptyCloudTrash:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on EmptyCloudTrashResponse":{__typename:!0,emptyCloudTrash:!0}}});return r?r.__typename==="ErrorAccessDenied"?r:r.emptyCloudTrash?{__typename:"SuccessResponse",data:r.emptyCloudTrash}:null:null}async recoverNode(r){var e;const{recoverNode:t}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({recoverNode:[{id:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on RecoverNodeResponse":{__typename:!0,recoverNode:!0}}]});return t?t.__typename==="ErrorAccessDenied"||t.__typename==="ErrorNotExist"?t:{__typename:"SuccessResponse",data:(e=t.recoverNode)!=null?e:!1}:null}async moveNodes({nodeIds:r,parentNodeId:t}){var o;const{moveNodes:e}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({moveNodes:[{nodeIds:r,parentNodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on MoveNodesResponse":{__typename:!0,moveNodes:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:{__typename:"SuccessResponse",data:(o=e.moveNodes)!=null?o:!1}:null}async saveInCloud({fileId:r,name:t,nodeId:e}){var a,g,w,y;if(e&&!_cachejs.nodesCache.has(e)&&(await this.node({id:e}),!_cachejs.nodesCache.has(e)))return{__typename:"ErrorBasic",message:`The node ${e} does not exists`};let o="";const i=_cachejs.filesCache.get(r);if(i)o=i.key;else{await this.fileMetadata({id:r});const _=(a=_cachejs.filesCache.get(r))!=null?a:null;if(_)o=_.key;else{const F=await _chunk5WPCTUWHcjs.d.call(void 0, this,P).mail.receivedMails();if(!F||F.__typename!=="SuccessResponse")return null;const S=F.data.find(N=>N.files.some(E=>E.id===r));if(!S)return{__typename:"ErrorBasic",message:`Can't find mail with the file ${r}`};const D=S.files.find(N=>N.id===r);if(!D)return{__typename:"ErrorBasic",message:`Can't find mail with the file ${r}`};const d=_indexjs3.decryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(D.key),S.sender.publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,l).privateKey);o=_sodiumjs.sodium.to_hex(d)}}if(o==="")return{__typename:"ErrorBasic",message:"Unexpected error 3"};o=_sodiumjs.sodium.to_hex(_indexjs3.encryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(o),_chunk5WPCTUWHcjs.d.call(void 0, this,l).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,l).privateKey));const s=_filejs.secretstreamKeygen.call(void 0, ),c=await _indexjs.encryptName.call(void 0, t,_sodiumjs.sodium.to_hex(s)),u=_sodiumjs.sodium.to_hex(_indexjs3.encryptCryptoBox.call(void 0, s,_chunk5WPCTUWHcjs.d.call(void 0, this,l).publicKey,_chunk5WPCTUWHcjs.d.call(void 0, this,l).privateKey)),{saveInCloud:m}=await _chunk5WPCTUWHcjs.d.call(void 0, this,p).call(this,"mutation")({saveInCloud:[{fileId:r,key:o,nodeId:e,filename:c,nameKey:u},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ErrorLimit":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on SaveInCloudResponse":{__typename:!0,saveInCloud:_selectorsjs.nodeFullSelector}}]});if(!m)return null;if(m.__typename==="ErrorAccessDenied"||m.__typename==="ErrorNotFound"||m.__typename==="ErrorLimit"||m.__typename==="ErrorBasic"||m.__typename==="ErrorNotExist")return m;if(!m.saveInCloud)return null;const h=await _nodejs.gqlNodeToExternalNodeFull.call(void 0, m.saveInCloud,_chunk5WPCTUWHcjs.d.call(void 0, this,l)),A=(g=h.parent)==null?void 0:g.users.find(([_])=>_.publicKey===_chunk5WPCTUWHcjs.d.call(void 0, this,l).publicKey);if(A&&["admin","write"].includes(A[1])){const _=(y=(w=h.parent)==null?void 0:w.users.filter(([F])=>F.publicKey!==_chunk5WPCTUWHcjs.d.call(void 0, this,l).publicKey))!=null?y:[];await Promise.all(_.map(([F,S])=>this.shareNode({nodeId:h.id,rights:S,userId:F.id})))}return{__typename:"SuccessResponse",data:h}}}P=new WeakMap,l=new WeakMap,p=new WeakMap;exports.SecrecyCloudClient = Ne;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkXDPEU3HVcjs = require('../chunk-XDPEU3HV.cjs');var K,m,_;var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);var _ky = require('ky'); var _ky2 = _interopRequireDefault(_ky);var _indexjs = require('../index.js');var _cachejs = require('../cache.js');var _filejs = require('../crypto/file.js');var _indexjs3 = require('../crypto/index.js');var _indexjs5 = require('../minify/index.js');var _sodiumjs = require('../sodium.js');var _utilsjs = require('../utils/utils.js');var _md5js = require('../worker/md5.js');var _sodiumjs3 = require('../worker/sodium.js');var _filejs3 = require('./convert/file.js');var _nodejs = require('./convert/node.js');var _selectorsjs = require('./types/selectors.js');class Fe{constructor(e,t,r){_chunkXDPEU3HVcjs.e.call(void 0, this,K,void 0);_chunkXDPEU3HVcjs.e.call(void 0, this,m,void 0);_chunkXDPEU3HVcjs.e.call(void 0, this,_,void 0);_chunkXDPEU3HVcjs.c.call(void 0, this,"perNode",(e,t)=>_chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){var c;let r=_cachejs.nodesCache.get(e);if(!r&&(yield this.node({id:e}),r=_cachejs.nodesCache.get(e),!r))return null;const s=(c=r.access)==null?void 0:c.nameKey;return s?{id:r.id,nameKey:_sodiumjs.sodium.to_hex(_indexjs3.encryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(s),t,_chunkXDPEU3HVcjs.d.call(void 0, this,m).privateKey)),files:"history"in r?r.history.map(i=>({id:i.id,key:_sodiumjs.sodium.to_hex(_indexjs3.encryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(i.key),t,_chunkXDPEU3HVcjs.d.call(void 0, this,m).privateKey))})):[]}:null}));_chunkXDPEU3HVcjs.f.call(void 0, this,K,e),_chunkXDPEU3HVcjs.f.call(void 0, this,m,t),_chunkXDPEU3HVcjs.f.call(void 0, this,_,r)}addFileToHistory(r){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({fileId:e,nodeId:t}){const{addFileToHistory:s}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({addFileToHistory:[{fileId:e,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on AddFileToHistoryResponse":{__typename:!0,addFileToHistory:_selectorsjs.nodeFullSelector}}]});if(!s)return null;if(s.__typename==="ErrorAccessDenied"||s.__typename==="ErrorNotExist")return s;const c=yield _nodejs.gqlNodeFullToInternalFull.call(void 0, s.addFileToHistory,_chunkXDPEU3HVcjs.d.call(void 0, this,m)),i=c.history.find(l=>l.id===e);if(i){const l=c.users.filter(([p])=>p.publicKey!==_chunkXDPEU3HVcjs.d.call(void 0, this,m).publicKey),u={fileId:i.id,users:l.map(([p])=>({id:p.id,key:_sodiumjs.sodium.to_hex(_indexjs3.encryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(i.key),_chunkXDPEU3HVcjs.d.call(void 0, this,m).publicKey,_chunkXDPEU3HVcjs.d.call(void 0, this,m).privateKey))}))};yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({shareFileInHistory:[{input:u,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareFileInHistoryResponse":{__typename:!0,shareFileInHistory:!0}}]})}const o=_nodejs.internalNodeToNode.call(void 0, c);return{__typename:"SuccessResponse",data:o}})}uploadFile(c){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({file:e,encryptProgress:t,uploadProgress:r,signal:s}){const i=_filejs.secretstreamKeygen.call(void 0, ),o=e instanceof File?new Uint8Array(yield e.arrayBuffer()):e,l=_indexjs5.compress.call(void 0, o),{data:u,md5:p,md5Encrypted:g}=yield _sodiumjs3.encrypt.call(void 0, i,l,t,s),D=_indexjs3.encryptCryptoBox.call(void 0, i,_chunkXDPEU3HVcjs.d.call(void 0, this,m).publicKey,_chunkXDPEU3HVcjs.d.call(void 0, this,m).privateKey),{uploadFile:a}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation",{scalars:{Json:{encode:d=>JSON.stringify(d),decode:d=>JSON.parse(d)},DateTime:{decode:d=>new Date(d),encode:d=>d.toISOString()},BigInt:{decode:d=>BigInt(d),encode:d=>d.toString()}}})({uploadFile:[{fileSize:u.byteLength,fileSizeBefore:o.byteLength,fileKey:_sodiumjs.sodium.to_hex(D),md5Encrypted:g,md5:p},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorLimit":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UploadFileResponse":{__typename:!0,uploadFile:{fileId:!0,filePartSize:!0,parts:{fields:!0,order:!0,url:!0}}}}]});if(!a)return null;if(a.__typename==="ErrorAccessDenied"||a.__typename==="ErrorLimit"||a.__typename==="ErrorNotFound")return a;if(!a.uploadFile)return null;if(r==null||r({total:u.byteLength,current:0,percent:0}),a.uploadFile.parts.length===0)return r==null||r({total:u.byteLength,current:u.byteLength,percent:1}),{__typename:"SuccessResponse",data:a.uploadFile.fileId};const w=(d,F)=>_chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){if(!a.uploadFile)return null;const{uploadFilePartEnd:N}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({uploadFilePartEnd:[{fileId:a.uploadFile.fileId,md5:d,order:F},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on UploadFilePartEndResponse":{__typename:!0,uploadFilePartEnd:!0}}]});return N?N.__typename==="ErrorAccessDenied"?N:{__typename:"SuccessResponse",data:N.uploadFilePartEnd}:null}),S=()=>_chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){if(!a.uploadFile)return null;const{uploadFileEnd:d}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({uploadFileEnd:[{fileId:a.uploadFile.fileId},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UploadFileEndResponse":{__typename:!0,uploadFileEnd:!0}}]});return d?d.__typename==="ErrorAccessDenied"||d.__typename==="ErrorNotFound"?d:d.uploadFileEnd?{__typename:"SuccessResponse",data:d.uploadFileEnd}:null:null}),f=new Array;for(const[d,F]of _utilsjs.enumerate.call(void 0, _utilsjs.chunks.call(void 0, u,Number(a.uploadFile.filePartSize))))f.push({order:d+1,data:F,md5:yield _md5js.md5.call(void 0, F)});const E={},A=(d,F)=>{E[d]=F;const N=Object.values(E).reduce((P,L)=>P+L.loaded,0);r==null||r({percent:N/u.byteLength,total:u.byteLength,current:N})},R=d=>_chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){if(!a.uploadFile)return;const F=new FormData,N=f.find(P=>P.order===d.order);if(!!N){for(const[P,L]of Object.entries(d.fields))F.append(P,L);F.append("file",new Blob([N.data]),`${a.uploadFile.fileId}-${N.order}`),yield _axios2.default.post(d.url,F,{onUploadProgress:P=>A(d.order,P),signal:s}),yield w(N.md5,N.order)}});if(!a.uploadFile)return null;yield _utilsjs.promiseAllLimit.call(void 0, 3,a.uploadFile.parts.map(d=>()=>R(d)));const b=yield S();return b?b.__typename==="ErrorAccessDenied"||b.__typename==="ErrorNotFound"?b:{__typename:"SuccessResponse",data:b.data}:null})}uploadFileInCloud(o){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({file:e,name:t,nodeId:r,encryptProgress:s,uploadProgress:c,signal:i}){const l=yield this.uploadFile({file:e,encryptProgress:s,uploadProgress:c,signal:i});if(!l)return null;if(l.__typename==="ErrorAccessDenied"||l.__typename==="ErrorLimit"||l.__typename==="ErrorNotFound")return l;const u=yield this.saveInCloud({fileId:l.data,name:t,nodeId:r});return u?u.__typename==="ErrorAccessDenied"||u.__typename==="ErrorBasic"||u.__typename==="ErrorLimit"||u.__typename==="ErrorNotFound"||u.__typename==="ErrorNotExist"?u:{__typename:"SuccessResponse",data:u.data}:null})}deletedNodes(){return _chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){const{deletedNodes:e}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"query")({deletedNodes:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeletedNodesResponse":{__typename:!0,deletedNodes:_selectorsjs.nodeSelector}}});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;const t=new Array;for(const r of e.deletedNodes)t.push(yield _nodejs.gqlNodeToExternal.call(void 0, r,_chunkXDPEU3HVcjs.d.call(void 0, this,m)));return{__typename:"SuccessResponse",data:t}})}sharedNodes(){return _chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){const{sharedNodes:e}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"query")({sharedNodes:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on SharedNodesResponse":{__typename:!0,sharedNodes:_selectorsjs.nodeSelector}}});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;const t=new Array;for(const r of e.sharedNodes)t.push(yield _nodejs.gqlNodeToExternal.call(void 0, r,_chunkXDPEU3HVcjs.d.call(void 0, this,m)));return{__typename:"SuccessResponse",data:t}})}nodesSharedWithMe(e){return _chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){const{nodesSharedWithMe:t}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"query")({nodesSharedWithMe:[{type:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on NodesSharedWithMeResponse":{__typename:!0,nodesSharedWithMe:_selectorsjs.nodeSelector}}]});if(!t)return null;if(t.__typename==="ErrorAccessDenied")return t;const r=new Array;for(const s of t.nodesSharedWithMe)r.push(yield _nodejs.gqlNodeToExternal.call(void 0, s,_chunkXDPEU3HVcjs.d.call(void 0, this,m)));return{__typename:"SuccessResponse",data:r}})}deleteNodeSharing(r){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({nodeId:e,userId:t}){const{deleteNodeSharing:s}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({deleteNodeSharing:[{nodeId:e,userId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeSharingResponse":{__typename:!0,deleteNodeSharing:!0}}]});return s?s.__typename==="ErrorAccessDenied"?s:{__typename:"SuccessResponse",data:s.deleteNodeSharing}:null})}duplicateNode(s){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({nodeId:e,folderId:t,customName:r}){var o;let c=_cachejs.nodesCache.get(e);if(!c&&(yield this.node({id:e}),c=_cachejs.nodesCache.get(e),!c))throw new Error(`Node (${e}) does not exists`);if(!((o=c.access)!=null&&o.nameKey))throw new Error(`Can't have access to node ${e}`);r=r?yield _indexjs.encryptName.call(void 0, r,c.access.nameKey):null;const{duplicateNode:i}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({duplicateNode:[{nodeId:e,folderId:t,customName:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DuplicateNodeResponse":{__typename:!0,duplicateNode:!0}}]});return i?i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorNotFound"?i:{__typename:"SuccessResponse",data:i.duplicateNode}:null})}deleteNodeCloudTrash(t){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({ids:e}){var s;const{deleteNodeCloudTrash:r}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({deleteNodeCloudTrash:[{ids:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeCloudTrashResponse":{__typename:!0,deleteNodeCloudTrash:!0}}]});return r?r.__typename==="ErrorAccessDenied"?r:{__typename:"SuccessResponse",data:(s=r.deleteNodeCloudTrash)!=null?s:!1}:null})}createFolder(r){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({name:e,parentFolderId:t}){var p,g,D;const s=_filejs.secretstreamKeygen.call(void 0, ),c=yield _indexjs.encryptName.call(void 0, e,_sodiumjs.sodium.to_hex(s)),i=_indexjs3.encryptCryptoBox.call(void 0, s,_chunkXDPEU3HVcjs.d.call(void 0, this,m).publicKey,_chunkXDPEU3HVcjs.d.call(void 0, this,m).privateKey),{createFolder:o}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({createFolder:[{name:c,parentFolderId:t,key:_sodiumjs.sodium.to_hex(i)},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on CreateFolderResponse":{__typename:!0,createFolder:_selectorsjs.nodeFullSelector}}]});if(!o)return null;if(o.__typename==="ErrorAccessDenied"||o.__typename==="ErrorNotExist")return o;if(!o.createFolder)return null;const l=yield _nodejs.gqlNodeToExternalNodeFull.call(void 0, o.createFolder,_chunkXDPEU3HVcjs.d.call(void 0, this,m)),u=(D=(g=(p=l.parent)==null?void 0:p.users)==null?void 0:g.filter(([a])=>a.publicKey!==_chunkXDPEU3HVcjs.d.call(void 0, this,m).publicKey))!=null?D:[];return u.length&&(yield Promise.all(u.map(([a,w])=>this.shareNode({nodeId:l.id,rights:w,userId:a.id})))),{__typename:"SuccessResponse",data:l}})}node(){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({id:e,deleted:t}={}){const{node:r}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"query")({node:[{deleted:t,id:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on NodeResponse":{__typename:!0,node:_selectorsjs.nodeFullSelector}}]});if(!r)return null;if(r.__typename==="ErrorAccessDenied")return r;if(!r.node)return null;const s=yield _nodejs.gqlNodeToExternalNodeFull.call(void 0, r.node,_chunkXDPEU3HVcjs.d.call(void 0, this,m));return{__typename:"SuccessResponse",data:s}})}fileMetadata(t){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({id:e}){const{file:r}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"query")({file:[{id:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on FileQueryResponse":{__typename:!0,file:_selectorsjs.fileSelector}}]});if(!r)return null;if(r.__typename==="ErrorAccessDenied")return r;if(!r.file)return null;const s=_filejs3.gqlFileToExternal.call(void 0, r.file,_chunkXDPEU3HVcjs.d.call(void 0, this,m));return{__typename:"SuccessResponse",data:s}})}shareNode(s){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({nodeId:e,userId:t,rights:r}){var u;const c=yield _chunkXDPEU3HVcjs.d.call(void 0, this,K).user({userId:t,withPublicKey:!0});if(!c||c.__typename==="ErrorNotFound")return c;const{shareNode:i}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({shareNode:[{nodeId:e,userId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareNodeResponse":{__typename:!0,nodes:!0}}]});if(!i)return null;if(i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorNotFound")return i;const o={nodes:[]};for(const p of i.nodes){const g=yield this.perNode(p,c.data.publicKey);g&&o.nodes.push(g)}const{shareNodeFinish:l}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({shareNodeFinish:[{rights:r,userId:t,shareNodes:o},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareNodeFinishResponse":{__typename:!0,shareNodeFinish:!0}}]});return l?l.__typename==="ErrorAccessDenied"||l.__typename==="ErrorNotFound"?l:{__typename:"SuccessResponse",data:(u=l.shareNodeFinish)!=null?u:!1}:null})}updateNode(c){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({nodeId:e,name:t,isFavorite:r,deletedAt:s}){var u,p;let i=_cachejs.nodesCache.get(e);if(!i&&(yield this.node({id:e}),i=_cachejs.nodesCache.get(e),!i))throw`Can't find Node ${e}`;if(!((u=i.access)!=null&&u.nameKey))throw new Error(`Can't have access to node ${e}`);t=t?(p=i.access)!=null&&p.nameKey?yield _indexjs.encryptName.call(void 0, t,i.access.nameKey):t:null;const{updateNode:o}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({updateNode:[{nodeId:e,name:t,isFavorite:r,deletedAt:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on UpdateNodeResponse":{__typename:!0,updateNode:_selectorsjs.nodeFullSelector}}]});if(!o)return null;if(o.__typename==="ErrorAccessDenied"||o.__typename==="ErrorNotExist")return o;if(!o.updateNode)return null;const l=yield _nodejs.gqlNodeToExternalNodeFull.call(void 0, o.updateNode,_chunkXDPEU3HVcjs.d.call(void 0, this,m));return{__typename:"SuccessResponse",data:l}})}fileContent(c){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({fileId:e,onDownloadProgress:t,progressDecrypt:r,signal:s}){const{fileContent:i}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"query",{scalars:{Bytes:{decode:a=>(console.log(a,typeof a),Uint8Array.from([1,2,3])),encode:a=>a.toString()}}})({fileContent:[{fileId:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on FileContentResponse":{__typename:!0,file:{"...on FileContentCloud":{__typename:!0,parts:{contentUrl:!0,order:!0,md5:!0},key:!0,publicKey:!0,totalSize:!0,md5:!0,md5Encrypted:!0},"...on FileContentLite":{__typename:!0,content:!0,id:!0,key:!0,publicKey:!0,md5:!0,md5Encrypted:!0,totalSize:!0},"...on FileContentReceivedMail":{__typename:!0,maybeParts:{contentUrl:!0,order:!0,md5:!0},maybeContent:!0,key:!0,senderPublicKey:!0,totalSize:!0,md5:!0,md5Encrypted:!0},"...on FileContentSentMail":{__typename:!0,maybeParts:{contentUrl:!0,order:!0,md5:!0},maybeContent:!0,key:!0,totalSize:!0,md5:!0,md5Encrypted:!0}}}}]});if(!i)return null;if(i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorBasic")return i;const o=i.file;if(!o)return null;const l={},u=(a,w)=>{l[a]=w;const S=Object.values(l).reduce((E,A)=>E+A.transferredBytes,0),f=Number(o.totalSize);t==null||t({percent:S/f,totalBytes:f,transferredBytes:S})},p=a=>_chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){const w=new Array,S=f=>_chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){const E=new Uint8Array(yield _ky2.default.get(f.contentUrl,{timeout:!1,onDownloadProgress:R=>u(f.order,R),signal:s}).arrayBuffer());if((yield _md5js.md5.call(void 0, E))!==f.md5)throw new Error(`Invalid md5 for part ${f.order} of file ${e}`);w.push({data:E,order:f.order})});return yield _utilsjs.promiseAllLimit.call(void 0, 3,a.map(f=>()=>S(f))),_utilsjs.concatenate.call(void 0, ...w.sort((f,E)=>f.order-E.order).map(f=>f.data))}),g=a=>_chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){if((yield _md5js.md5.call(void 0, a))!==o.md5Encrypted)throw new Error("Encrypted content does not match");const S=_indexjs3.decryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(o.key),o.__typename==="FileContentReceivedMail"?o.senderPublicKey:o.__typename==="FileContentCloud"?o.publicKey:_chunkXDPEU3HVcjs.d.call(void 0, this,m).publicKey,_chunkXDPEU3HVcjs.d.call(void 0, this,m).privateKey),f=yield _sodiumjs3.decrypt.call(void 0, S,a,r,s);if((yield _md5js.md5.call(void 0, f))!==o.md5)throw new Error("Content does not match");return _indexjs5.uncompress.call(void 0, f)}),D=o.__typename==="FileContentLite"?o.content:o.__typename==="FileContentCloud"?yield p(o.parts):o.maybeContent?o.maybeContent:o.maybeParts?yield p(o.maybeParts):null;return D?{__typename:"SuccessResponse",data:yield g(D)}:null})}deleteFile(r){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({fileId:e,nodeId:t}){const{deleteFile:s}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({deleteFile:[{fileId:e,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on DeleteFileResponse":{__typename:!0,deleteFile:!0}}]});return s?s.__typename==="ErrorAccessDenied"||s.__typename==="ErrorNotExist"?s:{__typename:"SuccessResponse",data:s.deleteFile}:null})}deleteNode(t){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({nodeId:e}){const{deleteNode:r}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({deleteNode:[{id:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeResponse":{__typename:!0,deleteNode:!0}}]});return r?r.__typename==="ErrorAccessDenied"?r:{__typename:"SuccessResponse",data:r.deleteNode}:null})}emptyTrash(){return _chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){const{emptyCloudTrash:e}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({emptyCloudTrash:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on EmptyCloudTrashResponse":{__typename:!0,emptyCloudTrash:!0}}});return e?e.__typename==="ErrorAccessDenied"?e:e.emptyCloudTrash?{__typename:"SuccessResponse",data:e.emptyCloudTrash}:null:null})}recoverNode(e){return _chunkXDPEU3HVcjs.h.call(void 0, this,null,function*(){var r;const{recoverNode:t}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({recoverNode:[{id:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on RecoverNodeResponse":{__typename:!0,recoverNode:!0}}]});return t?t.__typename==="ErrorAccessDenied"||t.__typename==="ErrorNotExist"?t:{__typename:"SuccessResponse",data:(r=t.recoverNode)!=null?r:!1}:null})}moveNodes(r){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({nodeIds:e,parentNodeId:t}){var c;const{moveNodes:s}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({moveNodes:[{nodeIds:e,parentNodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on MoveNodesResponse":{__typename:!0,moveNodes:!0}}]});return s?s.__typename==="ErrorAccessDenied"?s:{__typename:"SuccessResponse",data:(c=s.moveNodes)!=null?c:!1}:null})}saveInCloud(s){return _chunkXDPEU3HVcjs.h.call(void 0, this,arguments,function*({fileId:e,name:t,nodeId:r}){var a,w,S,f;if(r&&!_cachejs.nodesCache.has(r)&&(yield this.node({id:r}),!_cachejs.nodesCache.has(r)))return{__typename:"ErrorBasic",message:`The node ${r} does not exists`};let c="";const i=_cachejs.filesCache.get(e);if(i)c=i.key;else{yield this.fileMetadata({id:e});const E=(a=_cachejs.filesCache.get(e))!=null?a:null;if(E)c=E.key;else{const A=yield _chunkXDPEU3HVcjs.d.call(void 0, this,K).mail.receivedMails();if(!A||A.__typename!=="SuccessResponse")return null;const R=A.data.find(F=>F.files.some(N=>N.id===e));if(!R)return{__typename:"ErrorBasic",message:`Can't find mail with the file ${e}`};const b=R.files.find(F=>F.id===e);if(!b)return{__typename:"ErrorBasic",message:`Can't find mail with the file ${e}`};const d=_indexjs3.decryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(b.key),R.sender.publicKey,_chunkXDPEU3HVcjs.d.call(void 0, this,m).privateKey);c=_sodiumjs.sodium.to_hex(d)}}if(c==="")return{__typename:"ErrorBasic",message:"Unexpected error 3"};c=_sodiumjs.sodium.to_hex(_indexjs3.encryptCryptoBox.call(void 0, _sodiumjs.sodium.from_hex(c),_chunkXDPEU3HVcjs.d.call(void 0, this,m).publicKey,_chunkXDPEU3HVcjs.d.call(void 0, this,m).privateKey));const o=_filejs.secretstreamKeygen.call(void 0, ),l=yield _indexjs.encryptName.call(void 0, t,_sodiumjs.sodium.to_hex(o)),u=_sodiumjs.sodium.to_hex(_indexjs3.encryptCryptoBox.call(void 0, o,_chunkXDPEU3HVcjs.d.call(void 0, this,m).publicKey,_chunkXDPEU3HVcjs.d.call(void 0, this,m).privateKey)),{saveInCloud:p}=yield _chunkXDPEU3HVcjs.d.call(void 0, this,_).call(this,"mutation")({saveInCloud:[{fileId:e,key:c,nodeId:r,filename:l,nameKey:u},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ErrorLimit":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on SaveInCloudResponse":{__typename:!0,saveInCloud:_selectorsjs.nodeFullSelector}}]});if(!p)return null;if(p.__typename==="ErrorAccessDenied"||p.__typename==="ErrorNotFound"||p.__typename==="ErrorLimit"||p.__typename==="ErrorBasic"||p.__typename==="ErrorNotExist")return p;if(!p.saveInCloud)return null;const g=yield _nodejs.gqlNodeToExternalNodeFull.call(void 0, p.saveInCloud,_chunkXDPEU3HVcjs.d.call(void 0, this,m)),D=(w=g.parent)==null?void 0:w.users.find(([E])=>E.publicKey===_chunkXDPEU3HVcjs.d.call(void 0, this,m).publicKey);if(D&&["admin","write"].includes(D[1])){const E=(f=(S=g.parent)==null?void 0:S.users.filter(([A])=>A.publicKey!==_chunkXDPEU3HVcjs.d.call(void 0, this,m).publicKey))!=null?f:[];yield Promise.all(E.map(([A,R])=>this.shareNode({nodeId:g.id,rights:R,userId:A.id})))}return{__typename:"SuccessResponse",data:g}})}}K=new WeakMap,m=new WeakMap,_=new WeakMap;exports.SecrecyCloudClient = Fe;
2
2
  //# sourceMappingURL=SecrecyCloudClient.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/SecrecyCloudClient.ts"],"names":["_client","_keys","_thunder","axios","ky","encryptName","nodesCache","filesCache","secretstreamKeygen","decryptCryptoBox","encryptCryptoBox","compress","uncompress","sodium","enumerate","chunks","promiseAllLimit","concatenate","md5","decrypt","encrypt","gqlFileToExternal","gqlNodeFullToInternalFull","gqlNodeToExternal","gqlNodeToExternalNodeFull","internalNodeToNode","fileSelector","nodeFullSelector","nodeSelector","SecrecyCloudClient","client","keys","thunder","__privateAdd","__publicField","nodeId","publicKey","_a","node","nameKey","__privateGet","f","__privateSet","fileId","addFileToHistory","file","users","u","input","result","encryptProgress","uploadProgress","signal","fileKey","fileBuffer","compressed","encryptedFile","md5File","md5Encrypted","encryptedFileKey","uploadFile","e","uploadPartEnded","order","uploadFilePartEnd","uploadEnded","uploadFileEnd","chunkParts","index","chunk","progressParts","onProgress","part","progressEvent","current","prv","cur","byPart","formData","p","key","value","name","deletedNodes","nodes","sharedNodes","folder","type","nodesSharedWithMe","userId","deleteNodeSharing","folderId","customName","duplicateNode","ids","deleteNodeCloudTrash","parentFolderId","_b","_c","encryptedName","encryptedKey","createFolder","rights","id","deleted","user","shareNode","shareNodes","shareNodeFinish","isFavorite","deletedAt","updateNode","onDownloadProgress","progressDecrypt","fileContent","transferredBytes","totalBytes","encryptedContentFromParts","fileParts","parts","buf","pr","a","b","finalize","encryptedContent","src","deleteFile","deleteNode","emptyCloudTrash","recoverNode","nodeIds","parentNodeId","moveNodes","_d","receivedMails","mail","m","fileMail","encryptedNameKey","saveInCloud","me","others"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { AxiosProgressEvent } from \"axios\";\nimport axios from \"axios\";\nimport ky from \"ky\";\nimport type {\n DownloadProgress,\n ProgressCallback,\n SecrecyClient,\n SuccessResponse\n} from \"../index.js\";\nimport { encryptName } from \"../index.js\";\nimport { nodesCache, filesCache } from \"../cache.js\";\nimport { secretstreamKeygen } from \"../crypto/file.js\";\nimport type { KeyPair } from \"../crypto/index.js\";\nimport { decryptCryptoBox } from \"../crypto/index.js\";\nimport { encryptCryptoBox } from \"../crypto/index.js\";\nimport type {\n ErrorAccessDenied,\n ErrorBasic,\n ErrorLimit,\n ErrorNotExist,\n ErrorNotFound\n} from \"../error.js\";\nimport { compress, uncompress } from \"../minify/index.js\";\nimport { sodium } from \"../sodium.js\";\nimport {\n enumerate,\n chunks,\n promiseAllLimit,\n concatenate\n} from \"../utils/utils.js\";\nimport { md5 } from \"../worker/md5.js\";\nimport { decrypt, encrypt } from \"../worker/sodium.js\";\nimport type { NodeType, Rights, Thunder } from \"../zeus/index.js\";\nimport { gqlFileToExternal } from \"./convert/file.js\";\nimport {\n gqlNodeFullToInternalFull,\n gqlNodeToExternal,\n gqlNodeToExternalNodeFull,\n internalNodeToNode\n} from \"./convert/node.js\";\nimport type {\n FileContentPart,\n FileMetadata,\n FilePartResponse,\n NameKeyInput,\n Node,\n NodeFull,\n ShareFileInHistoryInput,\n ShareNodesInput\n} from \"./types/index.js\";\nimport {\n fileSelector,\n nodeFullSelector,\n nodeSelector\n} from \"./types/selectors.js\";\n// import { md5 } from \"../worker/index.js\";\n// import { firstValueFrom, of } from \"rxjs\";\n\nexport class SecrecyCloudClient {\n #client: SecrecyClient;\n\n #keys: KeyPair;\n\n #thunder: ReturnType<typeof Thunder>;\n\n constructor(\n client: SecrecyClient,\n keys: KeyPair,\n thunder: ReturnType<typeof Thunder>\n ) {\n this.#client = client;\n this.#keys = keys;\n this.#thunder = thunder;\n }\n\n async addFileToHistory({\n fileId,\n nodeId\n }: {\n fileId: string;\n nodeId: string;\n }): Promise<\n SuccessResponse<Node> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { addFileToHistory } = await this.#thunder(\"mutation\")({\n addFileToHistory: [\n {\n fileId,\n nodeId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on AddFileToHistoryResponse\": {\n __typename: true,\n addFileToHistory: nodeFullSelector\n }\n }\n ]\n });\n\n if (!addFileToHistory) {\n return null;\n }\n\n if (addFileToHistory.__typename === \"ErrorAccessDenied\") {\n return addFileToHistory;\n }\n\n if (addFileToHistory.__typename === \"ErrorNotExist\") {\n return addFileToHistory;\n }\n\n const node = await gqlNodeFullToInternalFull(\n addFileToHistory.addFileToHistory,\n this.#keys\n );\n const file = node.history.find(f => f.id === fileId);\n if (file) {\n const users = node.users.filter(\n ([u]) => u.publicKey !== this.#keys.publicKey\n );\n const input: ShareFileInHistoryInput = {\n fileId: file.id,\n users: users.map(([u]) => ({\n id: u.id,\n key: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(file.key),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n )\n }))\n };\n\n await this.#thunder(\"mutation\")({\n shareFileInHistory: [\n { input, nodeId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareFileInHistoryResponse\": {\n __typename: true,\n shareFileInHistory: true\n }\n }\n ]\n });\n }\n const result = internalNodeToNode(node);\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async uploadFile({\n file,\n encryptProgress,\n uploadProgress,\n signal\n }: {\n file: globalThis.File | Uint8Array;\n encryptProgress?: ProgressCallback;\n uploadProgress?: ProgressCallback;\n signal?: AbortSignal;\n }): Promise<\n | SuccessResponse<string>\n | ErrorAccessDenied\n | ErrorLimit\n | ErrorNotFound\n | null\n > {\n const fileKey = secretstreamKeygen();\n const fileBuffer =\n file instanceof File ? new Uint8Array(await file.arrayBuffer()) : file;\n const compressed = compress(fileBuffer);\n\n const {\n data: encryptedFile,\n md5: md5File,\n md5Encrypted\n } = await encrypt(fileKey, compressed, encryptProgress, signal);\n\n const encryptedFileKey = encryptCryptoBox(\n fileKey,\n this.#keys.publicKey,\n this.#keys.privateKey\n );\n\n const { uploadFile } = await this.#thunder(\"mutation\", {\n scalars: {\n Json: {\n encode: (e: unknown) => JSON.stringify(e),\n decode: (e: unknown) => JSON.parse(e as string)\n },\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n },\n BigInt: {\n decode: (e: unknown) => BigInt(e as string),\n encode: (e: unknown) => (e as bigint).toString()\n }\n }\n })({\n uploadFile: [\n {\n fileSize: encryptedFile.byteLength,\n fileSizeBefore: fileBuffer.byteLength,\n fileKey: sodium.to_hex(encryptedFileKey),\n md5Encrypted,\n md5: md5File\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorLimit\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UploadFileResponse\": {\n __typename: true,\n uploadFile: {\n fileId: true,\n filePartSize: true,\n parts: {\n fields: true,\n order: true,\n url: true\n }\n }\n }\n }\n ]\n });\n\n if (!uploadFile) {\n return null;\n }\n\n if (uploadFile.__typename === \"ErrorAccessDenied\") {\n return uploadFile;\n }\n\n if (uploadFile.__typename === \"ErrorLimit\") {\n return uploadFile;\n }\n\n if (uploadFile.__typename === \"ErrorNotFound\") {\n return uploadFile;\n }\n\n if (!uploadFile.uploadFile) {\n return null;\n }\n\n uploadProgress?.({\n total: encryptedFile.byteLength,\n current: 0,\n percent: 0\n });\n\n if (uploadFile.uploadFile.parts.length === 0) {\n uploadProgress?.({\n total: encryptedFile.byteLength,\n current: encryptedFile.byteLength,\n percent: 1\n });\n\n return {\n __typename: \"SuccessResponse\",\n data: uploadFile.uploadFile.fileId\n };\n }\n\n const uploadPartEnded = async (\n md5: string,\n order: number\n ): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> => {\n if (!uploadFile.uploadFile) {\n return null;\n }\n const { uploadFilePartEnd } = await this.#thunder(\"mutation\")({\n uploadFilePartEnd: [\n {\n fileId: uploadFile.uploadFile.fileId,\n md5,\n order\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on UploadFilePartEndResponse\": {\n __typename: true,\n uploadFilePartEnd: true\n }\n }\n ]\n });\n\n if (!uploadFilePartEnd) {\n return null;\n }\n\n if (uploadFilePartEnd.__typename === \"ErrorAccessDenied\") {\n return uploadFilePartEnd;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: uploadFilePartEnd.uploadFilePartEnd\n };\n };\n\n const uploadEnded = async (): Promise<\n SuccessResponse<string> | ErrorAccessDenied | ErrorNotFound | null\n > => {\n if (!uploadFile.uploadFile) {\n return null;\n }\n const { uploadFileEnd } = await this.#thunder(\"mutation\")({\n uploadFileEnd: [\n {\n fileId: uploadFile.uploadFile.fileId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UploadFileEndResponse\": {\n __typename: true,\n uploadFileEnd: true\n }\n }\n ]\n });\n\n if (!uploadFileEnd) {\n return null;\n }\n\n if (uploadFileEnd.__typename === \"ErrorAccessDenied\") {\n return uploadFileEnd;\n }\n\n if (uploadFileEnd.__typename === \"ErrorNotFound\") {\n return uploadFileEnd;\n }\n\n if (!uploadFileEnd.uploadFileEnd) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: uploadFileEnd.uploadFileEnd\n };\n };\n\n const chunkParts = new Array<{\n order: number;\n data: Uint8Array;\n md5: string;\n }>();\n\n for (const [index, chunk] of enumerate(\n chunks(encryptedFile, Number(uploadFile.uploadFile.filePartSize))\n )) {\n chunkParts.push({\n order: index + 1,\n data: chunk,\n md5: await md5(chunk)\n });\n }\n\n const progressParts: Record<number, AxiosProgressEvent> = {};\n const onProgress = (\n part: number,\n progressEvent: AxiosProgressEvent\n ): void => {\n progressParts[part] = progressEvent;\n const current = Object.values(progressParts).reduce(\n (prv, cur) => prv + cur.loaded,\n 0\n );\n uploadProgress?.({\n percent: current / encryptedFile.byteLength,\n total: encryptedFile.byteLength,\n current\n });\n };\n\n const byPart = async (part: FilePartResponse): Promise<void> => {\n if (!uploadFile.uploadFile) {\n return;\n }\n const formData = new FormData();\n const chunk = chunkParts.find(p => p.order === part.order);\n if (!chunk) {\n return;\n }\n for (const [key, value] of Object.entries(part.fields)) {\n formData.append(key, value);\n }\n formData.append(\n \"file\",\n new Blob([chunk.data]),\n `${uploadFile.uploadFile.fileId}-${chunk.order}`\n );\n\n await axios.post(part.url, formData, {\n onUploadProgress: progressEvent =>\n onProgress(part.order, progressEvent),\n signal\n });\n\n await uploadPartEnded(chunk.md5, chunk.order);\n // if ((e as any).response.status === 0) {\n // // TODO https://github.com/sindresorhus/ky/issues/305\n // } else {\n // throw e;\n // }\n };\n\n if (!uploadFile.uploadFile) {\n return null;\n }\n\n await promiseAllLimit(\n 3,\n uploadFile.uploadFile.parts.map(p => (): Promise<void> => byPart(p))\n );\n\n const result = await uploadEnded();\n\n if (!result) {\n return null;\n }\n\n if (result.__typename === \"ErrorAccessDenied\") {\n return result;\n }\n\n if (result.__typename === \"ErrorNotFound\") {\n return result;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: result.data\n };\n }\n\n async uploadFileInCloud({\n file,\n name,\n nodeId,\n encryptProgress,\n uploadProgress,\n signal\n }: {\n file: globalThis.File | Uint8Array;\n name: string;\n nodeId?: string;\n encryptProgress?: ProgressCallback;\n uploadProgress?: ProgressCallback;\n signal?: AbortSignal;\n }): Promise<\n | SuccessResponse<NodeFull>\n | ErrorAccessDenied\n | ErrorLimit\n | ErrorNotFound\n | ErrorBasic\n | ErrorNotExist\n | null\n > {\n const fileId = await this.uploadFile({\n file,\n encryptProgress,\n uploadProgress,\n signal\n });\n\n if (!fileId) {\n return null;\n }\n\n if (fileId.__typename === \"ErrorAccessDenied\") {\n return fileId;\n }\n\n if (fileId.__typename === \"ErrorLimit\") {\n return fileId;\n }\n\n if (fileId.__typename === \"ErrorNotFound\") {\n return fileId;\n }\n\n const result = await this.saveInCloud({\n fileId: fileId.data,\n name,\n nodeId\n });\n\n if (!result) {\n return null;\n }\n\n if (result.__typename === \"ErrorAccessDenied\") {\n return result;\n }\n\n if (result.__typename === \"ErrorBasic\") {\n return result;\n }\n\n if (result.__typename === \"ErrorLimit\") {\n return result;\n }\n\n if (result.__typename === \"ErrorNotFound\") {\n return result;\n }\n\n if (result.__typename === \"ErrorNotExist\") {\n return result;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: result.data\n };\n }\n\n async deletedNodes(): Promise<\n SuccessResponse<Node[]> | ErrorAccessDenied | null\n > {\n const { deletedNodes } = await this.#thunder(\"query\")({\n deletedNodes: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeletedNodesResponse\": {\n __typename: true,\n deletedNodes: nodeSelector\n }\n }\n });\n\n if (!deletedNodes) {\n return null;\n }\n\n if (deletedNodes.__typename === \"ErrorAccessDenied\") {\n return deletedNodes;\n }\n\n const nodes = new Array<Node>();\n\n for (const node of deletedNodes.deletedNodes) {\n nodes.push(await gqlNodeToExternal(node, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: nodes\n };\n }\n\n async sharedNodes(): Promise<\n SuccessResponse<Node[]> | ErrorAccessDenied | null\n > {\n const { sharedNodes } = await this.#thunder(\"query\")({\n sharedNodes: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on SharedNodesResponse\": {\n __typename: true,\n sharedNodes: nodeSelector\n }\n }\n });\n\n if (!sharedNodes) {\n return null;\n }\n\n if (sharedNodes.__typename === \"ErrorAccessDenied\") {\n return sharedNodes;\n }\n\n const nodes = new Array<Node>();\n\n for (const folder of sharedNodes.sharedNodes) {\n nodes.push(await gqlNodeToExternal(folder, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: nodes\n };\n }\n\n async nodesSharedWithMe(\n type?: NodeType | null | undefined\n ): Promise<SuccessResponse<Node[]> | ErrorAccessDenied | null> {\n const { nodesSharedWithMe } = await this.#thunder(\"query\")({\n nodesSharedWithMe: [\n {\n type\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on NodesSharedWithMeResponse\": {\n __typename: true,\n nodesSharedWithMe: nodeSelector\n }\n }\n ]\n });\n\n if (!nodesSharedWithMe) {\n return null;\n }\n\n if (nodesSharedWithMe.__typename === \"ErrorAccessDenied\") {\n return nodesSharedWithMe;\n }\n\n const nodes = new Array<Node>();\n\n for (const folder of nodesSharedWithMe.nodesSharedWithMe) {\n nodes.push(await gqlNodeToExternal(folder, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: nodes\n };\n }\n\n async deleteNodeSharing({\n nodeId,\n userId\n }: {\n nodeId: string;\n userId: string;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteNodeSharing } = await this.#thunder(\"mutation\")({\n deleteNodeSharing: [\n {\n nodeId,\n userId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteNodeSharingResponse\": {\n __typename: true,\n deleteNodeSharing: true\n }\n }\n ]\n });\n\n if (!deleteNodeSharing) {\n return null;\n }\n\n if (deleteNodeSharing.__typename === \"ErrorAccessDenied\") {\n return deleteNodeSharing;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteNodeSharing.deleteNodeSharing\n };\n }\n\n async duplicateNode({\n nodeId,\n folderId,\n customName\n }: {\n nodeId: string;\n folderId?: string | null | undefined;\n customName?: string | null | undefined;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotFound | null\n > {\n let node = nodesCache.get(nodeId);\n if (!node) {\n await this.node({ id: nodeId });\n node = nodesCache.get(nodeId);\n if (!node) {\n throw new Error(`Node (${nodeId}) does not exists`);\n }\n }\n if (!node.access?.nameKey) {\n throw new Error(`Can't have access to node ${nodeId}`);\n }\n customName = customName\n ? await encryptName(customName, node.access.nameKey)\n : null;\n\n const { duplicateNode } = await this.#thunder(\"mutation\")({\n duplicateNode: [\n {\n nodeId,\n folderId,\n customName\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on DuplicateNodeResponse\": {\n __typename: true,\n duplicateNode: true\n }\n }\n ]\n });\n\n if (!duplicateNode) {\n return null;\n }\n\n if (duplicateNode.__typename === \"ErrorAccessDenied\") {\n return duplicateNode;\n }\n\n if (duplicateNode.__typename === \"ErrorNotFound\") {\n return duplicateNode;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: duplicateNode.duplicateNode\n };\n }\n\n async deleteNodeCloudTrash({\n ids\n }: {\n ids: Array<string>;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteNodeCloudTrash } = await this.#thunder(\"mutation\")({\n deleteNodeCloudTrash: [\n {\n ids\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteNodeCloudTrashResponse\": {\n __typename: true,\n deleteNodeCloudTrash: true\n }\n }\n ]\n });\n\n if (!deleteNodeCloudTrash) {\n return null;\n }\n\n if (deleteNodeCloudTrash.__typename === \"ErrorAccessDenied\") {\n return deleteNodeCloudTrash;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteNodeCloudTrash.deleteNodeCloudTrash ?? false\n };\n }\n\n async createFolder({\n name,\n parentFolderId\n }: {\n name: string;\n parentFolderId?: string | null;\n }): Promise<\n SuccessResponse<NodeFull> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const key = secretstreamKeygen();\n const encryptedName = await encryptName(name, sodium.to_hex(key));\n const encryptedKey = encryptCryptoBox(\n key,\n this.#keys.publicKey,\n this.#keys.privateKey\n );\n const { createFolder } = await this.#thunder(\"mutation\")({\n createFolder: [\n {\n name: encryptedName,\n parentFolderId,\n key: sodium.to_hex(encryptedKey)\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on CreateFolderResponse\": {\n __typename: true,\n createFolder: nodeFullSelector\n }\n }\n ]\n });\n if (!createFolder) {\n //throw new Error(`Can't create folder`);\n return null;\n }\n\n if (createFolder.__typename === \"ErrorAccessDenied\") {\n return createFolder;\n }\n\n if (createFolder.__typename === \"ErrorNotExist\") {\n return createFolder;\n }\n\n if (!createFolder.createFolder) {\n return null;\n }\n\n const folder = await gqlNodeToExternalNodeFull(\n createFolder.createFolder,\n this.#keys\n );\n\n const users =\n folder.parent?.users?.filter(\n ([u]) => u.publicKey !== this.#keys.publicKey\n ) ?? [];\n\n if (users.length) {\n await Promise.all(\n users.map(([u, rights]) =>\n this.shareNode({\n nodeId: folder.id,\n rights,\n userId: u.id\n })\n )\n );\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: folder\n };\n }\n\n async node({\n id,\n deleted\n }: {\n id?: string | null | undefined;\n deleted?: boolean | null | undefined;\n } = {}): Promise<SuccessResponse<NodeFull> | ErrorAccessDenied | null> {\n const { node } = await this.#thunder(\"query\")({\n node: [\n { deleted, id },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on NodeResponse\": {\n __typename: true,\n node: nodeFullSelector\n }\n }\n ]\n });\n if (!node) {\n return null;\n }\n\n if (node.__typename === \"ErrorAccessDenied\") {\n return node;\n }\n if (!node.node) {\n return null;\n }\n\n const result = await gqlNodeToExternalNodeFull(node.node, this.#keys);\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async fileMetadata({\n id\n }: {\n id: string;\n }): Promise<SuccessResponse<FileMetadata> | ErrorAccessDenied | null> {\n const { file } = await this.#thunder(\"query\")({\n file: [\n {\n id\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on FileQueryResponse\": {\n __typename: true,\n file: fileSelector\n }\n }\n ]\n });\n if (!file) {\n return null;\n }\n\n if (file.__typename === \"ErrorAccessDenied\") {\n return file;\n }\n\n if (!file.file) {\n return null;\n }\n\n const result = gqlFileToExternal(file.file, this.#keys);\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async shareNode({\n nodeId,\n userId,\n rights\n }: {\n nodeId: string;\n userId: string;\n rights: Rights;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotFound | null\n > {\n const user = await this.#client.user({ userId, withPublicKey: true });\n\n if (!user) {\n return user;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n const { shareNode } = await this.#thunder(\"mutation\")({\n shareNode: [\n { nodeId, userId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareNodeResponse\": {\n __typename: true,\n nodes: true\n }\n }\n ]\n });\n\n if (!shareNode) {\n return null;\n }\n\n if (shareNode.__typename === \"ErrorAccessDenied\") {\n return shareNode;\n }\n\n if (shareNode.__typename === \"ErrorNotFound\") {\n return shareNode;\n }\n\n const shareNodes: ShareNodesInput = {\n nodes: []\n };\n\n for (const id of shareNode.nodes) {\n const nameKey = await this.perNode(id, user.data.publicKey);\n if (nameKey) {\n shareNodes.nodes.push(nameKey);\n }\n }\n\n const { shareNodeFinish } = await this.#thunder(\"mutation\")({\n shareNodeFinish: [\n {\n rights,\n userId,\n shareNodes\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareNodeFinishResponse\": {\n __typename: true,\n shareNodeFinish: true\n }\n }\n ]\n });\n\n if (!shareNodeFinish) {\n return null;\n }\n\n if (shareNodeFinish.__typename === \"ErrorAccessDenied\") {\n return shareNodeFinish;\n }\n\n if (shareNodeFinish.__typename === \"ErrorNotFound\") {\n return shareNodeFinish;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: shareNodeFinish.shareNodeFinish ?? false\n };\n }\n\n async updateNode({\n nodeId,\n name,\n isFavorite,\n deletedAt\n }: {\n nodeId: string;\n name?: string | null | undefined;\n isFavorite?: boolean | null | undefined;\n deletedAt?: Date | null | undefined;\n }): Promise<\n SuccessResponse<NodeFull> | ErrorAccessDenied | ErrorNotExist | null\n > {\n let node = nodesCache.get(nodeId);\n if (!node) {\n await this.node({ id: nodeId });\n node = nodesCache.get(nodeId);\n if (!node) {\n throw `Can't find Node ${nodeId}`;\n }\n }\n\n if (!node.access?.nameKey) {\n throw new Error(`Can't have access to node ${nodeId}`);\n }\n\n name = name\n ? node.access?.nameKey\n ? await encryptName(name, node.access.nameKey)\n : name\n : null;\n\n const { updateNode } = await this.#thunder(\"mutation\")({\n updateNode: [\n {\n nodeId,\n name,\n isFavorite,\n deletedAt\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on UpdateNodeResponse\": {\n __typename: true,\n updateNode: nodeFullSelector\n }\n }\n ]\n });\n\n if (!updateNode) {\n return null;\n }\n\n if (updateNode.__typename === \"ErrorAccessDenied\") {\n return updateNode;\n }\n\n if (updateNode.__typename === \"ErrorNotExist\") {\n return updateNode;\n }\n\n if (!updateNode.updateNode) {\n return null;\n }\n\n const result = await gqlNodeToExternalNodeFull(\n updateNode.updateNode,\n this.#keys\n );\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async fileContent({\n fileId,\n onDownloadProgress,\n progressDecrypt,\n signal\n }: {\n fileId: string;\n onDownloadProgress?: (progress: DownloadProgress) => void;\n progressDecrypt?: ProgressCallback;\n signal?: AbortSignal;\n }): Promise<\n SuccessResponse<Uint8Array> | ErrorAccessDenied | ErrorBasic | null\n > {\n const { fileContent } = await this.#thunder(\"query\", {\n scalars: {\n Bytes: {\n decode: (e: unknown) => {\n console.log(e, typeof e);\n return Uint8Array.from([1, 2, 3]);\n },\n encode: (e: unknown) => (e as Uint8Array).toString()\n }\n }\n })({\n fileContent: [\n { fileId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on FileContentResponse\": {\n __typename: true,\n file: {\n \"...on FileContentCloud\": {\n __typename: true,\n parts: {\n contentUrl: true,\n order: true,\n md5: true\n },\n key: true,\n publicKey: true,\n totalSize: true,\n md5: true,\n md5Encrypted: true\n },\n \"...on FileContentLite\": {\n __typename: true,\n content: true,\n id: true,\n key: true,\n publicKey: true,\n md5: true,\n md5Encrypted: true,\n totalSize: true\n },\n \"...on FileContentReceivedMail\": {\n __typename: true,\n maybeParts: {\n contentUrl: true,\n order: true,\n md5: true\n },\n maybeContent: true,\n key: true,\n senderPublicKey: true,\n totalSize: true,\n md5: true,\n md5Encrypted: true\n },\n \"...on FileContentSentMail\": {\n __typename: true,\n maybeParts: {\n contentUrl: true,\n order: true,\n md5: true\n },\n maybeContent: true,\n key: true,\n totalSize: true,\n md5: true,\n md5Encrypted: true\n }\n }\n }\n }\n ]\n });\n\n if (!fileContent) {\n return null;\n }\n\n if (fileContent.__typename === \"ErrorAccessDenied\") {\n return fileContent;\n }\n\n if (fileContent.__typename === \"ErrorBasic\") {\n return fileContent;\n }\n\n const file = fileContent.file;\n if (!file) {\n return null;\n }\n\n const progressParts: Record<number, DownloadProgress> = {};\n const onProgress = (\n part: number,\n progressEvent: DownloadProgress\n ): void => {\n progressParts[part] = progressEvent;\n const transferredBytes = Object.values(progressParts).reduce(\n (prv, cur) => prv + cur.transferredBytes,\n 0\n );\n const totalBytes = Number(file.totalSize);\n onDownloadProgress?.({\n percent: transferredBytes / totalBytes,\n totalBytes,\n transferredBytes\n });\n };\n\n const encryptedContentFromParts = async (\n fileParts: FileContentPart[]\n ): Promise<Uint8Array> => {\n const parts = new Array<{ data: Uint8Array; order: number }>();\n\n const byPart = async (part: FileContentPart): Promise<void> => {\n const buf = new Uint8Array(\n await ky\n .get(part.contentUrl, {\n timeout: false,\n onDownloadProgress: pr => onProgress(part.order, pr),\n signal: signal\n })\n .arrayBuffer()\n );\n const md5Part = await md5(buf);\n if (md5Part !== part.md5) {\n throw new Error(\n `Invalid md5 for part ${part.order} of file ${fileId}`\n );\n }\n parts.push({\n data: buf,\n order: part.order\n });\n };\n\n await promiseAllLimit(\n 3,\n fileParts.map(p => (): Promise<void> => byPart(p))\n );\n\n return concatenate(\n ...parts.sort((a, b) => a.order - b.order).map(p => p.data)\n );\n };\n\n const finalize = async (\n encryptedContent: Uint8Array\n ): Promise<Uint8Array> => {\n // const md5Encrypted = await firstValueFrom(md5(of(encryptedContent)));\n const md5Encrypted = await md5(encryptedContent);\n\n if (md5Encrypted !== file.md5Encrypted) {\n throw new Error(`Encrypted content does not match`);\n }\n\n const key = decryptCryptoBox(\n sodium.from_hex(file.key),\n file.__typename === \"FileContentReceivedMail\"\n ? file.senderPublicKey\n : file.__typename === \"FileContentCloud\"\n ? file.publicKey\n : this.#keys.publicKey,\n this.#keys.privateKey\n );\n\n const src = await decrypt(key, encryptedContent, progressDecrypt, signal);\n\n // const md5Content = await firstValueFrom(md5(of(src)));\n const md5Content = await md5(src);\n\n if (md5Content !== file.md5) {\n throw new Error(`Content does not match`);\n }\n\n return uncompress(src);\n };\n\n const encryptedContent =\n file.__typename === \"FileContentLite\"\n ? file.content\n : file.__typename === \"FileContentCloud\"\n ? await encryptedContentFromParts(file.parts)\n : file.maybeContent\n ? file.maybeContent\n : file.maybeParts\n ? await encryptedContentFromParts(file.maybeParts)\n : null;\n\n if (!encryptedContent) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: await finalize(encryptedContent)\n };\n }\n\n async deleteFile({\n fileId,\n nodeId\n }: {\n fileId: string;\n nodeId: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { deleteFile } = await this.#thunder(\"mutation\")({\n deleteFile: [\n {\n fileId,\n nodeId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on DeleteFileResponse\": {\n __typename: true,\n deleteFile: true\n }\n }\n ]\n });\n\n if (!deleteFile) {\n return null;\n }\n\n if (deleteFile.__typename === \"ErrorAccessDenied\") {\n return deleteFile;\n }\n\n if (deleteFile.__typename === \"ErrorNotExist\") {\n return deleteFile;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteFile.deleteFile\n };\n }\n\n async deleteNode({\n nodeId\n }: {\n nodeId: string;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteNode } = await this.#thunder(\"mutation\")({\n deleteNode: [\n {\n id: nodeId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteNodeResponse\": {\n __typename: true,\n deleteNode: true\n }\n }\n ]\n });\n\n if (!deleteNode) {\n return null;\n }\n\n if (deleteNode.__typename === \"ErrorAccessDenied\") {\n return deleteNode;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteNode.deleteNode\n };\n }\n\n async emptyTrash(): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | null\n > {\n const { emptyCloudTrash } = await this.#thunder(\"mutation\")({\n emptyCloudTrash: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on EmptyCloudTrashResponse\": {\n __typename: true,\n emptyCloudTrash: true\n }\n }\n });\n\n if (!emptyCloudTrash) {\n return null;\n }\n\n if (emptyCloudTrash.__typename === \"ErrorAccessDenied\") {\n return emptyCloudTrash;\n }\n\n if (!emptyCloudTrash.emptyCloudTrash) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: emptyCloudTrash.emptyCloudTrash\n };\n }\n\n async recoverNode(\n id: string\n ): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { recoverNode } = await this.#thunder(\"mutation\")({\n recoverNode: [\n { id },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on RecoverNodeResponse\": {\n __typename: true,\n recoverNode: true\n }\n }\n ]\n });\n\n if (!recoverNode) {\n return null;\n }\n\n if (recoverNode.__typename === \"ErrorAccessDenied\") {\n return recoverNode;\n }\n\n if (recoverNode.__typename === \"ErrorNotExist\") {\n return recoverNode;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: recoverNode.recoverNode ?? false\n };\n }\n\n async moveNodes({\n nodeIds,\n parentNodeId\n }: {\n nodeIds: string[];\n parentNodeId?: string | null | undefined;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { moveNodes } = await this.#thunder(\"mutation\")({\n moveNodes: [\n {\n nodeIds,\n parentNodeId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on MoveNodesResponse\": {\n __typename: true,\n moveNodes: true\n }\n }\n ]\n });\n\n if (!moveNodes) {\n return null;\n }\n\n if (moveNodes.__typename === \"ErrorAccessDenied\") {\n return moveNodes;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: moveNodes.moveNodes ?? false\n };\n }\n\n async saveInCloud({\n fileId,\n name,\n nodeId\n }: {\n fileId: string;\n name: string;\n nodeId?: string;\n }): Promise<\n | SuccessResponse<NodeFull>\n | ErrorAccessDenied\n | ErrorBasic\n | ErrorLimit\n | ErrorNotFound\n | ErrorNotExist\n | null\n > {\n if (nodeId && !nodesCache.has(nodeId)) {\n await this.node({ id: nodeId });\n if (!nodesCache.has(nodeId)) {\n return {\n __typename: \"ErrorBasic\",\n message: `The node ${nodeId} does not exists`\n };\n }\n }\n\n let key = \"\";\n\n const file = filesCache.get(fileId);\n\n if (!file) {\n await this.fileMetadata({ id: fileId });\n const file = filesCache.get(fileId) ?? null;\n if (!file) {\n const receivedMails = await this.#client.mail.receivedMails();\n if (!receivedMails) {\n return null;\n }\n if (receivedMails.__typename !== \"SuccessResponse\") {\n return null;\n }\n const mail = receivedMails.data.find(m =>\n m.files.some(f => f.id === fileId)\n );\n\n if (!mail) {\n return {\n __typename: \"ErrorBasic\",\n message: `Can't find mail with the file ${fileId}`\n };\n }\n\n const fileMail = mail.files.find(f => f.id === fileId);\n\n if (!fileMail) {\n return {\n __typename: \"ErrorBasic\",\n message: `Can't find mail with the file ${fileId}`\n };\n }\n\n const fileKey = decryptCryptoBox(\n sodium.from_hex(fileMail.key),\n mail.sender.publicKey,\n this.#keys.privateKey\n );\n\n key = sodium.to_hex(fileKey);\n } else {\n key = file.key;\n }\n } else {\n key = file.key;\n }\n\n if (key === \"\") {\n return {\n __typename: \"ErrorBasic\",\n message: \"Unexpected error 3\"\n };\n }\n\n key = sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(key),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n );\n\n const nameKey = secretstreamKeygen();\n const encryptedName = await encryptName(name, sodium.to_hex(nameKey));\n const encryptedNameKey = sodium.to_hex(\n encryptCryptoBox(nameKey, this.#keys.publicKey, this.#keys.privateKey)\n );\n\n const { saveInCloud } = await this.#thunder(\"mutation\")({\n saveInCloud: [\n {\n fileId,\n key,\n nodeId,\n filename: encryptedName,\n nameKey: encryptedNameKey\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ErrorLimit\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on SaveInCloudResponse\": {\n __typename: true,\n saveInCloud: nodeFullSelector\n }\n }\n ]\n });\n\n if (!saveInCloud) {\n return null;\n }\n\n if (saveInCloud.__typename === \"ErrorAccessDenied\") {\n return saveInCloud;\n }\n\n if (saveInCloud.__typename === \"ErrorNotFound\") {\n return saveInCloud;\n }\n if (saveInCloud.__typename === \"ErrorLimit\") {\n return saveInCloud;\n }\n\n if (saveInCloud.__typename === \"ErrorBasic\") {\n return saveInCloud;\n }\n\n if (saveInCloud.__typename === \"ErrorNotExist\") {\n return saveInCloud;\n }\n\n if (!saveInCloud.saveInCloud) {\n return null;\n }\n\n const node = await gqlNodeToExternalNodeFull(\n saveInCloud.saveInCloud,\n this.#keys\n );\n\n const me = node.parent?.users.find(\n ([u]) => u.publicKey === this.#keys.publicKey\n );\n\n if (me && [\"admin\", \"write\"].includes(me[1])) {\n const others =\n node.parent?.users.filter(\n ([u]) => u.publicKey !== this.#keys.publicKey\n ) ?? [];\n\n await Promise.all(\n others.map(([u, rights]) =>\n this.shareNode({\n nodeId: node.id,\n rights,\n userId: u.id\n })\n )\n );\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: node\n };\n }\n\n private perNode = async (\n nodeId: string,\n publicKey: string\n ): Promise<NameKeyInput | null> => {\n let node = nodesCache.get(nodeId);\n\n if (!node) {\n await this.node({ id: nodeId });\n node = nodesCache.get(nodeId);\n\n if (!node) {\n return null;\n }\n }\n\n const nameKey = node.access?.nameKey;\n\n if (!nameKey) {\n return null;\n }\n\n return {\n id: node.id,\n nameKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(nameKey),\n publicKey,\n this.#keys.privateKey\n )\n ),\n files:\n \"history\" in node\n ? node.history.map(f => ({\n id: f.id,\n key: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(f.key),\n publicKey,\n this.#keys.privateKey\n )\n )\n }))\n : []\n };\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/client/SecrecyCloudClient.ts"],"names":["_client","_keys","_thunder","axios","ky","encryptName","nodesCache","filesCache","secretstreamKeygen","decryptCryptoBox","encryptCryptoBox","compress","uncompress","sodium","enumerate","chunks","promiseAllLimit","concatenate","md5","decrypt","encrypt","gqlFileToExternal","gqlNodeFullToInternalFull","gqlNodeToExternal","gqlNodeToExternalNodeFull","internalNodeToNode","fileSelector","nodeFullSelector","nodeSelector","SecrecyCloudClient","client","keys","thunder","__privateAdd","__publicField","nodeId","publicKey","__async","_a","node","nameKey","__privateGet","f","__privateSet","_0","fileId","addFileToHistory","file","users","u","input","result","encryptProgress","uploadProgress","signal","fileKey","fileBuffer","compressed","encryptedFile","md5File","md5Encrypted","encryptedFileKey","uploadFile","e","uploadPartEnded","order","uploadFilePartEnd","uploadEnded","uploadFileEnd","chunkParts","index","chunk","progressParts","onProgress","part","progressEvent","current","prv","cur","byPart","formData","p","key","value","name","deletedNodes","nodes","sharedNodes","folder","type","nodesSharedWithMe","userId","deleteNodeSharing","folderId","customName","duplicateNode","ids","deleteNodeCloudTrash","parentFolderId","_b","_c","encryptedName","encryptedKey","createFolder","rights","id","deleted","user","shareNode","shareNodes","shareNodeFinish","isFavorite","deletedAt","updateNode","onDownloadProgress","progressDecrypt","fileContent","transferredBytes","totalBytes","encryptedContentFromParts","fileParts","parts","buf","pr","a","b","finalize","encryptedContent","src","deleteFile","deleteNode","emptyCloudTrash","recoverNode","nodeIds","parentNodeId","moveNodes","_d","receivedMails","mail","m","fileMail","encryptedNameKey","saveInCloud","me","others"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { AxiosProgressEvent } from \"axios\";\nimport axios from \"axios\";\nimport ky from \"ky\";\nimport type {\n DownloadProgress,\n ProgressCallback,\n SecrecyClient,\n SuccessResponse\n} from \"../index.js\";\nimport { encryptName } from \"../index.js\";\nimport { nodesCache, filesCache } from \"../cache.js\";\nimport { secretstreamKeygen } from \"../crypto/file.js\";\nimport type { KeyPair } from \"../crypto/index.js\";\nimport { decryptCryptoBox } from \"../crypto/index.js\";\nimport { encryptCryptoBox } from \"../crypto/index.js\";\nimport type {\n ErrorAccessDenied,\n ErrorBasic,\n ErrorLimit,\n ErrorNotExist,\n ErrorNotFound\n} from \"../error.js\";\nimport { compress, uncompress } from \"../minify/index.js\";\nimport { sodium } from \"../sodium.js\";\nimport {\n enumerate,\n chunks,\n promiseAllLimit,\n concatenate\n} from \"../utils/utils.js\";\nimport { md5 } from \"../worker/md5.js\";\nimport { decrypt, encrypt } from \"../worker/sodium.js\";\nimport type { NodeType, Rights, Thunder } from \"../zeus/index.js\";\nimport { gqlFileToExternal } from \"./convert/file.js\";\nimport {\n gqlNodeFullToInternalFull,\n gqlNodeToExternal,\n gqlNodeToExternalNodeFull,\n internalNodeToNode\n} from \"./convert/node.js\";\nimport type {\n FileContentPart,\n FileMetadata,\n FilePartResponse,\n NameKeyInput,\n Node,\n NodeFull,\n ShareFileInHistoryInput,\n ShareNodesInput\n} from \"./types/index.js\";\nimport {\n fileSelector,\n nodeFullSelector,\n nodeSelector\n} from \"./types/selectors.js\";\n// import { md5 } from \"../worker/index.js\";\n// import { firstValueFrom, of } from \"rxjs\";\n\nexport class SecrecyCloudClient {\n #client: SecrecyClient;\n\n #keys: KeyPair;\n\n #thunder: ReturnType<typeof Thunder>;\n\n constructor(\n client: SecrecyClient,\n keys: KeyPair,\n thunder: ReturnType<typeof Thunder>\n ) {\n this.#client = client;\n this.#keys = keys;\n this.#thunder = thunder;\n }\n\n async addFileToHistory({\n fileId,\n nodeId\n }: {\n fileId: string;\n nodeId: string;\n }): Promise<\n SuccessResponse<Node> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { addFileToHistory } = await this.#thunder(\"mutation\")({\n addFileToHistory: [\n {\n fileId,\n nodeId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on AddFileToHistoryResponse\": {\n __typename: true,\n addFileToHistory: nodeFullSelector\n }\n }\n ]\n });\n\n if (!addFileToHistory) {\n return null;\n }\n\n if (addFileToHistory.__typename === \"ErrorAccessDenied\") {\n return addFileToHistory;\n }\n\n if (addFileToHistory.__typename === \"ErrorNotExist\") {\n return addFileToHistory;\n }\n\n const node = await gqlNodeFullToInternalFull(\n addFileToHistory.addFileToHistory,\n this.#keys\n );\n const file = node.history.find(f => f.id === fileId);\n if (file) {\n const users = node.users.filter(\n ([u]) => u.publicKey !== this.#keys.publicKey\n );\n const input: ShareFileInHistoryInput = {\n fileId: file.id,\n users: users.map(([u]) => ({\n id: u.id,\n key: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(file.key),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n )\n }))\n };\n\n await this.#thunder(\"mutation\")({\n shareFileInHistory: [\n { input, nodeId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareFileInHistoryResponse\": {\n __typename: true,\n shareFileInHistory: true\n }\n }\n ]\n });\n }\n const result = internalNodeToNode(node);\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async uploadFile({\n file,\n encryptProgress,\n uploadProgress,\n signal\n }: {\n file: globalThis.File | Uint8Array;\n encryptProgress?: ProgressCallback;\n uploadProgress?: ProgressCallback;\n signal?: AbortSignal;\n }): Promise<\n | SuccessResponse<string>\n | ErrorAccessDenied\n | ErrorLimit\n | ErrorNotFound\n | null\n > {\n const fileKey = secretstreamKeygen();\n const fileBuffer =\n file instanceof File ? new Uint8Array(await file.arrayBuffer()) : file;\n const compressed = compress(fileBuffer);\n\n const {\n data: encryptedFile,\n md5: md5File,\n md5Encrypted\n } = await encrypt(fileKey, compressed, encryptProgress, signal);\n\n const encryptedFileKey = encryptCryptoBox(\n fileKey,\n this.#keys.publicKey,\n this.#keys.privateKey\n );\n\n const { uploadFile } = await this.#thunder(\"mutation\", {\n scalars: {\n Json: {\n encode: (e: unknown) => JSON.stringify(e),\n decode: (e: unknown) => JSON.parse(e as string)\n },\n DateTime: {\n decode: (e: unknown) => new Date(e as string),\n encode: (e: unknown) => (e as Date).toISOString()\n },\n BigInt: {\n decode: (e: unknown) => BigInt(e as string),\n encode: (e: unknown) => (e as bigint).toString()\n }\n }\n })({\n uploadFile: [\n {\n fileSize: encryptedFile.byteLength,\n fileSizeBefore: fileBuffer.byteLength,\n fileKey: sodium.to_hex(encryptedFileKey),\n md5Encrypted,\n md5: md5File\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorLimit\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UploadFileResponse\": {\n __typename: true,\n uploadFile: {\n fileId: true,\n filePartSize: true,\n parts: {\n fields: true,\n order: true,\n url: true\n }\n }\n }\n }\n ]\n });\n\n if (!uploadFile) {\n return null;\n }\n\n if (uploadFile.__typename === \"ErrorAccessDenied\") {\n return uploadFile;\n }\n\n if (uploadFile.__typename === \"ErrorLimit\") {\n return uploadFile;\n }\n\n if (uploadFile.__typename === \"ErrorNotFound\") {\n return uploadFile;\n }\n\n if (!uploadFile.uploadFile) {\n return null;\n }\n\n uploadProgress?.({\n total: encryptedFile.byteLength,\n current: 0,\n percent: 0\n });\n\n if (uploadFile.uploadFile.parts.length === 0) {\n uploadProgress?.({\n total: encryptedFile.byteLength,\n current: encryptedFile.byteLength,\n percent: 1\n });\n\n return {\n __typename: \"SuccessResponse\",\n data: uploadFile.uploadFile.fileId\n };\n }\n\n const uploadPartEnded = async (\n md5: string,\n order: number\n ): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> => {\n if (!uploadFile.uploadFile) {\n return null;\n }\n const { uploadFilePartEnd } = await this.#thunder(\"mutation\")({\n uploadFilePartEnd: [\n {\n fileId: uploadFile.uploadFile.fileId,\n md5,\n order\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on UploadFilePartEndResponse\": {\n __typename: true,\n uploadFilePartEnd: true\n }\n }\n ]\n });\n\n if (!uploadFilePartEnd) {\n return null;\n }\n\n if (uploadFilePartEnd.__typename === \"ErrorAccessDenied\") {\n return uploadFilePartEnd;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: uploadFilePartEnd.uploadFilePartEnd\n };\n };\n\n const uploadEnded = async (): Promise<\n SuccessResponse<string> | ErrorAccessDenied | ErrorNotFound | null\n > => {\n if (!uploadFile.uploadFile) {\n return null;\n }\n const { uploadFileEnd } = await this.#thunder(\"mutation\")({\n uploadFileEnd: [\n {\n fileId: uploadFile.uploadFile.fileId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on UploadFileEndResponse\": {\n __typename: true,\n uploadFileEnd: true\n }\n }\n ]\n });\n\n if (!uploadFileEnd) {\n return null;\n }\n\n if (uploadFileEnd.__typename === \"ErrorAccessDenied\") {\n return uploadFileEnd;\n }\n\n if (uploadFileEnd.__typename === \"ErrorNotFound\") {\n return uploadFileEnd;\n }\n\n if (!uploadFileEnd.uploadFileEnd) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: uploadFileEnd.uploadFileEnd\n };\n };\n\n const chunkParts = new Array<{\n order: number;\n data: Uint8Array;\n md5: string;\n }>();\n\n for (const [index, chunk] of enumerate(\n chunks(encryptedFile, Number(uploadFile.uploadFile.filePartSize))\n )) {\n chunkParts.push({\n order: index + 1,\n data: chunk,\n md5: await md5(chunk)\n });\n }\n\n const progressParts: Record<number, AxiosProgressEvent> = {};\n const onProgress = (\n part: number,\n progressEvent: AxiosProgressEvent\n ): void => {\n progressParts[part] = progressEvent;\n const current = Object.values(progressParts).reduce(\n (prv, cur) => prv + cur.loaded,\n 0\n );\n uploadProgress?.({\n percent: current / encryptedFile.byteLength,\n total: encryptedFile.byteLength,\n current\n });\n };\n\n const byPart = async (part: FilePartResponse): Promise<void> => {\n if (!uploadFile.uploadFile) {\n return;\n }\n const formData = new FormData();\n const chunk = chunkParts.find(p => p.order === part.order);\n if (!chunk) {\n return;\n }\n for (const [key, value] of Object.entries(part.fields)) {\n formData.append(key, value);\n }\n formData.append(\n \"file\",\n new Blob([chunk.data]),\n `${uploadFile.uploadFile.fileId}-${chunk.order}`\n );\n\n await axios.post(part.url, formData, {\n onUploadProgress: progressEvent =>\n onProgress(part.order, progressEvent),\n signal\n });\n\n await uploadPartEnded(chunk.md5, chunk.order);\n // if ((e as any).response.status === 0) {\n // // TODO https://github.com/sindresorhus/ky/issues/305\n // } else {\n // throw e;\n // }\n };\n\n if (!uploadFile.uploadFile) {\n return null;\n }\n\n await promiseAllLimit(\n 3,\n uploadFile.uploadFile.parts.map(p => (): Promise<void> => byPart(p))\n );\n\n const result = await uploadEnded();\n\n if (!result) {\n return null;\n }\n\n if (result.__typename === \"ErrorAccessDenied\") {\n return result;\n }\n\n if (result.__typename === \"ErrorNotFound\") {\n return result;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: result.data\n };\n }\n\n async uploadFileInCloud({\n file,\n name,\n nodeId,\n encryptProgress,\n uploadProgress,\n signal\n }: {\n file: globalThis.File | Uint8Array;\n name: string;\n nodeId?: string;\n encryptProgress?: ProgressCallback;\n uploadProgress?: ProgressCallback;\n signal?: AbortSignal;\n }): Promise<\n | SuccessResponse<NodeFull>\n | ErrorAccessDenied\n | ErrorLimit\n | ErrorNotFound\n | ErrorBasic\n | ErrorNotExist\n | null\n > {\n const fileId = await this.uploadFile({\n file,\n encryptProgress,\n uploadProgress,\n signal\n });\n\n if (!fileId) {\n return null;\n }\n\n if (fileId.__typename === \"ErrorAccessDenied\") {\n return fileId;\n }\n\n if (fileId.__typename === \"ErrorLimit\") {\n return fileId;\n }\n\n if (fileId.__typename === \"ErrorNotFound\") {\n return fileId;\n }\n\n const result = await this.saveInCloud({\n fileId: fileId.data,\n name,\n nodeId\n });\n\n if (!result) {\n return null;\n }\n\n if (result.__typename === \"ErrorAccessDenied\") {\n return result;\n }\n\n if (result.__typename === \"ErrorBasic\") {\n return result;\n }\n\n if (result.__typename === \"ErrorLimit\") {\n return result;\n }\n\n if (result.__typename === \"ErrorNotFound\") {\n return result;\n }\n\n if (result.__typename === \"ErrorNotExist\") {\n return result;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: result.data\n };\n }\n\n async deletedNodes(): Promise<\n SuccessResponse<Node[]> | ErrorAccessDenied | null\n > {\n const { deletedNodes } = await this.#thunder(\"query\")({\n deletedNodes: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeletedNodesResponse\": {\n __typename: true,\n deletedNodes: nodeSelector\n }\n }\n });\n\n if (!deletedNodes) {\n return null;\n }\n\n if (deletedNodes.__typename === \"ErrorAccessDenied\") {\n return deletedNodes;\n }\n\n const nodes = new Array<Node>();\n\n for (const node of deletedNodes.deletedNodes) {\n nodes.push(await gqlNodeToExternal(node, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: nodes\n };\n }\n\n async sharedNodes(): Promise<\n SuccessResponse<Node[]> | ErrorAccessDenied | null\n > {\n const { sharedNodes } = await this.#thunder(\"query\")({\n sharedNodes: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on SharedNodesResponse\": {\n __typename: true,\n sharedNodes: nodeSelector\n }\n }\n });\n\n if (!sharedNodes) {\n return null;\n }\n\n if (sharedNodes.__typename === \"ErrorAccessDenied\") {\n return sharedNodes;\n }\n\n const nodes = new Array<Node>();\n\n for (const folder of sharedNodes.sharedNodes) {\n nodes.push(await gqlNodeToExternal(folder, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: nodes\n };\n }\n\n async nodesSharedWithMe(\n type?: NodeType | null | undefined\n ): Promise<SuccessResponse<Node[]> | ErrorAccessDenied | null> {\n const { nodesSharedWithMe } = await this.#thunder(\"query\")({\n nodesSharedWithMe: [\n {\n type\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on NodesSharedWithMeResponse\": {\n __typename: true,\n nodesSharedWithMe: nodeSelector\n }\n }\n ]\n });\n\n if (!nodesSharedWithMe) {\n return null;\n }\n\n if (nodesSharedWithMe.__typename === \"ErrorAccessDenied\") {\n return nodesSharedWithMe;\n }\n\n const nodes = new Array<Node>();\n\n for (const folder of nodesSharedWithMe.nodesSharedWithMe) {\n nodes.push(await gqlNodeToExternal(folder, this.#keys));\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: nodes\n };\n }\n\n async deleteNodeSharing({\n nodeId,\n userId\n }: {\n nodeId: string;\n userId: string;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteNodeSharing } = await this.#thunder(\"mutation\")({\n deleteNodeSharing: [\n {\n nodeId,\n userId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteNodeSharingResponse\": {\n __typename: true,\n deleteNodeSharing: true\n }\n }\n ]\n });\n\n if (!deleteNodeSharing) {\n return null;\n }\n\n if (deleteNodeSharing.__typename === \"ErrorAccessDenied\") {\n return deleteNodeSharing;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteNodeSharing.deleteNodeSharing\n };\n }\n\n async duplicateNode({\n nodeId,\n folderId,\n customName\n }: {\n nodeId: string;\n folderId?: string | null | undefined;\n customName?: string | null | undefined;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotFound | null\n > {\n let node = nodesCache.get(nodeId);\n if (!node) {\n await this.node({ id: nodeId });\n node = nodesCache.get(nodeId);\n if (!node) {\n throw new Error(`Node (${nodeId}) does not exists`);\n }\n }\n if (!node.access?.nameKey) {\n throw new Error(`Can't have access to node ${nodeId}`);\n }\n customName = customName\n ? await encryptName(customName, node.access.nameKey)\n : null;\n\n const { duplicateNode } = await this.#thunder(\"mutation\")({\n duplicateNode: [\n {\n nodeId,\n folderId,\n customName\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on DuplicateNodeResponse\": {\n __typename: true,\n duplicateNode: true\n }\n }\n ]\n });\n\n if (!duplicateNode) {\n return null;\n }\n\n if (duplicateNode.__typename === \"ErrorAccessDenied\") {\n return duplicateNode;\n }\n\n if (duplicateNode.__typename === \"ErrorNotFound\") {\n return duplicateNode;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: duplicateNode.duplicateNode\n };\n }\n\n async deleteNodeCloudTrash({\n ids\n }: {\n ids: Array<string>;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteNodeCloudTrash } = await this.#thunder(\"mutation\")({\n deleteNodeCloudTrash: [\n {\n ids\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteNodeCloudTrashResponse\": {\n __typename: true,\n deleteNodeCloudTrash: true\n }\n }\n ]\n });\n\n if (!deleteNodeCloudTrash) {\n return null;\n }\n\n if (deleteNodeCloudTrash.__typename === \"ErrorAccessDenied\") {\n return deleteNodeCloudTrash;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteNodeCloudTrash.deleteNodeCloudTrash ?? false\n };\n }\n\n async createFolder({\n name,\n parentFolderId\n }: {\n name: string;\n parentFolderId?: string | null;\n }): Promise<\n SuccessResponse<NodeFull> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const key = secretstreamKeygen();\n const encryptedName = await encryptName(name, sodium.to_hex(key));\n const encryptedKey = encryptCryptoBox(\n key,\n this.#keys.publicKey,\n this.#keys.privateKey\n );\n const { createFolder } = await this.#thunder(\"mutation\")({\n createFolder: [\n {\n name: encryptedName,\n parentFolderId,\n key: sodium.to_hex(encryptedKey)\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on CreateFolderResponse\": {\n __typename: true,\n createFolder: nodeFullSelector\n }\n }\n ]\n });\n if (!createFolder) {\n //throw new Error(`Can't create folder`);\n return null;\n }\n\n if (createFolder.__typename === \"ErrorAccessDenied\") {\n return createFolder;\n }\n\n if (createFolder.__typename === \"ErrorNotExist\") {\n return createFolder;\n }\n\n if (!createFolder.createFolder) {\n return null;\n }\n\n const folder = await gqlNodeToExternalNodeFull(\n createFolder.createFolder,\n this.#keys\n );\n\n const users =\n folder.parent?.users?.filter(\n ([u]) => u.publicKey !== this.#keys.publicKey\n ) ?? [];\n\n if (users.length) {\n await Promise.all(\n users.map(([u, rights]) =>\n this.shareNode({\n nodeId: folder.id,\n rights,\n userId: u.id\n })\n )\n );\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: folder\n };\n }\n\n async node({\n id,\n deleted\n }: {\n id?: string | null | undefined;\n deleted?: boolean | null | undefined;\n } = {}): Promise<SuccessResponse<NodeFull> | ErrorAccessDenied | null> {\n const { node } = await this.#thunder(\"query\")({\n node: [\n { deleted, id },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on NodeResponse\": {\n __typename: true,\n node: nodeFullSelector\n }\n }\n ]\n });\n if (!node) {\n return null;\n }\n\n if (node.__typename === \"ErrorAccessDenied\") {\n return node;\n }\n if (!node.node) {\n return null;\n }\n\n const result = await gqlNodeToExternalNodeFull(node.node, this.#keys);\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async fileMetadata({\n id\n }: {\n id: string;\n }): Promise<SuccessResponse<FileMetadata> | ErrorAccessDenied | null> {\n const { file } = await this.#thunder(\"query\")({\n file: [\n {\n id\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on FileQueryResponse\": {\n __typename: true,\n file: fileSelector\n }\n }\n ]\n });\n if (!file) {\n return null;\n }\n\n if (file.__typename === \"ErrorAccessDenied\") {\n return file;\n }\n\n if (!file.file) {\n return null;\n }\n\n const result = gqlFileToExternal(file.file, this.#keys);\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async shareNode({\n nodeId,\n userId,\n rights\n }: {\n nodeId: string;\n userId: string;\n rights: Rights;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotFound | null\n > {\n const user = await this.#client.user({ userId, withPublicKey: true });\n\n if (!user) {\n return user;\n }\n\n if (user.__typename === \"ErrorNotFound\") {\n return user;\n }\n\n const { shareNode } = await this.#thunder(\"mutation\")({\n shareNode: [\n { nodeId, userId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareNodeResponse\": {\n __typename: true,\n nodes: true\n }\n }\n ]\n });\n\n if (!shareNode) {\n return null;\n }\n\n if (shareNode.__typename === \"ErrorAccessDenied\") {\n return shareNode;\n }\n\n if (shareNode.__typename === \"ErrorNotFound\") {\n return shareNode;\n }\n\n const shareNodes: ShareNodesInput = {\n nodes: []\n };\n\n for (const id of shareNode.nodes) {\n const nameKey = await this.perNode(id, user.data.publicKey);\n if (nameKey) {\n shareNodes.nodes.push(nameKey);\n }\n }\n\n const { shareNodeFinish } = await this.#thunder(\"mutation\")({\n shareNodeFinish: [\n {\n rights,\n userId,\n shareNodes\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ShareNodeFinishResponse\": {\n __typename: true,\n shareNodeFinish: true\n }\n }\n ]\n });\n\n if (!shareNodeFinish) {\n return null;\n }\n\n if (shareNodeFinish.__typename === \"ErrorAccessDenied\") {\n return shareNodeFinish;\n }\n\n if (shareNodeFinish.__typename === \"ErrorNotFound\") {\n return shareNodeFinish;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: shareNodeFinish.shareNodeFinish ?? false\n };\n }\n\n async updateNode({\n nodeId,\n name,\n isFavorite,\n deletedAt\n }: {\n nodeId: string;\n name?: string | null | undefined;\n isFavorite?: boolean | null | undefined;\n deletedAt?: Date | null | undefined;\n }): Promise<\n SuccessResponse<NodeFull> | ErrorAccessDenied | ErrorNotExist | null\n > {\n let node = nodesCache.get(nodeId);\n if (!node) {\n await this.node({ id: nodeId });\n node = nodesCache.get(nodeId);\n if (!node) {\n throw `Can't find Node ${nodeId}`;\n }\n }\n\n if (!node.access?.nameKey) {\n throw new Error(`Can't have access to node ${nodeId}`);\n }\n\n name = name\n ? node.access?.nameKey\n ? await encryptName(name, node.access.nameKey)\n : name\n : null;\n\n const { updateNode } = await this.#thunder(\"mutation\")({\n updateNode: [\n {\n nodeId,\n name,\n isFavorite,\n deletedAt\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on UpdateNodeResponse\": {\n __typename: true,\n updateNode: nodeFullSelector\n }\n }\n ]\n });\n\n if (!updateNode) {\n return null;\n }\n\n if (updateNode.__typename === \"ErrorAccessDenied\") {\n return updateNode;\n }\n\n if (updateNode.__typename === \"ErrorNotExist\") {\n return updateNode;\n }\n\n if (!updateNode.updateNode) {\n return null;\n }\n\n const result = await gqlNodeToExternalNodeFull(\n updateNode.updateNode,\n this.#keys\n );\n\n return {\n __typename: \"SuccessResponse\",\n data: result\n };\n }\n\n async fileContent({\n fileId,\n onDownloadProgress,\n progressDecrypt,\n signal\n }: {\n fileId: string;\n onDownloadProgress?: (progress: DownloadProgress) => void;\n progressDecrypt?: ProgressCallback;\n signal?: AbortSignal;\n }): Promise<\n SuccessResponse<Uint8Array> | ErrorAccessDenied | ErrorBasic | null\n > {\n const { fileContent } = await this.#thunder(\"query\", {\n scalars: {\n Bytes: {\n decode: (e: unknown) => {\n console.log(e, typeof e);\n return Uint8Array.from([1, 2, 3]);\n },\n encode: (e: unknown) => (e as Uint8Array).toString()\n }\n }\n })({\n fileContent: [\n { fileId },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on FileContentResponse\": {\n __typename: true,\n file: {\n \"...on FileContentCloud\": {\n __typename: true,\n parts: {\n contentUrl: true,\n order: true,\n md5: true\n },\n key: true,\n publicKey: true,\n totalSize: true,\n md5: true,\n md5Encrypted: true\n },\n \"...on FileContentLite\": {\n __typename: true,\n content: true,\n id: true,\n key: true,\n publicKey: true,\n md5: true,\n md5Encrypted: true,\n totalSize: true\n },\n \"...on FileContentReceivedMail\": {\n __typename: true,\n maybeParts: {\n contentUrl: true,\n order: true,\n md5: true\n },\n maybeContent: true,\n key: true,\n senderPublicKey: true,\n totalSize: true,\n md5: true,\n md5Encrypted: true\n },\n \"...on FileContentSentMail\": {\n __typename: true,\n maybeParts: {\n contentUrl: true,\n order: true,\n md5: true\n },\n maybeContent: true,\n key: true,\n totalSize: true,\n md5: true,\n md5Encrypted: true\n }\n }\n }\n }\n ]\n });\n\n if (!fileContent) {\n return null;\n }\n\n if (fileContent.__typename === \"ErrorAccessDenied\") {\n return fileContent;\n }\n\n if (fileContent.__typename === \"ErrorBasic\") {\n return fileContent;\n }\n\n const file = fileContent.file;\n if (!file) {\n return null;\n }\n\n const progressParts: Record<number, DownloadProgress> = {};\n const onProgress = (\n part: number,\n progressEvent: DownloadProgress\n ): void => {\n progressParts[part] = progressEvent;\n const transferredBytes = Object.values(progressParts).reduce(\n (prv, cur) => prv + cur.transferredBytes,\n 0\n );\n const totalBytes = Number(file.totalSize);\n onDownloadProgress?.({\n percent: transferredBytes / totalBytes,\n totalBytes,\n transferredBytes\n });\n };\n\n const encryptedContentFromParts = async (\n fileParts: FileContentPart[]\n ): Promise<Uint8Array> => {\n const parts = new Array<{ data: Uint8Array; order: number }>();\n\n const byPart = async (part: FileContentPart): Promise<void> => {\n const buf = new Uint8Array(\n await ky\n .get(part.contentUrl, {\n timeout: false,\n onDownloadProgress: pr => onProgress(part.order, pr),\n signal: signal\n })\n .arrayBuffer()\n );\n const md5Part = await md5(buf);\n if (md5Part !== part.md5) {\n throw new Error(\n `Invalid md5 for part ${part.order} of file ${fileId}`\n );\n }\n parts.push({\n data: buf,\n order: part.order\n });\n };\n\n await promiseAllLimit(\n 3,\n fileParts.map(p => (): Promise<void> => byPart(p))\n );\n\n return concatenate(\n ...parts.sort((a, b) => a.order - b.order).map(p => p.data)\n );\n };\n\n const finalize = async (\n encryptedContent: Uint8Array\n ): Promise<Uint8Array> => {\n // const md5Encrypted = await firstValueFrom(md5(of(encryptedContent)));\n const md5Encrypted = await md5(encryptedContent);\n\n if (md5Encrypted !== file.md5Encrypted) {\n throw new Error(`Encrypted content does not match`);\n }\n\n const key = decryptCryptoBox(\n sodium.from_hex(file.key),\n file.__typename === \"FileContentReceivedMail\"\n ? file.senderPublicKey\n : file.__typename === \"FileContentCloud\"\n ? file.publicKey\n : this.#keys.publicKey,\n this.#keys.privateKey\n );\n\n const src = await decrypt(key, encryptedContent, progressDecrypt, signal);\n\n // const md5Content = await firstValueFrom(md5(of(src)));\n const md5Content = await md5(src);\n\n if (md5Content !== file.md5) {\n throw new Error(`Content does not match`);\n }\n\n return uncompress(src);\n };\n\n const encryptedContent =\n file.__typename === \"FileContentLite\"\n ? file.content\n : file.__typename === \"FileContentCloud\"\n ? await encryptedContentFromParts(file.parts)\n : file.maybeContent\n ? file.maybeContent\n : file.maybeParts\n ? await encryptedContentFromParts(file.maybeParts)\n : null;\n\n if (!encryptedContent) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: await finalize(encryptedContent)\n };\n }\n\n async deleteFile({\n fileId,\n nodeId\n }: {\n fileId: string;\n nodeId: string;\n }): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { deleteFile } = await this.#thunder(\"mutation\")({\n deleteFile: [\n {\n fileId,\n nodeId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on DeleteFileResponse\": {\n __typename: true,\n deleteFile: true\n }\n }\n ]\n });\n\n if (!deleteFile) {\n return null;\n }\n\n if (deleteFile.__typename === \"ErrorAccessDenied\") {\n return deleteFile;\n }\n\n if (deleteFile.__typename === \"ErrorNotExist\") {\n return deleteFile;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteFile.deleteFile\n };\n }\n\n async deleteNode({\n nodeId\n }: {\n nodeId: string;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { deleteNode } = await this.#thunder(\"mutation\")({\n deleteNode: [\n {\n id: nodeId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on DeleteNodeResponse\": {\n __typename: true,\n deleteNode: true\n }\n }\n ]\n });\n\n if (!deleteNode) {\n return null;\n }\n\n if (deleteNode.__typename === \"ErrorAccessDenied\") {\n return deleteNode;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: deleteNode.deleteNode\n };\n }\n\n async emptyTrash(): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | null\n > {\n const { emptyCloudTrash } = await this.#thunder(\"mutation\")({\n emptyCloudTrash: {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on EmptyCloudTrashResponse\": {\n __typename: true,\n emptyCloudTrash: true\n }\n }\n });\n\n if (!emptyCloudTrash) {\n return null;\n }\n\n if (emptyCloudTrash.__typename === \"ErrorAccessDenied\") {\n return emptyCloudTrash;\n }\n\n if (!emptyCloudTrash.emptyCloudTrash) {\n return null;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: emptyCloudTrash.emptyCloudTrash\n };\n }\n\n async recoverNode(\n id: string\n ): Promise<\n SuccessResponse<boolean> | ErrorAccessDenied | ErrorNotExist | null\n > {\n const { recoverNode } = await this.#thunder(\"mutation\")({\n recoverNode: [\n { id },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on RecoverNodeResponse\": {\n __typename: true,\n recoverNode: true\n }\n }\n ]\n });\n\n if (!recoverNode) {\n return null;\n }\n\n if (recoverNode.__typename === \"ErrorAccessDenied\") {\n return recoverNode;\n }\n\n if (recoverNode.__typename === \"ErrorNotExist\") {\n return recoverNode;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: recoverNode.recoverNode ?? false\n };\n }\n\n async moveNodes({\n nodeIds,\n parentNodeId\n }: {\n nodeIds: string[];\n parentNodeId?: string | null | undefined;\n }): Promise<SuccessResponse<boolean> | ErrorAccessDenied | null> {\n const { moveNodes } = await this.#thunder(\"mutation\")({\n moveNodes: [\n {\n nodeIds,\n parentNodeId\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on MoveNodesResponse\": {\n __typename: true,\n moveNodes: true\n }\n }\n ]\n });\n\n if (!moveNodes) {\n return null;\n }\n\n if (moveNodes.__typename === \"ErrorAccessDenied\") {\n return moveNodes;\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: moveNodes.moveNodes ?? false\n };\n }\n\n async saveInCloud({\n fileId,\n name,\n nodeId\n }: {\n fileId: string;\n name: string;\n nodeId?: string;\n }): Promise<\n | SuccessResponse<NodeFull>\n | ErrorAccessDenied\n | ErrorBasic\n | ErrorLimit\n | ErrorNotFound\n | ErrorNotExist\n | null\n > {\n if (nodeId && !nodesCache.has(nodeId)) {\n await this.node({ id: nodeId });\n if (!nodesCache.has(nodeId)) {\n return {\n __typename: \"ErrorBasic\",\n message: `The node ${nodeId} does not exists`\n };\n }\n }\n\n let key = \"\";\n\n const file = filesCache.get(fileId);\n\n if (!file) {\n await this.fileMetadata({ id: fileId });\n const file = filesCache.get(fileId) ?? null;\n if (!file) {\n const receivedMails = await this.#client.mail.receivedMails();\n if (!receivedMails) {\n return null;\n }\n if (receivedMails.__typename !== \"SuccessResponse\") {\n return null;\n }\n const mail = receivedMails.data.find(m =>\n m.files.some(f => f.id === fileId)\n );\n\n if (!mail) {\n return {\n __typename: \"ErrorBasic\",\n message: `Can't find mail with the file ${fileId}`\n };\n }\n\n const fileMail = mail.files.find(f => f.id === fileId);\n\n if (!fileMail) {\n return {\n __typename: \"ErrorBasic\",\n message: `Can't find mail with the file ${fileId}`\n };\n }\n\n const fileKey = decryptCryptoBox(\n sodium.from_hex(fileMail.key),\n mail.sender.publicKey,\n this.#keys.privateKey\n );\n\n key = sodium.to_hex(fileKey);\n } else {\n key = file.key;\n }\n } else {\n key = file.key;\n }\n\n if (key === \"\") {\n return {\n __typename: \"ErrorBasic\",\n message: \"Unexpected error 3\"\n };\n }\n\n key = sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(key),\n this.#keys.publicKey,\n this.#keys.privateKey\n )\n );\n\n const nameKey = secretstreamKeygen();\n const encryptedName = await encryptName(name, sodium.to_hex(nameKey));\n const encryptedNameKey = sodium.to_hex(\n encryptCryptoBox(nameKey, this.#keys.publicKey, this.#keys.privateKey)\n );\n\n const { saveInCloud } = await this.#thunder(\"mutation\")({\n saveInCloud: [\n {\n fileId,\n key,\n nodeId,\n filename: encryptedName,\n nameKey: encryptedNameKey\n },\n {\n \"...on ErrorAccessDenied\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotFound\": {\n __typename: true,\n message: true\n },\n \"...on ErrorLimit\": {\n __typename: true,\n message: true\n },\n \"...on ErrorBasic\": {\n __typename: true,\n message: true\n },\n \"...on ErrorNotExist\": {\n __typename: true,\n message: true\n },\n \"...on SaveInCloudResponse\": {\n __typename: true,\n saveInCloud: nodeFullSelector\n }\n }\n ]\n });\n\n if (!saveInCloud) {\n return null;\n }\n\n if (saveInCloud.__typename === \"ErrorAccessDenied\") {\n return saveInCloud;\n }\n\n if (saveInCloud.__typename === \"ErrorNotFound\") {\n return saveInCloud;\n }\n if (saveInCloud.__typename === \"ErrorLimit\") {\n return saveInCloud;\n }\n\n if (saveInCloud.__typename === \"ErrorBasic\") {\n return saveInCloud;\n }\n\n if (saveInCloud.__typename === \"ErrorNotExist\") {\n return saveInCloud;\n }\n\n if (!saveInCloud.saveInCloud) {\n return null;\n }\n\n const node = await gqlNodeToExternalNodeFull(\n saveInCloud.saveInCloud,\n this.#keys\n );\n\n const me = node.parent?.users.find(\n ([u]) => u.publicKey === this.#keys.publicKey\n );\n\n if (me && [\"admin\", \"write\"].includes(me[1])) {\n const others =\n node.parent?.users.filter(\n ([u]) => u.publicKey !== this.#keys.publicKey\n ) ?? [];\n\n await Promise.all(\n others.map(([u, rights]) =>\n this.shareNode({\n nodeId: node.id,\n rights,\n userId: u.id\n })\n )\n );\n }\n\n return {\n __typename: \"SuccessResponse\",\n data: node\n };\n }\n\n private perNode = async (\n nodeId: string,\n publicKey: string\n ): Promise<NameKeyInput | null> => {\n let node = nodesCache.get(nodeId);\n\n if (!node) {\n await this.node({ id: nodeId });\n node = nodesCache.get(nodeId);\n\n if (!node) {\n return null;\n }\n }\n\n const nameKey = node.access?.nameKey;\n\n if (!nameKey) {\n return null;\n }\n\n return {\n id: node.id,\n nameKey: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(nameKey),\n publicKey,\n this.#keys.privateKey\n )\n ),\n files:\n \"history\" in node\n ? node.history.map(f => ({\n id: f.id,\n key: sodium.to_hex(\n encryptCryptoBox(\n sodium.from_hex(f.key),\n publicKey,\n this.#keys.privateKey\n )\n )\n }))\n : []\n };\n };\n}\n"]}
@@ -1,2 +1,2 @@
1
- import{c as z,d as n,e as K,f as v}from"../chunk-KMTF2BZE.js";var P,l,p;import j from"axios";import O from"ky";import{encryptName as k}from"../index.js";import{nodesCache as R,filesCache as H}from"../cache.js";import{secretstreamKeygen as U}from"../crypto/file.js";import{decryptCryptoBox as $}from"../crypto/index.js";import{encryptCryptoBox as C}from"../crypto/index.js";import{compress as W,uncompress as J}from"../minify/index.js";import{sodium as f}from"../sodium.js";import{enumerate as Q,chunks as G,promiseAllLimit as q,concatenate as V}from"../utils/utils.js";import{md5 as T}from"../worker/md5.js";import{decrypt as X,encrypt as Y}from"../worker/sodium.js";import{gqlFileToExternal as Z}from"./convert/file.js";import{gqlNodeFullToInternalFull as ee,gqlNodeToExternal as L,gqlNodeToExternalNodeFull as I,internalNodeToNode as re}from"./convert/node.js";import{fileSelector as te,nodeFullSelector as x,nodeSelector as M}from"./types/selectors.js";class Ne{constructor(r,t,e){K(this,P,void 0);K(this,l,void 0);K(this,p,void 0);z(this,"perNode",async(r,t)=>{var i;let e=R.get(r);if(!e&&(await this.node({id:r}),e=R.get(r),!e))return null;const o=(i=e.access)==null?void 0:i.nameKey;return o?{id:e.id,nameKey:f.to_hex(C(f.from_hex(o),t,n(this,l).privateKey)),files:"history"in e?e.history.map(s=>({id:s.id,key:f.to_hex(C(f.from_hex(s.key),t,n(this,l).privateKey))})):[]}:null});v(this,P,r),v(this,l,t),v(this,p,e)}async addFileToHistory({fileId:r,nodeId:t}){const{addFileToHistory:e}=await n(this,p).call(this,"mutation")({addFileToHistory:[{fileId:r,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on AddFileToHistoryResponse":{__typename:!0,addFileToHistory:x}}]});if(!e)return null;if(e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorNotExist")return e;const o=await ee(e.addFileToHistory,n(this,l)),i=o.history.find(c=>c.id===r);if(i){const c=o.users.filter(([m])=>m.publicKey!==n(this,l).publicKey),u={fileId:i.id,users:c.map(([m])=>({id:m.id,key:f.to_hex(C(f.from_hex(i.key),n(this,l).publicKey,n(this,l).privateKey))}))};await n(this,p).call(this,"mutation")({shareFileInHistory:[{input:u,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareFileInHistoryResponse":{__typename:!0,shareFileInHistory:!0}}]})}const s=re(o);return{__typename:"SuccessResponse",data:s}}async uploadFile({file:r,encryptProgress:t,uploadProgress:e,signal:o}){const i=U(),s=r instanceof File?new Uint8Array(await r.arrayBuffer()):r,c=W(s),{data:u,md5:m,md5Encrypted:h}=await Y(i,c,t,o),A=C(i,n(this,l).publicKey,n(this,l).privateKey),{uploadFile:a}=await n(this,p).call(this,"mutation",{scalars:{Json:{encode:d=>JSON.stringify(d),decode:d=>JSON.parse(d)},DateTime:{decode:d=>new Date(d),encode:d=>d.toISOString()},BigInt:{decode:d=>BigInt(d),encode:d=>d.toString()}}})({uploadFile:[{fileSize:u.byteLength,fileSizeBefore:s.byteLength,fileKey:f.to_hex(A),md5Encrypted:h,md5:m},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorLimit":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UploadFileResponse":{__typename:!0,uploadFile:{fileId:!0,filePartSize:!0,parts:{fields:!0,order:!0,url:!0}}}}]});if(!a)return null;if(a.__typename==="ErrorAccessDenied"||a.__typename==="ErrorLimit"||a.__typename==="ErrorNotFound")return a;if(!a.uploadFile)return null;if(e==null||e({total:u.byteLength,current:0,percent:0}),a.uploadFile.parts.length===0)return e==null||e({total:u.byteLength,current:u.byteLength,percent:1}),{__typename:"SuccessResponse",data:a.uploadFile.fileId};const g=async(d,N)=>{if(!a.uploadFile)return null;const{uploadFilePartEnd:E}=await n(this,p).call(this,"mutation")({uploadFilePartEnd:[{fileId:a.uploadFile.fileId,md5:d,order:N},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on UploadFilePartEndResponse":{__typename:!0,uploadFilePartEnd:!0}}]});return E?E.__typename==="ErrorAccessDenied"?E:{__typename:"SuccessResponse",data:E.uploadFilePartEnd}:null},w=async()=>{if(!a.uploadFile)return null;const{uploadFileEnd:d}=await n(this,p).call(this,"mutation")({uploadFileEnd:[{fileId:a.uploadFile.fileId},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UploadFileEndResponse":{__typename:!0,uploadFileEnd:!0}}]});return d?d.__typename==="ErrorAccessDenied"||d.__typename==="ErrorNotFound"?d:d.uploadFileEnd?{__typename:"SuccessResponse",data:d.uploadFileEnd}:null:null},y=new Array;for(const[d,N]of Q(G(u,Number(a.uploadFile.filePartSize))))y.push({order:d+1,data:N,md5:await T(N)});const _={},F=(d,N)=>{_[d]=N;const E=Object.values(_).reduce((b,B)=>b+B.loaded,0);e==null||e({percent:E/u.byteLength,total:u.byteLength,current:E})},S=async d=>{if(!a.uploadFile)return;const N=new FormData,E=y.find(b=>b.order===d.order);if(!!E){for(const[b,B]of Object.entries(d.fields))N.append(b,B);N.append("file",new Blob([E.data]),`${a.uploadFile.fileId}-${E.order}`),await j.post(d.url,N,{onUploadProgress:b=>F(d.order,b),signal:o}),await g(E.md5,E.order)}};if(!a.uploadFile)return null;await q(3,a.uploadFile.parts.map(d=>()=>S(d)));const D=await w();return D?D.__typename==="ErrorAccessDenied"||D.__typename==="ErrorNotFound"?D:{__typename:"SuccessResponse",data:D.data}:null}async uploadFileInCloud({file:r,name:t,nodeId:e,encryptProgress:o,uploadProgress:i,signal:s}){const c=await this.uploadFile({file:r,encryptProgress:o,uploadProgress:i,signal:s});if(!c)return null;if(c.__typename==="ErrorAccessDenied"||c.__typename==="ErrorLimit"||c.__typename==="ErrorNotFound")return c;const u=await this.saveInCloud({fileId:c.data,name:t,nodeId:e});return u?u.__typename==="ErrorAccessDenied"||u.__typename==="ErrorBasic"||u.__typename==="ErrorLimit"||u.__typename==="ErrorNotFound"||u.__typename==="ErrorNotExist"?u:{__typename:"SuccessResponse",data:u.data}:null}async deletedNodes(){const{deletedNodes:r}=await n(this,p).call(this,"query")({deletedNodes:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeletedNodesResponse":{__typename:!0,deletedNodes:M}}});if(!r)return null;if(r.__typename==="ErrorAccessDenied")return r;const t=new Array;for(const e of r.deletedNodes)t.push(await L(e,n(this,l)));return{__typename:"SuccessResponse",data:t}}async sharedNodes(){const{sharedNodes:r}=await n(this,p).call(this,"query")({sharedNodes:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on SharedNodesResponse":{__typename:!0,sharedNodes:M}}});if(!r)return null;if(r.__typename==="ErrorAccessDenied")return r;const t=new Array;for(const e of r.sharedNodes)t.push(await L(e,n(this,l)));return{__typename:"SuccessResponse",data:t}}async nodesSharedWithMe(r){const{nodesSharedWithMe:t}=await n(this,p).call(this,"query")({nodesSharedWithMe:[{type:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on NodesSharedWithMeResponse":{__typename:!0,nodesSharedWithMe:M}}]});if(!t)return null;if(t.__typename==="ErrorAccessDenied")return t;const e=new Array;for(const o of t.nodesSharedWithMe)e.push(await L(o,n(this,l)));return{__typename:"SuccessResponse",data:e}}async deleteNodeSharing({nodeId:r,userId:t}){const{deleteNodeSharing:e}=await n(this,p).call(this,"mutation")({deleteNodeSharing:[{nodeId:r,userId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeSharingResponse":{__typename:!0,deleteNodeSharing:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:{__typename:"SuccessResponse",data:e.deleteNodeSharing}:null}async duplicateNode({nodeId:r,folderId:t,customName:e}){var s;let o=R.get(r);if(!o&&(await this.node({id:r}),o=R.get(r),!o))throw new Error(`Node (${r}) does not exists`);if(!((s=o.access)!=null&&s.nameKey))throw new Error(`Can't have access to node ${r}`);e=e?await k(e,o.access.nameKey):null;const{duplicateNode:i}=await n(this,p).call(this,"mutation")({duplicateNode:[{nodeId:r,folderId:t,customName:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DuplicateNodeResponse":{__typename:!0,duplicateNode:!0}}]});return i?i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorNotFound"?i:{__typename:"SuccessResponse",data:i.duplicateNode}:null}async deleteNodeCloudTrash({ids:r}){var e;const{deleteNodeCloudTrash:t}=await n(this,p).call(this,"mutation")({deleteNodeCloudTrash:[{ids:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeCloudTrashResponse":{__typename:!0,deleteNodeCloudTrash:!0}}]});return t?t.__typename==="ErrorAccessDenied"?t:{__typename:"SuccessResponse",data:(e=t.deleteNodeCloudTrash)!=null?e:!1}:null}async createFolder({name:r,parentFolderId:t}){var m,h,A;const e=U(),o=await k(r,f.to_hex(e)),i=C(e,n(this,l).publicKey,n(this,l).privateKey),{createFolder:s}=await n(this,p).call(this,"mutation")({createFolder:[{name:o,parentFolderId:t,key:f.to_hex(i)},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on CreateFolderResponse":{__typename:!0,createFolder:x}}]});if(!s)return null;if(s.__typename==="ErrorAccessDenied"||s.__typename==="ErrorNotExist")return s;if(!s.createFolder)return null;const c=await I(s.createFolder,n(this,l)),u=(A=(h=(m=c.parent)==null?void 0:m.users)==null?void 0:h.filter(([a])=>a.publicKey!==n(this,l).publicKey))!=null?A:[];return u.length&&await Promise.all(u.map(([a,g])=>this.shareNode({nodeId:c.id,rights:g,userId:a.id}))),{__typename:"SuccessResponse",data:c}}async node({id:r,deleted:t}={}){const{node:e}=await n(this,p).call(this,"query")({node:[{deleted:t,id:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on NodeResponse":{__typename:!0,node:x}}]});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;if(!e.node)return null;const o=await I(e.node,n(this,l));return{__typename:"SuccessResponse",data:o}}async fileMetadata({id:r}){const{file:t}=await n(this,p).call(this,"query")({file:[{id:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on FileQueryResponse":{__typename:!0,file:te}}]});if(!t)return null;if(t.__typename==="ErrorAccessDenied")return t;if(!t.file)return null;const e=Z(t.file,n(this,l));return{__typename:"SuccessResponse",data:e}}async shareNode({nodeId:r,userId:t,rights:e}){var u;const o=await n(this,P).user({userId:t,withPublicKey:!0});if(!o||o.__typename==="ErrorNotFound")return o;const{shareNode:i}=await n(this,p).call(this,"mutation")({shareNode:[{nodeId:r,userId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareNodeResponse":{__typename:!0,nodes:!0}}]});if(!i)return null;if(i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorNotFound")return i;const s={nodes:[]};for(const m of i.nodes){const h=await this.perNode(m,o.data.publicKey);h&&s.nodes.push(h)}const{shareNodeFinish:c}=await n(this,p).call(this,"mutation")({shareNodeFinish:[{rights:e,userId:t,shareNodes:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareNodeFinishResponse":{__typename:!0,shareNodeFinish:!0}}]});return c?c.__typename==="ErrorAccessDenied"||c.__typename==="ErrorNotFound"?c:{__typename:"SuccessResponse",data:(u=c.shareNodeFinish)!=null?u:!1}:null}async updateNode({nodeId:r,name:t,isFavorite:e,deletedAt:o}){var u,m;let i=R.get(r);if(!i&&(await this.node({id:r}),i=R.get(r),!i))throw`Can't find Node ${r}`;if(!((u=i.access)!=null&&u.nameKey))throw new Error(`Can't have access to node ${r}`);t=t?(m=i.access)!=null&&m.nameKey?await k(t,i.access.nameKey):t:null;const{updateNode:s}=await n(this,p).call(this,"mutation")({updateNode:[{nodeId:r,name:t,isFavorite:e,deletedAt:o},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on UpdateNodeResponse":{__typename:!0,updateNode:x}}]});if(!s)return null;if(s.__typename==="ErrorAccessDenied"||s.__typename==="ErrorNotExist")return s;if(!s.updateNode)return null;const c=await I(s.updateNode,n(this,l));return{__typename:"SuccessResponse",data:c}}async fileContent({fileId:r,onDownloadProgress:t,progressDecrypt:e,signal:o}){const{fileContent:i}=await n(this,p).call(this,"query",{scalars:{Bytes:{decode:a=>(console.log(a,typeof a),Uint8Array.from([1,2,3])),encode:a=>a.toString()}}})({fileContent:[{fileId:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on FileContentResponse":{__typename:!0,file:{"...on FileContentCloud":{__typename:!0,parts:{contentUrl:!0,order:!0,md5:!0},key:!0,publicKey:!0,totalSize:!0,md5:!0,md5Encrypted:!0},"...on FileContentLite":{__typename:!0,content:!0,id:!0,key:!0,publicKey:!0,md5:!0,md5Encrypted:!0,totalSize:!0},"...on FileContentReceivedMail":{__typename:!0,maybeParts:{contentUrl:!0,order:!0,md5:!0},maybeContent:!0,key:!0,senderPublicKey:!0,totalSize:!0,md5:!0,md5Encrypted:!0},"...on FileContentSentMail":{__typename:!0,maybeParts:{contentUrl:!0,order:!0,md5:!0},maybeContent:!0,key:!0,totalSize:!0,md5:!0,md5Encrypted:!0}}}}]});if(!i)return null;if(i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorBasic")return i;const s=i.file;if(!s)return null;const c={},u=(a,g)=>{c[a]=g;const w=Object.values(c).reduce((_,F)=>_+F.transferredBytes,0),y=Number(s.totalSize);t==null||t({percent:w/y,totalBytes:y,transferredBytes:w})},m=async a=>{const g=new Array,w=async y=>{const _=new Uint8Array(await O.get(y.contentUrl,{timeout:!1,onDownloadProgress:S=>u(y.order,S),signal:o}).arrayBuffer());if(await T(_)!==y.md5)throw new Error(`Invalid md5 for part ${y.order} of file ${r}`);g.push({data:_,order:y.order})};return await q(3,a.map(y=>()=>w(y))),V(...g.sort((y,_)=>y.order-_.order).map(y=>y.data))},h=async a=>{if(await T(a)!==s.md5Encrypted)throw new Error("Encrypted content does not match");const w=$(f.from_hex(s.key),s.__typename==="FileContentReceivedMail"?s.senderPublicKey:s.__typename==="FileContentCloud"?s.publicKey:n(this,l).publicKey,n(this,l).privateKey),y=await X(w,a,e,o);if(await T(y)!==s.md5)throw new Error("Content does not match");return J(y)},A=s.__typename==="FileContentLite"?s.content:s.__typename==="FileContentCloud"?await m(s.parts):s.maybeContent?s.maybeContent:s.maybeParts?await m(s.maybeParts):null;return A?{__typename:"SuccessResponse",data:await h(A)}:null}async deleteFile({fileId:r,nodeId:t}){const{deleteFile:e}=await n(this,p).call(this,"mutation")({deleteFile:[{fileId:r,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on DeleteFileResponse":{__typename:!0,deleteFile:!0}}]});return e?e.__typename==="ErrorAccessDenied"||e.__typename==="ErrorNotExist"?e:{__typename:"SuccessResponse",data:e.deleteFile}:null}async deleteNode({nodeId:r}){const{deleteNode:t}=await n(this,p).call(this,"mutation")({deleteNode:[{id:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeResponse":{__typename:!0,deleteNode:!0}}]});return t?t.__typename==="ErrorAccessDenied"?t:{__typename:"SuccessResponse",data:t.deleteNode}:null}async emptyTrash(){const{emptyCloudTrash:r}=await n(this,p).call(this,"mutation")({emptyCloudTrash:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on EmptyCloudTrashResponse":{__typename:!0,emptyCloudTrash:!0}}});return r?r.__typename==="ErrorAccessDenied"?r:r.emptyCloudTrash?{__typename:"SuccessResponse",data:r.emptyCloudTrash}:null:null}async recoverNode(r){var e;const{recoverNode:t}=await n(this,p).call(this,"mutation")({recoverNode:[{id:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on RecoverNodeResponse":{__typename:!0,recoverNode:!0}}]});return t?t.__typename==="ErrorAccessDenied"||t.__typename==="ErrorNotExist"?t:{__typename:"SuccessResponse",data:(e=t.recoverNode)!=null?e:!1}:null}async moveNodes({nodeIds:r,parentNodeId:t}){var o;const{moveNodes:e}=await n(this,p).call(this,"mutation")({moveNodes:[{nodeIds:r,parentNodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on MoveNodesResponse":{__typename:!0,moveNodes:!0}}]});return e?e.__typename==="ErrorAccessDenied"?e:{__typename:"SuccessResponse",data:(o=e.moveNodes)!=null?o:!1}:null}async saveInCloud({fileId:r,name:t,nodeId:e}){var a,g,w,y;if(e&&!R.has(e)&&(await this.node({id:e}),!R.has(e)))return{__typename:"ErrorBasic",message:`The node ${e} does not exists`};let o="";const i=H.get(r);if(i)o=i.key;else{await this.fileMetadata({id:r});const _=(a=H.get(r))!=null?a:null;if(_)o=_.key;else{const F=await n(this,P).mail.receivedMails();if(!F||F.__typename!=="SuccessResponse")return null;const S=F.data.find(N=>N.files.some(E=>E.id===r));if(!S)return{__typename:"ErrorBasic",message:`Can't find mail with the file ${r}`};const D=S.files.find(N=>N.id===r);if(!D)return{__typename:"ErrorBasic",message:`Can't find mail with the file ${r}`};const d=$(f.from_hex(D.key),S.sender.publicKey,n(this,l).privateKey);o=f.to_hex(d)}}if(o==="")return{__typename:"ErrorBasic",message:"Unexpected error 3"};o=f.to_hex(C(f.from_hex(o),n(this,l).publicKey,n(this,l).privateKey));const s=U(),c=await k(t,f.to_hex(s)),u=f.to_hex(C(s,n(this,l).publicKey,n(this,l).privateKey)),{saveInCloud:m}=await n(this,p).call(this,"mutation")({saveInCloud:[{fileId:r,key:o,nodeId:e,filename:c,nameKey:u},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ErrorLimit":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on SaveInCloudResponse":{__typename:!0,saveInCloud:x}}]});if(!m)return null;if(m.__typename==="ErrorAccessDenied"||m.__typename==="ErrorNotFound"||m.__typename==="ErrorLimit"||m.__typename==="ErrorBasic"||m.__typename==="ErrorNotExist")return m;if(!m.saveInCloud)return null;const h=await I(m.saveInCloud,n(this,l)),A=(g=h.parent)==null?void 0:g.users.find(([_])=>_.publicKey===n(this,l).publicKey);if(A&&["admin","write"].includes(A[1])){const _=(y=(w=h.parent)==null?void 0:w.users.filter(([F])=>F.publicKey!==n(this,l).publicKey))!=null?y:[];await Promise.all(_.map(([F,S])=>this.shareNode({nodeId:h.id,rights:S,userId:F.id})))}return{__typename:"SuccessResponse",data:h}}}P=new WeakMap,l=new WeakMap,p=new WeakMap;export{Ne as SecrecyCloudClient};
1
+ import{c as $,d as n,e as k,f as T,h as y}from"../chunk-UPFDSEKI.js";var K,m,_;import W from"axios";import J from"ky";import{encryptName as I}from"../index.js";import{nodesCache as C,filesCache as q}from"../cache.js";import{secretstreamKeygen as M}from"../crypto/file.js";import{decryptCryptoBox as j}from"../crypto/index.js";import{encryptCryptoBox as x}from"../crypto/index.js";import{compress as Q,uncompress as G}from"../minify/index.js";import{sodium as h}from"../sodium.js";import{enumerate as V,chunks as X,promiseAllLimit as O,concatenate as Y}from"../utils/utils.js";import{md5 as B}from"../worker/md5.js";import{decrypt as Z,encrypt as ee}from"../worker/sodium.js";import{gqlFileToExternal as re}from"./convert/file.js";import{gqlNodeFullToInternalFull as te,gqlNodeToExternal as z,gqlNodeToExternalNodeFull as U,internalNodeToNode as ne}from"./convert/node.js";import{fileSelector as se,nodeFullSelector as v,nodeSelector as H}from"./types/selectors.js";class Fe{constructor(e,t,r){k(this,K,void 0);k(this,m,void 0);k(this,_,void 0);$(this,"perNode",(e,t)=>y(this,null,function*(){var c;let r=C.get(e);if(!r&&(yield this.node({id:e}),r=C.get(e),!r))return null;const s=(c=r.access)==null?void 0:c.nameKey;return s?{id:r.id,nameKey:h.to_hex(x(h.from_hex(s),t,n(this,m).privateKey)),files:"history"in r?r.history.map(i=>({id:i.id,key:h.to_hex(x(h.from_hex(i.key),t,n(this,m).privateKey))})):[]}:null}));T(this,K,e),T(this,m,t),T(this,_,r)}addFileToHistory(r){return y(this,arguments,function*({fileId:e,nodeId:t}){const{addFileToHistory:s}=yield n(this,_).call(this,"mutation")({addFileToHistory:[{fileId:e,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on AddFileToHistoryResponse":{__typename:!0,addFileToHistory:v}}]});if(!s)return null;if(s.__typename==="ErrorAccessDenied"||s.__typename==="ErrorNotExist")return s;const c=yield te(s.addFileToHistory,n(this,m)),i=c.history.find(l=>l.id===e);if(i){const l=c.users.filter(([p])=>p.publicKey!==n(this,m).publicKey),u={fileId:i.id,users:l.map(([p])=>({id:p.id,key:h.to_hex(x(h.from_hex(i.key),n(this,m).publicKey,n(this,m).privateKey))}))};yield n(this,_).call(this,"mutation")({shareFileInHistory:[{input:u,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareFileInHistoryResponse":{__typename:!0,shareFileInHistory:!0}}]})}const o=ne(c);return{__typename:"SuccessResponse",data:o}})}uploadFile(c){return y(this,arguments,function*({file:e,encryptProgress:t,uploadProgress:r,signal:s}){const i=M(),o=e instanceof File?new Uint8Array(yield e.arrayBuffer()):e,l=Q(o),{data:u,md5:p,md5Encrypted:g}=yield ee(i,l,t,s),D=x(i,n(this,m).publicKey,n(this,m).privateKey),{uploadFile:a}=yield n(this,_).call(this,"mutation",{scalars:{Json:{encode:d=>JSON.stringify(d),decode:d=>JSON.parse(d)},DateTime:{decode:d=>new Date(d),encode:d=>d.toISOString()},BigInt:{decode:d=>BigInt(d),encode:d=>d.toString()}}})({uploadFile:[{fileSize:u.byteLength,fileSizeBefore:o.byteLength,fileKey:h.to_hex(D),md5Encrypted:g,md5:p},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorLimit":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UploadFileResponse":{__typename:!0,uploadFile:{fileId:!0,filePartSize:!0,parts:{fields:!0,order:!0,url:!0}}}}]});if(!a)return null;if(a.__typename==="ErrorAccessDenied"||a.__typename==="ErrorLimit"||a.__typename==="ErrorNotFound")return a;if(!a.uploadFile)return null;if(r==null||r({total:u.byteLength,current:0,percent:0}),a.uploadFile.parts.length===0)return r==null||r({total:u.byteLength,current:u.byteLength,percent:1}),{__typename:"SuccessResponse",data:a.uploadFile.fileId};const w=(d,F)=>y(this,null,function*(){if(!a.uploadFile)return null;const{uploadFilePartEnd:N}=yield n(this,_).call(this,"mutation")({uploadFilePartEnd:[{fileId:a.uploadFile.fileId,md5:d,order:F},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on UploadFilePartEndResponse":{__typename:!0,uploadFilePartEnd:!0}}]});return N?N.__typename==="ErrorAccessDenied"?N:{__typename:"SuccessResponse",data:N.uploadFilePartEnd}:null}),S=()=>y(this,null,function*(){if(!a.uploadFile)return null;const{uploadFileEnd:d}=yield n(this,_).call(this,"mutation")({uploadFileEnd:[{fileId:a.uploadFile.fileId},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on UploadFileEndResponse":{__typename:!0,uploadFileEnd:!0}}]});return d?d.__typename==="ErrorAccessDenied"||d.__typename==="ErrorNotFound"?d:d.uploadFileEnd?{__typename:"SuccessResponse",data:d.uploadFileEnd}:null:null}),f=new Array;for(const[d,F]of V(X(u,Number(a.uploadFile.filePartSize))))f.push({order:d+1,data:F,md5:yield B(F)});const E={},A=(d,F)=>{E[d]=F;const N=Object.values(E).reduce((P,L)=>P+L.loaded,0);r==null||r({percent:N/u.byteLength,total:u.byteLength,current:N})},R=d=>y(this,null,function*(){if(!a.uploadFile)return;const F=new FormData,N=f.find(P=>P.order===d.order);if(!!N){for(const[P,L]of Object.entries(d.fields))F.append(P,L);F.append("file",new Blob([N.data]),`${a.uploadFile.fileId}-${N.order}`),yield W.post(d.url,F,{onUploadProgress:P=>A(d.order,P),signal:s}),yield w(N.md5,N.order)}});if(!a.uploadFile)return null;yield O(3,a.uploadFile.parts.map(d=>()=>R(d)));const b=yield S();return b?b.__typename==="ErrorAccessDenied"||b.__typename==="ErrorNotFound"?b:{__typename:"SuccessResponse",data:b.data}:null})}uploadFileInCloud(o){return y(this,arguments,function*({file:e,name:t,nodeId:r,encryptProgress:s,uploadProgress:c,signal:i}){const l=yield this.uploadFile({file:e,encryptProgress:s,uploadProgress:c,signal:i});if(!l)return null;if(l.__typename==="ErrorAccessDenied"||l.__typename==="ErrorLimit"||l.__typename==="ErrorNotFound")return l;const u=yield this.saveInCloud({fileId:l.data,name:t,nodeId:r});return u?u.__typename==="ErrorAccessDenied"||u.__typename==="ErrorBasic"||u.__typename==="ErrorLimit"||u.__typename==="ErrorNotFound"||u.__typename==="ErrorNotExist"?u:{__typename:"SuccessResponse",data:u.data}:null})}deletedNodes(){return y(this,null,function*(){const{deletedNodes:e}=yield n(this,_).call(this,"query")({deletedNodes:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeletedNodesResponse":{__typename:!0,deletedNodes:H}}});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;const t=new Array;for(const r of e.deletedNodes)t.push(yield z(r,n(this,m)));return{__typename:"SuccessResponse",data:t}})}sharedNodes(){return y(this,null,function*(){const{sharedNodes:e}=yield n(this,_).call(this,"query")({sharedNodes:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on SharedNodesResponse":{__typename:!0,sharedNodes:H}}});if(!e)return null;if(e.__typename==="ErrorAccessDenied")return e;const t=new Array;for(const r of e.sharedNodes)t.push(yield z(r,n(this,m)));return{__typename:"SuccessResponse",data:t}})}nodesSharedWithMe(e){return y(this,null,function*(){const{nodesSharedWithMe:t}=yield n(this,_).call(this,"query")({nodesSharedWithMe:[{type:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on NodesSharedWithMeResponse":{__typename:!0,nodesSharedWithMe:H}}]});if(!t)return null;if(t.__typename==="ErrorAccessDenied")return t;const r=new Array;for(const s of t.nodesSharedWithMe)r.push(yield z(s,n(this,m)));return{__typename:"SuccessResponse",data:r}})}deleteNodeSharing(r){return y(this,arguments,function*({nodeId:e,userId:t}){const{deleteNodeSharing:s}=yield n(this,_).call(this,"mutation")({deleteNodeSharing:[{nodeId:e,userId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeSharingResponse":{__typename:!0,deleteNodeSharing:!0}}]});return s?s.__typename==="ErrorAccessDenied"?s:{__typename:"SuccessResponse",data:s.deleteNodeSharing}:null})}duplicateNode(s){return y(this,arguments,function*({nodeId:e,folderId:t,customName:r}){var o;let c=C.get(e);if(!c&&(yield this.node({id:e}),c=C.get(e),!c))throw new Error(`Node (${e}) does not exists`);if(!((o=c.access)!=null&&o.nameKey))throw new Error(`Can't have access to node ${e}`);r=r?yield I(r,c.access.nameKey):null;const{duplicateNode:i}=yield n(this,_).call(this,"mutation")({duplicateNode:[{nodeId:e,folderId:t,customName:r},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on DuplicateNodeResponse":{__typename:!0,duplicateNode:!0}}]});return i?i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorNotFound"?i:{__typename:"SuccessResponse",data:i.duplicateNode}:null})}deleteNodeCloudTrash(t){return y(this,arguments,function*({ids:e}){var s;const{deleteNodeCloudTrash:r}=yield n(this,_).call(this,"mutation")({deleteNodeCloudTrash:[{ids:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeCloudTrashResponse":{__typename:!0,deleteNodeCloudTrash:!0}}]});return r?r.__typename==="ErrorAccessDenied"?r:{__typename:"SuccessResponse",data:(s=r.deleteNodeCloudTrash)!=null?s:!1}:null})}createFolder(r){return y(this,arguments,function*({name:e,parentFolderId:t}){var p,g,D;const s=M(),c=yield I(e,h.to_hex(s)),i=x(s,n(this,m).publicKey,n(this,m).privateKey),{createFolder:o}=yield n(this,_).call(this,"mutation")({createFolder:[{name:c,parentFolderId:t,key:h.to_hex(i)},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on CreateFolderResponse":{__typename:!0,createFolder:v}}]});if(!o)return null;if(o.__typename==="ErrorAccessDenied"||o.__typename==="ErrorNotExist")return o;if(!o.createFolder)return null;const l=yield U(o.createFolder,n(this,m)),u=(D=(g=(p=l.parent)==null?void 0:p.users)==null?void 0:g.filter(([a])=>a.publicKey!==n(this,m).publicKey))!=null?D:[];return u.length&&(yield Promise.all(u.map(([a,w])=>this.shareNode({nodeId:l.id,rights:w,userId:a.id})))),{__typename:"SuccessResponse",data:l}})}node(){return y(this,arguments,function*({id:e,deleted:t}={}){const{node:r}=yield n(this,_).call(this,"query")({node:[{deleted:t,id:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on NodeResponse":{__typename:!0,node:v}}]});if(!r)return null;if(r.__typename==="ErrorAccessDenied")return r;if(!r.node)return null;const s=yield U(r.node,n(this,m));return{__typename:"SuccessResponse",data:s}})}fileMetadata(t){return y(this,arguments,function*({id:e}){const{file:r}=yield n(this,_).call(this,"query")({file:[{id:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on FileQueryResponse":{__typename:!0,file:se}}]});if(!r)return null;if(r.__typename==="ErrorAccessDenied")return r;if(!r.file)return null;const s=re(r.file,n(this,m));return{__typename:"SuccessResponse",data:s}})}shareNode(s){return y(this,arguments,function*({nodeId:e,userId:t,rights:r}){var u;const c=yield n(this,K).user({userId:t,withPublicKey:!0});if(!c||c.__typename==="ErrorNotFound")return c;const{shareNode:i}=yield n(this,_).call(this,"mutation")({shareNode:[{nodeId:e,userId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareNodeResponse":{__typename:!0,nodes:!0}}]});if(!i)return null;if(i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorNotFound")return i;const o={nodes:[]};for(const p of i.nodes){const g=yield this.perNode(p,c.data.publicKey);g&&o.nodes.push(g)}const{shareNodeFinish:l}=yield n(this,_).call(this,"mutation")({shareNodeFinish:[{rights:r,userId:t,shareNodes:o},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ShareNodeFinishResponse":{__typename:!0,shareNodeFinish:!0}}]});return l?l.__typename==="ErrorAccessDenied"||l.__typename==="ErrorNotFound"?l:{__typename:"SuccessResponse",data:(u=l.shareNodeFinish)!=null?u:!1}:null})}updateNode(c){return y(this,arguments,function*({nodeId:e,name:t,isFavorite:r,deletedAt:s}){var u,p;let i=C.get(e);if(!i&&(yield this.node({id:e}),i=C.get(e),!i))throw`Can't find Node ${e}`;if(!((u=i.access)!=null&&u.nameKey))throw new Error(`Can't have access to node ${e}`);t=t?(p=i.access)!=null&&p.nameKey?yield I(t,i.access.nameKey):t:null;const{updateNode:o}=yield n(this,_).call(this,"mutation")({updateNode:[{nodeId:e,name:t,isFavorite:r,deletedAt:s},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on UpdateNodeResponse":{__typename:!0,updateNode:v}}]});if(!o)return null;if(o.__typename==="ErrorAccessDenied"||o.__typename==="ErrorNotExist")return o;if(!o.updateNode)return null;const l=yield U(o.updateNode,n(this,m));return{__typename:"SuccessResponse",data:l}})}fileContent(c){return y(this,arguments,function*({fileId:e,onDownloadProgress:t,progressDecrypt:r,signal:s}){const{fileContent:i}=yield n(this,_).call(this,"query",{scalars:{Bytes:{decode:a=>(console.log(a,typeof a),Uint8Array.from([1,2,3])),encode:a=>a.toString()}}})({fileContent:[{fileId:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on FileContentResponse":{__typename:!0,file:{"...on FileContentCloud":{__typename:!0,parts:{contentUrl:!0,order:!0,md5:!0},key:!0,publicKey:!0,totalSize:!0,md5:!0,md5Encrypted:!0},"...on FileContentLite":{__typename:!0,content:!0,id:!0,key:!0,publicKey:!0,md5:!0,md5Encrypted:!0,totalSize:!0},"...on FileContentReceivedMail":{__typename:!0,maybeParts:{contentUrl:!0,order:!0,md5:!0},maybeContent:!0,key:!0,senderPublicKey:!0,totalSize:!0,md5:!0,md5Encrypted:!0},"...on FileContentSentMail":{__typename:!0,maybeParts:{contentUrl:!0,order:!0,md5:!0},maybeContent:!0,key:!0,totalSize:!0,md5:!0,md5Encrypted:!0}}}}]});if(!i)return null;if(i.__typename==="ErrorAccessDenied"||i.__typename==="ErrorBasic")return i;const o=i.file;if(!o)return null;const l={},u=(a,w)=>{l[a]=w;const S=Object.values(l).reduce((E,A)=>E+A.transferredBytes,0),f=Number(o.totalSize);t==null||t({percent:S/f,totalBytes:f,transferredBytes:S})},p=a=>y(this,null,function*(){const w=new Array,S=f=>y(this,null,function*(){const E=new Uint8Array(yield J.get(f.contentUrl,{timeout:!1,onDownloadProgress:R=>u(f.order,R),signal:s}).arrayBuffer());if((yield B(E))!==f.md5)throw new Error(`Invalid md5 for part ${f.order} of file ${e}`);w.push({data:E,order:f.order})});return yield O(3,a.map(f=>()=>S(f))),Y(...w.sort((f,E)=>f.order-E.order).map(f=>f.data))}),g=a=>y(this,null,function*(){if((yield B(a))!==o.md5Encrypted)throw new Error("Encrypted content does not match");const S=j(h.from_hex(o.key),o.__typename==="FileContentReceivedMail"?o.senderPublicKey:o.__typename==="FileContentCloud"?o.publicKey:n(this,m).publicKey,n(this,m).privateKey),f=yield Z(S,a,r,s);if((yield B(f))!==o.md5)throw new Error("Content does not match");return G(f)}),D=o.__typename==="FileContentLite"?o.content:o.__typename==="FileContentCloud"?yield p(o.parts):o.maybeContent?o.maybeContent:o.maybeParts?yield p(o.maybeParts):null;return D?{__typename:"SuccessResponse",data:yield g(D)}:null})}deleteFile(r){return y(this,arguments,function*({fileId:e,nodeId:t}){const{deleteFile:s}=yield n(this,_).call(this,"mutation")({deleteFile:[{fileId:e,nodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on DeleteFileResponse":{__typename:!0,deleteFile:!0}}]});return s?s.__typename==="ErrorAccessDenied"||s.__typename==="ErrorNotExist"?s:{__typename:"SuccessResponse",data:s.deleteFile}:null})}deleteNode(t){return y(this,arguments,function*({nodeId:e}){const{deleteNode:r}=yield n(this,_).call(this,"mutation")({deleteNode:[{id:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on DeleteNodeResponse":{__typename:!0,deleteNode:!0}}]});return r?r.__typename==="ErrorAccessDenied"?r:{__typename:"SuccessResponse",data:r.deleteNode}:null})}emptyTrash(){return y(this,null,function*(){const{emptyCloudTrash:e}=yield n(this,_).call(this,"mutation")({emptyCloudTrash:{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on EmptyCloudTrashResponse":{__typename:!0,emptyCloudTrash:!0}}});return e?e.__typename==="ErrorAccessDenied"?e:e.emptyCloudTrash?{__typename:"SuccessResponse",data:e.emptyCloudTrash}:null:null})}recoverNode(e){return y(this,null,function*(){var r;const{recoverNode:t}=yield n(this,_).call(this,"mutation")({recoverNode:[{id:e},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on RecoverNodeResponse":{__typename:!0,recoverNode:!0}}]});return t?t.__typename==="ErrorAccessDenied"||t.__typename==="ErrorNotExist"?t:{__typename:"SuccessResponse",data:(r=t.recoverNode)!=null?r:!1}:null})}moveNodes(r){return y(this,arguments,function*({nodeIds:e,parentNodeId:t}){var c;const{moveNodes:s}=yield n(this,_).call(this,"mutation")({moveNodes:[{nodeIds:e,parentNodeId:t},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on MoveNodesResponse":{__typename:!0,moveNodes:!0}}]});return s?s.__typename==="ErrorAccessDenied"?s:{__typename:"SuccessResponse",data:(c=s.moveNodes)!=null?c:!1}:null})}saveInCloud(s){return y(this,arguments,function*({fileId:e,name:t,nodeId:r}){var a,w,S,f;if(r&&!C.has(r)&&(yield this.node({id:r}),!C.has(r)))return{__typename:"ErrorBasic",message:`The node ${r} does not exists`};let c="";const i=q.get(e);if(i)c=i.key;else{yield this.fileMetadata({id:e});const E=(a=q.get(e))!=null?a:null;if(E)c=E.key;else{const A=yield n(this,K).mail.receivedMails();if(!A||A.__typename!=="SuccessResponse")return null;const R=A.data.find(F=>F.files.some(N=>N.id===e));if(!R)return{__typename:"ErrorBasic",message:`Can't find mail with the file ${e}`};const b=R.files.find(F=>F.id===e);if(!b)return{__typename:"ErrorBasic",message:`Can't find mail with the file ${e}`};const d=j(h.from_hex(b.key),R.sender.publicKey,n(this,m).privateKey);c=h.to_hex(d)}}if(c==="")return{__typename:"ErrorBasic",message:"Unexpected error 3"};c=h.to_hex(x(h.from_hex(c),n(this,m).publicKey,n(this,m).privateKey));const o=M(),l=yield I(t,h.to_hex(o)),u=h.to_hex(x(o,n(this,m).publicKey,n(this,m).privateKey)),{saveInCloud:p}=yield n(this,_).call(this,"mutation")({saveInCloud:[{fileId:e,key:c,nodeId:r,filename:l,nameKey:u},{"...on ErrorAccessDenied":{__typename:!0,message:!0},"...on ErrorNotFound":{__typename:!0,message:!0},"...on ErrorLimit":{__typename:!0,message:!0},"...on ErrorBasic":{__typename:!0,message:!0},"...on ErrorNotExist":{__typename:!0,message:!0},"...on SaveInCloudResponse":{__typename:!0,saveInCloud:v}}]});if(!p)return null;if(p.__typename==="ErrorAccessDenied"||p.__typename==="ErrorNotFound"||p.__typename==="ErrorLimit"||p.__typename==="ErrorBasic"||p.__typename==="ErrorNotExist")return p;if(!p.saveInCloud)return null;const g=yield U(p.saveInCloud,n(this,m)),D=(w=g.parent)==null?void 0:w.users.find(([E])=>E.publicKey===n(this,m).publicKey);if(D&&["admin","write"].includes(D[1])){const E=(f=(S=g.parent)==null?void 0:S.users.filter(([A])=>A.publicKey!==n(this,m).publicKey))!=null?f:[];yield Promise.all(E.map(([A,R])=>this.shareNode({nodeId:g.id,rights:R,userId:A.id})))}return{__typename:"SuccessResponse",data:g}})}}K=new WeakMap,m=new WeakMap,_=new WeakMap;export{Fe as SecrecyCloudClient};
2
2
  //# sourceMappingURL=SecrecyCloudClient.js.map