UNPKG

hypay-adapter

Version:

Provides an XRPL payment adapter.

180 lines (173 loc) 6.13 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); // src/index.ts var index_exports = {}; __export(index_exports, { XamanWallet: () => XamanWallet2 }); module.exports = __toCommonJS(index_exports); // src/types/xrpl.ts var NETWORKS = { LOCALNET: "ws://localhost:6006/", TESTNET: "wss://s.altnet.rippletest.net:51233", DEVNET: "wss://s.devnet.rippletest.net:51233", MAINNET: "wss://s1.ripple.com" }; // src/types/wallet.ts var import_xrpl2 = require("xrpl"); var AbstractWallet = class { constructor(network = "TESTNET") { __publicField(this, "networkType"); __publicField(this, "networkAddress"); this.networkType = network; this.networkAddress = NETWORKS[network]; } async getCurrentFee() { const client = new import_xrpl2.Client(this.networkType); await client.connect(); const feeResponse = await client.request({ command: "fee" }); const { base_fee: _, median_fee: medianFee, minimum_fee: __, open_ledger_fee: ___ } = feeResponse.result.drops; await client.disconnect(); return { medianFee }; } }; // src/controllers/wallet/xaman.ts var import_xumm = require("xumm"); var XamanWallet = class extends AbstractWallet { constructor(destination, apiCredentials) { super(); __publicField(this, "destinationAddress"); __publicField(this, "connectedAddress"); __publicField(this, "xumm"); __publicField(this, "txidTopayloadUuidMapper"); __publicField(this, "apiKey", "85df3ccf-63cc-402e-b2fa-0ceb8fcf2669"); __publicField(this, "apiSecret", "07168ac9-1b02-4b62-91c9-028881330f05"); this.destinationAddress = destination; this.apiKey = apiCredentials?.key || "85df3ccf-63cc-402e-b2fa-0ceb8fcf2669"; this.apiSecret = apiCredentials?.secret || "07168ac9-1b02-4b62-91c9-028881330f05"; this.xumm = new import_xumm.Xumm(this.apiKey, this.apiSecret); this.txidTopayloadUuidMapper = /* @__PURE__ */ new Map(); } async init() { } async connect() { await this.xumm.authorize(); this.connectedAddress = await this.xumm.user.account; return { address: this.connectedAddress ?? "", providerName: "XAMAN" }; } async createPaymentTx({ amount, meta_data }) { if (!this.xumm) { throw new Error("Xaman Wallet SDK is not available."); } const draftTransaction = { TransactionType: "Payment", Destination: this.destinationAddress, Amount: amount, options: { force_network: this.networkType }, custom_meta: { identifier: meta_data?.identifier, instruction: meta_data?.instruction, blob: meta_data?.blob } }; const payload = await this.xumm.payload?.create({ txjson: draftTransaction }); if (!payload) throw new Error("Error"); return payload.uuid; } async signAndSubmit({ payloadUuid }) { if (!this.xumm) { throw new Error("Xaman Wallet SDK is not available."); } try { const isReady = await this.xumm.xapp?.ready(); if (!isReady) throw new Error("Xapp can not loaded. please load screen for debuging."); } catch (e) { return "Can not connect to Xaman Apps"; } await this.xumm.xapp?.openSignRequest({ uuid: payloadUuid }); return "Sign request opened"; } async getSubmittedTxResult(payloadUuid) { const payload = await this.xumm.payload?.get(payloadUuid); if (!payload) throw new Error("Error"); if (payload.response.txid) this.txidTopayloadUuidMapper.set(payload.response.txid, payloadUuid); const isSuccess = payload.response.dispatched_result === "tesSUCCESS"; const isSubmitted = payload.response.txid !== null; const isResolved = payload.response.resolved_at !== null; return { success: isSuccess, submitted: isSubmitted, resolved: isResolved, validated: isSuccess && isSubmitted && isResolved, txid: payload.response.txid, createdAt: payload.payload.created_at, expiresAt: payload.payload.expires_at, raw: payload.response }; } async request({ method, params }) { if (!this.xumm) { throw new Error("Xaman Wallet SDK is not available."); } const draftTransaction = { TransactionType: method, ...params }; const payload = await this.xumm.payload?.create({ txjson: draftTransaction }); if (!payload) throw new Error("Error"); return payload.uuid; } async respond(_) { } async ping() { if (!this.xumm) { throw new Error("Xaman Wallet SDK is not available."); } const ping = await this.xumm.ping(); if (ping) return { pong: ping.jwtData?.pong ?? false }; return { pong: false }; } async disconnect() { if (!this.xumm) { throw new Error("Xaman Wallet SDK is not available."); } await this.xumm.logout(); this.connectedAddress = void 0; } formatAuthMessage(params) { return `Sign in request from ${params.origin} Payload: ${params.payload}`; } }; // src/index.ts var XamanWallet2 = XamanWallet; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { XamanWallet });