UNPKG

@stacks/auth

Version:

Authentication for Stacks apps.

56 lines 2.07 kB
import { clientFromNetwork, networkFrom } from '@stacks/network'; import { resolveZoneFileToProfile } from '@stacks/profile'; export function lookupProfile(options) { if (!options.username) { return Promise.reject(new Error('No username provided')); } const network = networkFrom(options.network ?? 'mainnet'); const client = Object.assign({}, clientFromNetwork(network), options.client); let lookupPromise; if (options.zoneFileLookupURL) { const url = `${options.zoneFileLookupURL.replace(/\/$/, '')}/${options.username}`; lookupPromise = client.fetch(url).then(response => response.json()); } else { lookupPromise = getNameInfo({ name: options.username }); } return lookupPromise.then((responseJSON) => { if (responseJSON.hasOwnProperty('zonefile') && responseJSON.hasOwnProperty('address')) { return resolveZoneFileToProfile({ zoneFile: responseJSON.zonefile, publicKeyOrAddress: responseJSON.address, client, }); } else { throw new Error('Invalid zonefile lookup response: did not contain `address`' + ' or `zonefile` field'); } }); } export function getNameInfo(opts) { const network = networkFrom(opts.network ?? 'mainnet'); const client = Object.assign({}, clientFromNetwork(network), opts.client); const nameLookupURL = `${client.baseUrl}/v1/names/${opts.name}`; return client .fetch(nameLookupURL) .then((resp) => { if (resp.status === 404) { throw new Error('Name not found'); } else if (resp.status !== 200) { throw new Error(`Bad response status: ${resp.status}`); } else { return resp.json(); } }) .then((nameInfo) => { if (nameInfo.address) { return Object.assign({}, nameInfo, { address: nameInfo.address }); } else { return nameInfo; } }); } //# sourceMappingURL=profile.js.map