@toruslabs/metadata-helpers
Version:
Helper methods for metadata
65 lines (61 loc) • 2.56 kB
JavaScript
import _objectSpread from '@babel/runtime/helpers/objectSpread2';
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import { setAPIKey, setEmbedHost, post } from '@toruslabs/http-helpers';
import stringify from 'json-stable-stringify';
import { ec, keccak256 } from './utils.js';
class MetadataStorageLayer {
// ms
constructor(metadataHost = "https://metadata.tor.us", serverTimeOffset = 0) {
_defineProperty(this, "metadataHost", void 0);
_defineProperty(this, "serverTimeOffset", void 0);
this.metadataHost = metadataHost;
this.serverTimeOffset = serverTimeOffset;
}
static setAPIKey(apiKey) {
setAPIKey(apiKey);
}
static setEmbedHost(embedHost) {
setEmbedHost(embedHost);
}
generateMetadataParams(message, privateKeyHex) {
var _sig$recoveryParam$to, _sig$recoveryParam;
const key = ec.keyFromPrivate(privateKeyHex, "hex");
const setData = {
data: message,
timestamp: Math.floor(this.serverTimeOffset + Date.now() / 1000).toString(16)
};
const sig = key.sign(keccak256(Buffer.from(stringify(setData), "utf8")));
return {
pub_key_X: key.getPublic().getX().toString(16, 64),
pub_key_Y: key.getPublic().getY().toString(16, 64),
set_data: setData,
signature: Buffer.from(sig.r.toString(16, 64) + sig.s.toString(16, 64) + ((_sig$recoveryParam$to = (_sig$recoveryParam = sig.recoveryParam) === null || _sig$recoveryParam === void 0 ? void 0 : _sig$recoveryParam.toString(16).padStart(2, "0").slice(-2)) !== null && _sig$recoveryParam$to !== void 0 ? _sig$recoveryParam$to : "00"), "hex").toString("base64")
};
}
generatePubKeyParams(privateKeyHex) {
const key = ec.keyFromPrivate(privateKeyHex, "hex");
return {
pub_key_X: key.getPublic().getX().toString(16, 64),
pub_key_Y: key.getPublic().getY().toString(16, 64)
};
}
async setMetadata(data, namespace, options) {
const params = namespace !== null ? _objectSpread(_objectSpread({}, data), {}, {
namespace
}) : data;
const metadataResponse = await post(`${this.metadataHost}/set`, params, options, {
useAPIKey: true
});
return metadataResponse.message;
}
async getMetadata(pubKey, namespace, options) {
const params = namespace !== null ? _objectSpread(_objectSpread({}, pubKey), {}, {
namespace
}) : pubKey;
const metadataResponse = await post(`${this.metadataHost}/get`, params, options, {
useAPIKey: true
});
return metadataResponse.message;
}
}
export { MetadataStorageLayer };