* Add Keybase PGP badge * Return 'not found' if the key is not present * Change the default colour * Add more constraints to the schema * Render 64-bit fingerprints * Add example * Add a 'hex()' constraint to the fingerprint * Improve error handling * Add class 'KeybaseProfile' * Add unit tests for Keybase PGP * Add Keybase BTC * Add unit tests for Keybase BTC * Add Keybase ZEC * Add unit tests for Keybase ZEC * Add Keybase XLM * Add unit tests for Keybase XLM * Validate the BTC address using a regex Regex taken from https://mokagio.github.io/tech-journal/2014/11/21/regex-bitcoin.html. * Exclude 'not found' from addresses' value in unit tests * Remove useless keywords * Add the link to the Keybase API documentation * Move the colour into 'defaultBadgeData' * Remove the HTTP method 'GET' is already the default one. * Improve the error handling for Keybase BTC * Add more constraints to the Keybase BTC schema * Update one unit test for Keybase BTC * Fix the error handling for Keybase BTC * Add more unit tests for Keybase BTC * Improve the error handling for Keybase ZEC * Improve the error handling for Keybase PGP * Improve the error handling for Keybase XLM * Display a real username value in the examples * Include the status code in the schemas * Move the category to the base class The same category is used by all badges. * Add function 'transform' to the base class The function 'transform' is used to encapsulate the error handling logic as it is the same in each service.
39 lines
911 B
JavaScript
39 lines
911 B
JavaScript
'use strict'
|
|
|
|
const { BaseJsonService } = require('..')
|
|
const { NotFound } = require('..')
|
|
|
|
module.exports = class KeybaseProfile extends BaseJsonService {
|
|
static get apiVersion() {
|
|
throw new Error(`apiVersion() is not implemented for ${this.name}`)
|
|
}
|
|
|
|
static get category() {
|
|
return 'social'
|
|
}
|
|
|
|
async fetch({ schema, options }) {
|
|
const apiVersion = this.constructor.apiVersion
|
|
// See https://keybase.io/docs/api/1.0/call/user/lookup.
|
|
const url = `https://keybase.io/_/api/${apiVersion}/user/lookup.json`
|
|
|
|
return this._requestJson({
|
|
url,
|
|
schema,
|
|
options,
|
|
})
|
|
}
|
|
|
|
transform({ data }) {
|
|
if (data.status.code !== 0) {
|
|
throw new NotFound({ prettyMessage: 'invalid username' })
|
|
}
|
|
|
|
if (data.them.length === 0 || !data.them[0]) {
|
|
throw new NotFound({ prettyMessage: 'profile not found' })
|
|
}
|
|
|
|
return { user: data.them[0] }
|
|
}
|
|
}
|