From 5fbe772684f980e3969b9a4d844fb792b179162f Mon Sep 17 00:00:00 2001 From: Yukan Date: Wed, 19 Aug 2020 17:23:13 -0400 Subject: [PATCH] feat: add keychain package --- .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../018dd99255a534837916033f04b396b3c5b771ad | 0 .../061a2a662a532413fb382823dd2453c8537b4338 | 0 .../0a3685808888de90b1b3ecb36564030637748ab4 | 0 .../0a446c325cb8c24fe811c6b19aab7ab275c0db86 | 0 .../15bd539a8b73339bee06677ee708a3282bbc9381 | 0 .../20a495fb1dfe731713dfda92e7a4719aab33fa3f | 0 .../28bd272a34625bd8e74ee2237a679979e14acd69 | 0 .../298c4c482e5e8695fe5b439f9bd4a710f5476742 | 0 .../2c3d9cd8ceb5c0183b19b2b638e291bc525011ce | 0 .../314c9c585547e1ee805fe1597f307af31b72559c | 0 .../3610ab0cae618e49ed640a6de622cab1867a3279 | 0 .../39f625af48fcdb5e736b8a9ab0f109480c95510e | 0 .../420b2f97ccbc239de9691385af956534d4545c2c | 0 .../4796d97ff3ea5e5caa9fe28a603eb51d36712156 | 0 .../4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 | 0 .../4cfe53f7d2be6c72b1495a9756434179a44adac5 | 0 .../4f4b91b5ea480a58d20a40be48fe5eeef8cec235 | 0 .../52c95394db9042c340e050a9daf07c220e13c1a9 | 0 .../5636ae99aac5467ffdd23e74452bc16e2f851a89 | 0 .../5b3ce567ec9254d08d8f4a28e1de72024ba6b311 | 0 .../5d505bd6033614b83472130afc442eb22c6f5b82 | 0 .../68a97be92cadc023d3b6c6b48771d54104a78627 | 0 .../747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 | 0 .../74d99e3f4913186c7d910fdb89fd70b4c52c0165 | 0 .../77be180552308ee56eca33fa0bb84265c89dbfa0 | 0 .../7ddb0f66786a3703f3f195c455a12bff889c8bcd | 0 .../7f9c457a28805a67029ffd99e65c70684da51c50 | 0 .../808e8c20e1197288fb985d7783266d2f2e22f6f2 | 0 .../81beb3f96fea6641c58362feec8bbd0bfc8388eb | 0 .../826f10c8f5ae490a156c6929d4b35933ba672a51 | 0 .../875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 | 0 .../8ce3136d5e93f85302e65da07c4490e75920e111 | 0 .../8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 | 0 .../952b3e2542bee782b990d0b76011cd46028160a2 | 0 .../98cea4347c2c64de95d06bb8d324c781f54b78c0 | 0 .../9a77639b5f3a7e3514cf67391c5346777e65ca11 | 0 .../9ed2612615091d088e52b934dbdc159280dc237c | 0 .../a1afc86caf79df50b054cb5aeceb661e6c52dcad | 0 .../a2503f6faa05b23568c7de81fbc06a2f8a9c5653 | 0 .../a57444ecf97c5452d43fd234f345ed3cb6d284dd | 0 .../a7d095190f82312241dfeb26daa76e95c4ea07d8 | 0 .../af470c7a1abb2658e06e01a602fccbcdfeca5351 | 0 .../b76be8f94a8337c1ece3bcfc01c0959eb2714479 | 0 .../bb232be6f4e91036318a1c4c8bab84163fee3069 | 0 .../c3d05c43e37392271aa3b4b0f9b30f425dc65f94 | 0 .../cb06d8f5731aa84e96067f43359e74f9836130af | 0 .../cb9a36baab558a41562633e18c5201d5d5568cdc | 0 .../cd8445e3b03d9c3b1dec11ef365aff4222641c73 | 0 .../d19188fc31e61bc54c1f1846312e66f6e09a3f0e | 0 .../d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 | 0 .../df3accc7b1f17bfe1818f68f26a3c075ca29d4bd | 0 .../e037b1c1df5b9423d795f7a6a8876408105d8566 | 0 .../ee827e2392a2ccd738741679fcd76b97d0516c90 | 0 .../f2dfa032b844e39c4a65c35652abc193da342e75 | 0 .../fae54f93545510c8db4ed307ea8397a19112446a | 0 .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../018dd99255a534837916033f04b396b3c5b771ad | 0 .../061a2a662a532413fb382823dd2453c8537b4338 | 0 .../0a3685808888de90b1b3ecb36564030637748ab4 | 0 .../0a446c325cb8c24fe811c6b19aab7ab275c0db86 | 0 .../15bd539a8b73339bee06677ee708a3282bbc9381 | 0 .../20a495fb1dfe731713dfda92e7a4719aab33fa3f | 0 .../28bd272a34625bd8e74ee2237a679979e14acd69 | 0 .../298c4c482e5e8695fe5b439f9bd4a710f5476742 | 0 .../2c3d9cd8ceb5c0183b19b2b638e291bc525011ce | 0 .../314c9c585547e1ee805fe1597f307af31b72559c | 0 .../3610ab0cae618e49ed640a6de622cab1867a3279 | 0 .../39f625af48fcdb5e736b8a9ab0f109480c95510e | 0 .../420b2f97ccbc239de9691385af956534d4545c2c | 0 .../4796d97ff3ea5e5caa9fe28a603eb51d36712156 | 0 .../4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 | 0 .../4cfe53f7d2be6c72b1495a9756434179a44adac5 | 0 .../4f4b91b5ea480a58d20a40be48fe5eeef8cec235 | 0 .../52c95394db9042c340e050a9daf07c220e13c1a9 | 0 .../5636ae99aac5467ffdd23e74452bc16e2f851a89 | 0 .../5b3ce567ec9254d08d8f4a28e1de72024ba6b311 | 0 .../5d505bd6033614b83472130afc442eb22c6f5b82 | 0 .../68a97be92cadc023d3b6c6b48771d54104a78627 | 0 .../747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 | 0 .../74d99e3f4913186c7d910fdb89fd70b4c52c0165 | 0 .../77be180552308ee56eca33fa0bb84265c89dbfa0 | 0 .../7ddb0f66786a3703f3f195c455a12bff889c8bcd | 0 .../7f9c457a28805a67029ffd99e65c70684da51c50 | 0 .../808e8c20e1197288fb985d7783266d2f2e22f6f2 | 0 .../81beb3f96fea6641c58362feec8bbd0bfc8388eb | 0 .../826f10c8f5ae490a156c6929d4b35933ba672a51 | 0 .../875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 | 0 .../8ce3136d5e93f85302e65da07c4490e75920e111 | 0 .../8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 | 0 .../952b3e2542bee782b990d0b76011cd46028160a2 | 0 .../98cea4347c2c64de95d06bb8d324c781f54b78c0 | 0 .../9a77639b5f3a7e3514cf67391c5346777e65ca11 | 0 .../9ed2612615091d088e52b934dbdc159280dc237c | 0 .../a1afc86caf79df50b054cb5aeceb661e6c52dcad | 0 .../a2503f6faa05b23568c7de81fbc06a2f8a9c5653 | 0 .../a57444ecf97c5452d43fd234f345ed3cb6d284dd | 0 .../a7d095190f82312241dfeb26daa76e95c4ea07d8 | 0 .../af470c7a1abb2658e06e01a602fccbcdfeca5351 | 0 .../b76be8f94a8337c1ece3bcfc01c0959eb2714479 | 0 .../bb232be6f4e91036318a1c4c8bab84163fee3069 | 0 .../c3d05c43e37392271aa3b4b0f9b30f425dc65f94 | 0 .../cb06d8f5731aa84e96067f43359e74f9836130af | 0 .../cb9a36baab558a41562633e18c5201d5d5568cdc | 0 .../cd8445e3b03d9c3b1dec11ef365aff4222641c73 | 0 .../d19188fc31e61bc54c1f1846312e66f6e09a3f0e | 0 .../d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 | 0 .../df3accc7b1f17bfe1818f68f26a3c075ca29d4bd | 0 .../e037b1c1df5b9423d795f7a6a8876408105d8566 | 0 .../ee827e2392a2ccd738741679fcd76b97d0516c90 | 0 .../f2dfa032b844e39c4a65c35652abc193da342e75 | 0 .../fae54f93545510c8db4ed307ea8397a19112446a | 0 .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../018dd99255a534837916033f04b396b3c5b771ad | 0 .../061a2a662a532413fb382823dd2453c8537b4338 | 0 .../0a3685808888de90b1b3ecb36564030637748ab4 | 0 .../0a446c325cb8c24fe811c6b19aab7ab275c0db86 | 0 .../15bd539a8b73339bee06677ee708a3282bbc9381 | 0 .../20a495fb1dfe731713dfda92e7a4719aab33fa3f | 0 .../28bd272a34625bd8e74ee2237a679979e14acd69 | 0 .../298c4c482e5e8695fe5b439f9bd4a710f5476742 | 0 .../2c3d9cd8ceb5c0183b19b2b638e291bc525011ce | 0 .../314c9c585547e1ee805fe1597f307af31b72559c | 0 .../3610ab0cae618e49ed640a6de622cab1867a3279 | 0 .../39f625af48fcdb5e736b8a9ab0f109480c95510e | 0 .../420b2f97ccbc239de9691385af956534d4545c2c | 0 .../4796d97ff3ea5e5caa9fe28a603eb51d36712156 | 0 .../4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 | 0 .../4cfe53f7d2be6c72b1495a9756434179a44adac5 | 0 .../4f4b91b5ea480a58d20a40be48fe5eeef8cec235 | 0 .../52c95394db9042c340e050a9daf07c220e13c1a9 | 0 .../5636ae99aac5467ffdd23e74452bc16e2f851a89 | 0 .../5b3ce567ec9254d08d8f4a28e1de72024ba6b311 | 0 .../5d505bd6033614b83472130afc442eb22c6f5b82 | 0 .../68a97be92cadc023d3b6c6b48771d54104a78627 | 0 .../747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 | 0 .../74d99e3f4913186c7d910fdb89fd70b4c52c0165 | 0 .../77be180552308ee56eca33fa0bb84265c89dbfa0 | 0 .../7ddb0f66786a3703f3f195c455a12bff889c8bcd | 0 .../7f9c457a28805a67029ffd99e65c70684da51c50 | 0 .../808e8c20e1197288fb985d7783266d2f2e22f6f2 | 0 .../81beb3f96fea6641c58362feec8bbd0bfc8388eb | 0 .../826f10c8f5ae490a156c6929d4b35933ba672a51 | 0 .../875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 | 0 .../8ce3136d5e93f85302e65da07c4490e75920e111 | 0 .../8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 | 0 .../952b3e2542bee782b990d0b76011cd46028160a2 | 0 .../98cea4347c2c64de95d06bb8d324c781f54b78c0 | 0 .../9a77639b5f3a7e3514cf67391c5346777e65ca11 | 0 .../9ed2612615091d088e52b934dbdc159280dc237c | 0 .../a1afc86caf79df50b054cb5aeceb661e6c52dcad | 0 .../a2503f6faa05b23568c7de81fbc06a2f8a9c5653 | 0 .../a57444ecf97c5452d43fd234f345ed3cb6d284dd | 0 .../a7d095190f82312241dfeb26daa76e95c4ea07d8 | 0 .../af470c7a1abb2658e06e01a602fccbcdfeca5351 | 0 .../b76be8f94a8337c1ece3bcfc01c0959eb2714479 | 0 .../bb232be6f4e91036318a1c4c8bab84163fee3069 | 0 .../c3d05c43e37392271aa3b4b0f9b30f425dc65f94 | 0 .../cb06d8f5731aa84e96067f43359e74f9836130af | 0 .../cb9a36baab558a41562633e18c5201d5d5568cdc | 0 .../cd8445e3b03d9c3b1dec11ef365aff4222641c73 | 0 .../d19188fc31e61bc54c1f1846312e66f6e09a3f0e | 0 .../d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 | 0 .../df3accc7b1f17bfe1818f68f26a3c075ca29d4bd | 0 .../e037b1c1df5b9423d795f7a6a8876408105d8566 | 0 .../ee827e2392a2ccd738741679fcd76b97d0516c90 | 0 .../f2dfa032b844e39c4a65c35652abc193da342e75 | 0 .../fae54f93545510c8db4ed307ea8397a19112446a | 0 .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../018dd99255a534837916033f04b396b3c5b771ad | 0 .../061a2a662a532413fb382823dd2453c8537b4338 | 0 .../0a3685808888de90b1b3ecb36564030637748ab4 | 0 .../0a446c325cb8c24fe811c6b19aab7ab275c0db86 | 0 .../15bd539a8b73339bee06677ee708a3282bbc9381 | 0 .../20a495fb1dfe731713dfda92e7a4719aab33fa3f | 0 .../28bd272a34625bd8e74ee2237a679979e14acd69 | 0 .../298c4c482e5e8695fe5b439f9bd4a710f5476742 | 0 .../2c3d9cd8ceb5c0183b19b2b638e291bc525011ce | 0 .../314c9c585547e1ee805fe1597f307af31b72559c | 0 .../3610ab0cae618e49ed640a6de622cab1867a3279 | 0 .../39f625af48fcdb5e736b8a9ab0f109480c95510e | 0 .../420b2f97ccbc239de9691385af956534d4545c2c | 0 .../4796d97ff3ea5e5caa9fe28a603eb51d36712156 | 0 .../4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 | 0 .../4cfe53f7d2be6c72b1495a9756434179a44adac5 | 0 .../4f4b91b5ea480a58d20a40be48fe5eeef8cec235 | 0 .../52c95394db9042c340e050a9daf07c220e13c1a9 | 0 .../5636ae99aac5467ffdd23e74452bc16e2f851a89 | 0 .../5b3ce567ec9254d08d8f4a28e1de72024ba6b311 | 0 .../5d505bd6033614b83472130afc442eb22c6f5b82 | 0 .../68a97be92cadc023d3b6c6b48771d54104a78627 | 0 .../747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 | 0 .../74d99e3f4913186c7d910fdb89fd70b4c52c0165 | 0 .../77be180552308ee56eca33fa0bb84265c89dbfa0 | 0 .../7ddb0f66786a3703f3f195c455a12bff889c8bcd | 0 .../7f9c457a28805a67029ffd99e65c70684da51c50 | 0 .../808e8c20e1197288fb985d7783266d2f2e22f6f2 | 0 .../81beb3f96fea6641c58362feec8bbd0bfc8388eb | 0 .../826f10c8f5ae490a156c6929d4b35933ba672a51 | 0 .../875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 | 0 .../8ce3136d5e93f85302e65da07c4490e75920e111 | 0 .../8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 | 0 .../952b3e2542bee782b990d0b76011cd46028160a2 | 0 .../98cea4347c2c64de95d06bb8d324c781f54b78c0 | 0 .../9a77639b5f3a7e3514cf67391c5346777e65ca11 | 0 .../9ed2612615091d088e52b934dbdc159280dc237c | 0 .../a1afc86caf79df50b054cb5aeceb661e6c52dcad | 0 .../a2503f6faa05b23568c7de81fbc06a2f8a9c5653 | 0 .../a57444ecf97c5452d43fd234f345ed3cb6d284dd | 0 .../a7d095190f82312241dfeb26daa76e95c4ea07d8 | 0 .../af470c7a1abb2658e06e01a602fccbcdfeca5351 | 0 .../b76be8f94a8337c1ece3bcfc01c0959eb2714479 | 0 .../bb232be6f4e91036318a1c4c8bab84163fee3069 | 0 .../c3d05c43e37392271aa3b4b0f9b30f425dc65f94 | 0 .../cb06d8f5731aa84e96067f43359e74f9836130af | 0 .../cb9a36baab558a41562633e18c5201d5d5568cdc | 0 .../cd8445e3b03d9c3b1dec11ef365aff4222641c73 | 0 .../d19188fc31e61bc54c1f1846312e66f6e09a3f0e | 0 .../d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 | 0 .../df3accc7b1f17bfe1818f68f26a3c075ca29d4bd | 0 .../e037b1c1df5b9423d795f7a6a8876408105d8566 | 0 .../ee827e2392a2ccd738741679fcd76b97d0516c90 | 0 .../f2dfa032b844e39c4a65c35652abc193da342e75 | 0 .../fae54f93545510c8db4ed307ea8397a19112446a | 0 .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../13205ad398a43e460b6d020ace429ae0e402d81c | 1 + .../1a8c0b6b5298dfc08d6fb8f612117758f72c926c | 1 + .../45640da831af9251e3e0a267bb25325b1a5f1c6d | 1 + .../583c0db565c43efc8d8092079c22a079d6a6616a | 1 + .../68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 | 1 + .../8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a | 1 + .../98e2ad19af17ce694186201b537c60c71e2375eb | 1 + .../cfe0e5d47dbef6cb464e0b40939f015ab4348e19 | 1 + .../e1a34eceff5cefebe7e287b9c11f870a3860728b | 1 + .../ee82aa9feb8685e9267176ef94f3c7a3f70999b0 | 1 + .../f77f65834a206228f8276350a71aa5e8683e1dd1 | 1 + .../fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 | 1 + .../018dd99255a534837916033f04b396b3c5b771ad | 0 .../061a2a662a532413fb382823dd2453c8537b4338 | 0 .../0a3685808888de90b1b3ecb36564030637748ab4 | 0 .../0a446c325cb8c24fe811c6b19aab7ab275c0db86 | 0 .../15bd539a8b73339bee06677ee708a3282bbc9381 | 0 .../20a495fb1dfe731713dfda92e7a4719aab33fa3f | 0 .../28bd272a34625bd8e74ee2237a679979e14acd69 | 0 .../298c4c482e5e8695fe5b439f9bd4a710f5476742 | 0 .../2c3d9cd8ceb5c0183b19b2b638e291bc525011ce | 0 .../314c9c585547e1ee805fe1597f307af31b72559c | 0 .../3610ab0cae618e49ed640a6de622cab1867a3279 | 0 .../39f625af48fcdb5e736b8a9ab0f109480c95510e | 0 .../420b2f97ccbc239de9691385af956534d4545c2c | 0 .../4796d97ff3ea5e5caa9fe28a603eb51d36712156 | 0 .../4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 | 0 .../4cfe53f7d2be6c72b1495a9756434179a44adac5 | 0 .../4f4b91b5ea480a58d20a40be48fe5eeef8cec235 | 0 .../52c95394db9042c340e050a9daf07c220e13c1a9 | 0 .../5636ae99aac5467ffdd23e74452bc16e2f851a89 | 0 .../5b3ce567ec9254d08d8f4a28e1de72024ba6b311 | 0 .../5d505bd6033614b83472130afc442eb22c6f5b82 | 0 .../68a97be92cadc023d3b6c6b48771d54104a78627 | 0 .../747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 | 0 .../74d99e3f4913186c7d910fdb89fd70b4c52c0165 | 0 .../77be180552308ee56eca33fa0bb84265c89dbfa0 | 0 .../7ddb0f66786a3703f3f195c455a12bff889c8bcd | 0 .../7f9c457a28805a67029ffd99e65c70684da51c50 | 0 .../808e8c20e1197288fb985d7783266d2f2e22f6f2 | 0 .../81beb3f96fea6641c58362feec8bbd0bfc8388eb | 0 .../826f10c8f5ae490a156c6929d4b35933ba672a51 | 0 .../875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 | 0 .../8ce3136d5e93f85302e65da07c4490e75920e111 | 0 .../8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 | 0 .../952b3e2542bee782b990d0b76011cd46028160a2 | 0 .../98cea4347c2c64de95d06bb8d324c781f54b78c0 | 0 .../9a77639b5f3a7e3514cf67391c5346777e65ca11 | 0 .../9ed2612615091d088e52b934dbdc159280dc237c | 0 .../a1afc86caf79df50b054cb5aeceb661e6c52dcad | 0 .../a2503f6faa05b23568c7de81fbc06a2f8a9c5653 | 0 .../a57444ecf97c5452d43fd234f345ed3cb6d284dd | 0 .../a7d095190f82312241dfeb26daa76e95c4ea07d8 | 0 .../af470c7a1abb2658e06e01a602fccbcdfeca5351 | 0 .../b76be8f94a8337c1ece3bcfc01c0959eb2714479 | 0 .../bb232be6f4e91036318a1c4c8bab84163fee3069 | 0 .../c3d05c43e37392271aa3b4b0f9b30f425dc65f94 | 0 .../cb06d8f5731aa84e96067f43359e74f9836130af | 0 .../cb9a36baab558a41562633e18c5201d5d5568cdc | 0 .../cd8445e3b03d9c3b1dec11ef365aff4222641c73 | 0 .../d19188fc31e61bc54c1f1846312e66f6e09a3f0e | 0 .../d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 | 0 .../df3accc7b1f17bfe1818f68f26a3c075ca29d4bd | 0 .../e037b1c1df5b9423d795f7a6a8876408105d8566 | 0 .../ee827e2392a2ccd738741679fcd76b97d0516c90 | 0 .../f2dfa032b844e39c4a65c35652abc193da342e75 | 0 .../fae54f93545510c8db4ed307ea8397a19112446a | 0 packages/keychain/README.md | 11 + packages/keychain/jest.config.js | 16 + packages/keychain/package-lock.json | 1690 +++++++++++++++++ packages/keychain/package.json | 93 + .../keychain/src/address-derivation/index.ts | 36 + packages/keychain/src/encryption/decrypt.ts | 14 + packages/keychain/src/encryption/encrypt.ts | 12 + packages/keychain/src/identity.ts | 170 ++ packages/keychain/src/index.ts | 15 + packages/keychain/src/mnemonic/index.ts | 45 + .../src/nodes/identity-address-owner-node.ts | 76 + packages/keychain/src/profiles.ts | 203 ++ packages/keychain/src/types/zone-file.d.ts | 11 + packages/keychain/src/utils/gaia.ts | 138 ++ packages/keychain/src/utils/index.ts | 260 +++ packages/keychain/src/wallet/index.ts | 330 ++++ packages/keychain/src/wallet/signer.ts | 147 ++ packages/keychain/tests/.eslintrc.js | 13 + .../address-derivation.test.ts | 105 + .../keychain/tests/encryption/decrypt.test.ts | 25 + .../tests/encryption/encryption.test.ts | 10 + packages/keychain/tests/global-setup.ts | 5 + packages/keychain/tests/helpers.ts | 81 + packages/keychain/tests/identity.test.ts | 150 ++ .../keychain/tests/mnemonic/mnemonic.test.ts | 35 + packages/keychain/tests/profile.test.ts | 63 + packages/keychain/tests/setup.ts | 13 + packages/keychain/tests/tsconfig.json | 11 + packages/keychain/tests/utils.test.ts | 120 ++ packages/keychain/tests/wallet-signer.test.ts | 18 + packages/keychain/tests/wallet.test.ts | 272 +++ packages/keychain/tsconfig.json | 24 + 487 files changed, 4392 insertions(+) create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/018dd99255a534837916033f04b396b3c5b771ad create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/061a2a662a532413fb382823dd2453c8537b4338 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/314c9c585547e1ee805fe1597f307af31b72559c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/420b2f97ccbc239de9691385af956534d4545c2c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/9ed2612615091d088e52b934dbdc159280dc237c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/fae54f93545510c8db4ed307ea8397a19112446a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/018dd99255a534837916033f04b396b3c5b771ad create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/061a2a662a532413fb382823dd2453c8537b4338 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/314c9c585547e1ee805fe1597f307af31b72559c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/420b2f97ccbc239de9691385af956534d4545c2c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/9ed2612615091d088e52b934dbdc159280dc237c create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 create mode 100644 packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/fae54f93545510c8db4ed307ea8397a19112446a create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/018dd99255a534837916033f04b396b3c5b771ad create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/061a2a662a532413fb382823dd2453c8537b4338 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/314c9c585547e1ee805fe1597f307af31b72559c create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/420b2f97ccbc239de9691385af956534d4545c2c create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/9ed2612615091d088e52b934dbdc159280dc237c create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 create mode 100644 packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/fae54f93545510c8db4ed307ea8397a19112446a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/018dd99255a534837916033f04b396b3c5b771ad create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/061a2a662a532413fb382823dd2453c8537b4338 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/314c9c585547e1ee805fe1597f307af31b72559c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/420b2f97ccbc239de9691385af956534d4545c2c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/9ed2612615091d088e52b934dbdc159280dc237c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/fae54f93545510c8db4ed307ea8397a19112446a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/018dd99255a534837916033f04b396b3c5b771ad create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/061a2a662a532413fb382823dd2453c8537b4338 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/314c9c585547e1ee805fe1597f307af31b72559c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/420b2f97ccbc239de9691385af956534d4545c2c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/9ed2612615091d088e52b934dbdc159280dc237c create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 create mode 100644 packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/fae54f93545510c8db4ed307ea8397a19112446a create mode 100644 packages/keychain/README.md create mode 100644 packages/keychain/jest.config.js create mode 100644 packages/keychain/package-lock.json create mode 100644 packages/keychain/package.json create mode 100644 packages/keychain/src/address-derivation/index.ts create mode 100644 packages/keychain/src/encryption/decrypt.ts create mode 100644 packages/keychain/src/encryption/encrypt.ts create mode 100644 packages/keychain/src/identity.ts create mode 100644 packages/keychain/src/index.ts create mode 100644 packages/keychain/src/mnemonic/index.ts create mode 100644 packages/keychain/src/nodes/identity-address-owner-node.ts create mode 100644 packages/keychain/src/profiles.ts create mode 100644 packages/keychain/src/types/zone-file.d.ts create mode 100644 packages/keychain/src/utils/gaia.ts create mode 100644 packages/keychain/src/utils/index.ts create mode 100644 packages/keychain/src/wallet/index.ts create mode 100644 packages/keychain/src/wallet/signer.ts create mode 100644 packages/keychain/tests/.eslintrc.js create mode 100644 packages/keychain/tests/address-derivation/address-derivation.test.ts create mode 100644 packages/keychain/tests/encryption/decrypt.test.ts create mode 100644 packages/keychain/tests/encryption/encryption.test.ts create mode 100644 packages/keychain/tests/global-setup.ts create mode 100644 packages/keychain/tests/helpers.ts create mode 100644 packages/keychain/tests/identity.test.ts create mode 100644 packages/keychain/tests/mnemonic/mnemonic.test.ts create mode 100644 packages/keychain/tests/profile.test.ts create mode 100644 packages/keychain/tests/setup.ts create mode 100644 packages/keychain/tests/tsconfig.json create mode 100644 packages/keychain/tests/utils.test.ts create mode 100644 packages/keychain/tests/wallet-signer.test.ts create mode 100644 packages/keychain/tests/wallet.test.ts create mode 100644 packages/keychain/tsconfig.json diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..53380f7c1 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +{"code":"import { ChainID, getAddressFromPrivateKey, TransactionVersion, } from '@blockstack/stacks-transactions';\r\nimport { ECPair } from 'bitcoinjs-lib';\r\nimport { ecPairToHexString } from 'blockstack';\r\nconst networkDerivationPath = `m/44'/5757'/0'/0/0`;\r\nexport const derivationPaths = {\r\n [ChainID.Mainnet]: networkDerivationPath,\r\n [ChainID.Testnet]: networkDerivationPath,\r\n};\r\nexport function getDerivationPath(chain) {\r\n return derivationPaths[chain];\r\n}\r\nexport function deriveStxAddressChain(chain) {\r\n return (rootNode) => {\r\n const childKey = rootNode.derivePath(getDerivationPath(chain));\r\n if (!childKey.privateKey) {\r\n throw new Error('Unable to derive private key from `rootNode`, bip32 master keychain');\r\n }\r\n const ecPair = ECPair.fromPrivateKey(childKey.privateKey);\r\n const privateKey = ecPairToHexString(ecPair);\r\n const txVersion = chain === ChainID.Mainnet ? TransactionVersion.Mainnet : TransactionVersion.Testnet;\r\n return {\r\n childKey,\r\n address: getAddressFromPrivateKey(privateKey, txVersion),\r\n privateKey,\r\n };\r\n };\r\n}\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/address-derivation/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EACL,OAAO,EACP,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAkB,MAAM,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB;IACxC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB;CACzC,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CAAC,QAAwB,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;SACxF;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,SAAS,GACb,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC;QACtF,OAAO;YACL,QAAQ;YACR,OAAO,EAAE,wBAAwB,CAAC,UAAU,EAAE,SAAS,CAAC;YACxD,UAAU;SACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/address-derivation/index.d.ts","writeByteOrderMark":false,"text":"import { ChainID } from '@blockstack/stacks-transactions';\r\nimport { BIP32Interface } from 'bitcoinjs-lib';\r\nexport declare const derivationPaths: {\r\n 1: string;\r\n 2147483648: string;\r\n};\r\nexport declare function getDerivationPath(chain: ChainID): string;\r\nexport declare function deriveStxAddressChain(chain: ChainID): (rootNode: BIP32Interface) => {\r\n childKey: BIP32Interface;\r\n address: string;\r\n privateKey: string;\r\n};\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..0c4968ffd --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +{"code":"import { generateMnemonic as generateBip39Mnemonic, mnemonicToSeed } from 'bip39';\r\nimport { randomBytes } from 'blockstack/lib/encryption/cryptoRandom';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { encrypt } from '../encryption/encrypt';\r\nimport { encryptMnemonic } from 'blockstack';\r\nexport async function generateMnemonicRootKeychain(entropy) {\r\n const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes);\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n return {\r\n rootNode,\r\n plaintextMnemonic,\r\n };\r\n}\r\nexport async function generateEncryptedMnemonicRootKeychain(password, entropy) {\r\n const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes);\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n const ciphertextBuffer = await encrypt(plaintextMnemonic, password);\r\n const encryptedMnemonicPhrase = ciphertextBuffer.toString('hex');\r\n return {\r\n rootNode,\r\n encryptedMnemonicPhrase,\r\n };\r\n}\r\nexport async function deriveRootKeychainFromMnemonic(plaintextMnemonic) {\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n return rootNode;\r\n}\r\nexport async function encryptMnemonicFormatted(plaintextMnemonic, password) {\r\n const encryptedMnemonic = await encryptMnemonic(plaintextMnemonic, password);\r\n const encryptedMnemonicHex = encryptedMnemonic.toString('hex');\r\n return { encryptedMnemonic, encryptedMnemonicHex };\r\n}\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/bip39/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/cryptoRandom.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/encrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/mnemonic/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,gBAAgB,IAAI,qBAAqB,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAA8B;IAC/E,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO;QACL,QAAQ;QACR,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,QAAgB,EAChB,OAA8B;IAE9B,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACpE,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO;QACL,QAAQ;QACR,uBAAuB;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,iBAAyB;IAC5E,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,iBAAyB,EAAE,QAAgB;IACxF,MAAM,iBAAiB,GAAG,MAAM,eAAe,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC7E,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;AACrD,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/mnemonic/index.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { bip32 } from 'bitcoinjs-lib';\r\nexport declare type AllowedKeyEntropyBits = 128 | 256;\r\nexport declare function generateMnemonicRootKeychain(entropy: AllowedKeyEntropyBits): Promise<{\r\n rootNode: bip32.BIP32Interface;\r\n plaintextMnemonic: string;\r\n}>;\r\nexport declare function generateEncryptedMnemonicRootKeychain(password: string, entropy: AllowedKeyEntropyBits): Promise<{\r\n rootNode: bip32.BIP32Interface;\r\n encryptedMnemonicPhrase: string;\r\n}>;\r\nexport declare function deriveRootKeychainFromMnemonic(plaintextMnemonic: string): Promise;\r\nexport declare function encryptMnemonicFormatted(plaintextMnemonic: string, password: string): Promise<{\r\n encryptedMnemonic: Buffer;\r\n encryptedMnemonicHex: string;\r\n}>;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..e617263c8 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +{"code":"import { encryptMnemonic } from 'blockstack/lib/encryption/wallet';\r\n/**\r\n * Encrypt a raw mnemonic phrase to be password protected\r\n * @param phrase - Raw mnemonic phrase\r\n * @param password - Password to encrypt mnemonic with\r\n * @return The encrypted phrase\r\n * */\r\nexport async function encrypt(phrase, password) {\r\n const result = await encryptMnemonic(phrase, password);\r\n return result;\r\n}\r\n//# sourceMappingURL=encrypt.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/wallet.d.ts"],"map":"{\"version\":3,\"file\":\"encrypt.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/encryption/encrypt.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;;;;KAKK;AACL,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,QAAgB;IAC5D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC;AAChB,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/encryption/encrypt.d.ts","writeByteOrderMark":false,"text":"/// \r\n/**\r\n * Encrypt a raw mnemonic phrase to be password protected\r\n * @param phrase - Raw mnemonic phrase\r\n * @param password - Password to encrypt mnemonic with\r\n * @return The encrypted phrase\r\n * */\r\nexport declare function encrypt(phrase: string, password: string): Promise;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..93330eccf --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +{"code":"import Wallet from './wallet';\r\nexport * from './utils';\r\nexport * from './mnemonic';\r\nexport * from './address-derivation';\r\nexport { default as Wallet } from './wallet';\r\nexport * from './wallet';\r\nexport * from './wallet/signer';\r\nexport { decrypt } from './encryption/decrypt';\r\nexport { encrypt } from './encryption/encrypt';\r\nexport * from './profiles';\r\nexport * from './identity';\r\nexport default {\r\n Wallet,\r\n};\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/mnemonic/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/address-derivation/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/signer.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/decrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/encrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAE3B,eAAe;IACb,MAAM;CACP,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/index.d.ts","writeByteOrderMark":false,"text":"import Wallet from './wallet';\r\nexport * from './utils';\r\nexport * from './mnemonic';\r\nexport * from './address-derivation';\r\nexport { default as Wallet } from './wallet';\r\nexport * from './wallet';\r\nexport * from './wallet/signer';\r\nexport { decrypt } from './encryption/decrypt';\r\nexport { encrypt } from './encryption/encrypt';\r\nexport * from './profiles';\r\nexport * from './identity';\r\ndeclare const _default: {\r\n Wallet: typeof Wallet;\r\n};\r\nexport default _default;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..673790086 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +{"code":"import { mnemonicToSeed } from 'bip39';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { getBlockchainIdentities, makeIdentity, assertIsTruthy, recursiveRestoreIdentities, } from '../utils';\r\nimport Identity from '../identity';\r\nimport { decrypt } from '../encryption/decrypt';\r\nimport { connectToGaiaHub, encryptContent, getPublicKeyFromPrivate, decryptContent, } from 'blockstack';\r\nimport { generateEncryptedMnemonicRootKeychain, deriveRootKeychainFromMnemonic, encryptMnemonicFormatted, } from '../mnemonic';\r\nimport { deriveStxAddressChain } from '../address-derivation';\r\nimport { makeReadOnlyGaiaConfig, DEFAULT_GAIA_HUB, uploadToGaiaHub } from '../utils/gaia';\r\nimport { WalletSigner } from './signer';\r\nconst CONFIG_INDEX = 45;\r\nexport class Wallet {\r\n constructor({ chain, encryptedBackupPhrase, identityPublicKeychain, bitcoinPublicKeychain, firstBitcoinAddress, identityKeypairs, identityAddresses, identities, configPrivateKey, stacksPrivateKey, walletConfig, }) {\r\n this.chain = chain;\r\n this.encryptedBackupPhrase = encryptedBackupPhrase;\r\n this.identityPublicKeychain = identityPublicKeychain;\r\n this.bitcoinPublicKeychain = bitcoinPublicKeychain;\r\n this.firstBitcoinAddress = firstBitcoinAddress;\r\n this.identityKeypairs = identityKeypairs;\r\n this.identityAddresses = identityAddresses;\r\n this.identities = identities.map(identity => new Identity(identity));\r\n this.configPrivateKey = configPrivateKey;\r\n this.stacksPrivateKey = stacksPrivateKey;\r\n this.walletConfig = walletConfig;\r\n }\r\n static generateFactory(bitsEntropy) {\r\n return async (password, chain) => {\r\n const { rootNode, encryptedMnemonicPhrase } = await generateEncryptedMnemonicRootKeychain(password, bitsEntropy);\r\n return this.createAccount({\r\n encryptedBackupPhrase: encryptedMnemonicPhrase,\r\n rootNode,\r\n chain,\r\n });\r\n };\r\n }\r\n static async generate(password, chain) {\r\n return await this.generateFactory(128)(password, chain);\r\n }\r\n static async generateStrong(password, chain) {\r\n return await this.generateFactory(256)(password, chain);\r\n }\r\n static async restore(password, seedPhrase, chain) {\r\n const rootNode = await deriveRootKeychainFromMnemonic(seedPhrase);\r\n const { encryptedMnemonicHex } = await encryptMnemonicFormatted(seedPhrase, password);\r\n const wallet = await Wallet.createAccount({\r\n encryptedBackupPhrase: encryptedMnemonicHex,\r\n rootNode,\r\n chain,\r\n });\r\n return await wallet.restoreIdentities({ rootNode, gaiaReadURL: DEFAULT_GAIA_HUB });\r\n }\r\n static async createAccount({ encryptedBackupPhrase, rootNode, chain, identitiesToGenerate = 1, }) {\r\n const derivedIdentitiesKey = rootNode.deriveHardened(CONFIG_INDEX).privateKey;\r\n if (!derivedIdentitiesKey) {\r\n throw new TypeError('Unable to derive config key for wallet identities');\r\n }\r\n const configPrivateKey = derivedIdentitiesKey.toString('hex');\r\n const { childKey: stxAddressKeychain } = deriveStxAddressChain(chain)(rootNode);\r\n const walletAttrs = await getBlockchainIdentities(rootNode, identitiesToGenerate);\r\n return new Wallet({\r\n ...walletAttrs,\r\n chain,\r\n configPrivateKey,\r\n stacksPrivateKey: stxAddressKeychain.toBase58(),\r\n encryptedBackupPhrase,\r\n });\r\n }\r\n /**\r\n * Restore all previously used identities. This is meant to be used when 'restoring' a wallet.\r\n * First, it will check for a `walletConfig`. If present, then we use that to determine how\r\n * many identities to generate, and auto-populate their username.\r\n *\r\n * If `walletConfig` is empty, then this is being restored from an authenticator that doesn't\r\n * support `walletConfig`. In that case, we will recursively generate identities, and check for\r\n * on-chain names.\r\n *\r\n */\r\n async restoreIdentities({ rootNode, gaiaReadURL, }) {\r\n const gaiaConfig = makeReadOnlyGaiaConfig({\r\n readURL: gaiaReadURL,\r\n privateKey: this.configPrivateKey,\r\n });\r\n await this.fetchConfig(gaiaConfig);\r\n if (this.walletConfig) {\r\n const getIdentities = this.walletConfig.identities.map(async (identityConfig, index) => {\r\n let identity = this.identities[index];\r\n if (!identity) {\r\n identity = await makeIdentity(rootNode, index);\r\n }\r\n if (identityConfig.username) {\r\n identity.usernames = [identityConfig.username];\r\n identity.defaultUsername = identityConfig.username;\r\n }\r\n return identity;\r\n });\r\n const identities = await Promise.all(getIdentities);\r\n this.identities = identities;\r\n return this;\r\n }\r\n await this.identities[0].refresh();\r\n const newIdentities = await recursiveRestoreIdentities({ rootNode });\r\n this.identities = this.identities.concat(newIdentities);\r\n return this;\r\n }\r\n async createNewIdentity(password) {\r\n const plainTextBuffer = await decrypt(Buffer.from(this.encryptedBackupPhrase, 'hex'), password);\r\n const seed = await mnemonicToSeed(plainTextBuffer);\r\n const rootNode = bip32.fromSeed(seed);\r\n const index = this.identities.length;\r\n const identity = await makeIdentity(rootNode, index);\r\n this.identities.push(identity);\r\n this.identityKeypairs.push(identity.keyPair);\r\n this.identityAddresses.push(identity.address);\r\n return identity;\r\n }\r\n async createGaiaConfig(gaiaHubUrl) {\r\n return connectToGaiaHub(gaiaHubUrl, this.configPrivateKey);\r\n }\r\n async fetchConfig(gaiaConfig) {\r\n try {\r\n const response = await fetch(`${gaiaConfig.url_prefix}${gaiaConfig.address}/wallet-config.json`);\r\n const encrypted = await response.text();\r\n const configJSON = (await decryptContent(encrypted, {\r\n privateKey: this.configPrivateKey,\r\n }));\r\n const config = JSON.parse(configJSON);\r\n this.walletConfig = config;\r\n return config;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n }\r\n async getOrCreateConfig({ gaiaConfig, skipUpload, }) {\r\n if (this.walletConfig) {\r\n return this.walletConfig;\r\n }\r\n const config = await this.fetchConfig(gaiaConfig);\r\n if (config) {\r\n return config;\r\n }\r\n const newConfig = {\r\n identities: this.identities.map(i => ({\r\n username: i.defaultUsername,\r\n address: i.address,\r\n apps: {},\r\n })),\r\n };\r\n this.walletConfig = newConfig;\r\n if (!skipUpload) {\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n return newConfig;\r\n }\r\n async updateConfig(gaiaConfig) {\r\n const publicKey = getPublicKeyFromPrivate(this.configPrivateKey);\r\n const encrypted = await encryptContent(JSON.stringify(this.walletConfig), { publicKey });\r\n await uploadToGaiaHub('wallet-config.json', encrypted, gaiaConfig);\r\n }\r\n async updateConfigWithAuth({ identityIndex, app, gaiaConfig, }) {\r\n const { walletConfig } = this;\r\n assertIsTruthy(walletConfig);\r\n this.identities.forEach((identity, index) => {\r\n const configIdentity = walletConfig.identities[index];\r\n if (configIdentity) {\r\n configIdentity.apps = configIdentity.apps || {};\r\n configIdentity.username = identity.defaultUsername;\r\n configIdentity.address = identity.address;\r\n walletConfig.identities[index] = configIdentity;\r\n }\r\n else {\r\n this.walletConfig?.identities.push({\r\n username: identity.defaultUsername,\r\n address: identity.address,\r\n apps: {},\r\n });\r\n }\r\n });\r\n const identity = walletConfig.identities[identityIndex];\r\n identity.apps = identity.apps || {};\r\n identity.apps[app.origin] = app;\r\n walletConfig.identities[identityIndex] = identity;\r\n this.walletConfig = walletConfig;\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n async updateConfigForReuseWarning({ gaiaConfig }) {\r\n assertIsTruthy(this.walletConfig);\r\n this.walletConfig.hideWarningForReusingIdentity = true;\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n getSigner() {\r\n return new WalletSigner({ privateKey: this.stacksPrivateKey });\r\n }\r\n}\r\nexport default Wallet;\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/bip39/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/decrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/mnemonic/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/address-derivation/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/signer.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/wallet/index.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/wallet/index.d.ts","writeByteOrderMark":false,"text":"import { bip32, BIP32Interface } from 'bitcoinjs-lib';\r\nimport { ChainID } from '@blockstack/stacks-transactions';\r\nimport { IdentityKeyPair } from '../utils';\r\nimport Identity from '../identity';\r\nimport { AllowedKeyEntropyBits } from '../mnemonic';\r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\nimport { WalletSigner } from './signer';\r\nexport interface ConfigApp {\r\n origin: string;\r\n scopes: string[];\r\n lastLoginAt: number;\r\n appIcon: string;\r\n name: string;\r\n}\r\ninterface ConfigIdentity {\r\n username?: string;\r\n address: string;\r\n apps: {\r\n [origin: string]: ConfigApp;\r\n };\r\n}\r\nexport interface WalletConfig {\r\n identities: ConfigIdentity[];\r\n hideWarningForReusingIdentity?: boolean;\r\n}\r\nexport interface ConstructorOptions {\r\n chain: ChainID;\r\n identityPublicKeychain: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityKeypairs: IdentityKeyPair[];\r\n identityAddresses: string[];\r\n encryptedBackupPhrase: string;\r\n identities: Identity[];\r\n configPrivateKey: string;\r\n stacksPrivateKey: string;\r\n walletConfig?: WalletConfig;\r\n}\r\nexport declare class Wallet {\r\n chain: ChainID;\r\n encryptedBackupPhrase: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityKeypairs: IdentityKeyPair[];\r\n identityAddresses: string[];\r\n identityPublicKeychain: string;\r\n identities: Identity[];\r\n configPrivateKey: string;\r\n stacksPrivateKey: string;\r\n walletConfig?: WalletConfig;\r\n constructor({ chain, encryptedBackupPhrase, identityPublicKeychain, bitcoinPublicKeychain, firstBitcoinAddress, identityKeypairs, identityAddresses, identities, configPrivateKey, stacksPrivateKey, walletConfig, }: ConstructorOptions);\r\n static generateFactory(bitsEntropy: AllowedKeyEntropyBits): (password: string, chain: ChainID) => Promise;\r\n static generate(password: string, chain: ChainID): Promise;\r\n static generateStrong(password: string, chain: ChainID): Promise;\r\n static restore(password: string, seedPhrase: string, chain: ChainID): Promise;\r\n static createAccount({ encryptedBackupPhrase, rootNode, chain, identitiesToGenerate, }: {\r\n encryptedBackupPhrase: string;\r\n rootNode: BIP32Interface;\r\n chain: ChainID;\r\n identitiesToGenerate?: number;\r\n }): Promise;\r\n /**\r\n * Restore all previously used identities. This is meant to be used when 'restoring' a wallet.\r\n * First, it will check for a `walletConfig`. If present, then we use that to determine how\r\n * many identities to generate, and auto-populate their username.\r\n *\r\n * If `walletConfig` is empty, then this is being restored from an authenticator that doesn't\r\n * support `walletConfig`. In that case, we will recursively generate identities, and check for\r\n * on-chain names.\r\n *\r\n */\r\n restoreIdentities({ rootNode, gaiaReadURL, }: {\r\n rootNode: bip32.BIP32Interface;\r\n gaiaReadURL: string;\r\n }): Promise;\r\n createNewIdentity(password: string): Promise;\r\n createGaiaConfig(gaiaHubUrl: string): Promise;\r\n fetchConfig(gaiaConfig: GaiaHubConfig): Promise;\r\n getOrCreateConfig({ gaiaConfig, skipUpload, }: {\r\n gaiaConfig: GaiaHubConfig;\r\n skipUpload?: boolean;\r\n }): Promise;\r\n updateConfig(gaiaConfig: GaiaHubConfig): Promise;\r\n updateConfigWithAuth({ identityIndex, app, gaiaConfig, }: {\r\n identityIndex: number;\r\n app: ConfigApp;\r\n gaiaConfig: GaiaHubConfig;\r\n }): Promise;\r\n updateConfigForReuseWarning({ gaiaConfig }: {\r\n gaiaConfig: GaiaHubConfig;\r\n }): Promise;\r\n getSigner(): WalletSigner;\r\n}\r\nexport default Wallet;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..a38d6780d --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +{"code":"import { decrypt as triplesecDecrypt } from 'triplesec';\r\nimport { decryptMnemonic } from 'blockstack/lib/encryption/wallet';\r\n/**\r\n * Decrypt an encrypted mnemonic phrase with a password.\r\n * Legacy triplesec encrypted payloads are also supported.\r\n * @param data - Buffer or hex-encoded string of the encrypted mnemonic\r\n * @param password - Password for data\r\n * @return the raw mnemonic phrase\r\n */\r\nexport async function decrypt(dataBuffer, password) {\r\n const result = await decryptMnemonic(dataBuffer, password, triplesecDecrypt);\r\n return result;\r\n}\r\n//# sourceMappingURL=decrypt.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@types/triplesec/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/wallet.d.ts"],"map":"{\"version\":3,\"file\":\"decrypt.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/encryption/decrypt.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAA2B,EAAE,QAAgB;IACzE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC7E,OAAO,MAAM,CAAC;AAChB,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/encryption/decrypt.d.ts","writeByteOrderMark":false,"text":"/// \r\n/**\r\n * Decrypt an encrypted mnemonic phrase with a password.\r\n * Legacy triplesec encrypted payloads are also supported.\r\n * @param data - Buffer or hex-encoded string of the encrypted mnemonic\r\n * @param password - Password for data\r\n * @return the raw mnemonic phrase\r\n */\r\nexport declare function decrypt(dataBuffer: Buffer | string, password: string): Promise;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..afbcca7e2 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +{"code":"import IdentityAddressOwnerNode from '../nodes/identity-address-owner-node';\r\nimport { createSha2Hash } from 'blockstack/lib/encryption/sha2Hash';\r\nimport { publicKeyToAddress } from 'blockstack/lib/keys';\r\nimport { parseZoneFile } from 'zone-file';\r\nimport Identity from '../identity';\r\nimport { AssertionError } from 'assert';\r\nimport { Subdomains, registrars } from '../profiles';\r\nconst IDENTITY_KEYCHAIN = 888;\r\nconst BLOCKSTACK_ON_BITCOIN = 0;\r\nexport function getIdentityPrivateKeychain(rootNode) {\r\n return rootNode.deriveHardened(IDENTITY_KEYCHAIN).deriveHardened(BLOCKSTACK_ON_BITCOIN);\r\n}\r\nconst EXTERNAL_ADDRESS = 'EXTERNAL_ADDRESS';\r\nconst CHANGE_ADDRESS = 'CHANGE_ADDRESS';\r\nexport function getBitcoinPrivateKeychain(rootNode) {\r\n const BIP_44_PURPOSE = 44;\r\n const BITCOIN_COIN_TYPE = 0;\r\n const ACCOUNT_INDEX = 0;\r\n return rootNode\r\n .deriveHardened(BIP_44_PURPOSE)\r\n .deriveHardened(BITCOIN_COIN_TYPE)\r\n .deriveHardened(ACCOUNT_INDEX);\r\n}\r\nexport function getBitcoinAddressNode(bitcoinKeychain, addressIndex = 0, chainType = EXTERNAL_ADDRESS) {\r\n let chain = null;\r\n if (chainType === EXTERNAL_ADDRESS) {\r\n chain = 0;\r\n }\r\n else if (chainType === CHANGE_ADDRESS) {\r\n chain = 1;\r\n }\r\n else {\r\n throw new Error('Invalid chain type');\r\n }\r\n return bitcoinKeychain.derive(chain).derive(addressIndex);\r\n}\r\nexport async function getIdentityOwnerAddressNode(identityPrivateKeychain, identityIndex = 0) {\r\n if (identityPrivateKeychain.isNeutered()) {\r\n throw new Error('You need the private key to generate identity addresses');\r\n }\r\n const publicKeyHex = Buffer.from(identityPrivateKeychain.publicKey.toString('hex'));\r\n const sha2Hash = await createSha2Hash();\r\n const saltData = await sha2Hash.digest(publicKeyHex, 'sha256');\r\n const salt = saltData.toString('hex');\r\n return new IdentityAddressOwnerNode(identityPrivateKeychain.deriveHardened(identityIndex), salt);\r\n}\r\nexport function getAddress(node) {\r\n return publicKeyToAddress(node.publicKey);\r\n}\r\nexport function deriveIdentityKeyPair(identityOwnerAddressNode) {\r\n const address = identityOwnerAddressNode.getAddress();\r\n const identityKey = identityOwnerAddressNode.getIdentityKey();\r\n const identityKeyID = identityOwnerAddressNode.getIdentityKeyID();\r\n const appsNode = identityOwnerAddressNode.getAppsNode();\r\n const stxNode = identityOwnerAddressNode.getSTXNode();\r\n const keyPair = {\r\n key: identityKey,\r\n keyID: identityKeyID,\r\n address,\r\n appsNodeKey: appsNode.toBase58(),\r\n stxNodeKey: stxNode.toBase58(),\r\n salt: identityOwnerAddressNode.getSalt(),\r\n };\r\n return keyPair;\r\n}\r\nexport async function getBlockchainIdentities(rootNode, identitiesToGenerate) {\r\n const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode);\r\n const bitcoinPrivateKeychainNode = getBitcoinPrivateKeychain(rootNode);\r\n const identityPublicKeychainNode = identityPrivateKeychainNode.neutered();\r\n const identityPublicKeychain = identityPublicKeychainNode.toBase58();\r\n const bitcoinPublicKeychainNode = bitcoinPrivateKeychainNode.neutered();\r\n const bitcoinPublicKeychain = bitcoinPublicKeychainNode.toBase58();\r\n const firstBitcoinAddress = getAddress(getBitcoinAddressNode(bitcoinPublicKeychainNode));\r\n const identityAddresses = [];\r\n const identityKeypairs = [];\r\n const identities = [];\r\n // We pre-generate a number of identity addresses so that we\r\n // don't have to prompt the user for the password on each new profile\r\n for (let addressIndex = 0; addressIndex < identitiesToGenerate; addressIndex++) {\r\n const identity = await makeIdentity(rootNode, addressIndex);\r\n identities.push(identity);\r\n identityKeypairs.push(identity.keyPair);\r\n identityAddresses.push(identity.address);\r\n }\r\n return {\r\n identityPublicKeychain,\r\n bitcoinPublicKeychain,\r\n firstBitcoinAddress,\r\n identityAddresses,\r\n identityKeypairs,\r\n identities,\r\n };\r\n}\r\nexport const makeIdentity = async (rootNode, index) => {\r\n const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode);\r\n const identityOwnerAddressNode = await getIdentityOwnerAddressNode(identityPrivateKeychainNode, index);\r\n const identityKeyPair = deriveIdentityKeyPair(identityOwnerAddressNode);\r\n const identity = new Identity({\r\n keyPair: identityKeyPair,\r\n address: identityKeyPair.address,\r\n usernames: [],\r\n });\r\n return identity;\r\n};\r\nexport function assertIsTruthy(val) {\r\n if (!val) {\r\n throw new AssertionError({ expected: true, actual: val });\r\n }\r\n}\r\nexport var IdentityNameValidityError;\r\n(function (IdentityNameValidityError) {\r\n IdentityNameValidityError[\"MINIMUM_LENGTH\"] = \"error_minimum_length\";\r\n IdentityNameValidityError[\"MAXIMUM_LENGTH\"] = \"error_maximum_length\";\r\n IdentityNameValidityError[\"ILLEGAL_CHARACTER\"] = \"error_illegal_character\";\r\n IdentityNameValidityError[\"UNAVAILABLE\"] = \"error_name_unavailable\";\r\n})(IdentityNameValidityError || (IdentityNameValidityError = {}));\r\nconst containsLegalCharacters = (name) => /^[a-z0-9_]+$/.test(name);\r\nexport const validateSubdomainFormat = (identityName) => {\r\n const nameLength = identityName.length;\r\n if (nameLength < 8) {\r\n return IdentityNameValidityError.MINIMUM_LENGTH;\r\n }\r\n if (nameLength > 37) {\r\n return IdentityNameValidityError.MAXIMUM_LENGTH;\r\n }\r\n if (!containsLegalCharacters(identityName)) {\r\n return IdentityNameValidityError.ILLEGAL_CHARACTER;\r\n }\r\n return null;\r\n};\r\nexport const validateSubdomainAvailability = async (name, subdomain = Subdomains.BLOCKSTACK) => {\r\n const url = `${registrars[subdomain].apiUrl}/${name.toLowerCase()}.${subdomain}`;\r\n const resp = await fetch(url);\r\n const data = await resp.json();\r\n return data;\r\n};\r\n/**\r\n * Restore identities by recursively making a new identity, and checking if it has a username.\r\n *\r\n * As soon as a username is not found for an identity, the recursion stops.\r\n */\r\nexport const recursiveRestoreIdentities = async ({ rootNode, index = 1, identities = [], }) => {\r\n const identity = await makeIdentity(rootNode, index);\r\n await identity.refresh();\r\n if (identity.defaultUsername) {\r\n identities.push(identity);\r\n return recursiveRestoreIdentities({ rootNode, index: index + 1, identities });\r\n }\r\n return identities;\r\n};\r\n/**\r\n * Validate the format and availability of a subdomain. Will return an error of enum\r\n * IdentityNameValidityError if an error is present. If no errors are found, will return null.\r\n * @param name the subdomain to be registered\r\n * @param subdomain a valid Subdomains enum\r\n */\r\nexport const validateSubdomain = async (name, subdomain = Subdomains.BLOCKSTACK) => {\r\n const error = validateSubdomainFormat(name);\r\n if (error) {\r\n return error;\r\n }\r\n try {\r\n const data = await validateSubdomainAvailability(name, subdomain);\r\n if (data.status !== 'available') {\r\n return IdentityNameValidityError.UNAVAILABLE;\r\n }\r\n }\r\n catch (error) {\r\n return IdentityNameValidityError.UNAVAILABLE;\r\n }\r\n return null;\r\n};\r\nexport const getProfileURLFromZoneFile = async (name) => {\r\n const url = `https://core.blockstack.org/v1/names/${name}`;\r\n const res = await fetch(url);\r\n if (res.ok) {\r\n const nameInfo = await res.json();\r\n const zone = parseZoneFile(nameInfo.zonefile);\r\n return zone.uri[0].target;\r\n }\r\n return;\r\n};\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/nodes/identity-address-owner-node.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/sha2Hash.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/zone-file/lib/index.js","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/assert/assert.js","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/index.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/utils/index.d.ts","writeByteOrderMark":false,"text":"import { BIP32Interface } from 'bitcoinjs-lib';\r\nimport IdentityAddressOwnerNode from '../nodes/identity-address-owner-node';\r\nimport Identity from '../identity';\r\nimport { Subdomains } from '../profiles';\r\nexport declare function getIdentityPrivateKeychain(rootNode: BIP32Interface): BIP32Interface;\r\nexport declare function getBitcoinPrivateKeychain(rootNode: BIP32Interface): BIP32Interface;\r\nexport declare function getBitcoinAddressNode(bitcoinKeychain: BIP32Interface, addressIndex?: number, chainType?: string): BIP32Interface;\r\nexport declare function getIdentityOwnerAddressNode(identityPrivateKeychain: BIP32Interface, identityIndex?: number): Promise;\r\nexport declare function getAddress(node: BIP32Interface): string;\r\nexport interface IdentityKeyPair {\r\n key: string;\r\n keyID: string;\r\n address: string;\r\n appsNodeKey: string;\r\n stxNodeKey: string;\r\n salt: string;\r\n}\r\nexport declare function deriveIdentityKeyPair(identityOwnerAddressNode: IdentityAddressOwnerNode): IdentityKeyPair;\r\nexport declare function getBlockchainIdentities(rootNode: BIP32Interface, identitiesToGenerate: number): Promise<{\r\n identityPublicKeychain: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityAddresses: string[];\r\n identityKeypairs: IdentityKeyPair[];\r\n identities: Identity[];\r\n}>;\r\nexport declare const makeIdentity: (rootNode: BIP32Interface, index: number) => Promise;\r\nexport declare function assertIsTruthy(val: any): asserts val is NonNullable;\r\nexport declare enum IdentityNameValidityError {\r\n MINIMUM_LENGTH = \"error_minimum_length\",\r\n MAXIMUM_LENGTH = \"error_maximum_length\",\r\n ILLEGAL_CHARACTER = \"error_illegal_character\",\r\n UNAVAILABLE = \"error_name_unavailable\"\r\n}\r\nexport declare const validateSubdomainFormat: (identityName: string) => IdentityNameValidityError | null;\r\nexport declare const validateSubdomainAvailability: (name: string, subdomain?: Subdomains) => Promise;\r\ninterface RecursiveMakeIdentitiesOptions {\r\n rootNode: BIP32Interface;\r\n index?: number;\r\n identities?: Identity[];\r\n}\r\n/**\r\n * Restore identities by recursively making a new identity, and checking if it has a username.\r\n *\r\n * As soon as a username is not found for an identity, the recursion stops.\r\n */\r\nexport declare const recursiveRestoreIdentities: ({ rootNode, index, identities, }: RecursiveMakeIdentitiesOptions) => Promise;\r\n/**\r\n * Validate the format and availability of a subdomain. Will return an error of enum\r\n * IdentityNameValidityError if an error is present. If no errors are found, will return null.\r\n * @param name the subdomain to be registered\r\n * @param subdomain a valid Subdomains enum\r\n */\r\nexport declare const validateSubdomain: (name: string, subdomain?: Subdomains) => Promise;\r\nexport declare const getProfileURLFromZoneFile: (name: string) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..aaef254cd --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +{"code":"import { getLegacyAppNode } from 'blockstack/lib/wallet';\r\nimport { publicKeyToAddress } from 'blockstack/lib/keys';\r\nimport { getAddress } from '../utils';\r\nconst APPS_NODE_INDEX = 0;\r\nconst SIGNING_NODE_INDEX = 1;\r\nconst ENCRYPTION_NODE_INDEX = 2;\r\nconst STX_NODE_INDEX = 6;\r\nexport default class IdentityAddressOwnerNode {\r\n constructor(ownerHdNode, salt) {\r\n this.hdNode = ownerHdNode;\r\n this.salt = salt;\r\n }\r\n getNode() {\r\n return this.hdNode;\r\n }\r\n getSalt() {\r\n return this.salt;\r\n }\r\n getIdentityKey() {\r\n if (!this.hdNode.privateKey) {\r\n throw new Error('Node does not have private key');\r\n }\r\n return this.hdNode.privateKey.toString('hex');\r\n }\r\n getIdentityKeyID() {\r\n return this.hdNode.publicKey.toString('hex');\r\n }\r\n getAppsNode() {\r\n return this.hdNode.deriveHardened(APPS_NODE_INDEX);\r\n }\r\n getAddress() {\r\n return getAddress(this.hdNode);\r\n }\r\n getEncryptionNode() {\r\n return this.hdNode.deriveHardened(ENCRYPTION_NODE_INDEX);\r\n }\r\n getSigningNode() {\r\n return this.hdNode.deriveHardened(SIGNING_NODE_INDEX);\r\n }\r\n getSTXNode() {\r\n return this.hdNode.deriveHardened(STX_NODE_INDEX);\r\n }\r\n getAppNode(appDomain) {\r\n return getLegacyAppNode(this.hdNode, this.salt, appDomain);\r\n }\r\n getAppPrivateKey(appDomain) {\r\n const appNode = this.getAppNode(appDomain);\r\n if (!appNode.privateKey) {\r\n throw new Error('App node does not have private key');\r\n }\r\n return appNode.privateKey.toString('hex');\r\n }\r\n getAppAddress(appDomain) {\r\n const appNode = this.getAppNode(appDomain);\r\n return publicKeyToAddress(appNode.publicKey);\r\n }\r\n}\r\n//# sourceMappingURL=identity-address-owner-node.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/wallet.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts"],"map":"{\"version\":3,\"file\":\"identity-address-owner-node.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/nodes/identity-address-owner-node.ts\"],\"names\":[],\"mappings\":\"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAK3C,YAAY,WAA2B,EAAE,IAAY;QACnD,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACnD;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;IAED,UAAU;QACR,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACxD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,gBAAgB,CAAC,SAAiB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACvD;QACD,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;CACF\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/nodes/identity-address-owner-node.d.ts","writeByteOrderMark":false,"text":"import { BIP32Interface } from 'bitcoinjs-lib';\r\nexport default class IdentityAddressOwnerNode {\r\n hdNode: BIP32Interface;\r\n salt: string;\r\n constructor(ownerHdNode: BIP32Interface, salt: string);\r\n getNode(): BIP32Interface;\r\n getSalt(): string;\r\n getIdentityKey(): string;\r\n getIdentityKeyID(): string;\r\n getAppsNode(): BIP32Interface;\r\n getAddress(): string;\r\n getEncryptionNode(): BIP32Interface;\r\n getSigningNode(): BIP32Interface;\r\n getSTXNode(): BIP32Interface;\r\n getAppNode(appDomain: string): BIP32Interface;\r\n getAppPrivateKey(appDomain: string): string;\r\n getAppAddress(appDomain: string): string;\r\n}\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..1104190d1 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +{"code":"import { signProfileToken, wrapProfileToken, connectToGaiaHub, makeProfileZoneFile, } from 'blockstack';\r\nimport { uploadToGaiaHub } from './utils/gaia';\r\nconst PERSON_TYPE = 'Person';\r\nconst CONTEXT = 'http://schema.org';\r\nconst IMAGE_TYPE = 'ImageObject';\r\nexport const DEFAULT_PROFILE = {\r\n '@type': 'Person',\r\n '@context': 'http://schema.org',\r\n};\r\nconst DEFAULT_PROFILE_FILE_NAME = 'profile.json';\r\nexport var Subdomains;\r\n(function (Subdomains) {\r\n Subdomains[\"TEST\"] = \"test-personal.id\";\r\n Subdomains[\"BLOCKSTACK\"] = \"id.blockstack\";\r\n})(Subdomains || (Subdomains = {}));\r\nexport const registrars = {\r\n [Subdomains.TEST]: {\r\n registerUrl: 'https://test-registrar.blockstack.org/register',\r\n apiUrl: 'https://test-registrar.blockstack.org/v1/names',\r\n },\r\n [Subdomains.BLOCKSTACK]: {\r\n registerUrl: 'https://registrar.blockstack.org/register',\r\n apiUrl: 'https://registrar.blockstack.org/v1/names',\r\n },\r\n};\r\nexport function signProfileForUpload(profile, keypair) {\r\n const privateKey = keypair.key;\r\n const publicKey = keypair.keyID;\r\n const token = signProfileToken(profile, privateKey, { publicKey });\r\n const tokenRecord = wrapProfileToken(token);\r\n const tokenRecords = [tokenRecord];\r\n return JSON.stringify(tokenRecords, null, 2);\r\n}\r\nexport async function uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig) {\r\n const identityHubConfig = gaiaHubConfig || (await connectToGaiaHub(gaiaHubUrl, identity.keyPair.key));\r\n const uploadResponse = await uploadToGaiaHub(DEFAULT_PROFILE_FILE_NAME, signedProfileTokenData, identityHubConfig);\r\n return uploadResponse;\r\n}\r\nconst sendUsernameToRegistrar = async ({ username, subdomain, zoneFile, identity, }) => {\r\n const { registerUrl } = registrars[subdomain];\r\n const registrationRequestBody = JSON.stringify({\r\n name: username,\r\n owner_address: identity.address,\r\n zonefile: zoneFile,\r\n });\r\n const requestHeaders = {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n };\r\n const response = await fetch(registerUrl, {\r\n method: 'POST',\r\n headers: requestHeaders,\r\n body: registrationRequestBody,\r\n });\r\n if (!response.ok) {\r\n return Promise.reject({\r\n error: 'Failed to register username',\r\n status: response.status,\r\n });\r\n }\r\n return response.json();\r\n};\r\n/**\r\n * Register a subdomain for a given identity\r\n */\r\nexport const registerSubdomain = async ({ identity, gaiaHubUrl, username, subdomain, }) => {\r\n const profile = identity.profile || DEFAULT_PROFILE;\r\n const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair);\r\n const profileUrl = await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData);\r\n const fullUsername = `${username}.${subdomain}`;\r\n const zoneFile = makeProfileZoneFile(fullUsername, profileUrl);\r\n await sendUsernameToRegistrar({\r\n username,\r\n subdomain,\r\n zoneFile,\r\n identity,\r\n });\r\n identity.defaultUsername = fullUsername;\r\n identity.usernames.push(fullUsername);\r\n return identity;\r\n};\r\nexport const signAndUploadProfile = async ({ profile, gaiaHubUrl, identity, gaiaHubConfig, }) => {\r\n const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair);\r\n await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig);\r\n};\r\nexport const fetchProfile = async ({ identity, gaiaUrl, }) => {\r\n try {\r\n const url = await identity.profileUrl(gaiaUrl);\r\n const res = await fetch(url);\r\n if (res.ok) {\r\n const json = await res.json();\r\n const { decodedToken } = json[0];\r\n return decodedToken.payload?.claim;\r\n }\r\n if (res.status === 404) {\r\n return null;\r\n }\r\n throw new Error('Network error when fetching profile');\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n};\r\n//# sourceMappingURL=profiles.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts"],"map":"{\"version\":3,\"file\":\"profiles.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/profiles.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/profiles.d.ts","writeByteOrderMark":false,"text":"import { IdentityKeyPair } from './utils';\r\nimport Identity from './identity';\r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\ndeclare const PERSON_TYPE = \"Person\";\r\ndeclare const CONTEXT = \"http://schema.org\";\r\ndeclare const IMAGE_TYPE = \"ImageObject\";\r\nexport interface ProfileImage {\r\n '@type': typeof IMAGE_TYPE;\r\n name: string;\r\n contentUrl: string;\r\n}\r\nexport interface Profile {\r\n '@type': typeof PERSON_TYPE;\r\n '@context': typeof CONTEXT;\r\n apps?: {\r\n [origin: string]: string;\r\n };\r\n appsMeta?: {\r\n [origin: string]: {\r\n publicKey: string;\r\n storage: string;\r\n };\r\n };\r\n name?: string;\r\n image?: ProfileImage[];\r\n [key: string]: any;\r\n}\r\nexport declare const DEFAULT_PROFILE: Profile;\r\nexport declare enum Subdomains {\r\n TEST = \"test-personal.id\",\r\n BLOCKSTACK = \"id.blockstack\"\r\n}\r\nexport declare const registrars: {\r\n \"test-personal.id\": {\r\n registerUrl: string;\r\n apiUrl: string;\r\n };\r\n \"id.blockstack\": {\r\n registerUrl: string;\r\n apiUrl: string;\r\n };\r\n};\r\nexport declare function signProfileForUpload(profile: Profile, keypair: IdentityKeyPair): string;\r\nexport declare function uploadProfile(gaiaHubUrl: string, identity: Identity, signedProfileTokenData: string, gaiaHubConfig?: GaiaHubConfig): Promise;\r\ninterface RegisterParams {\r\n identity: Identity;\r\n /** The gaia hub URL to use for profile.json upload */\r\n gaiaHubUrl: string;\r\n /** The username portion of this subdomain, i.e. only the portion of the name before any periods */\r\n username: string;\r\n /** The \"domain\" used for this subdomain. Can be any of the `Subdomains` enum. */\r\n subdomain: Subdomains;\r\n}\r\n/**\r\n * Register a subdomain for a given identity\r\n */\r\nexport declare const registerSubdomain: ({ identity, gaiaHubUrl, username, subdomain, }: RegisterParams) => Promise;\r\nexport declare const signAndUploadProfile: ({ profile, gaiaHubUrl, identity, gaiaHubConfig, }: {\r\n profile: Profile;\r\n gaiaHubUrl: string;\r\n identity: Identity;\r\n gaiaHubConfig?: GaiaHubConfig | undefined;\r\n}) => Promise;\r\nexport declare const fetchProfile: ({ identity, gaiaUrl, }: {\r\n identity: Identity;\r\n gaiaUrl: string;\r\n}) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..7edbdd5e7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +{"code":"import { bip32, ECPair } from 'bitcoinjs-lib';\r\nimport { getPublicKeyFromPrivate } from 'blockstack/lib/keys';\r\nimport { makeAuthResponse } from 'blockstack/lib/auth/authMessages';\r\nimport { getProfileURLFromZoneFile } from './utils';\r\nimport { makeGaiaAssociationToken, DEFAULT_GAIA_HUB, getHubInfo, connectToGaiaHubWithConfig, } from './utils/gaia';\r\nimport IdentityAddressOwnerNode from './nodes/identity-address-owner-node';\r\nimport { fetchProfile, DEFAULT_PROFILE, signAndUploadProfile } from './profiles';\r\nimport { ecPairToAddress } from 'blockstack';\r\nexport class Identity {\r\n constructor({ keyPair, address, usernames, defaultUsername, profile, }) {\r\n this.keyPair = keyPair;\r\n this.address = address;\r\n this.usernames = usernames || [];\r\n this.defaultUsername = defaultUsername;\r\n this.profile = profile;\r\n }\r\n async makeAuthResponse({ appDomain, gaiaUrl, transitPublicKey, scopes = [], stxAddress, }) {\r\n const appPrivateKey = this.appPrivateKey(appDomain);\r\n const hubInfo = await getHubInfo(gaiaUrl);\r\n const profileUrl = await this.profileUrl(hubInfo.read_url_prefix);\r\n const profile = (await fetchProfile({ identity: this, gaiaUrl: hubInfo.read_url_prefix })) || DEFAULT_PROFILE;\r\n if (scopes.includes('publish_data')) {\r\n if (!profile.apps) {\r\n profile.apps = {};\r\n }\r\n const challengeSigner = ECPair.fromPrivateKey(Buffer.from(appPrivateKey, 'hex'));\r\n const storageUrl = `${hubInfo.read_url_prefix}${ecPairToAddress(challengeSigner)}/`;\r\n profile.apps[appDomain] = storageUrl;\r\n if (!profile.appsMeta) {\r\n profile.appsMeta = {};\r\n }\r\n profile.appsMeta[appDomain] = {\r\n storage: storageUrl,\r\n publicKey: challengeSigner.publicKey.toString('hex'),\r\n };\r\n const gaiaHubConfig = connectToGaiaHubWithConfig({\r\n hubInfo,\r\n privateKey: this.keyPair.key,\r\n gaiaHubUrl: gaiaUrl,\r\n });\r\n await signAndUploadProfile({ profile, identity: this, gaiaHubUrl: gaiaUrl, gaiaHubConfig });\r\n }\r\n this.profile = profile;\r\n const compressedAppPublicKey = getPublicKeyFromPrivate(appPrivateKey.slice(0, 64));\r\n const associationToken = makeGaiaAssociationToken(this.keyPair.key, compressedAppPublicKey);\r\n return makeAuthResponse(this.keyPair.key, {\r\n ...(this.profile || {}),\r\n stxAddress,\r\n }, this.defaultUsername || '', {\r\n profileUrl,\r\n }, undefined, appPrivateKey, undefined, transitPublicKey, gaiaUrl, undefined, associationToken);\r\n }\r\n appPrivateKey(appDomain) {\r\n const { salt, appsNodeKey } = this.keyPair;\r\n const appsNode = new IdentityAddressOwnerNode(bip32.fromBase58(appsNodeKey), salt);\r\n return appsNode.getAppPrivateKey(appDomain);\r\n }\r\n async profileUrl(gaiaUrl) {\r\n if (this.defaultUsername) {\r\n try {\r\n const url = await getProfileURLFromZoneFile(this.defaultUsername);\r\n if (url)\r\n return url;\r\n }\r\n catch (error) {\r\n if (process.env.NODE_ENV !== 'test') {\r\n console.warn('Error fetching profile URL from zone file:', error);\r\n }\r\n }\r\n }\r\n return `${gaiaUrl}${this.address}/profile.json`;\r\n }\r\n async fetchNames() {\r\n const getNamesUrl = `https://core.blockstack.org/v1/addresses/bitcoin/${this.address}`;\r\n const res = await fetch(getNamesUrl);\r\n const data = await res.json();\r\n const { names } = data;\r\n return names;\r\n }\r\n /**\r\n * Fetch existing information related to this identity, like username and profile information\r\n */\r\n async refresh(opts = { gaiaUrl: DEFAULT_GAIA_HUB }) {\r\n try {\r\n const names = await this.fetchNames();\r\n if (names) {\r\n if (names[0] && !this.defaultUsername) {\r\n this.defaultUsername = names[0];\r\n }\r\n names.forEach(name => {\r\n const existingIndex = this.usernames.findIndex(u => u === name);\r\n if (existingIndex === -1) {\r\n this.usernames.push(name);\r\n }\r\n });\r\n }\r\n const profile = await fetchProfile({ identity: this, gaiaUrl: opts.gaiaUrl });\r\n if (profile) {\r\n this.profile = profile;\r\n }\r\n return;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n }\r\n}\r\nexport default Identity;\r\n//# sourceMappingURL=identity.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/auth/authMessages.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/nodes/identity-address-owner-node.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"identity.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/identity.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAGpD,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,UAAU,EACV,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,wBAAwB,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAW,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAc7C,MAAM,OAAO,QAAQ;IAOnB,YAAY,EACV,OAAO,EACP,OAAO,EACP,SAAS,EACT,eAAe,EACf,OAAO,GACoB;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,EACrB,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,MAAM,GAAG,EAAE,EACX,UAAU,GAOX;QACC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAClE,MAAM,OAAO,GACX,CAAC,MAAM,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,eAAe,CAAC;QAChG,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;YACnC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;gBACjB,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;aACnB;YACD,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;YACjF,MAAM,UAAU,GAAG,GAAG,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC;YACpF,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACrB,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;aACvB;YACD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG;gBAC5B,OAAO,EAAE,UAAU;gBACnB,SAAS,EAAE,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;aACrD,CAAC;YACF,MAAM,aAAa,GAAG,0BAA0B,CAAC;gBAC/C,OAAO;gBACP,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;gBAC5B,UAAU,EAAE,OAAO;aACpB,CAAC,CAAC;YACH,MAAM,oBAAoB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;SAC7F;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,MAAM,sBAAsB,GAAG,uBAAuB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnF,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QAE5F,OAAO,gBAAgB,CACrB,IAAI,CAAC,OAAO,CAAC,GAAG,EAChB;YACE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YACvB,UAAU;SACX,EACD,IAAI,CAAC,eAAe,IAAI,EAAE,EAC1B;YACE,UAAU;SACX,EACD,SAAS,EACT,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,SAAS,EACT,gBAAgB,CACjB,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;QACnF,OAAO,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI;gBACF,MAAM,GAAG,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAClE,IAAI,GAAG;oBAAE,OAAO,GAAG,CAAC;aACrB;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE;oBACnC,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;iBACnE;aACF;SACF;QACD,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,eAAe,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,WAAW,GAAG,oDAAoD,IAAI,CAAC,OAAO,EAAE,CAAC;QACvF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,EAAE,KAAK,EAAE,GAAwB,IAAI,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,OAAuB,EAAE,OAAO,EAAE,gBAAgB,EAAE;QAChE,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,KAAK,EAAE;gBACT,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;oBACrC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;iBACjC;gBACD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACnB,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;oBAChE,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;wBACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBAC3B;gBACH,CAAC,CAAC,CAAC;aACJ;YACD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9E,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;aACxB;YACD,OAAO;SACR;QAAC,OAAO,KAAK,EAAE;YACd,OAAO;SACR;IACH,CAAC;CACF;AAED,eAAe,QAAQ,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/identity.d.ts","writeByteOrderMark":false,"text":"import { IdentityKeyPair } from './utils/index';\r\nimport { Profile } from './profiles';\r\ninterface IdentityConstructorOptions {\r\n keyPair: IdentityKeyPair;\r\n address: string;\r\n usernames?: string[];\r\n defaultUsername?: string;\r\n profile?: Profile;\r\n}\r\ninterface RefreshOptions {\r\n gaiaUrl: string;\r\n}\r\nexport declare class Identity {\r\n keyPair: IdentityKeyPair;\r\n address: string;\r\n defaultUsername?: string;\r\n usernames: string[];\r\n profile?: Profile;\r\n constructor({ keyPair, address, usernames, defaultUsername, profile, }: IdentityConstructorOptions);\r\n makeAuthResponse({ appDomain, gaiaUrl, transitPublicKey, scopes, stxAddress, }: {\r\n appDomain: string;\r\n gaiaUrl: string;\r\n transitPublicKey: string;\r\n scopes?: string[];\r\n stxAddress?: string;\r\n }): Promise;\r\n appPrivateKey(appDomain: string): string;\r\n profileUrl(gaiaUrl: string): Promise;\r\n fetchNames(): Promise;\r\n /**\r\n * Fetch existing information related to this identity, like username and profile information\r\n */\r\n refresh(opts?: RefreshOptions): Promise;\r\n}\r\nexport default Identity;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..d1e50fabe --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +{"code":"import { makeContractCall, makeContractDeploy, StacksTestnet, makeSTXTokenTransfer, getAddressFromPrivateKey, } from '@blockstack/stacks-transactions';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { assertIsTruthy } from '../utils';\r\nimport BN from 'bn.js';\r\nexport class WalletSigner {\r\n constructor({ privateKey }) {\r\n this.privateKey = privateKey;\r\n }\r\n getSTXAddress(version) {\r\n return getAddressFromPrivateKey(this.getSTXPrivateKey(), version);\r\n }\r\n getSTXPrivateKey() {\r\n const node = bip32.fromBase58(this.privateKey);\r\n assertIsTruthy(node.privateKey);\r\n return node.privateKey;\r\n }\r\n getNetwork() {\r\n const network = new StacksTestnet();\r\n network.coreApiUrl = 'https://sidecar.staging.blockstack.xyz';\r\n return network;\r\n }\r\n async fetchAccount({ version, rpcClient, }) {\r\n const address = this.getSTXAddress(version);\r\n const account = await rpcClient.fetchAccount(address);\r\n return account;\r\n }\r\n async signContractCall({ contractName, contractAddress, functionName, functionArgs, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeContractCall({\r\n contractAddress,\r\n contractName,\r\n functionName,\r\n functionArgs,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n nonce: new BN(nonce),\r\n network: this.getNetwork(),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n async signContractDeploy({ contractName, codeBody, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeContractDeploy({\r\n contractName,\r\n codeBody: codeBody,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n network: this.getNetwork(),\r\n nonce: new BN(nonce),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n async signSTXTransfer({ recipient, amount, memo, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeSTXTokenTransfer({\r\n recipient,\r\n amount: new BN(amount),\r\n memo,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n network: this.getNetwork(),\r\n nonce: new BN(nonce),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n}\r\n//# sourceMappingURL=signer.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/rpc-client/dist/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@types/bn.js/index.d.ts"],"map":"{\"version\":3,\"file\":\"signer.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/wallet/signer.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/wallet/signer.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { TransactionVersion, ClarityValue, StacksTestnet, PostConditionMode, PostCondition, StacksNetwork } from '@blockstack/stacks-transactions';\r\nimport RPCClient from '@blockstack/rpc-client';\r\ninterface ContractCallOptions {\r\n contractName: string;\r\n contractAddress: string;\r\n functionName: string;\r\n functionArgs: ClarityValue[];\r\n version: TransactionVersion;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\ninterface ContractDeployOptions {\r\n contractName: string;\r\n codeBody: string;\r\n version: TransactionVersion;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\ninterface STXTransferOptions {\r\n recipient: string;\r\n amount: string;\r\n memo?: string;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\nexport declare class WalletSigner {\r\n privateKey: string;\r\n constructor({ privateKey }: {\r\n privateKey: string;\r\n });\r\n getSTXAddress(version: TransactionVersion): string;\r\n getSTXPrivateKey(): Buffer;\r\n getNetwork(): StacksTestnet;\r\n fetchAccount({ version, rpcClient, }: {\r\n version: TransactionVersion;\r\n rpcClient: RPCClient;\r\n }): Promise;\r\n signContractCall({ contractName, contractAddress, functionName, functionArgs, nonce, postConditionMode, postConditions, }: ContractCallOptions): Promise;\r\n signContractDeploy({ contractName, codeBody, nonce, postConditionMode, postConditions, }: ContractDeployOptions): Promise;\r\n signSTXTransfer({ recipient, amount, memo, nonce, postConditionMode, postConditions, }: STXTransferOptions): Promise;\r\n}\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..796e4be36 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +{"code":"import { TokenSigner } from 'jsontokens';\r\nimport { getPublicKeyFromPrivate } from 'blockstack/lib/keys';\r\nimport { randomBytes } from 'blockstack/lib/encryption/cryptoRandom';\r\nimport { ecPairToAddress, hexStringToECPair } from 'blockstack';\r\nexport const DEFAULT_GAIA_HUB = 'https://gaia.blockstack.org/hub/';\r\nexport const getHubInfo = async (hubUrl) => {\r\n const response = await fetch(`${hubUrl}/hub_info`);\r\n const data = await response.json();\r\n return data;\r\n};\r\nexport const getHubPrefix = async (hubUrl) => {\r\n const { read_url_prefix } = await getHubInfo(hubUrl);\r\n return read_url_prefix;\r\n};\r\nexport const makeGaiaAssociationToken = (secretKeyHex, childPublicKeyHex) => {\r\n const LIFETIME_SECONDS = 365 * 24 * 3600;\r\n const signerKeyHex = secretKeyHex.slice(0, 64);\r\n const compressedPublicKeyHex = getPublicKeyFromPrivate(signerKeyHex);\r\n const salt = randomBytes(16).toString('hex');\r\n const payload = {\r\n childToAssociate: childPublicKeyHex,\r\n iss: compressedPublicKeyHex,\r\n exp: LIFETIME_SECONDS + new Date().getTime() / 1000,\r\n iat: Date.now() / 1000,\r\n salt,\r\n };\r\n const tokenSigner = new TokenSigner('ES256K', signerKeyHex);\r\n const token = tokenSigner.sign(payload);\r\n return token;\r\n};\r\nexport const connectToGaiaHubWithConfig = ({ hubInfo, privateKey, gaiaHubUrl, }) => {\r\n const readURL = hubInfo.read_url_prefix;\r\n const token = makeGaiaAuthToken({ hubInfo, privateKey, gaiaHubUrl });\r\n const address = ecPairToAddress(hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')));\r\n return {\r\n url_prefix: readURL,\r\n max_file_upload_size_megabytes: 100,\r\n address,\r\n token,\r\n server: gaiaHubUrl,\r\n };\r\n};\r\n/**\r\n * When you already know the Gaia read URL, make a Gaia config that doesn't have to fetch `/hub_info`\r\n */\r\nexport const makeReadOnlyGaiaConfig = ({ readURL, privateKey, }) => {\r\n const address = ecPairToAddress(hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')));\r\n return {\r\n url_prefix: readURL,\r\n max_file_upload_size_megabytes: 100,\r\n address,\r\n token: 'not_used',\r\n server: 'not_used',\r\n };\r\n};\r\nconst makeGaiaAuthToken = ({ hubInfo, privateKey, gaiaHubUrl }) => {\r\n const challengeText = hubInfo.challenge_text;\r\n const iss = getPublicKeyFromPrivate(privateKey);\r\n const salt = randomBytes(16).toString('hex');\r\n const payload = {\r\n gaiaHubUrl,\r\n iss,\r\n salt,\r\n };\r\n if (challengeText) {\r\n payload.gaiaChallenge = challengeText;\r\n }\r\n const token = new TokenSigner('ES256K', privateKey).sign(payload);\r\n return `v1:${token}`;\r\n};\r\nexport const uploadToGaiaHub = async (filename, contents, hubConfig) => {\r\n const contentType = 'application/json';\r\n const response = await fetch(`${hubConfig.server}/store/${hubConfig.address}/${filename}`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': contentType,\r\n Authorization: `bearer ${hubConfig.token}`,\r\n },\r\n body: contents,\r\n referrer: 'no-referrer',\r\n referrerPolicy: 'no-referrer',\r\n });\r\n const { publicURL } = await response.json();\r\n return publicURL;\r\n};\r\n//# sourceMappingURL=gaia.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/jsontokens/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/cryptoRandom.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts"],"map":"{\"version\":3,\"file\":\"gaia.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/gaia.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/utils/gaia.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\nexport declare const DEFAULT_GAIA_HUB = \"https://gaia.blockstack.org/hub/\";\r\ninterface HubInfo {\r\n challenge_text?: string;\r\n read_url_prefix: string;\r\n}\r\nexport declare const getHubInfo: (hubUrl: string) => Promise;\r\nexport declare const getHubPrefix: (hubUrl: string) => Promise;\r\nexport declare const makeGaiaAssociationToken: (secretKeyHex: string, childPublicKeyHex: string) => string;\r\ninterface ConnectToGaiaOptions {\r\n hubInfo: HubInfo;\r\n privateKey: string;\r\n gaiaHubUrl: string;\r\n}\r\nexport declare const connectToGaiaHubWithConfig: ({ hubInfo, privateKey, gaiaHubUrl, }: ConnectToGaiaOptions) => GaiaHubConfig;\r\ninterface ReadOnlyGaiaConfigOptions {\r\n readURL: string;\r\n privateKey: string;\r\n}\r\n/**\r\n * When you already know the Gaia read URL, make a Gaia config that doesn't have to fetch `/hub_info`\r\n */\r\nexport declare const makeReadOnlyGaiaConfig: ({ readURL, privateKey, }: ReadOnlyGaiaConfigOptions) => GaiaHubConfig;\r\nexport declare const uploadToGaiaHub: (filename: string, contents: Blob | Buffer | ArrayBufferView | string, hubConfig: GaiaHubConfig) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/018dd99255a534837916033f04b396b3c5b771ad b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/018dd99255a534837916033f04b396b3c5b771ad new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/061a2a662a532413fb382823dd2453c8537b4338 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/061a2a662a532413fb382823dd2453c8537b4338 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/314c9c585547e1ee805fe1597f307af31b72559c b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/314c9c585547e1ee805fe1597f307af31b72559c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/420b2f97ccbc239de9691385af956534d4545c2c b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/420b2f97ccbc239de9691385af956534d4545c2c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/9ed2612615091d088e52b934dbdc159280dc237c b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/9ed2612615091d088e52b934dbdc159280dc237c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/fae54f93545510c8db4ed307ea8397a19112446a b/packages/keychain/.rts2_cache_cjs/rpt2_273b57ed789d9596378db5e57a855ddb61d1560e/types/cache/fae54f93545510c8db4ed307ea8397a19112446a new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..53380f7c1 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +{"code":"import { ChainID, getAddressFromPrivateKey, TransactionVersion, } from '@blockstack/stacks-transactions';\r\nimport { ECPair } from 'bitcoinjs-lib';\r\nimport { ecPairToHexString } from 'blockstack';\r\nconst networkDerivationPath = `m/44'/5757'/0'/0/0`;\r\nexport const derivationPaths = {\r\n [ChainID.Mainnet]: networkDerivationPath,\r\n [ChainID.Testnet]: networkDerivationPath,\r\n};\r\nexport function getDerivationPath(chain) {\r\n return derivationPaths[chain];\r\n}\r\nexport function deriveStxAddressChain(chain) {\r\n return (rootNode) => {\r\n const childKey = rootNode.derivePath(getDerivationPath(chain));\r\n if (!childKey.privateKey) {\r\n throw new Error('Unable to derive private key from `rootNode`, bip32 master keychain');\r\n }\r\n const ecPair = ECPair.fromPrivateKey(childKey.privateKey);\r\n const privateKey = ecPairToHexString(ecPair);\r\n const txVersion = chain === ChainID.Mainnet ? TransactionVersion.Mainnet : TransactionVersion.Testnet;\r\n return {\r\n childKey,\r\n address: getAddressFromPrivateKey(privateKey, txVersion),\r\n privateKey,\r\n };\r\n };\r\n}\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/address-derivation/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EACL,OAAO,EACP,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAkB,MAAM,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB;IACxC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB;CACzC,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CAAC,QAAwB,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;SACxF;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,SAAS,GACb,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC;QACtF,OAAO;YACL,QAAQ;YACR,OAAO,EAAE,wBAAwB,CAAC,UAAU,EAAE,SAAS,CAAC;YACxD,UAAU;SACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/address-derivation/index.d.ts","writeByteOrderMark":false,"text":"import { ChainID } from '@blockstack/stacks-transactions';\r\nimport { BIP32Interface } from 'bitcoinjs-lib';\r\nexport declare const derivationPaths: {\r\n 1: string;\r\n 2147483648: string;\r\n};\r\nexport declare function getDerivationPath(chain: ChainID): string;\r\nexport declare function deriveStxAddressChain(chain: ChainID): (rootNode: BIP32Interface) => {\r\n childKey: BIP32Interface;\r\n address: string;\r\n privateKey: string;\r\n};\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..0c4968ffd --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +{"code":"import { generateMnemonic as generateBip39Mnemonic, mnemonicToSeed } from 'bip39';\r\nimport { randomBytes } from 'blockstack/lib/encryption/cryptoRandom';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { encrypt } from '../encryption/encrypt';\r\nimport { encryptMnemonic } from 'blockstack';\r\nexport async function generateMnemonicRootKeychain(entropy) {\r\n const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes);\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n return {\r\n rootNode,\r\n plaintextMnemonic,\r\n };\r\n}\r\nexport async function generateEncryptedMnemonicRootKeychain(password, entropy) {\r\n const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes);\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n const ciphertextBuffer = await encrypt(plaintextMnemonic, password);\r\n const encryptedMnemonicPhrase = ciphertextBuffer.toString('hex');\r\n return {\r\n rootNode,\r\n encryptedMnemonicPhrase,\r\n };\r\n}\r\nexport async function deriveRootKeychainFromMnemonic(plaintextMnemonic) {\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n return rootNode;\r\n}\r\nexport async function encryptMnemonicFormatted(plaintextMnemonic, password) {\r\n const encryptedMnemonic = await encryptMnemonic(plaintextMnemonic, password);\r\n const encryptedMnemonicHex = encryptedMnemonic.toString('hex');\r\n return { encryptedMnemonic, encryptedMnemonicHex };\r\n}\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/bip39/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/cryptoRandom.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/encrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/mnemonic/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,gBAAgB,IAAI,qBAAqB,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAA8B;IAC/E,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO;QACL,QAAQ;QACR,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,QAAgB,EAChB,OAA8B;IAE9B,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACpE,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO;QACL,QAAQ;QACR,uBAAuB;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,iBAAyB;IAC5E,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,iBAAyB,EAAE,QAAgB;IACxF,MAAM,iBAAiB,GAAG,MAAM,eAAe,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC7E,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;AACrD,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/mnemonic/index.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { bip32 } from 'bitcoinjs-lib';\r\nexport declare type AllowedKeyEntropyBits = 128 | 256;\r\nexport declare function generateMnemonicRootKeychain(entropy: AllowedKeyEntropyBits): Promise<{\r\n rootNode: bip32.BIP32Interface;\r\n plaintextMnemonic: string;\r\n}>;\r\nexport declare function generateEncryptedMnemonicRootKeychain(password: string, entropy: AllowedKeyEntropyBits): Promise<{\r\n rootNode: bip32.BIP32Interface;\r\n encryptedMnemonicPhrase: string;\r\n}>;\r\nexport declare function deriveRootKeychainFromMnemonic(plaintextMnemonic: string): Promise;\r\nexport declare function encryptMnemonicFormatted(plaintextMnemonic: string, password: string): Promise<{\r\n encryptedMnemonic: Buffer;\r\n encryptedMnemonicHex: string;\r\n}>;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..e617263c8 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +{"code":"import { encryptMnemonic } from 'blockstack/lib/encryption/wallet';\r\n/**\r\n * Encrypt a raw mnemonic phrase to be password protected\r\n * @param phrase - Raw mnemonic phrase\r\n * @param password - Password to encrypt mnemonic with\r\n * @return The encrypted phrase\r\n * */\r\nexport async function encrypt(phrase, password) {\r\n const result = await encryptMnemonic(phrase, password);\r\n return result;\r\n}\r\n//# sourceMappingURL=encrypt.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/wallet.d.ts"],"map":"{\"version\":3,\"file\":\"encrypt.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/encryption/encrypt.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;;;;KAKK;AACL,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,QAAgB;IAC5D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC;AAChB,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/encryption/encrypt.d.ts","writeByteOrderMark":false,"text":"/// \r\n/**\r\n * Encrypt a raw mnemonic phrase to be password protected\r\n * @param phrase - Raw mnemonic phrase\r\n * @param password - Password to encrypt mnemonic with\r\n * @return The encrypted phrase\r\n * */\r\nexport declare function encrypt(phrase: string, password: string): Promise;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..93330eccf --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +{"code":"import Wallet from './wallet';\r\nexport * from './utils';\r\nexport * from './mnemonic';\r\nexport * from './address-derivation';\r\nexport { default as Wallet } from './wallet';\r\nexport * from './wallet';\r\nexport * from './wallet/signer';\r\nexport { decrypt } from './encryption/decrypt';\r\nexport { encrypt } from './encryption/encrypt';\r\nexport * from './profiles';\r\nexport * from './identity';\r\nexport default {\r\n Wallet,\r\n};\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/mnemonic/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/address-derivation/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/signer.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/decrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/encrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAE3B,eAAe;IACb,MAAM;CACP,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/index.d.ts","writeByteOrderMark":false,"text":"import Wallet from './wallet';\r\nexport * from './utils';\r\nexport * from './mnemonic';\r\nexport * from './address-derivation';\r\nexport { default as Wallet } from './wallet';\r\nexport * from './wallet';\r\nexport * from './wallet/signer';\r\nexport { decrypt } from './encryption/decrypt';\r\nexport { encrypt } from './encryption/encrypt';\r\nexport * from './profiles';\r\nexport * from './identity';\r\ndeclare const _default: {\r\n Wallet: typeof Wallet;\r\n};\r\nexport default _default;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..673790086 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +{"code":"import { mnemonicToSeed } from 'bip39';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { getBlockchainIdentities, makeIdentity, assertIsTruthy, recursiveRestoreIdentities, } from '../utils';\r\nimport Identity from '../identity';\r\nimport { decrypt } from '../encryption/decrypt';\r\nimport { connectToGaiaHub, encryptContent, getPublicKeyFromPrivate, decryptContent, } from 'blockstack';\r\nimport { generateEncryptedMnemonicRootKeychain, deriveRootKeychainFromMnemonic, encryptMnemonicFormatted, } from '../mnemonic';\r\nimport { deriveStxAddressChain } from '../address-derivation';\r\nimport { makeReadOnlyGaiaConfig, DEFAULT_GAIA_HUB, uploadToGaiaHub } from '../utils/gaia';\r\nimport { WalletSigner } from './signer';\r\nconst CONFIG_INDEX = 45;\r\nexport class Wallet {\r\n constructor({ chain, encryptedBackupPhrase, identityPublicKeychain, bitcoinPublicKeychain, firstBitcoinAddress, identityKeypairs, identityAddresses, identities, configPrivateKey, stacksPrivateKey, walletConfig, }) {\r\n this.chain = chain;\r\n this.encryptedBackupPhrase = encryptedBackupPhrase;\r\n this.identityPublicKeychain = identityPublicKeychain;\r\n this.bitcoinPublicKeychain = bitcoinPublicKeychain;\r\n this.firstBitcoinAddress = firstBitcoinAddress;\r\n this.identityKeypairs = identityKeypairs;\r\n this.identityAddresses = identityAddresses;\r\n this.identities = identities.map(identity => new Identity(identity));\r\n this.configPrivateKey = configPrivateKey;\r\n this.stacksPrivateKey = stacksPrivateKey;\r\n this.walletConfig = walletConfig;\r\n }\r\n static generateFactory(bitsEntropy) {\r\n return async (password, chain) => {\r\n const { rootNode, encryptedMnemonicPhrase } = await generateEncryptedMnemonicRootKeychain(password, bitsEntropy);\r\n return this.createAccount({\r\n encryptedBackupPhrase: encryptedMnemonicPhrase,\r\n rootNode,\r\n chain,\r\n });\r\n };\r\n }\r\n static async generate(password, chain) {\r\n return await this.generateFactory(128)(password, chain);\r\n }\r\n static async generateStrong(password, chain) {\r\n return await this.generateFactory(256)(password, chain);\r\n }\r\n static async restore(password, seedPhrase, chain) {\r\n const rootNode = await deriveRootKeychainFromMnemonic(seedPhrase);\r\n const { encryptedMnemonicHex } = await encryptMnemonicFormatted(seedPhrase, password);\r\n const wallet = await Wallet.createAccount({\r\n encryptedBackupPhrase: encryptedMnemonicHex,\r\n rootNode,\r\n chain,\r\n });\r\n return await wallet.restoreIdentities({ rootNode, gaiaReadURL: DEFAULT_GAIA_HUB });\r\n }\r\n static async createAccount({ encryptedBackupPhrase, rootNode, chain, identitiesToGenerate = 1, }) {\r\n const derivedIdentitiesKey = rootNode.deriveHardened(CONFIG_INDEX).privateKey;\r\n if (!derivedIdentitiesKey) {\r\n throw new TypeError('Unable to derive config key for wallet identities');\r\n }\r\n const configPrivateKey = derivedIdentitiesKey.toString('hex');\r\n const { childKey: stxAddressKeychain } = deriveStxAddressChain(chain)(rootNode);\r\n const walletAttrs = await getBlockchainIdentities(rootNode, identitiesToGenerate);\r\n return new Wallet({\r\n ...walletAttrs,\r\n chain,\r\n configPrivateKey,\r\n stacksPrivateKey: stxAddressKeychain.toBase58(),\r\n encryptedBackupPhrase,\r\n });\r\n }\r\n /**\r\n * Restore all previously used identities. This is meant to be used when 'restoring' a wallet.\r\n * First, it will check for a `walletConfig`. If present, then we use that to determine how\r\n * many identities to generate, and auto-populate their username.\r\n *\r\n * If `walletConfig` is empty, then this is being restored from an authenticator that doesn't\r\n * support `walletConfig`. In that case, we will recursively generate identities, and check for\r\n * on-chain names.\r\n *\r\n */\r\n async restoreIdentities({ rootNode, gaiaReadURL, }) {\r\n const gaiaConfig = makeReadOnlyGaiaConfig({\r\n readURL: gaiaReadURL,\r\n privateKey: this.configPrivateKey,\r\n });\r\n await this.fetchConfig(gaiaConfig);\r\n if (this.walletConfig) {\r\n const getIdentities = this.walletConfig.identities.map(async (identityConfig, index) => {\r\n let identity = this.identities[index];\r\n if (!identity) {\r\n identity = await makeIdentity(rootNode, index);\r\n }\r\n if (identityConfig.username) {\r\n identity.usernames = [identityConfig.username];\r\n identity.defaultUsername = identityConfig.username;\r\n }\r\n return identity;\r\n });\r\n const identities = await Promise.all(getIdentities);\r\n this.identities = identities;\r\n return this;\r\n }\r\n await this.identities[0].refresh();\r\n const newIdentities = await recursiveRestoreIdentities({ rootNode });\r\n this.identities = this.identities.concat(newIdentities);\r\n return this;\r\n }\r\n async createNewIdentity(password) {\r\n const plainTextBuffer = await decrypt(Buffer.from(this.encryptedBackupPhrase, 'hex'), password);\r\n const seed = await mnemonicToSeed(plainTextBuffer);\r\n const rootNode = bip32.fromSeed(seed);\r\n const index = this.identities.length;\r\n const identity = await makeIdentity(rootNode, index);\r\n this.identities.push(identity);\r\n this.identityKeypairs.push(identity.keyPair);\r\n this.identityAddresses.push(identity.address);\r\n return identity;\r\n }\r\n async createGaiaConfig(gaiaHubUrl) {\r\n return connectToGaiaHub(gaiaHubUrl, this.configPrivateKey);\r\n }\r\n async fetchConfig(gaiaConfig) {\r\n try {\r\n const response = await fetch(`${gaiaConfig.url_prefix}${gaiaConfig.address}/wallet-config.json`);\r\n const encrypted = await response.text();\r\n const configJSON = (await decryptContent(encrypted, {\r\n privateKey: this.configPrivateKey,\r\n }));\r\n const config = JSON.parse(configJSON);\r\n this.walletConfig = config;\r\n return config;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n }\r\n async getOrCreateConfig({ gaiaConfig, skipUpload, }) {\r\n if (this.walletConfig) {\r\n return this.walletConfig;\r\n }\r\n const config = await this.fetchConfig(gaiaConfig);\r\n if (config) {\r\n return config;\r\n }\r\n const newConfig = {\r\n identities: this.identities.map(i => ({\r\n username: i.defaultUsername,\r\n address: i.address,\r\n apps: {},\r\n })),\r\n };\r\n this.walletConfig = newConfig;\r\n if (!skipUpload) {\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n return newConfig;\r\n }\r\n async updateConfig(gaiaConfig) {\r\n const publicKey = getPublicKeyFromPrivate(this.configPrivateKey);\r\n const encrypted = await encryptContent(JSON.stringify(this.walletConfig), { publicKey });\r\n await uploadToGaiaHub('wallet-config.json', encrypted, gaiaConfig);\r\n }\r\n async updateConfigWithAuth({ identityIndex, app, gaiaConfig, }) {\r\n const { walletConfig } = this;\r\n assertIsTruthy(walletConfig);\r\n this.identities.forEach((identity, index) => {\r\n const configIdentity = walletConfig.identities[index];\r\n if (configIdentity) {\r\n configIdentity.apps = configIdentity.apps || {};\r\n configIdentity.username = identity.defaultUsername;\r\n configIdentity.address = identity.address;\r\n walletConfig.identities[index] = configIdentity;\r\n }\r\n else {\r\n this.walletConfig?.identities.push({\r\n username: identity.defaultUsername,\r\n address: identity.address,\r\n apps: {},\r\n });\r\n }\r\n });\r\n const identity = walletConfig.identities[identityIndex];\r\n identity.apps = identity.apps || {};\r\n identity.apps[app.origin] = app;\r\n walletConfig.identities[identityIndex] = identity;\r\n this.walletConfig = walletConfig;\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n async updateConfigForReuseWarning({ gaiaConfig }) {\r\n assertIsTruthy(this.walletConfig);\r\n this.walletConfig.hideWarningForReusingIdentity = true;\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n getSigner() {\r\n return new WalletSigner({ privateKey: this.stacksPrivateKey });\r\n }\r\n}\r\nexport default Wallet;\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/bip39/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/decrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/mnemonic/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/address-derivation/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/signer.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/wallet/index.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/wallet/index.d.ts","writeByteOrderMark":false,"text":"import { bip32, BIP32Interface } from 'bitcoinjs-lib';\r\nimport { ChainID } from '@blockstack/stacks-transactions';\r\nimport { IdentityKeyPair } from '../utils';\r\nimport Identity from '../identity';\r\nimport { AllowedKeyEntropyBits } from '../mnemonic';\r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\nimport { WalletSigner } from './signer';\r\nexport interface ConfigApp {\r\n origin: string;\r\n scopes: string[];\r\n lastLoginAt: number;\r\n appIcon: string;\r\n name: string;\r\n}\r\ninterface ConfigIdentity {\r\n username?: string;\r\n address: string;\r\n apps: {\r\n [origin: string]: ConfigApp;\r\n };\r\n}\r\nexport interface WalletConfig {\r\n identities: ConfigIdentity[];\r\n hideWarningForReusingIdentity?: boolean;\r\n}\r\nexport interface ConstructorOptions {\r\n chain: ChainID;\r\n identityPublicKeychain: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityKeypairs: IdentityKeyPair[];\r\n identityAddresses: string[];\r\n encryptedBackupPhrase: string;\r\n identities: Identity[];\r\n configPrivateKey: string;\r\n stacksPrivateKey: string;\r\n walletConfig?: WalletConfig;\r\n}\r\nexport declare class Wallet {\r\n chain: ChainID;\r\n encryptedBackupPhrase: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityKeypairs: IdentityKeyPair[];\r\n identityAddresses: string[];\r\n identityPublicKeychain: string;\r\n identities: Identity[];\r\n configPrivateKey: string;\r\n stacksPrivateKey: string;\r\n walletConfig?: WalletConfig;\r\n constructor({ chain, encryptedBackupPhrase, identityPublicKeychain, bitcoinPublicKeychain, firstBitcoinAddress, identityKeypairs, identityAddresses, identities, configPrivateKey, stacksPrivateKey, walletConfig, }: ConstructorOptions);\r\n static generateFactory(bitsEntropy: AllowedKeyEntropyBits): (password: string, chain: ChainID) => Promise;\r\n static generate(password: string, chain: ChainID): Promise;\r\n static generateStrong(password: string, chain: ChainID): Promise;\r\n static restore(password: string, seedPhrase: string, chain: ChainID): Promise;\r\n static createAccount({ encryptedBackupPhrase, rootNode, chain, identitiesToGenerate, }: {\r\n encryptedBackupPhrase: string;\r\n rootNode: BIP32Interface;\r\n chain: ChainID;\r\n identitiesToGenerate?: number;\r\n }): Promise;\r\n /**\r\n * Restore all previously used identities. This is meant to be used when 'restoring' a wallet.\r\n * First, it will check for a `walletConfig`. If present, then we use that to determine how\r\n * many identities to generate, and auto-populate their username.\r\n *\r\n * If `walletConfig` is empty, then this is being restored from an authenticator that doesn't\r\n * support `walletConfig`. In that case, we will recursively generate identities, and check for\r\n * on-chain names.\r\n *\r\n */\r\n restoreIdentities({ rootNode, gaiaReadURL, }: {\r\n rootNode: bip32.BIP32Interface;\r\n gaiaReadURL: string;\r\n }): Promise;\r\n createNewIdentity(password: string): Promise;\r\n createGaiaConfig(gaiaHubUrl: string): Promise;\r\n fetchConfig(gaiaConfig: GaiaHubConfig): Promise;\r\n getOrCreateConfig({ gaiaConfig, skipUpload, }: {\r\n gaiaConfig: GaiaHubConfig;\r\n skipUpload?: boolean;\r\n }): Promise;\r\n updateConfig(gaiaConfig: GaiaHubConfig): Promise;\r\n updateConfigWithAuth({ identityIndex, app, gaiaConfig, }: {\r\n identityIndex: number;\r\n app: ConfigApp;\r\n gaiaConfig: GaiaHubConfig;\r\n }): Promise;\r\n updateConfigForReuseWarning({ gaiaConfig }: {\r\n gaiaConfig: GaiaHubConfig;\r\n }): Promise;\r\n getSigner(): WalletSigner;\r\n}\r\nexport default Wallet;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..a38d6780d --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +{"code":"import { decrypt as triplesecDecrypt } from 'triplesec';\r\nimport { decryptMnemonic } from 'blockstack/lib/encryption/wallet';\r\n/**\r\n * Decrypt an encrypted mnemonic phrase with a password.\r\n * Legacy triplesec encrypted payloads are also supported.\r\n * @param data - Buffer or hex-encoded string of the encrypted mnemonic\r\n * @param password - Password for data\r\n * @return the raw mnemonic phrase\r\n */\r\nexport async function decrypt(dataBuffer, password) {\r\n const result = await decryptMnemonic(dataBuffer, password, triplesecDecrypt);\r\n return result;\r\n}\r\n//# sourceMappingURL=decrypt.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@types/triplesec/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/wallet.d.ts"],"map":"{\"version\":3,\"file\":\"decrypt.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/encryption/decrypt.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAA2B,EAAE,QAAgB;IACzE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC7E,OAAO,MAAM,CAAC;AAChB,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/encryption/decrypt.d.ts","writeByteOrderMark":false,"text":"/// \r\n/**\r\n * Decrypt an encrypted mnemonic phrase with a password.\r\n * Legacy triplesec encrypted payloads are also supported.\r\n * @param data - Buffer or hex-encoded string of the encrypted mnemonic\r\n * @param password - Password for data\r\n * @return the raw mnemonic phrase\r\n */\r\nexport declare function decrypt(dataBuffer: Buffer | string, password: string): Promise;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..afbcca7e2 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +{"code":"import IdentityAddressOwnerNode from '../nodes/identity-address-owner-node';\r\nimport { createSha2Hash } from 'blockstack/lib/encryption/sha2Hash';\r\nimport { publicKeyToAddress } from 'blockstack/lib/keys';\r\nimport { parseZoneFile } from 'zone-file';\r\nimport Identity from '../identity';\r\nimport { AssertionError } from 'assert';\r\nimport { Subdomains, registrars } from '../profiles';\r\nconst IDENTITY_KEYCHAIN = 888;\r\nconst BLOCKSTACK_ON_BITCOIN = 0;\r\nexport function getIdentityPrivateKeychain(rootNode) {\r\n return rootNode.deriveHardened(IDENTITY_KEYCHAIN).deriveHardened(BLOCKSTACK_ON_BITCOIN);\r\n}\r\nconst EXTERNAL_ADDRESS = 'EXTERNAL_ADDRESS';\r\nconst CHANGE_ADDRESS = 'CHANGE_ADDRESS';\r\nexport function getBitcoinPrivateKeychain(rootNode) {\r\n const BIP_44_PURPOSE = 44;\r\n const BITCOIN_COIN_TYPE = 0;\r\n const ACCOUNT_INDEX = 0;\r\n return rootNode\r\n .deriveHardened(BIP_44_PURPOSE)\r\n .deriveHardened(BITCOIN_COIN_TYPE)\r\n .deriveHardened(ACCOUNT_INDEX);\r\n}\r\nexport function getBitcoinAddressNode(bitcoinKeychain, addressIndex = 0, chainType = EXTERNAL_ADDRESS) {\r\n let chain = null;\r\n if (chainType === EXTERNAL_ADDRESS) {\r\n chain = 0;\r\n }\r\n else if (chainType === CHANGE_ADDRESS) {\r\n chain = 1;\r\n }\r\n else {\r\n throw new Error('Invalid chain type');\r\n }\r\n return bitcoinKeychain.derive(chain).derive(addressIndex);\r\n}\r\nexport async function getIdentityOwnerAddressNode(identityPrivateKeychain, identityIndex = 0) {\r\n if (identityPrivateKeychain.isNeutered()) {\r\n throw new Error('You need the private key to generate identity addresses');\r\n }\r\n const publicKeyHex = Buffer.from(identityPrivateKeychain.publicKey.toString('hex'));\r\n const sha2Hash = await createSha2Hash();\r\n const saltData = await sha2Hash.digest(publicKeyHex, 'sha256');\r\n const salt = saltData.toString('hex');\r\n return new IdentityAddressOwnerNode(identityPrivateKeychain.deriveHardened(identityIndex), salt);\r\n}\r\nexport function getAddress(node) {\r\n return publicKeyToAddress(node.publicKey);\r\n}\r\nexport function deriveIdentityKeyPair(identityOwnerAddressNode) {\r\n const address = identityOwnerAddressNode.getAddress();\r\n const identityKey = identityOwnerAddressNode.getIdentityKey();\r\n const identityKeyID = identityOwnerAddressNode.getIdentityKeyID();\r\n const appsNode = identityOwnerAddressNode.getAppsNode();\r\n const stxNode = identityOwnerAddressNode.getSTXNode();\r\n const keyPair = {\r\n key: identityKey,\r\n keyID: identityKeyID,\r\n address,\r\n appsNodeKey: appsNode.toBase58(),\r\n stxNodeKey: stxNode.toBase58(),\r\n salt: identityOwnerAddressNode.getSalt(),\r\n };\r\n return keyPair;\r\n}\r\nexport async function getBlockchainIdentities(rootNode, identitiesToGenerate) {\r\n const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode);\r\n const bitcoinPrivateKeychainNode = getBitcoinPrivateKeychain(rootNode);\r\n const identityPublicKeychainNode = identityPrivateKeychainNode.neutered();\r\n const identityPublicKeychain = identityPublicKeychainNode.toBase58();\r\n const bitcoinPublicKeychainNode = bitcoinPrivateKeychainNode.neutered();\r\n const bitcoinPublicKeychain = bitcoinPublicKeychainNode.toBase58();\r\n const firstBitcoinAddress = getAddress(getBitcoinAddressNode(bitcoinPublicKeychainNode));\r\n const identityAddresses = [];\r\n const identityKeypairs = [];\r\n const identities = [];\r\n // We pre-generate a number of identity addresses so that we\r\n // don't have to prompt the user for the password on each new profile\r\n for (let addressIndex = 0; addressIndex < identitiesToGenerate; addressIndex++) {\r\n const identity = await makeIdentity(rootNode, addressIndex);\r\n identities.push(identity);\r\n identityKeypairs.push(identity.keyPair);\r\n identityAddresses.push(identity.address);\r\n }\r\n return {\r\n identityPublicKeychain,\r\n bitcoinPublicKeychain,\r\n firstBitcoinAddress,\r\n identityAddresses,\r\n identityKeypairs,\r\n identities,\r\n };\r\n}\r\nexport const makeIdentity = async (rootNode, index) => {\r\n const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode);\r\n const identityOwnerAddressNode = await getIdentityOwnerAddressNode(identityPrivateKeychainNode, index);\r\n const identityKeyPair = deriveIdentityKeyPair(identityOwnerAddressNode);\r\n const identity = new Identity({\r\n keyPair: identityKeyPair,\r\n address: identityKeyPair.address,\r\n usernames: [],\r\n });\r\n return identity;\r\n};\r\nexport function assertIsTruthy(val) {\r\n if (!val) {\r\n throw new AssertionError({ expected: true, actual: val });\r\n }\r\n}\r\nexport var IdentityNameValidityError;\r\n(function (IdentityNameValidityError) {\r\n IdentityNameValidityError[\"MINIMUM_LENGTH\"] = \"error_minimum_length\";\r\n IdentityNameValidityError[\"MAXIMUM_LENGTH\"] = \"error_maximum_length\";\r\n IdentityNameValidityError[\"ILLEGAL_CHARACTER\"] = \"error_illegal_character\";\r\n IdentityNameValidityError[\"UNAVAILABLE\"] = \"error_name_unavailable\";\r\n})(IdentityNameValidityError || (IdentityNameValidityError = {}));\r\nconst containsLegalCharacters = (name) => /^[a-z0-9_]+$/.test(name);\r\nexport const validateSubdomainFormat = (identityName) => {\r\n const nameLength = identityName.length;\r\n if (nameLength < 8) {\r\n return IdentityNameValidityError.MINIMUM_LENGTH;\r\n }\r\n if (nameLength > 37) {\r\n return IdentityNameValidityError.MAXIMUM_LENGTH;\r\n }\r\n if (!containsLegalCharacters(identityName)) {\r\n return IdentityNameValidityError.ILLEGAL_CHARACTER;\r\n }\r\n return null;\r\n};\r\nexport const validateSubdomainAvailability = async (name, subdomain = Subdomains.BLOCKSTACK) => {\r\n const url = `${registrars[subdomain].apiUrl}/${name.toLowerCase()}.${subdomain}`;\r\n const resp = await fetch(url);\r\n const data = await resp.json();\r\n return data;\r\n};\r\n/**\r\n * Restore identities by recursively making a new identity, and checking if it has a username.\r\n *\r\n * As soon as a username is not found for an identity, the recursion stops.\r\n */\r\nexport const recursiveRestoreIdentities = async ({ rootNode, index = 1, identities = [], }) => {\r\n const identity = await makeIdentity(rootNode, index);\r\n await identity.refresh();\r\n if (identity.defaultUsername) {\r\n identities.push(identity);\r\n return recursiveRestoreIdentities({ rootNode, index: index + 1, identities });\r\n }\r\n return identities;\r\n};\r\n/**\r\n * Validate the format and availability of a subdomain. Will return an error of enum\r\n * IdentityNameValidityError if an error is present. If no errors are found, will return null.\r\n * @param name the subdomain to be registered\r\n * @param subdomain a valid Subdomains enum\r\n */\r\nexport const validateSubdomain = async (name, subdomain = Subdomains.BLOCKSTACK) => {\r\n const error = validateSubdomainFormat(name);\r\n if (error) {\r\n return error;\r\n }\r\n try {\r\n const data = await validateSubdomainAvailability(name, subdomain);\r\n if (data.status !== 'available') {\r\n return IdentityNameValidityError.UNAVAILABLE;\r\n }\r\n }\r\n catch (error) {\r\n return IdentityNameValidityError.UNAVAILABLE;\r\n }\r\n return null;\r\n};\r\nexport const getProfileURLFromZoneFile = async (name) => {\r\n const url = `https://core.blockstack.org/v1/names/${name}`;\r\n const res = await fetch(url);\r\n if (res.ok) {\r\n const nameInfo = await res.json();\r\n const zone = parseZoneFile(nameInfo.zonefile);\r\n return zone.uri[0].target;\r\n }\r\n return;\r\n};\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/nodes/identity-address-owner-node.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/sha2Hash.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/zone-file/lib/index.js","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/assert/assert.js","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/index.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/utils/index.d.ts","writeByteOrderMark":false,"text":"import { BIP32Interface } from 'bitcoinjs-lib';\r\nimport IdentityAddressOwnerNode from '../nodes/identity-address-owner-node';\r\nimport Identity from '../identity';\r\nimport { Subdomains } from '../profiles';\r\nexport declare function getIdentityPrivateKeychain(rootNode: BIP32Interface): BIP32Interface;\r\nexport declare function getBitcoinPrivateKeychain(rootNode: BIP32Interface): BIP32Interface;\r\nexport declare function getBitcoinAddressNode(bitcoinKeychain: BIP32Interface, addressIndex?: number, chainType?: string): BIP32Interface;\r\nexport declare function getIdentityOwnerAddressNode(identityPrivateKeychain: BIP32Interface, identityIndex?: number): Promise;\r\nexport declare function getAddress(node: BIP32Interface): string;\r\nexport interface IdentityKeyPair {\r\n key: string;\r\n keyID: string;\r\n address: string;\r\n appsNodeKey: string;\r\n stxNodeKey: string;\r\n salt: string;\r\n}\r\nexport declare function deriveIdentityKeyPair(identityOwnerAddressNode: IdentityAddressOwnerNode): IdentityKeyPair;\r\nexport declare function getBlockchainIdentities(rootNode: BIP32Interface, identitiesToGenerate: number): Promise<{\r\n identityPublicKeychain: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityAddresses: string[];\r\n identityKeypairs: IdentityKeyPair[];\r\n identities: Identity[];\r\n}>;\r\nexport declare const makeIdentity: (rootNode: BIP32Interface, index: number) => Promise;\r\nexport declare function assertIsTruthy(val: any): asserts val is NonNullable;\r\nexport declare enum IdentityNameValidityError {\r\n MINIMUM_LENGTH = \"error_minimum_length\",\r\n MAXIMUM_LENGTH = \"error_maximum_length\",\r\n ILLEGAL_CHARACTER = \"error_illegal_character\",\r\n UNAVAILABLE = \"error_name_unavailable\"\r\n}\r\nexport declare const validateSubdomainFormat: (identityName: string) => IdentityNameValidityError | null;\r\nexport declare const validateSubdomainAvailability: (name: string, subdomain?: Subdomains) => Promise;\r\ninterface RecursiveMakeIdentitiesOptions {\r\n rootNode: BIP32Interface;\r\n index?: number;\r\n identities?: Identity[];\r\n}\r\n/**\r\n * Restore identities by recursively making a new identity, and checking if it has a username.\r\n *\r\n * As soon as a username is not found for an identity, the recursion stops.\r\n */\r\nexport declare const recursiveRestoreIdentities: ({ rootNode, index, identities, }: RecursiveMakeIdentitiesOptions) => Promise;\r\n/**\r\n * Validate the format and availability of a subdomain. Will return an error of enum\r\n * IdentityNameValidityError if an error is present. If no errors are found, will return null.\r\n * @param name the subdomain to be registered\r\n * @param subdomain a valid Subdomains enum\r\n */\r\nexport declare const validateSubdomain: (name: string, subdomain?: Subdomains) => Promise;\r\nexport declare const getProfileURLFromZoneFile: (name: string) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..aaef254cd --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +{"code":"import { getLegacyAppNode } from 'blockstack/lib/wallet';\r\nimport { publicKeyToAddress } from 'blockstack/lib/keys';\r\nimport { getAddress } from '../utils';\r\nconst APPS_NODE_INDEX = 0;\r\nconst SIGNING_NODE_INDEX = 1;\r\nconst ENCRYPTION_NODE_INDEX = 2;\r\nconst STX_NODE_INDEX = 6;\r\nexport default class IdentityAddressOwnerNode {\r\n constructor(ownerHdNode, salt) {\r\n this.hdNode = ownerHdNode;\r\n this.salt = salt;\r\n }\r\n getNode() {\r\n return this.hdNode;\r\n }\r\n getSalt() {\r\n return this.salt;\r\n }\r\n getIdentityKey() {\r\n if (!this.hdNode.privateKey) {\r\n throw new Error('Node does not have private key');\r\n }\r\n return this.hdNode.privateKey.toString('hex');\r\n }\r\n getIdentityKeyID() {\r\n return this.hdNode.publicKey.toString('hex');\r\n }\r\n getAppsNode() {\r\n return this.hdNode.deriveHardened(APPS_NODE_INDEX);\r\n }\r\n getAddress() {\r\n return getAddress(this.hdNode);\r\n }\r\n getEncryptionNode() {\r\n return this.hdNode.deriveHardened(ENCRYPTION_NODE_INDEX);\r\n }\r\n getSigningNode() {\r\n return this.hdNode.deriveHardened(SIGNING_NODE_INDEX);\r\n }\r\n getSTXNode() {\r\n return this.hdNode.deriveHardened(STX_NODE_INDEX);\r\n }\r\n getAppNode(appDomain) {\r\n return getLegacyAppNode(this.hdNode, this.salt, appDomain);\r\n }\r\n getAppPrivateKey(appDomain) {\r\n const appNode = this.getAppNode(appDomain);\r\n if (!appNode.privateKey) {\r\n throw new Error('App node does not have private key');\r\n }\r\n return appNode.privateKey.toString('hex');\r\n }\r\n getAppAddress(appDomain) {\r\n const appNode = this.getAppNode(appDomain);\r\n return publicKeyToAddress(appNode.publicKey);\r\n }\r\n}\r\n//# sourceMappingURL=identity-address-owner-node.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/wallet.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts"],"map":"{\"version\":3,\"file\":\"identity-address-owner-node.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/nodes/identity-address-owner-node.ts\"],\"names\":[],\"mappings\":\"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAK3C,YAAY,WAA2B,EAAE,IAAY;QACnD,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACnD;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;IAED,UAAU;QACR,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACxD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,gBAAgB,CAAC,SAAiB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACvD;QACD,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;CACF\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/nodes/identity-address-owner-node.d.ts","writeByteOrderMark":false,"text":"import { BIP32Interface } from 'bitcoinjs-lib';\r\nexport default class IdentityAddressOwnerNode {\r\n hdNode: BIP32Interface;\r\n salt: string;\r\n constructor(ownerHdNode: BIP32Interface, salt: string);\r\n getNode(): BIP32Interface;\r\n getSalt(): string;\r\n getIdentityKey(): string;\r\n getIdentityKeyID(): string;\r\n getAppsNode(): BIP32Interface;\r\n getAddress(): string;\r\n getEncryptionNode(): BIP32Interface;\r\n getSigningNode(): BIP32Interface;\r\n getSTXNode(): BIP32Interface;\r\n getAppNode(appDomain: string): BIP32Interface;\r\n getAppPrivateKey(appDomain: string): string;\r\n getAppAddress(appDomain: string): string;\r\n}\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..1104190d1 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +{"code":"import { signProfileToken, wrapProfileToken, connectToGaiaHub, makeProfileZoneFile, } from 'blockstack';\r\nimport { uploadToGaiaHub } from './utils/gaia';\r\nconst PERSON_TYPE = 'Person';\r\nconst CONTEXT = 'http://schema.org';\r\nconst IMAGE_TYPE = 'ImageObject';\r\nexport const DEFAULT_PROFILE = {\r\n '@type': 'Person',\r\n '@context': 'http://schema.org',\r\n};\r\nconst DEFAULT_PROFILE_FILE_NAME = 'profile.json';\r\nexport var Subdomains;\r\n(function (Subdomains) {\r\n Subdomains[\"TEST\"] = \"test-personal.id\";\r\n Subdomains[\"BLOCKSTACK\"] = \"id.blockstack\";\r\n})(Subdomains || (Subdomains = {}));\r\nexport const registrars = {\r\n [Subdomains.TEST]: {\r\n registerUrl: 'https://test-registrar.blockstack.org/register',\r\n apiUrl: 'https://test-registrar.blockstack.org/v1/names',\r\n },\r\n [Subdomains.BLOCKSTACK]: {\r\n registerUrl: 'https://registrar.blockstack.org/register',\r\n apiUrl: 'https://registrar.blockstack.org/v1/names',\r\n },\r\n};\r\nexport function signProfileForUpload(profile, keypair) {\r\n const privateKey = keypair.key;\r\n const publicKey = keypair.keyID;\r\n const token = signProfileToken(profile, privateKey, { publicKey });\r\n const tokenRecord = wrapProfileToken(token);\r\n const tokenRecords = [tokenRecord];\r\n return JSON.stringify(tokenRecords, null, 2);\r\n}\r\nexport async function uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig) {\r\n const identityHubConfig = gaiaHubConfig || (await connectToGaiaHub(gaiaHubUrl, identity.keyPair.key));\r\n const uploadResponse = await uploadToGaiaHub(DEFAULT_PROFILE_FILE_NAME, signedProfileTokenData, identityHubConfig);\r\n return uploadResponse;\r\n}\r\nconst sendUsernameToRegistrar = async ({ username, subdomain, zoneFile, identity, }) => {\r\n const { registerUrl } = registrars[subdomain];\r\n const registrationRequestBody = JSON.stringify({\r\n name: username,\r\n owner_address: identity.address,\r\n zonefile: zoneFile,\r\n });\r\n const requestHeaders = {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n };\r\n const response = await fetch(registerUrl, {\r\n method: 'POST',\r\n headers: requestHeaders,\r\n body: registrationRequestBody,\r\n });\r\n if (!response.ok) {\r\n return Promise.reject({\r\n error: 'Failed to register username',\r\n status: response.status,\r\n });\r\n }\r\n return response.json();\r\n};\r\n/**\r\n * Register a subdomain for a given identity\r\n */\r\nexport const registerSubdomain = async ({ identity, gaiaHubUrl, username, subdomain, }) => {\r\n const profile = identity.profile || DEFAULT_PROFILE;\r\n const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair);\r\n const profileUrl = await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData);\r\n const fullUsername = `${username}.${subdomain}`;\r\n const zoneFile = makeProfileZoneFile(fullUsername, profileUrl);\r\n await sendUsernameToRegistrar({\r\n username,\r\n subdomain,\r\n zoneFile,\r\n identity,\r\n });\r\n identity.defaultUsername = fullUsername;\r\n identity.usernames.push(fullUsername);\r\n return identity;\r\n};\r\nexport const signAndUploadProfile = async ({ profile, gaiaHubUrl, identity, gaiaHubConfig, }) => {\r\n const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair);\r\n await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig);\r\n};\r\nexport const fetchProfile = async ({ identity, gaiaUrl, }) => {\r\n try {\r\n const url = await identity.profileUrl(gaiaUrl);\r\n const res = await fetch(url);\r\n if (res.ok) {\r\n const json = await res.json();\r\n const { decodedToken } = json[0];\r\n return decodedToken.payload?.claim;\r\n }\r\n if (res.status === 404) {\r\n return null;\r\n }\r\n throw new Error('Network error when fetching profile');\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n};\r\n//# sourceMappingURL=profiles.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts"],"map":"{\"version\":3,\"file\":\"profiles.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/profiles.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/profiles.d.ts","writeByteOrderMark":false,"text":"import { IdentityKeyPair } from './utils';\r\nimport Identity from './identity';\r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\ndeclare const PERSON_TYPE = \"Person\";\r\ndeclare const CONTEXT = \"http://schema.org\";\r\ndeclare const IMAGE_TYPE = \"ImageObject\";\r\nexport interface ProfileImage {\r\n '@type': typeof IMAGE_TYPE;\r\n name: string;\r\n contentUrl: string;\r\n}\r\nexport interface Profile {\r\n '@type': typeof PERSON_TYPE;\r\n '@context': typeof CONTEXT;\r\n apps?: {\r\n [origin: string]: string;\r\n };\r\n appsMeta?: {\r\n [origin: string]: {\r\n publicKey: string;\r\n storage: string;\r\n };\r\n };\r\n name?: string;\r\n image?: ProfileImage[];\r\n [key: string]: any;\r\n}\r\nexport declare const DEFAULT_PROFILE: Profile;\r\nexport declare enum Subdomains {\r\n TEST = \"test-personal.id\",\r\n BLOCKSTACK = \"id.blockstack\"\r\n}\r\nexport declare const registrars: {\r\n \"test-personal.id\": {\r\n registerUrl: string;\r\n apiUrl: string;\r\n };\r\n \"id.blockstack\": {\r\n registerUrl: string;\r\n apiUrl: string;\r\n };\r\n};\r\nexport declare function signProfileForUpload(profile: Profile, keypair: IdentityKeyPair): string;\r\nexport declare function uploadProfile(gaiaHubUrl: string, identity: Identity, signedProfileTokenData: string, gaiaHubConfig?: GaiaHubConfig): Promise;\r\ninterface RegisterParams {\r\n identity: Identity;\r\n /** The gaia hub URL to use for profile.json upload */\r\n gaiaHubUrl: string;\r\n /** The username portion of this subdomain, i.e. only the portion of the name before any periods */\r\n username: string;\r\n /** The \"domain\" used for this subdomain. Can be any of the `Subdomains` enum. */\r\n subdomain: Subdomains;\r\n}\r\n/**\r\n * Register a subdomain for a given identity\r\n */\r\nexport declare const registerSubdomain: ({ identity, gaiaHubUrl, username, subdomain, }: RegisterParams) => Promise;\r\nexport declare const signAndUploadProfile: ({ profile, gaiaHubUrl, identity, gaiaHubConfig, }: {\r\n profile: Profile;\r\n gaiaHubUrl: string;\r\n identity: Identity;\r\n gaiaHubConfig?: GaiaHubConfig | undefined;\r\n}) => Promise;\r\nexport declare const fetchProfile: ({ identity, gaiaUrl, }: {\r\n identity: Identity;\r\n gaiaUrl: string;\r\n}) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..7edbdd5e7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +{"code":"import { bip32, ECPair } from 'bitcoinjs-lib';\r\nimport { getPublicKeyFromPrivate } from 'blockstack/lib/keys';\r\nimport { makeAuthResponse } from 'blockstack/lib/auth/authMessages';\r\nimport { getProfileURLFromZoneFile } from './utils';\r\nimport { makeGaiaAssociationToken, DEFAULT_GAIA_HUB, getHubInfo, connectToGaiaHubWithConfig, } from './utils/gaia';\r\nimport IdentityAddressOwnerNode from './nodes/identity-address-owner-node';\r\nimport { fetchProfile, DEFAULT_PROFILE, signAndUploadProfile } from './profiles';\r\nimport { ecPairToAddress } from 'blockstack';\r\nexport class Identity {\r\n constructor({ keyPair, address, usernames, defaultUsername, profile, }) {\r\n this.keyPair = keyPair;\r\n this.address = address;\r\n this.usernames = usernames || [];\r\n this.defaultUsername = defaultUsername;\r\n this.profile = profile;\r\n }\r\n async makeAuthResponse({ appDomain, gaiaUrl, transitPublicKey, scopes = [], stxAddress, }) {\r\n const appPrivateKey = this.appPrivateKey(appDomain);\r\n const hubInfo = await getHubInfo(gaiaUrl);\r\n const profileUrl = await this.profileUrl(hubInfo.read_url_prefix);\r\n const profile = (await fetchProfile({ identity: this, gaiaUrl: hubInfo.read_url_prefix })) || DEFAULT_PROFILE;\r\n if (scopes.includes('publish_data')) {\r\n if (!profile.apps) {\r\n profile.apps = {};\r\n }\r\n const challengeSigner = ECPair.fromPrivateKey(Buffer.from(appPrivateKey, 'hex'));\r\n const storageUrl = `${hubInfo.read_url_prefix}${ecPairToAddress(challengeSigner)}/`;\r\n profile.apps[appDomain] = storageUrl;\r\n if (!profile.appsMeta) {\r\n profile.appsMeta = {};\r\n }\r\n profile.appsMeta[appDomain] = {\r\n storage: storageUrl,\r\n publicKey: challengeSigner.publicKey.toString('hex'),\r\n };\r\n const gaiaHubConfig = connectToGaiaHubWithConfig({\r\n hubInfo,\r\n privateKey: this.keyPair.key,\r\n gaiaHubUrl: gaiaUrl,\r\n });\r\n await signAndUploadProfile({ profile, identity: this, gaiaHubUrl: gaiaUrl, gaiaHubConfig });\r\n }\r\n this.profile = profile;\r\n const compressedAppPublicKey = getPublicKeyFromPrivate(appPrivateKey.slice(0, 64));\r\n const associationToken = makeGaiaAssociationToken(this.keyPair.key, compressedAppPublicKey);\r\n return makeAuthResponse(this.keyPair.key, {\r\n ...(this.profile || {}),\r\n stxAddress,\r\n }, this.defaultUsername || '', {\r\n profileUrl,\r\n }, undefined, appPrivateKey, undefined, transitPublicKey, gaiaUrl, undefined, associationToken);\r\n }\r\n appPrivateKey(appDomain) {\r\n const { salt, appsNodeKey } = this.keyPair;\r\n const appsNode = new IdentityAddressOwnerNode(bip32.fromBase58(appsNodeKey), salt);\r\n return appsNode.getAppPrivateKey(appDomain);\r\n }\r\n async profileUrl(gaiaUrl) {\r\n if (this.defaultUsername) {\r\n try {\r\n const url = await getProfileURLFromZoneFile(this.defaultUsername);\r\n if (url)\r\n return url;\r\n }\r\n catch (error) {\r\n if (process.env.NODE_ENV !== 'test') {\r\n console.warn('Error fetching profile URL from zone file:', error);\r\n }\r\n }\r\n }\r\n return `${gaiaUrl}${this.address}/profile.json`;\r\n }\r\n async fetchNames() {\r\n const getNamesUrl = `https://core.blockstack.org/v1/addresses/bitcoin/${this.address}`;\r\n const res = await fetch(getNamesUrl);\r\n const data = await res.json();\r\n const { names } = data;\r\n return names;\r\n }\r\n /**\r\n * Fetch existing information related to this identity, like username and profile information\r\n */\r\n async refresh(opts = { gaiaUrl: DEFAULT_GAIA_HUB }) {\r\n try {\r\n const names = await this.fetchNames();\r\n if (names) {\r\n if (names[0] && !this.defaultUsername) {\r\n this.defaultUsername = names[0];\r\n }\r\n names.forEach(name => {\r\n const existingIndex = this.usernames.findIndex(u => u === name);\r\n if (existingIndex === -1) {\r\n this.usernames.push(name);\r\n }\r\n });\r\n }\r\n const profile = await fetchProfile({ identity: this, gaiaUrl: opts.gaiaUrl });\r\n if (profile) {\r\n this.profile = profile;\r\n }\r\n return;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n }\r\n}\r\nexport default Identity;\r\n//# sourceMappingURL=identity.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/auth/authMessages.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/nodes/identity-address-owner-node.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"identity.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/identity.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/identity.d.ts","writeByteOrderMark":false,"text":"import { IdentityKeyPair } from './utils/index';\r\nimport { Profile } from './profiles';\r\ninterface IdentityConstructorOptions {\r\n keyPair: IdentityKeyPair;\r\n address: string;\r\n usernames?: string[];\r\n defaultUsername?: string;\r\n profile?: Profile;\r\n}\r\ninterface RefreshOptions {\r\n gaiaUrl: string;\r\n}\r\nexport declare class Identity {\r\n keyPair: IdentityKeyPair;\r\n address: string;\r\n defaultUsername?: string;\r\n usernames: string[];\r\n profile?: Profile;\r\n constructor({ keyPair, address, usernames, defaultUsername, profile, }: IdentityConstructorOptions);\r\n makeAuthResponse({ appDomain, gaiaUrl, transitPublicKey, scopes, stxAddress, }: {\r\n appDomain: string;\r\n gaiaUrl: string;\r\n transitPublicKey: string;\r\n scopes?: string[];\r\n stxAddress?: string;\r\n }): Promise;\r\n appPrivateKey(appDomain: string): string;\r\n profileUrl(gaiaUrl: string): Promise;\r\n fetchNames(): Promise;\r\n /**\r\n * Fetch existing information related to this identity, like username and profile information\r\n */\r\n refresh(opts?: RefreshOptions): Promise;\r\n}\r\nexport default Identity;\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..d1e50fabe --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +{"code":"import { makeContractCall, makeContractDeploy, StacksTestnet, makeSTXTokenTransfer, getAddressFromPrivateKey, } from '@blockstack/stacks-transactions';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { assertIsTruthy } from '../utils';\r\nimport BN from 'bn.js';\r\nexport class WalletSigner {\r\n constructor({ privateKey }) {\r\n this.privateKey = privateKey;\r\n }\r\n getSTXAddress(version) {\r\n return getAddressFromPrivateKey(this.getSTXPrivateKey(), version);\r\n }\r\n getSTXPrivateKey() {\r\n const node = bip32.fromBase58(this.privateKey);\r\n assertIsTruthy(node.privateKey);\r\n return node.privateKey;\r\n }\r\n getNetwork() {\r\n const network = new StacksTestnet();\r\n network.coreApiUrl = 'https://sidecar.staging.blockstack.xyz';\r\n return network;\r\n }\r\n async fetchAccount({ version, rpcClient, }) {\r\n const address = this.getSTXAddress(version);\r\n const account = await rpcClient.fetchAccount(address);\r\n return account;\r\n }\r\n async signContractCall({ contractName, contractAddress, functionName, functionArgs, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeContractCall({\r\n contractAddress,\r\n contractName,\r\n functionName,\r\n functionArgs,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n nonce: new BN(nonce),\r\n network: this.getNetwork(),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n async signContractDeploy({ contractName, codeBody, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeContractDeploy({\r\n contractName,\r\n codeBody: codeBody,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n network: this.getNetwork(),\r\n nonce: new BN(nonce),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n async signSTXTransfer({ recipient, amount, memo, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeSTXTokenTransfer({\r\n recipient,\r\n amount: new BN(amount),\r\n memo,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n network: this.getNetwork(),\r\n nonce: new BN(nonce),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n}\r\n//# sourceMappingURL=signer.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/rpc-client/dist/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@types/bn.js/index.d.ts"],"map":"{\"version\":3,\"file\":\"signer.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/wallet/signer.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/wallet/signer.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { TransactionVersion, ClarityValue, StacksTestnet, PostConditionMode, PostCondition, StacksNetwork } from '@blockstack/stacks-transactions';\r\nimport RPCClient from '@blockstack/rpc-client';\r\ninterface ContractCallOptions {\r\n contractName: string;\r\n contractAddress: string;\r\n functionName: string;\r\n functionArgs: ClarityValue[];\r\n version: TransactionVersion;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\ninterface ContractDeployOptions {\r\n contractName: string;\r\n codeBody: string;\r\n version: TransactionVersion;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\ninterface STXTransferOptions {\r\n recipient: string;\r\n amount: string;\r\n memo?: string;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\nexport declare class WalletSigner {\r\n privateKey: string;\r\n constructor({ privateKey }: {\r\n privateKey: string;\r\n });\r\n getSTXAddress(version: TransactionVersion): string;\r\n getSTXPrivateKey(): Buffer;\r\n getNetwork(): StacksTestnet;\r\n fetchAccount({ version, rpcClient, }: {\r\n version: TransactionVersion;\r\n rpcClient: RPCClient;\r\n }): Promise;\r\n signContractCall({ contractName, contractAddress, functionName, functionArgs, nonce, postConditionMode, postConditions, }: ContractCallOptions): Promise;\r\n signContractDeploy({ contractName, codeBody, nonce, postConditionMode, postConditions, }: ContractDeployOptions): Promise;\r\n signSTXTransfer({ recipient, amount, memo, nonce, postConditionMode, postConditions, }: STXTransferOptions): Promise;\r\n}\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..796e4be36 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +{"code":"import { TokenSigner } from 'jsontokens';\r\nimport { getPublicKeyFromPrivate } from 'blockstack/lib/keys';\r\nimport { randomBytes } from 'blockstack/lib/encryption/cryptoRandom';\r\nimport { ecPairToAddress, hexStringToECPair } from 'blockstack';\r\nexport const DEFAULT_GAIA_HUB = 'https://gaia.blockstack.org/hub/';\r\nexport const getHubInfo = async (hubUrl) => {\r\n const response = await fetch(`${hubUrl}/hub_info`);\r\n const data = await response.json();\r\n return data;\r\n};\r\nexport const getHubPrefix = async (hubUrl) => {\r\n const { read_url_prefix } = await getHubInfo(hubUrl);\r\n return read_url_prefix;\r\n};\r\nexport const makeGaiaAssociationToken = (secretKeyHex, childPublicKeyHex) => {\r\n const LIFETIME_SECONDS = 365 * 24 * 3600;\r\n const signerKeyHex = secretKeyHex.slice(0, 64);\r\n const compressedPublicKeyHex = getPublicKeyFromPrivate(signerKeyHex);\r\n const salt = randomBytes(16).toString('hex');\r\n const payload = {\r\n childToAssociate: childPublicKeyHex,\r\n iss: compressedPublicKeyHex,\r\n exp: LIFETIME_SECONDS + new Date().getTime() / 1000,\r\n iat: Date.now() / 1000,\r\n salt,\r\n };\r\n const tokenSigner = new TokenSigner('ES256K', signerKeyHex);\r\n const token = tokenSigner.sign(payload);\r\n return token;\r\n};\r\nexport const connectToGaiaHubWithConfig = ({ hubInfo, privateKey, gaiaHubUrl, }) => {\r\n const readURL = hubInfo.read_url_prefix;\r\n const token = makeGaiaAuthToken({ hubInfo, privateKey, gaiaHubUrl });\r\n const address = ecPairToAddress(hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')));\r\n return {\r\n url_prefix: readURL,\r\n max_file_upload_size_megabytes: 100,\r\n address,\r\n token,\r\n server: gaiaHubUrl,\r\n };\r\n};\r\n/**\r\n * When you already know the Gaia read URL, make a Gaia config that doesn't have to fetch `/hub_info`\r\n */\r\nexport const makeReadOnlyGaiaConfig = ({ readURL, privateKey, }) => {\r\n const address = ecPairToAddress(hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')));\r\n return {\r\n url_prefix: readURL,\r\n max_file_upload_size_megabytes: 100,\r\n address,\r\n token: 'not_used',\r\n server: 'not_used',\r\n };\r\n};\r\nconst makeGaiaAuthToken = ({ hubInfo, privateKey, gaiaHubUrl }) => {\r\n const challengeText = hubInfo.challenge_text;\r\n const iss = getPublicKeyFromPrivate(privateKey);\r\n const salt = randomBytes(16).toString('hex');\r\n const payload = {\r\n gaiaHubUrl,\r\n iss,\r\n salt,\r\n };\r\n if (challengeText) {\r\n payload.gaiaChallenge = challengeText;\r\n }\r\n const token = new TokenSigner('ES256K', privateKey).sign(payload);\r\n return `v1:${token}`;\r\n};\r\nexport const uploadToGaiaHub = async (filename, contents, hubConfig) => {\r\n const contentType = 'application/json';\r\n const response = await fetch(`${hubConfig.server}/store/${hubConfig.address}/${filename}`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': contentType,\r\n Authorization: `bearer ${hubConfig.token}`,\r\n },\r\n body: contents,\r\n referrer: 'no-referrer',\r\n referrerPolicy: 'no-referrer',\r\n });\r\n const { publicURL } = await response.json();\r\n return publicURL;\r\n};\r\n//# sourceMappingURL=gaia.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/jsontokens/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/cryptoRandom.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts"],"map":"{\"version\":3,\"file\":\"gaia.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/gaia.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/utils/gaia.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\nexport declare const DEFAULT_GAIA_HUB = \"https://gaia.blockstack.org/hub/\";\r\ninterface HubInfo {\r\n challenge_text?: string;\r\n read_url_prefix: string;\r\n}\r\nexport declare const getHubInfo: (hubUrl: string) => Promise;\r\nexport declare const getHubPrefix: (hubUrl: string) => Promise;\r\nexport declare const makeGaiaAssociationToken: (secretKeyHex: string, childPublicKeyHex: string) => string;\r\ninterface ConnectToGaiaOptions {\r\n hubInfo: HubInfo;\r\n privateKey: string;\r\n gaiaHubUrl: string;\r\n}\r\nexport declare const connectToGaiaHubWithConfig: ({ hubInfo, privateKey, gaiaHubUrl, }: ConnectToGaiaOptions) => GaiaHubConfig;\r\ninterface ReadOnlyGaiaConfigOptions {\r\n readURL: string;\r\n privateKey: string;\r\n}\r\n/**\r\n * When you already know the Gaia read URL, make a Gaia config that doesn't have to fetch `/hub_info`\r\n */\r\nexport declare const makeReadOnlyGaiaConfig: ({ readURL, privateKey, }: ReadOnlyGaiaConfigOptions) => GaiaHubConfig;\r\nexport declare const uploadToGaiaHub: (filename: string, contents: Blob | Buffer | ArrayBufferView | string, hubConfig: GaiaHubConfig) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/018dd99255a534837916033f04b396b3c5b771ad b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/018dd99255a534837916033f04b396b3c5b771ad new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/061a2a662a532413fb382823dd2453c8537b4338 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/061a2a662a532413fb382823dd2453c8537b4338 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/314c9c585547e1ee805fe1597f307af31b72559c b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/314c9c585547e1ee805fe1597f307af31b72559c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/420b2f97ccbc239de9691385af956534d4545c2c b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/420b2f97ccbc239de9691385af956534d4545c2c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/9ed2612615091d088e52b934dbdc159280dc237c b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/9ed2612615091d088e52b934dbdc159280dc237c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/fae54f93545510c8db4ed307ea8397a19112446a b/packages/keychain/.rts2_cache_cjs/rpt2_a33312e0d9f810593399d07ffcd902d8d8963f87/types/cache/fae54f93545510c8db4ed307ea8397a19112446a new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..53380f7c1 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +{"code":"import { ChainID, getAddressFromPrivateKey, TransactionVersion, } from '@blockstack/stacks-transactions';\r\nimport { ECPair } from 'bitcoinjs-lib';\r\nimport { ecPairToHexString } from 'blockstack';\r\nconst networkDerivationPath = `m/44'/5757'/0'/0/0`;\r\nexport const derivationPaths = {\r\n [ChainID.Mainnet]: networkDerivationPath,\r\n [ChainID.Testnet]: networkDerivationPath,\r\n};\r\nexport function getDerivationPath(chain) {\r\n return derivationPaths[chain];\r\n}\r\nexport function deriveStxAddressChain(chain) {\r\n return (rootNode) => {\r\n const childKey = rootNode.derivePath(getDerivationPath(chain));\r\n if (!childKey.privateKey) {\r\n throw new Error('Unable to derive private key from `rootNode`, bip32 master keychain');\r\n }\r\n const ecPair = ECPair.fromPrivateKey(childKey.privateKey);\r\n const privateKey = ecPairToHexString(ecPair);\r\n const txVersion = chain === ChainID.Mainnet ? TransactionVersion.Mainnet : TransactionVersion.Testnet;\r\n return {\r\n childKey,\r\n address: getAddressFromPrivateKey(privateKey, txVersion),\r\n privateKey,\r\n };\r\n };\r\n}\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/address-derivation/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EACL,OAAO,EACP,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAkB,MAAM,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB;IACxC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB;CACzC,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CAAC,QAAwB,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;SACxF;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,SAAS,GACb,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC;QACtF,OAAO;YACL,QAAQ;YACR,OAAO,EAAE,wBAAwB,CAAC,UAAU,EAAE,SAAS,CAAC;YACxD,UAAU;SACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/address-derivation/index.d.ts","writeByteOrderMark":false,"text":"import { ChainID } from '@blockstack/stacks-transactions';\r\nimport { BIP32Interface } from 'bitcoinjs-lib';\r\nexport declare const derivationPaths: {\r\n 1: string;\r\n 2147483648: string;\r\n};\r\nexport declare function getDerivationPath(chain: ChainID): string;\r\nexport declare function deriveStxAddressChain(chain: ChainID): (rootNode: BIP32Interface) => {\r\n childKey: BIP32Interface;\r\n address: string;\r\n privateKey: string;\r\n};\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..0c4968ffd --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +{"code":"import { generateMnemonic as generateBip39Mnemonic, mnemonicToSeed } from 'bip39';\r\nimport { randomBytes } from 'blockstack/lib/encryption/cryptoRandom';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { encrypt } from '../encryption/encrypt';\r\nimport { encryptMnemonic } from 'blockstack';\r\nexport async function generateMnemonicRootKeychain(entropy) {\r\n const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes);\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n return {\r\n rootNode,\r\n plaintextMnemonic,\r\n };\r\n}\r\nexport async function generateEncryptedMnemonicRootKeychain(password, entropy) {\r\n const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes);\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n const ciphertextBuffer = await encrypt(plaintextMnemonic, password);\r\n const encryptedMnemonicPhrase = ciphertextBuffer.toString('hex');\r\n return {\r\n rootNode,\r\n encryptedMnemonicPhrase,\r\n };\r\n}\r\nexport async function deriveRootKeychainFromMnemonic(plaintextMnemonic) {\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n return rootNode;\r\n}\r\nexport async function encryptMnemonicFormatted(plaintextMnemonic, password) {\r\n const encryptedMnemonic = await encryptMnemonic(plaintextMnemonic, password);\r\n const encryptedMnemonicHex = encryptedMnemonic.toString('hex');\r\n return { encryptedMnemonic, encryptedMnemonicHex };\r\n}\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/bip39/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/cryptoRandom.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/encrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/mnemonic/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,gBAAgB,IAAI,qBAAqB,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAA8B;IAC/E,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO;QACL,QAAQ;QACR,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,QAAgB,EAChB,OAA8B;IAE9B,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACpE,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO;QACL,QAAQ;QACR,uBAAuB;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,iBAAyB;IAC5E,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,iBAAyB,EAAE,QAAgB;IACxF,MAAM,iBAAiB,GAAG,MAAM,eAAe,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC7E,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;AACrD,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/mnemonic/index.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { bip32 } from 'bitcoinjs-lib';\r\nexport declare type AllowedKeyEntropyBits = 128 | 256;\r\nexport declare function generateMnemonicRootKeychain(entropy: AllowedKeyEntropyBits): Promise<{\r\n rootNode: bip32.BIP32Interface;\r\n plaintextMnemonic: string;\r\n}>;\r\nexport declare function generateEncryptedMnemonicRootKeychain(password: string, entropy: AllowedKeyEntropyBits): Promise<{\r\n rootNode: bip32.BIP32Interface;\r\n encryptedMnemonicPhrase: string;\r\n}>;\r\nexport declare function deriveRootKeychainFromMnemonic(plaintextMnemonic: string): Promise;\r\nexport declare function encryptMnemonicFormatted(plaintextMnemonic: string, password: string): Promise<{\r\n encryptedMnemonic: Buffer;\r\n encryptedMnemonicHex: string;\r\n}>;\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..e617263c8 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +{"code":"import { encryptMnemonic } from 'blockstack/lib/encryption/wallet';\r\n/**\r\n * Encrypt a raw mnemonic phrase to be password protected\r\n * @param phrase - Raw mnemonic phrase\r\n * @param password - Password to encrypt mnemonic with\r\n * @return The encrypted phrase\r\n * */\r\nexport async function encrypt(phrase, password) {\r\n const result = await encryptMnemonic(phrase, password);\r\n return result;\r\n}\r\n//# sourceMappingURL=encrypt.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/wallet.d.ts"],"map":"{\"version\":3,\"file\":\"encrypt.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/encryption/encrypt.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;;;;KAKK;AACL,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,QAAgB;IAC5D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC;AAChB,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/encryption/encrypt.d.ts","writeByteOrderMark":false,"text":"/// \r\n/**\r\n * Encrypt a raw mnemonic phrase to be password protected\r\n * @param phrase - Raw mnemonic phrase\r\n * @param password - Password to encrypt mnemonic with\r\n * @return The encrypted phrase\r\n * */\r\nexport declare function encrypt(phrase: string, password: string): Promise;\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..93330eccf --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +{"code":"import Wallet from './wallet';\r\nexport * from './utils';\r\nexport * from './mnemonic';\r\nexport * from './address-derivation';\r\nexport { default as Wallet } from './wallet';\r\nexport * from './wallet';\r\nexport * from './wallet/signer';\r\nexport { decrypt } from './encryption/decrypt';\r\nexport { encrypt } from './encryption/encrypt';\r\nexport * from './profiles';\r\nexport * from './identity';\r\nexport default {\r\n Wallet,\r\n};\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/mnemonic/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/address-derivation/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/signer.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/decrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/encrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAE3B,eAAe;IACb,MAAM;CACP,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/index.d.ts","writeByteOrderMark":false,"text":"import Wallet from './wallet';\r\nexport * from './utils';\r\nexport * from './mnemonic';\r\nexport * from './address-derivation';\r\nexport { default as Wallet } from './wallet';\r\nexport * from './wallet';\r\nexport * from './wallet/signer';\r\nexport { decrypt } from './encryption/decrypt';\r\nexport { encrypt } from './encryption/encrypt';\r\nexport * from './profiles';\r\nexport * from './identity';\r\ndeclare const _default: {\r\n Wallet: typeof Wallet;\r\n};\r\nexport default _default;\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..673790086 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +{"code":"import { mnemonicToSeed } from 'bip39';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { getBlockchainIdentities, makeIdentity, assertIsTruthy, recursiveRestoreIdentities, } from '../utils';\r\nimport Identity from '../identity';\r\nimport { decrypt } from '../encryption/decrypt';\r\nimport { connectToGaiaHub, encryptContent, getPublicKeyFromPrivate, decryptContent, } from 'blockstack';\r\nimport { generateEncryptedMnemonicRootKeychain, deriveRootKeychainFromMnemonic, encryptMnemonicFormatted, } from '../mnemonic';\r\nimport { deriveStxAddressChain } from '../address-derivation';\r\nimport { makeReadOnlyGaiaConfig, DEFAULT_GAIA_HUB, uploadToGaiaHub } from '../utils/gaia';\r\nimport { WalletSigner } from './signer';\r\nconst CONFIG_INDEX = 45;\r\nexport class Wallet {\r\n constructor({ chain, encryptedBackupPhrase, identityPublicKeychain, bitcoinPublicKeychain, firstBitcoinAddress, identityKeypairs, identityAddresses, identities, configPrivateKey, stacksPrivateKey, walletConfig, }) {\r\n this.chain = chain;\r\n this.encryptedBackupPhrase = encryptedBackupPhrase;\r\n this.identityPublicKeychain = identityPublicKeychain;\r\n this.bitcoinPublicKeychain = bitcoinPublicKeychain;\r\n this.firstBitcoinAddress = firstBitcoinAddress;\r\n this.identityKeypairs = identityKeypairs;\r\n this.identityAddresses = identityAddresses;\r\n this.identities = identities.map(identity => new Identity(identity));\r\n this.configPrivateKey = configPrivateKey;\r\n this.stacksPrivateKey = stacksPrivateKey;\r\n this.walletConfig = walletConfig;\r\n }\r\n static generateFactory(bitsEntropy) {\r\n return async (password, chain) => {\r\n const { rootNode, encryptedMnemonicPhrase } = await generateEncryptedMnemonicRootKeychain(password, bitsEntropy);\r\n return this.createAccount({\r\n encryptedBackupPhrase: encryptedMnemonicPhrase,\r\n rootNode,\r\n chain,\r\n });\r\n };\r\n }\r\n static async generate(password, chain) {\r\n return await this.generateFactory(128)(password, chain);\r\n }\r\n static async generateStrong(password, chain) {\r\n return await this.generateFactory(256)(password, chain);\r\n }\r\n static async restore(password, seedPhrase, chain) {\r\n const rootNode = await deriveRootKeychainFromMnemonic(seedPhrase);\r\n const { encryptedMnemonicHex } = await encryptMnemonicFormatted(seedPhrase, password);\r\n const wallet = await Wallet.createAccount({\r\n encryptedBackupPhrase: encryptedMnemonicHex,\r\n rootNode,\r\n chain,\r\n });\r\n return await wallet.restoreIdentities({ rootNode, gaiaReadURL: DEFAULT_GAIA_HUB });\r\n }\r\n static async createAccount({ encryptedBackupPhrase, rootNode, chain, identitiesToGenerate = 1, }) {\r\n const derivedIdentitiesKey = rootNode.deriveHardened(CONFIG_INDEX).privateKey;\r\n if (!derivedIdentitiesKey) {\r\n throw new TypeError('Unable to derive config key for wallet identities');\r\n }\r\n const configPrivateKey = derivedIdentitiesKey.toString('hex');\r\n const { childKey: stxAddressKeychain } = deriveStxAddressChain(chain)(rootNode);\r\n const walletAttrs = await getBlockchainIdentities(rootNode, identitiesToGenerate);\r\n return new Wallet({\r\n ...walletAttrs,\r\n chain,\r\n configPrivateKey,\r\n stacksPrivateKey: stxAddressKeychain.toBase58(),\r\n encryptedBackupPhrase,\r\n });\r\n }\r\n /**\r\n * Restore all previously used identities. This is meant to be used when 'restoring' a wallet.\r\n * First, it will check for a `walletConfig`. If present, then we use that to determine how\r\n * many identities to generate, and auto-populate their username.\r\n *\r\n * If `walletConfig` is empty, then this is being restored from an authenticator that doesn't\r\n * support `walletConfig`. In that case, we will recursively generate identities, and check for\r\n * on-chain names.\r\n *\r\n */\r\n async restoreIdentities({ rootNode, gaiaReadURL, }) {\r\n const gaiaConfig = makeReadOnlyGaiaConfig({\r\n readURL: gaiaReadURL,\r\n privateKey: this.configPrivateKey,\r\n });\r\n await this.fetchConfig(gaiaConfig);\r\n if (this.walletConfig) {\r\n const getIdentities = this.walletConfig.identities.map(async (identityConfig, index) => {\r\n let identity = this.identities[index];\r\n if (!identity) {\r\n identity = await makeIdentity(rootNode, index);\r\n }\r\n if (identityConfig.username) {\r\n identity.usernames = [identityConfig.username];\r\n identity.defaultUsername = identityConfig.username;\r\n }\r\n return identity;\r\n });\r\n const identities = await Promise.all(getIdentities);\r\n this.identities = identities;\r\n return this;\r\n }\r\n await this.identities[0].refresh();\r\n const newIdentities = await recursiveRestoreIdentities({ rootNode });\r\n this.identities = this.identities.concat(newIdentities);\r\n return this;\r\n }\r\n async createNewIdentity(password) {\r\n const plainTextBuffer = await decrypt(Buffer.from(this.encryptedBackupPhrase, 'hex'), password);\r\n const seed = await mnemonicToSeed(plainTextBuffer);\r\n const rootNode = bip32.fromSeed(seed);\r\n const index = this.identities.length;\r\n const identity = await makeIdentity(rootNode, index);\r\n this.identities.push(identity);\r\n this.identityKeypairs.push(identity.keyPair);\r\n this.identityAddresses.push(identity.address);\r\n return identity;\r\n }\r\n async createGaiaConfig(gaiaHubUrl) {\r\n return connectToGaiaHub(gaiaHubUrl, this.configPrivateKey);\r\n }\r\n async fetchConfig(gaiaConfig) {\r\n try {\r\n const response = await fetch(`${gaiaConfig.url_prefix}${gaiaConfig.address}/wallet-config.json`);\r\n const encrypted = await response.text();\r\n const configJSON = (await decryptContent(encrypted, {\r\n privateKey: this.configPrivateKey,\r\n }));\r\n const config = JSON.parse(configJSON);\r\n this.walletConfig = config;\r\n return config;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n }\r\n async getOrCreateConfig({ gaiaConfig, skipUpload, }) {\r\n if (this.walletConfig) {\r\n return this.walletConfig;\r\n }\r\n const config = await this.fetchConfig(gaiaConfig);\r\n if (config) {\r\n return config;\r\n }\r\n const newConfig = {\r\n identities: this.identities.map(i => ({\r\n username: i.defaultUsername,\r\n address: i.address,\r\n apps: {},\r\n })),\r\n };\r\n this.walletConfig = newConfig;\r\n if (!skipUpload) {\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n return newConfig;\r\n }\r\n async updateConfig(gaiaConfig) {\r\n const publicKey = getPublicKeyFromPrivate(this.configPrivateKey);\r\n const encrypted = await encryptContent(JSON.stringify(this.walletConfig), { publicKey });\r\n await uploadToGaiaHub('wallet-config.json', encrypted, gaiaConfig);\r\n }\r\n async updateConfigWithAuth({ identityIndex, app, gaiaConfig, }) {\r\n const { walletConfig } = this;\r\n assertIsTruthy(walletConfig);\r\n this.identities.forEach((identity, index) => {\r\n const configIdentity = walletConfig.identities[index];\r\n if (configIdentity) {\r\n configIdentity.apps = configIdentity.apps || {};\r\n configIdentity.username = identity.defaultUsername;\r\n configIdentity.address = identity.address;\r\n walletConfig.identities[index] = configIdentity;\r\n }\r\n else {\r\n this.walletConfig?.identities.push({\r\n username: identity.defaultUsername,\r\n address: identity.address,\r\n apps: {},\r\n });\r\n }\r\n });\r\n const identity = walletConfig.identities[identityIndex];\r\n identity.apps = identity.apps || {};\r\n identity.apps[app.origin] = app;\r\n walletConfig.identities[identityIndex] = identity;\r\n this.walletConfig = walletConfig;\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n async updateConfigForReuseWarning({ gaiaConfig }) {\r\n assertIsTruthy(this.walletConfig);\r\n this.walletConfig.hideWarningForReusingIdentity = true;\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n getSigner() {\r\n return new WalletSigner({ privateKey: this.stacksPrivateKey });\r\n }\r\n}\r\nexport default Wallet;\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/bip39/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/decrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/mnemonic/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/address-derivation/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/signer.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/wallet/index.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/wallet/index.d.ts","writeByteOrderMark":false,"text":"import { bip32, BIP32Interface } from 'bitcoinjs-lib';\r\nimport { ChainID } from '@blockstack/stacks-transactions';\r\nimport { IdentityKeyPair } from '../utils';\r\nimport Identity from '../identity';\r\nimport { AllowedKeyEntropyBits } from '../mnemonic';\r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\nimport { WalletSigner } from './signer';\r\nexport interface ConfigApp {\r\n origin: string;\r\n scopes: string[];\r\n lastLoginAt: number;\r\n appIcon: string;\r\n name: string;\r\n}\r\ninterface ConfigIdentity {\r\n username?: string;\r\n address: string;\r\n apps: {\r\n [origin: string]: ConfigApp;\r\n };\r\n}\r\nexport interface WalletConfig {\r\n identities: ConfigIdentity[];\r\n hideWarningForReusingIdentity?: boolean;\r\n}\r\nexport interface ConstructorOptions {\r\n chain: ChainID;\r\n identityPublicKeychain: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityKeypairs: IdentityKeyPair[];\r\n identityAddresses: string[];\r\n encryptedBackupPhrase: string;\r\n identities: Identity[];\r\n configPrivateKey: string;\r\n stacksPrivateKey: string;\r\n walletConfig?: WalletConfig;\r\n}\r\nexport declare class Wallet {\r\n chain: ChainID;\r\n encryptedBackupPhrase: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityKeypairs: IdentityKeyPair[];\r\n identityAddresses: string[];\r\n identityPublicKeychain: string;\r\n identities: Identity[];\r\n configPrivateKey: string;\r\n stacksPrivateKey: string;\r\n walletConfig?: WalletConfig;\r\n constructor({ chain, encryptedBackupPhrase, identityPublicKeychain, bitcoinPublicKeychain, firstBitcoinAddress, identityKeypairs, identityAddresses, identities, configPrivateKey, stacksPrivateKey, walletConfig, }: ConstructorOptions);\r\n static generateFactory(bitsEntropy: AllowedKeyEntropyBits): (password: string, chain: ChainID) => Promise;\r\n static generate(password: string, chain: ChainID): Promise;\r\n static generateStrong(password: string, chain: ChainID): Promise;\r\n static restore(password: string, seedPhrase: string, chain: ChainID): Promise;\r\n static createAccount({ encryptedBackupPhrase, rootNode, chain, identitiesToGenerate, }: {\r\n encryptedBackupPhrase: string;\r\n rootNode: BIP32Interface;\r\n chain: ChainID;\r\n identitiesToGenerate?: number;\r\n }): Promise;\r\n /**\r\n * Restore all previously used identities. This is meant to be used when 'restoring' a wallet.\r\n * First, it will check for a `walletConfig`. If present, then we use that to determine how\r\n * many identities to generate, and auto-populate their username.\r\n *\r\n * If `walletConfig` is empty, then this is being restored from an authenticator that doesn't\r\n * support `walletConfig`. In that case, we will recursively generate identities, and check for\r\n * on-chain names.\r\n *\r\n */\r\n restoreIdentities({ rootNode, gaiaReadURL, }: {\r\n rootNode: bip32.BIP32Interface;\r\n gaiaReadURL: string;\r\n }): Promise;\r\n createNewIdentity(password: string): Promise;\r\n createGaiaConfig(gaiaHubUrl: string): Promise;\r\n fetchConfig(gaiaConfig: GaiaHubConfig): Promise;\r\n getOrCreateConfig({ gaiaConfig, skipUpload, }: {\r\n gaiaConfig: GaiaHubConfig;\r\n skipUpload?: boolean;\r\n }): Promise;\r\n updateConfig(gaiaConfig: GaiaHubConfig): Promise;\r\n updateConfigWithAuth({ identityIndex, app, gaiaConfig, }: {\r\n identityIndex: number;\r\n app: ConfigApp;\r\n gaiaConfig: GaiaHubConfig;\r\n }): Promise;\r\n updateConfigForReuseWarning({ gaiaConfig }: {\r\n gaiaConfig: GaiaHubConfig;\r\n }): Promise;\r\n getSigner(): WalletSigner;\r\n}\r\nexport default Wallet;\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..a38d6780d --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +{"code":"import { decrypt as triplesecDecrypt } from 'triplesec';\r\nimport { decryptMnemonic } from 'blockstack/lib/encryption/wallet';\r\n/**\r\n * Decrypt an encrypted mnemonic phrase with a password.\r\n * Legacy triplesec encrypted payloads are also supported.\r\n * @param data - Buffer or hex-encoded string of the encrypted mnemonic\r\n * @param password - Password for data\r\n * @return the raw mnemonic phrase\r\n */\r\nexport async function decrypt(dataBuffer, password) {\r\n const result = await decryptMnemonic(dataBuffer, password, triplesecDecrypt);\r\n return result;\r\n}\r\n//# sourceMappingURL=decrypt.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@types/triplesec/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/wallet.d.ts"],"map":"{\"version\":3,\"file\":\"decrypt.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/encryption/decrypt.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAA2B,EAAE,QAAgB;IACzE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC7E,OAAO,MAAM,CAAC;AAChB,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/encryption/decrypt.d.ts","writeByteOrderMark":false,"text":"/// \r\n/**\r\n * Decrypt an encrypted mnemonic phrase with a password.\r\n * Legacy triplesec encrypted payloads are also supported.\r\n * @param data - Buffer or hex-encoded string of the encrypted mnemonic\r\n * @param password - Password for data\r\n * @return the raw mnemonic phrase\r\n */\r\nexport declare function decrypt(dataBuffer: Buffer | string, password: string): Promise;\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..afbcca7e2 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +{"code":"import IdentityAddressOwnerNode from '../nodes/identity-address-owner-node';\r\nimport { createSha2Hash } from 'blockstack/lib/encryption/sha2Hash';\r\nimport { publicKeyToAddress } from 'blockstack/lib/keys';\r\nimport { parseZoneFile } from 'zone-file';\r\nimport Identity from '../identity';\r\nimport { AssertionError } from 'assert';\r\nimport { Subdomains, registrars } from '../profiles';\r\nconst IDENTITY_KEYCHAIN = 888;\r\nconst BLOCKSTACK_ON_BITCOIN = 0;\r\nexport function getIdentityPrivateKeychain(rootNode) {\r\n return rootNode.deriveHardened(IDENTITY_KEYCHAIN).deriveHardened(BLOCKSTACK_ON_BITCOIN);\r\n}\r\nconst EXTERNAL_ADDRESS = 'EXTERNAL_ADDRESS';\r\nconst CHANGE_ADDRESS = 'CHANGE_ADDRESS';\r\nexport function getBitcoinPrivateKeychain(rootNode) {\r\n const BIP_44_PURPOSE = 44;\r\n const BITCOIN_COIN_TYPE = 0;\r\n const ACCOUNT_INDEX = 0;\r\n return rootNode\r\n .deriveHardened(BIP_44_PURPOSE)\r\n .deriveHardened(BITCOIN_COIN_TYPE)\r\n .deriveHardened(ACCOUNT_INDEX);\r\n}\r\nexport function getBitcoinAddressNode(bitcoinKeychain, addressIndex = 0, chainType = EXTERNAL_ADDRESS) {\r\n let chain = null;\r\n if (chainType === EXTERNAL_ADDRESS) {\r\n chain = 0;\r\n }\r\n else if (chainType === CHANGE_ADDRESS) {\r\n chain = 1;\r\n }\r\n else {\r\n throw new Error('Invalid chain type');\r\n }\r\n return bitcoinKeychain.derive(chain).derive(addressIndex);\r\n}\r\nexport async function getIdentityOwnerAddressNode(identityPrivateKeychain, identityIndex = 0) {\r\n if (identityPrivateKeychain.isNeutered()) {\r\n throw new Error('You need the private key to generate identity addresses');\r\n }\r\n const publicKeyHex = Buffer.from(identityPrivateKeychain.publicKey.toString('hex'));\r\n const sha2Hash = await createSha2Hash();\r\n const saltData = await sha2Hash.digest(publicKeyHex, 'sha256');\r\n const salt = saltData.toString('hex');\r\n return new IdentityAddressOwnerNode(identityPrivateKeychain.deriveHardened(identityIndex), salt);\r\n}\r\nexport function getAddress(node) {\r\n return publicKeyToAddress(node.publicKey);\r\n}\r\nexport function deriveIdentityKeyPair(identityOwnerAddressNode) {\r\n const address = identityOwnerAddressNode.getAddress();\r\n const identityKey = identityOwnerAddressNode.getIdentityKey();\r\n const identityKeyID = identityOwnerAddressNode.getIdentityKeyID();\r\n const appsNode = identityOwnerAddressNode.getAppsNode();\r\n const stxNode = identityOwnerAddressNode.getSTXNode();\r\n const keyPair = {\r\n key: identityKey,\r\n keyID: identityKeyID,\r\n address,\r\n appsNodeKey: appsNode.toBase58(),\r\n stxNodeKey: stxNode.toBase58(),\r\n salt: identityOwnerAddressNode.getSalt(),\r\n };\r\n return keyPair;\r\n}\r\nexport async function getBlockchainIdentities(rootNode, identitiesToGenerate) {\r\n const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode);\r\n const bitcoinPrivateKeychainNode = getBitcoinPrivateKeychain(rootNode);\r\n const identityPublicKeychainNode = identityPrivateKeychainNode.neutered();\r\n const identityPublicKeychain = identityPublicKeychainNode.toBase58();\r\n const bitcoinPublicKeychainNode = bitcoinPrivateKeychainNode.neutered();\r\n const bitcoinPublicKeychain = bitcoinPublicKeychainNode.toBase58();\r\n const firstBitcoinAddress = getAddress(getBitcoinAddressNode(bitcoinPublicKeychainNode));\r\n const identityAddresses = [];\r\n const identityKeypairs = [];\r\n const identities = [];\r\n // We pre-generate a number of identity addresses so that we\r\n // don't have to prompt the user for the password on each new profile\r\n for (let addressIndex = 0; addressIndex < identitiesToGenerate; addressIndex++) {\r\n const identity = await makeIdentity(rootNode, addressIndex);\r\n identities.push(identity);\r\n identityKeypairs.push(identity.keyPair);\r\n identityAddresses.push(identity.address);\r\n }\r\n return {\r\n identityPublicKeychain,\r\n bitcoinPublicKeychain,\r\n firstBitcoinAddress,\r\n identityAddresses,\r\n identityKeypairs,\r\n identities,\r\n };\r\n}\r\nexport const makeIdentity = async (rootNode, index) => {\r\n const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode);\r\n const identityOwnerAddressNode = await getIdentityOwnerAddressNode(identityPrivateKeychainNode, index);\r\n const identityKeyPair = deriveIdentityKeyPair(identityOwnerAddressNode);\r\n const identity = new Identity({\r\n keyPair: identityKeyPair,\r\n address: identityKeyPair.address,\r\n usernames: [],\r\n });\r\n return identity;\r\n};\r\nexport function assertIsTruthy(val) {\r\n if (!val) {\r\n throw new AssertionError({ expected: true, actual: val });\r\n }\r\n}\r\nexport var IdentityNameValidityError;\r\n(function (IdentityNameValidityError) {\r\n IdentityNameValidityError[\"MINIMUM_LENGTH\"] = \"error_minimum_length\";\r\n IdentityNameValidityError[\"MAXIMUM_LENGTH\"] = \"error_maximum_length\";\r\n IdentityNameValidityError[\"ILLEGAL_CHARACTER\"] = \"error_illegal_character\";\r\n IdentityNameValidityError[\"UNAVAILABLE\"] = \"error_name_unavailable\";\r\n})(IdentityNameValidityError || (IdentityNameValidityError = {}));\r\nconst containsLegalCharacters = (name) => /^[a-z0-9_]+$/.test(name);\r\nexport const validateSubdomainFormat = (identityName) => {\r\n const nameLength = identityName.length;\r\n if (nameLength < 8) {\r\n return IdentityNameValidityError.MINIMUM_LENGTH;\r\n }\r\n if (nameLength > 37) {\r\n return IdentityNameValidityError.MAXIMUM_LENGTH;\r\n }\r\n if (!containsLegalCharacters(identityName)) {\r\n return IdentityNameValidityError.ILLEGAL_CHARACTER;\r\n }\r\n return null;\r\n};\r\nexport const validateSubdomainAvailability = async (name, subdomain = Subdomains.BLOCKSTACK) => {\r\n const url = `${registrars[subdomain].apiUrl}/${name.toLowerCase()}.${subdomain}`;\r\n const resp = await fetch(url);\r\n const data = await resp.json();\r\n return data;\r\n};\r\n/**\r\n * Restore identities by recursively making a new identity, and checking if it has a username.\r\n *\r\n * As soon as a username is not found for an identity, the recursion stops.\r\n */\r\nexport const recursiveRestoreIdentities = async ({ rootNode, index = 1, identities = [], }) => {\r\n const identity = await makeIdentity(rootNode, index);\r\n await identity.refresh();\r\n if (identity.defaultUsername) {\r\n identities.push(identity);\r\n return recursiveRestoreIdentities({ rootNode, index: index + 1, identities });\r\n }\r\n return identities;\r\n};\r\n/**\r\n * Validate the format and availability of a subdomain. Will return an error of enum\r\n * IdentityNameValidityError if an error is present. If no errors are found, will return null.\r\n * @param name the subdomain to be registered\r\n * @param subdomain a valid Subdomains enum\r\n */\r\nexport const validateSubdomain = async (name, subdomain = Subdomains.BLOCKSTACK) => {\r\n const error = validateSubdomainFormat(name);\r\n if (error) {\r\n return error;\r\n }\r\n try {\r\n const data = await validateSubdomainAvailability(name, subdomain);\r\n if (data.status !== 'available') {\r\n return IdentityNameValidityError.UNAVAILABLE;\r\n }\r\n }\r\n catch (error) {\r\n return IdentityNameValidityError.UNAVAILABLE;\r\n }\r\n return null;\r\n};\r\nexport const getProfileURLFromZoneFile = async (name) => {\r\n const url = `https://core.blockstack.org/v1/names/${name}`;\r\n const res = await fetch(url);\r\n if (res.ok) {\r\n const nameInfo = await res.json();\r\n const zone = parseZoneFile(nameInfo.zonefile);\r\n return zone.uri[0].target;\r\n }\r\n return;\r\n};\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/nodes/identity-address-owner-node.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/sha2Hash.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/zone-file/lib/index.js","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/assert/assert.js","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/index.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/utils/index.d.ts","writeByteOrderMark":false,"text":"import { BIP32Interface } from 'bitcoinjs-lib';\r\nimport IdentityAddressOwnerNode from '../nodes/identity-address-owner-node';\r\nimport Identity from '../identity';\r\nimport { Subdomains } from '../profiles';\r\nexport declare function getIdentityPrivateKeychain(rootNode: BIP32Interface): BIP32Interface;\r\nexport declare function getBitcoinPrivateKeychain(rootNode: BIP32Interface): BIP32Interface;\r\nexport declare function getBitcoinAddressNode(bitcoinKeychain: BIP32Interface, addressIndex?: number, chainType?: string): BIP32Interface;\r\nexport declare function getIdentityOwnerAddressNode(identityPrivateKeychain: BIP32Interface, identityIndex?: number): Promise;\r\nexport declare function getAddress(node: BIP32Interface): string;\r\nexport interface IdentityKeyPair {\r\n key: string;\r\n keyID: string;\r\n address: string;\r\n appsNodeKey: string;\r\n stxNodeKey: string;\r\n salt: string;\r\n}\r\nexport declare function deriveIdentityKeyPair(identityOwnerAddressNode: IdentityAddressOwnerNode): IdentityKeyPair;\r\nexport declare function getBlockchainIdentities(rootNode: BIP32Interface, identitiesToGenerate: number): Promise<{\r\n identityPublicKeychain: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityAddresses: string[];\r\n identityKeypairs: IdentityKeyPair[];\r\n identities: Identity[];\r\n}>;\r\nexport declare const makeIdentity: (rootNode: BIP32Interface, index: number) => Promise;\r\nexport declare function assertIsTruthy(val: any): asserts val is NonNullable;\r\nexport declare enum IdentityNameValidityError {\r\n MINIMUM_LENGTH = \"error_minimum_length\",\r\n MAXIMUM_LENGTH = \"error_maximum_length\",\r\n ILLEGAL_CHARACTER = \"error_illegal_character\",\r\n UNAVAILABLE = \"error_name_unavailable\"\r\n}\r\nexport declare const validateSubdomainFormat: (identityName: string) => IdentityNameValidityError | null;\r\nexport declare const validateSubdomainAvailability: (name: string, subdomain?: Subdomains) => Promise;\r\ninterface RecursiveMakeIdentitiesOptions {\r\n rootNode: BIP32Interface;\r\n index?: number;\r\n identities?: Identity[];\r\n}\r\n/**\r\n * Restore identities by recursively making a new identity, and checking if it has a username.\r\n *\r\n * As soon as a username is not found for an identity, the recursion stops.\r\n */\r\nexport declare const recursiveRestoreIdentities: ({ rootNode, index, identities, }: RecursiveMakeIdentitiesOptions) => Promise;\r\n/**\r\n * Validate the format and availability of a subdomain. Will return an error of enum\r\n * IdentityNameValidityError if an error is present. If no errors are found, will return null.\r\n * @param name the subdomain to be registered\r\n * @param subdomain a valid Subdomains enum\r\n */\r\nexport declare const validateSubdomain: (name: string, subdomain?: Subdomains) => Promise;\r\nexport declare const getProfileURLFromZoneFile: (name: string) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..aaef254cd --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +{"code":"import { getLegacyAppNode } from 'blockstack/lib/wallet';\r\nimport { publicKeyToAddress } from 'blockstack/lib/keys';\r\nimport { getAddress } from '../utils';\r\nconst APPS_NODE_INDEX = 0;\r\nconst SIGNING_NODE_INDEX = 1;\r\nconst ENCRYPTION_NODE_INDEX = 2;\r\nconst STX_NODE_INDEX = 6;\r\nexport default class IdentityAddressOwnerNode {\r\n constructor(ownerHdNode, salt) {\r\n this.hdNode = ownerHdNode;\r\n this.salt = salt;\r\n }\r\n getNode() {\r\n return this.hdNode;\r\n }\r\n getSalt() {\r\n return this.salt;\r\n }\r\n getIdentityKey() {\r\n if (!this.hdNode.privateKey) {\r\n throw new Error('Node does not have private key');\r\n }\r\n return this.hdNode.privateKey.toString('hex');\r\n }\r\n getIdentityKeyID() {\r\n return this.hdNode.publicKey.toString('hex');\r\n }\r\n getAppsNode() {\r\n return this.hdNode.deriveHardened(APPS_NODE_INDEX);\r\n }\r\n getAddress() {\r\n return getAddress(this.hdNode);\r\n }\r\n getEncryptionNode() {\r\n return this.hdNode.deriveHardened(ENCRYPTION_NODE_INDEX);\r\n }\r\n getSigningNode() {\r\n return this.hdNode.deriveHardened(SIGNING_NODE_INDEX);\r\n }\r\n getSTXNode() {\r\n return this.hdNode.deriveHardened(STX_NODE_INDEX);\r\n }\r\n getAppNode(appDomain) {\r\n return getLegacyAppNode(this.hdNode, this.salt, appDomain);\r\n }\r\n getAppPrivateKey(appDomain) {\r\n const appNode = this.getAppNode(appDomain);\r\n if (!appNode.privateKey) {\r\n throw new Error('App node does not have private key');\r\n }\r\n return appNode.privateKey.toString('hex');\r\n }\r\n getAppAddress(appDomain) {\r\n const appNode = this.getAppNode(appDomain);\r\n return publicKeyToAddress(appNode.publicKey);\r\n }\r\n}\r\n//# sourceMappingURL=identity-address-owner-node.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/wallet.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts"],"map":"{\"version\":3,\"file\":\"identity-address-owner-node.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/nodes/identity-address-owner-node.ts\"],\"names\":[],\"mappings\":\"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAK3C,YAAY,WAA2B,EAAE,IAAY;QACnD,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACnD;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;IAED,UAAU;QACR,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACxD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,gBAAgB,CAAC,SAAiB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACvD;QACD,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;CACF\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/nodes/identity-address-owner-node.d.ts","writeByteOrderMark":false,"text":"import { BIP32Interface } from 'bitcoinjs-lib';\r\nexport default class IdentityAddressOwnerNode {\r\n hdNode: BIP32Interface;\r\n salt: string;\r\n constructor(ownerHdNode: BIP32Interface, salt: string);\r\n getNode(): BIP32Interface;\r\n getSalt(): string;\r\n getIdentityKey(): string;\r\n getIdentityKeyID(): string;\r\n getAppsNode(): BIP32Interface;\r\n getAddress(): string;\r\n getEncryptionNode(): BIP32Interface;\r\n getSigningNode(): BIP32Interface;\r\n getSTXNode(): BIP32Interface;\r\n getAppNode(appDomain: string): BIP32Interface;\r\n getAppPrivateKey(appDomain: string): string;\r\n getAppAddress(appDomain: string): string;\r\n}\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..1104190d1 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +{"code":"import { signProfileToken, wrapProfileToken, connectToGaiaHub, makeProfileZoneFile, } from 'blockstack';\r\nimport { uploadToGaiaHub } from './utils/gaia';\r\nconst PERSON_TYPE = 'Person';\r\nconst CONTEXT = 'http://schema.org';\r\nconst IMAGE_TYPE = 'ImageObject';\r\nexport const DEFAULT_PROFILE = {\r\n '@type': 'Person',\r\n '@context': 'http://schema.org',\r\n};\r\nconst DEFAULT_PROFILE_FILE_NAME = 'profile.json';\r\nexport var Subdomains;\r\n(function (Subdomains) {\r\n Subdomains[\"TEST\"] = \"test-personal.id\";\r\n Subdomains[\"BLOCKSTACK\"] = \"id.blockstack\";\r\n})(Subdomains || (Subdomains = {}));\r\nexport const registrars = {\r\n [Subdomains.TEST]: {\r\n registerUrl: 'https://test-registrar.blockstack.org/register',\r\n apiUrl: 'https://test-registrar.blockstack.org/v1/names',\r\n },\r\n [Subdomains.BLOCKSTACK]: {\r\n registerUrl: 'https://registrar.blockstack.org/register',\r\n apiUrl: 'https://registrar.blockstack.org/v1/names',\r\n },\r\n};\r\nexport function signProfileForUpload(profile, keypair) {\r\n const privateKey = keypair.key;\r\n const publicKey = keypair.keyID;\r\n const token = signProfileToken(profile, privateKey, { publicKey });\r\n const tokenRecord = wrapProfileToken(token);\r\n const tokenRecords = [tokenRecord];\r\n return JSON.stringify(tokenRecords, null, 2);\r\n}\r\nexport async function uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig) {\r\n const identityHubConfig = gaiaHubConfig || (await connectToGaiaHub(gaiaHubUrl, identity.keyPair.key));\r\n const uploadResponse = await uploadToGaiaHub(DEFAULT_PROFILE_FILE_NAME, signedProfileTokenData, identityHubConfig);\r\n return uploadResponse;\r\n}\r\nconst sendUsernameToRegistrar = async ({ username, subdomain, zoneFile, identity, }) => {\r\n const { registerUrl } = registrars[subdomain];\r\n const registrationRequestBody = JSON.stringify({\r\n name: username,\r\n owner_address: identity.address,\r\n zonefile: zoneFile,\r\n });\r\n const requestHeaders = {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n };\r\n const response = await fetch(registerUrl, {\r\n method: 'POST',\r\n headers: requestHeaders,\r\n body: registrationRequestBody,\r\n });\r\n if (!response.ok) {\r\n return Promise.reject({\r\n error: 'Failed to register username',\r\n status: response.status,\r\n });\r\n }\r\n return response.json();\r\n};\r\n/**\r\n * Register a subdomain for a given identity\r\n */\r\nexport const registerSubdomain = async ({ identity, gaiaHubUrl, username, subdomain, }) => {\r\n const profile = identity.profile || DEFAULT_PROFILE;\r\n const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair);\r\n const profileUrl = await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData);\r\n const fullUsername = `${username}.${subdomain}`;\r\n const zoneFile = makeProfileZoneFile(fullUsername, profileUrl);\r\n await sendUsernameToRegistrar({\r\n username,\r\n subdomain,\r\n zoneFile,\r\n identity,\r\n });\r\n identity.defaultUsername = fullUsername;\r\n identity.usernames.push(fullUsername);\r\n return identity;\r\n};\r\nexport const signAndUploadProfile = async ({ profile, gaiaHubUrl, identity, gaiaHubConfig, }) => {\r\n const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair);\r\n await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig);\r\n};\r\nexport const fetchProfile = async ({ identity, gaiaUrl, }) => {\r\n try {\r\n const url = await identity.profileUrl(gaiaUrl);\r\n const res = await fetch(url);\r\n if (res.ok) {\r\n const json = await res.json();\r\n const { decodedToken } = json[0];\r\n return decodedToken.payload?.claim;\r\n }\r\n if (res.status === 404) {\r\n return null;\r\n }\r\n throw new Error('Network error when fetching profile');\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n};\r\n//# sourceMappingURL=profiles.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts"],"map":"{\"version\":3,\"file\":\"profiles.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/profiles.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/profiles.d.ts","writeByteOrderMark":false,"text":"import { IdentityKeyPair } from './utils';\r\nimport Identity from './identity';\r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\ndeclare const PERSON_TYPE = \"Person\";\r\ndeclare const CONTEXT = \"http://schema.org\";\r\ndeclare const IMAGE_TYPE = \"ImageObject\";\r\nexport interface ProfileImage {\r\n '@type': typeof IMAGE_TYPE;\r\n name: string;\r\n contentUrl: string;\r\n}\r\nexport interface Profile {\r\n '@type': typeof PERSON_TYPE;\r\n '@context': typeof CONTEXT;\r\n apps?: {\r\n [origin: string]: string;\r\n };\r\n appsMeta?: {\r\n [origin: string]: {\r\n publicKey: string;\r\n storage: string;\r\n };\r\n };\r\n name?: string;\r\n image?: ProfileImage[];\r\n [key: string]: any;\r\n}\r\nexport declare const DEFAULT_PROFILE: Profile;\r\nexport declare enum Subdomains {\r\n TEST = \"test-personal.id\",\r\n BLOCKSTACK = \"id.blockstack\"\r\n}\r\nexport declare const registrars: {\r\n \"test-personal.id\": {\r\n registerUrl: string;\r\n apiUrl: string;\r\n };\r\n \"id.blockstack\": {\r\n registerUrl: string;\r\n apiUrl: string;\r\n };\r\n};\r\nexport declare function signProfileForUpload(profile: Profile, keypair: IdentityKeyPair): string;\r\nexport declare function uploadProfile(gaiaHubUrl: string, identity: Identity, signedProfileTokenData: string, gaiaHubConfig?: GaiaHubConfig): Promise;\r\ninterface RegisterParams {\r\n identity: Identity;\r\n /** The gaia hub URL to use for profile.json upload */\r\n gaiaHubUrl: string;\r\n /** The username portion of this subdomain, i.e. only the portion of the name before any periods */\r\n username: string;\r\n /** The \"domain\" used for this subdomain. Can be any of the `Subdomains` enum. */\r\n subdomain: Subdomains;\r\n}\r\n/**\r\n * Register a subdomain for a given identity\r\n */\r\nexport declare const registerSubdomain: ({ identity, gaiaHubUrl, username, subdomain, }: RegisterParams) => Promise;\r\nexport declare const signAndUploadProfile: ({ profile, gaiaHubUrl, identity, gaiaHubConfig, }: {\r\n profile: Profile;\r\n gaiaHubUrl: string;\r\n identity: Identity;\r\n gaiaHubConfig?: GaiaHubConfig | undefined;\r\n}) => Promise;\r\nexport declare const fetchProfile: ({ identity, gaiaUrl, }: {\r\n identity: Identity;\r\n gaiaUrl: string;\r\n}) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..7edbdd5e7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +{"code":"import { bip32, ECPair } from 'bitcoinjs-lib';\r\nimport { getPublicKeyFromPrivate } from 'blockstack/lib/keys';\r\nimport { makeAuthResponse } from 'blockstack/lib/auth/authMessages';\r\nimport { getProfileURLFromZoneFile } from './utils';\r\nimport { makeGaiaAssociationToken, DEFAULT_GAIA_HUB, getHubInfo, connectToGaiaHubWithConfig, } from './utils/gaia';\r\nimport IdentityAddressOwnerNode from './nodes/identity-address-owner-node';\r\nimport { fetchProfile, DEFAULT_PROFILE, signAndUploadProfile } from './profiles';\r\nimport { ecPairToAddress } from 'blockstack';\r\nexport class Identity {\r\n constructor({ keyPair, address, usernames, defaultUsername, profile, }) {\r\n this.keyPair = keyPair;\r\n this.address = address;\r\n this.usernames = usernames || [];\r\n this.defaultUsername = defaultUsername;\r\n this.profile = profile;\r\n }\r\n async makeAuthResponse({ appDomain, gaiaUrl, transitPublicKey, scopes = [], stxAddress, }) {\r\n const appPrivateKey = this.appPrivateKey(appDomain);\r\n const hubInfo = await getHubInfo(gaiaUrl);\r\n const profileUrl = await this.profileUrl(hubInfo.read_url_prefix);\r\n const profile = (await fetchProfile({ identity: this, gaiaUrl: hubInfo.read_url_prefix })) || DEFAULT_PROFILE;\r\n if (scopes.includes('publish_data')) {\r\n if (!profile.apps) {\r\n profile.apps = {};\r\n }\r\n const challengeSigner = ECPair.fromPrivateKey(Buffer.from(appPrivateKey, 'hex'));\r\n const storageUrl = `${hubInfo.read_url_prefix}${ecPairToAddress(challengeSigner)}/`;\r\n profile.apps[appDomain] = storageUrl;\r\n if (!profile.appsMeta) {\r\n profile.appsMeta = {};\r\n }\r\n profile.appsMeta[appDomain] = {\r\n storage: storageUrl,\r\n publicKey: challengeSigner.publicKey.toString('hex'),\r\n };\r\n const gaiaHubConfig = connectToGaiaHubWithConfig({\r\n hubInfo,\r\n privateKey: this.keyPair.key,\r\n gaiaHubUrl: gaiaUrl,\r\n });\r\n await signAndUploadProfile({ profile, identity: this, gaiaHubUrl: gaiaUrl, gaiaHubConfig });\r\n }\r\n this.profile = profile;\r\n const compressedAppPublicKey = getPublicKeyFromPrivate(appPrivateKey.slice(0, 64));\r\n const associationToken = makeGaiaAssociationToken(this.keyPair.key, compressedAppPublicKey);\r\n return makeAuthResponse(this.keyPair.key, {\r\n ...(this.profile || {}),\r\n stxAddress,\r\n }, this.defaultUsername || '', {\r\n profileUrl,\r\n }, undefined, appPrivateKey, undefined, transitPublicKey, gaiaUrl, undefined, associationToken);\r\n }\r\n appPrivateKey(appDomain) {\r\n const { salt, appsNodeKey } = this.keyPair;\r\n const appsNode = new IdentityAddressOwnerNode(bip32.fromBase58(appsNodeKey), salt);\r\n return appsNode.getAppPrivateKey(appDomain);\r\n }\r\n async profileUrl(gaiaUrl) {\r\n if (this.defaultUsername) {\r\n try {\r\n const url = await getProfileURLFromZoneFile(this.defaultUsername);\r\n if (url)\r\n return url;\r\n }\r\n catch (error) {\r\n if (process.env.NODE_ENV !== 'test') {\r\n console.warn('Error fetching profile URL from zone file:', error);\r\n }\r\n }\r\n }\r\n return `${gaiaUrl}${this.address}/profile.json`;\r\n }\r\n async fetchNames() {\r\n const getNamesUrl = `https://core.blockstack.org/v1/addresses/bitcoin/${this.address}`;\r\n const res = await fetch(getNamesUrl);\r\n const data = await res.json();\r\n const { names } = data;\r\n return names;\r\n }\r\n /**\r\n * Fetch existing information related to this identity, like username and profile information\r\n */\r\n async refresh(opts = { gaiaUrl: DEFAULT_GAIA_HUB }) {\r\n try {\r\n const names = await this.fetchNames();\r\n if (names) {\r\n if (names[0] && !this.defaultUsername) {\r\n this.defaultUsername = names[0];\r\n }\r\n names.forEach(name => {\r\n const existingIndex = this.usernames.findIndex(u => u === name);\r\n if (existingIndex === -1) {\r\n this.usernames.push(name);\r\n }\r\n });\r\n }\r\n const profile = await fetchProfile({ identity: this, gaiaUrl: opts.gaiaUrl });\r\n if (profile) {\r\n this.profile = profile;\r\n }\r\n return;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n }\r\n}\r\nexport default Identity;\r\n//# sourceMappingURL=identity.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/auth/authMessages.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/nodes/identity-address-owner-node.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"identity.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/identity.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/identity.d.ts","writeByteOrderMark":false,"text":"import { IdentityKeyPair } from './utils/index';\r\nimport { Profile } from './profiles';\r\ninterface IdentityConstructorOptions {\r\n keyPair: IdentityKeyPair;\r\n address: string;\r\n usernames?: string[];\r\n defaultUsername?: string;\r\n profile?: Profile;\r\n}\r\ninterface RefreshOptions {\r\n gaiaUrl: string;\r\n}\r\nexport declare class Identity {\r\n keyPair: IdentityKeyPair;\r\n address: string;\r\n defaultUsername?: string;\r\n usernames: string[];\r\n profile?: Profile;\r\n constructor({ keyPair, address, usernames, defaultUsername, profile, }: IdentityConstructorOptions);\r\n makeAuthResponse({ appDomain, gaiaUrl, transitPublicKey, scopes, stxAddress, }: {\r\n appDomain: string;\r\n gaiaUrl: string;\r\n transitPublicKey: string;\r\n scopes?: string[];\r\n stxAddress?: string;\r\n }): Promise;\r\n appPrivateKey(appDomain: string): string;\r\n profileUrl(gaiaUrl: string): Promise;\r\n fetchNames(): Promise;\r\n /**\r\n * Fetch existing information related to this identity, like username and profile information\r\n */\r\n refresh(opts?: RefreshOptions): Promise;\r\n}\r\nexport default Identity;\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..d1e50fabe --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +{"code":"import { makeContractCall, makeContractDeploy, StacksTestnet, makeSTXTokenTransfer, getAddressFromPrivateKey, } from '@blockstack/stacks-transactions';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { assertIsTruthy } from '../utils';\r\nimport BN from 'bn.js';\r\nexport class WalletSigner {\r\n constructor({ privateKey }) {\r\n this.privateKey = privateKey;\r\n }\r\n getSTXAddress(version) {\r\n return getAddressFromPrivateKey(this.getSTXPrivateKey(), version);\r\n }\r\n getSTXPrivateKey() {\r\n const node = bip32.fromBase58(this.privateKey);\r\n assertIsTruthy(node.privateKey);\r\n return node.privateKey;\r\n }\r\n getNetwork() {\r\n const network = new StacksTestnet();\r\n network.coreApiUrl = 'https://sidecar.staging.blockstack.xyz';\r\n return network;\r\n }\r\n async fetchAccount({ version, rpcClient, }) {\r\n const address = this.getSTXAddress(version);\r\n const account = await rpcClient.fetchAccount(address);\r\n return account;\r\n }\r\n async signContractCall({ contractName, contractAddress, functionName, functionArgs, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeContractCall({\r\n contractAddress,\r\n contractName,\r\n functionName,\r\n functionArgs,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n nonce: new BN(nonce),\r\n network: this.getNetwork(),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n async signContractDeploy({ contractName, codeBody, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeContractDeploy({\r\n contractName,\r\n codeBody: codeBody,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n network: this.getNetwork(),\r\n nonce: new BN(nonce),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n async signSTXTransfer({ recipient, amount, memo, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeSTXTokenTransfer({\r\n recipient,\r\n amount: new BN(amount),\r\n memo,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n network: this.getNetwork(),\r\n nonce: new BN(nonce),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n}\r\n//# sourceMappingURL=signer.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/rpc-client/dist/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@types/bn.js/index.d.ts"],"map":"{\"version\":3,\"file\":\"signer.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/wallet/signer.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/wallet/signer.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { TransactionVersion, ClarityValue, StacksTestnet, PostConditionMode, PostCondition, StacksNetwork } from '@blockstack/stacks-transactions';\r\nimport RPCClient from '@blockstack/rpc-client';\r\ninterface ContractCallOptions {\r\n contractName: string;\r\n contractAddress: string;\r\n functionName: string;\r\n functionArgs: ClarityValue[];\r\n version: TransactionVersion;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\ninterface ContractDeployOptions {\r\n contractName: string;\r\n codeBody: string;\r\n version: TransactionVersion;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\ninterface STXTransferOptions {\r\n recipient: string;\r\n amount: string;\r\n memo?: string;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\nexport declare class WalletSigner {\r\n privateKey: string;\r\n constructor({ privateKey }: {\r\n privateKey: string;\r\n });\r\n getSTXAddress(version: TransactionVersion): string;\r\n getSTXPrivateKey(): Buffer;\r\n getNetwork(): StacksTestnet;\r\n fetchAccount({ version, rpcClient, }: {\r\n version: TransactionVersion;\r\n rpcClient: RPCClient;\r\n }): Promise;\r\n signContractCall({ contractName, contractAddress, functionName, functionArgs, nonce, postConditionMode, postConditions, }: ContractCallOptions): Promise;\r\n signContractDeploy({ contractName, codeBody, nonce, postConditionMode, postConditions, }: ContractDeployOptions): Promise;\r\n signSTXTransfer({ recipient, amount, memo, nonce, postConditionMode, postConditions, }: STXTransferOptions): Promise;\r\n}\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..796e4be36 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +{"code":"import { TokenSigner } from 'jsontokens';\r\nimport { getPublicKeyFromPrivate } from 'blockstack/lib/keys';\r\nimport { randomBytes } from 'blockstack/lib/encryption/cryptoRandom';\r\nimport { ecPairToAddress, hexStringToECPair } from 'blockstack';\r\nexport const DEFAULT_GAIA_HUB = 'https://gaia.blockstack.org/hub/';\r\nexport const getHubInfo = async (hubUrl) => {\r\n const response = await fetch(`${hubUrl}/hub_info`);\r\n const data = await response.json();\r\n return data;\r\n};\r\nexport const getHubPrefix = async (hubUrl) => {\r\n const { read_url_prefix } = await getHubInfo(hubUrl);\r\n return read_url_prefix;\r\n};\r\nexport const makeGaiaAssociationToken = (secretKeyHex, childPublicKeyHex) => {\r\n const LIFETIME_SECONDS = 365 * 24 * 3600;\r\n const signerKeyHex = secretKeyHex.slice(0, 64);\r\n const compressedPublicKeyHex = getPublicKeyFromPrivate(signerKeyHex);\r\n const salt = randomBytes(16).toString('hex');\r\n const payload = {\r\n childToAssociate: childPublicKeyHex,\r\n iss: compressedPublicKeyHex,\r\n exp: LIFETIME_SECONDS + new Date().getTime() / 1000,\r\n iat: Date.now() / 1000,\r\n salt,\r\n };\r\n const tokenSigner = new TokenSigner('ES256K', signerKeyHex);\r\n const token = tokenSigner.sign(payload);\r\n return token;\r\n};\r\nexport const connectToGaiaHubWithConfig = ({ hubInfo, privateKey, gaiaHubUrl, }) => {\r\n const readURL = hubInfo.read_url_prefix;\r\n const token = makeGaiaAuthToken({ hubInfo, privateKey, gaiaHubUrl });\r\n const address = ecPairToAddress(hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')));\r\n return {\r\n url_prefix: readURL,\r\n max_file_upload_size_megabytes: 100,\r\n address,\r\n token,\r\n server: gaiaHubUrl,\r\n };\r\n};\r\n/**\r\n * When you already know the Gaia read URL, make a Gaia config that doesn't have to fetch `/hub_info`\r\n */\r\nexport const makeReadOnlyGaiaConfig = ({ readURL, privateKey, }) => {\r\n const address = ecPairToAddress(hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')));\r\n return {\r\n url_prefix: readURL,\r\n max_file_upload_size_megabytes: 100,\r\n address,\r\n token: 'not_used',\r\n server: 'not_used',\r\n };\r\n};\r\nconst makeGaiaAuthToken = ({ hubInfo, privateKey, gaiaHubUrl }) => {\r\n const challengeText = hubInfo.challenge_text;\r\n const iss = getPublicKeyFromPrivate(privateKey);\r\n const salt = randomBytes(16).toString('hex');\r\n const payload = {\r\n gaiaHubUrl,\r\n iss,\r\n salt,\r\n };\r\n if (challengeText) {\r\n payload.gaiaChallenge = challengeText;\r\n }\r\n const token = new TokenSigner('ES256K', privateKey).sign(payload);\r\n return `v1:${token}`;\r\n};\r\nexport const uploadToGaiaHub = async (filename, contents, hubConfig) => {\r\n const contentType = 'application/json';\r\n const response = await fetch(`${hubConfig.server}/store/${hubConfig.address}/${filename}`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': contentType,\r\n Authorization: `bearer ${hubConfig.token}`,\r\n },\r\n body: contents,\r\n referrer: 'no-referrer',\r\n referrerPolicy: 'no-referrer',\r\n });\r\n const { publicURL } = await response.json();\r\n return publicURL;\r\n};\r\n//# sourceMappingURL=gaia.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/jsontokens/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/cryptoRandom.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts"],"map":"{\"version\":3,\"file\":\"gaia.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/gaia.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/utils/gaia.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\nexport declare const DEFAULT_GAIA_HUB = \"https://gaia.blockstack.org/hub/\";\r\ninterface HubInfo {\r\n challenge_text?: string;\r\n read_url_prefix: string;\r\n}\r\nexport declare const getHubInfo: (hubUrl: string) => Promise;\r\nexport declare const getHubPrefix: (hubUrl: string) => Promise;\r\nexport declare const makeGaiaAssociationToken: (secretKeyHex: string, childPublicKeyHex: string) => string;\r\ninterface ConnectToGaiaOptions {\r\n hubInfo: HubInfo;\r\n privateKey: string;\r\n gaiaHubUrl: string;\r\n}\r\nexport declare const connectToGaiaHubWithConfig: ({ hubInfo, privateKey, gaiaHubUrl, }: ConnectToGaiaOptions) => GaiaHubConfig;\r\ninterface ReadOnlyGaiaConfigOptions {\r\n readURL: string;\r\n privateKey: string;\r\n}\r\n/**\r\n * When you already know the Gaia read URL, make a Gaia config that doesn't have to fetch `/hub_info`\r\n */\r\nexport declare const makeReadOnlyGaiaConfig: ({ readURL, privateKey, }: ReadOnlyGaiaConfigOptions) => GaiaHubConfig;\r\nexport declare const uploadToGaiaHub: (filename: string, contents: Blob | Buffer | ArrayBufferView | string, hubConfig: GaiaHubConfig) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/018dd99255a534837916033f04b396b3c5b771ad b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/018dd99255a534837916033f04b396b3c5b771ad new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/061a2a662a532413fb382823dd2453c8537b4338 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/061a2a662a532413fb382823dd2453c8537b4338 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/314c9c585547e1ee805fe1597f307af31b72559c b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/314c9c585547e1ee805fe1597f307af31b72559c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/420b2f97ccbc239de9691385af956534d4545c2c b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/420b2f97ccbc239de9691385af956534d4545c2c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/9ed2612615091d088e52b934dbdc159280dc237c b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/9ed2612615091d088e52b934dbdc159280dc237c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/fae54f93545510c8db4ed307ea8397a19112446a b/packages/keychain/.rts2_cache_esm/rpt2_a272a6c535598ab7b17b094cebbf6a630f0a4a2b/types/cache/fae54f93545510c8db4ed307ea8397a19112446a new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..53380f7c1 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +{"code":"import { ChainID, getAddressFromPrivateKey, TransactionVersion, } from '@blockstack/stacks-transactions';\r\nimport { ECPair } from 'bitcoinjs-lib';\r\nimport { ecPairToHexString } from 'blockstack';\r\nconst networkDerivationPath = `m/44'/5757'/0'/0/0`;\r\nexport const derivationPaths = {\r\n [ChainID.Mainnet]: networkDerivationPath,\r\n [ChainID.Testnet]: networkDerivationPath,\r\n};\r\nexport function getDerivationPath(chain) {\r\n return derivationPaths[chain];\r\n}\r\nexport function deriveStxAddressChain(chain) {\r\n return (rootNode) => {\r\n const childKey = rootNode.derivePath(getDerivationPath(chain));\r\n if (!childKey.privateKey) {\r\n throw new Error('Unable to derive private key from `rootNode`, bip32 master keychain');\r\n }\r\n const ecPair = ECPair.fromPrivateKey(childKey.privateKey);\r\n const privateKey = ecPairToHexString(ecPair);\r\n const txVersion = chain === ChainID.Mainnet ? TransactionVersion.Mainnet : TransactionVersion.Testnet;\r\n return {\r\n childKey,\r\n address: getAddressFromPrivateKey(privateKey, txVersion),\r\n privateKey,\r\n };\r\n };\r\n}\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/address-derivation/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EACL,OAAO,EACP,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAkB,MAAM,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB;IACxC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB;CACzC,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CAAC,QAAwB,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;SACxF;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,SAAS,GACb,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC;QACtF,OAAO;YACL,QAAQ;YACR,OAAO,EAAE,wBAAwB,CAAC,UAAU,EAAE,SAAS,CAAC;YACxD,UAAU;SACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/address-derivation/index.d.ts","writeByteOrderMark":false,"text":"import { ChainID } from '@blockstack/stacks-transactions';\r\nimport { BIP32Interface } from 'bitcoinjs-lib';\r\nexport declare const derivationPaths: {\r\n 1: string;\r\n 2147483648: string;\r\n};\r\nexport declare function getDerivationPath(chain: ChainID): string;\r\nexport declare function deriveStxAddressChain(chain: ChainID): (rootNode: BIP32Interface) => {\r\n childKey: BIP32Interface;\r\n address: string;\r\n privateKey: string;\r\n};\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..0c4968ffd --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +{"code":"import { generateMnemonic as generateBip39Mnemonic, mnemonicToSeed } from 'bip39';\r\nimport { randomBytes } from 'blockstack/lib/encryption/cryptoRandom';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { encrypt } from '../encryption/encrypt';\r\nimport { encryptMnemonic } from 'blockstack';\r\nexport async function generateMnemonicRootKeychain(entropy) {\r\n const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes);\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n return {\r\n rootNode,\r\n plaintextMnemonic,\r\n };\r\n}\r\nexport async function generateEncryptedMnemonicRootKeychain(password, entropy) {\r\n const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes);\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n const ciphertextBuffer = await encrypt(plaintextMnemonic, password);\r\n const encryptedMnemonicPhrase = ciphertextBuffer.toString('hex');\r\n return {\r\n rootNode,\r\n encryptedMnemonicPhrase,\r\n };\r\n}\r\nexport async function deriveRootKeychainFromMnemonic(plaintextMnemonic) {\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n return rootNode;\r\n}\r\nexport async function encryptMnemonicFormatted(plaintextMnemonic, password) {\r\n const encryptedMnemonic = await encryptMnemonic(plaintextMnemonic, password);\r\n const encryptedMnemonicHex = encryptedMnemonic.toString('hex');\r\n return { encryptedMnemonic, encryptedMnemonicHex };\r\n}\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/bip39/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/cryptoRandom.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/encrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/mnemonic/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,gBAAgB,IAAI,qBAAqB,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAA8B;IAC/E,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO;QACL,QAAQ;QACR,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,QAAgB,EAChB,OAA8B;IAE9B,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACpE,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO;QACL,QAAQ;QACR,uBAAuB;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,iBAAyB;IAC5E,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,iBAAyB,EAAE,QAAgB;IACxF,MAAM,iBAAiB,GAAG,MAAM,eAAe,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC7E,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;AACrD,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/mnemonic/index.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { bip32 } from 'bitcoinjs-lib';\r\nexport declare type AllowedKeyEntropyBits = 128 | 256;\r\nexport declare function generateMnemonicRootKeychain(entropy: AllowedKeyEntropyBits): Promise<{\r\n rootNode: bip32.BIP32Interface;\r\n plaintextMnemonic: string;\r\n}>;\r\nexport declare function generateEncryptedMnemonicRootKeychain(password: string, entropy: AllowedKeyEntropyBits): Promise<{\r\n rootNode: bip32.BIP32Interface;\r\n encryptedMnemonicPhrase: string;\r\n}>;\r\nexport declare function deriveRootKeychainFromMnemonic(plaintextMnemonic: string): Promise;\r\nexport declare function encryptMnemonicFormatted(plaintextMnemonic: string, password: string): Promise<{\r\n encryptedMnemonic: Buffer;\r\n encryptedMnemonicHex: string;\r\n}>;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..e617263c8 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +{"code":"import { encryptMnemonic } from 'blockstack/lib/encryption/wallet';\r\n/**\r\n * Encrypt a raw mnemonic phrase to be password protected\r\n * @param phrase - Raw mnemonic phrase\r\n * @param password - Password to encrypt mnemonic with\r\n * @return The encrypted phrase\r\n * */\r\nexport async function encrypt(phrase, password) {\r\n const result = await encryptMnemonic(phrase, password);\r\n return result;\r\n}\r\n//# sourceMappingURL=encrypt.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/wallet.d.ts"],"map":"{\"version\":3,\"file\":\"encrypt.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/encryption/encrypt.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;;;;KAKK;AACL,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,QAAgB;IAC5D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC;AAChB,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/encryption/encrypt.d.ts","writeByteOrderMark":false,"text":"/// \r\n/**\r\n * Encrypt a raw mnemonic phrase to be password protected\r\n * @param phrase - Raw mnemonic phrase\r\n * @param password - Password to encrypt mnemonic with\r\n * @return The encrypted phrase\r\n * */\r\nexport declare function encrypt(phrase: string, password: string): Promise;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..93330eccf --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +{"code":"import Wallet from './wallet';\r\nexport * from './utils';\r\nexport * from './mnemonic';\r\nexport * from './address-derivation';\r\nexport { default as Wallet } from './wallet';\r\nexport * from './wallet';\r\nexport * from './wallet/signer';\r\nexport { decrypt } from './encryption/decrypt';\r\nexport { encrypt } from './encryption/encrypt';\r\nexport * from './profiles';\r\nexport * from './identity';\r\nexport default {\r\n Wallet,\r\n};\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/mnemonic/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/address-derivation/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/signer.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/decrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/encrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAE3B,eAAe;IACb,MAAM;CACP,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/index.d.ts","writeByteOrderMark":false,"text":"import Wallet from './wallet';\r\nexport * from './utils';\r\nexport * from './mnemonic';\r\nexport * from './address-derivation';\r\nexport { default as Wallet } from './wallet';\r\nexport * from './wallet';\r\nexport * from './wallet/signer';\r\nexport { decrypt } from './encryption/decrypt';\r\nexport { encrypt } from './encryption/encrypt';\r\nexport * from './profiles';\r\nexport * from './identity';\r\ndeclare const _default: {\r\n Wallet: typeof Wallet;\r\n};\r\nexport default _default;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..673790086 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +{"code":"import { mnemonicToSeed } from 'bip39';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { getBlockchainIdentities, makeIdentity, assertIsTruthy, recursiveRestoreIdentities, } from '../utils';\r\nimport Identity from '../identity';\r\nimport { decrypt } from '../encryption/decrypt';\r\nimport { connectToGaiaHub, encryptContent, getPublicKeyFromPrivate, decryptContent, } from 'blockstack';\r\nimport { generateEncryptedMnemonicRootKeychain, deriveRootKeychainFromMnemonic, encryptMnemonicFormatted, } from '../mnemonic';\r\nimport { deriveStxAddressChain } from '../address-derivation';\r\nimport { makeReadOnlyGaiaConfig, DEFAULT_GAIA_HUB, uploadToGaiaHub } from '../utils/gaia';\r\nimport { WalletSigner } from './signer';\r\nconst CONFIG_INDEX = 45;\r\nexport class Wallet {\r\n constructor({ chain, encryptedBackupPhrase, identityPublicKeychain, bitcoinPublicKeychain, firstBitcoinAddress, identityKeypairs, identityAddresses, identities, configPrivateKey, stacksPrivateKey, walletConfig, }) {\r\n this.chain = chain;\r\n this.encryptedBackupPhrase = encryptedBackupPhrase;\r\n this.identityPublicKeychain = identityPublicKeychain;\r\n this.bitcoinPublicKeychain = bitcoinPublicKeychain;\r\n this.firstBitcoinAddress = firstBitcoinAddress;\r\n this.identityKeypairs = identityKeypairs;\r\n this.identityAddresses = identityAddresses;\r\n this.identities = identities.map(identity => new Identity(identity));\r\n this.configPrivateKey = configPrivateKey;\r\n this.stacksPrivateKey = stacksPrivateKey;\r\n this.walletConfig = walletConfig;\r\n }\r\n static generateFactory(bitsEntropy) {\r\n return async (password, chain) => {\r\n const { rootNode, encryptedMnemonicPhrase } = await generateEncryptedMnemonicRootKeychain(password, bitsEntropy);\r\n return this.createAccount({\r\n encryptedBackupPhrase: encryptedMnemonicPhrase,\r\n rootNode,\r\n chain,\r\n });\r\n };\r\n }\r\n static async generate(password, chain) {\r\n return await this.generateFactory(128)(password, chain);\r\n }\r\n static async generateStrong(password, chain) {\r\n return await this.generateFactory(256)(password, chain);\r\n }\r\n static async restore(password, seedPhrase, chain) {\r\n const rootNode = await deriveRootKeychainFromMnemonic(seedPhrase);\r\n const { encryptedMnemonicHex } = await encryptMnemonicFormatted(seedPhrase, password);\r\n const wallet = await Wallet.createAccount({\r\n encryptedBackupPhrase: encryptedMnemonicHex,\r\n rootNode,\r\n chain,\r\n });\r\n return await wallet.restoreIdentities({ rootNode, gaiaReadURL: DEFAULT_GAIA_HUB });\r\n }\r\n static async createAccount({ encryptedBackupPhrase, rootNode, chain, identitiesToGenerate = 1, }) {\r\n const derivedIdentitiesKey = rootNode.deriveHardened(CONFIG_INDEX).privateKey;\r\n if (!derivedIdentitiesKey) {\r\n throw new TypeError('Unable to derive config key for wallet identities');\r\n }\r\n const configPrivateKey = derivedIdentitiesKey.toString('hex');\r\n const { childKey: stxAddressKeychain } = deriveStxAddressChain(chain)(rootNode);\r\n const walletAttrs = await getBlockchainIdentities(rootNode, identitiesToGenerate);\r\n return new Wallet({\r\n ...walletAttrs,\r\n chain,\r\n configPrivateKey,\r\n stacksPrivateKey: stxAddressKeychain.toBase58(),\r\n encryptedBackupPhrase,\r\n });\r\n }\r\n /**\r\n * Restore all previously used identities. This is meant to be used when 'restoring' a wallet.\r\n * First, it will check for a `walletConfig`. If present, then we use that to determine how\r\n * many identities to generate, and auto-populate their username.\r\n *\r\n * If `walletConfig` is empty, then this is being restored from an authenticator that doesn't\r\n * support `walletConfig`. In that case, we will recursively generate identities, and check for\r\n * on-chain names.\r\n *\r\n */\r\n async restoreIdentities({ rootNode, gaiaReadURL, }) {\r\n const gaiaConfig = makeReadOnlyGaiaConfig({\r\n readURL: gaiaReadURL,\r\n privateKey: this.configPrivateKey,\r\n });\r\n await this.fetchConfig(gaiaConfig);\r\n if (this.walletConfig) {\r\n const getIdentities = this.walletConfig.identities.map(async (identityConfig, index) => {\r\n let identity = this.identities[index];\r\n if (!identity) {\r\n identity = await makeIdentity(rootNode, index);\r\n }\r\n if (identityConfig.username) {\r\n identity.usernames = [identityConfig.username];\r\n identity.defaultUsername = identityConfig.username;\r\n }\r\n return identity;\r\n });\r\n const identities = await Promise.all(getIdentities);\r\n this.identities = identities;\r\n return this;\r\n }\r\n await this.identities[0].refresh();\r\n const newIdentities = await recursiveRestoreIdentities({ rootNode });\r\n this.identities = this.identities.concat(newIdentities);\r\n return this;\r\n }\r\n async createNewIdentity(password) {\r\n const plainTextBuffer = await decrypt(Buffer.from(this.encryptedBackupPhrase, 'hex'), password);\r\n const seed = await mnemonicToSeed(plainTextBuffer);\r\n const rootNode = bip32.fromSeed(seed);\r\n const index = this.identities.length;\r\n const identity = await makeIdentity(rootNode, index);\r\n this.identities.push(identity);\r\n this.identityKeypairs.push(identity.keyPair);\r\n this.identityAddresses.push(identity.address);\r\n return identity;\r\n }\r\n async createGaiaConfig(gaiaHubUrl) {\r\n return connectToGaiaHub(gaiaHubUrl, this.configPrivateKey);\r\n }\r\n async fetchConfig(gaiaConfig) {\r\n try {\r\n const response = await fetch(`${gaiaConfig.url_prefix}${gaiaConfig.address}/wallet-config.json`);\r\n const encrypted = await response.text();\r\n const configJSON = (await decryptContent(encrypted, {\r\n privateKey: this.configPrivateKey,\r\n }));\r\n const config = JSON.parse(configJSON);\r\n this.walletConfig = config;\r\n return config;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n }\r\n async getOrCreateConfig({ gaiaConfig, skipUpload, }) {\r\n if (this.walletConfig) {\r\n return this.walletConfig;\r\n }\r\n const config = await this.fetchConfig(gaiaConfig);\r\n if (config) {\r\n return config;\r\n }\r\n const newConfig = {\r\n identities: this.identities.map(i => ({\r\n username: i.defaultUsername,\r\n address: i.address,\r\n apps: {},\r\n })),\r\n };\r\n this.walletConfig = newConfig;\r\n if (!skipUpload) {\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n return newConfig;\r\n }\r\n async updateConfig(gaiaConfig) {\r\n const publicKey = getPublicKeyFromPrivate(this.configPrivateKey);\r\n const encrypted = await encryptContent(JSON.stringify(this.walletConfig), { publicKey });\r\n await uploadToGaiaHub('wallet-config.json', encrypted, gaiaConfig);\r\n }\r\n async updateConfigWithAuth({ identityIndex, app, gaiaConfig, }) {\r\n const { walletConfig } = this;\r\n assertIsTruthy(walletConfig);\r\n this.identities.forEach((identity, index) => {\r\n const configIdentity = walletConfig.identities[index];\r\n if (configIdentity) {\r\n configIdentity.apps = configIdentity.apps || {};\r\n configIdentity.username = identity.defaultUsername;\r\n configIdentity.address = identity.address;\r\n walletConfig.identities[index] = configIdentity;\r\n }\r\n else {\r\n this.walletConfig?.identities.push({\r\n username: identity.defaultUsername,\r\n address: identity.address,\r\n apps: {},\r\n });\r\n }\r\n });\r\n const identity = walletConfig.identities[identityIndex];\r\n identity.apps = identity.apps || {};\r\n identity.apps[app.origin] = app;\r\n walletConfig.identities[identityIndex] = identity;\r\n this.walletConfig = walletConfig;\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n async updateConfigForReuseWarning({ gaiaConfig }) {\r\n assertIsTruthy(this.walletConfig);\r\n this.walletConfig.hideWarningForReusingIdentity = true;\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n getSigner() {\r\n return new WalletSigner({ privateKey: this.stacksPrivateKey });\r\n }\r\n}\r\nexport default Wallet;\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/bip39/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/decrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/mnemonic/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/address-derivation/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/signer.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/wallet/index.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/wallet/index.d.ts","writeByteOrderMark":false,"text":"import { bip32, BIP32Interface } from 'bitcoinjs-lib';\r\nimport { ChainID } from '@blockstack/stacks-transactions';\r\nimport { IdentityKeyPair } from '../utils';\r\nimport Identity from '../identity';\r\nimport { AllowedKeyEntropyBits } from '../mnemonic';\r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\nimport { WalletSigner } from './signer';\r\nexport interface ConfigApp {\r\n origin: string;\r\n scopes: string[];\r\n lastLoginAt: number;\r\n appIcon: string;\r\n name: string;\r\n}\r\ninterface ConfigIdentity {\r\n username?: string;\r\n address: string;\r\n apps: {\r\n [origin: string]: ConfigApp;\r\n };\r\n}\r\nexport interface WalletConfig {\r\n identities: ConfigIdentity[];\r\n hideWarningForReusingIdentity?: boolean;\r\n}\r\nexport interface ConstructorOptions {\r\n chain: ChainID;\r\n identityPublicKeychain: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityKeypairs: IdentityKeyPair[];\r\n identityAddresses: string[];\r\n encryptedBackupPhrase: string;\r\n identities: Identity[];\r\n configPrivateKey: string;\r\n stacksPrivateKey: string;\r\n walletConfig?: WalletConfig;\r\n}\r\nexport declare class Wallet {\r\n chain: ChainID;\r\n encryptedBackupPhrase: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityKeypairs: IdentityKeyPair[];\r\n identityAddresses: string[];\r\n identityPublicKeychain: string;\r\n identities: Identity[];\r\n configPrivateKey: string;\r\n stacksPrivateKey: string;\r\n walletConfig?: WalletConfig;\r\n constructor({ chain, encryptedBackupPhrase, identityPublicKeychain, bitcoinPublicKeychain, firstBitcoinAddress, identityKeypairs, identityAddresses, identities, configPrivateKey, stacksPrivateKey, walletConfig, }: ConstructorOptions);\r\n static generateFactory(bitsEntropy: AllowedKeyEntropyBits): (password: string, chain: ChainID) => Promise;\r\n static generate(password: string, chain: ChainID): Promise;\r\n static generateStrong(password: string, chain: ChainID): Promise;\r\n static restore(password: string, seedPhrase: string, chain: ChainID): Promise;\r\n static createAccount({ encryptedBackupPhrase, rootNode, chain, identitiesToGenerate, }: {\r\n encryptedBackupPhrase: string;\r\n rootNode: BIP32Interface;\r\n chain: ChainID;\r\n identitiesToGenerate?: number;\r\n }): Promise;\r\n /**\r\n * Restore all previously used identities. This is meant to be used when 'restoring' a wallet.\r\n * First, it will check for a `walletConfig`. If present, then we use that to determine how\r\n * many identities to generate, and auto-populate their username.\r\n *\r\n * If `walletConfig` is empty, then this is being restored from an authenticator that doesn't\r\n * support `walletConfig`. In that case, we will recursively generate identities, and check for\r\n * on-chain names.\r\n *\r\n */\r\n restoreIdentities({ rootNode, gaiaReadURL, }: {\r\n rootNode: bip32.BIP32Interface;\r\n gaiaReadURL: string;\r\n }): Promise;\r\n createNewIdentity(password: string): Promise;\r\n createGaiaConfig(gaiaHubUrl: string): Promise;\r\n fetchConfig(gaiaConfig: GaiaHubConfig): Promise;\r\n getOrCreateConfig({ gaiaConfig, skipUpload, }: {\r\n gaiaConfig: GaiaHubConfig;\r\n skipUpload?: boolean;\r\n }): Promise;\r\n updateConfig(gaiaConfig: GaiaHubConfig): Promise;\r\n updateConfigWithAuth({ identityIndex, app, gaiaConfig, }: {\r\n identityIndex: number;\r\n app: ConfigApp;\r\n gaiaConfig: GaiaHubConfig;\r\n }): Promise;\r\n updateConfigForReuseWarning({ gaiaConfig }: {\r\n gaiaConfig: GaiaHubConfig;\r\n }): Promise;\r\n getSigner(): WalletSigner;\r\n}\r\nexport default Wallet;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..a38d6780d --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +{"code":"import { decrypt as triplesecDecrypt } from 'triplesec';\r\nimport { decryptMnemonic } from 'blockstack/lib/encryption/wallet';\r\n/**\r\n * Decrypt an encrypted mnemonic phrase with a password.\r\n * Legacy triplesec encrypted payloads are also supported.\r\n * @param data - Buffer or hex-encoded string of the encrypted mnemonic\r\n * @param password - Password for data\r\n * @return the raw mnemonic phrase\r\n */\r\nexport async function decrypt(dataBuffer, password) {\r\n const result = await decryptMnemonic(dataBuffer, password, triplesecDecrypt);\r\n return result;\r\n}\r\n//# sourceMappingURL=decrypt.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@types/triplesec/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/wallet.d.ts"],"map":"{\"version\":3,\"file\":\"decrypt.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/encryption/decrypt.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAA2B,EAAE,QAAgB;IACzE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC7E,OAAO,MAAM,CAAC;AAChB,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/encryption/decrypt.d.ts","writeByteOrderMark":false,"text":"/// \r\n/**\r\n * Decrypt an encrypted mnemonic phrase with a password.\r\n * Legacy triplesec encrypted payloads are also supported.\r\n * @param data - Buffer or hex-encoded string of the encrypted mnemonic\r\n * @param password - Password for data\r\n * @return the raw mnemonic phrase\r\n */\r\nexport declare function decrypt(dataBuffer: Buffer | string, password: string): Promise;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..afbcca7e2 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +{"code":"import IdentityAddressOwnerNode from '../nodes/identity-address-owner-node';\r\nimport { createSha2Hash } from 'blockstack/lib/encryption/sha2Hash';\r\nimport { publicKeyToAddress } from 'blockstack/lib/keys';\r\nimport { parseZoneFile } from 'zone-file';\r\nimport Identity from '../identity';\r\nimport { AssertionError } from 'assert';\r\nimport { Subdomains, registrars } from '../profiles';\r\nconst IDENTITY_KEYCHAIN = 888;\r\nconst BLOCKSTACK_ON_BITCOIN = 0;\r\nexport function getIdentityPrivateKeychain(rootNode) {\r\n return rootNode.deriveHardened(IDENTITY_KEYCHAIN).deriveHardened(BLOCKSTACK_ON_BITCOIN);\r\n}\r\nconst EXTERNAL_ADDRESS = 'EXTERNAL_ADDRESS';\r\nconst CHANGE_ADDRESS = 'CHANGE_ADDRESS';\r\nexport function getBitcoinPrivateKeychain(rootNode) {\r\n const BIP_44_PURPOSE = 44;\r\n const BITCOIN_COIN_TYPE = 0;\r\n const ACCOUNT_INDEX = 0;\r\n return rootNode\r\n .deriveHardened(BIP_44_PURPOSE)\r\n .deriveHardened(BITCOIN_COIN_TYPE)\r\n .deriveHardened(ACCOUNT_INDEX);\r\n}\r\nexport function getBitcoinAddressNode(bitcoinKeychain, addressIndex = 0, chainType = EXTERNAL_ADDRESS) {\r\n let chain = null;\r\n if (chainType === EXTERNAL_ADDRESS) {\r\n chain = 0;\r\n }\r\n else if (chainType === CHANGE_ADDRESS) {\r\n chain = 1;\r\n }\r\n else {\r\n throw new Error('Invalid chain type');\r\n }\r\n return bitcoinKeychain.derive(chain).derive(addressIndex);\r\n}\r\nexport async function getIdentityOwnerAddressNode(identityPrivateKeychain, identityIndex = 0) {\r\n if (identityPrivateKeychain.isNeutered()) {\r\n throw new Error('You need the private key to generate identity addresses');\r\n }\r\n const publicKeyHex = Buffer.from(identityPrivateKeychain.publicKey.toString('hex'));\r\n const sha2Hash = await createSha2Hash();\r\n const saltData = await sha2Hash.digest(publicKeyHex, 'sha256');\r\n const salt = saltData.toString('hex');\r\n return new IdentityAddressOwnerNode(identityPrivateKeychain.deriveHardened(identityIndex), salt);\r\n}\r\nexport function getAddress(node) {\r\n return publicKeyToAddress(node.publicKey);\r\n}\r\nexport function deriveIdentityKeyPair(identityOwnerAddressNode) {\r\n const address = identityOwnerAddressNode.getAddress();\r\n const identityKey = identityOwnerAddressNode.getIdentityKey();\r\n const identityKeyID = identityOwnerAddressNode.getIdentityKeyID();\r\n const appsNode = identityOwnerAddressNode.getAppsNode();\r\n const stxNode = identityOwnerAddressNode.getSTXNode();\r\n const keyPair = {\r\n key: identityKey,\r\n keyID: identityKeyID,\r\n address,\r\n appsNodeKey: appsNode.toBase58(),\r\n stxNodeKey: stxNode.toBase58(),\r\n salt: identityOwnerAddressNode.getSalt(),\r\n };\r\n return keyPair;\r\n}\r\nexport async function getBlockchainIdentities(rootNode, identitiesToGenerate) {\r\n const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode);\r\n const bitcoinPrivateKeychainNode = getBitcoinPrivateKeychain(rootNode);\r\n const identityPublicKeychainNode = identityPrivateKeychainNode.neutered();\r\n const identityPublicKeychain = identityPublicKeychainNode.toBase58();\r\n const bitcoinPublicKeychainNode = bitcoinPrivateKeychainNode.neutered();\r\n const bitcoinPublicKeychain = bitcoinPublicKeychainNode.toBase58();\r\n const firstBitcoinAddress = getAddress(getBitcoinAddressNode(bitcoinPublicKeychainNode));\r\n const identityAddresses = [];\r\n const identityKeypairs = [];\r\n const identities = [];\r\n // We pre-generate a number of identity addresses so that we\r\n // don't have to prompt the user for the password on each new profile\r\n for (let addressIndex = 0; addressIndex < identitiesToGenerate; addressIndex++) {\r\n const identity = await makeIdentity(rootNode, addressIndex);\r\n identities.push(identity);\r\n identityKeypairs.push(identity.keyPair);\r\n identityAddresses.push(identity.address);\r\n }\r\n return {\r\n identityPublicKeychain,\r\n bitcoinPublicKeychain,\r\n firstBitcoinAddress,\r\n identityAddresses,\r\n identityKeypairs,\r\n identities,\r\n };\r\n}\r\nexport const makeIdentity = async (rootNode, index) => {\r\n const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode);\r\n const identityOwnerAddressNode = await getIdentityOwnerAddressNode(identityPrivateKeychainNode, index);\r\n const identityKeyPair = deriveIdentityKeyPair(identityOwnerAddressNode);\r\n const identity = new Identity({\r\n keyPair: identityKeyPair,\r\n address: identityKeyPair.address,\r\n usernames: [],\r\n });\r\n return identity;\r\n};\r\nexport function assertIsTruthy(val) {\r\n if (!val) {\r\n throw new AssertionError({ expected: true, actual: val });\r\n }\r\n}\r\nexport var IdentityNameValidityError;\r\n(function (IdentityNameValidityError) {\r\n IdentityNameValidityError[\"MINIMUM_LENGTH\"] = \"error_minimum_length\";\r\n IdentityNameValidityError[\"MAXIMUM_LENGTH\"] = \"error_maximum_length\";\r\n IdentityNameValidityError[\"ILLEGAL_CHARACTER\"] = \"error_illegal_character\";\r\n IdentityNameValidityError[\"UNAVAILABLE\"] = \"error_name_unavailable\";\r\n})(IdentityNameValidityError || (IdentityNameValidityError = {}));\r\nconst containsLegalCharacters = (name) => /^[a-z0-9_]+$/.test(name);\r\nexport const validateSubdomainFormat = (identityName) => {\r\n const nameLength = identityName.length;\r\n if (nameLength < 8) {\r\n return IdentityNameValidityError.MINIMUM_LENGTH;\r\n }\r\n if (nameLength > 37) {\r\n return IdentityNameValidityError.MAXIMUM_LENGTH;\r\n }\r\n if (!containsLegalCharacters(identityName)) {\r\n return IdentityNameValidityError.ILLEGAL_CHARACTER;\r\n }\r\n return null;\r\n};\r\nexport const validateSubdomainAvailability = async (name, subdomain = Subdomains.BLOCKSTACK) => {\r\n const url = `${registrars[subdomain].apiUrl}/${name.toLowerCase()}.${subdomain}`;\r\n const resp = await fetch(url);\r\n const data = await resp.json();\r\n return data;\r\n};\r\n/**\r\n * Restore identities by recursively making a new identity, and checking if it has a username.\r\n *\r\n * As soon as a username is not found for an identity, the recursion stops.\r\n */\r\nexport const recursiveRestoreIdentities = async ({ rootNode, index = 1, identities = [], }) => {\r\n const identity = await makeIdentity(rootNode, index);\r\n await identity.refresh();\r\n if (identity.defaultUsername) {\r\n identities.push(identity);\r\n return recursiveRestoreIdentities({ rootNode, index: index + 1, identities });\r\n }\r\n return identities;\r\n};\r\n/**\r\n * Validate the format and availability of a subdomain. Will return an error of enum\r\n * IdentityNameValidityError if an error is present. If no errors are found, will return null.\r\n * @param name the subdomain to be registered\r\n * @param subdomain a valid Subdomains enum\r\n */\r\nexport const validateSubdomain = async (name, subdomain = Subdomains.BLOCKSTACK) => {\r\n const error = validateSubdomainFormat(name);\r\n if (error) {\r\n return error;\r\n }\r\n try {\r\n const data = await validateSubdomainAvailability(name, subdomain);\r\n if (data.status !== 'available') {\r\n return IdentityNameValidityError.UNAVAILABLE;\r\n }\r\n }\r\n catch (error) {\r\n return IdentityNameValidityError.UNAVAILABLE;\r\n }\r\n return null;\r\n};\r\nexport const getProfileURLFromZoneFile = async (name) => {\r\n const url = `https://core.blockstack.org/v1/names/${name}`;\r\n const res = await fetch(url);\r\n if (res.ok) {\r\n const nameInfo = await res.json();\r\n const zone = parseZoneFile(nameInfo.zonefile);\r\n return zone.uri[0].target;\r\n }\r\n return;\r\n};\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/nodes/identity-address-owner-node.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/sha2Hash.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/zone-file/lib/index.js","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/assert/assert.js","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/index.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/utils/index.d.ts","writeByteOrderMark":false,"text":"import { BIP32Interface } from 'bitcoinjs-lib';\r\nimport IdentityAddressOwnerNode from '../nodes/identity-address-owner-node';\r\nimport Identity from '../identity';\r\nimport { Subdomains } from '../profiles';\r\nexport declare function getIdentityPrivateKeychain(rootNode: BIP32Interface): BIP32Interface;\r\nexport declare function getBitcoinPrivateKeychain(rootNode: BIP32Interface): BIP32Interface;\r\nexport declare function getBitcoinAddressNode(bitcoinKeychain: BIP32Interface, addressIndex?: number, chainType?: string): BIP32Interface;\r\nexport declare function getIdentityOwnerAddressNode(identityPrivateKeychain: BIP32Interface, identityIndex?: number): Promise;\r\nexport declare function getAddress(node: BIP32Interface): string;\r\nexport interface IdentityKeyPair {\r\n key: string;\r\n keyID: string;\r\n address: string;\r\n appsNodeKey: string;\r\n stxNodeKey: string;\r\n salt: string;\r\n}\r\nexport declare function deriveIdentityKeyPair(identityOwnerAddressNode: IdentityAddressOwnerNode): IdentityKeyPair;\r\nexport declare function getBlockchainIdentities(rootNode: BIP32Interface, identitiesToGenerate: number): Promise<{\r\n identityPublicKeychain: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityAddresses: string[];\r\n identityKeypairs: IdentityKeyPair[];\r\n identities: Identity[];\r\n}>;\r\nexport declare const makeIdentity: (rootNode: BIP32Interface, index: number) => Promise;\r\nexport declare function assertIsTruthy(val: any): asserts val is NonNullable;\r\nexport declare enum IdentityNameValidityError {\r\n MINIMUM_LENGTH = \"error_minimum_length\",\r\n MAXIMUM_LENGTH = \"error_maximum_length\",\r\n ILLEGAL_CHARACTER = \"error_illegal_character\",\r\n UNAVAILABLE = \"error_name_unavailable\"\r\n}\r\nexport declare const validateSubdomainFormat: (identityName: string) => IdentityNameValidityError | null;\r\nexport declare const validateSubdomainAvailability: (name: string, subdomain?: Subdomains) => Promise;\r\ninterface RecursiveMakeIdentitiesOptions {\r\n rootNode: BIP32Interface;\r\n index?: number;\r\n identities?: Identity[];\r\n}\r\n/**\r\n * Restore identities by recursively making a new identity, and checking if it has a username.\r\n *\r\n * As soon as a username is not found for an identity, the recursion stops.\r\n */\r\nexport declare const recursiveRestoreIdentities: ({ rootNode, index, identities, }: RecursiveMakeIdentitiesOptions) => Promise;\r\n/**\r\n * Validate the format and availability of a subdomain. Will return an error of enum\r\n * IdentityNameValidityError if an error is present. If no errors are found, will return null.\r\n * @param name the subdomain to be registered\r\n * @param subdomain a valid Subdomains enum\r\n */\r\nexport declare const validateSubdomain: (name: string, subdomain?: Subdomains) => Promise;\r\nexport declare const getProfileURLFromZoneFile: (name: string) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..aaef254cd --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +{"code":"import { getLegacyAppNode } from 'blockstack/lib/wallet';\r\nimport { publicKeyToAddress } from 'blockstack/lib/keys';\r\nimport { getAddress } from '../utils';\r\nconst APPS_NODE_INDEX = 0;\r\nconst SIGNING_NODE_INDEX = 1;\r\nconst ENCRYPTION_NODE_INDEX = 2;\r\nconst STX_NODE_INDEX = 6;\r\nexport default class IdentityAddressOwnerNode {\r\n constructor(ownerHdNode, salt) {\r\n this.hdNode = ownerHdNode;\r\n this.salt = salt;\r\n }\r\n getNode() {\r\n return this.hdNode;\r\n }\r\n getSalt() {\r\n return this.salt;\r\n }\r\n getIdentityKey() {\r\n if (!this.hdNode.privateKey) {\r\n throw new Error('Node does not have private key');\r\n }\r\n return this.hdNode.privateKey.toString('hex');\r\n }\r\n getIdentityKeyID() {\r\n return this.hdNode.publicKey.toString('hex');\r\n }\r\n getAppsNode() {\r\n return this.hdNode.deriveHardened(APPS_NODE_INDEX);\r\n }\r\n getAddress() {\r\n return getAddress(this.hdNode);\r\n }\r\n getEncryptionNode() {\r\n return this.hdNode.deriveHardened(ENCRYPTION_NODE_INDEX);\r\n }\r\n getSigningNode() {\r\n return this.hdNode.deriveHardened(SIGNING_NODE_INDEX);\r\n }\r\n getSTXNode() {\r\n return this.hdNode.deriveHardened(STX_NODE_INDEX);\r\n }\r\n getAppNode(appDomain) {\r\n return getLegacyAppNode(this.hdNode, this.salt, appDomain);\r\n }\r\n getAppPrivateKey(appDomain) {\r\n const appNode = this.getAppNode(appDomain);\r\n if (!appNode.privateKey) {\r\n throw new Error('App node does not have private key');\r\n }\r\n return appNode.privateKey.toString('hex');\r\n }\r\n getAppAddress(appDomain) {\r\n const appNode = this.getAppNode(appDomain);\r\n return publicKeyToAddress(appNode.publicKey);\r\n }\r\n}\r\n//# sourceMappingURL=identity-address-owner-node.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/wallet.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts"],"map":"{\"version\":3,\"file\":\"identity-address-owner-node.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/nodes/identity-address-owner-node.ts\"],\"names\":[],\"mappings\":\"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAK3C,YAAY,WAA2B,EAAE,IAAY;QACnD,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACnD;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;IAED,UAAU;QACR,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACxD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,gBAAgB,CAAC,SAAiB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACvD;QACD,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;CACF\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/nodes/identity-address-owner-node.d.ts","writeByteOrderMark":false,"text":"import { BIP32Interface } from 'bitcoinjs-lib';\r\nexport default class IdentityAddressOwnerNode {\r\n hdNode: BIP32Interface;\r\n salt: string;\r\n constructor(ownerHdNode: BIP32Interface, salt: string);\r\n getNode(): BIP32Interface;\r\n getSalt(): string;\r\n getIdentityKey(): string;\r\n getIdentityKeyID(): string;\r\n getAppsNode(): BIP32Interface;\r\n getAddress(): string;\r\n getEncryptionNode(): BIP32Interface;\r\n getSigningNode(): BIP32Interface;\r\n getSTXNode(): BIP32Interface;\r\n getAppNode(appDomain: string): BIP32Interface;\r\n getAppPrivateKey(appDomain: string): string;\r\n getAppAddress(appDomain: string): string;\r\n}\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..1104190d1 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +{"code":"import { signProfileToken, wrapProfileToken, connectToGaiaHub, makeProfileZoneFile, } from 'blockstack';\r\nimport { uploadToGaiaHub } from './utils/gaia';\r\nconst PERSON_TYPE = 'Person';\r\nconst CONTEXT = 'http://schema.org';\r\nconst IMAGE_TYPE = 'ImageObject';\r\nexport const DEFAULT_PROFILE = {\r\n '@type': 'Person',\r\n '@context': 'http://schema.org',\r\n};\r\nconst DEFAULT_PROFILE_FILE_NAME = 'profile.json';\r\nexport var Subdomains;\r\n(function (Subdomains) {\r\n Subdomains[\"TEST\"] = \"test-personal.id\";\r\n Subdomains[\"BLOCKSTACK\"] = \"id.blockstack\";\r\n})(Subdomains || (Subdomains = {}));\r\nexport const registrars = {\r\n [Subdomains.TEST]: {\r\n registerUrl: 'https://test-registrar.blockstack.org/register',\r\n apiUrl: 'https://test-registrar.blockstack.org/v1/names',\r\n },\r\n [Subdomains.BLOCKSTACK]: {\r\n registerUrl: 'https://registrar.blockstack.org/register',\r\n apiUrl: 'https://registrar.blockstack.org/v1/names',\r\n },\r\n};\r\nexport function signProfileForUpload(profile, keypair) {\r\n const privateKey = keypair.key;\r\n const publicKey = keypair.keyID;\r\n const token = signProfileToken(profile, privateKey, { publicKey });\r\n const tokenRecord = wrapProfileToken(token);\r\n const tokenRecords = [tokenRecord];\r\n return JSON.stringify(tokenRecords, null, 2);\r\n}\r\nexport async function uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig) {\r\n const identityHubConfig = gaiaHubConfig || (await connectToGaiaHub(gaiaHubUrl, identity.keyPair.key));\r\n const uploadResponse = await uploadToGaiaHub(DEFAULT_PROFILE_FILE_NAME, signedProfileTokenData, identityHubConfig);\r\n return uploadResponse;\r\n}\r\nconst sendUsernameToRegistrar = async ({ username, subdomain, zoneFile, identity, }) => {\r\n const { registerUrl } = registrars[subdomain];\r\n const registrationRequestBody = JSON.stringify({\r\n name: username,\r\n owner_address: identity.address,\r\n zonefile: zoneFile,\r\n });\r\n const requestHeaders = {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n };\r\n const response = await fetch(registerUrl, {\r\n method: 'POST',\r\n headers: requestHeaders,\r\n body: registrationRequestBody,\r\n });\r\n if (!response.ok) {\r\n return Promise.reject({\r\n error: 'Failed to register username',\r\n status: response.status,\r\n });\r\n }\r\n return response.json();\r\n};\r\n/**\r\n * Register a subdomain for a given identity\r\n */\r\nexport const registerSubdomain = async ({ identity, gaiaHubUrl, username, subdomain, }) => {\r\n const profile = identity.profile || DEFAULT_PROFILE;\r\n const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair);\r\n const profileUrl = await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData);\r\n const fullUsername = `${username}.${subdomain}`;\r\n const zoneFile = makeProfileZoneFile(fullUsername, profileUrl);\r\n await sendUsernameToRegistrar({\r\n username,\r\n subdomain,\r\n zoneFile,\r\n identity,\r\n });\r\n identity.defaultUsername = fullUsername;\r\n identity.usernames.push(fullUsername);\r\n return identity;\r\n};\r\nexport const signAndUploadProfile = async ({ profile, gaiaHubUrl, identity, gaiaHubConfig, }) => {\r\n const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair);\r\n await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig);\r\n};\r\nexport const fetchProfile = async ({ identity, gaiaUrl, }) => {\r\n try {\r\n const url = await identity.profileUrl(gaiaUrl);\r\n const res = await fetch(url);\r\n if (res.ok) {\r\n const json = await res.json();\r\n const { decodedToken } = json[0];\r\n return decodedToken.payload?.claim;\r\n }\r\n if (res.status === 404) {\r\n return null;\r\n }\r\n throw new Error('Network error when fetching profile');\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n};\r\n//# sourceMappingURL=profiles.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts"],"map":"{\"version\":3,\"file\":\"profiles.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/profiles.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/profiles.d.ts","writeByteOrderMark":false,"text":"import { IdentityKeyPair } from './utils';\r\nimport Identity from './identity';\r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\ndeclare const PERSON_TYPE = \"Person\";\r\ndeclare const CONTEXT = \"http://schema.org\";\r\ndeclare const IMAGE_TYPE = \"ImageObject\";\r\nexport interface ProfileImage {\r\n '@type': typeof IMAGE_TYPE;\r\n name: string;\r\n contentUrl: string;\r\n}\r\nexport interface Profile {\r\n '@type': typeof PERSON_TYPE;\r\n '@context': typeof CONTEXT;\r\n apps?: {\r\n [origin: string]: string;\r\n };\r\n appsMeta?: {\r\n [origin: string]: {\r\n publicKey: string;\r\n storage: string;\r\n };\r\n };\r\n name?: string;\r\n image?: ProfileImage[];\r\n [key: string]: any;\r\n}\r\nexport declare const DEFAULT_PROFILE: Profile;\r\nexport declare enum Subdomains {\r\n TEST = \"test-personal.id\",\r\n BLOCKSTACK = \"id.blockstack\"\r\n}\r\nexport declare const registrars: {\r\n \"test-personal.id\": {\r\n registerUrl: string;\r\n apiUrl: string;\r\n };\r\n \"id.blockstack\": {\r\n registerUrl: string;\r\n apiUrl: string;\r\n };\r\n};\r\nexport declare function signProfileForUpload(profile: Profile, keypair: IdentityKeyPair): string;\r\nexport declare function uploadProfile(gaiaHubUrl: string, identity: Identity, signedProfileTokenData: string, gaiaHubConfig?: GaiaHubConfig): Promise;\r\ninterface RegisterParams {\r\n identity: Identity;\r\n /** The gaia hub URL to use for profile.json upload */\r\n gaiaHubUrl: string;\r\n /** The username portion of this subdomain, i.e. only the portion of the name before any periods */\r\n username: string;\r\n /** The \"domain\" used for this subdomain. Can be any of the `Subdomains` enum. */\r\n subdomain: Subdomains;\r\n}\r\n/**\r\n * Register a subdomain for a given identity\r\n */\r\nexport declare const registerSubdomain: ({ identity, gaiaHubUrl, username, subdomain, }: RegisterParams) => Promise;\r\nexport declare const signAndUploadProfile: ({ profile, gaiaHubUrl, identity, gaiaHubConfig, }: {\r\n profile: Profile;\r\n gaiaHubUrl: string;\r\n identity: Identity;\r\n gaiaHubConfig?: GaiaHubConfig | undefined;\r\n}) => Promise;\r\nexport declare const fetchProfile: ({ identity, gaiaUrl, }: {\r\n identity: Identity;\r\n gaiaUrl: string;\r\n}) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..7edbdd5e7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +{"code":"import { bip32, ECPair } from 'bitcoinjs-lib';\r\nimport { getPublicKeyFromPrivate } from 'blockstack/lib/keys';\r\nimport { makeAuthResponse } from 'blockstack/lib/auth/authMessages';\r\nimport { getProfileURLFromZoneFile } from './utils';\r\nimport { makeGaiaAssociationToken, DEFAULT_GAIA_HUB, getHubInfo, connectToGaiaHubWithConfig, } from './utils/gaia';\r\nimport IdentityAddressOwnerNode from './nodes/identity-address-owner-node';\r\nimport { fetchProfile, DEFAULT_PROFILE, signAndUploadProfile } from './profiles';\r\nimport { ecPairToAddress } from 'blockstack';\r\nexport class Identity {\r\n constructor({ keyPair, address, usernames, defaultUsername, profile, }) {\r\n this.keyPair = keyPair;\r\n this.address = address;\r\n this.usernames = usernames || [];\r\n this.defaultUsername = defaultUsername;\r\n this.profile = profile;\r\n }\r\n async makeAuthResponse({ appDomain, gaiaUrl, transitPublicKey, scopes = [], stxAddress, }) {\r\n const appPrivateKey = this.appPrivateKey(appDomain);\r\n const hubInfo = await getHubInfo(gaiaUrl);\r\n const profileUrl = await this.profileUrl(hubInfo.read_url_prefix);\r\n const profile = (await fetchProfile({ identity: this, gaiaUrl: hubInfo.read_url_prefix })) || DEFAULT_PROFILE;\r\n if (scopes.includes('publish_data')) {\r\n if (!profile.apps) {\r\n profile.apps = {};\r\n }\r\n const challengeSigner = ECPair.fromPrivateKey(Buffer.from(appPrivateKey, 'hex'));\r\n const storageUrl = `${hubInfo.read_url_prefix}${ecPairToAddress(challengeSigner)}/`;\r\n profile.apps[appDomain] = storageUrl;\r\n if (!profile.appsMeta) {\r\n profile.appsMeta = {};\r\n }\r\n profile.appsMeta[appDomain] = {\r\n storage: storageUrl,\r\n publicKey: challengeSigner.publicKey.toString('hex'),\r\n };\r\n const gaiaHubConfig = connectToGaiaHubWithConfig({\r\n hubInfo,\r\n privateKey: this.keyPair.key,\r\n gaiaHubUrl: gaiaUrl,\r\n });\r\n await signAndUploadProfile({ profile, identity: this, gaiaHubUrl: gaiaUrl, gaiaHubConfig });\r\n }\r\n this.profile = profile;\r\n const compressedAppPublicKey = getPublicKeyFromPrivate(appPrivateKey.slice(0, 64));\r\n const associationToken = makeGaiaAssociationToken(this.keyPair.key, compressedAppPublicKey);\r\n return makeAuthResponse(this.keyPair.key, {\r\n ...(this.profile || {}),\r\n stxAddress,\r\n }, this.defaultUsername || '', {\r\n profileUrl,\r\n }, undefined, appPrivateKey, undefined, transitPublicKey, gaiaUrl, undefined, associationToken);\r\n }\r\n appPrivateKey(appDomain) {\r\n const { salt, appsNodeKey } = this.keyPair;\r\n const appsNode = new IdentityAddressOwnerNode(bip32.fromBase58(appsNodeKey), salt);\r\n return appsNode.getAppPrivateKey(appDomain);\r\n }\r\n async profileUrl(gaiaUrl) {\r\n if (this.defaultUsername) {\r\n try {\r\n const url = await getProfileURLFromZoneFile(this.defaultUsername);\r\n if (url)\r\n return url;\r\n }\r\n catch (error) {\r\n if (process.env.NODE_ENV !== 'test') {\r\n console.warn('Error fetching profile URL from zone file:', error);\r\n }\r\n }\r\n }\r\n return `${gaiaUrl}${this.address}/profile.json`;\r\n }\r\n async fetchNames() {\r\n const getNamesUrl = `https://core.blockstack.org/v1/addresses/bitcoin/${this.address}`;\r\n const res = await fetch(getNamesUrl);\r\n const data = await res.json();\r\n const { names } = data;\r\n return names;\r\n }\r\n /**\r\n * Fetch existing information related to this identity, like username and profile information\r\n */\r\n async refresh(opts = { gaiaUrl: DEFAULT_GAIA_HUB }) {\r\n try {\r\n const names = await this.fetchNames();\r\n if (names) {\r\n if (names[0] && !this.defaultUsername) {\r\n this.defaultUsername = names[0];\r\n }\r\n names.forEach(name => {\r\n const existingIndex = this.usernames.findIndex(u => u === name);\r\n if (existingIndex === -1) {\r\n this.usernames.push(name);\r\n }\r\n });\r\n }\r\n const profile = await fetchProfile({ identity: this, gaiaUrl: opts.gaiaUrl });\r\n if (profile) {\r\n this.profile = profile;\r\n }\r\n return;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n }\r\n}\r\nexport default Identity;\r\n//# sourceMappingURL=identity.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/auth/authMessages.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/nodes/identity-address-owner-node.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"identity.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/identity.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/identity.d.ts","writeByteOrderMark":false,"text":"import { IdentityKeyPair } from './utils/index';\r\nimport { Profile } from './profiles';\r\ninterface IdentityConstructorOptions {\r\n keyPair: IdentityKeyPair;\r\n address: string;\r\n usernames?: string[];\r\n defaultUsername?: string;\r\n profile?: Profile;\r\n}\r\ninterface RefreshOptions {\r\n gaiaUrl: string;\r\n}\r\nexport declare class Identity {\r\n keyPair: IdentityKeyPair;\r\n address: string;\r\n defaultUsername?: string;\r\n usernames: string[];\r\n profile?: Profile;\r\n constructor({ keyPair, address, usernames, defaultUsername, profile, }: IdentityConstructorOptions);\r\n makeAuthResponse({ appDomain, gaiaUrl, transitPublicKey, scopes, stxAddress, }: {\r\n appDomain: string;\r\n gaiaUrl: string;\r\n transitPublicKey: string;\r\n scopes?: string[];\r\n stxAddress?: string;\r\n }): Promise;\r\n appPrivateKey(appDomain: string): string;\r\n profileUrl(gaiaUrl: string): Promise;\r\n fetchNames(): Promise;\r\n /**\r\n * Fetch existing information related to this identity, like username and profile information\r\n */\r\n refresh(opts?: RefreshOptions): Promise;\r\n}\r\nexport default Identity;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..d1e50fabe --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +{"code":"import { makeContractCall, makeContractDeploy, StacksTestnet, makeSTXTokenTransfer, getAddressFromPrivateKey, } from '@blockstack/stacks-transactions';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { assertIsTruthy } from '../utils';\r\nimport BN from 'bn.js';\r\nexport class WalletSigner {\r\n constructor({ privateKey }) {\r\n this.privateKey = privateKey;\r\n }\r\n getSTXAddress(version) {\r\n return getAddressFromPrivateKey(this.getSTXPrivateKey(), version);\r\n }\r\n getSTXPrivateKey() {\r\n const node = bip32.fromBase58(this.privateKey);\r\n assertIsTruthy(node.privateKey);\r\n return node.privateKey;\r\n }\r\n getNetwork() {\r\n const network = new StacksTestnet();\r\n network.coreApiUrl = 'https://sidecar.staging.blockstack.xyz';\r\n return network;\r\n }\r\n async fetchAccount({ version, rpcClient, }) {\r\n const address = this.getSTXAddress(version);\r\n const account = await rpcClient.fetchAccount(address);\r\n return account;\r\n }\r\n async signContractCall({ contractName, contractAddress, functionName, functionArgs, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeContractCall({\r\n contractAddress,\r\n contractName,\r\n functionName,\r\n functionArgs,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n nonce: new BN(nonce),\r\n network: this.getNetwork(),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n async signContractDeploy({ contractName, codeBody, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeContractDeploy({\r\n contractName,\r\n codeBody: codeBody,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n network: this.getNetwork(),\r\n nonce: new BN(nonce),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n async signSTXTransfer({ recipient, amount, memo, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeSTXTokenTransfer({\r\n recipient,\r\n amount: new BN(amount),\r\n memo,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n network: this.getNetwork(),\r\n nonce: new BN(nonce),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n}\r\n//# sourceMappingURL=signer.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/rpc-client/dist/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@types/bn.js/index.d.ts"],"map":"{\"version\":3,\"file\":\"signer.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/wallet/signer.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/wallet/signer.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { TransactionVersion, ClarityValue, StacksTestnet, PostConditionMode, PostCondition, StacksNetwork } from '@blockstack/stacks-transactions';\r\nimport RPCClient from '@blockstack/rpc-client';\r\ninterface ContractCallOptions {\r\n contractName: string;\r\n contractAddress: string;\r\n functionName: string;\r\n functionArgs: ClarityValue[];\r\n version: TransactionVersion;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\ninterface ContractDeployOptions {\r\n contractName: string;\r\n codeBody: string;\r\n version: TransactionVersion;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\ninterface STXTransferOptions {\r\n recipient: string;\r\n amount: string;\r\n memo?: string;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\nexport declare class WalletSigner {\r\n privateKey: string;\r\n constructor({ privateKey }: {\r\n privateKey: string;\r\n });\r\n getSTXAddress(version: TransactionVersion): string;\r\n getSTXPrivateKey(): Buffer;\r\n getNetwork(): StacksTestnet;\r\n fetchAccount({ version, rpcClient, }: {\r\n version: TransactionVersion;\r\n rpcClient: RPCClient;\r\n }): Promise;\r\n signContractCall({ contractName, contractAddress, functionName, functionArgs, nonce, postConditionMode, postConditions, }: ContractCallOptions): Promise;\r\n signContractDeploy({ contractName, codeBody, nonce, postConditionMode, postConditions, }: ContractDeployOptions): Promise;\r\n signSTXTransfer({ recipient, amount, memo, nonce, postConditionMode, postConditions, }: STXTransferOptions): Promise;\r\n}\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..796e4be36 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +{"code":"import { TokenSigner } from 'jsontokens';\r\nimport { getPublicKeyFromPrivate } from 'blockstack/lib/keys';\r\nimport { randomBytes } from 'blockstack/lib/encryption/cryptoRandom';\r\nimport { ecPairToAddress, hexStringToECPair } from 'blockstack';\r\nexport const DEFAULT_GAIA_HUB = 'https://gaia.blockstack.org/hub/';\r\nexport const getHubInfo = async (hubUrl) => {\r\n const response = await fetch(`${hubUrl}/hub_info`);\r\n const data = await response.json();\r\n return data;\r\n};\r\nexport const getHubPrefix = async (hubUrl) => {\r\n const { read_url_prefix } = await getHubInfo(hubUrl);\r\n return read_url_prefix;\r\n};\r\nexport const makeGaiaAssociationToken = (secretKeyHex, childPublicKeyHex) => {\r\n const LIFETIME_SECONDS = 365 * 24 * 3600;\r\n const signerKeyHex = secretKeyHex.slice(0, 64);\r\n const compressedPublicKeyHex = getPublicKeyFromPrivate(signerKeyHex);\r\n const salt = randomBytes(16).toString('hex');\r\n const payload = {\r\n childToAssociate: childPublicKeyHex,\r\n iss: compressedPublicKeyHex,\r\n exp: LIFETIME_SECONDS + new Date().getTime() / 1000,\r\n iat: Date.now() / 1000,\r\n salt,\r\n };\r\n const tokenSigner = new TokenSigner('ES256K', signerKeyHex);\r\n const token = tokenSigner.sign(payload);\r\n return token;\r\n};\r\nexport const connectToGaiaHubWithConfig = ({ hubInfo, privateKey, gaiaHubUrl, }) => {\r\n const readURL = hubInfo.read_url_prefix;\r\n const token = makeGaiaAuthToken({ hubInfo, privateKey, gaiaHubUrl });\r\n const address = ecPairToAddress(hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')));\r\n return {\r\n url_prefix: readURL,\r\n max_file_upload_size_megabytes: 100,\r\n address,\r\n token,\r\n server: gaiaHubUrl,\r\n };\r\n};\r\n/**\r\n * When you already know the Gaia read URL, make a Gaia config that doesn't have to fetch `/hub_info`\r\n */\r\nexport const makeReadOnlyGaiaConfig = ({ readURL, privateKey, }) => {\r\n const address = ecPairToAddress(hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')));\r\n return {\r\n url_prefix: readURL,\r\n max_file_upload_size_megabytes: 100,\r\n address,\r\n token: 'not_used',\r\n server: 'not_used',\r\n };\r\n};\r\nconst makeGaiaAuthToken = ({ hubInfo, privateKey, gaiaHubUrl }) => {\r\n const challengeText = hubInfo.challenge_text;\r\n const iss = getPublicKeyFromPrivate(privateKey);\r\n const salt = randomBytes(16).toString('hex');\r\n const payload = {\r\n gaiaHubUrl,\r\n iss,\r\n salt,\r\n };\r\n if (challengeText) {\r\n payload.gaiaChallenge = challengeText;\r\n }\r\n const token = new TokenSigner('ES256K', privateKey).sign(payload);\r\n return `v1:${token}`;\r\n};\r\nexport const uploadToGaiaHub = async (filename, contents, hubConfig) => {\r\n const contentType = 'application/json';\r\n const response = await fetch(`${hubConfig.server}/store/${hubConfig.address}/${filename}`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': contentType,\r\n Authorization: `bearer ${hubConfig.token}`,\r\n },\r\n body: contents,\r\n referrer: 'no-referrer',\r\n referrerPolicy: 'no-referrer',\r\n });\r\n const { publicURL } = await response.json();\r\n return publicURL;\r\n};\r\n//# sourceMappingURL=gaia.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/jsontokens/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/cryptoRandom.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts"],"map":"{\"version\":3,\"file\":\"gaia.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/gaia.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/utils/gaia.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\nexport declare const DEFAULT_GAIA_HUB = \"https://gaia.blockstack.org/hub/\";\r\ninterface HubInfo {\r\n challenge_text?: string;\r\n read_url_prefix: string;\r\n}\r\nexport declare const getHubInfo: (hubUrl: string) => Promise;\r\nexport declare const getHubPrefix: (hubUrl: string) => Promise;\r\nexport declare const makeGaiaAssociationToken: (secretKeyHex: string, childPublicKeyHex: string) => string;\r\ninterface ConnectToGaiaOptions {\r\n hubInfo: HubInfo;\r\n privateKey: string;\r\n gaiaHubUrl: string;\r\n}\r\nexport declare const connectToGaiaHubWithConfig: ({ hubInfo, privateKey, gaiaHubUrl, }: ConnectToGaiaOptions) => GaiaHubConfig;\r\ninterface ReadOnlyGaiaConfigOptions {\r\n readURL: string;\r\n privateKey: string;\r\n}\r\n/**\r\n * When you already know the Gaia read URL, make a Gaia config that doesn't have to fetch `/hub_info`\r\n */\r\nexport declare const makeReadOnlyGaiaConfig: ({ readURL, privateKey, }: ReadOnlyGaiaConfigOptions) => GaiaHubConfig;\r\nexport declare const uploadToGaiaHub: (filename: string, contents: Blob | Buffer | ArrayBufferView | string, hubConfig: GaiaHubConfig) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/018dd99255a534837916033f04b396b3c5b771ad b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/018dd99255a534837916033f04b396b3c5b771ad new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/061a2a662a532413fb382823dd2453c8537b4338 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/061a2a662a532413fb382823dd2453c8537b4338 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/314c9c585547e1ee805fe1597f307af31b72559c b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/314c9c585547e1ee805fe1597f307af31b72559c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/420b2f97ccbc239de9691385af956534d4545c2c b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/420b2f97ccbc239de9691385af956534d4545c2c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/9ed2612615091d088e52b934dbdc159280dc237c b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/9ed2612615091d088e52b934dbdc159280dc237c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/fae54f93545510c8db4ed307ea8397a19112446a b/packages/keychain/.rts2_cache_umd/rpt2_078b1409aa37b9a43a876ab13b825a11ed9e808c/types/cache/fae54f93545510c8db4ed307ea8397a19112446a new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..53380f7c1 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +{"code":"import { ChainID, getAddressFromPrivateKey, TransactionVersion, } from '@blockstack/stacks-transactions';\r\nimport { ECPair } from 'bitcoinjs-lib';\r\nimport { ecPairToHexString } from 'blockstack';\r\nconst networkDerivationPath = `m/44'/5757'/0'/0/0`;\r\nexport const derivationPaths = {\r\n [ChainID.Mainnet]: networkDerivationPath,\r\n [ChainID.Testnet]: networkDerivationPath,\r\n};\r\nexport function getDerivationPath(chain) {\r\n return derivationPaths[chain];\r\n}\r\nexport function deriveStxAddressChain(chain) {\r\n return (rootNode) => {\r\n const childKey = rootNode.derivePath(getDerivationPath(chain));\r\n if (!childKey.privateKey) {\r\n throw new Error('Unable to derive private key from `rootNode`, bip32 master keychain');\r\n }\r\n const ecPair = ECPair.fromPrivateKey(childKey.privateKey);\r\n const privateKey = ecPairToHexString(ecPair);\r\n const txVersion = chain === ChainID.Mainnet ? TransactionVersion.Mainnet : TransactionVersion.Testnet;\r\n return {\r\n childKey,\r\n address: getAddressFromPrivateKey(privateKey, txVersion),\r\n privateKey,\r\n };\r\n };\r\n}\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/address-derivation/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EACL,OAAO,EACP,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAkB,MAAM,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB;IACxC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB;CACzC,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CAAC,QAAwB,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;SACxF;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,SAAS,GACb,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC;QACtF,OAAO;YACL,QAAQ;YACR,OAAO,EAAE,wBAAwB,CAAC,UAAU,EAAE,SAAS,CAAC;YACxD,UAAU;SACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/address-derivation/index.d.ts","writeByteOrderMark":false,"text":"import { ChainID } from '@blockstack/stacks-transactions';\r\nimport { BIP32Interface } from 'bitcoinjs-lib';\r\nexport declare const derivationPaths: {\r\n 1: string;\r\n 2147483648: string;\r\n};\r\nexport declare function getDerivationPath(chain: ChainID): string;\r\nexport declare function deriveStxAddressChain(chain: ChainID): (rootNode: BIP32Interface) => {\r\n childKey: BIP32Interface;\r\n address: string;\r\n privateKey: string;\r\n};\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..0c4968ffd --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +{"code":"import { generateMnemonic as generateBip39Mnemonic, mnemonicToSeed } from 'bip39';\r\nimport { randomBytes } from 'blockstack/lib/encryption/cryptoRandom';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { encrypt } from '../encryption/encrypt';\r\nimport { encryptMnemonic } from 'blockstack';\r\nexport async function generateMnemonicRootKeychain(entropy) {\r\n const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes);\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n return {\r\n rootNode,\r\n plaintextMnemonic,\r\n };\r\n}\r\nexport async function generateEncryptedMnemonicRootKeychain(password, entropy) {\r\n const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes);\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n const ciphertextBuffer = await encrypt(plaintextMnemonic, password);\r\n const encryptedMnemonicPhrase = ciphertextBuffer.toString('hex');\r\n return {\r\n rootNode,\r\n encryptedMnemonicPhrase,\r\n };\r\n}\r\nexport async function deriveRootKeychainFromMnemonic(plaintextMnemonic) {\r\n const seedBuffer = await mnemonicToSeed(plaintextMnemonic);\r\n const rootNode = bip32.fromSeed(seedBuffer);\r\n return rootNode;\r\n}\r\nexport async function encryptMnemonicFormatted(plaintextMnemonic, password) {\r\n const encryptedMnemonic = await encryptMnemonic(plaintextMnemonic, password);\r\n const encryptedMnemonicHex = encryptedMnemonic.toString('hex');\r\n return { encryptedMnemonic, encryptedMnemonicHex };\r\n}\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/bip39/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/cryptoRandom.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/encrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/mnemonic/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,gBAAgB,IAAI,qBAAqB,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAA8B;IAC/E,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO;QACL,QAAQ;QACR,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,QAAgB,EAChB,OAA8B;IAE9B,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACpE,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO;QACL,QAAQ;QACR,uBAAuB;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,iBAAyB;IAC5E,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,iBAAyB,EAAE,QAAgB;IACxF,MAAM,iBAAiB,GAAG,MAAM,eAAe,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC7E,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;AACrD,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/mnemonic/index.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { bip32 } from 'bitcoinjs-lib';\r\nexport declare type AllowedKeyEntropyBits = 128 | 256;\r\nexport declare function generateMnemonicRootKeychain(entropy: AllowedKeyEntropyBits): Promise<{\r\n rootNode: bip32.BIP32Interface;\r\n plaintextMnemonic: string;\r\n}>;\r\nexport declare function generateEncryptedMnemonicRootKeychain(password: string, entropy: AllowedKeyEntropyBits): Promise<{\r\n rootNode: bip32.BIP32Interface;\r\n encryptedMnemonicPhrase: string;\r\n}>;\r\nexport declare function deriveRootKeychainFromMnemonic(plaintextMnemonic: string): Promise;\r\nexport declare function encryptMnemonicFormatted(plaintextMnemonic: string, password: string): Promise<{\r\n encryptedMnemonic: Buffer;\r\n encryptedMnemonicHex: string;\r\n}>;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..e617263c8 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +{"code":"import { encryptMnemonic } from 'blockstack/lib/encryption/wallet';\r\n/**\r\n * Encrypt a raw mnemonic phrase to be password protected\r\n * @param phrase - Raw mnemonic phrase\r\n * @param password - Password to encrypt mnemonic with\r\n * @return The encrypted phrase\r\n * */\r\nexport async function encrypt(phrase, password) {\r\n const result = await encryptMnemonic(phrase, password);\r\n return result;\r\n}\r\n//# sourceMappingURL=encrypt.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/wallet.d.ts"],"map":"{\"version\":3,\"file\":\"encrypt.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/encryption/encrypt.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;;;;KAKK;AACL,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,QAAgB;IAC5D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC;AAChB,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/encryption/encrypt.d.ts","writeByteOrderMark":false,"text":"/// \r\n/**\r\n * Encrypt a raw mnemonic phrase to be password protected\r\n * @param phrase - Raw mnemonic phrase\r\n * @param password - Password to encrypt mnemonic with\r\n * @return The encrypted phrase\r\n * */\r\nexport declare function encrypt(phrase: string, password: string): Promise;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..93330eccf --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +{"code":"import Wallet from './wallet';\r\nexport * from './utils';\r\nexport * from './mnemonic';\r\nexport * from './address-derivation';\r\nexport { default as Wallet } from './wallet';\r\nexport * from './wallet';\r\nexport * from './wallet/signer';\r\nexport { decrypt } from './encryption/decrypt';\r\nexport { encrypt } from './encryption/encrypt';\r\nexport * from './profiles';\r\nexport * from './identity';\r\nexport default {\r\n Wallet,\r\n};\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/mnemonic/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/address-derivation/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/signer.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/decrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/encrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAE3B,eAAe;IACb,MAAM;CACP,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/index.d.ts","writeByteOrderMark":false,"text":"import Wallet from './wallet';\r\nexport * from './utils';\r\nexport * from './mnemonic';\r\nexport * from './address-derivation';\r\nexport { default as Wallet } from './wallet';\r\nexport * from './wallet';\r\nexport * from './wallet/signer';\r\nexport { decrypt } from './encryption/decrypt';\r\nexport { encrypt } from './encryption/encrypt';\r\nexport * from './profiles';\r\nexport * from './identity';\r\ndeclare const _default: {\r\n Wallet: typeof Wallet;\r\n};\r\nexport default _default;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..673790086 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +{"code":"import { mnemonicToSeed } from 'bip39';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { getBlockchainIdentities, makeIdentity, assertIsTruthy, recursiveRestoreIdentities, } from '../utils';\r\nimport Identity from '../identity';\r\nimport { decrypt } from '../encryption/decrypt';\r\nimport { connectToGaiaHub, encryptContent, getPublicKeyFromPrivate, decryptContent, } from 'blockstack';\r\nimport { generateEncryptedMnemonicRootKeychain, deriveRootKeychainFromMnemonic, encryptMnemonicFormatted, } from '../mnemonic';\r\nimport { deriveStxAddressChain } from '../address-derivation';\r\nimport { makeReadOnlyGaiaConfig, DEFAULT_GAIA_HUB, uploadToGaiaHub } from '../utils/gaia';\r\nimport { WalletSigner } from './signer';\r\nconst CONFIG_INDEX = 45;\r\nexport class Wallet {\r\n constructor({ chain, encryptedBackupPhrase, identityPublicKeychain, bitcoinPublicKeychain, firstBitcoinAddress, identityKeypairs, identityAddresses, identities, configPrivateKey, stacksPrivateKey, walletConfig, }) {\r\n this.chain = chain;\r\n this.encryptedBackupPhrase = encryptedBackupPhrase;\r\n this.identityPublicKeychain = identityPublicKeychain;\r\n this.bitcoinPublicKeychain = bitcoinPublicKeychain;\r\n this.firstBitcoinAddress = firstBitcoinAddress;\r\n this.identityKeypairs = identityKeypairs;\r\n this.identityAddresses = identityAddresses;\r\n this.identities = identities.map(identity => new Identity(identity));\r\n this.configPrivateKey = configPrivateKey;\r\n this.stacksPrivateKey = stacksPrivateKey;\r\n this.walletConfig = walletConfig;\r\n }\r\n static generateFactory(bitsEntropy) {\r\n return async (password, chain) => {\r\n const { rootNode, encryptedMnemonicPhrase } = await generateEncryptedMnemonicRootKeychain(password, bitsEntropy);\r\n return this.createAccount({\r\n encryptedBackupPhrase: encryptedMnemonicPhrase,\r\n rootNode,\r\n chain,\r\n });\r\n };\r\n }\r\n static async generate(password, chain) {\r\n return await this.generateFactory(128)(password, chain);\r\n }\r\n static async generateStrong(password, chain) {\r\n return await this.generateFactory(256)(password, chain);\r\n }\r\n static async restore(password, seedPhrase, chain) {\r\n const rootNode = await deriveRootKeychainFromMnemonic(seedPhrase);\r\n const { encryptedMnemonicHex } = await encryptMnemonicFormatted(seedPhrase, password);\r\n const wallet = await Wallet.createAccount({\r\n encryptedBackupPhrase: encryptedMnemonicHex,\r\n rootNode,\r\n chain,\r\n });\r\n return await wallet.restoreIdentities({ rootNode, gaiaReadURL: DEFAULT_GAIA_HUB });\r\n }\r\n static async createAccount({ encryptedBackupPhrase, rootNode, chain, identitiesToGenerate = 1, }) {\r\n const derivedIdentitiesKey = rootNode.deriveHardened(CONFIG_INDEX).privateKey;\r\n if (!derivedIdentitiesKey) {\r\n throw new TypeError('Unable to derive config key for wallet identities');\r\n }\r\n const configPrivateKey = derivedIdentitiesKey.toString('hex');\r\n const { childKey: stxAddressKeychain } = deriveStxAddressChain(chain)(rootNode);\r\n const walletAttrs = await getBlockchainIdentities(rootNode, identitiesToGenerate);\r\n return new Wallet({\r\n ...walletAttrs,\r\n chain,\r\n configPrivateKey,\r\n stacksPrivateKey: stxAddressKeychain.toBase58(),\r\n encryptedBackupPhrase,\r\n });\r\n }\r\n /**\r\n * Restore all previously used identities. This is meant to be used when 'restoring' a wallet.\r\n * First, it will check for a `walletConfig`. If present, then we use that to determine how\r\n * many identities to generate, and auto-populate their username.\r\n *\r\n * If `walletConfig` is empty, then this is being restored from an authenticator that doesn't\r\n * support `walletConfig`. In that case, we will recursively generate identities, and check for\r\n * on-chain names.\r\n *\r\n */\r\n async restoreIdentities({ rootNode, gaiaReadURL, }) {\r\n const gaiaConfig = makeReadOnlyGaiaConfig({\r\n readURL: gaiaReadURL,\r\n privateKey: this.configPrivateKey,\r\n });\r\n await this.fetchConfig(gaiaConfig);\r\n if (this.walletConfig) {\r\n const getIdentities = this.walletConfig.identities.map(async (identityConfig, index) => {\r\n let identity = this.identities[index];\r\n if (!identity) {\r\n identity = await makeIdentity(rootNode, index);\r\n }\r\n if (identityConfig.username) {\r\n identity.usernames = [identityConfig.username];\r\n identity.defaultUsername = identityConfig.username;\r\n }\r\n return identity;\r\n });\r\n const identities = await Promise.all(getIdentities);\r\n this.identities = identities;\r\n return this;\r\n }\r\n await this.identities[0].refresh();\r\n const newIdentities = await recursiveRestoreIdentities({ rootNode });\r\n this.identities = this.identities.concat(newIdentities);\r\n return this;\r\n }\r\n async createNewIdentity(password) {\r\n const plainTextBuffer = await decrypt(Buffer.from(this.encryptedBackupPhrase, 'hex'), password);\r\n const seed = await mnemonicToSeed(plainTextBuffer);\r\n const rootNode = bip32.fromSeed(seed);\r\n const index = this.identities.length;\r\n const identity = await makeIdentity(rootNode, index);\r\n this.identities.push(identity);\r\n this.identityKeypairs.push(identity.keyPair);\r\n this.identityAddresses.push(identity.address);\r\n return identity;\r\n }\r\n async createGaiaConfig(gaiaHubUrl) {\r\n return connectToGaiaHub(gaiaHubUrl, this.configPrivateKey);\r\n }\r\n async fetchConfig(gaiaConfig) {\r\n try {\r\n const response = await fetch(`${gaiaConfig.url_prefix}${gaiaConfig.address}/wallet-config.json`);\r\n const encrypted = await response.text();\r\n const configJSON = (await decryptContent(encrypted, {\r\n privateKey: this.configPrivateKey,\r\n }));\r\n const config = JSON.parse(configJSON);\r\n this.walletConfig = config;\r\n return config;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n }\r\n async getOrCreateConfig({ gaiaConfig, skipUpload, }) {\r\n if (this.walletConfig) {\r\n return this.walletConfig;\r\n }\r\n const config = await this.fetchConfig(gaiaConfig);\r\n if (config) {\r\n return config;\r\n }\r\n const newConfig = {\r\n identities: this.identities.map(i => ({\r\n username: i.defaultUsername,\r\n address: i.address,\r\n apps: {},\r\n })),\r\n };\r\n this.walletConfig = newConfig;\r\n if (!skipUpload) {\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n return newConfig;\r\n }\r\n async updateConfig(gaiaConfig) {\r\n const publicKey = getPublicKeyFromPrivate(this.configPrivateKey);\r\n const encrypted = await encryptContent(JSON.stringify(this.walletConfig), { publicKey });\r\n await uploadToGaiaHub('wallet-config.json', encrypted, gaiaConfig);\r\n }\r\n async updateConfigWithAuth({ identityIndex, app, gaiaConfig, }) {\r\n const { walletConfig } = this;\r\n assertIsTruthy(walletConfig);\r\n this.identities.forEach((identity, index) => {\r\n const configIdentity = walletConfig.identities[index];\r\n if (configIdentity) {\r\n configIdentity.apps = configIdentity.apps || {};\r\n configIdentity.username = identity.defaultUsername;\r\n configIdentity.address = identity.address;\r\n walletConfig.identities[index] = configIdentity;\r\n }\r\n else {\r\n this.walletConfig?.identities.push({\r\n username: identity.defaultUsername,\r\n address: identity.address,\r\n apps: {},\r\n });\r\n }\r\n });\r\n const identity = walletConfig.identities[identityIndex];\r\n identity.apps = identity.apps || {};\r\n identity.apps[app.origin] = app;\r\n walletConfig.identities[identityIndex] = identity;\r\n this.walletConfig = walletConfig;\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n async updateConfigForReuseWarning({ gaiaConfig }) {\r\n assertIsTruthy(this.walletConfig);\r\n this.walletConfig.hideWarningForReusingIdentity = true;\r\n await this.updateConfig(gaiaConfig);\r\n }\r\n getSigner() {\r\n return new WalletSigner({ privateKey: this.stacksPrivateKey });\r\n }\r\n}\r\nexport default Wallet;\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/bip39/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/encryption/decrypt.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/mnemonic/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/address-derivation/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/wallet/signer.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/wallet/index.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/wallet/index.d.ts","writeByteOrderMark":false,"text":"import { bip32, BIP32Interface } from 'bitcoinjs-lib';\r\nimport { ChainID } from '@blockstack/stacks-transactions';\r\nimport { IdentityKeyPair } from '../utils';\r\nimport Identity from '../identity';\r\nimport { AllowedKeyEntropyBits } from '../mnemonic';\r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\nimport { WalletSigner } from './signer';\r\nexport interface ConfigApp {\r\n origin: string;\r\n scopes: string[];\r\n lastLoginAt: number;\r\n appIcon: string;\r\n name: string;\r\n}\r\ninterface ConfigIdentity {\r\n username?: string;\r\n address: string;\r\n apps: {\r\n [origin: string]: ConfigApp;\r\n };\r\n}\r\nexport interface WalletConfig {\r\n identities: ConfigIdentity[];\r\n hideWarningForReusingIdentity?: boolean;\r\n}\r\nexport interface ConstructorOptions {\r\n chain: ChainID;\r\n identityPublicKeychain: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityKeypairs: IdentityKeyPair[];\r\n identityAddresses: string[];\r\n encryptedBackupPhrase: string;\r\n identities: Identity[];\r\n configPrivateKey: string;\r\n stacksPrivateKey: string;\r\n walletConfig?: WalletConfig;\r\n}\r\nexport declare class Wallet {\r\n chain: ChainID;\r\n encryptedBackupPhrase: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityKeypairs: IdentityKeyPair[];\r\n identityAddresses: string[];\r\n identityPublicKeychain: string;\r\n identities: Identity[];\r\n configPrivateKey: string;\r\n stacksPrivateKey: string;\r\n walletConfig?: WalletConfig;\r\n constructor({ chain, encryptedBackupPhrase, identityPublicKeychain, bitcoinPublicKeychain, firstBitcoinAddress, identityKeypairs, identityAddresses, identities, configPrivateKey, stacksPrivateKey, walletConfig, }: ConstructorOptions);\r\n static generateFactory(bitsEntropy: AllowedKeyEntropyBits): (password: string, chain: ChainID) => Promise;\r\n static generate(password: string, chain: ChainID): Promise;\r\n static generateStrong(password: string, chain: ChainID): Promise;\r\n static restore(password: string, seedPhrase: string, chain: ChainID): Promise;\r\n static createAccount({ encryptedBackupPhrase, rootNode, chain, identitiesToGenerate, }: {\r\n encryptedBackupPhrase: string;\r\n rootNode: BIP32Interface;\r\n chain: ChainID;\r\n identitiesToGenerate?: number;\r\n }): Promise;\r\n /**\r\n * Restore all previously used identities. This is meant to be used when 'restoring' a wallet.\r\n * First, it will check for a `walletConfig`. If present, then we use that to determine how\r\n * many identities to generate, and auto-populate their username.\r\n *\r\n * If `walletConfig` is empty, then this is being restored from an authenticator that doesn't\r\n * support `walletConfig`. In that case, we will recursively generate identities, and check for\r\n * on-chain names.\r\n *\r\n */\r\n restoreIdentities({ rootNode, gaiaReadURL, }: {\r\n rootNode: bip32.BIP32Interface;\r\n gaiaReadURL: string;\r\n }): Promise;\r\n createNewIdentity(password: string): Promise;\r\n createGaiaConfig(gaiaHubUrl: string): Promise;\r\n fetchConfig(gaiaConfig: GaiaHubConfig): Promise;\r\n getOrCreateConfig({ gaiaConfig, skipUpload, }: {\r\n gaiaConfig: GaiaHubConfig;\r\n skipUpload?: boolean;\r\n }): Promise;\r\n updateConfig(gaiaConfig: GaiaHubConfig): Promise;\r\n updateConfigWithAuth({ identityIndex, app, gaiaConfig, }: {\r\n identityIndex: number;\r\n app: ConfigApp;\r\n gaiaConfig: GaiaHubConfig;\r\n }): Promise;\r\n updateConfigForReuseWarning({ gaiaConfig }: {\r\n gaiaConfig: GaiaHubConfig;\r\n }): Promise;\r\n getSigner(): WalletSigner;\r\n}\r\nexport default Wallet;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..a38d6780d --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +{"code":"import { decrypt as triplesecDecrypt } from 'triplesec';\r\nimport { decryptMnemonic } from 'blockstack/lib/encryption/wallet';\r\n/**\r\n * Decrypt an encrypted mnemonic phrase with a password.\r\n * Legacy triplesec encrypted payloads are also supported.\r\n * @param data - Buffer or hex-encoded string of the encrypted mnemonic\r\n * @param password - Password for data\r\n * @return the raw mnemonic phrase\r\n */\r\nexport async function decrypt(dataBuffer, password) {\r\n const result = await decryptMnemonic(dataBuffer, password, triplesecDecrypt);\r\n return result;\r\n}\r\n//# sourceMappingURL=decrypt.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@types/triplesec/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/wallet.d.ts"],"map":"{\"version\":3,\"file\":\"decrypt.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/encryption/decrypt.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAA2B,EAAE,QAAgB;IACzE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC7E,OAAO,MAAM,CAAC;AAChB,CAAC\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/encryption/decrypt.d.ts","writeByteOrderMark":false,"text":"/// \r\n/**\r\n * Decrypt an encrypted mnemonic phrase with a password.\r\n * Legacy triplesec encrypted payloads are also supported.\r\n * @param data - Buffer or hex-encoded string of the encrypted mnemonic\r\n * @param password - Password for data\r\n * @return the raw mnemonic phrase\r\n */\r\nexport declare function decrypt(dataBuffer: Buffer | string, password: string): Promise;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..afbcca7e2 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +{"code":"import IdentityAddressOwnerNode from '../nodes/identity-address-owner-node';\r\nimport { createSha2Hash } from 'blockstack/lib/encryption/sha2Hash';\r\nimport { publicKeyToAddress } from 'blockstack/lib/keys';\r\nimport { parseZoneFile } from 'zone-file';\r\nimport Identity from '../identity';\r\nimport { AssertionError } from 'assert';\r\nimport { Subdomains, registrars } from '../profiles';\r\nconst IDENTITY_KEYCHAIN = 888;\r\nconst BLOCKSTACK_ON_BITCOIN = 0;\r\nexport function getIdentityPrivateKeychain(rootNode) {\r\n return rootNode.deriveHardened(IDENTITY_KEYCHAIN).deriveHardened(BLOCKSTACK_ON_BITCOIN);\r\n}\r\nconst EXTERNAL_ADDRESS = 'EXTERNAL_ADDRESS';\r\nconst CHANGE_ADDRESS = 'CHANGE_ADDRESS';\r\nexport function getBitcoinPrivateKeychain(rootNode) {\r\n const BIP_44_PURPOSE = 44;\r\n const BITCOIN_COIN_TYPE = 0;\r\n const ACCOUNT_INDEX = 0;\r\n return rootNode\r\n .deriveHardened(BIP_44_PURPOSE)\r\n .deriveHardened(BITCOIN_COIN_TYPE)\r\n .deriveHardened(ACCOUNT_INDEX);\r\n}\r\nexport function getBitcoinAddressNode(bitcoinKeychain, addressIndex = 0, chainType = EXTERNAL_ADDRESS) {\r\n let chain = null;\r\n if (chainType === EXTERNAL_ADDRESS) {\r\n chain = 0;\r\n }\r\n else if (chainType === CHANGE_ADDRESS) {\r\n chain = 1;\r\n }\r\n else {\r\n throw new Error('Invalid chain type');\r\n }\r\n return bitcoinKeychain.derive(chain).derive(addressIndex);\r\n}\r\nexport async function getIdentityOwnerAddressNode(identityPrivateKeychain, identityIndex = 0) {\r\n if (identityPrivateKeychain.isNeutered()) {\r\n throw new Error('You need the private key to generate identity addresses');\r\n }\r\n const publicKeyHex = Buffer.from(identityPrivateKeychain.publicKey.toString('hex'));\r\n const sha2Hash = await createSha2Hash();\r\n const saltData = await sha2Hash.digest(publicKeyHex, 'sha256');\r\n const salt = saltData.toString('hex');\r\n return new IdentityAddressOwnerNode(identityPrivateKeychain.deriveHardened(identityIndex), salt);\r\n}\r\nexport function getAddress(node) {\r\n return publicKeyToAddress(node.publicKey);\r\n}\r\nexport function deriveIdentityKeyPair(identityOwnerAddressNode) {\r\n const address = identityOwnerAddressNode.getAddress();\r\n const identityKey = identityOwnerAddressNode.getIdentityKey();\r\n const identityKeyID = identityOwnerAddressNode.getIdentityKeyID();\r\n const appsNode = identityOwnerAddressNode.getAppsNode();\r\n const stxNode = identityOwnerAddressNode.getSTXNode();\r\n const keyPair = {\r\n key: identityKey,\r\n keyID: identityKeyID,\r\n address,\r\n appsNodeKey: appsNode.toBase58(),\r\n stxNodeKey: stxNode.toBase58(),\r\n salt: identityOwnerAddressNode.getSalt(),\r\n };\r\n return keyPair;\r\n}\r\nexport async function getBlockchainIdentities(rootNode, identitiesToGenerate) {\r\n const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode);\r\n const bitcoinPrivateKeychainNode = getBitcoinPrivateKeychain(rootNode);\r\n const identityPublicKeychainNode = identityPrivateKeychainNode.neutered();\r\n const identityPublicKeychain = identityPublicKeychainNode.toBase58();\r\n const bitcoinPublicKeychainNode = bitcoinPrivateKeychainNode.neutered();\r\n const bitcoinPublicKeychain = bitcoinPublicKeychainNode.toBase58();\r\n const firstBitcoinAddress = getAddress(getBitcoinAddressNode(bitcoinPublicKeychainNode));\r\n const identityAddresses = [];\r\n const identityKeypairs = [];\r\n const identities = [];\r\n // We pre-generate a number of identity addresses so that we\r\n // don't have to prompt the user for the password on each new profile\r\n for (let addressIndex = 0; addressIndex < identitiesToGenerate; addressIndex++) {\r\n const identity = await makeIdentity(rootNode, addressIndex);\r\n identities.push(identity);\r\n identityKeypairs.push(identity.keyPair);\r\n identityAddresses.push(identity.address);\r\n }\r\n return {\r\n identityPublicKeychain,\r\n bitcoinPublicKeychain,\r\n firstBitcoinAddress,\r\n identityAddresses,\r\n identityKeypairs,\r\n identities,\r\n };\r\n}\r\nexport const makeIdentity = async (rootNode, index) => {\r\n const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode);\r\n const identityOwnerAddressNode = await getIdentityOwnerAddressNode(identityPrivateKeychainNode, index);\r\n const identityKeyPair = deriveIdentityKeyPair(identityOwnerAddressNode);\r\n const identity = new Identity({\r\n keyPair: identityKeyPair,\r\n address: identityKeyPair.address,\r\n usernames: [],\r\n });\r\n return identity;\r\n};\r\nexport function assertIsTruthy(val) {\r\n if (!val) {\r\n throw new AssertionError({ expected: true, actual: val });\r\n }\r\n}\r\nexport var IdentityNameValidityError;\r\n(function (IdentityNameValidityError) {\r\n IdentityNameValidityError[\"MINIMUM_LENGTH\"] = \"error_minimum_length\";\r\n IdentityNameValidityError[\"MAXIMUM_LENGTH\"] = \"error_maximum_length\";\r\n IdentityNameValidityError[\"ILLEGAL_CHARACTER\"] = \"error_illegal_character\";\r\n IdentityNameValidityError[\"UNAVAILABLE\"] = \"error_name_unavailable\";\r\n})(IdentityNameValidityError || (IdentityNameValidityError = {}));\r\nconst containsLegalCharacters = (name) => /^[a-z0-9_]+$/.test(name);\r\nexport const validateSubdomainFormat = (identityName) => {\r\n const nameLength = identityName.length;\r\n if (nameLength < 8) {\r\n return IdentityNameValidityError.MINIMUM_LENGTH;\r\n }\r\n if (nameLength > 37) {\r\n return IdentityNameValidityError.MAXIMUM_LENGTH;\r\n }\r\n if (!containsLegalCharacters(identityName)) {\r\n return IdentityNameValidityError.ILLEGAL_CHARACTER;\r\n }\r\n return null;\r\n};\r\nexport const validateSubdomainAvailability = async (name, subdomain = Subdomains.BLOCKSTACK) => {\r\n const url = `${registrars[subdomain].apiUrl}/${name.toLowerCase()}.${subdomain}`;\r\n const resp = await fetch(url);\r\n const data = await resp.json();\r\n return data;\r\n};\r\n/**\r\n * Restore identities by recursively making a new identity, and checking if it has a username.\r\n *\r\n * As soon as a username is not found for an identity, the recursion stops.\r\n */\r\nexport const recursiveRestoreIdentities = async ({ rootNode, index = 1, identities = [], }) => {\r\n const identity = await makeIdentity(rootNode, index);\r\n await identity.refresh();\r\n if (identity.defaultUsername) {\r\n identities.push(identity);\r\n return recursiveRestoreIdentities({ rootNode, index: index + 1, identities });\r\n }\r\n return identities;\r\n};\r\n/**\r\n * Validate the format and availability of a subdomain. Will return an error of enum\r\n * IdentityNameValidityError if an error is present. If no errors are found, will return null.\r\n * @param name the subdomain to be registered\r\n * @param subdomain a valid Subdomains enum\r\n */\r\nexport const validateSubdomain = async (name, subdomain = Subdomains.BLOCKSTACK) => {\r\n const error = validateSubdomainFormat(name);\r\n if (error) {\r\n return error;\r\n }\r\n try {\r\n const data = await validateSubdomainAvailability(name, subdomain);\r\n if (data.status !== 'available') {\r\n return IdentityNameValidityError.UNAVAILABLE;\r\n }\r\n }\r\n catch (error) {\r\n return IdentityNameValidityError.UNAVAILABLE;\r\n }\r\n return null;\r\n};\r\nexport const getProfileURLFromZoneFile = async (name) => {\r\n const url = `https://core.blockstack.org/v1/names/${name}`;\r\n const res = await fetch(url);\r\n if (res.ok) {\r\n const nameInfo = await res.json();\r\n const zone = parseZoneFile(nameInfo.zonefile);\r\n return zone.uri[0].target;\r\n }\r\n return;\r\n};\r\n//# sourceMappingURL=index.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/nodes/identity-address-owner-node.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/sha2Hash.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/zone-file/lib/index.js","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/assert/assert.js","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts"],"map":"{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/index.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/utils/index.d.ts","writeByteOrderMark":false,"text":"import { BIP32Interface } from 'bitcoinjs-lib';\r\nimport IdentityAddressOwnerNode from '../nodes/identity-address-owner-node';\r\nimport Identity from '../identity';\r\nimport { Subdomains } from '../profiles';\r\nexport declare function getIdentityPrivateKeychain(rootNode: BIP32Interface): BIP32Interface;\r\nexport declare function getBitcoinPrivateKeychain(rootNode: BIP32Interface): BIP32Interface;\r\nexport declare function getBitcoinAddressNode(bitcoinKeychain: BIP32Interface, addressIndex?: number, chainType?: string): BIP32Interface;\r\nexport declare function getIdentityOwnerAddressNode(identityPrivateKeychain: BIP32Interface, identityIndex?: number): Promise;\r\nexport declare function getAddress(node: BIP32Interface): string;\r\nexport interface IdentityKeyPair {\r\n key: string;\r\n keyID: string;\r\n address: string;\r\n appsNodeKey: string;\r\n stxNodeKey: string;\r\n salt: string;\r\n}\r\nexport declare function deriveIdentityKeyPair(identityOwnerAddressNode: IdentityAddressOwnerNode): IdentityKeyPair;\r\nexport declare function getBlockchainIdentities(rootNode: BIP32Interface, identitiesToGenerate: number): Promise<{\r\n identityPublicKeychain: string;\r\n bitcoinPublicKeychain: string;\r\n firstBitcoinAddress: string;\r\n identityAddresses: string[];\r\n identityKeypairs: IdentityKeyPair[];\r\n identities: Identity[];\r\n}>;\r\nexport declare const makeIdentity: (rootNode: BIP32Interface, index: number) => Promise;\r\nexport declare function assertIsTruthy(val: any): asserts val is NonNullable;\r\nexport declare enum IdentityNameValidityError {\r\n MINIMUM_LENGTH = \"error_minimum_length\",\r\n MAXIMUM_LENGTH = \"error_maximum_length\",\r\n ILLEGAL_CHARACTER = \"error_illegal_character\",\r\n UNAVAILABLE = \"error_name_unavailable\"\r\n}\r\nexport declare const validateSubdomainFormat: (identityName: string) => IdentityNameValidityError | null;\r\nexport declare const validateSubdomainAvailability: (name: string, subdomain?: Subdomains) => Promise;\r\ninterface RecursiveMakeIdentitiesOptions {\r\n rootNode: BIP32Interface;\r\n index?: number;\r\n identities?: Identity[];\r\n}\r\n/**\r\n * Restore identities by recursively making a new identity, and checking if it has a username.\r\n *\r\n * As soon as a username is not found for an identity, the recursion stops.\r\n */\r\nexport declare const recursiveRestoreIdentities: ({ rootNode, index, identities, }: RecursiveMakeIdentitiesOptions) => Promise;\r\n/**\r\n * Validate the format and availability of a subdomain. Will return an error of enum\r\n * IdentityNameValidityError if an error is present. If no errors are found, will return null.\r\n * @param name the subdomain to be registered\r\n * @param subdomain a valid Subdomains enum\r\n */\r\nexport declare const validateSubdomain: (name: string, subdomain?: Subdomains) => Promise;\r\nexport declare const getProfileURLFromZoneFile: (name: string) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..aaef254cd --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +{"code":"import { getLegacyAppNode } from 'blockstack/lib/wallet';\r\nimport { publicKeyToAddress } from 'blockstack/lib/keys';\r\nimport { getAddress } from '../utils';\r\nconst APPS_NODE_INDEX = 0;\r\nconst SIGNING_NODE_INDEX = 1;\r\nconst ENCRYPTION_NODE_INDEX = 2;\r\nconst STX_NODE_INDEX = 6;\r\nexport default class IdentityAddressOwnerNode {\r\n constructor(ownerHdNode, salt) {\r\n this.hdNode = ownerHdNode;\r\n this.salt = salt;\r\n }\r\n getNode() {\r\n return this.hdNode;\r\n }\r\n getSalt() {\r\n return this.salt;\r\n }\r\n getIdentityKey() {\r\n if (!this.hdNode.privateKey) {\r\n throw new Error('Node does not have private key');\r\n }\r\n return this.hdNode.privateKey.toString('hex');\r\n }\r\n getIdentityKeyID() {\r\n return this.hdNode.publicKey.toString('hex');\r\n }\r\n getAppsNode() {\r\n return this.hdNode.deriveHardened(APPS_NODE_INDEX);\r\n }\r\n getAddress() {\r\n return getAddress(this.hdNode);\r\n }\r\n getEncryptionNode() {\r\n return this.hdNode.deriveHardened(ENCRYPTION_NODE_INDEX);\r\n }\r\n getSigningNode() {\r\n return this.hdNode.deriveHardened(SIGNING_NODE_INDEX);\r\n }\r\n getSTXNode() {\r\n return this.hdNode.deriveHardened(STX_NODE_INDEX);\r\n }\r\n getAppNode(appDomain) {\r\n return getLegacyAppNode(this.hdNode, this.salt, appDomain);\r\n }\r\n getAppPrivateKey(appDomain) {\r\n const appNode = this.getAppNode(appDomain);\r\n if (!appNode.privateKey) {\r\n throw new Error('App node does not have private key');\r\n }\r\n return appNode.privateKey.toString('hex');\r\n }\r\n getAppAddress(appDomain) {\r\n const appNode = this.getAppNode(appDomain);\r\n return publicKeyToAddress(appNode.publicKey);\r\n }\r\n}\r\n//# sourceMappingURL=identity-address-owner-node.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/wallet.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts"],"map":"{\"version\":3,\"file\":\"identity-address-owner-node.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/nodes/identity-address-owner-node.ts\"],\"names\":[],\"mappings\":\"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAK3C,YAAY,WAA2B,EAAE,IAAY;QACnD,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACnD;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;IAED,UAAU;QACR,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACxD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,gBAAgB,CAAC,SAAiB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACvD;QACD,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;CACF\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/nodes/identity-address-owner-node.d.ts","writeByteOrderMark":false,"text":"import { BIP32Interface } from 'bitcoinjs-lib';\r\nexport default class IdentityAddressOwnerNode {\r\n hdNode: BIP32Interface;\r\n salt: string;\r\n constructor(ownerHdNode: BIP32Interface, salt: string);\r\n getNode(): BIP32Interface;\r\n getSalt(): string;\r\n getIdentityKey(): string;\r\n getIdentityKeyID(): string;\r\n getAppsNode(): BIP32Interface;\r\n getAddress(): string;\r\n getEncryptionNode(): BIP32Interface;\r\n getSigningNode(): BIP32Interface;\r\n getSTXNode(): BIP32Interface;\r\n getAppNode(appDomain: string): BIP32Interface;\r\n getAppPrivateKey(appDomain: string): string;\r\n getAppAddress(appDomain: string): string;\r\n}\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..1104190d1 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +{"code":"import { signProfileToken, wrapProfileToken, connectToGaiaHub, makeProfileZoneFile, } from 'blockstack';\r\nimport { uploadToGaiaHub } from './utils/gaia';\r\nconst PERSON_TYPE = 'Person';\r\nconst CONTEXT = 'http://schema.org';\r\nconst IMAGE_TYPE = 'ImageObject';\r\nexport const DEFAULT_PROFILE = {\r\n '@type': 'Person',\r\n '@context': 'http://schema.org',\r\n};\r\nconst DEFAULT_PROFILE_FILE_NAME = 'profile.json';\r\nexport var Subdomains;\r\n(function (Subdomains) {\r\n Subdomains[\"TEST\"] = \"test-personal.id\";\r\n Subdomains[\"BLOCKSTACK\"] = \"id.blockstack\";\r\n})(Subdomains || (Subdomains = {}));\r\nexport const registrars = {\r\n [Subdomains.TEST]: {\r\n registerUrl: 'https://test-registrar.blockstack.org/register',\r\n apiUrl: 'https://test-registrar.blockstack.org/v1/names',\r\n },\r\n [Subdomains.BLOCKSTACK]: {\r\n registerUrl: 'https://registrar.blockstack.org/register',\r\n apiUrl: 'https://registrar.blockstack.org/v1/names',\r\n },\r\n};\r\nexport function signProfileForUpload(profile, keypair) {\r\n const privateKey = keypair.key;\r\n const publicKey = keypair.keyID;\r\n const token = signProfileToken(profile, privateKey, { publicKey });\r\n const tokenRecord = wrapProfileToken(token);\r\n const tokenRecords = [tokenRecord];\r\n return JSON.stringify(tokenRecords, null, 2);\r\n}\r\nexport async function uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig) {\r\n const identityHubConfig = gaiaHubConfig || (await connectToGaiaHub(gaiaHubUrl, identity.keyPair.key));\r\n const uploadResponse = await uploadToGaiaHub(DEFAULT_PROFILE_FILE_NAME, signedProfileTokenData, identityHubConfig);\r\n return uploadResponse;\r\n}\r\nconst sendUsernameToRegistrar = async ({ username, subdomain, zoneFile, identity, }) => {\r\n const { registerUrl } = registrars[subdomain];\r\n const registrationRequestBody = JSON.stringify({\r\n name: username,\r\n owner_address: identity.address,\r\n zonefile: zoneFile,\r\n });\r\n const requestHeaders = {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n };\r\n const response = await fetch(registerUrl, {\r\n method: 'POST',\r\n headers: requestHeaders,\r\n body: registrationRequestBody,\r\n });\r\n if (!response.ok) {\r\n return Promise.reject({\r\n error: 'Failed to register username',\r\n status: response.status,\r\n });\r\n }\r\n return response.json();\r\n};\r\n/**\r\n * Register a subdomain for a given identity\r\n */\r\nexport const registerSubdomain = async ({ identity, gaiaHubUrl, username, subdomain, }) => {\r\n const profile = identity.profile || DEFAULT_PROFILE;\r\n const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair);\r\n const profileUrl = await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData);\r\n const fullUsername = `${username}.${subdomain}`;\r\n const zoneFile = makeProfileZoneFile(fullUsername, profileUrl);\r\n await sendUsernameToRegistrar({\r\n username,\r\n subdomain,\r\n zoneFile,\r\n identity,\r\n });\r\n identity.defaultUsername = fullUsername;\r\n identity.usernames.push(fullUsername);\r\n return identity;\r\n};\r\nexport const signAndUploadProfile = async ({ profile, gaiaHubUrl, identity, gaiaHubConfig, }) => {\r\n const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair);\r\n await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig);\r\n};\r\nexport const fetchProfile = async ({ identity, gaiaUrl, }) => {\r\n try {\r\n const url = await identity.profileUrl(gaiaUrl);\r\n const res = await fetch(url);\r\n if (res.ok) {\r\n const json = await res.json();\r\n const { decodedToken } = json[0];\r\n return decodedToken.payload?.claim;\r\n }\r\n if (res.status === 404) {\r\n return null;\r\n }\r\n throw new Error('Network error when fetching profile');\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n};\r\n//# sourceMappingURL=profiles.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/identity.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts"],"map":"{\"version\":3,\"file\":\"profiles.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/profiles.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/profiles.d.ts","writeByteOrderMark":false,"text":"import { IdentityKeyPair } from './utils';\r\nimport Identity from './identity';\r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\ndeclare const PERSON_TYPE = \"Person\";\r\ndeclare const CONTEXT = \"http://schema.org\";\r\ndeclare const IMAGE_TYPE = \"ImageObject\";\r\nexport interface ProfileImage {\r\n '@type': typeof IMAGE_TYPE;\r\n name: string;\r\n contentUrl: string;\r\n}\r\nexport interface Profile {\r\n '@type': typeof PERSON_TYPE;\r\n '@context': typeof CONTEXT;\r\n apps?: {\r\n [origin: string]: string;\r\n };\r\n appsMeta?: {\r\n [origin: string]: {\r\n publicKey: string;\r\n storage: string;\r\n };\r\n };\r\n name?: string;\r\n image?: ProfileImage[];\r\n [key: string]: any;\r\n}\r\nexport declare const DEFAULT_PROFILE: Profile;\r\nexport declare enum Subdomains {\r\n TEST = \"test-personal.id\",\r\n BLOCKSTACK = \"id.blockstack\"\r\n}\r\nexport declare const registrars: {\r\n \"test-personal.id\": {\r\n registerUrl: string;\r\n apiUrl: string;\r\n };\r\n \"id.blockstack\": {\r\n registerUrl: string;\r\n apiUrl: string;\r\n };\r\n};\r\nexport declare function signProfileForUpload(profile: Profile, keypair: IdentityKeyPair): string;\r\nexport declare function uploadProfile(gaiaHubUrl: string, identity: Identity, signedProfileTokenData: string, gaiaHubConfig?: GaiaHubConfig): Promise;\r\ninterface RegisterParams {\r\n identity: Identity;\r\n /** The gaia hub URL to use for profile.json upload */\r\n gaiaHubUrl: string;\r\n /** The username portion of this subdomain, i.e. only the portion of the name before any periods */\r\n username: string;\r\n /** The \"domain\" used for this subdomain. Can be any of the `Subdomains` enum. */\r\n subdomain: Subdomains;\r\n}\r\n/**\r\n * Register a subdomain for a given identity\r\n */\r\nexport declare const registerSubdomain: ({ identity, gaiaHubUrl, username, subdomain, }: RegisterParams) => Promise;\r\nexport declare const signAndUploadProfile: ({ profile, gaiaHubUrl, identity, gaiaHubConfig, }: {\r\n profile: Profile;\r\n gaiaHubUrl: string;\r\n identity: Identity;\r\n gaiaHubConfig?: GaiaHubConfig | undefined;\r\n}) => Promise;\r\nexport declare const fetchProfile: ({ identity, gaiaUrl, }: {\r\n identity: Identity;\r\n gaiaUrl: string;\r\n}) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..7edbdd5e7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +{"code":"import { bip32, ECPair } from 'bitcoinjs-lib';\r\nimport { getPublicKeyFromPrivate } from 'blockstack/lib/keys';\r\nimport { makeAuthResponse } from 'blockstack/lib/auth/authMessages';\r\nimport { getProfileURLFromZoneFile } from './utils';\r\nimport { makeGaiaAssociationToken, DEFAULT_GAIA_HUB, getHubInfo, connectToGaiaHubWithConfig, } from './utils/gaia';\r\nimport IdentityAddressOwnerNode from './nodes/identity-address-owner-node';\r\nimport { fetchProfile, DEFAULT_PROFILE, signAndUploadProfile } from './profiles';\r\nimport { ecPairToAddress } from 'blockstack';\r\nexport class Identity {\r\n constructor({ keyPair, address, usernames, defaultUsername, profile, }) {\r\n this.keyPair = keyPair;\r\n this.address = address;\r\n this.usernames = usernames || [];\r\n this.defaultUsername = defaultUsername;\r\n this.profile = profile;\r\n }\r\n async makeAuthResponse({ appDomain, gaiaUrl, transitPublicKey, scopes = [], stxAddress, }) {\r\n const appPrivateKey = this.appPrivateKey(appDomain);\r\n const hubInfo = await getHubInfo(gaiaUrl);\r\n const profileUrl = await this.profileUrl(hubInfo.read_url_prefix);\r\n const profile = (await fetchProfile({ identity: this, gaiaUrl: hubInfo.read_url_prefix })) || DEFAULT_PROFILE;\r\n if (scopes.includes('publish_data')) {\r\n if (!profile.apps) {\r\n profile.apps = {};\r\n }\r\n const challengeSigner = ECPair.fromPrivateKey(Buffer.from(appPrivateKey, 'hex'));\r\n const storageUrl = `${hubInfo.read_url_prefix}${ecPairToAddress(challengeSigner)}/`;\r\n profile.apps[appDomain] = storageUrl;\r\n if (!profile.appsMeta) {\r\n profile.appsMeta = {};\r\n }\r\n profile.appsMeta[appDomain] = {\r\n storage: storageUrl,\r\n publicKey: challengeSigner.publicKey.toString('hex'),\r\n };\r\n const gaiaHubConfig = connectToGaiaHubWithConfig({\r\n hubInfo,\r\n privateKey: this.keyPair.key,\r\n gaiaHubUrl: gaiaUrl,\r\n });\r\n await signAndUploadProfile({ profile, identity: this, gaiaHubUrl: gaiaUrl, gaiaHubConfig });\r\n }\r\n this.profile = profile;\r\n const compressedAppPublicKey = getPublicKeyFromPrivate(appPrivateKey.slice(0, 64));\r\n const associationToken = makeGaiaAssociationToken(this.keyPair.key, compressedAppPublicKey);\r\n return makeAuthResponse(this.keyPair.key, {\r\n ...(this.profile || {}),\r\n stxAddress,\r\n }, this.defaultUsername || '', {\r\n profileUrl,\r\n }, undefined, appPrivateKey, undefined, transitPublicKey, gaiaUrl, undefined, associationToken);\r\n }\r\n appPrivateKey(appDomain) {\r\n const { salt, appsNodeKey } = this.keyPair;\r\n const appsNode = new IdentityAddressOwnerNode(bip32.fromBase58(appsNodeKey), salt);\r\n return appsNode.getAppPrivateKey(appDomain);\r\n }\r\n async profileUrl(gaiaUrl) {\r\n if (this.defaultUsername) {\r\n try {\r\n const url = await getProfileURLFromZoneFile(this.defaultUsername);\r\n if (url)\r\n return url;\r\n }\r\n catch (error) {\r\n if (process.env.NODE_ENV !== 'test') {\r\n console.warn('Error fetching profile URL from zone file:', error);\r\n }\r\n }\r\n }\r\n return `${gaiaUrl}${this.address}/profile.json`;\r\n }\r\n async fetchNames() {\r\n const getNamesUrl = `https://core.blockstack.org/v1/addresses/bitcoin/${this.address}`;\r\n const res = await fetch(getNamesUrl);\r\n const data = await res.json();\r\n const { names } = data;\r\n return names;\r\n }\r\n /**\r\n * Fetch existing information related to this identity, like username and profile information\r\n */\r\n async refresh(opts = { gaiaUrl: DEFAULT_GAIA_HUB }) {\r\n try {\r\n const names = await this.fetchNames();\r\n if (names) {\r\n if (names[0] && !this.defaultUsername) {\r\n this.defaultUsername = names[0];\r\n }\r\n names.forEach(name => {\r\n const existingIndex = this.usernames.findIndex(u => u === name);\r\n if (existingIndex === -1) {\r\n this.usernames.push(name);\r\n }\r\n });\r\n }\r\n const profile = await fetchProfile({ identity: this, gaiaUrl: opts.gaiaUrl });\r\n if (profile) {\r\n this.profile = profile;\r\n }\r\n return;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n }\r\n}\r\nexport default Identity;\r\n//# sourceMappingURL=identity.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/auth/authMessages.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/gaia.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/nodes/identity-address-owner-node.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/profiles.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts"],"map":"{\"version\":3,\"file\":\"identity.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/identity.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/identity.d.ts","writeByteOrderMark":false,"text":"import { IdentityKeyPair } from './utils/index';\r\nimport { Profile } from './profiles';\r\ninterface IdentityConstructorOptions {\r\n keyPair: IdentityKeyPair;\r\n address: string;\r\n usernames?: string[];\r\n defaultUsername?: string;\r\n profile?: Profile;\r\n}\r\ninterface RefreshOptions {\r\n gaiaUrl: string;\r\n}\r\nexport declare class Identity {\r\n keyPair: IdentityKeyPair;\r\n address: string;\r\n defaultUsername?: string;\r\n usernames: string[];\r\n profile?: Profile;\r\n constructor({ keyPair, address, usernames, defaultUsername, profile, }: IdentityConstructorOptions);\r\n makeAuthResponse({ appDomain, gaiaUrl, transitPublicKey, scopes, stxAddress, }: {\r\n appDomain: string;\r\n gaiaUrl: string;\r\n transitPublicKey: string;\r\n scopes?: string[];\r\n stxAddress?: string;\r\n }): Promise;\r\n appPrivateKey(appDomain: string): string;\r\n profileUrl(gaiaUrl: string): Promise;\r\n fetchNames(): Promise;\r\n /**\r\n * Fetch existing information related to this identity, like username and profile information\r\n */\r\n refresh(opts?: RefreshOptions): Promise;\r\n}\r\nexport default Identity;\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..d1e50fabe --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +{"code":"import { makeContractCall, makeContractDeploy, StacksTestnet, makeSTXTokenTransfer, getAddressFromPrivateKey, } from '@blockstack/stacks-transactions';\r\nimport { bip32 } from 'bitcoinjs-lib';\r\nimport { assertIsTruthy } from '../utils';\r\nimport BN from 'bn.js';\r\nexport class WalletSigner {\r\n constructor({ privateKey }) {\r\n this.privateKey = privateKey;\r\n }\r\n getSTXAddress(version) {\r\n return getAddressFromPrivateKey(this.getSTXPrivateKey(), version);\r\n }\r\n getSTXPrivateKey() {\r\n const node = bip32.fromBase58(this.privateKey);\r\n assertIsTruthy(node.privateKey);\r\n return node.privateKey;\r\n }\r\n getNetwork() {\r\n const network = new StacksTestnet();\r\n network.coreApiUrl = 'https://sidecar.staging.blockstack.xyz';\r\n return network;\r\n }\r\n async fetchAccount({ version, rpcClient, }) {\r\n const address = this.getSTXAddress(version);\r\n const account = await rpcClient.fetchAccount(address);\r\n return account;\r\n }\r\n async signContractCall({ contractName, contractAddress, functionName, functionArgs, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeContractCall({\r\n contractAddress,\r\n contractName,\r\n functionName,\r\n functionArgs,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n nonce: new BN(nonce),\r\n network: this.getNetwork(),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n async signContractDeploy({ contractName, codeBody, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeContractDeploy({\r\n contractName,\r\n codeBody: codeBody,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n network: this.getNetwork(),\r\n nonce: new BN(nonce),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n async signSTXTransfer({ recipient, amount, memo, nonce, postConditionMode, postConditions, }) {\r\n const tx = await makeSTXTokenTransfer({\r\n recipient,\r\n amount: new BN(amount),\r\n memo,\r\n senderKey: this.getSTXPrivateKey().toString('hex'),\r\n network: this.getNetwork(),\r\n nonce: new BN(nonce),\r\n postConditionMode,\r\n postConditions,\r\n });\r\n return tx;\r\n }\r\n}\r\n//# sourceMappingURL=signer.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/stacks-transactions/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@blockstack/rpc-client/dist/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/node_modules/bitcoinjs-lib/types/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/src/utils/index.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/@types/bn.js/index.d.ts"],"map":"{\"version\":3,\"file\":\"signer.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/wallet/signer.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/wallet/signer.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { TransactionVersion, ClarityValue, StacksTestnet, PostConditionMode, PostCondition, StacksNetwork } from '@blockstack/stacks-transactions';\r\nimport RPCClient from '@blockstack/rpc-client';\r\ninterface ContractCallOptions {\r\n contractName: string;\r\n contractAddress: string;\r\n functionName: string;\r\n functionArgs: ClarityValue[];\r\n version: TransactionVersion;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\ninterface ContractDeployOptions {\r\n contractName: string;\r\n codeBody: string;\r\n version: TransactionVersion;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\ninterface STXTransferOptions {\r\n recipient: string;\r\n amount: string;\r\n memo?: string;\r\n nonce: number;\r\n postConditions?: PostCondition[];\r\n postConditionMode?: PostConditionMode;\r\n network?: StacksNetwork;\r\n}\r\nexport declare class WalletSigner {\r\n privateKey: string;\r\n constructor({ privateKey }: {\r\n privateKey: string;\r\n });\r\n getSTXAddress(version: TransactionVersion): string;\r\n getSTXPrivateKey(): Buffer;\r\n getNetwork(): StacksTestnet;\r\n fetchAccount({ version, rpcClient, }: {\r\n version: TransactionVersion;\r\n rpcClient: RPCClient;\r\n }): Promise;\r\n signContractCall({ contractName, contractAddress, functionName, functionArgs, nonce, postConditionMode, postConditions, }: ContractCallOptions): Promise;\r\n signContractDeploy({ contractName, codeBody, nonce, postConditionMode, postConditions, }: ContractDeployOptions): Promise;\r\n signSTXTransfer({ recipient, amount, memo, nonce, postConditionMode, postConditions, }: STXTransferOptions): Promise;\r\n}\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..796e4be36 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/code/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +{"code":"import { TokenSigner } from 'jsontokens';\r\nimport { getPublicKeyFromPrivate } from 'blockstack/lib/keys';\r\nimport { randomBytes } from 'blockstack/lib/encryption/cryptoRandom';\r\nimport { ecPairToAddress, hexStringToECPair } from 'blockstack';\r\nexport const DEFAULT_GAIA_HUB = 'https://gaia.blockstack.org/hub/';\r\nexport const getHubInfo = async (hubUrl) => {\r\n const response = await fetch(`${hubUrl}/hub_info`);\r\n const data = await response.json();\r\n return data;\r\n};\r\nexport const getHubPrefix = async (hubUrl) => {\r\n const { read_url_prefix } = await getHubInfo(hubUrl);\r\n return read_url_prefix;\r\n};\r\nexport const makeGaiaAssociationToken = (secretKeyHex, childPublicKeyHex) => {\r\n const LIFETIME_SECONDS = 365 * 24 * 3600;\r\n const signerKeyHex = secretKeyHex.slice(0, 64);\r\n const compressedPublicKeyHex = getPublicKeyFromPrivate(signerKeyHex);\r\n const salt = randomBytes(16).toString('hex');\r\n const payload = {\r\n childToAssociate: childPublicKeyHex,\r\n iss: compressedPublicKeyHex,\r\n exp: LIFETIME_SECONDS + new Date().getTime() / 1000,\r\n iat: Date.now() / 1000,\r\n salt,\r\n };\r\n const tokenSigner = new TokenSigner('ES256K', signerKeyHex);\r\n const token = tokenSigner.sign(payload);\r\n return token;\r\n};\r\nexport const connectToGaiaHubWithConfig = ({ hubInfo, privateKey, gaiaHubUrl, }) => {\r\n const readURL = hubInfo.read_url_prefix;\r\n const token = makeGaiaAuthToken({ hubInfo, privateKey, gaiaHubUrl });\r\n const address = ecPairToAddress(hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')));\r\n return {\r\n url_prefix: readURL,\r\n max_file_upload_size_megabytes: 100,\r\n address,\r\n token,\r\n server: gaiaHubUrl,\r\n };\r\n};\r\n/**\r\n * When you already know the Gaia read URL, make a Gaia config that doesn't have to fetch `/hub_info`\r\n */\r\nexport const makeReadOnlyGaiaConfig = ({ readURL, privateKey, }) => {\r\n const address = ecPairToAddress(hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')));\r\n return {\r\n url_prefix: readURL,\r\n max_file_upload_size_megabytes: 100,\r\n address,\r\n token: 'not_used',\r\n server: 'not_used',\r\n };\r\n};\r\nconst makeGaiaAuthToken = ({ hubInfo, privateKey, gaiaHubUrl }) => {\r\n const challengeText = hubInfo.challenge_text;\r\n const iss = getPublicKeyFromPrivate(privateKey);\r\n const salt = randomBytes(16).toString('hex');\r\n const payload = {\r\n gaiaHubUrl,\r\n iss,\r\n salt,\r\n };\r\n if (challengeText) {\r\n payload.gaiaChallenge = challengeText;\r\n }\r\n const token = new TokenSigner('ES256K', privateKey).sign(payload);\r\n return `v1:${token}`;\r\n};\r\nexport const uploadToGaiaHub = async (filename, contents, hubConfig) => {\r\n const contentType = 'application/json';\r\n const response = await fetch(`${hubConfig.server}/store/${hubConfig.address}/${filename}`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': contentType,\r\n Authorization: `bearer ${hubConfig.token}`,\r\n },\r\n body: contents,\r\n referrer: 'no-referrer',\r\n referrerPolicy: 'no-referrer',\r\n });\r\n const { publicURL } = await response.json();\r\n return publicURL;\r\n};\r\n//# sourceMappingURL=gaia.js.map","references":["/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/jsontokens/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/keys.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/encryption/cryptoRandom.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/index.d.ts","/Users/Yukan/Desktop/work/blockstack/stacks.js/node_modules/blockstack/lib/storage/hub.d.ts"],"map":"{\"version\":3,\"file\":\"gaia.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/gaia.ts\"],\"names\":[],\"mappings\":\"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\"}","dts":{"name":"/Users/Yukan/Desktop/work/blockstack/stacks.js/packages/keychain/utils/gaia.d.ts","writeByteOrderMark":false,"text":"/// \r\nimport { GaiaHubConfig } from 'blockstack/lib/storage/hub';\r\nexport declare const DEFAULT_GAIA_HUB = \"https://gaia.blockstack.org/hub/\";\r\ninterface HubInfo {\r\n challenge_text?: string;\r\n read_url_prefix: string;\r\n}\r\nexport declare const getHubInfo: (hubUrl: string) => Promise;\r\nexport declare const getHubPrefix: (hubUrl: string) => Promise;\r\nexport declare const makeGaiaAssociationToken: (secretKeyHex: string, childPublicKeyHex: string) => string;\r\ninterface ConnectToGaiaOptions {\r\n hubInfo: HubInfo;\r\n privateKey: string;\r\n gaiaHubUrl: string;\r\n}\r\nexport declare const connectToGaiaHubWithConfig: ({ hubInfo, privateKey, gaiaHubUrl, }: ConnectToGaiaOptions) => GaiaHubConfig;\r\ninterface ReadOnlyGaiaConfigOptions {\r\n readURL: string;\r\n privateKey: string;\r\n}\r\n/**\r\n * When you already know the Gaia read URL, make a Gaia config that doesn't have to fetch `/hub_info`\r\n */\r\nexport declare const makeReadOnlyGaiaConfig: ({ readURL, privateKey, }: ReadOnlyGaiaConfigOptions) => GaiaHubConfig;\r\nexport declare const uploadToGaiaHub: (filename: string, contents: Blob | Buffer | ArrayBufferView | string, hubConfig: GaiaHubConfig) => Promise;\r\nexport {};\r\n"}} diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/semanticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/13205ad398a43e460b6d020ace429ae0e402d81c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/1a8c0b6b5298dfc08d6fb8f612117758f72c926c @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/45640da831af9251e3e0a267bb25325b1a5f1c6d @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/583c0db565c43efc8d8092079c22a079d6a6616a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/68faf2e2e76e8c0b8d3f6b3d1b0f769f3e210b06 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/8c894a8f1f8464e6eeca424a3f197b1c3a8baa5a @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/98e2ad19af17ce694186201b537c60c71e2375eb @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/cfe0e5d47dbef6cb464e0b40939f015ab4348e19 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/e1a34eceff5cefebe7e287b9c11f870a3860728b @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/ee82aa9feb8685e9267176ef94f3c7a3f70999b0 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/f77f65834a206228f8276350a71aa5e8683e1dd1 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/syntacticDiagnostics/cache/fa8e5a38ce41162270b1ceba3dc7776b1a57eb33 @@ -0,0 +1 @@ +[] diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/018dd99255a534837916033f04b396b3c5b771ad b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/018dd99255a534837916033f04b396b3c5b771ad new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/061a2a662a532413fb382823dd2453c8537b4338 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/061a2a662a532413fb382823dd2453c8537b4338 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/0a3685808888de90b1b3ecb36564030637748ab4 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/0a446c325cb8c24fe811c6b19aab7ab275c0db86 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/15bd539a8b73339bee06677ee708a3282bbc9381 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/20a495fb1dfe731713dfda92e7a4719aab33fa3f new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/28bd272a34625bd8e74ee2237a679979e14acd69 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/298c4c482e5e8695fe5b439f9bd4a710f5476742 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/2c3d9cd8ceb5c0183b19b2b638e291bc525011ce new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/314c9c585547e1ee805fe1597f307af31b72559c b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/314c9c585547e1ee805fe1597f307af31b72559c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/3610ab0cae618e49ed640a6de622cab1867a3279 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/39f625af48fcdb5e736b8a9ab0f109480c95510e new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/420b2f97ccbc239de9691385af956534d4545c2c b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/420b2f97ccbc239de9691385af956534d4545c2c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4796d97ff3ea5e5caa9fe28a603eb51d36712156 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4b0bf9b03b333369e35cfa3d0b3c209bcaeb4102 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4cfe53f7d2be6c72b1495a9756434179a44adac5 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/4f4b91b5ea480a58d20a40be48fe5eeef8cec235 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/52c95394db9042c340e050a9daf07c220e13c1a9 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/5636ae99aac5467ffdd23e74452bc16e2f851a89 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/5b3ce567ec9254d08d8f4a28e1de72024ba6b311 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/5d505bd6033614b83472130afc442eb22c6f5b82 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/68a97be92cadc023d3b6c6b48771d54104a78627 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/747cee4b5246f21f7ceafab1c30bbe1c04e0a8f5 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/74d99e3f4913186c7d910fdb89fd70b4c52c0165 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/77be180552308ee56eca33fa0bb84265c89dbfa0 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/7ddb0f66786a3703f3f195c455a12bff889c8bcd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/7f9c457a28805a67029ffd99e65c70684da51c50 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/808e8c20e1197288fb985d7783266d2f2e22f6f2 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/81beb3f96fea6641c58362feec8bbd0bfc8388eb new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/826f10c8f5ae490a156c6929d4b35933ba672a51 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/875bcbf69bfdbe6fd33dceca271e7a29b3cb6a54 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/8ce3136d5e93f85302e65da07c4490e75920e111 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/8ed0c355c44d51d3dec8e3367d6d7378f1b1e331 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/952b3e2542bee782b990d0b76011cd46028160a2 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/98cea4347c2c64de95d06bb8d324c781f54b78c0 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/9a77639b5f3a7e3514cf67391c5346777e65ca11 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/9ed2612615091d088e52b934dbdc159280dc237c b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/9ed2612615091d088e52b934dbdc159280dc237c new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a1afc86caf79df50b054cb5aeceb661e6c52dcad new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a2503f6faa05b23568c7de81fbc06a2f8a9c5653 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a57444ecf97c5452d43fd234f345ed3cb6d284dd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/a7d095190f82312241dfeb26daa76e95c4ea07d8 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/af470c7a1abb2658e06e01a602fccbcdfeca5351 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/b76be8f94a8337c1ece3bcfc01c0959eb2714479 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/bb232be6f4e91036318a1c4c8bab84163fee3069 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/c3d05c43e37392271aa3b4b0f9b30f425dc65f94 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/cb06d8f5731aa84e96067f43359e74f9836130af new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/cb9a36baab558a41562633e18c5201d5d5568cdc new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/cd8445e3b03d9c3b1dec11ef365aff4222641c73 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/d19188fc31e61bc54c1f1846312e66f6e09a3f0e new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/d7ca5917d30929d28c7417f16f9a01a37bbfcdb7 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/df3accc7b1f17bfe1818f68f26a3c075ca29d4bd new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/e037b1c1df5b9423d795f7a6a8876408105d8566 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/ee827e2392a2ccd738741679fcd76b97d0516c90 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/f2dfa032b844e39c4a65c35652abc193da342e75 new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/fae54f93545510c8db4ed307ea8397a19112446a b/packages/keychain/.rts2_cache_umd/rpt2_bcb599879d2f4a927633b5387708a3f988eb56e3/types/cache/fae54f93545510c8db4ed307ea8397a19112446a new file mode 100644 index 000000000..e69de29bb diff --git a/packages/keychain/README.md b/packages/keychain/README.md new file mode 100644 index 000000000..6ff1533f6 --- /dev/null +++ b/packages/keychain/README.md @@ -0,0 +1,11 @@ +# `keychain` + +> TODO: description + +## Usage + +``` +const keychain = require('keychain'); + +// TODO: DEMONSTRATE API +``` diff --git a/packages/keychain/jest.config.js b/packages/keychain/jest.config.js new file mode 100644 index 000000000..25c7a5924 --- /dev/null +++ b/packages/keychain/jest.config.js @@ -0,0 +1,16 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + coverageDirectory: './coverage/', + collectCoverage: true, + globals: { + 'ts-jest': { + diagnostics: { + ignoreCodes: ['TS151001'], + }, + }, + }, + moduleFileExtensions: ['js', 'ts', 'd.ts'], + setupFiles: ['./tests/global-setup.ts'], + setupFilesAfterEnv: ['./tests/setup.ts'], +}; diff --git a/packages/keychain/package-lock.json b/packages/keychain/package-lock.json new file mode 100644 index 000000000..97dc177f2 --- /dev/null +++ b/packages/keychain/package-lock.json @@ -0,0 +1,1690 @@ +{ + "name": "@stacks/keychain", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@blockstack/prettier-config": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@blockstack/prettier-config/-/prettier-config-0.0.6.tgz", + "integrity": "sha512-ke0MdyblmoUqSJBEutsG8/6G7KAjCB+uOcgZHPJvJr4R+i5yRhT4GSe5nV/wREINuK0jj2GvaA6qlx4PQTKQUA==", + "dev": true + }, + "@types/node": { + "version": "13.13.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.15.tgz", + "integrity": "sha512-kwbcs0jySLxzLsa2nWUAGOd/s21WU1jebrEdtzhsj1D4Yps1EOuyI1Qcu+FD56dL7NRNIJtDDjcqIG22NwkgLw==", + "dev": true + }, + "bitcoinjs-lib": { + "version": "5.1.10", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.1.10.tgz", + "integrity": "sha512-CesUqtBtnYc+SOMsYN9jWQWhdohW1MpklUkF7Ukn4HiAyN6yxykG+cIJogfRt6x5xcgH87K1Q+Mnoe/B+du1Iw==", + "requires": { + "bech32": "^1.1.2", + "bip174": "^1.0.1", + "bip32": "^2.0.4", + "bip66": "^1.1.0", + "bitcoin-ops": "^1.4.0", + "bs58check": "^2.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.3", + "merkle-lib": "^2.0.10", + "pushdata-bitcoin": "^1.0.1", + "randombytes": "^2.0.1", + "tiny-secp256k1": "^1.1.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.0.4", + "wif": "^2.0.1" + }, + "dependencies": { + "@types/node": { + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" + }, + "base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bip174": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bip174/-/bip174-1.0.1.tgz", + "integrity": "sha512-Mq2aFs1TdMfxBpYPg7uzjhsiXbAtoVq44TNjEWtvuZBiBgc3m7+n55orYMtTAxdg7jWbL4DtH0MKocJER4xERQ==" + }, + "bip32": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.5.tgz", + "integrity": "sha512-zVY4VvJV+b2fS0/dcap/5XLlpqtgwyN8oRkuGgAS1uLOeEp0Yo6Tw2yUTozTtlrMJO3G8n4g/KX/XGFHW6Pq3g==", + "requires": { + "@types/node": "10.12.18", + "bs58check": "^2.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "tiny-secp256k1": "^1.1.3", + "typeforce": "^1.11.5", + "wif": "^2.0.6" + } + }, + "bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "bitcoin-ops": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", + "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" + }, + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "merkle-lib": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz", + "integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY=" + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" + }, + "pushdata-bitcoin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", + "integrity": "sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=", + "requires": { + "bitcoin-ops": "^1.3.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "tiny-secp256k1": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.5.tgz", + "integrity": "sha512-duE2hSLSQIpHGzmK48OgRrGTi+4OTkXLC6aa86uOYQ6LLCYZSarVKIAvEtY7MoXjoL6bOXMSerEGMzrvW4SkDw==", + "requires": { + "bindings": "^1.3.0", + "bn.js": "^4.11.8", + "create-hmac": "^1.1.7", + "elliptic": "^6.4.0", + "nan": "^2.13.2" + } + }, + "typeforce": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", + "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "varuint-bitcoin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", + "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "wif": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", + "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", + "requires": { + "bs58check": "<3.0.0" + } + } + } + }, + "codecov": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.7.2.tgz", + "integrity": "sha512-fmCjAkTese29DUX3GMIi4EaKGflHa4K51EoMc29g8fBHawdk/+KEq5CWOeXLdd9+AT7o1wO4DIpp/Z1KCqCz1g==", + "dev": true, + "requires": { + "argv": "0.0.2", + "ignore-walk": "3.0.3", + "js-yaml": "3.13.1", + "teeny-request": "6.0.1", + "urlgrey": "0.4.4" + }, + "dependencies": { + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "agent-base": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", + "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", + "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dev": true, + "requires": { + "agent-base": "5", + "debug": "4" + }, + "dependencies": { + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true + } + } + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "dev": true, + "requires": { + "stubs": "^3.0.0" + } + }, + "stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", + "dev": true + }, + "teeny-request": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.1.tgz", + "integrity": "sha512-TAK0c9a00ELOqLrZ49cFxvPVogMUFaWY8dUsQc/0CuQPGF+BOxOQzXfE413BAk2kLomwNplvdtMpeaeGWmoc2g==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^4.0.0", + "node-fetch": "^2.2.0", + "stream-events": "^1.0.5", + "uuid": "^3.3.2" + } + }, + "urlgrey": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", + "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + } + } + }, + "prettier": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", + "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==" + }, + "triplesec": { + "version": "3.0.27", + "resolved": "https://registry.npmjs.org/triplesec/-/triplesec-3.0.27.tgz", + "integrity": "sha512-FDhkxa3JYnPOerOd+8k+SBmm7cb7KkyX+xXwNFV3XV6dsQgHuRvjtbnzWfPJ2kimeR8ErjZfPd/6r7RH6epHDw==", + "requires": { + "iced-error": ">=0.0.9", + "iced-lock": "^1.0.1", + "iced-runtime": "^1.0.2", + "more-entropy": ">=0.0.7", + "progress": "~1.1.2", + "uglify-js": "^3.1.9" + }, + "dependencies": { + "iced-error": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/iced-error/-/iced-error-0.0.13.tgz", + "integrity": "sha512-yEEaG8QfyyRL0SsbNNDw3rVgTyqwHFMCuV6jDvD43f/2shmdaFXkqvFLGhDlsYNSolzYHwVLM/CrXt9GygYopA==" + }, + "iced-lock": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/iced-lock/-/iced-lock-1.1.0.tgz", + "integrity": "sha1-YRbvHKs6zW5rEIk7snumIv0/3nI=", + "requires": { + "iced-runtime": "^1.0.0" + } + }, + "iced-runtime": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/iced-runtime/-/iced-runtime-1.0.4.tgz", + "integrity": "sha512-rgiJXNF6ZgF2Clh/TKUlBDW3q51YPDJUXmxGQXx1b8tbZpVpTn+1RX9q1sjNkujXIIaVxZByQzPHHORg7KV51g==" + }, + "more-entropy": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/more-entropy/-/more-entropy-0.0.7.tgz", + "integrity": "sha1-Z7/G96hvJvvDeqyD/UbYjGHRCbU=", + "requires": { + "iced-runtime": ">=0.0.1" + } + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" + }, + "uglify-js": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.1.tgz", + "integrity": "sha512-RjxApKkrPJB6kjJxQS3iZlf///REXWYxYJxO/MpmlQzVkDWVI3PSnCBWezMecmTU/TRkNxrl8bmsfFQCp+LO+Q==" + } + } + }, + "typescript": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "dev": true + } + } +} diff --git a/packages/keychain/package.json b/packages/keychain/package.json new file mode 100644 index 000000000..ae7661470 --- /dev/null +++ b/packages/keychain/package.json @@ -0,0 +1,93 @@ +{ + "name": "@stacks/keychain", + "version": "1.0.0", + "description": "A package for managing Stacks keychains", + "keywords": [ + "Stacks", + "Blockstack", + "Keychain" + ], + "main": "./dist/index.js", + "umd:main": "./dist/keychain.umd.production.js", + "module": "./dist/keychain.esm.js", + "author": "Hank Stoever", + "types": "./dist/index.d.ts", + "homepage": "https://blockstack.org", + "contributors": [ + { + "name": "Hank Stoever" + }, + { + "name": "Ken Liao" + } + ], + "license": "GPL-3.0-or-later", + "directories": { + "dist": "dist", + "test": "__tests__" + }, + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "git+https://06b76cfb3a7af3943f79d09916e95f33e7c9ebd5@github.com/blockstack/blockstack.js.git" + }, + "scripts": { + "clean": "shx rm -rf ./lib*/", + "dev": "cross-env NODE_ENV=development tsdx watch", + "build": "cross-env NODE_ENV=production tsdx build --format=cjs,esm,umd", + "build-all": "run-p build:*", + "build:cjs": "tsc --outDir ./lib -m commonjs -t es2017", + "build:esm": "tsc --outDir ./lib-esm -m es6 -t es2017", + "build:cjs:watch": "tsc --outDir ./lib -m commonjs -t es2017 --watch", + "build:esm:watch": "tsc --outDir ./lib-esm -m es6 -t es2017 --watch", + "test": "jest", + "test:watch": "jest --watch --coverage=false", + "lint": "yarn lint:eslint && yarn lint:prettier", + "lint:eslint": "eslint \"src/**/*.{ts,tsx}\" -f unix", + "lint:fix": "eslint \"src/**/*.{ts,tsx}\" -f unix --fix", + "lint:prettier": "prettier --check \"src/**/*.{ts,tsx}\" *.js", + "lint:prettier:fix": "prettier --write \"src/**/*.{ts,tsx}\" *.js", + "depcheck": "depcheck --ignores='@types/*,eslint*,safe-buffer,codecov,@typescript-eslint/*,@blockstack/*'", + "typecheck": "tsc --noEmit", + "prepublishOnly": "yarn build" + }, + "devDependencies": { + "@babel/compat-data": "^7.10.1", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", + "@blockstack/prettier-config": "^0.0.6", + "@types/bn.js": "^4.11.6", + "@types/jest": "^25.2.1", + "@types/node": "^13.13.10", + "@types/triplesec": "^3.0.0", + "codecov": "^3.5.0", + "cross-env": "^6.0.3", + "depcheck": "^0.8.3", + "eslint": "^6.3.0", + "eslint-plugin-jest": "^23.8.2", + "jest": "^24.9.0", + "jest-fetch-mock": "^2.1.2", + "npm-run-all": "^4.1.5", + "shx": "^0.3.2", + "ts-jest": "^24.3.0", + "tsdx": "^0.11.0", + "typescript": "^3.7.3" + }, + "dependencies": { + "@blockstack/rpc-client": "^0.3.0-alpha.11", + "@blockstack/stacks-transactions": "0.5.1", + "bip39": "^3.0.2", + "bitcoinjs-lib": "^5.1.6", + "blockstack": "21.0.0", + "bn.js": "^5.1.1", + "c32check": "^1.0.1", + "jsontokens": "^3.0.0", + "prettier": "^2.0.5", + "triplesec": "^3.0.27", + "zone-file": "^1.0.0" + }, + "bugs": { + "url": "https://github.com/blockstack/blockstack.js/issues" + } +} diff --git a/packages/keychain/src/address-derivation/index.ts b/packages/keychain/src/address-derivation/index.ts new file mode 100644 index 000000000..1824788f1 --- /dev/null +++ b/packages/keychain/src/address-derivation/index.ts @@ -0,0 +1,36 @@ +import { + ChainID, + getAddressFromPrivateKey, + TransactionVersion, +} from '@blockstack/stacks-transactions'; +import { BIP32Interface, ECPair } from 'bitcoinjs-lib'; +import { ecPairToHexString } from 'blockstack'; + +const networkDerivationPath = `m/44'/5757'/0'/0/0`; + +export const derivationPaths = { + [ChainID.Mainnet]: networkDerivationPath, + [ChainID.Testnet]: networkDerivationPath, +}; + +export function getDerivationPath(chain: ChainID) { + return derivationPaths[chain]; +} + +export function deriveStxAddressChain(chain: ChainID) { + return (rootNode: BIP32Interface) => { + const childKey = rootNode.derivePath(getDerivationPath(chain)); + if (!childKey.privateKey) { + throw new Error('Unable to derive private key from `rootNode`, bip32 master keychain'); + } + const ecPair = ECPair.fromPrivateKey(childKey.privateKey); + const privateKey = ecPairToHexString(ecPair); + const txVersion = + chain === ChainID.Mainnet ? TransactionVersion.Mainnet : TransactionVersion.Testnet; + return { + childKey, + address: getAddressFromPrivateKey(privateKey, txVersion), + privateKey, + }; + }; +} diff --git a/packages/keychain/src/encryption/decrypt.ts b/packages/keychain/src/encryption/decrypt.ts new file mode 100644 index 000000000..71c38779a --- /dev/null +++ b/packages/keychain/src/encryption/decrypt.ts @@ -0,0 +1,14 @@ +import { decrypt as triplesecDecrypt } from 'triplesec'; +import { decryptMnemonic } from 'blockstack/lib/encryption/wallet'; + +/** + * Decrypt an encrypted mnemonic phrase with a password. + * Legacy triplesec encrypted payloads are also supported. + * @param data - Buffer or hex-encoded string of the encrypted mnemonic + * @param password - Password for data + * @return the raw mnemonic phrase + */ +export async function decrypt(dataBuffer: Buffer | string, password: string): Promise { + const result = await decryptMnemonic(dataBuffer, password, triplesecDecrypt); + return result; +} diff --git a/packages/keychain/src/encryption/encrypt.ts b/packages/keychain/src/encryption/encrypt.ts new file mode 100644 index 000000000..92a6432f4 --- /dev/null +++ b/packages/keychain/src/encryption/encrypt.ts @@ -0,0 +1,12 @@ +import { encryptMnemonic } from 'blockstack/lib/encryption/wallet'; + +/** + * Encrypt a raw mnemonic phrase to be password protected + * @param phrase - Raw mnemonic phrase + * @param password - Password to encrypt mnemonic with + * @return The encrypted phrase + * */ +export async function encrypt(phrase: string, password: string): Promise { + const result = await encryptMnemonic(phrase, password); + return result; +} diff --git a/packages/keychain/src/identity.ts b/packages/keychain/src/identity.ts new file mode 100644 index 000000000..2662cd320 --- /dev/null +++ b/packages/keychain/src/identity.ts @@ -0,0 +1,170 @@ +import { bip32, ECPair } from 'bitcoinjs-lib'; +import { getPublicKeyFromPrivate } from 'blockstack/lib/keys'; +import { makeAuthResponse } from 'blockstack/lib/auth/authMessages'; +import { getProfileURLFromZoneFile } from './utils'; + +import { IdentityKeyPair } from './utils/index'; +import { + makeGaiaAssociationToken, + DEFAULT_GAIA_HUB, + getHubInfo, + connectToGaiaHubWithConfig, +} from './utils/gaia'; +import IdentityAddressOwnerNode from './nodes/identity-address-owner-node'; +import { Profile, fetchProfile, DEFAULT_PROFILE, signAndUploadProfile } from './profiles'; +import { ecPairToAddress } from 'blockstack'; + +interface IdentityConstructorOptions { + keyPair: IdentityKeyPair; + address: string; + usernames?: string[]; + defaultUsername?: string; + profile?: Profile; +} + +interface RefreshOptions { + gaiaUrl: string; +} + +export class Identity { + public keyPair: IdentityKeyPair; + public address: string; + public defaultUsername?: string; + public usernames: string[]; + public profile?: Profile; + + constructor({ + keyPair, + address, + usernames, + defaultUsername, + profile, + }: IdentityConstructorOptions) { + this.keyPair = keyPair; + this.address = address; + this.usernames = usernames || []; + this.defaultUsername = defaultUsername; + this.profile = profile; + } + + async makeAuthResponse({ + appDomain, + gaiaUrl, + transitPublicKey, + scopes = [], + stxAddress, + }: { + appDomain: string; + gaiaUrl: string; + transitPublicKey: string; + scopes?: string[]; + stxAddress?: string; + }) { + const appPrivateKey = this.appPrivateKey(appDomain); + const hubInfo = await getHubInfo(gaiaUrl); + const profileUrl = await this.profileUrl(hubInfo.read_url_prefix); + const profile = + (await fetchProfile({ identity: this, gaiaUrl: hubInfo.read_url_prefix })) || DEFAULT_PROFILE; + if (scopes.includes('publish_data')) { + if (!profile.apps) { + profile.apps = {}; + } + const challengeSigner = ECPair.fromPrivateKey(Buffer.from(appPrivateKey, 'hex')); + const storageUrl = `${hubInfo.read_url_prefix}${ecPairToAddress(challengeSigner)}/`; + profile.apps[appDomain] = storageUrl; + if (!profile.appsMeta) { + profile.appsMeta = {}; + } + profile.appsMeta[appDomain] = { + storage: storageUrl, + publicKey: challengeSigner.publicKey.toString('hex'), + }; + const gaiaHubConfig = connectToGaiaHubWithConfig({ + hubInfo, + privateKey: this.keyPair.key, + gaiaHubUrl: gaiaUrl, + }); + await signAndUploadProfile({ profile, identity: this, gaiaHubUrl: gaiaUrl, gaiaHubConfig }); + } + this.profile = profile; + + const compressedAppPublicKey = getPublicKeyFromPrivate(appPrivateKey.slice(0, 64)); + const associationToken = makeGaiaAssociationToken(this.keyPair.key, compressedAppPublicKey); + + return makeAuthResponse( + this.keyPair.key, + { + ...(this.profile || {}), + stxAddress, + }, + this.defaultUsername || '', + { + profileUrl, + }, + undefined, + appPrivateKey, + undefined, + transitPublicKey, + gaiaUrl, + undefined, + associationToken + ); + } + + appPrivateKey(appDomain: string) { + const { salt, appsNodeKey } = this.keyPair; + const appsNode = new IdentityAddressOwnerNode(bip32.fromBase58(appsNodeKey), salt); + return appsNode.getAppPrivateKey(appDomain); + } + + async profileUrl(gaiaUrl: string): Promise { + if (this.defaultUsername) { + try { + const url = await getProfileURLFromZoneFile(this.defaultUsername); + if (url) return url; + } catch (error) { + if (process.env.NODE_ENV !== 'test') { + console.warn('Error fetching profile URL from zone file:', error); + } + } + } + return `${gaiaUrl}${this.address}/profile.json`; + } + + async fetchNames() { + const getNamesUrl = `https://core.blockstack.org/v1/addresses/bitcoin/${this.address}`; + const res = await fetch(getNamesUrl); + const data = await res.json(); + const { names }: { names: string[] } = data; + return names; + } + + /** + * Fetch existing information related to this identity, like username and profile information + */ + async refresh(opts: RefreshOptions = { gaiaUrl: DEFAULT_GAIA_HUB }) { + try { + const names = await this.fetchNames(); + if (names) { + if (names[0] && !this.defaultUsername) { + this.defaultUsername = names[0]; + } + names.forEach(name => { + const existingIndex = this.usernames.findIndex(u => u === name); + if (existingIndex === -1) { + this.usernames.push(name); + } + }); + } + const profile = await fetchProfile({ identity: this, gaiaUrl: opts.gaiaUrl }); + if (profile) { + this.profile = profile; + } + return; + } catch (error) { + return; + } + } +} + +export default Identity; diff --git a/packages/keychain/src/index.ts b/packages/keychain/src/index.ts new file mode 100644 index 000000000..f9ed0bc8c --- /dev/null +++ b/packages/keychain/src/index.ts @@ -0,0 +1,15 @@ +import Wallet from './wallet'; +export * from './utils'; +export * from './mnemonic'; +export * from './address-derivation'; +export { default as Wallet } from './wallet'; +export * from './wallet'; +export * from './wallet/signer'; +export { decrypt } from './encryption/decrypt'; +export { encrypt } from './encryption/encrypt'; +export * from './profiles'; +export * from './identity'; + +export default { + Wallet, +}; diff --git a/packages/keychain/src/mnemonic/index.ts b/packages/keychain/src/mnemonic/index.ts new file mode 100644 index 000000000..2d2a53373 --- /dev/null +++ b/packages/keychain/src/mnemonic/index.ts @@ -0,0 +1,45 @@ +import { generateMnemonic as generateBip39Mnemonic, mnemonicToSeed } from 'bip39'; +import { randomBytes } from 'blockstack/lib/encryption/cryptoRandom'; +import { bip32 } from 'bitcoinjs-lib'; + +import { encrypt } from '../encryption/encrypt'; +import { encryptMnemonic } from 'blockstack'; + +export type AllowedKeyEntropyBits = 128 | 256; + +export async function generateMnemonicRootKeychain(entropy: AllowedKeyEntropyBits) { + const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes); + const seedBuffer = await mnemonicToSeed(plaintextMnemonic); + const rootNode = bip32.fromSeed(seedBuffer); + return { + rootNode, + plaintextMnemonic, + }; +} + +export async function generateEncryptedMnemonicRootKeychain( + password: string, + entropy: AllowedKeyEntropyBits +) { + const plaintextMnemonic = generateBip39Mnemonic(entropy, randomBytes); + const seedBuffer = await mnemonicToSeed(plaintextMnemonic); + const rootNode = bip32.fromSeed(seedBuffer); + const ciphertextBuffer = await encrypt(plaintextMnemonic, password); + const encryptedMnemonicPhrase = ciphertextBuffer.toString('hex'); + return { + rootNode, + encryptedMnemonicPhrase, + }; +} + +export async function deriveRootKeychainFromMnemonic(plaintextMnemonic: string) { + const seedBuffer = await mnemonicToSeed(plaintextMnemonic); + const rootNode = bip32.fromSeed(seedBuffer); + return rootNode; +} + +export async function encryptMnemonicFormatted(plaintextMnemonic: string, password: string) { + const encryptedMnemonic = await encryptMnemonic(plaintextMnemonic, password); + const encryptedMnemonicHex = encryptedMnemonic.toString('hex'); + return { encryptedMnemonic, encryptedMnemonicHex }; +} diff --git a/packages/keychain/src/nodes/identity-address-owner-node.ts b/packages/keychain/src/nodes/identity-address-owner-node.ts new file mode 100644 index 000000000..0ca9531ed --- /dev/null +++ b/packages/keychain/src/nodes/identity-address-owner-node.ts @@ -0,0 +1,76 @@ +import { BIP32Interface } from 'bitcoinjs-lib'; +import { getLegacyAppNode } from 'blockstack/lib/wallet'; +import { publicKeyToAddress } from 'blockstack/lib/keys'; +import { getAddress } from '../utils'; + +const APPS_NODE_INDEX = 0; +const SIGNING_NODE_INDEX = 1; +const ENCRYPTION_NODE_INDEX = 2; +const STX_NODE_INDEX = 6; + +export default class IdentityAddressOwnerNode { + hdNode: BIP32Interface; + + salt: string; + + constructor(ownerHdNode: BIP32Interface, salt: string) { + this.hdNode = ownerHdNode; + this.salt = salt; + } + + getNode() { + return this.hdNode; + } + + getSalt() { + return this.salt; + } + + getIdentityKey() { + if (!this.hdNode.privateKey) { + throw new Error('Node does not have private key'); + } + return this.hdNode.privateKey.toString('hex'); + } + + getIdentityKeyID() { + return this.hdNode.publicKey.toString('hex'); + } + + getAppsNode() { + return this.hdNode.deriveHardened(APPS_NODE_INDEX); + } + + getAddress() { + return getAddress(this.hdNode); + } + + getEncryptionNode() { + return this.hdNode.deriveHardened(ENCRYPTION_NODE_INDEX); + } + + getSigningNode() { + return this.hdNode.deriveHardened(SIGNING_NODE_INDEX); + } + + getSTXNode() { + return this.hdNode.deriveHardened(STX_NODE_INDEX); + } + + getAppNode(appDomain: string) { + return getLegacyAppNode(this.hdNode, this.salt, appDomain); + } + + getAppPrivateKey(appDomain: string) { + const appNode = this.getAppNode(appDomain); + if (!appNode.privateKey) { + throw new Error('App node does not have private key'); + } + return appNode.privateKey.toString('hex'); + } + + getAppAddress(appDomain: string) { + const appNode = this.getAppNode(appDomain); + return publicKeyToAddress(appNode.publicKey); + } +} diff --git a/packages/keychain/src/profiles.ts b/packages/keychain/src/profiles.ts new file mode 100644 index 000000000..3ba445acc --- /dev/null +++ b/packages/keychain/src/profiles.ts @@ -0,0 +1,203 @@ +import { + signProfileToken, + wrapProfileToken, + connectToGaiaHub, + makeProfileZoneFile, +} from 'blockstack'; +import { IdentityKeyPair } from './utils'; +import { uploadToGaiaHub } from './utils/gaia'; +import Identity from './identity'; +import { GaiaHubConfig } from 'blockstack/lib/storage/hub'; + +const PERSON_TYPE = 'Person'; +const CONTEXT = 'http://schema.org'; +const IMAGE_TYPE = 'ImageObject'; + +export interface ProfileImage { + '@type': typeof IMAGE_TYPE; + name: string; + contentUrl: string; +} + +export interface Profile { + '@type': typeof PERSON_TYPE; + '@context': typeof CONTEXT; + apps?: { + [origin: string]: string; + }; + appsMeta?: { + [origin: string]: { + publicKey: string; + storage: string; + }; + }; + name?: string; + image?: ProfileImage[]; + [key: string]: any; +} + +export const DEFAULT_PROFILE: Profile = { + '@type': 'Person', + '@context': 'http://schema.org', +}; + +const DEFAULT_PROFILE_FILE_NAME = 'profile.json'; + +export enum Subdomains { + TEST = 'test-personal.id', + BLOCKSTACK = 'id.blockstack', +} + +export const registrars = { + [Subdomains.TEST]: { + registerUrl: 'https://test-registrar.blockstack.org/register', + apiUrl: 'https://test-registrar.blockstack.org/v1/names', + }, + [Subdomains.BLOCKSTACK]: { + registerUrl: 'https://registrar.blockstack.org/register', + apiUrl: 'https://registrar.blockstack.org/v1/names', + }, +}; + +export function signProfileForUpload(profile: Profile, keypair: IdentityKeyPair) { + const privateKey = keypair.key; + const publicKey = keypair.keyID; + + const token = signProfileToken(profile, privateKey, { publicKey }); + const tokenRecord = wrapProfileToken(token); + const tokenRecords = [tokenRecord]; + return JSON.stringify(tokenRecords, null, 2); +} + +export async function uploadProfile( + gaiaHubUrl: string, + identity: Identity, + signedProfileTokenData: string, + gaiaHubConfig?: GaiaHubConfig +) { + const identityHubConfig = + gaiaHubConfig || (await connectToGaiaHub(gaiaHubUrl, identity.keyPair.key)); + + const uploadResponse = await uploadToGaiaHub( + DEFAULT_PROFILE_FILE_NAME, + signedProfileTokenData, + identityHubConfig + ); + return uploadResponse; +} + +interface SendToRegistrarParams { + username: string; + subdomain: Subdomains; + zoneFile: string; + identity: Identity; +} + +const sendUsernameToRegistrar = async ({ + username, + subdomain, + zoneFile, + identity, +}: SendToRegistrarParams) => { + const { registerUrl } = registrars[subdomain]; + + const registrationRequestBody = JSON.stringify({ + name: username, + owner_address: identity.address, + zonefile: zoneFile, + }); + + const requestHeaders = { + Accept: 'application/json', + 'Content-Type': 'application/json', + }; + + const response = await fetch(registerUrl, { + method: 'POST', + headers: requestHeaders, + body: registrationRequestBody, + }); + + if (!response.ok) { + return Promise.reject({ + error: 'Failed to register username', + status: response.status, + }); + } + + return response.json(); +}; + +interface RegisterParams { + identity: Identity; + /** The gaia hub URL to use for profile.json upload */ + gaiaHubUrl: string; + /** The username portion of this subdomain, i.e. only the portion of the name before any periods */ + username: string; + /** The "domain" used for this subdomain. Can be any of the `Subdomains` enum. */ + subdomain: Subdomains; +} + +/** + * Register a subdomain for a given identity + */ +export const registerSubdomain = async ({ + identity, + gaiaHubUrl, + username, + subdomain, +}: RegisterParams) => { + const profile = identity.profile || DEFAULT_PROFILE; + const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair); + const profileUrl = await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData); + const fullUsername = `${username}.${subdomain}`; + const zoneFile = makeProfileZoneFile(fullUsername, profileUrl); + await sendUsernameToRegistrar({ + username, + subdomain, + zoneFile, + identity, + }); + identity.defaultUsername = fullUsername; + identity.usernames.push(fullUsername); + return identity; +}; + +export const signAndUploadProfile = async ({ + profile, + gaiaHubUrl, + identity, + gaiaHubConfig, +}: { + profile: Profile; + gaiaHubUrl: string; + identity: Identity; + gaiaHubConfig?: GaiaHubConfig; +}) => { + const signedProfileTokenData = signProfileForUpload(profile, identity.keyPair); + await uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig); +}; + +export const fetchProfile = async ({ + identity, + gaiaUrl, +}: { + identity: Identity; + gaiaUrl: string; +}) => { + try { + const url = await identity.profileUrl(gaiaUrl); + const res = await fetch(url); + if (res.ok) { + const json = await res.json(); + const { decodedToken } = json[0]; + return decodedToken.payload?.claim as Profile; + } + if (res.status === 404) { + return null; + } + throw new Error('Network error when fetching profile'); + } catch (error) { + return null; + } +}; diff --git a/packages/keychain/src/types/zone-file.d.ts b/packages/keychain/src/types/zone-file.d.ts new file mode 100644 index 000000000..5c484166e --- /dev/null +++ b/packages/keychain/src/types/zone-file.d.ts @@ -0,0 +1,11 @@ +declare module 'zone-file' { + interface URI { + target: string; + } + export interface ZoneFile { + $origin: string; + uri: URI[]; + } + + export const parseZoneFile: (zoneFile: string) => ZoneFile +} diff --git a/packages/keychain/src/utils/gaia.ts b/packages/keychain/src/utils/gaia.ts new file mode 100644 index 000000000..56ad7527b --- /dev/null +++ b/packages/keychain/src/utils/gaia.ts @@ -0,0 +1,138 @@ +import { TokenSigner, Json } from 'jsontokens'; +import { getPublicKeyFromPrivate } from 'blockstack/lib/keys'; +import { randomBytes } from 'blockstack/lib/encryption/cryptoRandom'; +import { ecPairToAddress, hexStringToECPair } from 'blockstack'; +import { GaiaHubConfig } from 'blockstack/lib/storage/hub'; + +export const DEFAULT_GAIA_HUB = 'https://gaia.blockstack.org/hub/'; + +interface HubInfo { + challenge_text?: string; + read_url_prefix: string; +} + +export const getHubInfo = async (hubUrl: string) => { + const response = await fetch(`${hubUrl}/hub_info`); + const data: HubInfo = await response.json(); + return data; +}; + +export const getHubPrefix = async (hubUrl: string) => { + const { read_url_prefix } = await getHubInfo(hubUrl); + return read_url_prefix; +}; + +export const makeGaiaAssociationToken = ( + secretKeyHex: string, + childPublicKeyHex: string +): string => { + const LIFETIME_SECONDS = 365 * 24 * 3600; + const signerKeyHex = secretKeyHex.slice(0, 64); + const compressedPublicKeyHex = getPublicKeyFromPrivate(signerKeyHex); + const salt = randomBytes(16).toString('hex'); + const payload = { + childToAssociate: childPublicKeyHex, + iss: compressedPublicKeyHex, + exp: LIFETIME_SECONDS + new Date().getTime() / 1000, + iat: Date.now() / 1000, + salt, + }; + + const tokenSigner = new TokenSigner('ES256K', signerKeyHex); + const token = tokenSigner.sign(payload); + return token; +}; + +interface ConnectToGaiaOptions { + hubInfo: HubInfo; + privateKey: string; + gaiaHubUrl: string; +} + +export const connectToGaiaHubWithConfig = ({ + hubInfo, + privateKey, + gaiaHubUrl, +}: ConnectToGaiaOptions): GaiaHubConfig => { + const readURL = hubInfo.read_url_prefix; + const token = makeGaiaAuthToken({ hubInfo, privateKey, gaiaHubUrl }); + const address = ecPairToAddress( + hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')) + ); + return { + url_prefix: readURL, + max_file_upload_size_megabytes: 100, + address, + token, + server: gaiaHubUrl, + }; +}; + +interface ReadOnlyGaiaConfigOptions { + readURL: string; + privateKey: string; +} + +/** + * When you already know the Gaia read URL, make a Gaia config that doesn't have to fetch `/hub_info` + */ +export const makeReadOnlyGaiaConfig = ({ + readURL, + privateKey, +}: ReadOnlyGaiaConfigOptions): GaiaHubConfig => { + const address = ecPairToAddress( + hexStringToECPair(privateKey + (privateKey.length === 64 ? '01' : '')) + ); + return { + url_prefix: readURL, + max_file_upload_size_megabytes: 100, + address, + token: 'not_used', + server: 'not_used', + }; +}; + +interface GaiaAuthPayload { + gaiaHubUrl: string; + iss: string; + salt: string; + [key: string]: Json; +} + +const makeGaiaAuthToken = ({ hubInfo, privateKey, gaiaHubUrl }: ConnectToGaiaOptions) => { + const challengeText = hubInfo.challenge_text; + const iss = getPublicKeyFromPrivate(privateKey); + + const salt = randomBytes(16).toString('hex'); + const payload: GaiaAuthPayload = { + gaiaHubUrl, + iss, + salt, + }; + if (challengeText) { + payload.gaiaChallenge = challengeText; + } + const token = new TokenSigner('ES256K', privateKey).sign(payload); + return `v1:${token}`; +}; + +export const uploadToGaiaHub = async ( + filename: string, + contents: Blob | Buffer | ArrayBufferView | string, + hubConfig: GaiaHubConfig +): Promise => { + const contentType = 'application/json'; + + const response = await fetch(`${hubConfig.server}/store/${hubConfig.address}/${filename}`, { + method: 'POST', + headers: { + 'Content-Type': contentType, + Authorization: `bearer ${hubConfig.token}`, + }, + body: contents, + referrer: 'no-referrer', + referrerPolicy: 'no-referrer', + }); + const { publicURL } = await response.json(); + return publicURL; +}; diff --git a/packages/keychain/src/utils/index.ts b/packages/keychain/src/utils/index.ts new file mode 100644 index 000000000..589ebec54 --- /dev/null +++ b/packages/keychain/src/utils/index.ts @@ -0,0 +1,260 @@ +import { BIP32Interface } from 'bitcoinjs-lib'; +import IdentityAddressOwnerNode from '../nodes/identity-address-owner-node'; +import { createSha2Hash } from 'blockstack/lib/encryption/sha2Hash'; +import { publicKeyToAddress } from 'blockstack/lib/keys'; +import { parseZoneFile } from 'zone-file'; +import Identity from '../identity'; +import { AssertionError } from 'assert'; +import { Subdomains, registrars } from '../profiles'; + +const IDENTITY_KEYCHAIN = 888; +const BLOCKSTACK_ON_BITCOIN = 0; + +export function getIdentityPrivateKeychain(rootNode: BIP32Interface) { + return rootNode.deriveHardened(IDENTITY_KEYCHAIN).deriveHardened(BLOCKSTACK_ON_BITCOIN); +} + +const EXTERNAL_ADDRESS = 'EXTERNAL_ADDRESS'; +const CHANGE_ADDRESS = 'CHANGE_ADDRESS'; + +export function getBitcoinPrivateKeychain(rootNode: BIP32Interface) { + const BIP_44_PURPOSE = 44; + const BITCOIN_COIN_TYPE = 0; + const ACCOUNT_INDEX = 0; + + return rootNode + .deriveHardened(BIP_44_PURPOSE) + .deriveHardened(BITCOIN_COIN_TYPE) + .deriveHardened(ACCOUNT_INDEX); +} + +export function getBitcoinAddressNode( + bitcoinKeychain: BIP32Interface, + addressIndex = 0, + chainType = EXTERNAL_ADDRESS +) { + let chain = null; + + if (chainType === EXTERNAL_ADDRESS) { + chain = 0; + } else if (chainType === CHANGE_ADDRESS) { + chain = 1; + } else { + throw new Error('Invalid chain type'); + } + + return bitcoinKeychain.derive(chain).derive(addressIndex); +} + +export async function getIdentityOwnerAddressNode( + identityPrivateKeychain: BIP32Interface, + identityIndex = 0 +) { + if (identityPrivateKeychain.isNeutered()) { + throw new Error('You need the private key to generate identity addresses'); + } + + const publicKeyHex = Buffer.from(identityPrivateKeychain.publicKey.toString('hex')); + + const sha2Hash = await createSha2Hash(); + const saltData = await sha2Hash.digest(publicKeyHex, 'sha256'); + const salt = saltData.toString('hex'); + + return new IdentityAddressOwnerNode(identityPrivateKeychain.deriveHardened(identityIndex), salt); +} + +export function getAddress(node: BIP32Interface) { + return publicKeyToAddress(node.publicKey); +} + +export interface IdentityKeyPair { + key: string; + keyID: string; + address: string; + appsNodeKey: string; + stxNodeKey: string; + salt: string; +} + +export function deriveIdentityKeyPair( + identityOwnerAddressNode: IdentityAddressOwnerNode +): IdentityKeyPair { + const address = identityOwnerAddressNode.getAddress(); + const identityKey = identityOwnerAddressNode.getIdentityKey(); + const identityKeyID = identityOwnerAddressNode.getIdentityKeyID(); + const appsNode = identityOwnerAddressNode.getAppsNode(); + const stxNode = identityOwnerAddressNode.getSTXNode(); + const keyPair = { + key: identityKey, + keyID: identityKeyID, + address, + appsNodeKey: appsNode.toBase58(), + stxNodeKey: stxNode.toBase58(), + salt: identityOwnerAddressNode.getSalt(), + }; + return keyPair; +} + +export async function getBlockchainIdentities( + rootNode: BIP32Interface, + identitiesToGenerate: number +) { + const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode); + const bitcoinPrivateKeychainNode = getBitcoinPrivateKeychain(rootNode); + + const identityPublicKeychainNode = identityPrivateKeychainNode.neutered(); + const identityPublicKeychain = identityPublicKeychainNode.toBase58(); + + const bitcoinPublicKeychainNode = bitcoinPrivateKeychainNode.neutered(); + const bitcoinPublicKeychain = bitcoinPublicKeychainNode.toBase58(); + + const firstBitcoinAddress = getAddress(getBitcoinAddressNode(bitcoinPublicKeychainNode)); + + const identityAddresses: string[] = []; + const identityKeypairs = []; + const identities: Identity[] = []; + + // We pre-generate a number of identity addresses so that we + // don't have to prompt the user for the password on each new profile + for (let addressIndex = 0; addressIndex < identitiesToGenerate; addressIndex++) { + const identity = await makeIdentity(rootNode, addressIndex); + identities.push(identity); + identityKeypairs.push(identity.keyPair); + identityAddresses.push(identity.address); + } + + return { + identityPublicKeychain, + bitcoinPublicKeychain, + firstBitcoinAddress, + identityAddresses, + identityKeypairs, + identities, + }; +} + +export const makeIdentity = async (rootNode: BIP32Interface, index: number) => { + const identityPrivateKeychainNode = getIdentityPrivateKeychain(rootNode); + const identityOwnerAddressNode = await getIdentityOwnerAddressNode( + identityPrivateKeychainNode, + index + ); + const identityKeyPair = deriveIdentityKeyPair(identityOwnerAddressNode); + const identity = new Identity({ + keyPair: identityKeyPair, + address: identityKeyPair.address, + usernames: [], + }); + return identity; +}; + +export function assertIsTruthy(val: any): asserts val is NonNullable { + if (!val) { + throw new AssertionError({ expected: true, actual: val }); + } +} + +export enum IdentityNameValidityError { + MINIMUM_LENGTH = 'error_minimum_length', + MAXIMUM_LENGTH = 'error_maximum_length', + ILLEGAL_CHARACTER = 'error_illegal_character', + UNAVAILABLE = 'error_name_unavailable', +} + +const containsLegalCharacters = (name: string) => /^[a-z0-9_]+$/.test(name); + +export const validateSubdomainFormat = (identityName: string): IdentityNameValidityError | null => { + const nameLength = identityName.length; + + if (nameLength < 8) { + return IdentityNameValidityError.MINIMUM_LENGTH; + } + + if (nameLength > 37) { + return IdentityNameValidityError.MAXIMUM_LENGTH; + } + + if (!containsLegalCharacters(identityName)) { + return IdentityNameValidityError.ILLEGAL_CHARACTER; + } + + return null; +}; + +export const validateSubdomainAvailability = async ( + name: string, + subdomain: Subdomains = Subdomains.BLOCKSTACK +) => { + const url = `${registrars[subdomain].apiUrl}/${name.toLowerCase()}.${subdomain}`; + const resp = await fetch(url); + const data = await resp.json(); + return data; +}; + +interface RecursiveMakeIdentitiesOptions { + rootNode: BIP32Interface; + index?: number; + identities?: Identity[]; +} + +/** + * Restore identities by recursively making a new identity, and checking if it has a username. + * + * As soon as a username is not found for an identity, the recursion stops. + */ +export const recursiveRestoreIdentities = async ({ + rootNode, + index = 1, + identities = [], +}: RecursiveMakeIdentitiesOptions): Promise => { + const identity = await makeIdentity(rootNode, index); + await identity.refresh(); + if (identity.defaultUsername) { + identities.push(identity); + return recursiveRestoreIdentities({ rootNode, index: index + 1, identities }); + } + return identities; +}; + +/** + * Validate the format and availability of a subdomain. Will return an error of enum + * IdentityNameValidityError if an error is present. If no errors are found, will return null. + * @param name the subdomain to be registered + * @param subdomain a valid Subdomains enum + */ +export const validateSubdomain = async ( + name: string, + subdomain: Subdomains = Subdomains.BLOCKSTACK +) => { + const error = validateSubdomainFormat(name); + if (error) { + return error; + } + + try { + const data = await validateSubdomainAvailability(name, subdomain); + if (data.status !== 'available') { + return IdentityNameValidityError.UNAVAILABLE; + } + } catch (error) { + return IdentityNameValidityError.UNAVAILABLE; + } + + return null; +}; + +interface NameInfoResponse { + address: string; + zonefile: string; +} + +export const getProfileURLFromZoneFile = async (name: string) => { + const url = `https://core.blockstack.org/v1/names/${name}`; + const res = await fetch(url); + if (res.ok) { + const nameInfo: NameInfoResponse = await res.json(); + const zone = parseZoneFile(nameInfo.zonefile); + return zone.uri[0].target; + } + return; +}; diff --git a/packages/keychain/src/wallet/index.ts b/packages/keychain/src/wallet/index.ts new file mode 100644 index 000000000..75aa77306 --- /dev/null +++ b/packages/keychain/src/wallet/index.ts @@ -0,0 +1,330 @@ +import { mnemonicToSeed } from 'bip39'; +import { bip32, BIP32Interface } from 'bitcoinjs-lib'; +import { ChainID } from '@blockstack/stacks-transactions'; + +import { + getBlockchainIdentities, + IdentityKeyPair, + makeIdentity, + assertIsTruthy, + recursiveRestoreIdentities, +} from '../utils'; +import Identity from '../identity'; +import { decrypt } from '../encryption/decrypt'; +import { + connectToGaiaHub, + encryptContent, + getPublicKeyFromPrivate, + decryptContent, +} from 'blockstack'; +import { + AllowedKeyEntropyBits, + generateEncryptedMnemonicRootKeychain, + deriveRootKeychainFromMnemonic, + encryptMnemonicFormatted, +} from '../mnemonic'; +import { deriveStxAddressChain } from '../address-derivation'; +import { GaiaHubConfig } from 'blockstack/lib/storage/hub'; +import { makeReadOnlyGaiaConfig, DEFAULT_GAIA_HUB, uploadToGaiaHub } from '../utils/gaia'; +import { WalletSigner } from './signer'; + +const CONFIG_INDEX = 45; + +export interface ConfigApp { + origin: string; + scopes: string[]; + lastLoginAt: number; + appIcon: string; + name: string; +} + +interface ConfigIdentity { + username?: string; + address: string; + apps: { + [origin: string]: ConfigApp; + }; +} + +export interface WalletConfig { + identities: ConfigIdentity[]; + hideWarningForReusingIdentity?: boolean; +} + +export interface ConstructorOptions { + chain: ChainID; + identityPublicKeychain: string; + bitcoinPublicKeychain: string; + firstBitcoinAddress: string; + identityKeypairs: IdentityKeyPair[]; + identityAddresses: string[]; + encryptedBackupPhrase: string; + identities: Identity[]; + configPrivateKey: string; + stacksPrivateKey: string; + walletConfig?: WalletConfig; +} + +export class Wallet { + chain: ChainID; + encryptedBackupPhrase: string; + bitcoinPublicKeychain: string; + firstBitcoinAddress: string; + identityKeypairs: IdentityKeyPair[]; + identityAddresses: string[]; + identityPublicKeychain: string; + identities: Identity[]; + configPrivateKey: string; + stacksPrivateKey: string; + walletConfig?: WalletConfig; + + constructor({ + chain, + encryptedBackupPhrase, + identityPublicKeychain, + bitcoinPublicKeychain, + firstBitcoinAddress, + identityKeypairs, + identityAddresses, + identities, + configPrivateKey, + stacksPrivateKey, + walletConfig, + }: ConstructorOptions) { + this.chain = chain; + this.encryptedBackupPhrase = encryptedBackupPhrase; + this.identityPublicKeychain = identityPublicKeychain; + this.bitcoinPublicKeychain = bitcoinPublicKeychain; + this.firstBitcoinAddress = firstBitcoinAddress; + this.identityKeypairs = identityKeypairs; + this.identityAddresses = identityAddresses; + this.identities = identities.map(identity => new Identity(identity)); + this.configPrivateKey = configPrivateKey; + this.stacksPrivateKey = stacksPrivateKey; + this.walletConfig = walletConfig; + } + + static generateFactory(bitsEntropy: AllowedKeyEntropyBits) { + return async (password: string, chain: ChainID) => { + const { rootNode, encryptedMnemonicPhrase } = await generateEncryptedMnemonicRootKeychain( + password, + bitsEntropy + ); + return this.createAccount({ + encryptedBackupPhrase: encryptedMnemonicPhrase, + rootNode, + chain, + }); + }; + } + + static async generate(password: string, chain: ChainID) { + return await this.generateFactory(128)(password, chain); + } + + static async generateStrong(password: string, chain: ChainID) { + return await this.generateFactory(256)(password, chain); + } + + static async restore(password: string, seedPhrase: string, chain: ChainID) { + const rootNode = await deriveRootKeychainFromMnemonic(seedPhrase); + const { encryptedMnemonicHex } = await encryptMnemonicFormatted(seedPhrase, password); + + const wallet = await Wallet.createAccount({ + encryptedBackupPhrase: encryptedMnemonicHex, + rootNode, + chain, + }); + + return await wallet.restoreIdentities({ rootNode, gaiaReadURL: DEFAULT_GAIA_HUB }); + } + + static async createAccount({ + encryptedBackupPhrase, + rootNode, + chain, + identitiesToGenerate = 1, + }: { + encryptedBackupPhrase: string; + rootNode: BIP32Interface; + chain: ChainID; + identitiesToGenerate?: number; + }) { + const derivedIdentitiesKey = rootNode.deriveHardened(CONFIG_INDEX).privateKey; + if (!derivedIdentitiesKey) { + throw new TypeError('Unable to derive config key for wallet identities'); + } + const configPrivateKey = derivedIdentitiesKey.toString('hex'); + const { childKey: stxAddressKeychain } = deriveStxAddressChain(chain)(rootNode); + const walletAttrs = await getBlockchainIdentities(rootNode, identitiesToGenerate); + + return new Wallet({ + ...walletAttrs, + chain, + configPrivateKey, + stacksPrivateKey: stxAddressKeychain.toBase58(), + encryptedBackupPhrase, + }); + } + + /** + * Restore all previously used identities. This is meant to be used when 'restoring' a wallet. + * First, it will check for a `walletConfig`. If present, then we use that to determine how + * many identities to generate, and auto-populate their username. + * + * If `walletConfig` is empty, then this is being restored from an authenticator that doesn't + * support `walletConfig`. In that case, we will recursively generate identities, and check for + * on-chain names. + * + */ + async restoreIdentities({ + rootNode, + gaiaReadURL, + }: { + rootNode: bip32.BIP32Interface; + gaiaReadURL: string; + }) { + const gaiaConfig = makeReadOnlyGaiaConfig({ + readURL: gaiaReadURL, + privateKey: this.configPrivateKey, + }); + await this.fetchConfig(gaiaConfig); + if (this.walletConfig) { + const getIdentities = this.walletConfig.identities.map(async (identityConfig, index) => { + let identity: Identity | null = this.identities[index]; + if (!identity) { + identity = await makeIdentity(rootNode, index); + } + if (identityConfig.username) { + identity.usernames = [identityConfig.username]; + identity.defaultUsername = identityConfig.username; + } + return identity; + }); + const identities = await Promise.all(getIdentities); + this.identities = identities; + return this; + } + await this.identities[0].refresh(); + const newIdentities = await recursiveRestoreIdentities({ rootNode }); + this.identities = this.identities.concat(newIdentities); + return this; + } + + async createNewIdentity(password: string) { + const plainTextBuffer = await decrypt(Buffer.from(this.encryptedBackupPhrase, 'hex'), password); + const seed = await mnemonicToSeed(plainTextBuffer); + const rootNode = bip32.fromSeed(seed); + const index = this.identities.length; + const identity = await makeIdentity(rootNode, index); + this.identities.push(identity); + this.identityKeypairs.push(identity.keyPair); + this.identityAddresses.push(identity.address); + return identity; + } + + async createGaiaConfig(gaiaHubUrl: string) { + return connectToGaiaHub(gaiaHubUrl, this.configPrivateKey); + } + + async fetchConfig(gaiaConfig: GaiaHubConfig): Promise { + try { + const response = await fetch( + `${gaiaConfig.url_prefix}${gaiaConfig.address}/wallet-config.json` + ); + const encrypted = await response.text(); + const configJSON = (await decryptContent(encrypted, { + privateKey: this.configPrivateKey, + })) as string; + const config: WalletConfig = JSON.parse(configJSON); + this.walletConfig = config; + return config; + } catch (error) { + return null; + } + } + + async getOrCreateConfig({ + gaiaConfig, + skipUpload, + }: { + gaiaConfig: GaiaHubConfig; + skipUpload?: boolean; + }): Promise { + if (this.walletConfig) { + return this.walletConfig; + } + const config = await this.fetchConfig(gaiaConfig); + if (config) { + return config; + } + const newConfig: WalletConfig = { + identities: this.identities.map(i => ({ + username: i.defaultUsername, + address: i.address, + apps: {}, + })), + }; + this.walletConfig = newConfig; + if (!skipUpload) { + await this.updateConfig(gaiaConfig); + } + return newConfig; + } + + async updateConfig(gaiaConfig: GaiaHubConfig): Promise { + const publicKey = getPublicKeyFromPrivate(this.configPrivateKey); + const encrypted = await encryptContent(JSON.stringify(this.walletConfig), { publicKey }); + await uploadToGaiaHub('wallet-config.json', encrypted, gaiaConfig); + } + + async updateConfigWithAuth({ + identityIndex, + app, + gaiaConfig, + }: { + identityIndex: number; + app: ConfigApp; + gaiaConfig: GaiaHubConfig; + }) { + const { walletConfig } = this; + assertIsTruthy(walletConfig); + + this.identities.forEach((identity, index) => { + const configIdentity = walletConfig.identities[index]; + if (configIdentity) { + configIdentity.apps = configIdentity.apps || {}; + configIdentity.username = identity.defaultUsername; + configIdentity.address = identity.address; + walletConfig.identities[index] = configIdentity; + } else { + this.walletConfig?.identities.push({ + username: identity.defaultUsername, + address: identity.address, + apps: {}, + }); + } + }); + + const identity = walletConfig.identities[identityIndex]; + identity.apps = identity.apps || {}; + identity.apps[app.origin] = app; + walletConfig.identities[identityIndex] = identity; + this.walletConfig = walletConfig; + await this.updateConfig(gaiaConfig); + } + + async updateConfigForReuseWarning({ gaiaConfig }: { gaiaConfig: GaiaHubConfig }) { + assertIsTruthy(this.walletConfig); + + this.walletConfig.hideWarningForReusingIdentity = true; + + await this.updateConfig(gaiaConfig); + } + + getSigner() { + return new WalletSigner({ privateKey: this.stacksPrivateKey }); + } +} + +export default Wallet; diff --git a/packages/keychain/src/wallet/signer.ts b/packages/keychain/src/wallet/signer.ts new file mode 100644 index 000000000..ed80ebd81 --- /dev/null +++ b/packages/keychain/src/wallet/signer.ts @@ -0,0 +1,147 @@ +import { + makeContractCall, + makeContractDeploy, + TransactionVersion, + ClarityValue, + StacksTestnet, + makeSTXTokenTransfer, + PostConditionMode, + getAddressFromPrivateKey, + PostCondition, + StacksNetwork, +} from '@blockstack/stacks-transactions'; +import RPCClient from '@blockstack/rpc-client'; +import { bip32 } from 'bitcoinjs-lib'; +import { assertIsTruthy } from '../utils'; +import BN from 'bn.js'; + +interface ContractCallOptions { + contractName: string; + contractAddress: string; + functionName: string; + functionArgs: ClarityValue[]; + version: TransactionVersion; + nonce: number; + postConditions?: PostCondition[]; + postConditionMode?: PostConditionMode; + network?: StacksNetwork; +} + +interface ContractDeployOptions { + contractName: string; + codeBody: string; + version: TransactionVersion; + nonce: number; + postConditions?: PostCondition[]; + postConditionMode?: PostConditionMode; + network?: StacksNetwork; +} + +interface STXTransferOptions { + recipient: string; + amount: string; + memo?: string; + nonce: number; + postConditions?: PostCondition[]; + postConditionMode?: PostConditionMode; + network?: StacksNetwork; +} + +export class WalletSigner { + privateKey: string; + + constructor({ privateKey }: { privateKey: string }) { + this.privateKey = privateKey; + } + + getSTXAddress(version: TransactionVersion) { + return getAddressFromPrivateKey(this.getSTXPrivateKey(), version); + } + + getSTXPrivateKey() { + const node = bip32.fromBase58(this.privateKey); + assertIsTruthy(node.privateKey); + return node.privateKey; + } + + getNetwork() { + const network = new StacksTestnet(); + network.coreApiUrl = 'https://sidecar.staging.blockstack.xyz'; + return network; + } + + async fetchAccount({ + version, + rpcClient, + }: { + version: TransactionVersion; + rpcClient: RPCClient; + }) { + const address = this.getSTXAddress(version); + const account = await rpcClient.fetchAccount(address); + return account; + } + + async signContractCall({ + contractName, + contractAddress, + functionName, + functionArgs, + nonce, + postConditionMode, + postConditions, + }: ContractCallOptions) { + const tx = await makeContractCall({ + contractAddress, + contractName, + functionName, + functionArgs, + senderKey: this.getSTXPrivateKey().toString('hex'), + nonce: new BN(nonce), + network: this.getNetwork(), + postConditionMode, + postConditions, + }); + return tx; + } + + async signContractDeploy({ + contractName, + codeBody, + nonce, + postConditionMode, + postConditions, + }: ContractDeployOptions) { + const tx = await makeContractDeploy({ + contractName, + codeBody: codeBody, + senderKey: this.getSTXPrivateKey().toString('hex'), + network: this.getNetwork(), + nonce: new BN(nonce), + postConditionMode, + postConditions, + }); + return tx; + } + + async signSTXTransfer({ + recipient, + amount, + memo, + nonce, + postConditionMode, + postConditions, + }: STXTransferOptions) { + const tx = await makeSTXTokenTransfer({ + recipient, + amount: new BN(amount), + memo, + senderKey: this.getSTXPrivateKey().toString('hex'), + network: this.getNetwork(), + nonce: new BN(nonce), + postConditionMode, + postConditions, + }); + return tx; + } +} diff --git a/packages/keychain/tests/.eslintrc.js b/packages/keychain/tests/.eslintrc.js new file mode 100644 index 000000000..1c5f7759d --- /dev/null +++ b/packages/keychain/tests/.eslintrc.js @@ -0,0 +1,13 @@ +module.exports = { + "extends": [ + "../../../.eslintrc.js" + ], + "parserOptions": { + "project": "./tsconfig.json", + "tsconfigRootDir": __dirname, + }, + "plugins": ["jest"], + "env": { + "jest/globals": true + }, +}; diff --git a/packages/keychain/tests/address-derivation/address-derivation.test.ts b/packages/keychain/tests/address-derivation/address-derivation.test.ts new file mode 100644 index 000000000..9e85f83b2 --- /dev/null +++ b/packages/keychain/tests/address-derivation/address-derivation.test.ts @@ -0,0 +1,105 @@ +import { ChainID } from '@blockstack/stacks-transactions'; +import { BIP32Interface } from 'bitcoinjs-lib'; + +import { deriveStxAddressChain } from '../../src/address-derivation'; +import { deriveRootKeychainFromMnemonic } from '../../src/mnemonic'; + +describe('deriveStxAddressChain()', () => { + test('it returns mainnet derived keys, pt. 1', async () => { + const phrase = + 'humble ramp winner eagle stumble follow gravity roast receive quote buddy start demise issue egg jewel return hurdle ball blind pulse physical uncle room'; + const deriveStxMainnetAddressChain = deriveStxAddressChain(ChainID.Mainnet); + const rootNode = await deriveRootKeychainFromMnemonic(phrase); + const result = deriveStxMainnetAddressChain(rootNode); + expect(result.privateKey).toEqual( + '2d088f14028baf5d0b4a8df8ec9faeb8f6f011f8f26d70c8d8abc04a204e3beb01' + ); + }); + + test('it returns mainnet derived keys, pt. 2', async () => { + const phrase = + 'oblige boat easily source clip remind steel hockey nut arrow swallow keep run fragile fresh river expire stay monster black defy box fiber wave'; + const deriveStxMainnetAddressChain = deriveStxAddressChain(ChainID.Mainnet); + const rootNode = await deriveRootKeychainFromMnemonic(phrase); + const result = deriveStxMainnetAddressChain(rootNode); + expect(result.privateKey).toEqual( + 'd7c71a427b8a9ed870c9552f67beadc2710dbee7f29a0cf6cfd1dd96a703bf1801' + ); + expect(result.address).toEqual('SP2JSAXXTH90R04677F6JDS5D4DXWNW4T3KWNFDR5'); + }); + + describe('it behaves according to CLI library for mainnet', () => { + const phrase = + 'parade vacant kitten museum voice shift tell embrace security page praise cloud stove canal sketch huge ignore cotton island hand wall blush empower movie'; + const deriveStxTestnetAddressChain = deriveStxAddressChain(ChainID.Mainnet); + let rootNode: BIP32Interface; + let result: ReturnType; + + beforeEach(async () => { + rootNode = await deriveRootKeychainFromMnemonic(phrase); + result = deriveStxTestnetAddressChain(rootNode); + }); + + test('private key is derive accurately for cli mainnet', () => { + expect(result.privateKey).toEqual( + '4587afc14878fd97aa01032bfae21ab01ae9a087abeecc7d867d39393e22ce2101' + ); + }); + + test('address is derived accurately for cli mainnet', () => { + expect(result.address).toEqual('SP398525PZNCJTPNM6K4NW0T40YXJFEZ9DEQR12TR'); + }); + }); + + // + // This test should pass if testnet key derivation is + // supposed to use derivation path `m/44'/5757'/0'/0/0`, + describe(`should pass if testnet should use derivation path "m/44'/5757'/0'/0/0"`, () => { + const phrase = + 'decorate confirm shoulder gain develop name tone source potato march maple company blanket discover ship clown virus broccoli room adapt praise oak west canoe'; + const deriveStxTestnetAddressChain = deriveStxAddressChain(ChainID.Testnet); + let rootNode: BIP32Interface; + let result: ReturnType; + + beforeEach(async () => { + rootNode = await deriveRootKeychainFromMnemonic(phrase); + result = deriveStxTestnetAddressChain(rootNode); + }); + + test('private key is derive accurately for cli testnet', () => { + expect(result.privateKey).toEqual( + 'cbaa7cbb821fdd17077fa24529803d351eb038fd6ec8eb14fc92344dbb244da901' + ); + }); + + test('address is derived accurately for cli testnet', () => { + expect(result.address).toEqual('ST8SHKQXP59D65B1X0PHDHTWMKKPM94N9A2RNXE6'); + }); + }); + + // + // This test should pass if testnet key derivation is + // supposed to use derivation path `m/44'/1'/0'/0/0`, + // describe(`should pass if testnet should use derivation path "m/44'/1'/0'/0/0"`, () => { + // const phrase = + // 'trumpet hole school slim beauty advance evoke chapter random broom account twice state panel grant unfair empower spy asset depend acquire potato scatter atom'; + // const deriveStxTestnetAddressChain = deriveStxAddressChain(ChainID.Testnet); + // let rootNode: BIP32Interface; + // let result: ReturnType; + + // beforeEach(async () => { + // rootNode = await deriveRootKeychainFromMnemonic(phrase); + // result = deriveStxTestnetAddressChain(rootNode); + // }); + + // test('private key is derive accurately for cli testnet', () => { + // expect(result.privateKey).toEqual( + // '65d49e09d57c07951b34cdac6b4ef6bdb8ee18ac7884c31a6876b086e7131b2d01' + // ); + // }); + + // test('address is derived accurately for cli testnet', () => { + // expect(result.address).toEqual('ST1MED1C7R0V4FAZBAEF3FPD3JVHBP000FKTTG64T'); + // }); + // }); +}); diff --git a/packages/keychain/tests/encryption/decrypt.test.ts b/packages/keychain/tests/encryption/decrypt.test.ts new file mode 100644 index 000000000..c583dce26 --- /dev/null +++ b/packages/keychain/tests/encryption/decrypt.test.ts @@ -0,0 +1,25 @@ +import { decrypt } from '../../src/encryption/decrypt'; + +describe('decrypt', () => { + test('should decrypt legacy encryption', async () => { + const legacyCiphertext = + '1c94d7de0000000304d583f007c71e6e5fef354c046e8c64b1adebd6904dcb' + + '007a1222f07313643873455ab2a3ab3819e99d518cc7d33c18bde02494aa74efc35a8970b2007b2fc715f' + + '6067cee27f5c92d020b1806b0444994aab80050a6732131d2947a51bacb3952fb9286124b3c2b3196ff7e' + + 'dce66dee0dbd9eb59558e0044bddb3a78f48a66cf8d78bb46bb472bd2d5ec420c831fc384293252459524' + + 'ee2d668869f33c586a94467d0ce8671260f4cc2e87140c873b6ca79fb86c6d77d134d7beb2018845a9e71' + + 'e6c7ecdedacd8a676f1f873c5f9c708cc6070642d44d2505aa9cdba26c50ad6f8d3e547fb0cba710a7f7b' + + 'e54ff7ea7e98a809ddee5ef85f6f259b3a17a8d8dbaac618b80fe266a1e63ec19e476bee9177b51894e'; + const password = 'supersecret'; + const phrase = 'vivid oxygen neutral wheat find thumb cigar wheel board kiwi portion business'; + const plainTextBuffer = await decrypt(Buffer.from(legacyCiphertext, 'hex'), password); + expect(plainTextBuffer).not.toBeFalsy(); + expect(plainTextBuffer).toEqual(phrase); + // return decrypt(new Buffer(legacyCiphertext, "hex"), password).then( + // plaintextBuffer => { + // assert(plaintextBuffer); + // assert.equal(plaintextBuffer.toString(), phrase); + // } + // ); + }); +}); diff --git a/packages/keychain/tests/encryption/encryption.test.ts b/packages/keychain/tests/encryption/encryption.test.ts new file mode 100644 index 000000000..5d47e37bc --- /dev/null +++ b/packages/keychain/tests/encryption/encryption.test.ts @@ -0,0 +1,10 @@ +import { encrypt } from '../../src/encryption/encrypt'; +import { decrypt } from '../../src/encryption/decrypt'; + +test('should encrypt and decrypt', async () => { + const phrase = 'vivid oxygen neutral wheat find thumb cigar wheel board kiwi portion business'; + const password = 'supersecret'; + const encryptedText = await encrypt(phrase, password); + const plainTextBuffer = await decrypt(encryptedText, password); + expect(plainTextBuffer).toEqual(phrase); +}); diff --git a/packages/keychain/tests/global-setup.ts b/packages/keychain/tests/global-setup.ts new file mode 100644 index 000000000..2da49bb5c --- /dev/null +++ b/packages/keychain/tests/global-setup.ts @@ -0,0 +1,5 @@ +import { GlobalWithFetchMock } from 'jest-fetch-mock'; + +const customGlobal: GlobalWithFetchMock = (global as any) as GlobalWithFetchMock; +customGlobal.fetch = require('jest-fetch-mock'); +customGlobal.fetchMock = customGlobal.fetch; diff --git a/packages/keychain/tests/helpers.ts b/packages/keychain/tests/helpers.ts new file mode 100644 index 000000000..5c9f16915 --- /dev/null +++ b/packages/keychain/tests/helpers.ts @@ -0,0 +1,81 @@ +import Wallet from '../src/wallet'; +import { ChainID } from '@blockstack/stacks-transactions'; + +const defaultSeed = + 'sound idle panel often situate develop unit text design antenna ' + + 'vendor screen opinion balcony share trigger accuse scatter visa uniform brass ' + + 'update opinion media'; + +export const getWallet = async (seed: string = defaultSeed) => { + const wallet = await Wallet.restore('password', seed, ChainID.Mainnet); + return wallet; +}; + +export const getIdentity = async (seed: string = defaultSeed) => { + const wallet = await getWallet(seed); + const [identity] = wallet.identities; + return identity; +}; + +export const getNewIdentity = async () => { + const wallet = await Wallet.generate('password', ChainID.Testnet); + return wallet.identities[0]; +}; + +export const profileResponse = [ + { + token: + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJqdGkiOiI1NzEyMjE5MC1kZGI2LTQwMzgtYjQxZC04YmM5NzJiOGY4NTYiLCJpYXQiOiIyMDE5LTEyLTA2VDA5OjU1OjM1LjI5N1oiLCJleHAiOiIyMDIwLTEyLTA2VDA5OjU1OjM1LjI5N1oiLCJzdWJqZWN0Ijp7InB1YmxpY0tleSI6IjAzZTkzYWU2NWQ2Njc1MDYxYTE2N2MzNGI4MzIxYmVmODc1OTQ0NjhlOWIyZGQxOWMwNWE2N2E3YjRjYWVmYTAxNyJ9LCJpc3N1ZXIiOnsicHVibGljS2V5IjoiMDNlOTNhZTY1ZDY2NzUwNjFhMTY3YzM0YjgzMjFiZWY4NzU5NDQ2OGU5YjJkZDE5YzA1YTY3YTdiNGNhZWZhMDE3In0sImNsYWltIjp7IkB0eXBlIjoiUGVyc29uIiwiQGNvbnRleHQiOiJodHRwOi8vc2NoZW1hLm9yZyIsImFwcHMiOnsiaHR0cHM6Ly9iYW50ZXIucHViIjoiaHR0cHM6Ly9nYWlhLmJsb2Nrc3RhY2sub3JnL2h1Yi8xRGt1QUNodWZZalRrVENlakpnU3p0dXFwNUtkeWtwV2FwLyIsImh0dHA6Ly8xMjcuMC4wLjE6MzAwMCI6Imh0dHBzOi8vZ2FpYS5ibG9ja3N0YWNrLm9yZy9odWIvMTVoQUxuRUo4ZnZYTmdSeXptVnNwRHlaY0dFeExHSE5TZi8iLCJodHRwczovL2Jsb2Nrc3RhY2suZ2l0aHViLmlvIjoiaHR0cHM6Ly9nYWlhLmJsb2Nrc3RhY2sub3JnL2h1Yi8xRUR1dktmenVOUlVlbnR6MXQ1amZ4VDlmVzFIUDJOSkdXLyJ9LCJhcGkiOnsiZ2FpYUh1YkNvbmZpZyI6eyJ1cmxfcHJlZml4IjoiaHR0cHM6Ly9nYWlhLmJsb2Nrc3RhY2sub3JnL2h1Yi8ifSwiZ2FpYUh1YlVybCI6Imh0dHBzOi8vaHViLmJsb2Nrc3RhY2sub3JnIn19fQ.IqsvlAnuWd3H8K0hZHdb3p4jm2KC2UXQv0PBKR9U_kFikfXw4wvGbmfh5HYp4q_5sHi2oZZoNPygsdgV7UFQjg', + decodedToken: { + header: { + typ: 'JWT', + alg: 'ES256K', + }, + payload: { + jti: '57122190-ddb6-4038-b41d-8bc972b8f856', + iat: '2019-12-06T09:55:35.297Z', + exp: '2020-12-06T09:55:35.297Z', + subject: { + publicKey: '03e93ae65d6675061a167c34b8321bef87594468e9b2dd19c05a67a7b4caefa017', + }, + issuer: { + publicKey: '03e93ae65d6675061a167c34b8321bef87594468e9b2dd19c05a67a7b4caefa017', + }, + claim: { + '@type': 'Person', + '@context': 'http://schema.org', + apps: { + 'https://banter.pub': + 'https://gaia.blockstack.org/hub/1DkuAChufYjTkTCejJgSztuqp5KdykpWap/', + 'http://127.0.0.1:3000': + 'https://gaia.blockstack.org/hub/15hALnEJ8fvXNgRyzmVspDyZcGExLGHNSf/', + 'https://blockstack.github.io': + 'https://gaia.blockstack.org/hub/1EDuvKfzuNRUentz1t5jfxT9fW1HP2NJGW/', + }, + api: { + gaiaHubConfig: { + url_prefix: 'https://gaia.blockstack.org/hub/', + }, + gaiaHubUrl: 'https://hub.blockstack.org', + }, + }, + }, + signature: + 'IqsvlAnuWd3H8K0hZHdb3p4jm2KC2UXQv0PBKR9U_kFikfXw4wvGbmfh5HYp4q_5sHi2oZZoNPygsdgV7UFQjg', + }, + }, +]; + +export const nameInfoResponse = { + address: '1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs', + blockchain: 'bitcoin', + expire_block: 599266, + grace_period: false, + last_txid: '1edfa419f7b83f33e00830bc9409210da6c6d1db60f99eda10c835aa339cad6b', + renewal_deadline: 604266, + resolver: null, + status: 'registered', + zonefile: + '$ORIGIN muneeb.id\n$TTL 3600\n_http._tcp IN URI 10 1 "https://gaia.blockstack.org/hub/1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs/0/profile.json"\n', + zonefile_hash: '37aecf837c6ae9bdc9dbd98a268f263dacd00361', +}; diff --git a/packages/keychain/tests/identity.test.ts b/packages/keychain/tests/identity.test.ts new file mode 100644 index 000000000..f7bb8bf8f --- /dev/null +++ b/packages/keychain/tests/identity.test.ts @@ -0,0 +1,150 @@ +import './setup'; +import { makeECPrivateKey, getPublicKeyFromPrivate } from 'blockstack/lib/keys'; +import { decryptPrivateKey } from 'blockstack/lib/auth/authMessages'; +import { decodeToken } from 'jsontokens'; +import { getIdentity, profileResponse, nameInfoResponse } from './helpers'; +import { ecPairToAddress } from 'blockstack'; +import { ECPair } from 'bitcoinjs-lib'; +import { getAddress } from '../src'; +import { TransactionVersion } from '@blockstack/stacks-transactions'; + +interface Decoded { + [key: string]: any; +} + +test('generates an auth response', async () => { + const identity = await getIdentity(); + const appDomain = 'https://banter.pub'; + const gaiaUrl = 'https://hub.blockstack.org'; + const transitPrivateKey = makeECPrivateKey(); + const transitPublicKey = getPublicKeyFromPrivate(transitPrivateKey); + + fetchMock.once(JSON.stringify({ read_url_prefix: 'https://gaia.blockstack.org/hub/' })); + + const authResponse = await identity.makeAuthResponse({ appDomain, gaiaUrl, transitPublicKey }); + const decoded = decodeToken(authResponse); + const { payload } = decoded as Decoded; + expect(payload.profile_url).toEqual( + `https://gaia.blockstack.org/hub/${identity.address}/profile.json` + ); + const appPrivateKey = await decryptPrivateKey(transitPrivateKey, payload.private_key); + const expectedKey = '6f8b6a170f8b2ee57df5ead49b0f4c8acde05f9e1c4c6ef8223d6a42fabfa314'; + expect(appPrivateKey).toEqual(expectedKey); +}); + +test('adds to apps in profile if publish_data scope', async () => { + fetchMock + .once(JSON.stringify({}), { status: 404 }) // wallet config + .once(JSON.stringify({}), { status: 404 }) // username lookup + .once(JSON.stringify({}), { status: 404 }) // profile lookup + .once(JSON.stringify({ read_url_prefix: 'https://gaia.blockstack.org/hub/' })) + .once(JSON.stringify({}), { status: 404 }) + .once(JSON.stringify({ read_url_prefix: 'https://gaia.blockstack.org/hub/' })) + .once(JSON.stringify({ read_url_prefix: 'https://gaia.blockstack.org/hub/' })) + .once(JSON.stringify({})) + .once(JSON.stringify({})) + .once(JSON.stringify({})); + const identity = await getIdentity(); + const appDomain = 'https://banter.pub'; + const gaiaUrl = 'https://hub.blockstack.org'; + const transitPrivateKey = makeECPrivateKey(); + const transitPublicKey = getPublicKeyFromPrivate(transitPrivateKey); + + const authResponse = await identity.makeAuthResponse({ + appDomain, + gaiaUrl, + transitPublicKey, + scopes: ['publish_data'], + }); + const decoded = decodeToken(authResponse); + const { payload } = decoded as Decoded; + expect(payload.profile.apps['https://banter.pub']).not.toBeFalsy(); + const profile = JSON.parse(fetchMock.mock.calls[7][1].body); + const { apps, appsMeta } = profile[0].decodedToken.payload.claim; + expect(apps[appDomain]).not.toBeFalsy(); + const appPrivateKey = await decryptPrivateKey(transitPrivateKey, payload.private_key); + const challengeSigner = ECPair.fromPrivateKey(Buffer.from(appPrivateKey as string, 'hex')); + const expectedDomain = `https://gaia.blockstack.org/hub/${ecPairToAddress(challengeSigner)}/`; + expect(apps[appDomain]).toEqual(expectedDomain); + expect(appsMeta[appDomain]).not.toBeFalsy(); + expect(appsMeta[appDomain].storage).toEqual(expectedDomain); + expect(appsMeta[appDomain].publicKey).toEqual(challengeSigner.publicKey.toString('hex')); +}); + +test('generates an app private key', async () => { + const expectedKey = '6f8b6a170f8b2ee57df5ead49b0f4c8acde05f9e1c4c6ef8223d6a42fabfa314'; + const identity = await getIdentity(); + const appPrivateKey = identity.appPrivateKey('https://banter.pub'); + expect(appPrivateKey).toEqual(expectedKey); +}); + +test('generates an app private key for a different seed', async () => { + const identity = await getIdentity( + 'monster toilet shoe giggle welcome coyote enact glass copy era shed foam' + ); + const appPrivateKey = identity.appPrivateKey('https://banter.pub'); + expect(appPrivateKey).toEqual('a7bf3ecf0dd68a23a6621c39780d6cae3776240251a7988fed9ecfda2699ffe8'); +}); + +test('gets default profile URL', async () => { + const identity = await getIdentity(); + const gaiaUrl = 'https://gaia.blockstack.org/hub/'; + expect(await identity.profileUrl(gaiaUrl)).toEqual( + 'https://gaia.blockstack.org/hub/1JeTQ5cQjsD57YGcsVFhwT7iuQUXJR6BSk/profile.json' + ); +}); + +test('can get a profile URL from a zone file', async () => { + const identity = await getIdentity(); + fetchMock.once(JSON.stringify(nameInfoResponse)); + const profileURL = await identity.profileUrl('asdf'); + return; +}); + +describe('refresh', () => { + test('can fetch names for an identity', async () => { + const identity = await getIdentity(); + + fetchMock.once(JSON.stringify({ names: ['myname.id'] })); + fetchMock.once(JSON.stringify(nameInfoResponse)); + fetchMock.once(JSON.stringify(profileResponse)); + + await identity.refresh(); + expect(identity.defaultUsername).toEqual('myname.id'); + expect(identity.usernames).toEqual(['myname.id']); + expect(identity.profile).toBeTruthy(); + }); + + test('can fetch multiple usernames', async () => { + const identity = await getIdentity(); + + fetchMock.once(JSON.stringify({ names: ['myname.id', 'second.id'] })); + fetchMock.once(JSON.stringify(profileResponse)); + + await identity.refresh(); + expect(identity.defaultUsername).toEqual('myname.id'); + expect(identity.usernames).toEqual(['myname.id', 'second.id']); + }); + + test('doesnt throw is no names found', async () => { + const identity = await getIdentity(); + + fetchMock.once(JSON.stringify({ error: 'Invalid address' })); + fetchMock.once(JSON.stringify(profileResponse)); + + await identity.refresh(); + expect(identity.defaultUsername).toEqual(undefined); + }); + + test('can fetch profiles', async () => { + const identity = await getIdentity(); + + fetchMock.once(JSON.stringify({ error: 'Invalid address' })); + fetchMock.once(JSON.stringify(profileResponse)); + + await identity.refresh(); + expect(identity.profile).toBeTruthy(); + expect(identity.profile?.apps).toBeTruthy(); + expect(identity.profile?.name).toBeFalsy(); + }); +}); diff --git a/packages/keychain/tests/mnemonic/mnemonic.test.ts b/packages/keychain/tests/mnemonic/mnemonic.test.ts new file mode 100644 index 000000000..e410fbfd8 --- /dev/null +++ b/packages/keychain/tests/mnemonic/mnemonic.test.ts @@ -0,0 +1,35 @@ +import { + generateEncryptedMnemonicRootKeychain, + deriveRootKeychainFromMnemonic, +} from '../../src/mnemonic'; +import { decrypt } from '../../src/encryption/decrypt'; + +describe('generateEncryptedMnemonicRootKeychain()', () => { + test('both 12 and 24 word phrases are returned', async () => { + const password = '427706da374f435f959283de93652375'; + const twelveWorder = await generateEncryptedMnemonicRootKeychain(password, 128); + const twentyFourWorder = await generateEncryptedMnemonicRootKeychain(password, 256); + + const twelveWordDecrypted = await decrypt(twelveWorder.encryptedMnemonicPhrase, password); + const twentyFourWordDecrypted = await decrypt( + twentyFourWorder.encryptedMnemonicPhrase, + password + ); + + expect(twelveWordDecrypted.split(' ').length).toEqual(12); + expect(twentyFourWordDecrypted.split(' ').length).toEqual(24); + }); +}); + +describe('restoreKeychainFromMnemonic()', () => { + test('it restores keychain from a seed', async () => { + const password = '6bd8106ff1704446ba11e31ff3b0ce8b'; + const phrase = + 'eternal army wreck noodle click shock include orchard jungle only middle forget idle pulse give empower iron curtain silent blush blossom chef animal sphere'; + + const rootNode = await deriveRootKeychainFromMnemonic(phrase); + expect(rootNode.privateKey?.toString('hex')).toEqual( + 'a1ce135a6a63ba49c9d118bbc5b9f501d6a36feb45f810576781955b9a57d3b2' + ); + }); +}); diff --git a/packages/keychain/tests/profile.test.ts b/packages/keychain/tests/profile.test.ts new file mode 100644 index 000000000..b2de43876 --- /dev/null +++ b/packages/keychain/tests/profile.test.ts @@ -0,0 +1,63 @@ +import './setup'; +import { + signProfileForUpload, + DEFAULT_PROFILE, + registerSubdomain, + Subdomains, + registrars, +} from '../src/profiles'; +import { getIdentity, getNewIdentity } from './helpers'; +import { decodeToken, TokenVerifier } from 'jsontokens'; +import { makeProfileZoneFile } from 'blockstack'; + +describe('signProfileForUpload', () => { + it('should create a signed JSON string', async () => { + const identity = await getIdentity(); + const signedJSON = signProfileForUpload(DEFAULT_PROFILE, identity.keyPair); + const profile = JSON.parse(signedJSON); + expect(profile.length).toEqual(1); + const [data] = profile; + expect(data.token).not.toBeFalsy(); + const { claim } = data.decodedToken.payload; + expect(claim).toEqual(DEFAULT_PROFILE); + const decoded = decodeToken(data.token); + expect(decoded.payload).toEqual(data.decodedToken.payload); + const verifier = new TokenVerifier('ES256K', data.decodedToken.payload.issuer.publicKey); + expect(verifier.verify(data.token)).toBeTruthy(); + }); +}); + +describe('registerSubdomain', () => { + it('should register a test username', async () => { + fetchMock + .once( + JSON.stringify({ + read_url_prefix: 'https://gaia.blockstack.org/hub/', + challenge_text: '["gaiahub","0","gaia-0","blockstack_storage_please_sign"]', + latest_auth_version: 'v1', + }) + ) + .once(JSON.stringify({ publicURL: 'http://gaia.com/profile.json' })) + .once(JSON.stringify({ success: true })); + + const identity = await getNewIdentity(); + await registerSubdomain({ + identity, + gaiaHubUrl: 'http://gaia.com', + username: 'tester', + subdomain: Subdomains.TEST, + }); + expect(identity.defaultUsername).toEqual('tester.test-personal.id'); + expect(identity.usernames).toEqual(['tester.test-personal.id']); + expect(fetchMock.mock.calls.length).toEqual(3); + const [registrarUrl, fetchOpts] = fetchMock.mock.calls[2]; + expect(registrarUrl).toEqual(registrars[Subdomains.TEST].registerUrl); + expect(fetchOpts.method).toEqual('POST'); + const zoneFile = makeProfileZoneFile('tester.test-personal.id', 'http://gaia.com/profile.json'); + expect(JSON.parse(fetchOpts.body)).toEqual({ + name: 'tester', + owner_address: identity.address, + zonefile: zoneFile, + }); + }); +}); diff --git a/packages/keychain/tests/setup.ts b/packages/keychain/tests/setup.ts new file mode 100644 index 000000000..6f9dae9cb --- /dev/null +++ b/packages/keychain/tests/setup.ts @@ -0,0 +1,13 @@ +import './global-setup'; +import { GlobalWithFetchMock } from 'jest-fetch-mock'; +import { config as bskConfig } from 'blockstack'; + +bskConfig.logLevel = 'none'; + +const customGlobal: GlobalWithFetchMock = (global as any) as GlobalWithFetchMock; +customGlobal.fetch = require('jest-fetch-mock'); +customGlobal.fetchMock = customGlobal.fetch; + +beforeEach(() => { + fetchMock.mockClear(); +}); diff --git a/packages/keychain/tests/tsconfig.json b/packages/keychain/tests/tsconfig.json new file mode 100644 index 000000000..4285f4022 --- /dev/null +++ b/packages/keychain/tests/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "noEmit": true, + "rootDir": "../", + }, + "include": [ + "./**/*", + "../src/**/*", + ] +} diff --git a/packages/keychain/tests/utils.test.ts b/packages/keychain/tests/utils.test.ts new file mode 100644 index 000000000..f5434d502 --- /dev/null +++ b/packages/keychain/tests/utils.test.ts @@ -0,0 +1,120 @@ +import './setup'; +import { + IdentityNameValidityError, + validateSubdomainFormat, + validateSubdomainAvailability, + validateSubdomain, + recursiveRestoreIdentities, +} from '../src/utils'; +import { Subdomains, registrars, Wallet, decrypt } from '../src'; +import { mnemonicToSeed } from 'bip39'; +import { bip32 } from 'bitcoinjs-lib'; +import { profileResponse, nameInfoResponse } from './helpers'; +import { ChainID } from '@blockstack/stacks-transactions'; + +describe(validateSubdomainFormat.name, () => { + it('returns error state when string less than 8 characters', () => { + const result = validateSubdomainFormat('john'); + expect(result).toEqual(IdentityNameValidityError.MINIMUM_LENGTH); + }); + + it('returns error state when string has more than 38 characters', () => { + const result = validateSubdomainFormat('pneumonoultramicroscopicsilicovolcanoconiosis'); + expect(result).toEqual(IdentityNameValidityError.MAXIMUM_LENGTH); + }); + + it('returns error state when using uppercase chars', () => { + const result = validateSubdomainFormat('COOLNAMEBRO'); + expect(result).toEqual(IdentityNameValidityError.ILLEGAL_CHARACTER); + }); + + it('returns error state when using non-underscore symbols', () => { + const result = validateSubdomainFormat('kyranj@mie'); + expect(result).toEqual(IdentityNameValidityError.ILLEGAL_CHARACTER); + }); + + it('returns error state when uppercase', () => { + const result = validateSubdomainFormat('COOLNAMEBRO'); + expect(result).toEqual(IdentityNameValidityError.ILLEGAL_CHARACTER); + }); + + it('returns error state when using sneaky homoglyphs', () => { + const legitIdentity = 'kyranjamie'; + const homoglyph = 'kyrаnjamie'; + // eslint-disable-next-line + // @ts-ignore + expect(legitIdentity === homoglyph).toEqual(false); + const shouldPassResult = validateSubdomainFormat(legitIdentity); + expect(shouldPassResult).toBeNull(); + + const shouldFailResult = validateSubdomainFormat(homoglyph); + expect(shouldFailResult).toEqual(IdentityNameValidityError.ILLEGAL_CHARACTER); + }); + + it('allows a selection of legit names', () => { + const names = [ + 'kyranjamie', + 'jasperjansz101', + 'auln3auuuu', + 'honeypot1337', + 'marina_p', + '42214218', + 'emotion_trouble_solution_juice', + '________', + ]; + names.forEach(name => expect(validateSubdomainFormat(name)).toBeNull()); + }); +}); + +describe(validateSubdomainAvailability.name, () => { + it('fetches the status of a username', async () => { + fetchMock.once(JSON.stringify({ success: true })); + const response = await validateSubdomainAvailability('slkdjfskldjf', Subdomains.BLOCKSTACK); + expect(response).toEqual({ success: true }); + }); + + test('uses the correct registrar URL', async () => { + fetchMock.once(JSON.stringify({ success: true })); + const response = await validateSubdomainAvailability('slkdjfskldjf', Subdomains.TEST); + expect(response).toEqual({ success: true }); + const url: string = fetchMock.mock.calls[0][0]; + expect(url.includes(registrars[Subdomains.TEST].apiUrl)).toBeTruthy(); + }); +}); + +describe(validateSubdomain.name, () => { + test('returns unavailable if status is unavailable', async () => { + fetchMock.once(JSON.stringify({ status: 'unavailable' })); + const error = await validateSubdomain('asdfasdf'); + expect(error).toEqual(IdentityNameValidityError.UNAVAILABLE); + }); +}); + +test('recursively makes identities', async () => { + const wallet = await Wallet.generate('password', ChainID.Testnet); + const plainTextBuffer = await decrypt( + Buffer.from(wallet.encryptedBackupPhrase, 'hex'), + 'password' + ); + const seed = await mnemonicToSeed(plainTextBuffer); + const rootNode = bip32.fromSeed(seed); + + fetchMock + .once(JSON.stringify({ names: ['myname.id'] })) + .once(JSON.stringify(nameInfoResponse)) + .once(JSON.stringify(profileResponse)) + .once(JSON.stringify({ names: ['myname2.id'] })) + .once(JSON.stringify(nameInfoResponse)) + .once(JSON.stringify(profileResponse)) + .once(JSON.stringify({ names: ['myname3.id'] })) + .once(JSON.stringify(nameInfoResponse)) + .once(JSON.stringify(profileResponse)) + .once(JSON.stringify({ names: [] })) + .once('', { status: 404 }) + .once(JSON.stringify(profileResponse)); + const identities = await recursiveRestoreIdentities({ rootNode }); + expect(identities[0].defaultUsername).toEqual('myname.id'); + expect(identities[1].defaultUsername).toEqual('myname2.id'); + expect(identities[2].defaultUsername).toEqual('myname3.id'); + expect(identities.length).toEqual(3); +}); diff --git a/packages/keychain/tests/wallet-signer.test.ts b/packages/keychain/tests/wallet-signer.test.ts new file mode 100644 index 000000000..0ca50c551 --- /dev/null +++ b/packages/keychain/tests/wallet-signer.test.ts @@ -0,0 +1,18 @@ +import './setup'; +import { getWallet } from './helpers'; +import { TransactionVersion } from '@blockstack/stacks-transactions'; + +const getSigner = async () => { + const wallet = await getWallet(); + return wallet.getSigner(); +}; + +test('can get a STX address', async () => { + const signer = await getSigner(); + expect(signer.getSTXAddress(TransactionVersion.Mainnet)).toEqual( + 'SP1GZ804XH4240T4JT2GQ34GG0DMT6B3BQ5NV18PD' + ); + expect(signer.getSTXAddress(TransactionVersion.Testnet)).toEqual( + 'ST1GZ804XH4240T4JT2GQ34GG0DMT6B3BQ5YQX2WX' + ); +}); diff --git a/packages/keychain/tests/wallet.test.ts b/packages/keychain/tests/wallet.test.ts new file mode 100644 index 000000000..f71c1b944 --- /dev/null +++ b/packages/keychain/tests/wallet.test.ts @@ -0,0 +1,272 @@ +import './setup'; +import Wallet, { WalletConfig, ConfigApp } from '../src/wallet'; +import { decrypt } from '../src/encryption/decrypt'; +import { ECPair, bip32 } from 'bitcoinjs-lib'; +import { decryptContent, encryptContent, getPublicKeyFromPrivate } from 'blockstack'; +import { DEFAULT_GAIA_HUB } from '../src/utils/gaia'; +import { mnemonicToSeed } from 'bip39'; +import { ChainID } from '@blockstack/stacks-transactions'; + +describe('Restoring a wallet', () => { + test('restores an existing wallet and keychain', async () => { + // const store = mockStore({}); + const password = 'password'; + const backupPhrase = + 'sound idle panel often situate develop unit text design antenna ' + + 'vendor screen opinion balcony share trigger accuse scatter visa uniform brass ' + + 'update opinion media'; + const bitcoinPublicKeychain = + 'xpub6Br2scNTh9Luk2VPebfEvjbWWC5WhvxpxgK8ap2qhYTS4xvZu' + + '8Y3G1npmx8DdvwUdCbtNb7qNLyTChKMbY8dThLV5Zvdq9AojQjxrM6gTC8'; + const identityPublicKeychain = + 'xpub6B6tCCb8T5eXUKVYUoppmSi5KhNRboRJUwqHavxdvQTncfmB' + + 'NFCX4Nq9w8DsfuS6AYPpBYRuS3dcUuyF8mQtwEydAEN3A4Cx6HDy58jpKEb'; + const firstBitcoinAddress = '112FogMTesWmLzkWbtKrSg3p9LK6Lucn4s'; + const identityAddresses = ['1JeTQ5cQjsD57YGcsVFhwT7iuQUXJR6BSk']; + + const identityKeypairs = [ + { + key: 'a29c3e73dba79ab0f84cb792bafd65ec71f243ebe67a7ebd842ef5cdce3b21eb', + keyID: '03e93ae65d6675061a167c34b8321bef87594468e9b2dd19c05a67a7b4caefa017', + address: '1JeTQ5cQjsD57YGcsVFhwT7iuQUXJR6BSk', + appsNodeKey: + 'xprvA1y4zBndD83n6PWgVH6ivkTpNQ2WU1UGPg9hWa2q8sCANa7YrYMZFHWMhrbpsarx' + + 'XMuQRa4jtaT2YXugwsKrjFgn765tUHu9XjyiDFEjB7f', + salt: 'c15619adafe7e75a195a1a2b5788ca42e585a3fd181ae2ff009c6089de54ed9e', + stxNodeKey: + 'xprvA1y4zBndD83nNNFWE1UiWpmc9hpPuk8xjPNwb2j341txeJmCHe8VWT7VKS6FcgnCtbuBP2kzyW34ESdJtJ81AQxCbr9cmQsUHHZ8dtyTxCy', + }, + ]; + + const wallet = await Wallet.restore(password, backupPhrase, ChainID.Mainnet); + expect(wallet.bitcoinPublicKeychain).toEqual(bitcoinPublicKeychain); + expect(wallet.identityPublicKeychain).toEqual(identityPublicKeychain); + expect(wallet.firstBitcoinAddress).toEqual(firstBitcoinAddress); + expect(wallet.identityAddresses).toEqual(identityAddresses); + expect(wallet.identityKeypairs).toEqual(identityKeypairs); + expect(wallet.identities.length).toEqual(1); + const [identity] = wallet.identities; + expect(identity.address).toEqual(identityAddresses[0]); + expect(identity.keyPair).toEqual(identityKeypairs[0]); + }); + + test('generates and restores the same wallet', async () => { + const password = 'password'; + const generated = await Wallet.generate(password, ChainID.Testnet); + + const encryptedBackupPhrase = generated.encryptedBackupPhrase; + + const plainTextBuffer = await decrypt(Buffer.from(encryptedBackupPhrase, 'hex'), password); + + const backupPhrase = plainTextBuffer.toString(); + + const restored = await Wallet.restore(password, backupPhrase, ChainID.Mainnet); + + expect(restored.identityPublicKeychain).toEqual(generated.identityPublicKeychain); + }); + + test('generates 24-word seed phrase', async () => { + const pass = 'password'; + const wallet = await Wallet.generateStrong(pass, ChainID.Testnet); + const encryptedBackupPhrase = wallet.encryptedBackupPhrase; + const plainTextBuffer = await decrypt(Buffer.from(encryptedBackupPhrase, 'hex'), pass); + const backupPhrase = plainTextBuffer.toString(); + expect(backupPhrase.split(' ').length).toEqual(24); + }); + + test('generates a config private key', async () => { + const wallet = await Wallet.generate('password', ChainID.Testnet); + expect(wallet.configPrivateKey).not.toBeFalsy(); + const node = ECPair.fromPrivateKey(Buffer.from(wallet.configPrivateKey, 'hex')); + expect(node.privateKey).not.toBeFalsy(); + }); +}); + +test('returns null if no config in gaia', async () => { + fetchMock + .once( + JSON.stringify({ + read_url_prefix: 'https://gaia.blockstack.org/hub/', + challenge_text: '["gaiahub","0","gaia-0","blockstack_storage_please_sign"]', + latest_auth_version: 'v1', + }) + ) + .once('', { status: 404 }); + const wallet = await Wallet.generate('password', ChainID.Testnet); + const hubConfig = await wallet.createGaiaConfig('https://gaia.blockstack.org'); + const config = await wallet.fetchConfig(hubConfig); + expect(config).toBeFalsy(); + expect(wallet.walletConfig).toBeFalsy(); + expect(fetchMock.mock.calls.length).toEqual(2); +}); + +test('returns config if present', async () => { + const stubConfig: WalletConfig = { + identities: [ + { + username: 'hankstoever.id', + address: '', + apps: { + 'http://localhost:3000': { + origin: 'http://localhost:3000', + scopes: ['read_write'], + name: 'Tester', + appIcon: 'http://example.com/icon.png', + lastLoginAt: new Date().getTime(), + }, + }, + }, + ], + }; + + const wallet = await Wallet.generate('password', ChainID.Testnet); + const publicKey = getPublicKeyFromPrivate(wallet.configPrivateKey); + const encrypted = await encryptContent(JSON.stringify(stubConfig), { publicKey }); + + fetchMock + .once( + JSON.stringify({ + read_url_prefix: 'https://gaia.blockstack.org/hub/', + challenge_text: '["gaiahub","0","gaia-0","blockstack_storage_please_sign"]', + latest_auth_version: 'v1', + }) + ) + .once(encrypted); + + const hubConfig = await wallet.createGaiaConfig('https://gaia.blockstack.org'); + const config = await wallet.fetchConfig(hubConfig); + expect(config).not.toBeFalsy(); + if (!config) { + throw 'Must have config present'; + } + expect(config.identities.length).toEqual(1); + const identity = config.identities[0]; + expect(identity.apps['http://localhost:3000']).toEqual( + stubConfig.identities[0].apps['http://localhost:3000'] + ); +}); + +test('creates a config', async () => { + fetchMock + .once( + JSON.stringify({ + read_url_prefix: 'https://gaia.blockstack.org/hub/', + challenge_text: '["gaiahub","0","gaia-0","blockstack_storage_please_sign"]', + latest_auth_version: 'v1', + }) + ) + .once('', { status: 404 }) + .once(JSON.stringify({ publicUrl: 'asdf' })); + const wallet = await Wallet.generate('password', ChainID.Testnet); + const hubConfig = await wallet.createGaiaConfig('https://gaia.blockstack.org'); + const config = await wallet.getOrCreateConfig({ gaiaConfig: hubConfig }); + expect(Object.keys(config.identities[0].apps).length).toEqual(0); + const { body } = fetchMock.mock.calls[2][1]; + const decrypted = (await decryptContent(body, { privateKey: wallet.configPrivateKey })) as string; + expect(JSON.parse(decrypted)).toEqual(config); +}); + +test('updates wallet config', async () => { + fetchMock + .once( + JSON.stringify({ + read_url_prefix: 'https://gaia.blockstack.org/hub/', + challenge_text: '["gaiahub","0","gaia-0","blockstack_storage_please_sign"]', + latest_auth_version: 'v1', + }) + ) + .once('', { status: 404 }) + .once(JSON.stringify({ publicUrl: 'asdf' })) + .once(JSON.stringify({ publicUrl: 'asdf' })); + + const wallet = await Wallet.generate('password', ChainID.Testnet); + const gaiaConfig = await wallet.createGaiaConfig('https://gaia.blockstack.org'); + await wallet.getOrCreateConfig({ gaiaConfig }); + const app: ConfigApp = { + origin: 'http://localhost:5000', + scopes: ['read_write'], + lastLoginAt: new Date().getTime(), + name: 'Tester', + appIcon: 'asdf', + }; + await wallet.updateConfigWithAuth({ + identityIndex: 0, + app, + gaiaConfig, + }); + expect(fetchMock.mock.calls.length).toEqual(4); + const body = JSON.parse(fetchMock.mock.calls[3][1].body); + const decrypted = (await decryptContent(JSON.stringify(body), { + privateKey: wallet.configPrivateKey, + })) as string; + const config = JSON.parse(decrypted); + expect(config).toEqual(wallet.walletConfig); +}); + +test('updates config for reusing id warning', async () => { + fetchMock + .once( + JSON.stringify({ + read_url_prefix: 'https://gaia.blockstack.org/hub/', + challenge_text: '["gaiahub","0","gaia-0","blockstack_storage_please_sign"]', + latest_auth_version: 'v1', + }) + ) + .once('', { status: 404 }) + .once(JSON.stringify({ publicUrl: 'asdf' })) + .once(JSON.stringify({ publicUrl: 'asdf' })); + + const wallet = await Wallet.generate('password', ChainID.Testnet); + const gaiaConfig = await wallet.createGaiaConfig('https://gaia.blockstack.org'); + await wallet.getOrCreateConfig({ gaiaConfig }); + expect(wallet.walletConfig?.hideWarningForReusingIdentity).toBeFalsy(); + await wallet.updateConfigForReuseWarning({ gaiaConfig }); + expect(wallet.walletConfig?.hideWarningForReusingIdentity).toBeTruthy(); + expect(fetchMock.mock.calls.length).toEqual(4); + const body = JSON.parse(fetchMock.mock.calls[3][1].body); + const decrypted = (await decryptContent(JSON.stringify(body), { + privateKey: wallet.configPrivateKey, + })) as string; + const config = JSON.parse(decrypted); + expect(config.hideWarningForReusingIdentity).toBeTruthy(); +}); + +test('restoreIdentities', async () => { + const wallet = await Wallet.generate('password', ChainID.Testnet); + + const stubConfig: WalletConfig = { + identities: [ + { + username: 'hankstoever.id', + address: '', + apps: {}, + }, + { + username: 'hankstoever2.id', + address: '', + apps: {}, + }, + { + username: 'hankstoever3.id', + address: '', + apps: {}, + }, + ], + }; + + const publicKey = getPublicKeyFromPrivate(wallet.configPrivateKey); + const encrypted = await encryptContent(JSON.stringify(stubConfig), { publicKey }); + fetchMock.once(encrypted); + + const plainTextBuffer = await decrypt( + Buffer.from(wallet.encryptedBackupPhrase, 'hex'), + 'password' + ); + const seed = await mnemonicToSeed(plainTextBuffer); + const rootNode = bip32.fromSeed(seed); + await wallet.restoreIdentities({ gaiaReadURL: DEFAULT_GAIA_HUB, rootNode }); + expect(wallet.identities.length).toEqual(3); + expect(wallet.identities[0].defaultUsername).toEqual('hankstoever.id'); + expect(wallet.identities[1].defaultUsername).toEqual('hankstoever2.id'); + expect(wallet.identities[2].defaultUsername).toEqual('hankstoever3.id'); +}); diff --git a/packages/keychain/tsconfig.json b/packages/keychain/tsconfig.json new file mode 100644 index 000000000..a35f93aab --- /dev/null +++ b/packages/keychain/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "es2015", + "moduleResolution": "node", + "declaration": true, + "outDir": "/lib", + "strict": true, + "skipLibCheck": true, + "baseUrl": "./src", + "allowSyntheticDefaultImports": true, + "paths": { + "@blockstack/rpc-client": ["../../rpc-client/src"] + }, + "lib": [ + "es2017", + "dom" + ], + "sourceMap": true + }, + "include": [ + "./src/**/*" + ] +} \ No newline at end of file