@keeper-security/keeperapi 16.0.1 → 16.0.4

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 (148) hide show
  1. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/07113f92cc3a9f5dc57b92f54542a63463f1fa9a +1 -0
  2. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/1ba6467ba06d4bfc0c8581f4ee12c2c0f687214e +1 -0
  3. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/1de1e40928c5c58c4f677d93986cdff01b3d0417 +1 -0
  4. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/47382883a57ad5790d3fd6abd39f33f773726b3b +1 -0
  5. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/4939a895ecf4daac58b0d73bccd49876515d41b8 +1 -0
  6. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/592d89407340c5ec6ad006df327e588b3f442eca +1 -0
  7. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/59783c8cc0cc9d984f5407c218d213bca4c98503 +1 -0
  8. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/61fa6cf725249a1cae9b94b74a8c23aa3efd2ca1 +1 -0
  9. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/77aced5528ce05fe900fdf7634042ec3c0f18255 +1 -0
  10. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/b32ea8d6d3de0c6d8e178eff069fea4e11fa92b1 +1 -0
  11. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/c05be8364ff56aba0298689783666ddb97a31285 +1 -0
  12. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/e23bf49223ba8b7ec926e46c40b27b0353cfc50e +1 -0
  13. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/code/cache/eec92c105b2694c31bff21903ddc3ef81af8f056 +1 -0
  14. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/07113f92cc3a9f5dc57b92f54542a63463f1fa9a +1 -0
  15. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/1ba6467ba06d4bfc0c8581f4ee12c2c0f687214e +1 -0
  16. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/1de1e40928c5c58c4f677d93986cdff01b3d0417 +1 -0
  17. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/47382883a57ad5790d3fd6abd39f33f773726b3b +1 -0
  18. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/4939a895ecf4daac58b0d73bccd49876515d41b8 +1 -0
  19. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/592d89407340c5ec6ad006df327e588b3f442eca +1 -0
  20. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/59783c8cc0cc9d984f5407c218d213bca4c98503 +1 -0
  21. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/61fa6cf725249a1cae9b94b74a8c23aa3efd2ca1 +1 -0
  22. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/77aced5528ce05fe900fdf7634042ec3c0f18255 +1 -0
  23. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/b32ea8d6d3de0c6d8e178eff069fea4e11fa92b1 +1 -0
  24. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/c05be8364ff56aba0298689783666ddb97a31285 +1 -0
  25. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/e23bf49223ba8b7ec926e46c40b27b0353cfc50e +1 -0
  26. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/semanticDiagnostics/cache/eec92c105b2694c31bff21903ddc3ef81af8f056 +1 -0
  27. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/07113f92cc3a9f5dc57b92f54542a63463f1fa9a +1 -0
  28. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/1ba6467ba06d4bfc0c8581f4ee12c2c0f687214e +1 -0
  29. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/1de1e40928c5c58c4f677d93986cdff01b3d0417 +1 -0
  30. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/47382883a57ad5790d3fd6abd39f33f773726b3b +1 -0
  31. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/4939a895ecf4daac58b0d73bccd49876515d41b8 +1 -0
  32. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/592d89407340c5ec6ad006df327e588b3f442eca +1 -0
  33. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/59783c8cc0cc9d984f5407c218d213bca4c98503 +1 -0
  34. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/61fa6cf725249a1cae9b94b74a8c23aa3efd2ca1 +1 -0
  35. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/77aced5528ce05fe900fdf7634042ec3c0f18255 +1 -0
  36. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/b32ea8d6d3de0c6d8e178eff069fea4e11fa92b1 +1 -0
  37. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/c05be8364ff56aba0298689783666ddb97a31285 +1 -0
  38. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/e23bf49223ba8b7ec926e46c40b27b0353cfc50e +1 -0
  39. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/syntacticDiagnostics/cache/eec92c105b2694c31bff21903ddc3ef81af8f056 +1 -0
  40. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/20b49cde4def23063b280689e4ff4d5a3803712b +0 -0
  41. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/3809196a67de680945038f2b4846e2e3b4af35aa +0 -0
  42. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/4ad5d47b1ce7bf45cc7d9ff8c970e1fc57f446f3 +0 -0
  43. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/5a0816a3c916ff0e4961dc0ec2da48646f2ac5aa +0 -0
  44. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/6182f5491d41e8f10acfbcf46ee875587904f5a3 +0 -0
  45. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/7ca2e31bcece668dfa5de5e1349ba34a757b5140 +0 -0
  46. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/86a4b0102f5568ac0a5b946d05c55f42c30b472d +0 -0
  47. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/87fae47dd5b05377c04cfe377699d748414dc1c9 +0 -0
  48. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/a7c23ecebcaf23c9346007731c5796b96c580738 +0 -0
  49. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/ac4d101c3489192db3e0ec98430a2336cba9a741 +0 -0
  50. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/b1eb441c5b806d06ba6bb36fcfd0cc4746c23a8a +0 -0
  51. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/b7942903000069a51e317fef1595a8ea1d8b828d +0 -0
  52. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/cee91236390168fd38b01aaae7bed3099bb4555a +0 -0
  53. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/d7c87ce194d923e6f02c7e570008e88ade1cbabf +0 -0
  54. package/.rpt2_cache/rpt2_73ef004c41e5fb714e8076cf96455df4f040d49c/types/cache/fba70878178c036fb4e9e1f19bdb465a1270d258 +0 -0
  55. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/05d17f791979143cbce20e3e3e811aa19ed8b492 +1 -0
  56. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/07113f92cc3a9f5dc57b92f54542a63463f1fa9a +1 -0
  57. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/1ba6467ba06d4bfc0c8581f4ee12c2c0f687214e +1 -0
  58. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/1de1e40928c5c58c4f677d93986cdff01b3d0417 +1 -0
  59. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/47382883a57ad5790d3fd6abd39f33f773726b3b +1 -0
  60. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/4d58c1113d07816b1909aaef4395fd8b4d0ee13c +1 -0
  61. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/4ee978699d6de2a60214b16c42d87f8e9309636b +1 -0
  62. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/50f4a014d14ada987c125e6ea55d4e6e75605313 +1 -0
  63. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/58aa8c228c99b690d3ca1f3b464585c41d1cd4bb +1 -0
  64. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/592d89407340c5ec6ad006df327e588b3f442eca +1 -0
  65. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/59783c8cc0cc9d984f5407c218d213bca4c98503 +1 -0
  66. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/61fa6cf725249a1cae9b94b74a8c23aa3efd2ca1 +1 -0
  67. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/89f8a81d9d078b69f9fa7fa95251b38ccc394a3b +1 -0
  68. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/b32ea8d6d3de0c6d8e178eff069fea4e11fa92b1 +1 -0
  69. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/c05be8364ff56aba0298689783666ddb97a31285 +1 -0
  70. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/e23bf49223ba8b7ec926e46c40b27b0353cfc50e +1 -0
  71. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/code/cache/eec92c105b2694c31bff21903ddc3ef81af8f056 +1 -0
  72. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/05d17f791979143cbce20e3e3e811aa19ed8b492 +1 -0
  73. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/07113f92cc3a9f5dc57b92f54542a63463f1fa9a +1 -0
  74. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/1ba6467ba06d4bfc0c8581f4ee12c2c0f687214e +1 -0
  75. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/1de1e40928c5c58c4f677d93986cdff01b3d0417 +1 -0
  76. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/47382883a57ad5790d3fd6abd39f33f773726b3b +1 -0
  77. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/4d58c1113d07816b1909aaef4395fd8b4d0ee13c +1 -0
  78. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/4ee978699d6de2a60214b16c42d87f8e9309636b +1 -0
  79. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/50f4a014d14ada987c125e6ea55d4e6e75605313 +1 -0
  80. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/58aa8c228c99b690d3ca1f3b464585c41d1cd4bb +1 -0
  81. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/592d89407340c5ec6ad006df327e588b3f442eca +1 -0
  82. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/59783c8cc0cc9d984f5407c218d213bca4c98503 +1 -0
  83. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/61fa6cf725249a1cae9b94b74a8c23aa3efd2ca1 +1 -0
  84. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/89f8a81d9d078b69f9fa7fa95251b38ccc394a3b +1 -0
  85. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/b32ea8d6d3de0c6d8e178eff069fea4e11fa92b1 +1 -0
  86. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/c05be8364ff56aba0298689783666ddb97a31285 +1 -0
  87. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/e23bf49223ba8b7ec926e46c40b27b0353cfc50e +1 -0
  88. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/semanticDiagnostics/cache/eec92c105b2694c31bff21903ddc3ef81af8f056 +1 -0
  89. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/05d17f791979143cbce20e3e3e811aa19ed8b492 +1 -0
  90. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/07113f92cc3a9f5dc57b92f54542a63463f1fa9a +1 -0
  91. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/1ba6467ba06d4bfc0c8581f4ee12c2c0f687214e +1 -0
  92. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/1de1e40928c5c58c4f677d93986cdff01b3d0417 +1 -0
  93. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/47382883a57ad5790d3fd6abd39f33f773726b3b +1 -0
  94. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/4d58c1113d07816b1909aaef4395fd8b4d0ee13c +1 -0
  95. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/4ee978699d6de2a60214b16c42d87f8e9309636b +1 -0
  96. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/50f4a014d14ada987c125e6ea55d4e6e75605313 +1 -0
  97. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/58aa8c228c99b690d3ca1f3b464585c41d1cd4bb +1 -0
  98. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/592d89407340c5ec6ad006df327e588b3f442eca +1 -0
  99. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/59783c8cc0cc9d984f5407c218d213bca4c98503 +1 -0
  100. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/61fa6cf725249a1cae9b94b74a8c23aa3efd2ca1 +1 -0
  101. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/89f8a81d9d078b69f9fa7fa95251b38ccc394a3b +1 -0
  102. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/b32ea8d6d3de0c6d8e178eff069fea4e11fa92b1 +1 -0
  103. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/c05be8364ff56aba0298689783666ddb97a31285 +1 -0
  104. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/e23bf49223ba8b7ec926e46c40b27b0353cfc50e +1 -0
  105. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/syntacticDiagnostics/cache/eec92c105b2694c31bff21903ddc3ef81af8f056 +1 -0
  106. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/20b49cde4def23063b280689e4ff4d5a3803712b +0 -0
  107. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/3809196a67de680945038f2b4846e2e3b4af35aa +0 -0
  108. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/4ad5d47b1ce7bf45cc7d9ff8c970e1fc57f446f3 +0 -0
  109. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/5a0816a3c916ff0e4961dc0ec2da48646f2ac5aa +0 -0
  110. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/6182f5491d41e8f10acfbcf46ee875587904f5a3 +0 -0
  111. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/7ca2e31bcece668dfa5de5e1349ba34a757b5140 +0 -0
  112. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/86a4b0102f5568ac0a5b946d05c55f42c30b472d +0 -0
  113. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/87fae47dd5b05377c04cfe377699d748414dc1c9 +0 -0
  114. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/a7c23ecebcaf23c9346007731c5796b96c580738 +0 -0
  115. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/ac4d101c3489192db3e0ec98430a2336cba9a741 +0 -0
  116. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/b1eb441c5b806d06ba6bb36fcfd0cc4746c23a8a +0 -0
  117. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/b7942903000069a51e317fef1595a8ea1d8b828d +0 -0
  118. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/cee91236390168fd38b01aaae7bed3099bb4555a +0 -0
  119. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/d7c87ce194d923e6f02c7e570008e88ade1cbabf +0 -0
  120. package/.rpt2_cache/rpt2_e52dc086a65136b8064433446ffcd05307935b95/types/cache/fba70878178c036fb4e9e1f19bdb465a1270d258 +0 -0
  121. package/babel.config.js +6 -0
  122. package/package.json +7 -10
  123. package/rollup.config.js +50 -0
  124. package/scripts/cleanDistFolder.js +9 -0
  125. package/src/__tests__/utils.test.js +13 -0
  126. package/src/auth.ts +1514 -0
  127. package/src/browser/asn1hex.ts +296 -0
  128. package/src/browser/index.ts +17 -0
  129. package/src/browser/jsbn.ts +1213 -0
  130. package/src/browser/platform.ts +434 -0
  131. package/src/browser/rng.ts +15 -0
  132. package/src/browser/rsa.ts +262 -0
  133. package/src/commands.ts +1378 -0
  134. package/src/company.ts +244 -0
  135. package/src/configuration.ts +125 -0
  136. package/src/endpoint.ts +350 -0
  137. package/src/node/index.ts +17 -0
  138. package/src/node/platform.ts +283 -0
  139. package/src/platform.ts +76 -0
  140. package/{dist → src}/proto.d.ts +0 -0
  141. package/src/proto.js +136564 -0
  142. package/src/restMessages.ts +311 -0
  143. package/src/utils.ts +169 -0
  144. package/src/vault.ts +844 -0
  145. package/src/vendorContext.ts +69 -0
  146. package/src/vendorModel.ts +36 -0
  147. package/tsconfig.json +14 -0
  148. package/tsconfig.rollup.json +14 -0
@@ -0,0 +1,350 @@
1
+ import {KeeperCommand, KeeperHttpResponse} from './commands'
2
+ import {KeeperError} from './configuration'
3
+ import {Authentication, Push, SsoCloud} from './proto'
4
+ import {platform} from './platform'
5
+ import {
6
+ generateTransmissionKey,
7
+ getKeeperUrl,
8
+ isTwoFactorResultCode,
9
+ normal64,
10
+ normal64Bytes,
11
+ webSafe64FromBytes
12
+ } from './utils'
13
+ import {
14
+ deviceMessage,
15
+ preLoginMessage,
16
+ registerDeviceMessage,
17
+ registerDeviceInRegionMessage,
18
+ RestMessage,
19
+ ssoCloudRequestMessage,
20
+ updateDeviceMessage
21
+ } from './restMessages'
22
+ import {ClientConfigurationInternal, TransmissionKey} from './configuration';
23
+ import ApiRequestPayload = Authentication.ApiRequestPayload;
24
+ import ApiRequest = Authentication.ApiRequest;
25
+ import IDeviceResponse = Authentication.IDeviceResponse;
26
+ import IPreLoginResponse = Authentication.IPreLoginResponse;
27
+ import WssClientResponse = Push.WssClientResponse;
28
+ import WssConnectionRequest = Push.WssConnectionRequest;
29
+ import SsoCloudResponse = SsoCloud.SsoCloudResponse;
30
+
31
+ export class KeeperEndpoint {
32
+ private transmissionKey: TransmissionKey
33
+ public deviceToken: Uint8Array
34
+ public clientVersion
35
+
36
+ private onsitePrivateKey: Uint8Array | null = null
37
+ private onsitePublicKey: Uint8Array | null = null
38
+
39
+ constructor(private options: ClientConfigurationInternal) {
40
+ if (options.deviceToken) {
41
+ this.deviceToken = options.deviceToken
42
+ this.transmissionKey = generateTransmissionKey(1)
43
+ } else {
44
+ this.transmissionKey = generateTransmissionKey(options.deviceConfig.transmissionKeyId || 1)
45
+ }
46
+ }
47
+
48
+ private getUrl(forPath: string): string {
49
+ return getKeeperUrl(this.options.host, forPath)
50
+ }
51
+
52
+ async getDeviceToken(): Promise<IDeviceResponse> {
53
+ return this.executeRest(deviceMessage({
54
+ clientVersion: this.clientVersion,
55
+ deviceName: 'JS Keeper API'
56
+ }))
57
+ }
58
+
59
+ async getPreLogin(username: string): Promise<IPreLoginResponse> {
60
+
61
+ if (!this.deviceToken) {
62
+ console.log('Obtaining device token...')
63
+ let deviceResponse = await this.getDeviceToken()
64
+ this.deviceToken = deviceResponse.encryptedDeviceToken
65
+ if (this.options.onDeviceToken) {
66
+ this.options.onDeviceToken(this.deviceToken)
67
+ }
68
+ }
69
+
70
+ while (true) {
71
+ try {
72
+ return await this.executeRest(preLoginMessage({
73
+ authRequest: {
74
+ clientVersion: this.clientVersion,
75
+ username: username,
76
+ encryptedDeviceToken: this.deviceToken
77
+ },
78
+ loginType: Authentication.LoginType.NORMAL
79
+ }))
80
+ } catch (e) {
81
+ if (!(e instanceof Error))
82
+ throw(e)
83
+ let errorObj = JSON.parse(e.message)
84
+ if (errorObj.error === 'region_redirect') {
85
+ this.options.host = errorObj.region_host
86
+ console.log(`Redirecting to ${this.options.host}`)
87
+ } else {
88
+ throw(e)
89
+ }
90
+ }
91
+ }
92
+ }
93
+
94
+ async registerDevice() {
95
+ // Case 1 new device, no edt no keys - call registration with pub key
96
+ // Case 2 existing device on 14, edt but no keys - call device update
97
+ // Case 3 existing device on 15+, has edt and keys - skip registration
98
+
99
+ const deviceConfig = this.options.deviceConfig
100
+
101
+ if (deviceConfig.deviceToken && deviceConfig.privateKey && deviceConfig.publicKey) { // Case 1
102
+ return
103
+ }
104
+
105
+ const ecdh = await platform.generateECKeyPair()
106
+ deviceConfig.publicKey = ecdh.publicKey
107
+ deviceConfig.privateKey = ecdh.privateKey
108
+ if (deviceConfig.deviceToken) {
109
+ const devUpdMsg = updateDeviceMessage({
110
+ encryptedDeviceToken: deviceConfig.deviceToken,
111
+ clientVersion: this.options.clientVersion,
112
+ deviceName: deviceConfig.deviceName,
113
+ devicePublicKey: deviceConfig.publicKey,
114
+ })
115
+ await this.executeRest(devUpdMsg)
116
+ } else {
117
+ const devRegMsg = registerDeviceMessage({
118
+ clientVersion: this.options.clientVersion,
119
+ deviceName: deviceConfig.deviceName,
120
+ devicePublicKey: deviceConfig.publicKey,
121
+ })
122
+ const devRegResp = await this.executeRest(devRegMsg)
123
+ console.log(devRegResp)
124
+ deviceConfig.deviceToken = devRegResp.encryptedDeviceToken || null
125
+ }
126
+ if (this.options.onDeviceConfig) {
127
+ this.options.onDeviceConfig(deviceConfig, this.options.host);
128
+ }
129
+ }
130
+
131
+ async executeRest<TIn, TOut>(message: RestMessage<TIn, TOut>, sessionToken?: string): Promise<TOut> {
132
+ while (true) {
133
+ let request = await this.prepareRequest(message.toBytes(), sessionToken)
134
+ console.log("Calling REST URL:", this.getUrl(message.path));
135
+ let response = await platform.post(this.getUrl(message.path), request)
136
+ if (!response.data || response.data.length === 0 && response.statusCode === 200) {
137
+ return
138
+ }
139
+ console.log("Response code:", response.statusCode);
140
+
141
+ try {
142
+ let decrypted = await platform.aesGcmDecrypt(response.data, this.transmissionKey.key)
143
+ return message.fromBytes(decrypted)
144
+ } catch {
145
+ const errorMessage = platform.bytesToString(response.data.slice(0, 1000))
146
+ try {
147
+ const errorObj: KeeperError = JSON.parse(errorMessage)
148
+ switch (errorObj.error) {
149
+ case 'key':
150
+ this.updateTransmissionKey(errorObj.key_id)
151
+ continue
152
+ case 'region_redirect':
153
+ this.options.host = errorObj.region_host
154
+ if (this.options.onRegionChanged) {
155
+ this.options.onRegionChanged(this.options.host);
156
+ }
157
+ continue
158
+ case 'device_not_registered': {
159
+ if (this.options.deviceConfig.deviceToken) {
160
+ await this.executeRest(registerDeviceInRegionMessage({
161
+ clientVersion: this.options.clientVersion,
162
+ deviceName: this.options.deviceConfig.deviceName,
163
+ devicePublicKey: this.options.deviceConfig.publicKey,
164
+ encryptedDeviceToken: this.options.deviceConfig.deviceToken
165
+ }))
166
+ continue
167
+ }
168
+ }
169
+ }
170
+ if (this.options.onCommandFailure) {
171
+ this.options.onCommandFailure({ ...errorObj, ...{ path: message.path } })
172
+ }
173
+ } catch {
174
+ }
175
+ throw(new Error(errorMessage))
176
+ }
177
+ }
178
+ }
179
+
180
+ async executeV2Command<T>(command: KeeperCommand): Promise<T> {
181
+ command.client_version = this.clientVersion
182
+ let requestBytes = await this.prepareRequest(command)
183
+ let response = await platform.post(this.getUrl('vault/execute_v2_command'), requestBytes)
184
+ let decrypted
185
+ try {
186
+ decrypted = await platform.aesGcmDecrypt(response.data, this.transmissionKey.key)
187
+ } catch (e) {
188
+ let error = platform.bytesToString(response.data)
189
+ throw(`Unable to decrypt response: ${error}`)
190
+ }
191
+ let json = JSON.parse(platform.bytesToString(decrypted))
192
+ if (json.result !== 'success' && !isTwoFactorResultCode(json.result_code)) {
193
+ throw(json)
194
+ }
195
+ return json as T
196
+ }
197
+
198
+ async get(path: string): Promise<KeeperHttpResponse> {
199
+ return platform.get(this.getUrl(path), {})
200
+ }
201
+
202
+ public updateTransmissionKey(keyNumber: number) {
203
+ this.transmissionKey = generateTransmissionKey(keyNumber)
204
+
205
+ this.options.deviceConfig.transmissionKeyId = keyNumber
206
+ if (this.options.onDeviceConfig) {
207
+ this.options.onDeviceConfig(this.options.deviceConfig, this.options.host);
208
+ }
209
+ }
210
+
211
+ public async prepareRequest(payload: Uint8Array | KeeperCommand, sessionToken?: string): Promise<Uint8Array> {
212
+ return prepareApiRequest(payload, this.transmissionKey, sessionToken)
213
+ }
214
+
215
+ async decryptPushMessage(pushMessageData: Uint8Array): Promise<WssClientResponse> {
216
+ const decryptedPushMessage = await platform.aesGcmDecrypt(pushMessageData, this.transmissionKey.key)
217
+ return WssClientResponse.decode(decryptedPushMessage)
218
+ }
219
+
220
+ async getPushConnectionRequest(messageSessionUid: Uint8Array) {
221
+ return getPushConnectionRequest(messageSessionUid, this.options.deviceConfig.deviceToken, this.transmissionKey)
222
+ }
223
+
224
+ getTransmissionKey(): TransmissionKey {
225
+ return this.transmissionKey;
226
+ }
227
+
228
+ public async prepareSsoPayload(messageSessionUid: Uint8Array, username: string = '', idpSessionId = ''): Promise<string> {
229
+ const payload = ssoCloudRequestMessage({
230
+ "embedded": true,
231
+ "clientVersion": this.clientVersion,
232
+ "dest": "vault",
233
+ "forceLogin": false,
234
+ "messageSessionUid": messageSessionUid,
235
+ "idpSessionId": idpSessionId,
236
+ "username": username
237
+ }).toBytes()
238
+ const request = await prepareApiRequest(payload, this.transmissionKey)
239
+ return webSafe64FromBytes(request)
240
+ }
241
+
242
+ public async decryptCloudSsoResponse(token: string): Promise<SsoCloudResponse> {
243
+ return decryptCloudSsoResponse(token, this.getTransmissionKey().key)
244
+ }
245
+
246
+ public async getOnsitePublicKey(): Promise<string> {
247
+ if (!this.onsitePublicKey || !this.onsitePrivateKey) {
248
+ const {privateKey, publicKey} = await platform.generateRSAKeyPair()
249
+
250
+ this.onsitePrivateKey = privateKey
251
+ this.onsitePublicKey = publicKey
252
+ }
253
+
254
+ return webSafe64FromBytes(this.onsitePublicKey)
255
+ }
256
+
257
+ public decryptOnsiteSsoPassword(password: string): string {
258
+ const encryptedPasswordBytes = normal64Bytes(password)
259
+ const decryptedPassword = platform.privateDecrypt(encryptedPasswordBytes, this.onsitePrivateKey)
260
+ return platform.bytesToString(decryptedPassword)
261
+ }
262
+ }
263
+
264
+ export async function getPushConnectionRequest(messageSessionUid: Uint8Array, encryptedDeviceToken: Uint8Array, transmissionKey: TransmissionKey) {
265
+ const connectionRequest = WssConnectionRequest.create({
266
+ messageSessionUid: messageSessionUid,
267
+ encryptedDeviceToken: encryptedDeviceToken,
268
+ deviceTimeStamp: new Date().getTime()
269
+ })
270
+ const connectionRequestBytes = WssConnectionRequest.encode(connectionRequest).finish()
271
+ const apiRequest = await prepareApiRequest(connectionRequestBytes, transmissionKey)
272
+ return webSafe64FromBytes(apiRequest)
273
+ }
274
+
275
+ export async function prepareApiRequest(payload: Uint8Array | KeeperCommand, transmissionKey: TransmissionKey, sessionToken?: string): Promise<Uint8Array> {
276
+ const requestPayload = ApiRequestPayload.create()
277
+ if (payload) {
278
+ requestPayload.payload = payload instanceof Uint8Array
279
+ ? payload
280
+ : Buffer.from(JSON.stringify(payload))
281
+ }
282
+ if (sessionToken) {
283
+ requestPayload.encryptedSessionToken = normal64Bytes(sessionToken);
284
+ }
285
+ let requestPayloadBytes = ApiRequestPayload.encode(requestPayload).finish()
286
+ let encryptedRequestPayload = await platform.aesGcmEncrypt(requestPayloadBytes, transmissionKey.key)
287
+ let apiRequest = ApiRequest.create({
288
+ encryptedTransmissionKey: transmissionKey.encryptedKey,
289
+ encryptedPayload: encryptedRequestPayload,
290
+ publicKeyId: transmissionKey.publicKeyId,
291
+ locale: 'en_US'
292
+ })
293
+ return ApiRequest.encode(apiRequest).finish()
294
+ }
295
+
296
+ export async function decryptCloudSsoResponse(cloudResponseToken: string, key: Uint8Array): Promise<SsoCloudResponse> {
297
+ const decryptedData = await platform.aesGcmDecrypt(normal64Bytes(cloudResponseToken), key);
298
+ return SsoCloudResponse.decode(decryptedData);
299
+ }
300
+
301
+ export enum KeeperEnvironment {
302
+ Prod = 'keepersecurity.com',
303
+ QA = 'qa.keepersecurity.com',
304
+ DEV = 'dev.keepersecurity.com',
305
+ DEV2 = 'dev2.keepersecurity.com',
306
+ LOCAL = 'local.keepersecurity.com',
307
+ Prod_EU = 'keepersecurity.eu',
308
+ QA_EU = 'qa.keepersecurity.eu',
309
+ DEV_EU = 'dev.keepersecurity.eu',
310
+ }
311
+
312
+ interface KeeperKeys {
313
+ der: string[],
314
+ pem: string[]
315
+ }
316
+
317
+ let keys =
318
+ {
319
+ der: {
320
+ key1: 'MIIBCgKCAQEA9Z/CZzxiNUz8+npqI4V10+zW3AL7+M4UQDdd/17759Xzm0MOEfHOOsOgZxxNK1DEsbyCTCE05fd3Hz1mn1uGjXvm5HnN2mL/3TOVxyLU6VwH9EDInnj4DNMFifs69il3KlviT3llRgPCcjF4xrF8d4SR0/N3eqS1f9CBJPNEKEH+am5Xb/FqAlOUoXkILF0UYxA/jNLoWBSq+1W58e4xDI0p0GuP0lN8f97HBtfB7ijbtF+VxIXtxRy+4jA49zK+CQrGmWqIm5DzZcBvUtVGZ3UXd6LeMXMJOifvuCneGC2T2uB6G2g5yD54+onmKIETyNX0LtpR1MsZmKLgru5ugwIDAQAB',
321
+ key2: 'MIIBCgKCAQEAkOpym7xC3sSysw5DAidLoVF7JUgnvXejbieDWmEiD-DQOKxzfQqYHoFfeeix__bx3wMW3I8cAc8zwZ1JO8hyB2ON732JE2Zp301GAUMnAK_rBhQWmYKP_-uXSKeTJPiuaW9PVG0oRJ4MEdS-t1vIA4eDPhI1EexHaY3P2wHKoV8twcGvdWUZB5gxEpMbx5CuvEXptnXEJlxKou3TZu9uwJIo0pgqVLUgRpW1RSRipgutpUslBnQ72Bdbsry0KKVTlcPsudAnnWUtsMJNgmyQbESPm-aVv-GzdVUFvWKpKkAxDpNArPMf0xt8VL2frw2LDe5_n9IMFogUiSYt156_mQIDAQAB',
322
+ key3: 'MIIBCgKCAQEAyvxCWbLvtMRmq57oFg3mY4DWfkb1dir7b29E8UcwcKDcCsGTqoIhubU2pO46TVUXmFgC4E-Zlxt-9F-YA-MY7i_5GrDvySwAy4nbDhRL6Z0kz-rqUirgm9WWsP9v-X_BwzARqq83HNBuzAjf3UHgYDsKmCCarVAzRplZdT3Q5rnNiYPYSHzwfUhKEAyXk71UdtleD-bsMAmwnuYHLhDHiT279An_Ta93c9MTqa_Tq2Eirl_NXn1RdtbNohmMXldAH-C8uIh3Sz8erS4hZFSdUG1WlDsKpyRouNPQ3diorbO88wEAgpHjXkOLj63d1fYJBFG0yfu73U80aEZehQkSawIDAQAB',
323
+ key4: 'MIIBCgKCAQEA0TVoXLpgluaqw3P011zFPSIzWhUMBqXT-Ocjy8NKjJbdrbs53eRFKk1waeB3hNn5JEKNVSNbUIe-MjacB9P34iCfKtdnrdDB8JXx0nIbIPzLtcJC4HCYASpjX_TVXrU9BgeCE3NUtnIxjHDy8PCbJyAS_Pv299Q_wpLWnkkjq70ZJ2_fX-ObbQaZHwsWKbRZ_5sD6rLfxNACTGI_jo9-vVug6AdNq96J7nUdYV1cG-INQwJJKMcAbKQcLrml8CMPc2mmf0KQ5MbS_KSbLXHUF-81AsZVHfQRSuigOStQKxgSGL5osY4NrEcODbEXtkuDrKNMsZYhijKiUHBj9vvgKwIDAQAB',
324
+ key5: 'MIIBCgKCAQEAueOWC26w-HlOLW7s88WeWkXpjxK4mkjqngIzwbjnsU9145R51HvsILvjXJNdAuueVDHj3OOtQjfUM6eMMLr-3kaPv68y4FNusvB49uKc5ETI0HtHmHFSn9qAZvC7dQHSpYqC2TeCus-xKeUciQ5AmSfwpNtwzM6Oh2TO45zAqSA-QBSk_uv9TJu0e1W1AlNmizQtHX6je-mvqZCVHkzGFSQWQ8DBL9dHjviI2mmWfL_egAVVhBgTFXRHg5OmJbbPoHj217Yh-kHYA8IWEAHylboH6CVBdrNL4Na0fracQVTm-nOWdM95dKk3fH-KJYk_SmwB47ndWACLLi5epLl9vwIDAQAB',
325
+ key6: 'MIIBCgKCAQEA2PJRM7-4R97rHwY_zCkFA8B3llawb6gF7oAZCpxprl6KB5z2cqLAvUfEOBtnr7RIturX04p3ThnwaFnAR7ADVZWBGOYuAyaLzGHDI5mvs8D-NewG9vw8qRkTT7Mb8fuOHC6-_lTp9AF2OA2H4QYiT1vt43KbuD0Y2CCVrOTKzDMXG8msl_JvAKt4axY9RGUtBbv0NmpkBCjLZri5AaTMgjLdu8XBXCqoLx7qZL-Bwiv4njw-ZAI4jIszJTdGzMtoQ0zL7LBj_TDUBI4Qhf2bZTZlUSL3xeDWOKmd8Frksw3oKyJ17oCQK-EGau6EaJRGyasBXl8uOEWmYYgqOWirNwIDAQAB'
326
+ },
327
+ pem: {
328
+ key1: '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9Z/CZzxiNUz8+npqI4V1\n0+zW3AL7+M4UQDdd/17759Xzm0MOEfHOOsOgZxxNK1DEsbyCTCE05fd3Hz1mn1uG\njXvm5HnN2mL/3TOVxyLU6VwH9EDInnj4DNMFifs69il3KlviT3llRgPCcjF4xrF8\nd4SR0/N3eqS1f9CBJPNEKEH+am5Xb/FqAlOUoXkILF0UYxA/jNLoWBSq+1W58e4x\nDI0p0GuP0lN8f97HBtfB7ijbtF+VxIXtxRy+4jA49zK+CQrGmWqIm5DzZcBvUtVG\nZ3UXd6LeMXMJOifvuCneGC2T2uB6G2g5yD54+onmKIETyNX0LtpR1MsZmKLgru5u\ngwIDAQAB\n-----END PUBLIC KEY-----\n',
329
+ key2: '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkOpym7xC3sSysw5DAidL\noVF7JUgnvXejbieDWmEiD+DQOKxzfQqYHoFfeeix//bx3wMW3I8cAc8zwZ1JO8hy\nB2ON732JE2Zp301GAUMnAK/rBhQWmYKP/+uXSKeTJPiuaW9PVG0oRJ4MEdS+t1vI\nA4eDPhI1EexHaY3P2wHKoV8twcGvdWUZB5gxEpMbx5CuvEXptnXEJlxKou3TZu9u\nwJIo0pgqVLUgRpW1RSRipgutpUslBnQ72Bdbsry0KKVTlcPsudAnnWUtsMJNgmyQ\nbESPm+aVv+GzdVUFvWKpKkAxDpNArPMf0xt8VL2frw2LDe5/n9IMFogUiSYt156/\nmQIDAQAB\n-----END PUBLIC KEY-----\n',
330
+ key3: '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyvxCWbLvtMRmq57oFg3m\nY4DWfkb1dir7b29E8UcwcKDcCsGTqoIhubU2pO46TVUXmFgC4E+Zlxt+9F+YA+MY\n7i/5GrDvySwAy4nbDhRL6Z0kz+rqUirgm9WWsP9v+X/BwzARqq83HNBuzAjf3UHg\nYDsKmCCarVAzRplZdT3Q5rnNiYPYSHzwfUhKEAyXk71UdtleD+bsMAmwnuYHLhDH\niT279An/Ta93c9MTqa/Tq2Eirl/NXn1RdtbNohmMXldAH+C8uIh3Sz8erS4hZFSd\nUG1WlDsKpyRouNPQ3diorbO88wEAgpHjXkOLj63d1fYJBFG0yfu73U80aEZehQkS\nawIDAQAB\n-----END PUBLIC KEY-----\n',
331
+ key4: '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0TVoXLpgluaqw3P011zF\nPSIzWhUMBqXT+Ocjy8NKjJbdrbs53eRFKk1waeB3hNn5JEKNVSNbUIe+MjacB9P3\n4iCfKtdnrdDB8JXx0nIbIPzLtcJC4HCYASpjX/TVXrU9BgeCE3NUtnIxjHDy8PCb\nJyAS/Pv299Q/wpLWnkkjq70ZJ2/fX+ObbQaZHwsWKbRZ/5sD6rLfxNACTGI/jo9+\nvVug6AdNq96J7nUdYV1cG+INQwJJKMcAbKQcLrml8CMPc2mmf0KQ5MbS/KSbLXHU\nF+81AsZVHfQRSuigOStQKxgSGL5osY4NrEcODbEXtkuDrKNMsZYhijKiUHBj9vvg\nKwIDAQAB\n-----END PUBLIC KEY-----\n',
332
+ key5: '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAueOWC26w+HlOLW7s88We\nWkXpjxK4mkjqngIzwbjnsU9145R51HvsILvjXJNdAuueVDHj3OOtQjfUM6eMMLr+\n3kaPv68y4FNusvB49uKc5ETI0HtHmHFSn9qAZvC7dQHSpYqC2TeCus+xKeUciQ5A\nmSfwpNtwzM6Oh2TO45zAqSA+QBSk/uv9TJu0e1W1AlNmizQtHX6je+mvqZCVHkzG\nFSQWQ8DBL9dHjviI2mmWfL/egAVVhBgTFXRHg5OmJbbPoHj217Yh+kHYA8IWEAHy\nlboH6CVBdrNL4Na0fracQVTm+nOWdM95dKk3fH+KJYk/SmwB47ndWACLLi5epLl9\nvwIDAQAB\n-----END PUBLIC KEY-----\n',
333
+ key6: '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2PJRM7+4R97rHwY/zCkF\nA8B3llawb6gF7oAZCpxprl6KB5z2cqLAvUfEOBtnr7RIturX04p3ThnwaFnAR7AD\nVZWBGOYuAyaLzGHDI5mvs8D+NewG9vw8qRkTT7Mb8fuOHC6+/lTp9AF2OA2H4QYi\nT1vt43KbuD0Y2CCVrOTKzDMXG8msl/JvAKt4axY9RGUtBbv0NmpkBCjLZri5AaTM\ngjLdu8XBXCqoLx7qZL+Bwiv4njw+ZAI4jIszJTdGzMtoQ0zL7LBj/TDUBI4Qhf2b\nZTZlUSL3xeDWOKmd8Frksw3oKyJ17oCQK+EGau6EaJRGyasBXl8uOEWmYYgqOWir\nNwIDAQAB\n-----END PUBLIC KEY-----\n'
334
+ }
335
+ }
336
+
337
+ let _keeperKeys: KeeperKeys = {
338
+ der: [], pem: []
339
+ }
340
+
341
+ for (let key in keys.der) {
342
+ _keeperKeys.der.push(normal64(keys.der[key]))
343
+ }
344
+ for (let key in keys.pem) {
345
+ _keeperKeys.pem.push(keys.pem[key])
346
+ }
347
+
348
+ export const keeperKeys: KeeperKeys = _keeperKeys
349
+
350
+
@@ -0,0 +1,17 @@
1
+ export * from "../endpoint";
2
+ export * from "../auth";
3
+ export * from "../vendorContext";
4
+ export * from "../vendorModel";
5
+ export * from "../vault";
6
+ export * from "../company";
7
+ export * from "../configuration";
8
+ export * from "../commands";
9
+ export * from "../restMessages";
10
+ export * from "../utils";
11
+ export * from "../platform";
12
+ export * from "../proto";
13
+ import {connectPlatform} from "../platform";
14
+ import {nodePlatform} from "./platform";
15
+
16
+ connectPlatform(nodePlatform);
17
+
@@ -0,0 +1,283 @@
1
+ import * as crypto from "crypto";
2
+ import {createECDH} from "crypto";
3
+ import * as https from "https";
4
+ import * as FormData from "form-data"
5
+ import * as NodeRSA from 'node-rsa';
6
+ import * as WebSocket from 'faye-websocket'
7
+
8
+ import {KeyWrapper, Platform} from "../platform";
9
+ import {RSA_PKCS1_PADDING} from "constants";
10
+ import {KeeperHttpResponse} from "../commands";
11
+ import {keeperKeys} from "../endpoint";
12
+ import {SocketProxy, socketSendMessage} from '../auth'
13
+
14
+ export const nodePlatform: Platform = class {
15
+ static keys = keeperKeys.pem;
16
+
17
+ static getRandomBytes(length: number): Uint8Array {
18
+ return crypto.randomBytes(length);
19
+ }
20
+
21
+ static bytesToBase64(data: Uint8Array): string {
22
+ return Buffer.from(data).toString("base64");
23
+ }
24
+
25
+ static base64ToBytes(data: string): Uint8Array {
26
+ return Buffer.from(data, "base64");
27
+ }
28
+
29
+ static bytesToString(data: Uint8Array): string {
30
+ return Buffer.from(data).toString();
31
+ }
32
+
33
+ static stringToBytes(data: string): Uint8Array {
34
+ return Buffer.from(data);
35
+ }
36
+
37
+ static wrapPassword(password: Uint8Array): KeyWrapper {
38
+ return KeyWrapper.create(password)
39
+ }
40
+
41
+ static unWrapPassword(password: KeyWrapper): Uint8Array {
42
+ return password.getKey()
43
+ }
44
+
45
+ static async generateRSAKeyPair(): Promise<{ privateKey: Uint8Array; publicKey: Uint8Array}> {
46
+ const rsaKeys = new NodeRSA({b: 2048});
47
+ const rsaPublicKey: Buffer = rsaKeys.exportKey('public-der');
48
+ const rsaPrivateKey: Buffer = rsaKeys.exportKey('private-der');
49
+ return Promise.resolve({
50
+ privateKey: rsaPrivateKey,
51
+ publicKey: rsaPublicKey
52
+ })
53
+ }
54
+
55
+ static async generateECKeyPair(): Promise<{ privateKey: Uint8Array; publicKey: Uint8Array }> {
56
+ const ecdh = createECDH('prime256v1')
57
+ ecdh.generateKeys()
58
+ return Promise.resolve({
59
+ privateKey: ecdh.getPrivateKey(),
60
+ publicKey: ecdh.getPublicKey()
61
+ })
62
+ }
63
+
64
+ static publicEncrypt(data: Uint8Array, key: string): Uint8Array {
65
+ let publicKey = key[0] === '-' // PEM or DER?
66
+ ? key
67
+ : crypto.createPublicKey({
68
+ key: Buffer.from(key, 'base64'),
69
+ type: 'pkcs1',
70
+ format: 'der'
71
+ })
72
+ return crypto.publicEncrypt({
73
+ key: publicKey,
74
+ padding: RSA_PKCS1_PADDING
75
+ }, data)
76
+ }
77
+
78
+ static async publicEncryptEC(data: Uint8Array, key: Uint8Array, id?: Uint8Array): Promise<Uint8Array> {
79
+ const ecdh = createECDH('prime256v1')
80
+ ecdh.generateKeys()
81
+ const ephemeralPublicKey = ecdh.getPublicKey()
82
+ const sharedSecret = ecdh.computeSecret(key)
83
+ const sharedSecretCombined = Buffer.concat([sharedSecret, id || new Uint8Array()])
84
+ const symmetricKey = crypto.createHash("SHA256").update(sharedSecretCombined).digest()
85
+ const encryptedData = await this.aesGcmEncrypt(data, symmetricKey)
86
+ return Buffer.concat([ephemeralPublicKey, encryptedData])
87
+ }
88
+
89
+ static privateDecrypt(data: Uint8Array, key: Uint8Array): Uint8Array {
90
+ return crypto.privateDecrypt({
91
+ key: crypto.createPrivateKey({
92
+ key: Buffer.from(key),
93
+ type: 'pkcs1',
94
+ format: 'der',
95
+ }),
96
+ padding: RSA_PKCS1_PADDING
97
+ }, data);
98
+ }
99
+
100
+ static async privateDecryptEC(data: Uint8Array, privateKey: Uint8Array, publicKey?: Uint8Array, id?: Uint8Array): Promise<Uint8Array> {
101
+ const ecdh = createECDH('prime256v1')
102
+ ecdh.setPrivateKey(privateKey)
103
+ const publicKeyLength = 65
104
+ const ephemeralPublicKey = data.slice(0, publicKeyLength)
105
+ const sharedSecret = ecdh.computeSecret(ephemeralPublicKey)
106
+ const sharedSecretCombined = Buffer.concat([sharedSecret, id || new Uint8Array()])
107
+ const symmetricKey = crypto.createHash("SHA256").update(sharedSecretCombined).digest()
108
+ const encryptedData = data.slice(publicKeyLength)
109
+ return await this.aesGcmDecrypt(encryptedData, symmetricKey)
110
+ }
111
+
112
+ static privateSign(data: Uint8Array, key: string): Promise<Uint8Array> {
113
+ return Promise.resolve(crypto
114
+ .createSign("SHA256")
115
+ .update(data)
116
+ .sign(key));
117
+ }
118
+
119
+ static aesGcmEncrypt(data: Uint8Array, key: Uint8Array): Promise<Uint8Array> {
120
+ let iv = crypto.randomBytes(12);
121
+ let cipher = crypto.createCipheriv("aes-256-gcm", key, iv);
122
+ let encrypted = Buffer.concat([cipher.update(data), cipher.final()]);
123
+ const tag = cipher.getAuthTag();
124
+ let result = Buffer.concat([iv, encrypted, tag]);
125
+ return Promise.resolve(result);
126
+ }
127
+
128
+ static aesGcmDecrypt(data: Uint8Array, key: Uint8Array): Promise<Uint8Array> {
129
+ let iv = data.subarray(0, 12);
130
+ let encrypted = data.subarray(12, data.length - 16);
131
+ let tag = data.subarray(data.length - 16);
132
+ let cipher = crypto.createDecipheriv("aes-256-gcm", key, iv);
133
+ cipher.setAuthTag(tag);
134
+ return Promise.resolve(Buffer.concat([cipher.update(encrypted), cipher.final()]));
135
+ }
136
+
137
+ static async aesCbcEncrypt(data: Uint8Array, key: Uint8Array, usePadding: boolean): Promise<Uint8Array> {
138
+ let iv = crypto.randomBytes(16);
139
+ let cipher = crypto
140
+ .createCipheriv("aes-256-cbc", key, iv)
141
+ .setAutoPadding(usePadding);
142
+ let encrypted = Buffer.concat([cipher.update(data), cipher.final()]);
143
+ return Buffer.concat([iv, encrypted]);
144
+ }
145
+
146
+ static async aesCbcDecrypt(data: Uint8Array, key: Uint8Array, usePadding: boolean): Promise<Uint8Array> {
147
+ let iv = data.subarray(0, 16);
148
+ let encrypted = data.subarray(16);
149
+ let cipher = crypto
150
+ .createDecipheriv("aes-256-cbc", key, iv)
151
+ .setAutoPadding(usePadding);
152
+ return Buffer.concat([cipher.update(encrypted), cipher.final()]);
153
+ }
154
+
155
+ static deriveKey(password: KeyWrapper, saltBytes: Uint8Array, iterations: number): Promise<Uint8Array> {
156
+ return Promise.resolve(crypto.pbkdf2Sync(password.getKey(), saltBytes, iterations, 32, 'SHA256'));
157
+ }
158
+
159
+ static deriveKeyV2(domain: string, password: KeyWrapper, saltBytes: Uint8Array, iterations: number): Promise<Uint8Array> {
160
+ const bytes = crypto.pbkdf2Sync(Buffer.of(...Buffer.from(domain), ...nodePlatform.unWrapPassword(password.getKey())), saltBytes, iterations, 64, 'SHA512')
161
+ const reducedBytes = crypto.createHmac("SHA256", bytes).update(Buffer.from(domain)).digest()
162
+ return Promise.resolve(reducedBytes);
163
+ }
164
+
165
+ static calcAuthVerifier(key: Uint8Array): Promise<Uint8Array> {
166
+ return Promise.resolve(crypto.createHash("SHA256").update(key).digest());
167
+ }
168
+
169
+ static get(
170
+ url: string,
171
+ headers?: {[key: string]: string}
172
+ ): Promise<KeeperHttpResponse> {
173
+ return new Promise<KeeperHttpResponse>((resolve, reject) => {
174
+ let get = https.request(url, {
175
+ method: "get",
176
+ headers: {
177
+ "User-Agent": `Node/${process.version}`,
178
+ ...headers
179
+ }
180
+ }, (res) => {
181
+ this.fetchData(res, resolve);
182
+ });
183
+ get.on('error', reject)
184
+ get.end();
185
+ })
186
+ }
187
+
188
+ static post(
189
+ url: string,
190
+ request: Uint8Array | string,
191
+ headers?: {[key: string]: string}
192
+ ): Promise<KeeperHttpResponse> {
193
+ return new Promise<KeeperHttpResponse>((resolve, reject) => {
194
+ let post = https.request(url, {
195
+ method: "post",
196
+ headers: {
197
+ "Content-Type": "application/octet-stream",
198
+ "Content-Length": request.length,
199
+ "User-Agent": `Node/${process.version}`,
200
+ ...headers,
201
+ },
202
+ }, (res) => {
203
+ this.fetchData(res, resolve)
204
+ });
205
+ post.on('error', reject)
206
+ post.write(request);
207
+ post.end();
208
+ })
209
+ }
210
+
211
+ static fileUpload(
212
+ url: string,
213
+ uploadParameters: {[key: string]: string},
214
+ data: Uint8Array
215
+ ): Promise<any> {
216
+ return new Promise<any>((resolve, reject) => {
217
+ const form = new FormData()
218
+
219
+ for (const key in uploadParameters) {
220
+ form.append(key, uploadParameters[key]);
221
+ }
222
+ form.append('file', data)
223
+
224
+ let post = https.request(url, {
225
+ method: "post",
226
+ headers: form.getHeaders()
227
+ });
228
+ form.pipe(post)
229
+ post.on('error', reject)
230
+ post.on('response', function (res: any) {
231
+ resolve({
232
+ headers: res.headers,
233
+ statusCode: res.statusCode,
234
+ statusMessage: res.statusMessage
235
+ })
236
+ })
237
+ })
238
+ }
239
+
240
+ private static fetchData(res, resolve) {
241
+ let retVal = {
242
+ statusCode: res.statusCode,
243
+ headers: res.headers,
244
+ data: null
245
+ };
246
+ res.on("data", data => {
247
+ retVal.data = retVal.data
248
+ ? Buffer.concat([retVal.data, data])
249
+ : data
250
+ });
251
+ res.on("end", () => {
252
+ resolve(retVal);
253
+ });
254
+ }
255
+
256
+ static createWebsocket(url: string): SocketProxy {
257
+ const socket = new WebSocket.Client(url)
258
+ let createdSocket;
259
+ return createdSocket = {
260
+ onOpen: (callback: () => void) => {
261
+ socket.on('open', callback)
262
+ },
263
+ close: () => {
264
+ socket.close()
265
+ },
266
+ onClose: (callback: (e:Event) => void) => {
267
+ socket.on('close', callback)
268
+ },
269
+ onError: (callback: (err: Error) => void) => {
270
+ socket.on('error', callback)
271
+ },
272
+ onMessage: (callback: (e: Uint8Array) => void) => {
273
+ socket.on('message', (e: MessageEvent) => {
274
+ callback(e.data)
275
+ })
276
+ },
277
+ send: (message => {
278
+ socketSendMessage(message, socket, createdSocket)
279
+ }),
280
+ messageQueue: [],
281
+ }
282
+ }
283
+ };