svm-pay
Version:
A payment solution for SVM networks (Solana, Sonic SVM, Eclipse, s00n)
202 lines • 6.93 kB
JavaScript
;
/**
* SVM-Pay Server SDK
*
* This file implements the server-side SDK for SVM-Pay.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.SVMPayServer = void 0;
const types_1 = require("../core/types");
const url_scheme_1 = require("../core/url-scheme");
const reference_1 = require("../core/reference");
const adapter_1 = require("../network/adapter");
const solana_1 = require("../network/solana");
const sonic_1 = require("../network/sonic");
const eclipse_1 = require("../network/eclipse");
const soon_1 = require("../network/soon");
/**
* SVM-Pay Server SDK
*/
class SVMPayServer {
/**
* Create a new SVMPayServer instance
*
* @param config Configuration options
*/
constructor(config = {}) {
this.config = {
defaultNetwork: types_1.SVMNetwork.SOLANA,
debug: false,
...config
};
// Register network adapters
this.registerNetworkAdapters();
this.log('SVMPay Server SDK initialized');
}
/**
* Register network adapters
*/
registerNetworkAdapters() {
adapter_1.NetworkAdapterFactory.registerAdapter(new solana_1.SolanaNetworkAdapter());
adapter_1.NetworkAdapterFactory.registerAdapter(new sonic_1.SonicNetworkAdapter());
adapter_1.NetworkAdapterFactory.registerAdapter(new eclipse_1.EclipseNetworkAdapter());
adapter_1.NetworkAdapterFactory.registerAdapter(new soon_1.SoonNetworkAdapter());
}
/**
* Create a payment URL for a transfer request
*
* @param recipient Recipient address
* @param amount Amount to transfer
* @param options Additional options
* @returns Payment URL string
*/
createTransferUrl(recipient, amount, options = {}) {
const network = options.network || this.config.defaultNetwork || types_1.SVMNetwork.SOLANA;
if (!amount) {
throw new Error('Amount is required for transfer requests');
}
// Generate a reference from order ID if provided
let references = options.references || [];
if (options.orderId) {
const orderReference = (0, reference_1.generateDeterministicReference)(options.orderId);
references = [...references, orderReference];
}
const request = {
type: types_1.RequestType.TRANSFER,
network,
recipient,
amount,
references,
...options
};
return (0, url_scheme_1.createURL)(request);
}
/**
* Create a transaction request URL
*
* @param recipient Recipient address
* @param link URL to fetch transaction details
* @param options Additional options
* @returns Payment URL string
*/
createTransactionUrl(recipient, link, options = {}) {
const network = options.network || this.config.defaultNetwork || types_1.SVMNetwork.SOLANA;
// Generate a reference from order ID if provided
let references = options.references || [];
if (options.orderId) {
const orderReference = (0, reference_1.generateDeterministicReference)(options.orderId);
references = [...references, orderReference];
}
const request = {
type: types_1.RequestType.TRANSACTION,
network,
recipient,
link,
references,
...options
};
return (0, url_scheme_1.createURL)(request);
}
/**
* Parse a payment URL
*
* @param url Payment URL to parse
* @returns Parsed payment request
*/
parseUrl(url) {
return (0, url_scheme_1.parseURL)(url);
}
/**
* Generate a reference ID
*
* @returns Reference ID string
*/
generateReference() {
return (0, reference_1.generateReference)();
}
/**
* Generate a deterministic reference ID from an order ID
*
* @param orderId Order ID to generate a reference from
* @returns Reference ID string
*/
generateOrderReference(orderId) {
return (0, reference_1.generateDeterministicReference)(orderId);
}
/**
* Verify a transaction against a payment request
*
* @param transaction Transaction to verify
* @param request Payment request to verify against
* @returns Whether the transaction is valid
*/
verifyTransaction(_transaction, _request) {
// In a real implementation, this would verify that the transaction
// matches the payment request
this.log(`Verifying transaction against request`);
// For this example, we'll just return true
return true;
}
/**
* Handle a transaction webhook
*
* @param signature Transaction signature
* @param reference Reference ID
* @returns Payment status
*/
async handleWebhook(signature, reference) {
this.log(`Handling webhook for transaction: ${signature}`);
this.log(`With reference: ${reference}`);
// In a real implementation, this would verify the transaction
// and update the payment status
// For this example, we'll just return a confirmed status
return types_1.PaymentStatus.CONFIRMED;
}
/**
* Check the status of a transaction
*
* @param signature Transaction signature
* @param network Network to check on
* @returns Payment status
*/
async checkTransactionStatus(signature, network = this.config.defaultNetwork) {
this.log(`Checking status of transaction: ${signature}`);
this.log(`On network: ${network}`);
const adapter = adapter_1.NetworkAdapterFactory.getAdapter(network);
if (!adapter) {
throw new Error(`No adapter available for network: ${network}`);
}
return adapter.checkTransactionStatus(signature);
}
/**
* Find transactions by reference
*
* @param reference Reference ID to search for
* @param network Network to search on
* @returns Array of transaction signatures
*/
async findTransactionsByReference(reference, network = this.config.defaultNetwork) {
this.log(`Finding transactions with reference: ${reference}`);
this.log(`On network: ${network}`);
// In a real implementation, this would search for transactions
// with the specified reference
// For this example, we'll just return an empty array
return [];
}
/**
* Log a debug message
*
* @param message Message to log
* @param data Additional data to log
*/
log(message, data) {
if (this.config.debug) {
console.log(`[SVMPay Server] ${message}`);
if (data) {
console.log(data);
}
}
}
}
exports.SVMPayServer = SVMPayServer;
//# sourceMappingURL=server.js.map