@pay-skill/sdk 0.1.7 → 0.2.0
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/README.md +143 -154
- package/dist/auth.d.ts +11 -6
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +19 -7
- package/dist/auth.js.map +1 -1
- package/dist/errors.d.ts +4 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +8 -3
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -6
- package/dist/index.js.map +1 -1
- package/dist/keychain.d.ts +8 -0
- package/dist/keychain.d.ts.map +1 -0
- package/dist/keychain.js +17 -0
- package/dist/keychain.js.map +1 -0
- package/dist/wallet.d.ts +135 -104
- package/dist/wallet.d.ts.map +1 -1
- package/dist/wallet.js +631 -276
- package/dist/wallet.js.map +1 -1
- package/jsr.json +13 -13
- package/knip.json +5 -5
- package/package.json +51 -48
- package/src/auth.ts +210 -200
- package/src/eip3009.ts +79 -79
- package/src/errors.ts +55 -48
- package/src/index.ts +24 -51
- package/src/keychain.ts +18 -0
- package/src/wallet.ts +1111 -445
- package/tests/test_auth_rejection.ts +102 -154
- package/tests/test_crypto.ts +138 -251
- package/tests/test_e2e.ts +99 -158
- package/tests/test_errors.ts +44 -36
- package/tests/test_ows.ts +153 -0
- package/tests/test_wallet.ts +194 -0
- package/dist/client.d.ts +0 -94
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -443
- package/dist/client.js.map +0 -1
- package/dist/models.d.ts +0 -78
- package/dist/models.d.ts.map +0 -1
- package/dist/models.js +0 -2
- package/dist/models.js.map +0 -1
- package/dist/ows-signer.d.ts +0 -75
- package/dist/ows-signer.d.ts.map +0 -1
- package/dist/ows-signer.js +0 -130
- package/dist/ows-signer.js.map +0 -1
- package/dist/signer.d.ts +0 -46
- package/dist/signer.d.ts.map +0 -1
- package/dist/signer.js +0 -111
- package/dist/signer.js.map +0 -1
- package/src/client.ts +0 -644
- package/src/models.ts +0 -77
- package/src/ows-signer.ts +0 -223
- package/src/signer.ts +0 -147
- package/tests/test_ows_integration.ts +0 -92
- package/tests/test_ows_signer.ts +0 -365
- package/tests/test_signer.ts +0 -47
- package/tests/test_validation.ts +0 -66
package/dist/wallet.d.ts
CHANGED
|
@@ -1,121 +1,152 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Wallet —
|
|
3
|
-
* Wraps PayClient with private key signing and balance tracking.
|
|
2
|
+
* Wallet — the single entry point for the pay SDK.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Zero-config for agents: new Wallet() (reads PAYSKILL_KEY env)
|
|
5
|
+
* Explicit key: new Wallet({ privateKey: "0x..." })
|
|
6
|
+
* OS keychain (CLI key): await Wallet.create()
|
|
7
|
+
* OWS wallet extension: await Wallet.fromOws({ walletId: "..." })
|
|
7
8
|
*/
|
|
9
|
+
/** Dollar amount (default) or micro-USDC for precision. */
|
|
10
|
+
export type Amount = number | {
|
|
11
|
+
micro: number;
|
|
12
|
+
};
|
|
8
13
|
export interface WalletOptions {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
|
|
14
|
+
/** Hex private key. If omitted, reads from PAYSKILL_KEY env var. */
|
|
15
|
+
privateKey?: string;
|
|
16
|
+
/** Use Base Sepolia testnet. Default: false (mainnet). Also reads PAYSKILL_TESTNET env. */
|
|
17
|
+
testnet?: boolean;
|
|
18
|
+
/** Request timeout in ms. Default: 30000. */
|
|
19
|
+
timeout?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface OwsWalletOptions {
|
|
22
|
+
/** OWS wallet name or UUID (e.g. "pay-my-agent"). */
|
|
23
|
+
walletId: string;
|
|
24
|
+
/** OWS API key token (passed as passphrase to OWS signing calls). */
|
|
25
|
+
owsApiKey?: string;
|
|
26
|
+
/** Use Base Sepolia testnet. Default: false (mainnet). */
|
|
27
|
+
testnet?: boolean;
|
|
28
|
+
/** Request timeout in ms. Default: 30000. */
|
|
29
|
+
timeout?: number;
|
|
30
|
+
/** @internal Inject OWS module for testing. */
|
|
31
|
+
_owsModule?: unknown;
|
|
32
|
+
}
|
|
33
|
+
export interface SendResult {
|
|
34
|
+
txHash: string;
|
|
35
|
+
status: string;
|
|
36
|
+
amount: number;
|
|
37
|
+
fee: number;
|
|
38
|
+
}
|
|
39
|
+
export interface Tab {
|
|
40
|
+
id: string;
|
|
41
|
+
provider: string;
|
|
42
|
+
amount: number;
|
|
43
|
+
balanceRemaining: number;
|
|
44
|
+
totalCharged: number;
|
|
45
|
+
chargeCount: number;
|
|
46
|
+
maxChargePerCall: number;
|
|
47
|
+
totalWithdrawn: number;
|
|
48
|
+
status: "open" | "closed";
|
|
49
|
+
pendingChargeCount: number;
|
|
50
|
+
pendingChargeTotal: number;
|
|
51
|
+
effectiveBalance: number;
|
|
52
|
+
}
|
|
53
|
+
export interface ChargeResult {
|
|
54
|
+
chargeId: string;
|
|
55
|
+
status: string;
|
|
56
|
+
}
|
|
57
|
+
export interface Balance {
|
|
58
|
+
total: number;
|
|
59
|
+
locked: number;
|
|
60
|
+
available: number;
|
|
61
|
+
}
|
|
62
|
+
export interface Status {
|
|
63
|
+
address: string;
|
|
64
|
+
balance: Balance;
|
|
65
|
+
openTabs: number;
|
|
66
|
+
}
|
|
67
|
+
export interface DiscoverService {
|
|
68
|
+
name: string;
|
|
69
|
+
description: string;
|
|
70
|
+
baseUrl: string;
|
|
71
|
+
category: string;
|
|
72
|
+
keywords: string[];
|
|
73
|
+
routes: {
|
|
74
|
+
path: string;
|
|
75
|
+
method?: string;
|
|
76
|
+
price?: string;
|
|
77
|
+
settlement?: string;
|
|
78
|
+
}[];
|
|
79
|
+
docsUrl?: string;
|
|
80
|
+
}
|
|
81
|
+
export interface DiscoverOptions {
|
|
82
|
+
sort?: string;
|
|
83
|
+
category?: string;
|
|
84
|
+
settlement?: string;
|
|
15
85
|
}
|
|
16
86
|
export interface FundLinkOptions {
|
|
17
|
-
|
|
87
|
+
message?: string;
|
|
18
88
|
agentName?: string;
|
|
19
89
|
}
|
|
20
|
-
export interface
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
90
|
+
export interface WebhookRegistration {
|
|
91
|
+
id: string;
|
|
92
|
+
url: string;
|
|
93
|
+
events: string[];
|
|
94
|
+
}
|
|
95
|
+
export interface MintResult {
|
|
96
|
+
txHash: string;
|
|
97
|
+
amount: number;
|
|
26
98
|
}
|
|
99
|
+
export declare function discover(query?: string, options?: DiscoverOptions & {
|
|
100
|
+
testnet?: boolean;
|
|
101
|
+
}): Promise<DiscoverService[]>;
|
|
27
102
|
export declare class Wallet {
|
|
103
|
+
#private;
|
|
28
104
|
readonly address: string;
|
|
29
|
-
private readonly _privateKey;
|
|
30
|
-
private readonly _apiUrl;
|
|
31
|
-
private readonly _chain;
|
|
32
|
-
private readonly _chainId;
|
|
33
|
-
private readonly _routerAddress;
|
|
34
|
-
private readonly _account;
|
|
35
|
-
/** URL path prefix extracted from apiUrl (e.g., "/api/v1"). */
|
|
36
|
-
private readonly _basePath;
|
|
37
|
-
/** Cached contracts response. */
|
|
38
|
-
private _contractsCache;
|
|
39
|
-
constructor(options: WalletOptions);
|
|
40
|
-
private get _authConfig();
|
|
41
|
-
/** Build authenticated fetch headers for an API request. */
|
|
42
|
-
private _authFetch;
|
|
43
|
-
/** Get USDC balance in human-readable units (e.g., 142.50). */
|
|
44
|
-
balance(): Promise<number>;
|
|
45
105
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* @param flow — "direct" or "tab" (used to look up the spender contract address)
|
|
50
|
-
* @param amount — micro-USDC amount
|
|
106
|
+
* Sync constructor. Resolves key from: privateKey arg -> PAYSKILL_KEY env -> error.
|
|
107
|
+
* For OS keychain, use `await Wallet.create()`.
|
|
108
|
+
* For OWS, use `await Wallet.fromOws({ walletId })`.
|
|
51
109
|
*/
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
110
|
+
constructor(options?: WalletOptions);
|
|
111
|
+
/** Async factory. Resolves key from: privateKey arg -> OS keychain -> PAYSKILL_KEY env -> error. */
|
|
112
|
+
static create(options?: WalletOptions): Promise<Wallet>;
|
|
113
|
+
/** Sync factory. Reads key from PAYSKILL_KEY env var only. */
|
|
114
|
+
static fromEnv(options?: {
|
|
115
|
+
testnet?: boolean;
|
|
116
|
+
}): Wallet;
|
|
117
|
+
/** Async factory. Creates a wallet backed by an OWS (Open Wallet Standard) wallet. */
|
|
118
|
+
static fromOws(options: OwsWalletOptions): Promise<Wallet>;
|
|
119
|
+
private ensureContracts;
|
|
120
|
+
private authFetch;
|
|
121
|
+
private get;
|
|
122
|
+
private post;
|
|
123
|
+
private del;
|
|
124
|
+
private handleResponse;
|
|
125
|
+
private signPermit;
|
|
126
|
+
private parse402;
|
|
127
|
+
private handle402;
|
|
128
|
+
private settleViaDirect;
|
|
129
|
+
private settleViaTab;
|
|
130
|
+
send(to: string, amount: Amount, memo?: string): Promise<SendResult>;
|
|
131
|
+
openTab(provider: string, amount: Amount, maxChargePerCall: Amount): Promise<Tab>;
|
|
132
|
+
closeTab(tabId: string): Promise<Tab>;
|
|
133
|
+
topUpTab(tabId: string, amount: Amount): Promise<Tab>;
|
|
134
|
+
listTabs(): Promise<Tab[]>;
|
|
135
|
+
getTab(tabId: string): Promise<Tab>;
|
|
136
|
+
chargeTab(tabId: string, amount: Amount): Promise<ChargeResult>;
|
|
137
|
+
request(url: string, options?: {
|
|
138
|
+
method?: string;
|
|
139
|
+
body?: unknown;
|
|
140
|
+
headers?: Record<string, string>;
|
|
141
|
+
}): Promise<Response>;
|
|
142
|
+
balance(): Promise<Balance>;
|
|
143
|
+
status(): Promise<Status>;
|
|
144
|
+
discover(query?: string, options?: DiscoverOptions): Promise<DiscoverService[]>;
|
|
61
145
|
createFundLink(options?: FundLinkOptions): Promise<string>;
|
|
62
|
-
/** Create a one-time withdraw link via the server. Returns the dashboard URL. */
|
|
63
146
|
createWithdrawLink(options?: FundLinkOptions): Promise<string>;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
/** Open a tab with a provider (positional or object form). */
|
|
69
|
-
openTab(providerOrOpts: string | {
|
|
70
|
-
to: string;
|
|
71
|
-
limit: number;
|
|
72
|
-
perUnit: number;
|
|
73
|
-
permit?: PermitResult;
|
|
74
|
-
}, amount?: number, maxChargePerCall?: number, options?: {
|
|
75
|
-
permit?: PermitResult;
|
|
76
|
-
}): Promise<{
|
|
77
|
-
id: string;
|
|
78
|
-
tab_id: string;
|
|
79
|
-
}>;
|
|
80
|
-
/** Charge a tab (provider-side). */
|
|
81
|
-
chargeTab(tabId: string, amountOrOpts: number | {
|
|
82
|
-
amount: number;
|
|
83
|
-
cumulative: number;
|
|
84
|
-
callCount: number;
|
|
85
|
-
providerSig: string;
|
|
86
|
-
}): Promise<{
|
|
87
|
-
status: string;
|
|
88
|
-
}>;
|
|
89
|
-
/** Close a tab. */
|
|
90
|
-
closeTab(tabId: string, options?: {
|
|
91
|
-
finalAmount?: number;
|
|
92
|
-
providerSig?: string;
|
|
93
|
-
}): Promise<{
|
|
94
|
-
status: string;
|
|
95
|
-
}>;
|
|
96
|
-
/** Fetch contract addresses from the API (public, no auth). */
|
|
97
|
-
getContracts(): Promise<{
|
|
98
|
-
router: string;
|
|
99
|
-
tab: string;
|
|
100
|
-
direct: string;
|
|
101
|
-
fee: string;
|
|
102
|
-
usdc: string;
|
|
103
|
-
chainId: number;
|
|
104
|
-
}>;
|
|
105
|
-
/** Sign a tab charge (provider-side EIP-712 signature). */
|
|
106
|
-
signTabCharge(contractAddr: string, tabId: string, cumulativeUnits: bigint | number, callCount: number): Promise<string>;
|
|
107
|
-
/** Sign a raw hash with the wallet's private key. */
|
|
108
|
-
private _signHash;
|
|
109
|
-
}
|
|
110
|
-
/** PrivateKeySigner — for manual EIP-712 signing in the playground. */
|
|
111
|
-
export declare class PrivateKeySigner {
|
|
112
|
-
private readonly _account;
|
|
113
|
-
readonly address: string;
|
|
114
|
-
constructor(privateKey: string);
|
|
115
|
-
/** Sign EIP-712 typed data. Returns hex signature. */
|
|
116
|
-
signTypedData(domain: Record<string, unknown>, types: Record<string, Array<{
|
|
117
|
-
name: string;
|
|
118
|
-
type: string;
|
|
119
|
-
}>>, message: Record<string, unknown>): Promise<string>;
|
|
147
|
+
registerWebhook(url: string, events?: string[], secret?: string): Promise<WebhookRegistration>;
|
|
148
|
+
listWebhooks(): Promise<WebhookRegistration[]>;
|
|
149
|
+
deleteWebhook(webhookId: string): Promise<void>;
|
|
150
|
+
mint(amount: Amount): Promise<MintResult>;
|
|
120
151
|
}
|
|
121
152
|
//# sourceMappingURL=wallet.d.ts.map
|
package/dist/wallet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
|