@stacks/auth
Version:
Authentication for Stacks apps.
56 lines • 2.07 kB
JavaScript
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