@asgcard/sdk 1.0.8 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts +10 -1
- package/dist/client.js +37 -4
- package/dist/client.js.map +1 -1
- package/dist/types/index.d.ts +39 -0
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ASGCardClientConfig, CardResult, CreateCardParams, FundCardParams, FundResult, HealthResponse, TierResponse } from "./types";
|
|
1
|
+
import type { ASGCardClientConfig, CardResult, CreateCardParams, FundCardParams, FundResult, HealthResponse, TierResponse, TransactionListResponse, CardBalanceResponse, CardListEntry } from "./types";
|
|
2
2
|
export declare class ASGCardClient {
|
|
3
3
|
private readonly baseUrl;
|
|
4
4
|
private readonly timeout;
|
|
@@ -22,7 +22,16 @@ export declare class ASGCardClient {
|
|
|
22
22
|
getTiers(): Promise<TierResponse>;
|
|
23
23
|
/** Health check */
|
|
24
24
|
health(): Promise<HealthResponse>;
|
|
25
|
+
/** List all cards for this wallet */
|
|
26
|
+
listCards(): Promise<{
|
|
27
|
+
cards: CardListEntry[];
|
|
28
|
+
}>;
|
|
29
|
+
/** Get transaction history for a card */
|
|
30
|
+
getTransactions(cardId: string, page?: number, limit?: number): Promise<TransactionListResponse>;
|
|
31
|
+
/** Get live balance for a card */
|
|
32
|
+
getBalance(cardId: string): Promise<CardBalanceResponse>;
|
|
25
33
|
private requestWithX402;
|
|
34
|
+
private requestWithAuth;
|
|
26
35
|
private request;
|
|
27
36
|
private rawFetch;
|
|
28
37
|
private parseResponse;
|
package/dist/client.js
CHANGED
|
@@ -43,12 +43,15 @@ class ASGCardClient {
|
|
|
43
43
|
* Handles 402 → x402 payment → 201 automatically.
|
|
44
44
|
*/
|
|
45
45
|
async createCard(params) {
|
|
46
|
+
const body = {
|
|
47
|
+
nameOnCard: params.nameOnCard,
|
|
48
|
+
email: params.email,
|
|
49
|
+
};
|
|
50
|
+
if (params.phone)
|
|
51
|
+
body.phone = params.phone;
|
|
46
52
|
return this.requestWithX402(`/cards/create/tier/${params.amount}`, {
|
|
47
53
|
method: "POST",
|
|
48
|
-
body: JSON.stringify(
|
|
49
|
-
nameOnCard: params.nameOnCard,
|
|
50
|
-
email: params.email
|
|
51
|
-
})
|
|
54
|
+
body: JSON.stringify(body)
|
|
52
55
|
});
|
|
53
56
|
}
|
|
54
57
|
/**
|
|
@@ -69,6 +72,18 @@ class ASGCardClient {
|
|
|
69
72
|
async health() {
|
|
70
73
|
return this.request("/health", { method: "GET" });
|
|
71
74
|
}
|
|
75
|
+
/** List all cards for this wallet */
|
|
76
|
+
async listCards() {
|
|
77
|
+
return this.requestWithAuth("/wallet", { method: "GET" });
|
|
78
|
+
}
|
|
79
|
+
/** Get transaction history for a card */
|
|
80
|
+
async getTransactions(cardId, page = 1, limit = 20) {
|
|
81
|
+
return this.requestWithAuth(`/wallet/${cardId}/transactions?page=${page}&limit=${limit}`, { method: "GET" });
|
|
82
|
+
}
|
|
83
|
+
/** Get live balance for a card */
|
|
84
|
+
async getBalance(cardId) {
|
|
85
|
+
return this.requestWithAuth(`/wallet/${cardId}/balance`, { method: "GET" });
|
|
86
|
+
}
|
|
72
87
|
// ── x402 payment flow ────────────────────────────────
|
|
73
88
|
async requestWithX402(path, init) {
|
|
74
89
|
const first = await this.rawFetch(path, init);
|
|
@@ -92,6 +107,24 @@ class ASGCardClient {
|
|
|
92
107
|
});
|
|
93
108
|
return this.parseResponse(retry);
|
|
94
109
|
}
|
|
110
|
+
// ── Wallet-authenticated requests ────────────────────
|
|
111
|
+
async requestWithAuth(path, init) {
|
|
112
|
+
if (!this.keypair) {
|
|
113
|
+
throw new Error("requestWithAuth requires a keypair (privateKey)");
|
|
114
|
+
}
|
|
115
|
+
const timestamp = Math.floor(Date.now() / 1000).toString();
|
|
116
|
+
const message = Buffer.from(`asgcard-auth:${timestamp}`);
|
|
117
|
+
const signature = this.keypair.sign(message).toString("base64");
|
|
118
|
+
const headers = {
|
|
119
|
+
"Content-Type": "application/json",
|
|
120
|
+
"X-WALLET-ADDRESS": this.keypair.publicKey(),
|
|
121
|
+
"X-WALLET-SIGNATURE": signature,
|
|
122
|
+
"X-WALLET-TIMESTAMP": timestamp,
|
|
123
|
+
...(init.headers ?? {}),
|
|
124
|
+
};
|
|
125
|
+
const response = await this.rawFetch(path, { ...init, headers });
|
|
126
|
+
return this.parseResponse(response);
|
|
127
|
+
}
|
|
95
128
|
// ── HTTP primitives ──────────────────────────────────
|
|
96
129
|
async request(path, init) {
|
|
97
130
|
const response = await this.rawFetch(path, init);
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,sDAAkE;AAClE,qCAAkD;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export interface CreateCardParams {
|
|
|
27
27
|
amount: 10 | 25 | 50 | 100 | 200 | 500;
|
|
28
28
|
nameOnCard: string;
|
|
29
29
|
email: string;
|
|
30
|
+
/** Phone number for cardholder registration (e.g. +1234567890). Required by card issuer. */
|
|
31
|
+
phone?: string;
|
|
30
32
|
}
|
|
31
33
|
export interface FundCardParams {
|
|
32
34
|
amount: 10 | 25 | 50 | 100 | 200 | 500;
|
|
@@ -126,3 +128,40 @@ export interface X402PaymentPayload {
|
|
|
126
128
|
transaction: string;
|
|
127
129
|
};
|
|
128
130
|
}
|
|
131
|
+
export interface TransactionEntry {
|
|
132
|
+
id: string;
|
|
133
|
+
type: string;
|
|
134
|
+
amount: number;
|
|
135
|
+
currency: string;
|
|
136
|
+
status: string;
|
|
137
|
+
description?: string;
|
|
138
|
+
merchantName?: string;
|
|
139
|
+
createdAt: string;
|
|
140
|
+
}
|
|
141
|
+
export interface TransactionListResponse {
|
|
142
|
+
cardId: string;
|
|
143
|
+
lastFour?: string;
|
|
144
|
+
transactions: TransactionEntry[];
|
|
145
|
+
pagination: {
|
|
146
|
+
page: number;
|
|
147
|
+
limit: number;
|
|
148
|
+
total: number;
|
|
149
|
+
pages: number;
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
export interface CardBalanceResponse {
|
|
153
|
+
cardId: string;
|
|
154
|
+
lastFour?: string;
|
|
155
|
+
balance: number;
|
|
156
|
+
currency: string;
|
|
157
|
+
status?: string;
|
|
158
|
+
source: "4payments" | "local";
|
|
159
|
+
}
|
|
160
|
+
export interface CardListEntry {
|
|
161
|
+
cardId: string;
|
|
162
|
+
nameOnCard: string;
|
|
163
|
+
lastFour: string;
|
|
164
|
+
balance: number;
|
|
165
|
+
status: string;
|
|
166
|
+
createdAt: string;
|
|
167
|
+
}
|