startale-aa-sdk
Version:
SDK for startale account integration with support for account abstraction, ERC-7579, ERC-4337.
74 lines • 2.79 kB
JavaScript
import { http } from "viem";
import { createPaymasterClient } from "viem/account-abstraction";
import { scsTokenPaymasterActions } from "./decorators/tokenPaymaster/index.js";
export const scsSponsoredPaymasterContext = {
// mode: "SPONSORED",
// Note: This is fixed from the SCS Pm service backend
// expiryDuration: 300,
calculateGasLimits: true,
// Review this has to be dynamic
paymasterId: "pm_test"
};
export const toSCSSponsoredPaymasterContext = (params) => {
return {
...scsSponsoredPaymasterContext,
...params
};
};
export const toSCSTokenPaymasterContext = (params) => {
const { calculateGasLimits } = params;
return {
token: params.token,
// Note: This is fixed from the SCS Pm service backend
// expiryDuration: expiryDuration ?? 6000,
calculateGasLimits: calculateGasLimits ?? true
};
};
/**
* Creates a SCS Paymaster Client.
*
* This function sets up a client for interacting with SCS's paymaster service.
* It can be configured with a custom transport, a specific paymaster URL, or with a chain ID and API key.
*
* @param {SCSPaymasterClientConfig} parameters - Configuration options for the client.
* @returns {PaymasterClient} A configured Paymaster Client instance.
*
* @example
* // Create a client with a custom transport
* const client1 = createSCSPaymasterClient({ transport: customTransport })
*
* @example
* // Create a client with a specific paymaster URL
* const client2 = createSCSPaymasterClient({ paymasterUrl: 'https://example.com/paymaster' })
*
* @example
* // Create a client with chain ID and API key
* const client3 = createSCSPaymasterClient({ chainId: 1, apiKey: 'your-api-key' })
*
* @example
* // Create a Token Paymaster Client
* const tokenPaymasterClient = createSCSPaymasterClient({
* paymasterUrl: 'https://example.com/paymaster',
* paymasterContext: {
* mode: "ERC20",
* tokenInfo: {
* feeTokenAddress: "0x..."
* }
* },
* })
*/
export const createSCSPaymasterClient = (parameters) => {
const defaultedTransport = parameters.transport
? parameters.transport
: parameters.paymasterUrl
? http(parameters.paymasterUrl)
: http(`https://paymaster.biconomy.io/api/v2/${parameters.chainId}/${parameters.apiKey}`);
// Todo: Update default to https://dev.paymaster.scs.startale.com/v1?apikey=scsadmin-paymaster (or prod)
// Remove getPaymasterStubData from the client.
const { getPaymasterStubData, ...paymasterClient } = createPaymasterClient({
...parameters,
transport: defaultedTransport
}).extend(scsTokenPaymasterActions());
return paymasterClient;
};
//# sourceMappingURL=createSCSPaymasterClient.js.map