UNPKG

@toruslabs/metadata-helpers

Version:
88 lines (84 loc) 2.9 kB
'use strict'; 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;