@toruslabs/metadata-helpers
Version:
Helper methods for metadata
88 lines (84 loc) • 2.9 kB
JavaScript
;
var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var secp256k1_js = require('@noble/curves/secp256k1.js');
var sha3_js = require('@noble/hashes/sha3.js');
var httpHelpers = require('@toruslabs/http-helpers');
var stringify = require('json-stable-stringify');
var bytes = require('./helpers/bytes.js');
var utils = require('./helpers/utils.js');
var utils_js = require('@noble/curves/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) {
httpHelpers.setAPIKey(apiKey);
}
static setEmbedHost(embedHost) {
httpHelpers.setEmbedHost(embedHost);
}
generateMetadataParams(message, privateKeyBytes) {
const {
x,
y
} = utils.getPublicKeyCoords(privateKeyBytes);
const setData = {
data: message,
timestamp: Math.floor(this.serverTimeOffset + Date.now() / 1000).toString(16)
};
const msgHash = sha3_js.keccak_256(bytes.utf8ToBytes(stringify(setData)));
const sigBytes = secp256k1_js.secp256k1.sign(msgHash, privateKeyBytes, {
prehash: false,
format: "recovered",
lowS: false
});
return {
pub_key_X: x,
pub_key_Y: y,
set_data: setData,
signature: bytes.bytesToBase64(utils.toEthereumSignature(sigBytes))
};
}
generatePubKeyParams(privateKeyBytes) {
const {
x,
y
} = utils.getPublicKeyCoords(privateKeyBytes);
return {
pub_key_X: x,
pub_key_Y: y
};
}
async setMetadata(data, namespace, options) {
const pubKeyHex = {
pub_key_X: utils_js.bytesToHex(data.pub_key_X),
pub_key_Y: utils_js.bytesToHex(data.pub_key_Y)
};
const params = namespace !== null ? _objectSpread(_objectSpread(_objectSpread({}, data), pubKeyHex), {}, {
namespace
}) : _objectSpread(_objectSpread({}, data), pubKeyHex);
const metadataResponse = await httpHelpers.post(`${this.metadataHost}/set`, params, options, {
useAPIKey: true
});
return metadataResponse.message;
}
async getMetadata(pubKey, namespace, options) {
const pubKeyHex = {
pub_key_X: utils_js.bytesToHex(pubKey.pub_key_X),
pub_key_Y: utils_js.bytesToHex(pubKey.pub_key_Y)
};
const params = namespace !== null ? _objectSpread(_objectSpread({}, pubKeyHex), {}, {
namespace
}) : pubKeyHex;
const metadataResponse = await httpHelpers.post(`${this.metadataHost}/get`, params, options, {
useAPIKey: true
});
return metadataResponse.message;
}
}
exports.MetadataStorageLayer = MetadataStorageLayer;