surferjs
v1.1.1
Published
Module to Interact to Surfer API with nodejs/typescript
Downloads
58
Readme
SurferClient
A TypeScript client for interacting with the SurferCID API. This client provides easy access to SurferCID's services, including purchasing accounts, creating and refreshing LTokens, checking orders, and managing balance.
Project Structure
./dist/
├── models.js # Data models and response types
├── index.js # Main API client implementation
./
└── package.json # Project dependenciesInstallation
Install via npm:
npm install surferjsUsage
import SurferClient, { OrderResponse, Status } from "surferjs"; // TypeScript
const { default: SurferClient } = require("surferjs"); // NodeJS
// Initialize the client
const client = new SurferClient("your_api_key_here");
// Get stock information for a product
client.getStock("Ltoken_create").then((stockInfo) => {
console.log("Stock Info:", stockInfo);
});
// Check account balance
client.getBalance().then((balance: number) => {
console.log("Balance:", balance);
});
// Create new LTokens
client.createToken(1).then((creationOrder: OrderResponse) => {
console.log(`Order ID: ${creationOrder.order_id}`);
});Available Methods
Token Creation and Management
createToken(quantity: number = 1): Promise<OrderResponse>: Create new LTokensgetTaskStatus(orderId: number, wait: boolean = false): Promise<OrderResponse>: Check token creation statusrefreshToken(tokenData: string | LTokenAccount): Promise<LTokenAccount>: Refresh an LToken
Account Management
getStock(productName: string): Promise<Record<string, any>>: Get stock information for a productgetBalance(): Promise<number>: Get current account balancepurchase(productName: string, quantity: number): Promise<OrderResponse>: Purchase productsgetOrder(orderId: number): Promise<OrderResponse>: Get details of a specific ordergetOrders(limit?: number): Promise<OrderResponse[]>: Get a list of orders
Data Models
LTokenAccount
class LTokenAccount {
created_at: string;
mac: string;
name: string;
platform: string;
rid: string;
token: string;
wk: string = "NONE0";
cbits: number = 1536;
player_age: number = 25;
vid: string = "";
toFormat(): string {
return `mac:${this.mac}|wk:${this.wk}|platform:${this.platform}|rid:${this.rid}|name:${this.name}|cbits:${this.cbits}|playerAge:${this.player_age}|token:${this.token}|vid:${this.vid}`;
}
}OrderResponse
class OrderResponse {
accounts: Account[];
message: string;
success: boolean;
cost: number;
order_id: number;
order_date: Date;
processing: boolean = false;
quantity: number = 0;
refund_amount: number = 0;
status: Status = Status.FAILED;
}Status Enum
enum Status {
SUCCESS = "success",
FAILED = "failed",
PROCESSING = "processing",
}Error Handling
import { AxiosError } from "axios";
client
.createToken(1)
.then((order) => {
return client.getTaskStatus(order.order_id, true);
})
.then((status) => {
if (status.status === Status.SUCCESS) {
console.log("Token created successfully!");
} else {
console.log(`Creation failed: ${status.message}`);
}
})
.catch((error: AxiosError) => {
console.error("API request failed:", error.message);
});Token Format
mac:XX:XX:XX:XX:XX:XX|wk:NONE0|platform:1|rid:XXX|name:XXX|cbits:1536|playerAge:25|token:XXX|vid:XXXWhere:
mac: MAC addresswk: World key (default: NONE0)platform: Platform identifierrid: Resource identifiername: Account namecbits: Client bits (default: 1536)playerAge: Player age (default: 25)token: Authentication tokenvid: Version identifier
Token Refresh Examples
client
.refreshToken(
"mac:XX:XX:XX:XX:XX:XX|wk:NONE0|platform:1|rid:XXX|name:Token1|token:XXX"
)
.then((refreshed) => {
console.log(`Refreshed token: ${refreshed.toFormat()}`);
});