@blockstack/keychain
Advanced tools
+20
-2
@@ -6,13 +6,31 @@ # Change Log | ||
| ## 0.10.6 (2020-08-11) | ||
| ## 0.12.1 (2020-08-21) | ||
| **Note:** Version bump only for package @blockstack/keychain | ||
| # [0.12.0](https://github.com/blockstack/ux/compare/@blockstack/keychain@0.10.5...@blockstack/keychain@0.12.0) (2020-08-21) | ||
| ### Bug Fixes | ||
| * show correct secret key on home screen, fixes [#517](https://github.com/blockstack/ux/issues/517) ([e14afcf](https://github.com/blockstack/ux/commit/e14afcf036ef25d45a541005aa9bb88cd218f4ab)) | ||
| * keychain version ([e1618f6](https://github.com/blockstack/ux/commit/e1618f61b18490e87760b810766beab38e7ef16f)) | ||
| * rpc-client version ([83cf48b](https://github.com/blockstack/ux/commit/83cf48b679fa0938f6550c02472a97400dd009bf)) | ||
| * **app:** use BigNum for fungible post condition amount ([633ac80](https://github.com/blockstack/ux/commit/633ac801b9a0f2f17eadd2dd302b8c4c235233de)) | ||
| * **keychain:** use correct filePath, add types for async functions ([7290261](https://github.com/blockstack/ux/commit/7290261a32d4fcea6627f66a76299b38ff7b7eac)) | ||
| * **keychain:** use filePath for profile uploading ([04c9385](https://github.com/blockstack/ux/commit/04c938591b82ff10f51b2f61401468d579655ee0)) | ||
| * **keychain:** use synchronous profile upload methods ([3b5bd82](https://github.com/blockstack/ux/commit/3b5bd821ccd45511645ce2c8bb648944ed4663c2)) | ||
| ### Features | ||
| * dont use popups in mobile, adds method to handle redirect auth ([450f58b](https://github.com/blockstack/ux/commit/450f58bcb5c3431d6b1ac649d19f319da34d9f7f)) | ||
| ## 0.10.5 (2020-07-30) | ||
@@ -19,0 +37,0 @@ |
@@ -426,6 +426,12 @@ 'use strict'; | ||
| var _registrars; | ||
| var uploadProfile = function uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig) { | ||
| var uploadProfile = function uploadProfile(_ref) { | ||
| var gaiaHubUrl = _ref.gaiaHubUrl, | ||
| filePath = _ref.filePath, | ||
| identity = _ref.identity, | ||
| signedProfileTokenData = _ref.signedProfileTokenData, | ||
| gaiaHubConfig = _ref.gaiaHubConfig; | ||
| try { | ||
| var _temp2 = function _temp2(identityHubConfig) { | ||
| return Promise.resolve(uploadToGaiaHub(DEFAULT_PROFILE_FILE_NAME, signedProfileTokenData, identityHubConfig)); | ||
| return Promise.resolve(uploadToGaiaHub(filePath, signedProfileTokenData, identityHubConfig)); | ||
| }; | ||
@@ -467,7 +473,7 @@ | ||
| var sendUsernameToRegistrar = function sendUsernameToRegistrar(_ref) { | ||
| var username = _ref.username, | ||
| subdomain = _ref.subdomain, | ||
| zoneFile = _ref.zoneFile, | ||
| identity = _ref.identity; | ||
| var sendUsernameToRegistrar = function sendUsernameToRegistrar(_ref2) { | ||
| var username = _ref2.username, | ||
| subdomain = _ref2.subdomain, | ||
| zoneFile = _ref2.zoneFile, | ||
| identity = _ref2.identity; | ||
@@ -504,7 +510,7 @@ try { | ||
| var registerSubdomain = function registerSubdomain(_ref2) { | ||
| var identity = _ref2.identity, | ||
| gaiaHubUrl = _ref2.gaiaHubUrl, | ||
| username = _ref2.username, | ||
| subdomain = _ref2.subdomain; | ||
| var registerSubdomain = function registerSubdomain(_ref3) { | ||
| var identity = _ref3.identity, | ||
| gaiaHubUrl = _ref3.gaiaHubUrl, | ||
| username = _ref3.username, | ||
| subdomain = _ref3.subdomain; | ||
@@ -514,3 +520,8 @@ try { | ||
| var signedProfileTokenData = signProfileForUpload(profile, identity.keyPair); | ||
| return Promise.resolve(uploadProfile(gaiaHubUrl, identity, signedProfileTokenData)).then(function (profileUrl) { | ||
| return Promise.resolve(uploadProfile({ | ||
| gaiaHubUrl: gaiaHubUrl, | ||
| filePath: DEFAULT_PROFILE_FILE_NAME, | ||
| identity: identity, | ||
| signedProfileTokenData: signedProfileTokenData | ||
| })).then(function (profileUrl) { | ||
| var fullUsername = username + "." + subdomain; | ||
@@ -533,11 +544,18 @@ var zoneFile = blockstack.makeProfileZoneFile(fullUsername, profileUrl); | ||
| }; | ||
| var signAndUploadProfile = function signAndUploadProfile(_ref3) { | ||
| var profile = _ref3.profile, | ||
| gaiaHubUrl = _ref3.gaiaHubUrl, | ||
| identity = _ref3.identity, | ||
| gaiaHubConfig = _ref3.gaiaHubConfig; | ||
| var signAndUploadProfile = function signAndUploadProfile(_ref4) { | ||
| var profile = _ref4.profile, | ||
| gaiaHubUrl = _ref4.gaiaHubUrl, | ||
| filePath = _ref4.filePath, | ||
| identity = _ref4.identity, | ||
| gaiaHubConfig = _ref4.gaiaHubConfig; | ||
| try { | ||
| var signedProfileTokenData = signProfileForUpload(profile, identity.keyPair); | ||
| return Promise.resolve(uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig)).then(function () {}); | ||
| return Promise.resolve(uploadProfile({ | ||
| gaiaHubUrl: gaiaHubUrl, | ||
| filePath: filePath, | ||
| identity: identity, | ||
| signedProfileTokenData: signedProfileTokenData, | ||
| gaiaHubConfig: gaiaHubConfig | ||
| })).then(function () {}); | ||
| } catch (e) { | ||
@@ -547,34 +565,31 @@ return Promise.reject(e); | ||
| }; | ||
| var fetchProfile = function fetchProfile(_ref4) { | ||
| var identity = _ref4.identity, | ||
| gaiaUrl = _ref4.gaiaUrl; | ||
| var fetchProfile = function fetchProfile(_ref5) { | ||
| var profileUrl = _ref5.profileUrl; | ||
| return Promise.resolve(_catch(function () { | ||
| return Promise.resolve(identity.profileUrl(gaiaUrl)).then(function (url) { | ||
| return Promise.resolve(fetch(url)).then(function (res) { | ||
| var _exit = false; | ||
| return Promise.resolve(fetch(profileUrl)).then(function (res) { | ||
| var _exit = false; | ||
| function _temp4(_result) { | ||
| if (_exit) return _result; | ||
| function _temp4(_result) { | ||
| if (_exit) return _result; | ||
| if (res.status === 404) { | ||
| return null; | ||
| } | ||
| throw new Error('Network error when fetching profile'); | ||
| if (res.status === 404) { | ||
| return null; | ||
| } | ||
| var _temp3 = function () { | ||
| if (res.ok) { | ||
| return Promise.resolve(res.json()).then(function (json) { | ||
| var _decodedToken$payload; | ||
| throw new Error('Network error when fetching profile'); | ||
| } | ||
| var decodedToken = json[0].decodedToken; | ||
| _exit = true; | ||
| return (_decodedToken$payload = decodedToken.payload) === null || _decodedToken$payload === void 0 ? void 0 : _decodedToken$payload.claim; | ||
| }); | ||
| } | ||
| }(); | ||
| var _temp3 = function () { | ||
| if (res.ok) { | ||
| return Promise.resolve(res.json()).then(function (json) { | ||
| var _decodedToken$payload; | ||
| return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3); | ||
| }); | ||
| var decodedToken = json[0].decodedToken; | ||
| _exit = true; | ||
| return (_decodedToken$payload = decodedToken.payload) === null || _decodedToken$payload === void 0 ? void 0 : _decodedToken$payload.claim; | ||
| }); | ||
| } | ||
| }(); | ||
| return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3); | ||
| }); | ||
@@ -618,4 +633,3 @@ }, function () { | ||
| return Promise.resolve(fetchProfile({ | ||
| identity: _this2, | ||
| gaiaUrl: hubInfo.read_url_prefix | ||
| profileUrl: profileUrl | ||
| })).then(function (profile) { | ||
@@ -656,2 +670,3 @@ function _temp2() { | ||
| }); | ||
| var filePath = new URL(profileUrl).pathname.substr(1); | ||
| return Promise.resolve(signAndUploadProfile({ | ||
@@ -661,2 +676,3 @@ profile: profile, | ||
| gaiaHubUrl: gaiaUrl, | ||
| filePath: filePath, | ||
| gaiaHubConfig: gaiaHubConfig | ||
@@ -762,9 +778,10 @@ })).then(function () {}); | ||
| return Promise.resolve(fetchProfile({ | ||
| identity: _this7, | ||
| gaiaUrl: opts.gaiaUrl | ||
| })).then(function (profile) { | ||
| if (profile) { | ||
| _this7.profile = profile; | ||
| } | ||
| return Promise.resolve(_this7.profileUrl(opts.gaiaUrl)).then(function (profileUrl) { | ||
| return Promise.resolve(fetchProfile({ | ||
| profileUrl: profileUrl | ||
| })).then(function (profile) { | ||
| if (profile) { | ||
| _this7.profile = profile; | ||
| } | ||
| }); | ||
| }); | ||
@@ -771,0 +788,0 @@ }); |
@@ -1,2 +0,2 @@ | ||
| "use strict";var e,r=require("bip39"),t=require("bitcoinjs-lib"),n=require("blockstack/lib/wallet"),i=require("blockstack/lib/keys"),o=require("blockstack/lib/encryption/sha2Hash"),s=require("zone-file"),a=require("blockstack/lib/auth/authMessages"),c=require("jsontokens"),u=require("blockstack/lib/encryption/cryptoRandom"),d=require("blockstack"),f=require("assert"),l=require("triplesec"),h=require("blockstack/lib/encryption/wallet"),v=require("@blockstack/stacks-transactions"),p=(e=require("bn.js"))&&"object"==typeof e&&"default"in e?e.default:e;function y(){return(y=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}var m=function(){function e(){}return e.prototype.then=function(r,t){var n=new e,i=this.s;if(i){var o=1&i?r:t;if(o){try{P(n,1,o(this.v))}catch(e){P(n,2,e)}return n}return this}return this.o=function(e){try{var i=e.v;1&e.s?P(n,1,r?r(i):i):t?P(n,1,t(i)):P(n,2,i)}catch(e){P(n,2,e)}},n},e}();function P(e,r,t){if(!e.s){if(t instanceof m){if(!t.s)return void(t.o=P.bind(null,e,r));1&r&&(r=t.s),t=t.v}if(t&&t.then)return void t.then(P.bind(null,e,r),P.bind(null,e,2));e.s=r,e.v=t;var n=e.o;n&&n(e)}}function g(e){return e instanceof m&&1&e.s}function b(e,r){try{var t=e()}catch(e){return r(e)}return t&&t.then?t.then(void 0,r):t}"undefined"!=typeof Symbol&&(Symbol.iterator||(Symbol.iterator=Symbol("Symbol.iterator"))),"undefined"!=typeof Symbol&&(Symbol.asyncIterator||(Symbol.asyncIterator=Symbol("Symbol.asyncIterator")));var k,K,x=function(){function e(e,r){this.hdNode=e,this.salt=r}var r=e.prototype;return r.getNode=function(){return this.hdNode},r.getSalt=function(){return this.salt},r.getIdentityKey=function(){if(!this.hdNode.privateKey)throw new Error("Node does not have private key");return this.hdNode.privateKey.toString("hex")},r.getIdentityKeyID=function(){return this.hdNode.publicKey.toString("hex")},r.getAppsNode=function(){return this.hdNode.deriveHardened(0)},r.getAddress=function(){return L(this.hdNode)},r.getEncryptionNode=function(){return this.hdNode.deriveHardened(2)},r.getSigningNode=function(){return this.hdNode.deriveHardened(1)},r.getSTXNode=function(){return this.hdNode.deriveHardened(6)},r.getAppNode=function(e){return n.getLegacyAppNode(this.hdNode,this.salt,e)},r.getAppPrivateKey=function(e){var r=this.getAppNode(e);if(!r.privateKey)throw new Error("App node does not have private key");return r.privateKey.toString("hex")},r.getAppAddress=function(e){var r=this.getAppNode(e);return i.publicKeyToAddress(r.publicKey)},e}(),S=function(e,r,t){try{return Promise.resolve(fetch(t.server+"/store/"+t.address+"/"+e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"bearer "+t.token},body:r,referrer:"no-referrer",referrerPolicy:"no-referrer"})).then((function(e){return Promise.resolve(e.json()).then((function(e){return e.publicURL}))}))}catch(e){return Promise.reject(e)}},A=function(e,r,t,n){try{var i=function(e){return Promise.resolve(S(C,t,e))};return Promise.resolve(n?i(n):Promise.resolve(d.connectToGaiaHub(e,r.keyPair.key)).then(i))}catch(e){return Promise.reject(e)}},N={"@type":"Person","@context":"http://schema.org"},C="profile.json";(K=exports.Subdomains||(exports.Subdomains={})).TEST="test-personal.id",K.BLOCKSTACK="id.blockstack";var w=((k={})[exports.Subdomains.TEST]={registerUrl:"https://test-registrar.blockstack.org/register",apiUrl:"https://test-registrar.blockstack.org/v1/names"},k[exports.Subdomains.BLOCKSTACK]={registerUrl:"https://registrar.blockstack.org/register",apiUrl:"https://registrar.blockstack.org/v1/names"},k);function T(e,r){var t=d.signProfileToken(e,r.key,{publicKey:r.keyID}),n=d.wrapProfileToken(t);return JSON.stringify([n],null,2)}var j=function(e){var r=e.profile,t=e.gaiaHubUrl,n=e.identity,i=e.gaiaHubConfig;try{var o=T(r,n.keyPair);return Promise.resolve(A(t,n,o,i)).then((function(){}))}catch(e){return Promise.reject(e)}},U=function(e){var r=e.identity,t=e.gaiaUrl;return Promise.resolve(b((function(){return Promise.resolve(r.profileUrl(t)).then((function(e){return Promise.resolve(fetch(e)).then((function(e){var r=!1;function t(t){if(r)return t;if(404===e.status)return null;throw new Error("Network error when fetching profile")}var n=function(){if(e.ok)return Promise.resolve(e.json()).then((function(e){var t;return r=!0,null===(t=e[0].decodedToken.payload)||void 0===t?void 0:t.claim}))}();return n&&n.then?n.then(t):t(n)}))}))}),(function(){return null})))},I=function(){function e(e){var r=e.address,t=e.usernames,n=e.defaultUsername,i=e.profile;this.keyPair=e.keyPair,this.address=r,this.usernames=t||[],this.defaultUsername=n,this.profile=i}var r=e.prototype;return r.makeAuthResponse=function(e){var r=e.appDomain,n=e.gaiaUrl,o=e.transitPublicKey,s=e.scopes,f=void 0===s?[]:s,l=e.stxAddress;try{var h=this,v=h.appPrivateKey(r);return Promise.resolve(function(e){try{return Promise.resolve(fetch(e+"/hub_info")).then((function(e){return Promise.resolve(e.json())}))}catch(e){return Promise.reject(e)}}(n)).then((function(e){return Promise.resolve(h.profileUrl(e.read_url_prefix)).then((function(s){return Promise.resolve(U({identity:h,gaiaUrl:e.read_url_prefix})).then((function(p){function m(){h.profile=p;var e,r,t,d,f,m=(e=i.getPublicKeyFromPrivate(v.slice(0,64)),r=h.keyPair.key.slice(0,64),t=i.getPublicKeyFromPrivate(r),d=u.randomBytes(16).toString("hex"),f={childToAssociate:e,iss:t,exp:31536e3+(new Date).getTime()/1e3,iat:Date.now()/1e3,salt:d},new c.TokenSigner("ES256K",r).sign(f));return a.makeAuthResponse(h.keyPair.key,y({},h.profile||{},{stxAddress:l}),h.defaultUsername||"",{profileUrl:s},void 0,v,void 0,o,n,void 0,m)}var P=function(){if(f.includes("publish_data")){p.apps||(p.apps={});var o=t.ECPair.fromPrivateKey(Buffer.from(v,"hex")),s=""+e.read_url_prefix+d.ecPairToAddress(o)+"/";p.apps[r]=s,p.appsMeta||(p.appsMeta={}),p.appsMeta[r]={storage:s,publicKey:o.publicKey.toString("hex")};var a=function(e){var r=e.hubInfo,t=e.privateKey,n=e.gaiaHubUrl,o=r.read_url_prefix,s=function(e){var r=e.privateKey,t=e.hubInfo.challenge_text,n={gaiaHubUrl:e.gaiaHubUrl,iss:i.getPublicKeyFromPrivate(r),salt:u.randomBytes(16).toString("hex")};return t&&(n.gaiaChallenge=t),"v1:"+new c.TokenSigner("ES256K",r).sign(n)}({hubInfo:r,privateKey:t,gaiaHubUrl:n});return{url_prefix:o,max_file_upload_size_megabytes:100,address:d.ecPairToAddress(d.hexStringToECPair(t+(64===t.length?"01":""))),token:s,server:n}}({hubInfo:e,privateKey:h.keyPair.key,gaiaHubUrl:n});return Promise.resolve(j({profile:p,identity:h,gaiaHubUrl:n,gaiaHubConfig:a})).then((function(){}))}}();return P&&P.then?P.then(m):m()}))}))}))}catch(e){return Promise.reject(e)}},r.appPrivateKey=function(e){var r=this.keyPair,n=r.salt;return new x(t.bip32.fromBase58(r.appsNodeKey),n).getAppPrivateKey(e)},r.profileUrl=function(e){try{var r=!1,t=this,n=function(){if(t.defaultUsername)return b((function(){return Promise.resolve(G(t.defaultUsername)).then((function(e){if(e)return r=!0,e}))}),(function(e){console.warn("Error fetching profile URL from zone file:",e)}))}();return Promise.resolve(n&&n.then?n.then((function(n){return r?n:""+e+t.address+"/profile.json"})):r?n:""+e+t.address+"/profile.json")}catch(e){return Promise.reject(e)}},r.fetchNames=function(){try{return Promise.resolve(fetch("https://core.blockstack.org/v1/addresses/bitcoin/"+this.address)).then((function(e){return Promise.resolve(e.json()).then((function(e){return e.names}))}))}catch(e){return Promise.reject(e)}},r.refresh=function(e){var r=this;return void 0===e&&(e={gaiaUrl:"https://gaia.blockstack.org/hub/"}),Promise.resolve(b((function(){return Promise.resolve(r.fetchNames()).then((function(t){return t&&(t[0]&&!r.defaultUsername&&(r.defaultUsername=t[0]),t.forEach((function(e){-1===r.usernames.findIndex((function(r){return r===e}))&&r.usernames.push(e)}))),Promise.resolve(U({identity:r,gaiaUrl:e.gaiaUrl})).then((function(e){e&&(r.profile=e)}))}))}),(function(){})))},e}(),E=function(e,r){try{var t=function(){return{identityPublicKeychain:o,bitcoinPublicKeychain:a,firstBitcoinAddress:c,identityAddresses:u,identityKeypairs:d,identities:f}},n=M(e),i=B(e),o=n.neutered().toBase58(),s=i.neutered(),a=s.toBase58(),c=L(H(s)),u=[],d=[],f=[],l=0,h=function(e,r,t){for(var n;;){var i=e();if(g(i)&&(i=i.v),!i)return o;if(i.then){n=0;break}var o=t();if(o&&o.then){if(!g(o)){n=1;break}o=o.s}if(r){var s=r();if(s&&s.then&&!g(s)){n=2;break}}}var a=new m,c=P.bind(null,a,2);return(0===n?i.then(d):1===n?o.then(u):s.then(f)).then(void 0,c),a;function u(n){o=n;do{if(r&&(s=r())&&s.then&&!g(s))return void s.then(f).then(void 0,c);if(!(i=e())||g(i)&&!i.v)return void P(a,1,o);if(i.then)return void i.then(d).then(void 0,c);g(o=t())&&(o=o.v)}while(!o||!o.then);o.then(u).then(void 0,c)}function d(e){e?(o=t())&&o.then?o.then(u).then(void 0,c):u(o):P(a,1,o)}function f(){(i=e())?i.then?i.then(d).then(void 0,c):d(i):P(a,1,o)}}((function(){return l<r}),(function(){return l++}),(function(){return Promise.resolve(D(e,l)).then((function(e){f.push(e),d.push(e.keyPair),u.push(e.address)}))}));return Promise.resolve(h&&h.then?h.then(t):t())}catch(e){return Promise.reject(e)}},_=function(e,r){void 0===r&&(r=0);try{if(e.isNeutered())throw new Error("You need the private key to generate identity addresses");var t=Buffer.from(e.publicKey.toString("hex"));return Promise.resolve(o.createSha2Hash()).then((function(n){return Promise.resolve(n.digest(t,"sha256")).then((function(t){var n=t.toString("hex");return new x(e.deriveHardened(r),n)}))}))}catch(e){return Promise.reject(e)}};function M(e){return e.deriveHardened(888).deriveHardened(0)}function B(e){return e.deriveHardened(44).deriveHardened(0).deriveHardened(0)}function H(e,r,t){void 0===r&&(r=0),void 0===t&&(t="EXTERNAL_ADDRESS");var n=null;if("EXTERNAL_ADDRESS"===t)n=0;else{if("CHANGE_ADDRESS"!==t)throw new Error("Invalid chain type");n=1}return e.derive(n).derive(r)}function L(e){return i.publicKeyToAddress(e.publicKey)}function R(e){var r=e.getAddress(),t=e.getIdentityKey(),n=e.getIdentityKeyID(),i=e.getAppsNode(),o=e.getSTXNode();return{key:t,keyID:n,address:r,appsNodeKey:i.toBase58(),stxNodeKey:o.toBase58(),salt:e.getSalt()}}var F,D=function(e,r){try{var t=M(e);return Promise.resolve(_(t,r)).then((function(e){var r=R(e);return new I({keyPair:r,address:r.address,usernames:[]})}))}catch(e){return Promise.reject(e)}};function O(e){if(!e)throw new f.AssertionError({expected:!0,actual:e})}(F=exports.IdentityNameValidityError||(exports.IdentityNameValidityError={})).MINIMUM_LENGTH="error_minimum_length",F.MAXIMUM_LENGTH="error_maximum_length",F.ILLEGAL_CHARACTER="error_illegal_character",F.UNAVAILABLE="error_name_unavailable";var q,X=function(e){var r=e.length;return r<8?exports.IdentityNameValidityError.MINIMUM_LENGTH:r>37?exports.IdentityNameValidityError.MAXIMUM_LENGTH:/^[a-z0-9_]+$/.test(e)?null:exports.IdentityNameValidityError.ILLEGAL_CHARACTER},V=function(e,r){try{void 0===r&&(r=exports.Subdomains.BLOCKSTACK);var t=w[r].apiUrl+"/"+e.toLowerCase()+"."+r;return Promise.resolve(fetch(t)).then((function(e){return Promise.resolve(e.json())}))}catch(e){return Promise.reject(e)}},z=function e(r){var t=r.rootNode,n=r.index,i=void 0===n?1:n,o=r.identities,s=void 0===o?[]:o;try{return Promise.resolve(D(t,i)).then((function(r){return Promise.resolve(r.refresh()).then((function(){return r.defaultUsername?(s.push(r),e({rootNode:t,index:i+1,identities:s})):s}))}))}catch(e){return Promise.reject(e)}},G=function(e){try{return Promise.resolve(fetch("https://core.blockstack.org/v1/names/"+e)).then((function(e){return function(){if(e.ok)return Promise.resolve(e.json()).then((function(e){return s.parseZoneFile(e.zonefile).uri[0].target}))}()}))}catch(e){return Promise.reject(e)}},W=function(e,r){try{return Promise.resolve(h.decryptMnemonic(e,r,l.decrypt))}catch(e){return Promise.reject(e)}},J=function(e,r){try{return Promise.resolve(h.encryptMnemonic(e,r))}catch(e){return Promise.reject(e)}},Z=function(e,r){try{return Promise.resolve(d.encryptMnemonic(e,r)).then((function(e){var r=e.toString("hex");return{encryptedMnemonic:e,encryptedMnemonicHex:r}}))}catch(e){return Promise.reject(e)}},Y=function(e){try{return Promise.resolve(r.mnemonicToSeed(e)).then((function(e){return t.bip32.fromSeed(e)}))}catch(e){return Promise.reject(e)}},$=function(e,n){try{var i=r.generateMnemonic(n,u.randomBytes);return Promise.resolve(r.mnemonicToSeed(i)).then((function(r){var n=t.bip32.fromSeed(r);return Promise.resolve(J(i,e)).then((function(e){var r=e.toString("hex");return{rootNode:n,encryptedMnemonicPhrase:r}}))}))}catch(e){return Promise.reject(e)}},Q=((q={})[v.ChainID.Mainnet]="m/44'/5757'/0'/0/0",q[v.ChainID.Testnet]="m/44'/5757'/0'/0/0",q);function ee(e){return Q[e]}function re(e){return function(r){var n=r.derivePath(ee(e));if(!n.privateKey)throw new Error("Unable to derive private key from `rootNode`, bip32 master keychain");var i=t.ECPair.fromPrivateKey(n.privateKey),o=d.ecPairToHexString(i);return{childKey:n,address:v.getAddressFromPrivateKey(o,e===v.ChainID.Mainnet?v.TransactionVersion.Mainnet:v.TransactionVersion.Testnet),privateKey:o}}}var te=function(){function e(e){this.privateKey=e.privateKey}var r=e.prototype;return r.getSTXAddress=function(e){return v.getAddressFromPrivateKey(this.getSTXPrivateKey(),e)},r.getSTXPrivateKey=function(){var e=t.bip32.fromBase58(this.privateKey);return O(e.privateKey),e.privateKey},r.getNetwork=function(){var e=new v.StacksTestnet;return e.coreApiUrl="https://sidecar.staging.blockstack.xyz",e},r.fetchAccount=function(e){var r=e.version,t=e.rpcClient;try{var n=this.getSTXAddress(r);return Promise.resolve(t.fetchAccount(n))}catch(e){return Promise.reject(e)}},r.signContractCall=function(e){var r=e.contractName,t=e.contractAddress,n=e.functionName,i=e.functionArgs,o=e.nonce,s=e.postConditionMode,a=e.postConditions;try{return Promise.resolve(v.makeContractCall({contractAddress:t,contractName:r,functionName:n,functionArgs:i,senderKey:this.getSTXPrivateKey().toString("hex"),nonce:new p(o),network:this.getNetwork(),postConditionMode:s,postConditions:a}))}catch(e){return Promise.reject(e)}},r.signContractDeploy=function(e){var r=e.contractName,t=e.codeBody,n=e.nonce,i=e.postConditionMode,o=e.postConditions;try{return Promise.resolve(v.makeContractDeploy({contractName:r,codeBody:t,senderKey:this.getSTXPrivateKey().toString("hex"),network:this.getNetwork(),nonce:new p(n),postConditionMode:i,postConditions:o}))}catch(e){return Promise.reject(e)}},r.signSTXTransfer=function(e){var r=e.recipient,t=e.amount,n=e.memo,i=e.nonce,o=e.postConditionMode,s=e.postConditions;try{return Promise.resolve(v.makeSTXTokenTransfer({recipient:r,amount:new p(t),memo:n,senderKey:this.getSTXPrivateKey().toString("hex"),network:this.getNetwork(),nonce:new p(i),postConditionMode:o,postConditions:s}))}catch(e){return Promise.reject(e)}},e}(),ne=function(){function e(e){var r=e.encryptedBackupPhrase,t=e.identityPublicKeychain,n=e.bitcoinPublicKeychain,i=e.firstBitcoinAddress,o=e.identityKeypairs,s=e.identityAddresses,a=e.identities,c=e.configPrivateKey,u=e.stacksPrivateKey,d=e.walletConfig;this.chain=e.chain,this.encryptedBackupPhrase=r,this.identityPublicKeychain=t,this.bitcoinPublicKeychain=n,this.firstBitcoinAddress=i,this.identityKeypairs=o,this.identityAddresses=s,this.identities=a.map((function(e){return new I(e)})),this.configPrivateKey=c,this.stacksPrivateKey=u,this.walletConfig=d}e.generateFactory=function(e){var r=this;return function(t,n){try{return Promise.resolve($(t,e)).then((function(e){return r.createAccount({encryptedBackupPhrase:e.encryptedMnemonicPhrase,rootNode:e.rootNode,chain:n})}))}catch(e){return Promise.reject(e)}}},e.generate=function(e,r){try{return Promise.resolve(this.generateFactory(128)(e,r))}catch(e){return Promise.reject(e)}},e.generateStrong=function(e,r){try{return Promise.resolve(this.generateFactory(256)(e,r))}catch(e){return Promise.reject(e)}},e.restore=function(r,t,n){try{return Promise.resolve(Y(t)).then((function(i){return Promise.resolve(Z(t,r)).then((function(r){return Promise.resolve(e.createAccount({encryptedBackupPhrase:r.encryptedMnemonicHex,rootNode:i,chain:n})).then((function(e){return Promise.resolve(e.restoreIdentities({rootNode:i,gaiaReadURL:"https://gaia.blockstack.org/hub/"}))}))}))}))}catch(e){return Promise.reject(e)}},e.createAccount=function(r){var t=r.encryptedBackupPhrase,n=r.rootNode,i=r.chain,o=r.identitiesToGenerate,s=void 0===o?1:o;try{var a=n.deriveHardened(45).privateKey;if(!a)throw new TypeError("Unable to derive config key for wallet identities");var c=a.toString("hex"),u=re(i)(n).childKey;return Promise.resolve(E(n,s)).then((function(r){return new e(y({},r,{chain:i,configPrivateKey:c,stacksPrivateKey:u.toBase58(),encryptedBackupPhrase:t}))}))}catch(e){return Promise.reject(e)}};var n=e.prototype;return n.restoreIdentities=function(e){var r,t,n=e.rootNode,i=e.gaiaReadURL;try{var o=this,s={url_prefix:(r={readURL:i,privateKey:o.configPrivateKey}).readURL,max_file_upload_size_megabytes:100,address:d.ecPairToAddress(d.hexStringToECPair((t=r.privateKey)+(64===t.length?"01":""))),token:"not_used",server:"not_used"};return Promise.resolve(o.fetchConfig(s)).then((function(){var e=!1;function r(r){return e?r:Promise.resolve(o.identities[0].refresh()).then((function(){return Promise.resolve(z({rootNode:n})).then((function(e){return o.identities=o.identities.concat(e),o}))}))}var t=function(){if(o.walletConfig){var r=o.walletConfig.identities.map((function(e,r){try{var t=function(){return e.username&&(i.usernames=[e.username],i.defaultUsername=e.username),i},i=o.identities[r],s=function(){if(!i)return Promise.resolve(D(n,r)).then((function(e){i=e}))}();return Promise.resolve(s&&s.then?s.then(t):t())}catch(e){return Promise.reject(e)}}));return Promise.resolve(Promise.all(r)).then((function(r){return o.identities=r,e=!0,o}))}}();return t&&t.then?t.then(r):r(t)}))}catch(e){return Promise.reject(e)}},n.createNewIdentity=function(e){try{var n=this;return Promise.resolve(W(Buffer.from(n.encryptedBackupPhrase,"hex"),e)).then((function(e){return Promise.resolve(r.mnemonicToSeed(e)).then((function(e){var r=t.bip32.fromSeed(e);return Promise.resolve(D(r,n.identities.length)).then((function(e){return n.identities.push(e),n.identityKeypairs.push(e.keyPair),n.identityAddresses.push(e.address),e}))}))}))}catch(e){return Promise.reject(e)}},n.createGaiaConfig=function(e){try{return Promise.resolve(d.connectToGaiaHub(e,this.configPrivateKey))}catch(e){return Promise.reject(e)}},n.fetchConfig=function(e){var r=this;return Promise.resolve(b((function(){return Promise.resolve(fetch(""+e.url_prefix+e.address+"/wallet-config.json")).then((function(e){return Promise.resolve(e.text()).then((function(e){return Promise.resolve(d.decryptContent(e,{privateKey:r.configPrivateKey})).then((function(e){var t=JSON.parse(e);return r.walletConfig=t,t}))}))}))}),(function(){return null})))},n.getOrCreateConfig=function(e){var r=e.gaiaConfig,t=e.skipUpload;try{var n=this;return n.walletConfig?Promise.resolve(n.walletConfig):Promise.resolve(n.fetchConfig(r)).then((function(e){if(e)return e;var i={identities:n.identities.map((function(e){return{username:e.defaultUsername,address:e.address,apps:{}}}))};n.walletConfig=i;var o=function(){if(!t)return Promise.resolve(n.updateConfig(r)).then((function(){}))}();return o&&o.then?o.then((function(){return i})):i}))}catch(e){return Promise.reject(e)}},n.updateConfig=function(e){try{var r=d.getPublicKeyFromPrivate(this.configPrivateKey);return Promise.resolve(d.encryptContent(JSON.stringify(this.walletConfig),{publicKey:r})).then((function(r){return Promise.resolve(S("wallet-config.json",r,e)).then((function(){}))}))}catch(e){return Promise.reject(e)}},n.updateConfigWithAuth=function(e){var r=e.identityIndex,t=e.app,n=e.gaiaConfig;try{var i=this,o=i.walletConfig;O(o),i.identities.forEach((function(e,r){var t,n=o.identities[r];n?(n.apps=n.apps||{},n.username=e.defaultUsername,n.address=e.address,o.identities[r]=n):null===(t=i.walletConfig)||void 0===t||t.identities.push({username:e.defaultUsername,address:e.address,apps:{}})}));var s=o.identities[r];return s.apps=s.apps||{},s.apps[t.origin]=t,o.identities[r]=s,i.walletConfig=o,Promise.resolve(i.updateConfig(n)).then((function(){}))}catch(e){return Promise.reject(e)}},n.updateConfigForReuseWarning=function(e){var r=e.gaiaConfig;try{return O(this.walletConfig),this.walletConfig.hideWarningForReusingIdentity=!0,Promise.resolve(this.updateConfig(r)).then((function(){}))}catch(e){return Promise.reject(e)}},n.getSigner=function(){return new te({privateKey:this.stacksPrivateKey})},e}(),ie={Wallet:ne};exports.DEFAULT_PROFILE=N,exports.Identity=I,exports.Wallet=ne,exports.WalletSigner=te,exports.assertIsTruthy=O,exports.decrypt=W,exports.default=ie,exports.derivationPaths=Q,exports.deriveIdentityKeyPair=R,exports.deriveRootKeychainFromMnemonic=Y,exports.deriveStxAddressChain=re,exports.encrypt=J,exports.encryptMnemonicFormatted=Z,exports.fetchProfile=U,exports.generateEncryptedMnemonicRootKeychain=$,exports.generateMnemonicRootKeychain=function(e){try{var n=r.generateMnemonic(e,u.randomBytes);return Promise.resolve(r.mnemonicToSeed(n)).then((function(e){return{rootNode:t.bip32.fromSeed(e),plaintextMnemonic:n}}))}catch(e){return Promise.reject(e)}},exports.getAddress=L,exports.getBitcoinAddressNode=H,exports.getBitcoinPrivateKeychain=B,exports.getBlockchainIdentities=E,exports.getDerivationPath=ee,exports.getIdentityOwnerAddressNode=_,exports.getIdentityPrivateKeychain=M,exports.getProfileURLFromZoneFile=G,exports.makeIdentity=D,exports.recursiveRestoreIdentities=z,exports.registerSubdomain=function(e){var r=e.identity,t=e.gaiaHubUrl,n=e.username,i=e.subdomain;try{var o=T(r.profile||N,r.keyPair);return Promise.resolve(A(t,r,o)).then((function(e){var t=n+"."+i,o=d.makeProfileZoneFile(t,e);return Promise.resolve(function(e){var r=e.username,t=e.subdomain,n=e.zoneFile,i=e.identity;try{var o=w[t].registerUrl,s=JSON.stringify({name:r,owner_address:i.address,zonefile:n});return Promise.resolve(fetch(o,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:s})).then((function(e){return e.ok?e.json():Promise.reject({error:"Failed to register username",status:e.status})}))}catch(e){return Promise.reject(e)}}({username:n,subdomain:i,zoneFile:o,identity:r})).then((function(){return r.defaultUsername=t,r.usernames.push(t),r}))}))}catch(e){return Promise.reject(e)}},exports.registrars=w,exports.signAndUploadProfile=j,exports.signProfileForUpload=T,exports.uploadProfile=A,exports.validateSubdomain=function(e,r){try{var t=!1;void 0===r&&(r=exports.Subdomains.BLOCKSTACK);var n=X(e);if(n)return Promise.resolve(n);var i=b((function(){return Promise.resolve(V(e,r)).then((function(e){if("available"!==e.status)return t=!0,exports.IdentityNameValidityError.UNAVAILABLE}))}),(function(){return t=!0,exports.IdentityNameValidityError.UNAVAILABLE}));return Promise.resolve(i&&i.then?i.then((function(e){return t?e:null})):t?i:null)}catch(e){return Promise.reject(e)}},exports.validateSubdomainAvailability=V,exports.validateSubdomainFormat=X; | ||
| "use strict";var e,r=require("bip39"),t=require("bitcoinjs-lib"),n=require("blockstack/lib/wallet"),i=require("blockstack/lib/keys"),o=require("blockstack/lib/encryption/sha2Hash"),s=require("zone-file"),a=require("blockstack/lib/auth/authMessages"),u=require("jsontokens"),c=require("blockstack/lib/encryption/cryptoRandom"),d=require("blockstack"),f=require("assert"),l=require("triplesec"),h=require("blockstack/lib/encryption/wallet"),v=require("@blockstack/stacks-transactions"),p=(e=require("bn.js"))&&"object"==typeof e&&"default"in e?e.default:e;function y(){return(y=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}var m=function(){function e(){}return e.prototype.then=function(r,t){var n=new e,i=this.s;if(i){var o=1&i?r:t;if(o){try{P(n,1,o(this.v))}catch(e){P(n,2,e)}return n}return this}return this.o=function(e){try{var i=e.v;1&e.s?P(n,1,r?r(i):i):t?P(n,1,t(i)):P(n,2,i)}catch(e){P(n,2,e)}},n},e}();function P(e,r,t){if(!e.s){if(t instanceof m){if(!t.s)return void(t.o=P.bind(null,e,r));1&r&&(r=t.s),t=t.v}if(t&&t.then)return void t.then(P.bind(null,e,r),P.bind(null,e,2));e.s=r,e.v=t;var n=e.o;n&&n(e)}}function g(e){return e instanceof m&&1&e.s}function b(e,r){try{var t=e()}catch(e){return r(e)}return t&&t.then?t.then(void 0,r):t}"undefined"!=typeof Symbol&&(Symbol.iterator||(Symbol.iterator=Symbol("Symbol.iterator"))),"undefined"!=typeof Symbol&&(Symbol.asyncIterator||(Symbol.asyncIterator=Symbol("Symbol.asyncIterator")));var k,K,x=function(){function e(e,r){this.hdNode=e,this.salt=r}var r=e.prototype;return r.getNode=function(){return this.hdNode},r.getSalt=function(){return this.salt},r.getIdentityKey=function(){if(!this.hdNode.privateKey)throw new Error("Node does not have private key");return this.hdNode.privateKey.toString("hex")},r.getIdentityKeyID=function(){return this.hdNode.publicKey.toString("hex")},r.getAppsNode=function(){return this.hdNode.deriveHardened(0)},r.getAddress=function(){return B(this.hdNode)},r.getEncryptionNode=function(){return this.hdNode.deriveHardened(2)},r.getSigningNode=function(){return this.hdNode.deriveHardened(1)},r.getSTXNode=function(){return this.hdNode.deriveHardened(6)},r.getAppNode=function(e){return n.getLegacyAppNode(this.hdNode,this.salt,e)},r.getAppPrivateKey=function(e){var r=this.getAppNode(e);if(!r.privateKey)throw new Error("App node does not have private key");return r.privateKey.toString("hex")},r.getAppAddress=function(e){var r=this.getAppNode(e);return i.publicKeyToAddress(r.publicKey)},e}(),S=function(e,r,t){try{return Promise.resolve(fetch(t.server+"/store/"+t.address+"/"+e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"bearer "+t.token},body:r,referrer:"no-referrer",referrerPolicy:"no-referrer"})).then((function(e){return Promise.resolve(e.json()).then((function(e){return e.publicURL}))}))}catch(e){return Promise.reject(e)}},A=function(e){var r=e.gaiaHubUrl,t=e.filePath,n=e.identity,i=e.signedProfileTokenData,o=e.gaiaHubConfig;try{var s=function(e){return Promise.resolve(S(t,i,e))};return Promise.resolve(o?s(o):Promise.resolve(d.connectToGaiaHub(r,n.keyPair.key)).then(s))}catch(e){return Promise.reject(e)}},C={"@type":"Person","@context":"http://schema.org"};(K=exports.Subdomains||(exports.Subdomains={})).TEST="test-personal.id",K.BLOCKSTACK="id.blockstack";var N=((k={})[exports.Subdomains.TEST]={registerUrl:"https://test-registrar.blockstack.org/register",apiUrl:"https://test-registrar.blockstack.org/v1/names"},k[exports.Subdomains.BLOCKSTACK]={registerUrl:"https://registrar.blockstack.org/register",apiUrl:"https://registrar.blockstack.org/v1/names"},k);function w(e,r){var t=d.signProfileToken(e,r.key,{publicKey:r.keyID}),n=d.wrapProfileToken(t);return JSON.stringify([n],null,2)}var T=function(e){var r=e.profile,t=e.gaiaHubUrl,n=e.filePath,i=e.identity,o=e.gaiaHubConfig;try{var s=w(r,i.keyPair);return Promise.resolve(A({gaiaHubUrl:t,filePath:n,identity:i,signedProfileTokenData:s,gaiaHubConfig:o})).then((function(){}))}catch(e){return Promise.reject(e)}},U=function(e){var r=e.profileUrl;return Promise.resolve(b((function(){return Promise.resolve(fetch(r)).then((function(e){var r=!1;function t(t){if(r)return t;if(404===e.status)return null;throw new Error("Network error when fetching profile")}var n=function(){if(e.ok)return Promise.resolve(e.json()).then((function(e){var t;return r=!0,null===(t=e[0].decodedToken.payload)||void 0===t?void 0:t.claim}))}();return n&&n.then?n.then(t):t(n)}))}),(function(){return null})))},j=function(){function e(e){var r=e.address,t=e.usernames,n=e.defaultUsername,i=e.profile;this.keyPair=e.keyPair,this.address=r,this.usernames=t||[],this.defaultUsername=n,this.profile=i}var r=e.prototype;return r.makeAuthResponse=function(e){var r=e.appDomain,n=e.gaiaUrl,o=e.transitPublicKey,s=e.scopes,f=void 0===s?[]:s,l=e.stxAddress;try{var h=this,v=h.appPrivateKey(r);return Promise.resolve(function(e){try{return Promise.resolve(fetch(e+"/hub_info")).then((function(e){return Promise.resolve(e.json())}))}catch(e){return Promise.reject(e)}}(n)).then((function(e){return Promise.resolve(h.profileUrl(e.read_url_prefix)).then((function(s){return Promise.resolve(U({profileUrl:s})).then((function(p){function m(){h.profile=p;var e,r,t,d,f,m=(e=i.getPublicKeyFromPrivate(v.slice(0,64)),r=h.keyPair.key.slice(0,64),t=i.getPublicKeyFromPrivate(r),d=c.randomBytes(16).toString("hex"),f={childToAssociate:e,iss:t,exp:31536e3+(new Date).getTime()/1e3,iat:Date.now()/1e3,salt:d},new u.TokenSigner("ES256K",r).sign(f));return a.makeAuthResponse(h.keyPair.key,y({},h.profile||{},{stxAddress:l}),h.defaultUsername||"",{profileUrl:s},void 0,v,void 0,o,n,void 0,m)}var P=function(){if(f.includes("publish_data")){p.apps||(p.apps={});var o=t.ECPair.fromPrivateKey(Buffer.from(v,"hex")),a=""+e.read_url_prefix+d.ecPairToAddress(o)+"/";p.apps[r]=a,p.appsMeta||(p.appsMeta={}),p.appsMeta[r]={storage:a,publicKey:o.publicKey.toString("hex")};var l=function(e){var r=e.hubInfo,t=e.privateKey,n=e.gaiaHubUrl,o=r.read_url_prefix,s=function(e){var r=e.privateKey,t=e.hubInfo.challenge_text,n={gaiaHubUrl:e.gaiaHubUrl,iss:i.getPublicKeyFromPrivate(r),salt:c.randomBytes(16).toString("hex")};return t&&(n.gaiaChallenge=t),"v1:"+new u.TokenSigner("ES256K",r).sign(n)}({hubInfo:r,privateKey:t,gaiaHubUrl:n});return{url_prefix:o,max_file_upload_size_megabytes:100,address:d.ecPairToAddress(d.hexStringToECPair(t+(64===t.length?"01":""))),token:s,server:n}}({hubInfo:e,privateKey:h.keyPair.key,gaiaHubUrl:n}),y=new URL(s).pathname.substr(1);return Promise.resolve(T({profile:p,identity:h,gaiaHubUrl:n,filePath:y,gaiaHubConfig:l})).then((function(){}))}}();return P&&P.then?P.then(m):m()}))}))}))}catch(e){return Promise.reject(e)}},r.appPrivateKey=function(e){var r=this.keyPair,n=r.salt;return new x(t.bip32.fromBase58(r.appsNodeKey),n).getAppPrivateKey(e)},r.profileUrl=function(e){try{var r=!1,t=this,n=function(){if(t.defaultUsername)return b((function(){return Promise.resolve(z(t.defaultUsername)).then((function(e){if(e)return r=!0,e}))}),(function(e){console.warn("Error fetching profile URL from zone file:",e)}))}();return Promise.resolve(n&&n.then?n.then((function(n){return r?n:""+e+t.address+"/profile.json"})):r?n:""+e+t.address+"/profile.json")}catch(e){return Promise.reject(e)}},r.fetchNames=function(){try{return Promise.resolve(fetch("https://core.blockstack.org/v1/addresses/bitcoin/"+this.address)).then((function(e){return Promise.resolve(e.json()).then((function(e){return e.names}))}))}catch(e){return Promise.reject(e)}},r.refresh=function(e){var r=this;return void 0===e&&(e={gaiaUrl:"https://gaia.blockstack.org/hub/"}),Promise.resolve(b((function(){return Promise.resolve(r.fetchNames()).then((function(t){return t&&(t[0]&&!r.defaultUsername&&(r.defaultUsername=t[0]),t.forEach((function(e){-1===r.usernames.findIndex((function(r){return r===e}))&&r.usernames.push(e)}))),Promise.resolve(r.profileUrl(e.gaiaUrl)).then((function(e){return Promise.resolve(U({profileUrl:e})).then((function(e){e&&(r.profile=e)}))}))}))}),(function(){})))},e}(),I=function(e,r){try{var t=function(){return{identityPublicKeychain:o,bitcoinPublicKeychain:a,firstBitcoinAddress:u,identityAddresses:c,identityKeypairs:d,identities:f}},n=_(e),i=H(e),o=n.neutered().toBase58(),s=i.neutered(),a=s.toBase58(),u=B(M(s)),c=[],d=[],f=[],l=0,h=function(e,r,t){for(var n;;){var i=e();if(g(i)&&(i=i.v),!i)return o;if(i.then){n=0;break}var o=t();if(o&&o.then){if(!g(o)){n=1;break}o=o.s}if(r){var s=r();if(s&&s.then&&!g(s)){n=2;break}}}var a=new m,u=P.bind(null,a,2);return(0===n?i.then(d):1===n?o.then(c):s.then(f)).then(void 0,u),a;function c(n){o=n;do{if(r&&(s=r())&&s.then&&!g(s))return void s.then(f).then(void 0,u);if(!(i=e())||g(i)&&!i.v)return void P(a,1,o);if(i.then)return void i.then(d).then(void 0,u);g(o=t())&&(o=o.v)}while(!o||!o.then);o.then(c).then(void 0,u)}function d(e){e?(o=t())&&o.then?o.then(c).then(void 0,u):c(o):P(a,1,o)}function f(){(i=e())?i.then?i.then(d).then(void 0,u):d(i):P(a,1,o)}}((function(){return l<r}),(function(){return l++}),(function(){return Promise.resolve(F(e,l)).then((function(e){f.push(e),d.push(e.keyPair),c.push(e.address)}))}));return Promise.resolve(h&&h.then?h.then(t):t())}catch(e){return Promise.reject(e)}},E=function(e,r){void 0===r&&(r=0);try{if(e.isNeutered())throw new Error("You need the private key to generate identity addresses");var t=Buffer.from(e.publicKey.toString("hex"));return Promise.resolve(o.createSha2Hash()).then((function(n){return Promise.resolve(n.digest(t,"sha256")).then((function(t){var n=t.toString("hex");return new x(e.deriveHardened(r),n)}))}))}catch(e){return Promise.reject(e)}};function _(e){return e.deriveHardened(888).deriveHardened(0)}function H(e){return e.deriveHardened(44).deriveHardened(0).deriveHardened(0)}function M(e,r,t){void 0===r&&(r=0),void 0===t&&(t="EXTERNAL_ADDRESS");var n=null;if("EXTERNAL_ADDRESS"===t)n=0;else{if("CHANGE_ADDRESS"!==t)throw new Error("Invalid chain type");n=1}return e.derive(n).derive(r)}function B(e){return i.publicKeyToAddress(e.publicKey)}function L(e){var r=e.getAddress(),t=e.getIdentityKey(),n=e.getIdentityKeyID(),i=e.getAppsNode(),o=e.getSTXNode();return{key:t,keyID:n,address:r,appsNodeKey:i.toBase58(),stxNodeKey:o.toBase58(),salt:e.getSalt()}}var R,F=function(e,r){try{var t=_(e);return Promise.resolve(E(t,r)).then((function(e){var r=L(e);return new j({keyPair:r,address:r.address,usernames:[]})}))}catch(e){return Promise.reject(e)}};function D(e){if(!e)throw new f.AssertionError({expected:!0,actual:e})}(R=exports.IdentityNameValidityError||(exports.IdentityNameValidityError={})).MINIMUM_LENGTH="error_minimum_length",R.MAXIMUM_LENGTH="error_maximum_length",R.ILLEGAL_CHARACTER="error_illegal_character",R.UNAVAILABLE="error_name_unavailable";var O,q=function(e){var r=e.length;return r<8?exports.IdentityNameValidityError.MINIMUM_LENGTH:r>37?exports.IdentityNameValidityError.MAXIMUM_LENGTH:/^[a-z0-9_]+$/.test(e)?null:exports.IdentityNameValidityError.ILLEGAL_CHARACTER},X=function(e,r){try{void 0===r&&(r=exports.Subdomains.BLOCKSTACK);var t=N[r].apiUrl+"/"+e.toLowerCase()+"."+r;return Promise.resolve(fetch(t)).then((function(e){return Promise.resolve(e.json())}))}catch(e){return Promise.reject(e)}},V=function e(r){var t=r.rootNode,n=r.index,i=void 0===n?1:n,o=r.identities,s=void 0===o?[]:o;try{return Promise.resolve(F(t,i)).then((function(r){return Promise.resolve(r.refresh()).then((function(){return r.defaultUsername?(s.push(r),e({rootNode:t,index:i+1,identities:s})):s}))}))}catch(e){return Promise.reject(e)}},z=function(e){try{return Promise.resolve(fetch("https://core.blockstack.org/v1/names/"+e)).then((function(e){return function(){if(e.ok)return Promise.resolve(e.json()).then((function(e){return s.parseZoneFile(e.zonefile).uri[0].target}))}()}))}catch(e){return Promise.reject(e)}},G=function(e,r){try{return Promise.resolve(h.decryptMnemonic(e,r,l.decrypt))}catch(e){return Promise.reject(e)}},W=function(e,r){try{return Promise.resolve(h.encryptMnemonic(e,r))}catch(e){return Promise.reject(e)}},J=function(e,r){try{return Promise.resolve(d.encryptMnemonic(e,r)).then((function(e){var r=e.toString("hex");return{encryptedMnemonic:e,encryptedMnemonicHex:r}}))}catch(e){return Promise.reject(e)}},Z=function(e){try{return Promise.resolve(r.mnemonicToSeed(e)).then((function(e){return t.bip32.fromSeed(e)}))}catch(e){return Promise.reject(e)}},Y=function(e,n){try{var i=r.generateMnemonic(n,c.randomBytes);return Promise.resolve(r.mnemonicToSeed(i)).then((function(r){var n=t.bip32.fromSeed(r);return Promise.resolve(W(i,e)).then((function(e){var r=e.toString("hex");return{rootNode:n,encryptedMnemonicPhrase:r}}))}))}catch(e){return Promise.reject(e)}},$=((O={})[v.ChainID.Mainnet]="m/44'/5757'/0'/0/0",O[v.ChainID.Testnet]="m/44'/5757'/0'/0/0",O);function Q(e){return $[e]}function ee(e){return function(r){var n=r.derivePath(Q(e));if(!n.privateKey)throw new Error("Unable to derive private key from `rootNode`, bip32 master keychain");var i=t.ECPair.fromPrivateKey(n.privateKey),o=d.ecPairToHexString(i);return{childKey:n,address:v.getAddressFromPrivateKey(o,e===v.ChainID.Mainnet?v.TransactionVersion.Mainnet:v.TransactionVersion.Testnet),privateKey:o}}}var re=function(){function e(e){this.privateKey=e.privateKey}var r=e.prototype;return r.getSTXAddress=function(e){return v.getAddressFromPrivateKey(this.getSTXPrivateKey(),e)},r.getSTXPrivateKey=function(){var e=t.bip32.fromBase58(this.privateKey);return D(e.privateKey),e.privateKey},r.getNetwork=function(){var e=new v.StacksTestnet;return e.coreApiUrl="https://sidecar.staging.blockstack.xyz",e},r.fetchAccount=function(e){var r=e.version,t=e.rpcClient;try{var n=this.getSTXAddress(r);return Promise.resolve(t.fetchAccount(n))}catch(e){return Promise.reject(e)}},r.signContractCall=function(e){var r=e.contractName,t=e.contractAddress,n=e.functionName,i=e.functionArgs,o=e.nonce,s=e.postConditionMode,a=e.postConditions;try{return Promise.resolve(v.makeContractCall({contractAddress:t,contractName:r,functionName:n,functionArgs:i,senderKey:this.getSTXPrivateKey().toString("hex"),nonce:new p(o),network:this.getNetwork(),postConditionMode:s,postConditions:a}))}catch(e){return Promise.reject(e)}},r.signContractDeploy=function(e){var r=e.contractName,t=e.codeBody,n=e.nonce,i=e.postConditionMode,o=e.postConditions;try{return Promise.resolve(v.makeContractDeploy({contractName:r,codeBody:t,senderKey:this.getSTXPrivateKey().toString("hex"),network:this.getNetwork(),nonce:new p(n),postConditionMode:i,postConditions:o}))}catch(e){return Promise.reject(e)}},r.signSTXTransfer=function(e){var r=e.recipient,t=e.amount,n=e.memo,i=e.nonce,o=e.postConditionMode,s=e.postConditions;try{return Promise.resolve(v.makeSTXTokenTransfer({recipient:r,amount:new p(t),memo:n,senderKey:this.getSTXPrivateKey().toString("hex"),network:this.getNetwork(),nonce:new p(i),postConditionMode:o,postConditions:s}))}catch(e){return Promise.reject(e)}},e}(),te=function(){function e(e){var r=e.encryptedBackupPhrase,t=e.identityPublicKeychain,n=e.bitcoinPublicKeychain,i=e.firstBitcoinAddress,o=e.identityKeypairs,s=e.identityAddresses,a=e.identities,u=e.configPrivateKey,c=e.stacksPrivateKey,d=e.walletConfig;this.chain=e.chain,this.encryptedBackupPhrase=r,this.identityPublicKeychain=t,this.bitcoinPublicKeychain=n,this.firstBitcoinAddress=i,this.identityKeypairs=o,this.identityAddresses=s,this.identities=a.map((function(e){return new j(e)})),this.configPrivateKey=u,this.stacksPrivateKey=c,this.walletConfig=d}e.generateFactory=function(e){var r=this;return function(t,n){try{return Promise.resolve(Y(t,e)).then((function(e){return r.createAccount({encryptedBackupPhrase:e.encryptedMnemonicPhrase,rootNode:e.rootNode,chain:n})}))}catch(e){return Promise.reject(e)}}},e.generate=function(e,r){try{return Promise.resolve(this.generateFactory(128)(e,r))}catch(e){return Promise.reject(e)}},e.generateStrong=function(e,r){try{return Promise.resolve(this.generateFactory(256)(e,r))}catch(e){return Promise.reject(e)}},e.restore=function(r,t,n){try{return Promise.resolve(Z(t)).then((function(i){return Promise.resolve(J(t,r)).then((function(r){return Promise.resolve(e.createAccount({encryptedBackupPhrase:r.encryptedMnemonicHex,rootNode:i,chain:n})).then((function(e){return Promise.resolve(e.restoreIdentities({rootNode:i,gaiaReadURL:"https://gaia.blockstack.org/hub/"}))}))}))}))}catch(e){return Promise.reject(e)}},e.createAccount=function(r){var t=r.encryptedBackupPhrase,n=r.rootNode,i=r.chain,o=r.identitiesToGenerate,s=void 0===o?1:o;try{var a=n.deriveHardened(45).privateKey;if(!a)throw new TypeError("Unable to derive config key for wallet identities");var u=a.toString("hex"),c=ee(i)(n).childKey;return Promise.resolve(I(n,s)).then((function(r){return new e(y({},r,{chain:i,configPrivateKey:u,stacksPrivateKey:c.toBase58(),encryptedBackupPhrase:t}))}))}catch(e){return Promise.reject(e)}};var n=e.prototype;return n.restoreIdentities=function(e){var r,t,n=e.rootNode,i=e.gaiaReadURL;try{var o=this,s={url_prefix:(r={readURL:i,privateKey:o.configPrivateKey}).readURL,max_file_upload_size_megabytes:100,address:d.ecPairToAddress(d.hexStringToECPair((t=r.privateKey)+(64===t.length?"01":""))),token:"not_used",server:"not_used"};return Promise.resolve(o.fetchConfig(s)).then((function(){var e=!1;function r(r){return e?r:Promise.resolve(o.identities[0].refresh()).then((function(){return Promise.resolve(V({rootNode:n})).then((function(e){return o.identities=o.identities.concat(e),o}))}))}var t=function(){if(o.walletConfig){var r=o.walletConfig.identities.map((function(e,r){try{var t=function(){return e.username&&(i.usernames=[e.username],i.defaultUsername=e.username),i},i=o.identities[r],s=function(){if(!i)return Promise.resolve(F(n,r)).then((function(e){i=e}))}();return Promise.resolve(s&&s.then?s.then(t):t())}catch(e){return Promise.reject(e)}}));return Promise.resolve(Promise.all(r)).then((function(r){return o.identities=r,e=!0,o}))}}();return t&&t.then?t.then(r):r(t)}))}catch(e){return Promise.reject(e)}},n.createNewIdentity=function(e){try{var n=this;return Promise.resolve(G(Buffer.from(n.encryptedBackupPhrase,"hex"),e)).then((function(e){return Promise.resolve(r.mnemonicToSeed(e)).then((function(e){var r=t.bip32.fromSeed(e);return Promise.resolve(F(r,n.identities.length)).then((function(e){return n.identities.push(e),n.identityKeypairs.push(e.keyPair),n.identityAddresses.push(e.address),e}))}))}))}catch(e){return Promise.reject(e)}},n.createGaiaConfig=function(e){try{return Promise.resolve(d.connectToGaiaHub(e,this.configPrivateKey))}catch(e){return Promise.reject(e)}},n.fetchConfig=function(e){var r=this;return Promise.resolve(b((function(){return Promise.resolve(fetch(""+e.url_prefix+e.address+"/wallet-config.json")).then((function(e){return Promise.resolve(e.text()).then((function(e){return Promise.resolve(d.decryptContent(e,{privateKey:r.configPrivateKey})).then((function(e){var t=JSON.parse(e);return r.walletConfig=t,t}))}))}))}),(function(){return null})))},n.getOrCreateConfig=function(e){var r=e.gaiaConfig,t=e.skipUpload;try{var n=this;return n.walletConfig?Promise.resolve(n.walletConfig):Promise.resolve(n.fetchConfig(r)).then((function(e){if(e)return e;var i={identities:n.identities.map((function(e){return{username:e.defaultUsername,address:e.address,apps:{}}}))};n.walletConfig=i;var o=function(){if(!t)return Promise.resolve(n.updateConfig(r)).then((function(){}))}();return o&&o.then?o.then((function(){return i})):i}))}catch(e){return Promise.reject(e)}},n.updateConfig=function(e){try{var r=d.getPublicKeyFromPrivate(this.configPrivateKey);return Promise.resolve(d.encryptContent(JSON.stringify(this.walletConfig),{publicKey:r})).then((function(r){return Promise.resolve(S("wallet-config.json",r,e)).then((function(){}))}))}catch(e){return Promise.reject(e)}},n.updateConfigWithAuth=function(e){var r=e.identityIndex,t=e.app,n=e.gaiaConfig;try{var i=this,o=i.walletConfig;D(o),i.identities.forEach((function(e,r){var t,n=o.identities[r];n?(n.apps=n.apps||{},n.username=e.defaultUsername,n.address=e.address,o.identities[r]=n):null===(t=i.walletConfig)||void 0===t||t.identities.push({username:e.defaultUsername,address:e.address,apps:{}})}));var s=o.identities[r];return s.apps=s.apps||{},s.apps[t.origin]=t,o.identities[r]=s,i.walletConfig=o,Promise.resolve(i.updateConfig(n)).then((function(){}))}catch(e){return Promise.reject(e)}},n.updateConfigForReuseWarning=function(e){var r=e.gaiaConfig;try{return D(this.walletConfig),this.walletConfig.hideWarningForReusingIdentity=!0,Promise.resolve(this.updateConfig(r)).then((function(){}))}catch(e){return Promise.reject(e)}},n.getSigner=function(){return new re({privateKey:this.stacksPrivateKey})},e}(),ne={Wallet:te};exports.DEFAULT_PROFILE=C,exports.Identity=j,exports.Wallet=te,exports.WalletSigner=re,exports.assertIsTruthy=D,exports.decrypt=G,exports.default=ne,exports.derivationPaths=$,exports.deriveIdentityKeyPair=L,exports.deriveRootKeychainFromMnemonic=Z,exports.deriveStxAddressChain=ee,exports.encrypt=W,exports.encryptMnemonicFormatted=J,exports.fetchProfile=U,exports.generateEncryptedMnemonicRootKeychain=Y,exports.generateMnemonicRootKeychain=function(e){try{var n=r.generateMnemonic(e,c.randomBytes);return Promise.resolve(r.mnemonicToSeed(n)).then((function(e){return{rootNode:t.bip32.fromSeed(e),plaintextMnemonic:n}}))}catch(e){return Promise.reject(e)}},exports.getAddress=B,exports.getBitcoinAddressNode=M,exports.getBitcoinPrivateKeychain=H,exports.getBlockchainIdentities=I,exports.getDerivationPath=Q,exports.getIdentityOwnerAddressNode=E,exports.getIdentityPrivateKeychain=_,exports.getProfileURLFromZoneFile=z,exports.makeIdentity=F,exports.recursiveRestoreIdentities=V,exports.registerSubdomain=function(e){var r=e.identity,t=e.gaiaHubUrl,n=e.username,i=e.subdomain;try{var o=w(r.profile||C,r.keyPair);return Promise.resolve(A({gaiaHubUrl:t,filePath:"profile.json",identity:r,signedProfileTokenData:o})).then((function(e){var t=n+"."+i,o=d.makeProfileZoneFile(t,e);return Promise.resolve(function(e){var r=e.username,t=e.subdomain,n=e.zoneFile,i=e.identity;try{var o=N[t].registerUrl,s=JSON.stringify({name:r,owner_address:i.address,zonefile:n});return Promise.resolve(fetch(o,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:s})).then((function(e){return e.ok?e.json():Promise.reject({error:"Failed to register username",status:e.status})}))}catch(e){return Promise.reject(e)}}({username:n,subdomain:i,zoneFile:o,identity:r})).then((function(){return r.defaultUsername=t,r.usernames.push(t),r}))}))}catch(e){return Promise.reject(e)}},exports.registrars=N,exports.signAndUploadProfile=T,exports.signProfileForUpload=w,exports.uploadProfile=A,exports.validateSubdomain=function(e,r){try{var t=!1;void 0===r&&(r=exports.Subdomains.BLOCKSTACK);var n=q(e);if(n)return Promise.resolve(n);var i=b((function(){return Promise.resolve(X(e,r)).then((function(e){if("available"!==e.status)return t=!0,exports.IdentityNameValidityError.UNAVAILABLE}))}),(function(){return t=!0,exports.IdentityNameValidityError.UNAVAILABLE}));return Promise.resolve(i&&i.then?i.then((function(e){return t?e:null})):t?i:null)}catch(e){return Promise.reject(e)}},exports.validateSubdomainAvailability=X,exports.validateSubdomainFormat=q; | ||
| //# sourceMappingURL=keychain.cjs.production.min.js.map |
+70
-53
@@ -422,6 +422,12 @@ import { mnemonicToSeed, generateMnemonic } from 'bip39'; | ||
| var _registrars; | ||
| var uploadProfile = function uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig) { | ||
| var uploadProfile = function uploadProfile(_ref) { | ||
| var gaiaHubUrl = _ref.gaiaHubUrl, | ||
| filePath = _ref.filePath, | ||
| identity = _ref.identity, | ||
| signedProfileTokenData = _ref.signedProfileTokenData, | ||
| gaiaHubConfig = _ref.gaiaHubConfig; | ||
| try { | ||
| var _temp2 = function _temp2(identityHubConfig) { | ||
| return Promise.resolve(uploadToGaiaHub(DEFAULT_PROFILE_FILE_NAME, signedProfileTokenData, identityHubConfig)); | ||
| return Promise.resolve(uploadToGaiaHub(filePath, signedProfileTokenData, identityHubConfig)); | ||
| }; | ||
@@ -464,7 +470,7 @@ | ||
| var sendUsernameToRegistrar = function sendUsernameToRegistrar(_ref) { | ||
| var username = _ref.username, | ||
| subdomain = _ref.subdomain, | ||
| zoneFile = _ref.zoneFile, | ||
| identity = _ref.identity; | ||
| var sendUsernameToRegistrar = function sendUsernameToRegistrar(_ref2) { | ||
| var username = _ref2.username, | ||
| subdomain = _ref2.subdomain, | ||
| zoneFile = _ref2.zoneFile, | ||
| identity = _ref2.identity; | ||
@@ -501,7 +507,7 @@ try { | ||
| var registerSubdomain = function registerSubdomain(_ref2) { | ||
| var identity = _ref2.identity, | ||
| gaiaHubUrl = _ref2.gaiaHubUrl, | ||
| username = _ref2.username, | ||
| subdomain = _ref2.subdomain; | ||
| var registerSubdomain = function registerSubdomain(_ref3) { | ||
| var identity = _ref3.identity, | ||
| gaiaHubUrl = _ref3.gaiaHubUrl, | ||
| username = _ref3.username, | ||
| subdomain = _ref3.subdomain; | ||
@@ -511,3 +517,8 @@ try { | ||
| var signedProfileTokenData = signProfileForUpload(profile, identity.keyPair); | ||
| return Promise.resolve(uploadProfile(gaiaHubUrl, identity, signedProfileTokenData)).then(function (profileUrl) { | ||
| return Promise.resolve(uploadProfile({ | ||
| gaiaHubUrl: gaiaHubUrl, | ||
| filePath: DEFAULT_PROFILE_FILE_NAME, | ||
| identity: identity, | ||
| signedProfileTokenData: signedProfileTokenData | ||
| })).then(function (profileUrl) { | ||
| var fullUsername = username + "." + subdomain; | ||
@@ -530,11 +541,18 @@ var zoneFile = makeProfileZoneFile(fullUsername, profileUrl); | ||
| }; | ||
| var signAndUploadProfile = function signAndUploadProfile(_ref3) { | ||
| var profile = _ref3.profile, | ||
| gaiaHubUrl = _ref3.gaiaHubUrl, | ||
| identity = _ref3.identity, | ||
| gaiaHubConfig = _ref3.gaiaHubConfig; | ||
| var signAndUploadProfile = function signAndUploadProfile(_ref4) { | ||
| var profile = _ref4.profile, | ||
| gaiaHubUrl = _ref4.gaiaHubUrl, | ||
| filePath = _ref4.filePath, | ||
| identity = _ref4.identity, | ||
| gaiaHubConfig = _ref4.gaiaHubConfig; | ||
| try { | ||
| var signedProfileTokenData = signProfileForUpload(profile, identity.keyPair); | ||
| return Promise.resolve(uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig)).then(function () {}); | ||
| return Promise.resolve(uploadProfile({ | ||
| gaiaHubUrl: gaiaHubUrl, | ||
| filePath: filePath, | ||
| identity: identity, | ||
| signedProfileTokenData: signedProfileTokenData, | ||
| gaiaHubConfig: gaiaHubConfig | ||
| })).then(function () {}); | ||
| } catch (e) { | ||
@@ -544,34 +562,31 @@ return Promise.reject(e); | ||
| }; | ||
| var fetchProfile = function fetchProfile(_ref4) { | ||
| var identity = _ref4.identity, | ||
| gaiaUrl = _ref4.gaiaUrl; | ||
| var fetchProfile = function fetchProfile(_ref5) { | ||
| var profileUrl = _ref5.profileUrl; | ||
| return Promise.resolve(_catch(function () { | ||
| return Promise.resolve(identity.profileUrl(gaiaUrl)).then(function (url) { | ||
| return Promise.resolve(fetch(url)).then(function (res) { | ||
| var _exit = false; | ||
| return Promise.resolve(fetch(profileUrl)).then(function (res) { | ||
| var _exit = false; | ||
| function _temp4(_result) { | ||
| if (_exit) return _result; | ||
| function _temp4(_result) { | ||
| if (_exit) return _result; | ||
| if (res.status === 404) { | ||
| return null; | ||
| } | ||
| throw new Error('Network error when fetching profile'); | ||
| if (res.status === 404) { | ||
| return null; | ||
| } | ||
| var _temp3 = function () { | ||
| if (res.ok) { | ||
| return Promise.resolve(res.json()).then(function (json) { | ||
| var _decodedToken$payload; | ||
| throw new Error('Network error when fetching profile'); | ||
| } | ||
| var decodedToken = json[0].decodedToken; | ||
| _exit = true; | ||
| return (_decodedToken$payload = decodedToken.payload) === null || _decodedToken$payload === void 0 ? void 0 : _decodedToken$payload.claim; | ||
| }); | ||
| } | ||
| }(); | ||
| var _temp3 = function () { | ||
| if (res.ok) { | ||
| return Promise.resolve(res.json()).then(function (json) { | ||
| var _decodedToken$payload; | ||
| return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3); | ||
| }); | ||
| var decodedToken = json[0].decodedToken; | ||
| _exit = true; | ||
| return (_decodedToken$payload = decodedToken.payload) === null || _decodedToken$payload === void 0 ? void 0 : _decodedToken$payload.claim; | ||
| }); | ||
| } | ||
| }(); | ||
| return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3); | ||
| }); | ||
@@ -615,4 +630,3 @@ }, function () { | ||
| return Promise.resolve(fetchProfile({ | ||
| identity: _this2, | ||
| gaiaUrl: hubInfo.read_url_prefix | ||
| profileUrl: profileUrl | ||
| })).then(function (profile) { | ||
@@ -653,2 +667,3 @@ function _temp2() { | ||
| }); | ||
| var filePath = new URL(profileUrl).pathname.substr(1); | ||
| return Promise.resolve(signAndUploadProfile({ | ||
@@ -658,2 +673,3 @@ profile: profile, | ||
| gaiaHubUrl: gaiaUrl, | ||
| filePath: filePath, | ||
| gaiaHubConfig: gaiaHubConfig | ||
@@ -759,9 +775,10 @@ })).then(function () {}); | ||
| return Promise.resolve(fetchProfile({ | ||
| identity: _this7, | ||
| gaiaUrl: opts.gaiaUrl | ||
| })).then(function (profile) { | ||
| if (profile) { | ||
| _this7.profile = profile; | ||
| } | ||
| return Promise.resolve(_this7.profileUrl(opts.gaiaUrl)).then(function (profileUrl) { | ||
| return Promise.resolve(fetchProfile({ | ||
| profileUrl: profileUrl | ||
| })).then(function (profile) { | ||
| if (profile) { | ||
| _this7.profile = profile; | ||
| } | ||
| }); | ||
| }); | ||
@@ -768,0 +785,0 @@ }); |
@@ -414,6 +414,12 @@ (function (global, factory) { | ||
| var _registrars; | ||
| var uploadProfile = function uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig) { | ||
| var uploadProfile = function uploadProfile(_ref) { | ||
| var gaiaHubUrl = _ref.gaiaHubUrl, | ||
| filePath = _ref.filePath, | ||
| identity = _ref.identity, | ||
| signedProfileTokenData = _ref.signedProfileTokenData, | ||
| gaiaHubConfig = _ref.gaiaHubConfig; | ||
| try { | ||
| var _temp2 = function _temp2(identityHubConfig) { | ||
| return Promise.resolve(uploadToGaiaHub(DEFAULT_PROFILE_FILE_NAME, signedProfileTokenData, identityHubConfig)); | ||
| return Promise.resolve(uploadToGaiaHub(filePath, signedProfileTokenData, identityHubConfig)); | ||
| }; | ||
@@ -455,7 +461,7 @@ | ||
| var sendUsernameToRegistrar = function sendUsernameToRegistrar(_ref) { | ||
| var username = _ref.username, | ||
| subdomain = _ref.subdomain, | ||
| zoneFile = _ref.zoneFile, | ||
| identity = _ref.identity; | ||
| var sendUsernameToRegistrar = function sendUsernameToRegistrar(_ref2) { | ||
| var username = _ref2.username, | ||
| subdomain = _ref2.subdomain, | ||
| zoneFile = _ref2.zoneFile, | ||
| identity = _ref2.identity; | ||
@@ -492,7 +498,7 @@ try { | ||
| var registerSubdomain = function registerSubdomain(_ref2) { | ||
| var identity = _ref2.identity, | ||
| gaiaHubUrl = _ref2.gaiaHubUrl, | ||
| username = _ref2.username, | ||
| subdomain = _ref2.subdomain; | ||
| var registerSubdomain = function registerSubdomain(_ref3) { | ||
| var identity = _ref3.identity, | ||
| gaiaHubUrl = _ref3.gaiaHubUrl, | ||
| username = _ref3.username, | ||
| subdomain = _ref3.subdomain; | ||
@@ -502,3 +508,8 @@ try { | ||
| var signedProfileTokenData = signProfileForUpload(profile, identity.keyPair); | ||
| return Promise.resolve(uploadProfile(gaiaHubUrl, identity, signedProfileTokenData)).then(function (profileUrl) { | ||
| return Promise.resolve(uploadProfile({ | ||
| gaiaHubUrl: gaiaHubUrl, | ||
| filePath: DEFAULT_PROFILE_FILE_NAME, | ||
| identity: identity, | ||
| signedProfileTokenData: signedProfileTokenData | ||
| })).then(function (profileUrl) { | ||
| var fullUsername = username + "." + subdomain; | ||
@@ -521,11 +532,18 @@ var zoneFile = blockstack.makeProfileZoneFile(fullUsername, profileUrl); | ||
| }; | ||
| var signAndUploadProfile = function signAndUploadProfile(_ref3) { | ||
| var profile = _ref3.profile, | ||
| gaiaHubUrl = _ref3.gaiaHubUrl, | ||
| identity = _ref3.identity, | ||
| gaiaHubConfig = _ref3.gaiaHubConfig; | ||
| var signAndUploadProfile = function signAndUploadProfile(_ref4) { | ||
| var profile = _ref4.profile, | ||
| gaiaHubUrl = _ref4.gaiaHubUrl, | ||
| filePath = _ref4.filePath, | ||
| identity = _ref4.identity, | ||
| gaiaHubConfig = _ref4.gaiaHubConfig; | ||
| try { | ||
| var signedProfileTokenData = signProfileForUpload(profile, identity.keyPair); | ||
| return Promise.resolve(uploadProfile(gaiaHubUrl, identity, signedProfileTokenData, gaiaHubConfig)).then(function () {}); | ||
| return Promise.resolve(uploadProfile({ | ||
| gaiaHubUrl: gaiaHubUrl, | ||
| filePath: filePath, | ||
| identity: identity, | ||
| signedProfileTokenData: signedProfileTokenData, | ||
| gaiaHubConfig: gaiaHubConfig | ||
| })).then(function () {}); | ||
| } catch (e) { | ||
@@ -535,34 +553,31 @@ return Promise.reject(e); | ||
| }; | ||
| var fetchProfile = function fetchProfile(_ref4) { | ||
| var identity = _ref4.identity, | ||
| gaiaUrl = _ref4.gaiaUrl; | ||
| var fetchProfile = function fetchProfile(_ref5) { | ||
| var profileUrl = _ref5.profileUrl; | ||
| return Promise.resolve(_catch(function () { | ||
| return Promise.resolve(identity.profileUrl(gaiaUrl)).then(function (url) { | ||
| return Promise.resolve(fetch(url)).then(function (res) { | ||
| var _exit = false; | ||
| return Promise.resolve(fetch(profileUrl)).then(function (res) { | ||
| var _exit = false; | ||
| function _temp4(_result) { | ||
| if (_exit) return _result; | ||
| function _temp4(_result) { | ||
| if (_exit) return _result; | ||
| if (res.status === 404) { | ||
| return null; | ||
| } | ||
| throw new Error('Network error when fetching profile'); | ||
| if (res.status === 404) { | ||
| return null; | ||
| } | ||
| var _temp3 = function () { | ||
| if (res.ok) { | ||
| return Promise.resolve(res.json()).then(function (json) { | ||
| var _decodedToken$payload; | ||
| throw new Error('Network error when fetching profile'); | ||
| } | ||
| var decodedToken = json[0].decodedToken; | ||
| _exit = true; | ||
| return (_decodedToken$payload = decodedToken.payload) === null || _decodedToken$payload === void 0 ? void 0 : _decodedToken$payload.claim; | ||
| }); | ||
| } | ||
| }(); | ||
| var _temp3 = function () { | ||
| if (res.ok) { | ||
| return Promise.resolve(res.json()).then(function (json) { | ||
| var _decodedToken$payload; | ||
| return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3); | ||
| }); | ||
| var decodedToken = json[0].decodedToken; | ||
| _exit = true; | ||
| return (_decodedToken$payload = decodedToken.payload) === null || _decodedToken$payload === void 0 ? void 0 : _decodedToken$payload.claim; | ||
| }); | ||
| } | ||
| }(); | ||
| return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3); | ||
| }); | ||
@@ -606,4 +621,3 @@ }, function () { | ||
| return Promise.resolve(fetchProfile({ | ||
| identity: _this2, | ||
| gaiaUrl: hubInfo.read_url_prefix | ||
| profileUrl: profileUrl | ||
| })).then(function (profile) { | ||
@@ -644,2 +658,3 @@ function _temp2() { | ||
| }); | ||
| var filePath = new URL(profileUrl).pathname.substr(1); | ||
| return Promise.resolve(signAndUploadProfile({ | ||
@@ -649,2 +664,3 @@ profile: profile, | ||
| gaiaHubUrl: gaiaUrl, | ||
| filePath: filePath, | ||
| gaiaHubConfig: gaiaHubConfig | ||
@@ -750,9 +766,10 @@ })).then(function () {}); | ||
| return Promise.resolve(fetchProfile({ | ||
| identity: _this7, | ||
| gaiaUrl: opts.gaiaUrl | ||
| })).then(function (profile) { | ||
| if (profile) { | ||
| _this7.profile = profile; | ||
| } | ||
| return Promise.resolve(_this7.profileUrl(opts.gaiaUrl)).then(function (profileUrl) { | ||
| return Promise.resolve(fetchProfile({ | ||
| profileUrl: profileUrl | ||
| })).then(function (profile) { | ||
| if (profile) { | ||
| _this7.profile = profile; | ||
| } | ||
| }); | ||
| }); | ||
@@ -759,0 +776,0 @@ }); |
@@ -1,2 +0,2 @@ | ||
| !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("bip39"),require("bitcoinjs-lib"),require("blockstack/lib/wallet"),require("blockstack/lib/keys"),require("blockstack/lib/encryption/sha2Hash"),require("zone-file"),require("blockstack/lib/auth/authMessages"),require("jsontokens"),require("blockstack/lib/encryption/cryptoRandom"),require("blockstack"),require("assert"),require("triplesec"),require("blockstack/lib/encryption/wallet"),require("@blockstack/stacks-transactions"),require("bn.js")):"function"==typeof define&&define.amd?define(["exports","bip39","bitcoinjs-lib","blockstack/lib/wallet","blockstack/lib/keys","blockstack/lib/encryption/sha2Hash","zone-file","blockstack/lib/auth/authMessages","jsontokens","blockstack/lib/encryption/cryptoRandom","blockstack","assert","triplesec","blockstack/lib/encryption/wallet","@blockstack/stacks-transactions","bn.js"],r):r((e=e||self)["@blockstack/keychain"]={},e.bip39,e.bitcoinjsLib,e.wallet,e.keys,e.sha2Hash,e.zoneFile,e.authMessages,e.jsontokens,e.cryptoRandom,e.blockstack,e.assert,e.triplesec,e.wallet$1,e.stacksTransactions,e.BN)}(this,(function(e,r,t,n,i,o,s,a,c,u,d,l,f,h,v,y){"use strict";function m(){return(m=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}y=y&&Object.prototype.hasOwnProperty.call(y,"default")?y.default:y;var p=function(){function e(){}return e.prototype.then=function(r,t){var n=new e,i=this.s;if(i){var o=1&i?r:t;if(o){try{g(n,1,o(this.v))}catch(e){g(n,2,e)}return n}return this}return this.o=function(e){try{var i=e.v;1&e.s?g(n,1,r?r(i):i):t?g(n,1,t(i)):g(n,2,i)}catch(e){g(n,2,e)}},n},e}();function g(e,r,t){if(!e.s){if(t instanceof p){if(!t.s)return void(t.o=g.bind(null,e,r));1&r&&(r=t.s),t=t.v}if(t&&t.then)return void t.then(g.bind(null,e,r),g.bind(null,e,2));e.s=r,e.v=t;var n=e.o;n&&n(e)}}function P(e){return e instanceof p&&1&e.s}function b(e,r){try{var t=e()}catch(e){return r(e)}return t&&t.then?t.then(void 0,r):t}"undefined"!=typeof Symbol&&(Symbol.iterator||(Symbol.iterator=Symbol("Symbol.iterator"))),"undefined"!=typeof Symbol&&(Symbol.asyncIterator||(Symbol.asyncIterator=Symbol("Symbol.asyncIterator")));var k,K,S=function(){function e(e,r){this.hdNode=e,this.salt=r}var r=e.prototype;return r.getNode=function(){return this.hdNode},r.getSalt=function(){return this.salt},r.getIdentityKey=function(){if(!this.hdNode.privateKey)throw new Error("Node does not have private key");return this.hdNode.privateKey.toString("hex")},r.getIdentityKeyID=function(){return this.hdNode.publicKey.toString("hex")},r.getAppsNode=function(){return this.hdNode.deriveHardened(0)},r.getAddress=function(){return L(this.hdNode)},r.getEncryptionNode=function(){return this.hdNode.deriveHardened(2)},r.getSigningNode=function(){return this.hdNode.deriveHardened(1)},r.getSTXNode=function(){return this.hdNode.deriveHardened(6)},r.getAppNode=function(e){return n.getLegacyAppNode(this.hdNode,this.salt,e)},r.getAppPrivateKey=function(e){var r=this.getAppNode(e);if(!r.privateKey)throw new Error("App node does not have private key");return r.privateKey.toString("hex")},r.getAppAddress=function(e){var r=this.getAppNode(e);return i.publicKeyToAddress(r.publicKey)},e}(),A=function(e,r,t){try{return Promise.resolve(fetch(t.server+"/store/"+t.address+"/"+e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"bearer "+t.token},body:r,referrer:"no-referrer",referrerPolicy:"no-referrer"})).then((function(e){return Promise.resolve(e.json()).then((function(e){return e.publicURL}))}))}catch(e){return Promise.reject(e)}},N=function(e,r,t,n){try{var i=function(e){return Promise.resolve(A(w,t,e))};return Promise.resolve(n?i(n):Promise.resolve(d.connectToGaiaHub(e,r.keyPair.key)).then(i))}catch(e){return Promise.reject(e)}},C={"@type":"Person","@context":"http://schema.org"},w="profile.json";(K=e.Subdomains||(e.Subdomains={})).TEST="test-personal.id",K.BLOCKSTACK="id.blockstack";var j=((k={})[e.Subdomains.TEST]={registerUrl:"https://test-registrar.blockstack.org/register",apiUrl:"https://test-registrar.blockstack.org/v1/names"},k[e.Subdomains.BLOCKSTACK]={registerUrl:"https://registrar.blockstack.org/register",apiUrl:"https://registrar.blockstack.org/v1/names"},k);function T(e,r){var t=d.signProfileToken(e,r.key,{publicKey:r.keyID}),n=d.wrapProfileToken(t);return JSON.stringify([n],null,2)}var U=function(e){var r=e.profile,t=e.gaiaHubUrl,n=e.identity,i=e.gaiaHubConfig;try{var o=T(r,n.keyPair);return Promise.resolve(N(t,n,o,i)).then((function(){}))}catch(e){return Promise.reject(e)}},I=function(e){var r=e.identity,t=e.gaiaUrl;return Promise.resolve(b((function(){return Promise.resolve(r.profileUrl(t)).then((function(e){return Promise.resolve(fetch(e)).then((function(e){var r=!1;function t(t){if(r)return t;if(404===e.status)return null;throw new Error("Network error when fetching profile")}var n=function(){if(e.ok)return Promise.resolve(e.json()).then((function(e){var t;return r=!0,null===(t=e[0].decodedToken.payload)||void 0===t?void 0:t.claim}))}();return n&&n.then?n.then(t):t(n)}))}))}),(function(){return null})))},x=function(){function e(e){var r=e.address,t=e.usernames,n=e.defaultUsername,i=e.profile;this.keyPair=e.keyPair,this.address=r,this.usernames=t||[],this.defaultUsername=n,this.profile=i}var r=e.prototype;return r.makeAuthResponse=function(e){var r=e.appDomain,n=e.gaiaUrl,o=e.transitPublicKey,s=e.scopes,l=void 0===s?[]:s,f=e.stxAddress;try{var h=this,v=h.appPrivateKey(r);return Promise.resolve(function(e){try{return Promise.resolve(fetch(e+"/hub_info")).then((function(e){return Promise.resolve(e.json())}))}catch(e){return Promise.reject(e)}}(n)).then((function(e){return Promise.resolve(h.profileUrl(e.read_url_prefix)).then((function(s){return Promise.resolve(I({identity:h,gaiaUrl:e.read_url_prefix})).then((function(y){function p(){h.profile=y;var e,r,t,d,l,p=(e=i.getPublicKeyFromPrivate(v.slice(0,64)),r=h.keyPair.key.slice(0,64),t=i.getPublicKeyFromPrivate(r),d=u.randomBytes(16).toString("hex"),l={childToAssociate:e,iss:t,exp:31536e3+(new Date).getTime()/1e3,iat:Date.now()/1e3,salt:d},new c.TokenSigner("ES256K",r).sign(l));return a.makeAuthResponse(h.keyPair.key,m({},h.profile||{},{stxAddress:f}),h.defaultUsername||"",{profileUrl:s},void 0,v,void 0,o,n,void 0,p)}var g=function(){if(l.includes("publish_data")){y.apps||(y.apps={});var o=t.ECPair.fromPrivateKey(Buffer.from(v,"hex")),s=""+e.read_url_prefix+d.ecPairToAddress(o)+"/";y.apps[r]=s,y.appsMeta||(y.appsMeta={}),y.appsMeta[r]={storage:s,publicKey:o.publicKey.toString("hex")};var a=function(e){var r=e.hubInfo,t=e.privateKey,n=e.gaiaHubUrl,o=r.read_url_prefix,s=function(e){var r=e.privateKey,t=e.hubInfo.challenge_text,n={gaiaHubUrl:e.gaiaHubUrl,iss:i.getPublicKeyFromPrivate(r),salt:u.randomBytes(16).toString("hex")};return t&&(n.gaiaChallenge=t),"v1:"+new c.TokenSigner("ES256K",r).sign(n)}({hubInfo:r,privateKey:t,gaiaHubUrl:n});return{url_prefix:o,max_file_upload_size_megabytes:100,address:d.ecPairToAddress(d.hexStringToECPair(t+(64===t.length?"01":""))),token:s,server:n}}({hubInfo:e,privateKey:h.keyPair.key,gaiaHubUrl:n});return Promise.resolve(U({profile:y,identity:h,gaiaHubUrl:n,gaiaHubConfig:a})).then((function(){}))}}();return g&&g.then?g.then(p):p()}))}))}))}catch(e){return Promise.reject(e)}},r.appPrivateKey=function(e){var r=this.keyPair,n=r.salt;return new S(t.bip32.fromBase58(r.appsNodeKey),n).getAppPrivateKey(e)},r.profileUrl=function(e){try{var r=!1,t=this,n=function(){if(t.defaultUsername)return b((function(){return Promise.resolve(G(t.defaultUsername)).then((function(e){if(e)return r=!0,e}))}),(function(e){console.warn("Error fetching profile URL from zone file:",e)}))}();return Promise.resolve(n&&n.then?n.then((function(n){return r?n:""+e+t.address+"/profile.json"})):r?n:""+e+t.address+"/profile.json")}catch(e){return Promise.reject(e)}},r.fetchNames=function(){try{return Promise.resolve(fetch("https://core.blockstack.org/v1/addresses/bitcoin/"+this.address)).then((function(e){return Promise.resolve(e.json()).then((function(e){return e.names}))}))}catch(e){return Promise.reject(e)}},r.refresh=function(e){var r=this;return void 0===e&&(e={gaiaUrl:"https://gaia.blockstack.org/hub/"}),Promise.resolve(b((function(){return Promise.resolve(r.fetchNames()).then((function(t){return t&&(t[0]&&!r.defaultUsername&&(r.defaultUsername=t[0]),t.forEach((function(e){-1===r.usernames.findIndex((function(r){return r===e}))&&r.usernames.push(e)}))),Promise.resolve(I({identity:r,gaiaUrl:e.gaiaUrl})).then((function(e){e&&(r.profile=e)}))}))}),(function(){})))},e}(),E=function(e,r){try{var t=function(){return{identityPublicKeychain:o,bitcoinPublicKeychain:a,firstBitcoinAddress:c,identityAddresses:u,identityKeypairs:d,identities:l}},n=M(e),i=B(e),o=n.neutered().toBase58(),s=i.neutered(),a=s.toBase58(),c=L(H(s)),u=[],d=[],l=[],f=0,h=function(e,r,t){for(var n;;){var i=e();if(P(i)&&(i=i.v),!i)return o;if(i.then){n=0;break}var o=t();if(o&&o.then){if(!P(o)){n=1;break}o=o.s}if(r){var s=r();if(s&&s.then&&!P(s)){n=2;break}}}var a=new p,c=g.bind(null,a,2);return(0===n?i.then(d):1===n?o.then(u):s.then(l)).then(void 0,c),a;function u(n){o=n;do{if(r&&(s=r())&&s.then&&!P(s))return void s.then(l).then(void 0,c);if(!(i=e())||P(i)&&!i.v)return void g(a,1,o);if(i.then)return void i.then(d).then(void 0,c);P(o=t())&&(o=o.v)}while(!o||!o.then);o.then(u).then(void 0,c)}function d(e){e?(o=t())&&o.then?o.then(u).then(void 0,c):u(o):g(a,1,o)}function l(){(i=e())?i.then?i.then(d).then(void 0,c):d(i):g(a,1,o)}}((function(){return f<r}),(function(){return f++}),(function(){return Promise.resolve(D(e,f)).then((function(e){l.push(e),d.push(e.keyPair),u.push(e.address)}))}));return Promise.resolve(h&&h.then?h.then(t):t())}catch(e){return Promise.reject(e)}},_=function(e,r){void 0===r&&(r=0);try{if(e.isNeutered())throw new Error("You need the private key to generate identity addresses");var t=Buffer.from(e.publicKey.toString("hex"));return Promise.resolve(o.createSha2Hash()).then((function(n){return Promise.resolve(n.digest(t,"sha256")).then((function(t){var n=t.toString("hex");return new S(e.deriveHardened(r),n)}))}))}catch(e){return Promise.reject(e)}};function M(e){return e.deriveHardened(888).deriveHardened(0)}function B(e){return e.deriveHardened(44).deriveHardened(0).deriveHardened(0)}function H(e,r,t){void 0===r&&(r=0),void 0===t&&(t="EXTERNAL_ADDRESS");var n=null;if("EXTERNAL_ADDRESS"===t)n=0;else{if("CHANGE_ADDRESS"!==t)throw new Error("Invalid chain type");n=1}return e.derive(n).derive(r)}function L(e){return i.publicKeyToAddress(e.publicKey)}function R(e){var r=e.getAddress(),t=e.getIdentityKey(),n=e.getIdentityKeyID(),i=e.getAppsNode(),o=e.getSTXNode();return{key:t,keyID:n,address:r,appsNodeKey:i.toBase58(),stxNodeKey:o.toBase58(),salt:e.getSalt()}}var F,D=function(e,r){try{var t=M(e);return Promise.resolve(_(t,r)).then((function(e){var r=R(e);return new x({keyPair:r,address:r.address,usernames:[]})}))}catch(e){return Promise.reject(e)}};function O(e){if(!e)throw new l.AssertionError({expected:!0,actual:e})}(F=e.IdentityNameValidityError||(e.IdentityNameValidityError={})).MINIMUM_LENGTH="error_minimum_length",F.MAXIMUM_LENGTH="error_maximum_length",F.ILLEGAL_CHARACTER="error_illegal_character",F.UNAVAILABLE="error_name_unavailable";var q,X=function(r){var t=r.length;return t<8?e.IdentityNameValidityError.MINIMUM_LENGTH:t>37?e.IdentityNameValidityError.MAXIMUM_LENGTH:/^[a-z0-9_]+$/.test(r)?null:e.IdentityNameValidityError.ILLEGAL_CHARACTER},z=function(r,t){try{void 0===t&&(t=e.Subdomains.BLOCKSTACK);var n=j[t].apiUrl+"/"+r.toLowerCase()+"."+t;return Promise.resolve(fetch(n)).then((function(e){return Promise.resolve(e.json())}))}catch(e){return Promise.reject(e)}},V=function e(r){var t=r.rootNode,n=r.index,i=void 0===n?1:n,o=r.identities,s=void 0===o?[]:o;try{return Promise.resolve(D(t,i)).then((function(r){return Promise.resolve(r.refresh()).then((function(){return r.defaultUsername?(s.push(r),e({rootNode:t,index:i+1,identities:s})):s}))}))}catch(e){return Promise.reject(e)}},G=function(e){try{return Promise.resolve(fetch("https://core.blockstack.org/v1/names/"+e)).then((function(e){return function(){if(e.ok)return Promise.resolve(e.json()).then((function(e){return s.parseZoneFile(e.zonefile).uri[0].target}))}()}))}catch(e){return Promise.reject(e)}},W=function(e,r){try{return Promise.resolve(h.decryptMnemonic(e,r,f.decrypt))}catch(e){return Promise.reject(e)}},J=function(e,r){try{return Promise.resolve(h.encryptMnemonic(e,r))}catch(e){return Promise.reject(e)}},Z=function(e,r){try{return Promise.resolve(d.encryptMnemonic(e,r)).then((function(e){var r=e.toString("hex");return{encryptedMnemonic:e,encryptedMnemonicHex:r}}))}catch(e){return Promise.reject(e)}},$=function(e){try{return Promise.resolve(r.mnemonicToSeed(e)).then((function(e){return t.bip32.fromSeed(e)}))}catch(e){return Promise.reject(e)}},Y=function(e,n){try{var i=r.generateMnemonic(n,u.randomBytes);return Promise.resolve(r.mnemonicToSeed(i)).then((function(r){var n=t.bip32.fromSeed(r);return Promise.resolve(J(i,e)).then((function(e){var r=e.toString("hex");return{rootNode:n,encryptedMnemonicPhrase:r}}))}))}catch(e){return Promise.reject(e)}},Q=((q={})[v.ChainID.Mainnet]="m/44'/5757'/0'/0/0",q[v.ChainID.Testnet]="m/44'/5757'/0'/0/0",q);function ee(e){return Q[e]}function re(e){return function(r){var n=r.derivePath(ee(e));if(!n.privateKey)throw new Error("Unable to derive private key from `rootNode`, bip32 master keychain");var i=t.ECPair.fromPrivateKey(n.privateKey),o=d.ecPairToHexString(i);return{childKey:n,address:v.getAddressFromPrivateKey(o,e===v.ChainID.Mainnet?v.TransactionVersion.Mainnet:v.TransactionVersion.Testnet),privateKey:o}}}var te=function(){function e(e){this.privateKey=e.privateKey}var r=e.prototype;return r.getSTXAddress=function(e){return v.getAddressFromPrivateKey(this.getSTXPrivateKey(),e)},r.getSTXPrivateKey=function(){var e=t.bip32.fromBase58(this.privateKey);return O(e.privateKey),e.privateKey},r.getNetwork=function(){var e=new v.StacksTestnet;return e.coreApiUrl="https://sidecar.staging.blockstack.xyz",e},r.fetchAccount=function(e){var r=e.version,t=e.rpcClient;try{var n=this.getSTXAddress(r);return Promise.resolve(t.fetchAccount(n))}catch(e){return Promise.reject(e)}},r.signContractCall=function(e){var r=e.contractName,t=e.contractAddress,n=e.functionName,i=e.functionArgs,o=e.nonce,s=e.postConditionMode,a=e.postConditions;try{return Promise.resolve(v.makeContractCall({contractAddress:t,contractName:r,functionName:n,functionArgs:i,senderKey:this.getSTXPrivateKey().toString("hex"),nonce:new y(o),network:this.getNetwork(),postConditionMode:s,postConditions:a}))}catch(e){return Promise.reject(e)}},r.signContractDeploy=function(e){var r=e.contractName,t=e.codeBody,n=e.nonce,i=e.postConditionMode,o=e.postConditions;try{return Promise.resolve(v.makeContractDeploy({contractName:r,codeBody:t,senderKey:this.getSTXPrivateKey().toString("hex"),network:this.getNetwork(),nonce:new y(n),postConditionMode:i,postConditions:o}))}catch(e){return Promise.reject(e)}},r.signSTXTransfer=function(e){var r=e.recipient,t=e.amount,n=e.memo,i=e.nonce,o=e.postConditionMode,s=e.postConditions;try{return Promise.resolve(v.makeSTXTokenTransfer({recipient:r,amount:new y(t),memo:n,senderKey:this.getSTXPrivateKey().toString("hex"),network:this.getNetwork(),nonce:new y(i),postConditionMode:o,postConditions:s}))}catch(e){return Promise.reject(e)}},e}(),ne=function(){function e(e){var r=e.encryptedBackupPhrase,t=e.identityPublicKeychain,n=e.bitcoinPublicKeychain,i=e.firstBitcoinAddress,o=e.identityKeypairs,s=e.identityAddresses,a=e.identities,c=e.configPrivateKey,u=e.stacksPrivateKey,d=e.walletConfig;this.chain=e.chain,this.encryptedBackupPhrase=r,this.identityPublicKeychain=t,this.bitcoinPublicKeychain=n,this.firstBitcoinAddress=i,this.identityKeypairs=o,this.identityAddresses=s,this.identities=a.map((function(e){return new x(e)})),this.configPrivateKey=c,this.stacksPrivateKey=u,this.walletConfig=d}e.generateFactory=function(e){var r=this;return function(t,n){try{return Promise.resolve(Y(t,e)).then((function(e){return r.createAccount({encryptedBackupPhrase:e.encryptedMnemonicPhrase,rootNode:e.rootNode,chain:n})}))}catch(e){return Promise.reject(e)}}},e.generate=function(e,r){try{return Promise.resolve(this.generateFactory(128)(e,r))}catch(e){return Promise.reject(e)}},e.generateStrong=function(e,r){try{return Promise.resolve(this.generateFactory(256)(e,r))}catch(e){return Promise.reject(e)}},e.restore=function(r,t,n){try{return Promise.resolve($(t)).then((function(i){return Promise.resolve(Z(t,r)).then((function(r){return Promise.resolve(e.createAccount({encryptedBackupPhrase:r.encryptedMnemonicHex,rootNode:i,chain:n})).then((function(e){return Promise.resolve(e.restoreIdentities({rootNode:i,gaiaReadURL:"https://gaia.blockstack.org/hub/"}))}))}))}))}catch(e){return Promise.reject(e)}},e.createAccount=function(r){var t=r.encryptedBackupPhrase,n=r.rootNode,i=r.chain,o=r.identitiesToGenerate,s=void 0===o?1:o;try{var a=n.deriveHardened(45).privateKey;if(!a)throw new TypeError("Unable to derive config key for wallet identities");var c=a.toString("hex"),u=re(i)(n).childKey;return Promise.resolve(E(n,s)).then((function(r){return new e(m({},r,{chain:i,configPrivateKey:c,stacksPrivateKey:u.toBase58(),encryptedBackupPhrase:t}))}))}catch(e){return Promise.reject(e)}};var n=e.prototype;return n.restoreIdentities=function(e){var r,t,n=e.rootNode,i=e.gaiaReadURL;try{var o=this,s={url_prefix:(r={readURL:i,privateKey:o.configPrivateKey}).readURL,max_file_upload_size_megabytes:100,address:d.ecPairToAddress(d.hexStringToECPair((t=r.privateKey)+(64===t.length?"01":""))),token:"not_used",server:"not_used"};return Promise.resolve(o.fetchConfig(s)).then((function(){var e=!1;function r(r){return e?r:Promise.resolve(o.identities[0].refresh()).then((function(){return Promise.resolve(V({rootNode:n})).then((function(e){return o.identities=o.identities.concat(e),o}))}))}var t=function(){if(o.walletConfig){var r=o.walletConfig.identities.map((function(e,r){try{var t=function(){return e.username&&(i.usernames=[e.username],i.defaultUsername=e.username),i},i=o.identities[r],s=function(){if(!i)return Promise.resolve(D(n,r)).then((function(e){i=e}))}();return Promise.resolve(s&&s.then?s.then(t):t())}catch(e){return Promise.reject(e)}}));return Promise.resolve(Promise.all(r)).then((function(r){return o.identities=r,e=!0,o}))}}();return t&&t.then?t.then(r):r(t)}))}catch(e){return Promise.reject(e)}},n.createNewIdentity=function(e){try{var n=this;return Promise.resolve(W(Buffer.from(n.encryptedBackupPhrase,"hex"),e)).then((function(e){return Promise.resolve(r.mnemonicToSeed(e)).then((function(e){var r=t.bip32.fromSeed(e);return Promise.resolve(D(r,n.identities.length)).then((function(e){return n.identities.push(e),n.identityKeypairs.push(e.keyPair),n.identityAddresses.push(e.address),e}))}))}))}catch(e){return Promise.reject(e)}},n.createGaiaConfig=function(e){try{return Promise.resolve(d.connectToGaiaHub(e,this.configPrivateKey))}catch(e){return Promise.reject(e)}},n.fetchConfig=function(e){var r=this;return Promise.resolve(b((function(){return Promise.resolve(fetch(""+e.url_prefix+e.address+"/wallet-config.json")).then((function(e){return Promise.resolve(e.text()).then((function(e){return Promise.resolve(d.decryptContent(e,{privateKey:r.configPrivateKey})).then((function(e){var t=JSON.parse(e);return r.walletConfig=t,t}))}))}))}),(function(){return null})))},n.getOrCreateConfig=function(e){var r=e.gaiaConfig,t=e.skipUpload;try{var n=this;return n.walletConfig?Promise.resolve(n.walletConfig):Promise.resolve(n.fetchConfig(r)).then((function(e){if(e)return e;var i={identities:n.identities.map((function(e){return{username:e.defaultUsername,address:e.address,apps:{}}}))};n.walletConfig=i;var o=function(){if(!t)return Promise.resolve(n.updateConfig(r)).then((function(){}))}();return o&&o.then?o.then((function(){return i})):i}))}catch(e){return Promise.reject(e)}},n.updateConfig=function(e){try{var r=d.getPublicKeyFromPrivate(this.configPrivateKey);return Promise.resolve(d.encryptContent(JSON.stringify(this.walletConfig),{publicKey:r})).then((function(r){return Promise.resolve(A("wallet-config.json",r,e)).then((function(){}))}))}catch(e){return Promise.reject(e)}},n.updateConfigWithAuth=function(e){var r=e.identityIndex,t=e.app,n=e.gaiaConfig;try{var i=this,o=i.walletConfig;O(o),i.identities.forEach((function(e,r){var t,n=o.identities[r];n?(n.apps=n.apps||{},n.username=e.defaultUsername,n.address=e.address,o.identities[r]=n):null===(t=i.walletConfig)||void 0===t||t.identities.push({username:e.defaultUsername,address:e.address,apps:{}})}));var s=o.identities[r];return s.apps=s.apps||{},s.apps[t.origin]=t,o.identities[r]=s,i.walletConfig=o,Promise.resolve(i.updateConfig(n)).then((function(){}))}catch(e){return Promise.reject(e)}},n.updateConfigForReuseWarning=function(e){var r=e.gaiaConfig;try{return O(this.walletConfig),this.walletConfig.hideWarningForReusingIdentity=!0,Promise.resolve(this.updateConfig(r)).then((function(){}))}catch(e){return Promise.reject(e)}},n.getSigner=function(){return new te({privateKey:this.stacksPrivateKey})},e}(),ie={Wallet:ne};e.DEFAULT_PROFILE=C,e.Identity=x,e.Wallet=ne,e.WalletSigner=te,e.assertIsTruthy=O,e.decrypt=W,e.default=ie,e.derivationPaths=Q,e.deriveIdentityKeyPair=R,e.deriveRootKeychainFromMnemonic=$,e.deriveStxAddressChain=re,e.encrypt=J,e.encryptMnemonicFormatted=Z,e.fetchProfile=I,e.generateEncryptedMnemonicRootKeychain=Y,e.generateMnemonicRootKeychain=function(e){try{var n=r.generateMnemonic(e,u.randomBytes);return Promise.resolve(r.mnemonicToSeed(n)).then((function(e){return{rootNode:t.bip32.fromSeed(e),plaintextMnemonic:n}}))}catch(e){return Promise.reject(e)}},e.getAddress=L,e.getBitcoinAddressNode=H,e.getBitcoinPrivateKeychain=B,e.getBlockchainIdentities=E,e.getDerivationPath=ee,e.getIdentityOwnerAddressNode=_,e.getIdentityPrivateKeychain=M,e.getProfileURLFromZoneFile=G,e.makeIdentity=D,e.recursiveRestoreIdentities=V,e.registerSubdomain=function(e){var r=e.identity,t=e.gaiaHubUrl,n=e.username,i=e.subdomain;try{var o=T(r.profile||C,r.keyPair);return Promise.resolve(N(t,r,o)).then((function(e){var t=n+"."+i,o=d.makeProfileZoneFile(t,e);return Promise.resolve(function(e){var r=e.username,t=e.subdomain,n=e.zoneFile,i=e.identity;try{var o=j[t].registerUrl,s=JSON.stringify({name:r,owner_address:i.address,zonefile:n});return Promise.resolve(fetch(o,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:s})).then((function(e){return e.ok?e.json():Promise.reject({error:"Failed to register username",status:e.status})}))}catch(e){return Promise.reject(e)}}({username:n,subdomain:i,zoneFile:o,identity:r})).then((function(){return r.defaultUsername=t,r.usernames.push(t),r}))}))}catch(e){return Promise.reject(e)}},e.registrars=j,e.signAndUploadProfile=U,e.signProfileForUpload=T,e.uploadProfile=N,e.validateSubdomain=function(r,t){try{var n=!1;void 0===t&&(t=e.Subdomains.BLOCKSTACK);var i=X(r);if(i)return Promise.resolve(i);var o=b((function(){return Promise.resolve(z(r,t)).then((function(r){if("available"!==r.status)return n=!0,e.IdentityNameValidityError.UNAVAILABLE}))}),(function(){return n=!0,e.IdentityNameValidityError.UNAVAILABLE}));return Promise.resolve(o&&o.then?o.then((function(e){return n?e:null})):n?o:null)}catch(e){return Promise.reject(e)}},e.validateSubdomainAvailability=z,e.validateSubdomainFormat=X})); | ||
| !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("bip39"),require("bitcoinjs-lib"),require("blockstack/lib/wallet"),require("blockstack/lib/keys"),require("blockstack/lib/encryption/sha2Hash"),require("zone-file"),require("blockstack/lib/auth/authMessages"),require("jsontokens"),require("blockstack/lib/encryption/cryptoRandom"),require("blockstack"),require("assert"),require("triplesec"),require("blockstack/lib/encryption/wallet"),require("@blockstack/stacks-transactions"),require("bn.js")):"function"==typeof define&&define.amd?define(["exports","bip39","bitcoinjs-lib","blockstack/lib/wallet","blockstack/lib/keys","blockstack/lib/encryption/sha2Hash","zone-file","blockstack/lib/auth/authMessages","jsontokens","blockstack/lib/encryption/cryptoRandom","blockstack","assert","triplesec","blockstack/lib/encryption/wallet","@blockstack/stacks-transactions","bn.js"],r):r((e=e||self)["@blockstack/keychain"]={},e.bip39,e.bitcoinjsLib,e.wallet,e.keys,e.sha2Hash,e.zoneFile,e.authMessages,e.jsontokens,e.cryptoRandom,e.blockstack,e.assert,e.triplesec,e.wallet$1,e.stacksTransactions,e.BN)}(this,(function(e,r,t,n,i,o,s,a,c,u,d,l,f,h,v,y){"use strict";function m(){return(m=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}y=y&&Object.prototype.hasOwnProperty.call(y,"default")?y.default:y;var p=function(){function e(){}return e.prototype.then=function(r,t){var n=new e,i=this.s;if(i){var o=1&i?r:t;if(o){try{P(n,1,o(this.v))}catch(e){P(n,2,e)}return n}return this}return this.o=function(e){try{var i=e.v;1&e.s?P(n,1,r?r(i):i):t?P(n,1,t(i)):P(n,2,i)}catch(e){P(n,2,e)}},n},e}();function P(e,r,t){if(!e.s){if(t instanceof p){if(!t.s)return void(t.o=P.bind(null,e,r));1&r&&(r=t.s),t=t.v}if(t&&t.then)return void t.then(P.bind(null,e,r),P.bind(null,e,2));e.s=r,e.v=t;var n=e.o;n&&n(e)}}function g(e){return e instanceof p&&1&e.s}function b(e,r){try{var t=e()}catch(e){return r(e)}return t&&t.then?t.then(void 0,r):t}"undefined"!=typeof Symbol&&(Symbol.iterator||(Symbol.iterator=Symbol("Symbol.iterator"))),"undefined"!=typeof Symbol&&(Symbol.asyncIterator||(Symbol.asyncIterator=Symbol("Symbol.asyncIterator")));var k,K,S=function(){function e(e,r){this.hdNode=e,this.salt=r}var r=e.prototype;return r.getNode=function(){return this.hdNode},r.getSalt=function(){return this.salt},r.getIdentityKey=function(){if(!this.hdNode.privateKey)throw new Error("Node does not have private key");return this.hdNode.privateKey.toString("hex")},r.getIdentityKeyID=function(){return this.hdNode.publicKey.toString("hex")},r.getAppsNode=function(){return this.hdNode.deriveHardened(0)},r.getAddress=function(){return B(this.hdNode)},r.getEncryptionNode=function(){return this.hdNode.deriveHardened(2)},r.getSigningNode=function(){return this.hdNode.deriveHardened(1)},r.getSTXNode=function(){return this.hdNode.deriveHardened(6)},r.getAppNode=function(e){return n.getLegacyAppNode(this.hdNode,this.salt,e)},r.getAppPrivateKey=function(e){var r=this.getAppNode(e);if(!r.privateKey)throw new Error("App node does not have private key");return r.privateKey.toString("hex")},r.getAppAddress=function(e){var r=this.getAppNode(e);return i.publicKeyToAddress(r.publicKey)},e}(),A=function(e,r,t){try{return Promise.resolve(fetch(t.server+"/store/"+t.address+"/"+e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"bearer "+t.token},body:r,referrer:"no-referrer",referrerPolicy:"no-referrer"})).then((function(e){return Promise.resolve(e.json()).then((function(e){return e.publicURL}))}))}catch(e){return Promise.reject(e)}},C=function(e){var r=e.gaiaHubUrl,t=e.filePath,n=e.identity,i=e.signedProfileTokenData,o=e.gaiaHubConfig;try{var s=function(e){return Promise.resolve(A(t,i,e))};return Promise.resolve(o?s(o):Promise.resolve(d.connectToGaiaHub(r,n.keyPair.key)).then(s))}catch(e){return Promise.reject(e)}},N={"@type":"Person","@context":"http://schema.org"};(K=e.Subdomains||(e.Subdomains={})).TEST="test-personal.id",K.BLOCKSTACK="id.blockstack";var w=((k={})[e.Subdomains.TEST]={registerUrl:"https://test-registrar.blockstack.org/register",apiUrl:"https://test-registrar.blockstack.org/v1/names"},k[e.Subdomains.BLOCKSTACK]={registerUrl:"https://registrar.blockstack.org/register",apiUrl:"https://registrar.blockstack.org/v1/names"},k);function T(e,r){var t=d.signProfileToken(e,r.key,{publicKey:r.keyID}),n=d.wrapProfileToken(t);return JSON.stringify([n],null,2)}var j=function(e){var r=e.profile,t=e.gaiaHubUrl,n=e.filePath,i=e.identity,o=e.gaiaHubConfig;try{var s=T(r,i.keyPair);return Promise.resolve(C({gaiaHubUrl:t,filePath:n,identity:i,signedProfileTokenData:s,gaiaHubConfig:o})).then((function(){}))}catch(e){return Promise.reject(e)}},U=function(e){var r=e.profileUrl;return Promise.resolve(b((function(){return Promise.resolve(fetch(r)).then((function(e){var r=!1;function t(t){if(r)return t;if(404===e.status)return null;throw new Error("Network error when fetching profile")}var n=function(){if(e.ok)return Promise.resolve(e.json()).then((function(e){var t;return r=!0,null===(t=e[0].decodedToken.payload)||void 0===t?void 0:t.claim}))}();return n&&n.then?n.then(t):t(n)}))}),(function(){return null})))},I=function(){function e(e){var r=e.address,t=e.usernames,n=e.defaultUsername,i=e.profile;this.keyPair=e.keyPair,this.address=r,this.usernames=t||[],this.defaultUsername=n,this.profile=i}var r=e.prototype;return r.makeAuthResponse=function(e){var r=e.appDomain,n=e.gaiaUrl,o=e.transitPublicKey,s=e.scopes,l=void 0===s?[]:s,f=e.stxAddress;try{var h=this,v=h.appPrivateKey(r);return Promise.resolve(function(e){try{return Promise.resolve(fetch(e+"/hub_info")).then((function(e){return Promise.resolve(e.json())}))}catch(e){return Promise.reject(e)}}(n)).then((function(e){return Promise.resolve(h.profileUrl(e.read_url_prefix)).then((function(s){return Promise.resolve(U({profileUrl:s})).then((function(y){function p(){h.profile=y;var e,r,t,d,l,p=(e=i.getPublicKeyFromPrivate(v.slice(0,64)),r=h.keyPair.key.slice(0,64),t=i.getPublicKeyFromPrivate(r),d=u.randomBytes(16).toString("hex"),l={childToAssociate:e,iss:t,exp:31536e3+(new Date).getTime()/1e3,iat:Date.now()/1e3,salt:d},new c.TokenSigner("ES256K",r).sign(l));return a.makeAuthResponse(h.keyPair.key,m({},h.profile||{},{stxAddress:f}),h.defaultUsername||"",{profileUrl:s},void 0,v,void 0,o,n,void 0,p)}var P=function(){if(l.includes("publish_data")){y.apps||(y.apps={});var o=t.ECPair.fromPrivateKey(Buffer.from(v,"hex")),a=""+e.read_url_prefix+d.ecPairToAddress(o)+"/";y.apps[r]=a,y.appsMeta||(y.appsMeta={}),y.appsMeta[r]={storage:a,publicKey:o.publicKey.toString("hex")};var f=function(e){var r=e.hubInfo,t=e.privateKey,n=e.gaiaHubUrl,o=r.read_url_prefix,s=function(e){var r=e.privateKey,t=e.hubInfo.challenge_text,n={gaiaHubUrl:e.gaiaHubUrl,iss:i.getPublicKeyFromPrivate(r),salt:u.randomBytes(16).toString("hex")};return t&&(n.gaiaChallenge=t),"v1:"+new c.TokenSigner("ES256K",r).sign(n)}({hubInfo:r,privateKey:t,gaiaHubUrl:n});return{url_prefix:o,max_file_upload_size_megabytes:100,address:d.ecPairToAddress(d.hexStringToECPair(t+(64===t.length?"01":""))),token:s,server:n}}({hubInfo:e,privateKey:h.keyPair.key,gaiaHubUrl:n}),m=new URL(s).pathname.substr(1);return Promise.resolve(j({profile:y,identity:h,gaiaHubUrl:n,filePath:m,gaiaHubConfig:f})).then((function(){}))}}();return P&&P.then?P.then(p):p()}))}))}))}catch(e){return Promise.reject(e)}},r.appPrivateKey=function(e){var r=this.keyPair,n=r.salt;return new S(t.bip32.fromBase58(r.appsNodeKey),n).getAppPrivateKey(e)},r.profileUrl=function(e){try{var r=!1,t=this,n=function(){if(t.defaultUsername)return b((function(){return Promise.resolve(V(t.defaultUsername)).then((function(e){if(e)return r=!0,e}))}),(function(e){console.warn("Error fetching profile URL from zone file:",e)}))}();return Promise.resolve(n&&n.then?n.then((function(n){return r?n:""+e+t.address+"/profile.json"})):r?n:""+e+t.address+"/profile.json")}catch(e){return Promise.reject(e)}},r.fetchNames=function(){try{return Promise.resolve(fetch("https://core.blockstack.org/v1/addresses/bitcoin/"+this.address)).then((function(e){return Promise.resolve(e.json()).then((function(e){return e.names}))}))}catch(e){return Promise.reject(e)}},r.refresh=function(e){var r=this;return void 0===e&&(e={gaiaUrl:"https://gaia.blockstack.org/hub/"}),Promise.resolve(b((function(){return Promise.resolve(r.fetchNames()).then((function(t){return t&&(t[0]&&!r.defaultUsername&&(r.defaultUsername=t[0]),t.forEach((function(e){-1===r.usernames.findIndex((function(r){return r===e}))&&r.usernames.push(e)}))),Promise.resolve(r.profileUrl(e.gaiaUrl)).then((function(e){return Promise.resolve(U({profileUrl:e})).then((function(e){e&&(r.profile=e)}))}))}))}),(function(){})))},e}(),E=function(e,r){try{var t=function(){return{identityPublicKeychain:o,bitcoinPublicKeychain:a,firstBitcoinAddress:c,identityAddresses:u,identityKeypairs:d,identities:l}},n=H(e),i=M(e),o=n.neutered().toBase58(),s=i.neutered(),a=s.toBase58(),c=B(_(s)),u=[],d=[],l=[],f=0,h=function(e,r,t){for(var n;;){var i=e();if(g(i)&&(i=i.v),!i)return o;if(i.then){n=0;break}var o=t();if(o&&o.then){if(!g(o)){n=1;break}o=o.s}if(r){var s=r();if(s&&s.then&&!g(s)){n=2;break}}}var a=new p,c=P.bind(null,a,2);return(0===n?i.then(d):1===n?o.then(u):s.then(l)).then(void 0,c),a;function u(n){o=n;do{if(r&&(s=r())&&s.then&&!g(s))return void s.then(l).then(void 0,c);if(!(i=e())||g(i)&&!i.v)return void P(a,1,o);if(i.then)return void i.then(d).then(void 0,c);g(o=t())&&(o=o.v)}while(!o||!o.then);o.then(u).then(void 0,c)}function d(e){e?(o=t())&&o.then?o.then(u).then(void 0,c):u(o):P(a,1,o)}function l(){(i=e())?i.then?i.then(d).then(void 0,c):d(i):P(a,1,o)}}((function(){return f<r}),(function(){return f++}),(function(){return Promise.resolve(F(e,f)).then((function(e){l.push(e),d.push(e.keyPair),u.push(e.address)}))}));return Promise.resolve(h&&h.then?h.then(t):t())}catch(e){return Promise.reject(e)}},x=function(e,r){void 0===r&&(r=0);try{if(e.isNeutered())throw new Error("You need the private key to generate identity addresses");var t=Buffer.from(e.publicKey.toString("hex"));return Promise.resolve(o.createSha2Hash()).then((function(n){return Promise.resolve(n.digest(t,"sha256")).then((function(t){var n=t.toString("hex");return new S(e.deriveHardened(r),n)}))}))}catch(e){return Promise.reject(e)}};function H(e){return e.deriveHardened(888).deriveHardened(0)}function M(e){return e.deriveHardened(44).deriveHardened(0).deriveHardened(0)}function _(e,r,t){void 0===r&&(r=0),void 0===t&&(t="EXTERNAL_ADDRESS");var n=null;if("EXTERNAL_ADDRESS"===t)n=0;else{if("CHANGE_ADDRESS"!==t)throw new Error("Invalid chain type");n=1}return e.derive(n).derive(r)}function B(e){return i.publicKeyToAddress(e.publicKey)}function L(e){var r=e.getAddress(),t=e.getIdentityKey(),n=e.getIdentityKeyID(),i=e.getAppsNode(),o=e.getSTXNode();return{key:t,keyID:n,address:r,appsNodeKey:i.toBase58(),stxNodeKey:o.toBase58(),salt:e.getSalt()}}var R,F=function(e,r){try{var t=H(e);return Promise.resolve(x(t,r)).then((function(e){var r=L(e);return new I({keyPair:r,address:r.address,usernames:[]})}))}catch(e){return Promise.reject(e)}};function D(e){if(!e)throw new l.AssertionError({expected:!0,actual:e})}(R=e.IdentityNameValidityError||(e.IdentityNameValidityError={})).MINIMUM_LENGTH="error_minimum_length",R.MAXIMUM_LENGTH="error_maximum_length",R.ILLEGAL_CHARACTER="error_illegal_character",R.UNAVAILABLE="error_name_unavailable";var O,q=function(r){var t=r.length;return t<8?e.IdentityNameValidityError.MINIMUM_LENGTH:t>37?e.IdentityNameValidityError.MAXIMUM_LENGTH:/^[a-z0-9_]+$/.test(r)?null:e.IdentityNameValidityError.ILLEGAL_CHARACTER},X=function(r,t){try{void 0===t&&(t=e.Subdomains.BLOCKSTACK);var n=w[t].apiUrl+"/"+r.toLowerCase()+"."+t;return Promise.resolve(fetch(n)).then((function(e){return Promise.resolve(e.json())}))}catch(e){return Promise.reject(e)}},z=function e(r){var t=r.rootNode,n=r.index,i=void 0===n?1:n,o=r.identities,s=void 0===o?[]:o;try{return Promise.resolve(F(t,i)).then((function(r){return Promise.resolve(r.refresh()).then((function(){return r.defaultUsername?(s.push(r),e({rootNode:t,index:i+1,identities:s})):s}))}))}catch(e){return Promise.reject(e)}},V=function(e){try{return Promise.resolve(fetch("https://core.blockstack.org/v1/names/"+e)).then((function(e){return function(){if(e.ok)return Promise.resolve(e.json()).then((function(e){return s.parseZoneFile(e.zonefile).uri[0].target}))}()}))}catch(e){return Promise.reject(e)}},G=function(e,r){try{return Promise.resolve(h.decryptMnemonic(e,r,f.decrypt))}catch(e){return Promise.reject(e)}},W=function(e,r){try{return Promise.resolve(h.encryptMnemonic(e,r))}catch(e){return Promise.reject(e)}},J=function(e,r){try{return Promise.resolve(d.encryptMnemonic(e,r)).then((function(e){var r=e.toString("hex");return{encryptedMnemonic:e,encryptedMnemonicHex:r}}))}catch(e){return Promise.reject(e)}},Z=function(e){try{return Promise.resolve(r.mnemonicToSeed(e)).then((function(e){return t.bip32.fromSeed(e)}))}catch(e){return Promise.reject(e)}},$=function(e,n){try{var i=r.generateMnemonic(n,u.randomBytes);return Promise.resolve(r.mnemonicToSeed(i)).then((function(r){var n=t.bip32.fromSeed(r);return Promise.resolve(W(i,e)).then((function(e){var r=e.toString("hex");return{rootNode:n,encryptedMnemonicPhrase:r}}))}))}catch(e){return Promise.reject(e)}},Y=((O={})[v.ChainID.Mainnet]="m/44'/5757'/0'/0/0",O[v.ChainID.Testnet]="m/44'/5757'/0'/0/0",O);function Q(e){return Y[e]}function ee(e){return function(r){var n=r.derivePath(Q(e));if(!n.privateKey)throw new Error("Unable to derive private key from `rootNode`, bip32 master keychain");var i=t.ECPair.fromPrivateKey(n.privateKey),o=d.ecPairToHexString(i);return{childKey:n,address:v.getAddressFromPrivateKey(o,e===v.ChainID.Mainnet?v.TransactionVersion.Mainnet:v.TransactionVersion.Testnet),privateKey:o}}}var re=function(){function e(e){this.privateKey=e.privateKey}var r=e.prototype;return r.getSTXAddress=function(e){return v.getAddressFromPrivateKey(this.getSTXPrivateKey(),e)},r.getSTXPrivateKey=function(){var e=t.bip32.fromBase58(this.privateKey);return D(e.privateKey),e.privateKey},r.getNetwork=function(){var e=new v.StacksTestnet;return e.coreApiUrl="https://sidecar.staging.blockstack.xyz",e},r.fetchAccount=function(e){var r=e.version,t=e.rpcClient;try{var n=this.getSTXAddress(r);return Promise.resolve(t.fetchAccount(n))}catch(e){return Promise.reject(e)}},r.signContractCall=function(e){var r=e.contractName,t=e.contractAddress,n=e.functionName,i=e.functionArgs,o=e.nonce,s=e.postConditionMode,a=e.postConditions;try{return Promise.resolve(v.makeContractCall({contractAddress:t,contractName:r,functionName:n,functionArgs:i,senderKey:this.getSTXPrivateKey().toString("hex"),nonce:new y(o),network:this.getNetwork(),postConditionMode:s,postConditions:a}))}catch(e){return Promise.reject(e)}},r.signContractDeploy=function(e){var r=e.contractName,t=e.codeBody,n=e.nonce,i=e.postConditionMode,o=e.postConditions;try{return Promise.resolve(v.makeContractDeploy({contractName:r,codeBody:t,senderKey:this.getSTXPrivateKey().toString("hex"),network:this.getNetwork(),nonce:new y(n),postConditionMode:i,postConditions:o}))}catch(e){return Promise.reject(e)}},r.signSTXTransfer=function(e){var r=e.recipient,t=e.amount,n=e.memo,i=e.nonce,o=e.postConditionMode,s=e.postConditions;try{return Promise.resolve(v.makeSTXTokenTransfer({recipient:r,amount:new y(t),memo:n,senderKey:this.getSTXPrivateKey().toString("hex"),network:this.getNetwork(),nonce:new y(i),postConditionMode:o,postConditions:s}))}catch(e){return Promise.reject(e)}},e}(),te=function(){function e(e){var r=e.encryptedBackupPhrase,t=e.identityPublicKeychain,n=e.bitcoinPublicKeychain,i=e.firstBitcoinAddress,o=e.identityKeypairs,s=e.identityAddresses,a=e.identities,c=e.configPrivateKey,u=e.stacksPrivateKey,d=e.walletConfig;this.chain=e.chain,this.encryptedBackupPhrase=r,this.identityPublicKeychain=t,this.bitcoinPublicKeychain=n,this.firstBitcoinAddress=i,this.identityKeypairs=o,this.identityAddresses=s,this.identities=a.map((function(e){return new I(e)})),this.configPrivateKey=c,this.stacksPrivateKey=u,this.walletConfig=d}e.generateFactory=function(e){var r=this;return function(t,n){try{return Promise.resolve($(t,e)).then((function(e){return r.createAccount({encryptedBackupPhrase:e.encryptedMnemonicPhrase,rootNode:e.rootNode,chain:n})}))}catch(e){return Promise.reject(e)}}},e.generate=function(e,r){try{return Promise.resolve(this.generateFactory(128)(e,r))}catch(e){return Promise.reject(e)}},e.generateStrong=function(e,r){try{return Promise.resolve(this.generateFactory(256)(e,r))}catch(e){return Promise.reject(e)}},e.restore=function(r,t,n){try{return Promise.resolve(Z(t)).then((function(i){return Promise.resolve(J(t,r)).then((function(r){return Promise.resolve(e.createAccount({encryptedBackupPhrase:r.encryptedMnemonicHex,rootNode:i,chain:n})).then((function(e){return Promise.resolve(e.restoreIdentities({rootNode:i,gaiaReadURL:"https://gaia.blockstack.org/hub/"}))}))}))}))}catch(e){return Promise.reject(e)}},e.createAccount=function(r){var t=r.encryptedBackupPhrase,n=r.rootNode,i=r.chain,o=r.identitiesToGenerate,s=void 0===o?1:o;try{var a=n.deriveHardened(45).privateKey;if(!a)throw new TypeError("Unable to derive config key for wallet identities");var c=a.toString("hex"),u=ee(i)(n).childKey;return Promise.resolve(E(n,s)).then((function(r){return new e(m({},r,{chain:i,configPrivateKey:c,stacksPrivateKey:u.toBase58(),encryptedBackupPhrase:t}))}))}catch(e){return Promise.reject(e)}};var n=e.prototype;return n.restoreIdentities=function(e){var r,t,n=e.rootNode,i=e.gaiaReadURL;try{var o=this,s={url_prefix:(r={readURL:i,privateKey:o.configPrivateKey}).readURL,max_file_upload_size_megabytes:100,address:d.ecPairToAddress(d.hexStringToECPair((t=r.privateKey)+(64===t.length?"01":""))),token:"not_used",server:"not_used"};return Promise.resolve(o.fetchConfig(s)).then((function(){var e=!1;function r(r){return e?r:Promise.resolve(o.identities[0].refresh()).then((function(){return Promise.resolve(z({rootNode:n})).then((function(e){return o.identities=o.identities.concat(e),o}))}))}var t=function(){if(o.walletConfig){var r=o.walletConfig.identities.map((function(e,r){try{var t=function(){return e.username&&(i.usernames=[e.username],i.defaultUsername=e.username),i},i=o.identities[r],s=function(){if(!i)return Promise.resolve(F(n,r)).then((function(e){i=e}))}();return Promise.resolve(s&&s.then?s.then(t):t())}catch(e){return Promise.reject(e)}}));return Promise.resolve(Promise.all(r)).then((function(r){return o.identities=r,e=!0,o}))}}();return t&&t.then?t.then(r):r(t)}))}catch(e){return Promise.reject(e)}},n.createNewIdentity=function(e){try{var n=this;return Promise.resolve(G(Buffer.from(n.encryptedBackupPhrase,"hex"),e)).then((function(e){return Promise.resolve(r.mnemonicToSeed(e)).then((function(e){var r=t.bip32.fromSeed(e);return Promise.resolve(F(r,n.identities.length)).then((function(e){return n.identities.push(e),n.identityKeypairs.push(e.keyPair),n.identityAddresses.push(e.address),e}))}))}))}catch(e){return Promise.reject(e)}},n.createGaiaConfig=function(e){try{return Promise.resolve(d.connectToGaiaHub(e,this.configPrivateKey))}catch(e){return Promise.reject(e)}},n.fetchConfig=function(e){var r=this;return Promise.resolve(b((function(){return Promise.resolve(fetch(""+e.url_prefix+e.address+"/wallet-config.json")).then((function(e){return Promise.resolve(e.text()).then((function(e){return Promise.resolve(d.decryptContent(e,{privateKey:r.configPrivateKey})).then((function(e){var t=JSON.parse(e);return r.walletConfig=t,t}))}))}))}),(function(){return null})))},n.getOrCreateConfig=function(e){var r=e.gaiaConfig,t=e.skipUpload;try{var n=this;return n.walletConfig?Promise.resolve(n.walletConfig):Promise.resolve(n.fetchConfig(r)).then((function(e){if(e)return e;var i={identities:n.identities.map((function(e){return{username:e.defaultUsername,address:e.address,apps:{}}}))};n.walletConfig=i;var o=function(){if(!t)return Promise.resolve(n.updateConfig(r)).then((function(){}))}();return o&&o.then?o.then((function(){return i})):i}))}catch(e){return Promise.reject(e)}},n.updateConfig=function(e){try{var r=d.getPublicKeyFromPrivate(this.configPrivateKey);return Promise.resolve(d.encryptContent(JSON.stringify(this.walletConfig),{publicKey:r})).then((function(r){return Promise.resolve(A("wallet-config.json",r,e)).then((function(){}))}))}catch(e){return Promise.reject(e)}},n.updateConfigWithAuth=function(e){var r=e.identityIndex,t=e.app,n=e.gaiaConfig;try{var i=this,o=i.walletConfig;D(o),i.identities.forEach((function(e,r){var t,n=o.identities[r];n?(n.apps=n.apps||{},n.username=e.defaultUsername,n.address=e.address,o.identities[r]=n):null===(t=i.walletConfig)||void 0===t||t.identities.push({username:e.defaultUsername,address:e.address,apps:{}})}));var s=o.identities[r];return s.apps=s.apps||{},s.apps[t.origin]=t,o.identities[r]=s,i.walletConfig=o,Promise.resolve(i.updateConfig(n)).then((function(){}))}catch(e){return Promise.reject(e)}},n.updateConfigForReuseWarning=function(e){var r=e.gaiaConfig;try{return D(this.walletConfig),this.walletConfig.hideWarningForReusingIdentity=!0,Promise.resolve(this.updateConfig(r)).then((function(){}))}catch(e){return Promise.reject(e)}},n.getSigner=function(){return new re({privateKey:this.stacksPrivateKey})},e}(),ne={Wallet:te};e.DEFAULT_PROFILE=N,e.Identity=I,e.Wallet=te,e.WalletSigner=re,e.assertIsTruthy=D,e.decrypt=G,e.default=ne,e.derivationPaths=Y,e.deriveIdentityKeyPair=L,e.deriveRootKeychainFromMnemonic=Z,e.deriveStxAddressChain=ee,e.encrypt=W,e.encryptMnemonicFormatted=J,e.fetchProfile=U,e.generateEncryptedMnemonicRootKeychain=$,e.generateMnemonicRootKeychain=function(e){try{var n=r.generateMnemonic(e,u.randomBytes);return Promise.resolve(r.mnemonicToSeed(n)).then((function(e){return{rootNode:t.bip32.fromSeed(e),plaintextMnemonic:n}}))}catch(e){return Promise.reject(e)}},e.getAddress=B,e.getBitcoinAddressNode=_,e.getBitcoinPrivateKeychain=M,e.getBlockchainIdentities=E,e.getDerivationPath=Q,e.getIdentityOwnerAddressNode=x,e.getIdentityPrivateKeychain=H,e.getProfileURLFromZoneFile=V,e.makeIdentity=F,e.recursiveRestoreIdentities=z,e.registerSubdomain=function(e){var r=e.identity,t=e.gaiaHubUrl,n=e.username,i=e.subdomain;try{var o=T(r.profile||N,r.keyPair);return Promise.resolve(C({gaiaHubUrl:t,filePath:"profile.json",identity:r,signedProfileTokenData:o})).then((function(e){var t=n+"."+i,o=d.makeProfileZoneFile(t,e);return Promise.resolve(function(e){var r=e.username,t=e.subdomain,n=e.zoneFile,i=e.identity;try{var o=w[t].registerUrl,s=JSON.stringify({name:r,owner_address:i.address,zonefile:n});return Promise.resolve(fetch(o,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:s})).then((function(e){return e.ok?e.json():Promise.reject({error:"Failed to register username",status:e.status})}))}catch(e){return Promise.reject(e)}}({username:n,subdomain:i,zoneFile:o,identity:r})).then((function(){return r.defaultUsername=t,r.usernames.push(t),r}))}))}catch(e){return Promise.reject(e)}},e.registrars=w,e.signAndUploadProfile=j,e.signProfileForUpload=T,e.uploadProfile=C,e.validateSubdomain=function(r,t){try{var n=!1;void 0===t&&(t=e.Subdomains.BLOCKSTACK);var i=q(r);if(i)return Promise.resolve(i);var o=b((function(){return Promise.resolve(X(r,t)).then((function(r){if("available"!==r.status)return n=!0,e.IdentityNameValidityError.UNAVAILABLE}))}),(function(){return n=!0,e.IdentityNameValidityError.UNAVAILABLE}));return Promise.resolve(o&&o.then?o.then((function(e){return n?e:null})):n?o:null)}catch(e){return Promise.reject(e)}},e.validateSubdomainAvailability=X,e.validateSubdomainFormat=q})); | ||
| //# sourceMappingURL=keychain.umd.production.min.js.map |
@@ -44,3 +44,9 @@ import { IdentityKeyPair } from './utils'; | ||
| export declare function signProfileForUpload(profile: Profile, keypair: IdentityKeyPair): string; | ||
| export declare function uploadProfile(gaiaHubUrl: string, identity: Identity, signedProfileTokenData: string, gaiaHubConfig?: GaiaHubConfig): Promise<string>; | ||
| export declare function uploadProfile({ gaiaHubUrl, filePath, identity, signedProfileTokenData, gaiaHubConfig, }: { | ||
| gaiaHubUrl: string; | ||
| filePath: string; | ||
| identity: Identity; | ||
| signedProfileTokenData: string; | ||
| gaiaHubConfig?: GaiaHubConfig; | ||
| }): Promise<string>; | ||
| interface RegisterParams { | ||
@@ -59,12 +65,12 @@ identity: Identity; | ||
| export declare const registerSubdomain: ({ identity, gaiaHubUrl, username, subdomain, }: RegisterParams) => Promise<Identity>; | ||
| export declare const signAndUploadProfile: ({ profile, gaiaHubUrl, identity, gaiaHubConfig, }: { | ||
| export declare const signAndUploadProfile: ({ profile, gaiaHubUrl, filePath, identity, gaiaHubConfig, }: { | ||
| profile: Profile; | ||
| gaiaHubUrl: string; | ||
| filePath: string; | ||
| identity: Identity; | ||
| gaiaHubConfig?: GaiaHubConfig | undefined; | ||
| }) => Promise<void>; | ||
| export declare const fetchProfile: ({ identity, gaiaUrl, }: { | ||
| identity: Identity; | ||
| gaiaUrl: string; | ||
| export declare const fetchProfile: ({ profileUrl }: { | ||
| profileUrl: string; | ||
| }) => Promise<Profile | null>; | ||
| export {}; |
+3
-3
| { | ||
| "name": "@blockstack/keychain", | ||
| "version": "0.10.6", | ||
| "version": "0.12.1", | ||
| "description": "A package for managing Blockstack keychains", | ||
@@ -59,3 +59,3 @@ "main": "./dist/index.js", | ||
| "dependencies": { | ||
| "@blockstack/rpc-client": "^0.3.0-alpha.12", | ||
| "@blockstack/rpc-client": "^0.3.0-alpha.15", | ||
| "@blockstack/stacks-transactions": "0.5.1", | ||
@@ -75,3 +75,3 @@ "bip39": "^3.0.2", | ||
| }, | ||
| "gitHead": "24130706896791336c0fbb8e1883a2fb4bcdf411" | ||
| "gitHead": "93f9cd7a461e8d565f76411f8cbe016ee17bb46f" | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
730060
0.78%5007
1.13%