UNPKG

cosmic-lib

Version:

A JavaScript implementation of the CosmicLink protocol for Stellar

113 lines (82 loc) 3.25 kB
"use strict"; /** * Contains the methods to convert transactions between various formats. * * @private * @exports convert */ var convert = exports; var StellarSdk = require("@cosmic-plus/base/es5/stellar-sdk"); var construct = require("./construct"); var decode = require("./decode"); var destruct = require("./destruct"); var encode = require("./encode"); var resolve = require("./resolve"); /** **************************** URI -> XDR ******************************/ convert.uriToQuery = function (conf, uri) { if (!uri.match(/\?/)) return null; var query = uri.replace(/^[^?]*/, ""); return query; }; convert.queryToTdesc = decode.query; convert.tdescToJson = function (conf, tdesc) { return JSON.stringify(tdesc, null, 2); }; convert.tdescToTransaction = construct.transaction; convert.transactionToXdr = function (conf, transaction) { return transaction.toEnvelope().toXDR("base64"); }; convert.xdrToSep7 = function (conf, xdr, options) { var sep7 = "web+stellar:tx?xdr="; sep7 += encodeURIComponent(xdr); if (conf.extra.pubkey) { sep7 += "&pubkey=" + encodeURIComponent(conf.extra.pubkey); } if (conf.extra.msg) { sep7 += "&msg=" + encodeURIComponent(conf.extra.msg); } if (options.network && options.network !== "public") { var passphrase = resolve.networkPassphrase(conf, options.network); sep7 += "&network_passphrase=" + encodeURIComponent(passphrase); } if (options.callback) { sep7 += "&callback=" + encode.url(conf, "url:".concat(options.callback)); } if (typeof conf.extra.originDomain === "string") { sep7 += "&origin_domain=" + conf.extra.originDomain; sep7 += "&signature=" + conf.extra.signature; } // Not part of the standard. // if (options.horizon) sep7 +="&horizon=" + encode.url(conf, options.horizon) return sep7; }; /** **************************** XDR -> URI ******************************/ convert.xdrToTransaction = function (conf, xdr) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var networkPassphrase = resolve.networkPassphrase(conf, options.network); var transaction = new StellarSdk.Transaction(xdr, networkPassphrase); if (options.strip === "signatures") { // transaction.signatures can't be replaced. while (transaction.signatures.length) { transaction.signatures.pop(); } } return transaction; }; convert.xdrToQuery = function (conf, xdr) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var query = "?xdr=" + xdr; if (options.network) query += "&network=" + encodeURIComponent(options.network); if (options.horizon) query += "&horizon=" + encode.url(conf, options.horizon); if (options.callback) query += "&callback=" + encode.url(conf, options.callback); // Handle with source-independent transactions. if (conf.locker && !conf.locker.source) query += "&strip=source"; return query; }; convert.transactionToTdesc = destruct.transaction; convert.jsonToTdesc = function (conf, json) { return JSON.parse(json); }; convert.tdescToQuery = encode.query; convert.queryToUri = function (conf, query) { var page = conf.page || "https://cosmic.link"; return page + query; };