UNPKG

@okxweb3/coin-stellar

Version:

@okxweb3/coin-stellar is a Stellar SDK for building Web3 wallets and applications. It supports Stellar and PI blockchains, enabling private key management, address generation, transaction signing, trustline creation, and asset transfers

167 lines 7.71 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.scValToNative = exports.nativeToScVal = void 0; const xdr_1 = __importDefault(require("./xdr")); const address_1 = require("./address"); const contract_1 = require("./contract"); const index_1 = require("./numbers/index"); function nativeToScVal(val, opts = {}) { var _a, _b, _c, _d, _e; switch (typeof val) { case 'object': { if (val === null) { return xdr_1.default.ScVal.scvVoid(); } if (val instanceof xdr_1.default.ScVal) { return val; } if (val instanceof address_1.Address) { return val.toScVal(); } if (val instanceof contract_1.Contract) { return val.address().toScVal(); } if (val instanceof Uint8Array || Buffer.isBuffer(val)) { const copy = Uint8Array.from(val); switch ((_a = opts === null || opts === void 0 ? void 0 : opts.type) !== null && _a !== void 0 ? _a : 'bytes') { case 'bytes': return xdr_1.default.ScVal.scvBytes(copy); case 'symbol': return xdr_1.default.ScVal.scvSymbol(copy); case 'string': return xdr_1.default.ScVal.scvString(copy); default: throw new TypeError(`invalid type (${opts.type}) specified for bytes-like value`); } } if (Array.isArray(val)) { if (val.length > 0 && val.some((v) => typeof v !== typeof val[0])) { throw new TypeError(`array values (${val}) must have the same type (types: ${val .map((v) => typeof v) .join(',')})`); } return xdr_1.default.ScVal.scvVec(val.map((v) => nativeToScVal(v, opts))); } if (((_c = (_b = val.constructor) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '') !== 'Object') { throw new TypeError(`cannot interpret ${(_d = val.constructor) === null || _d === void 0 ? void 0 : _d.name} value as ScVal (${JSON.stringify(val)})`); } return xdr_1.default.ScVal.scvMap(Object.entries(val) .sort(([key1], [key2]) => key1.localeCompare(key2)) .map(([k, v]) => { var _a, _b; const [keyType, valType] = (_b = ((_a = opts === null || opts === void 0 ? void 0 : opts.type) !== null && _a !== void 0 ? _a : {})[k]) !== null && _b !== void 0 ? _b : [null, null]; const keyOpts = keyType ? { type: keyType } : {}; const valOpts = valType ? { type: valType } : {}; return new xdr_1.default.ScMapEntry({ key: nativeToScVal(k, keyOpts), val: nativeToScVal(v, valOpts) }); })); } case 'number': case 'bigint': switch (opts === null || opts === void 0 ? void 0 : opts.type) { case 'u32': return xdr_1.default.ScVal.scvU32(val); case 'i32': return xdr_1.default.ScVal.scvI32(val); default: break; } return new index_1.ScInt(val, { type: opts === null || opts === void 0 ? void 0 : opts.type }).toScVal(); case 'string': { const optType = (_e = opts === null || opts === void 0 ? void 0 : opts.type) !== null && _e !== void 0 ? _e : 'string'; switch (optType) { case 'string': return xdr_1.default.ScVal.scvString(val); case 'symbol': return xdr_1.default.ScVal.scvSymbol(val); case 'address': return new address_1.Address(val).toScVal(); case 'u32': return xdr_1.default.ScVal.scvU32(parseInt(val, 10)); case 'i32': return xdr_1.default.ScVal.scvI32(parseInt(val, 10)); default: if (index_1.XdrLargeInt.isType(optType)) { return new index_1.XdrLargeInt(optType, val).toScVal(); } throw new TypeError(`invalid type (${opts.type}) specified for string value`); } } case 'boolean': return xdr_1.default.ScVal.scvBool(val); case 'undefined': return xdr_1.default.ScVal.scvVoid(); case 'function': return nativeToScVal(val()); default: throw new TypeError(`failed to convert typeof ${typeof val} (${val})`); } } exports.nativeToScVal = nativeToScVal; function scValToNative(scv) { var _a, _b; switch (scv.switch().value) { case xdr_1.default.ScValType.scvVoid().value: return null; case xdr_1.default.ScValType.scvU64().value: case xdr_1.default.ScValType.scvI64().value: return scv.value().toBigInt(); case xdr_1.default.ScValType.scvU128().value: case xdr_1.default.ScValType.scvI128().value: case xdr_1.default.ScValType.scvU256().value: case xdr_1.default.ScValType.scvI256().value: return (0, index_1.scValToBigInt)(scv); case xdr_1.default.ScValType.scvVec().value: return ((_a = scv.vec()) !== null && _a !== void 0 ? _a : []).map(scValToNative); case xdr_1.default.ScValType.scvAddress().value: return address_1.Address.fromScVal(scv).toString(); case xdr_1.default.ScValType.scvMap().value: return Object.fromEntries(((_b = scv.map()) !== null && _b !== void 0 ? _b : []).map((entry) => [ scValToNative(entry.key()), scValToNative(entry.val()) ])); case xdr_1.default.ScValType.scvBool().value: case xdr_1.default.ScValType.scvU32().value: case xdr_1.default.ScValType.scvI32().value: case xdr_1.default.ScValType.scvBytes().value: return scv.value(); case xdr_1.default.ScValType.scvSymbol().value: case xdr_1.default.ScValType.scvString().value: { const v = scv.value(); if (Buffer.isBuffer(v) || ArrayBuffer.isView(v)) { try { return new TextDecoder().decode(v); } catch (e) { return new Uint8Array(v.buffer); } } return v; } case xdr_1.default.ScValType.scvTimepoint().value: case xdr_1.default.ScValType.scvDuration().value: return new xdr_1.default.Uint64(scv.value()).toBigInt(); case xdr_1.default.ScValType.scvError().value: switch (scv.error().switch().value) { case xdr_1.default.ScErrorType.sceContract().value: return { type: 'contract', code: scv.error().contractCode() }; default: { const err = scv.error(); return { type: 'system', code: err.code().value, value: err.code().name }; } } default: return scv.value(); } } exports.scValToNative = scValToNative; //# sourceMappingURL=scval.js.map