@atxp/base 0.2.21 → 0.3.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/dist/baseAppAccount.js +15 -4
- package/dist/baseAppAccount.js.map +1 -1
- package/dist/baseAppPaymentMaker.js +43 -50
- package/dist/baseAppPaymentMaker.js.map +1 -1
- package/dist/eip1271JwtHelper.js +83 -0
- package/dist/eip1271JwtHelper.js.map +1 -0
- package/dist/index.cjs +630 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +157 -6
- package/dist/index.js +623 -5
- package/dist/index.js.map +1 -1
- package/dist/mainWalletPaymentMaker.js +26 -48
- package/dist/mainWalletPaymentMaker.js.map +1 -1
- package/dist/smartWalletHelpers.js +6 -3
- package/dist/smartWalletHelpers.js.map +1 -1
- package/dist/spendPermissionUtils.js +19 -0
- package/dist/spendPermissionUtils.js.map +1 -0
- package/dist/storage.js +6 -4
- package/dist/storage.js.map +1 -1
- package/package.json +22 -8
- package/dist/baseAppAccount.d.ts +0 -28
- package/dist/baseAppAccount.d.ts.map +0 -1
- package/dist/baseAppAccount.ephemeral.test.d.ts +0 -2
- package/dist/baseAppAccount.ephemeral.test.d.ts.map +0 -1
- package/dist/baseAppAccount.ephemeral.test.js +0 -420
- package/dist/baseAppAccount.ephemeral.test.js.map +0 -1
- package/dist/baseAppAccount.mainWallet.test.d.ts +0 -2
- package/dist/baseAppAccount.mainWallet.test.d.ts.map +0 -1
- package/dist/baseAppAccount.mainWallet.test.js +0 -259
- package/dist/baseAppAccount.mainWallet.test.js.map +0 -1
- package/dist/baseAppPaymentMaker.d.ts +0 -16
- package/dist/baseAppPaymentMaker.d.ts.map +0 -1
- package/dist/baseAppPaymentMaker.test.d.ts +0 -2
- package/dist/baseAppPaymentMaker.test.d.ts.map +0 -1
- package/dist/baseAppPaymentMaker.test.js +0 -107
- package/dist/baseAppPaymentMaker.test.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mainWalletPaymentMaker.d.ts +0 -22
- package/dist/mainWalletPaymentMaker.d.ts.map +0 -1
- package/dist/mainWalletPaymentMaker.test.d.ts +0 -2
- package/dist/mainWalletPaymentMaker.test.d.ts.map +0 -1
- package/dist/mainWalletPaymentMaker.test.js +0 -340
- package/dist/mainWalletPaymentMaker.test.js.map +0 -1
- package/dist/smartWalletHelpers.d.ts +0 -13
- package/dist/smartWalletHelpers.d.ts.map +0 -1
- package/dist/storage.d.ts +0 -51
- package/dist/storage.d.ts.map +0 -1
- package/dist/testHelpers.d.ts +0 -88
- package/dist/testHelpers.d.ts.map +0 -1
- package/dist/testHelpers.js +0 -202
- package/dist/testHelpers.js.map +0 -1
- package/dist/types.d.ts +0 -35
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
package/dist/baseAppAccount.js
CHANGED
|
@@ -6,12 +6,13 @@ import { base } from 'viem/chains';
|
|
|
6
6
|
import { BrowserStorage, IntermediaryStorage } from './storage.js';
|
|
7
7
|
import { toEphemeralSmartWallet } from './smartWalletHelpers.js';
|
|
8
8
|
import { ConsoleLogger } from '@atxp/common';
|
|
9
|
-
import { createBaseAccountSDK } from
|
|
10
|
-
import {
|
|
9
|
+
import { createBaseAccountSDK } from '@base-org/account';
|
|
10
|
+
import { getSpendPermissionModule } from './spendPermissionUtils.js';
|
|
11
|
+
|
|
11
12
|
const DEFAULT_ALLOWANCE = 10n;
|
|
12
13
|
const DEFAULT_PERIOD_IN_DAYS = 7;
|
|
13
14
|
const PAYMASTER_URL = 'https://api.developer.coinbase.com/rpc/v1/base/snPdXqIzOGhRkGNJvEHM5bl9Hm3yRO3m';
|
|
14
|
-
|
|
15
|
+
class BaseAppAccount {
|
|
15
16
|
static toStorageKey(userWalletAddress) {
|
|
16
17
|
return `atxp-base-permission-${userWalletAddress}`;
|
|
17
18
|
}
|
|
@@ -63,6 +64,9 @@ export class BaseAppAccount {
|
|
|
63
64
|
logger.info(`Generated ephemeral wallet: ${smartWallet.address}`);
|
|
64
65
|
await this.deploySmartWallet(smartWallet);
|
|
65
66
|
logger.info(`Deployed smart wallet: ${smartWallet.address}`);
|
|
67
|
+
// Dynamically import requestSpendPermission based on environment
|
|
68
|
+
// This function requires browser APIs and wallet interaction
|
|
69
|
+
const { requestSpendPermission } = await getSpendPermissionModule();
|
|
66
70
|
const permission = await requestSpendPermission({
|
|
67
71
|
account: config.walletAddress,
|
|
68
72
|
spender: smartWallet.address,
|
|
@@ -127,6 +131,11 @@ export class BaseAppAccount {
|
|
|
127
131
|
};
|
|
128
132
|
}
|
|
129
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Dynamically import the appropriate spend-permission module based on environment.
|
|
136
|
+
* Uses browser version as requestSpendPermission only exists there.
|
|
137
|
+
* Throws error if used in server-side environment.
|
|
138
|
+
*/
|
|
130
139
|
static clearAllStoredData(userWalletAddress, storage) {
|
|
131
140
|
// In non-browser environments, require an explicit storage parameter
|
|
132
141
|
if (!storage) {
|
|
@@ -140,4 +149,6 @@ export class BaseAppAccount {
|
|
|
140
149
|
storage.delete(this.toStorageKey(userWalletAddress));
|
|
141
150
|
}
|
|
142
151
|
}
|
|
143
|
-
|
|
152
|
+
|
|
153
|
+
export { BaseAppAccount };
|
|
154
|
+
//# sourceMappingURL=baseAppAccount.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseAppAccount.js","
|
|
1
|
+
{"version":3,"file":"baseAppAccount.js","sources":["../src/baseAppAccount.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import { USDC_CONTRACT_ADDRESS_BASE } from '@atxp/client';
|
|
2
2
|
import { ConsoleLogger } from '@atxp/common';
|
|
3
3
|
import { encodeFunctionData, parseEther } from 'viem';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// Convert string to base64
|
|
8
|
-
const base64 = typeof Buffer !== 'undefined'
|
|
9
|
-
? Buffer.from(data).toString('base64')
|
|
10
|
-
: btoa(data);
|
|
11
|
-
// Convert base64 to base64url
|
|
12
|
-
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
|
|
13
|
-
}
|
|
4
|
+
import { getSpendPermissionModule } from './spendPermissionUtils.js';
|
|
5
|
+
import { constructEIP1271Message, createEIP1271AuthData, createEIP1271JWT } from './eip1271JwtHelper.js';
|
|
6
|
+
|
|
14
7
|
const USDC_DECIMALS = 6;
|
|
15
8
|
// Minimal ERC20 ABI for transfer function
|
|
16
9
|
const ERC20_ABI = [
|
|
@@ -46,7 +39,7 @@ async function waitForTransactionConfirmations(smartWallet, txHash, confirmation
|
|
|
46
39
|
// Continue anyway - the transaction is already mined
|
|
47
40
|
}
|
|
48
41
|
}
|
|
49
|
-
|
|
42
|
+
class BaseAppPaymentMaker {
|
|
50
43
|
constructor(spendPermission, smartWallet, logger) {
|
|
51
44
|
if (!spendPermission) {
|
|
52
45
|
throw new Error('Spend permission is required');
|
|
@@ -61,63 +54,61 @@ export class BaseAppPaymentMaker {
|
|
|
61
54
|
async generateJWT({ paymentRequestId, codeChallenge }) {
|
|
62
55
|
// Generate EIP-1271 auth data for smart wallet authentication
|
|
63
56
|
const timestamp = Math.floor(Date.now() / 1000);
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
`Timestamp: ${timestamp}`,
|
|
71
|
-
`Nonce: ${nonce}`
|
|
72
|
-
];
|
|
73
|
-
if (codeChallenge) {
|
|
74
|
-
messageParts.push(`Code Challenge: ${codeChallenge}`);
|
|
75
|
-
}
|
|
76
|
-
if (paymentRequestId) {
|
|
77
|
-
messageParts.push(`Payment Request ID: ${paymentRequestId}`);
|
|
78
|
-
}
|
|
79
|
-
messageParts.push('', '', 'Sign this message to prove you control this wallet.');
|
|
80
|
-
const message = messageParts.join('\n');
|
|
57
|
+
const message = constructEIP1271Message({
|
|
58
|
+
walletAddress: this.smartWallet.account.address,
|
|
59
|
+
timestamp,
|
|
60
|
+
codeChallenge,
|
|
61
|
+
paymentRequestId
|
|
62
|
+
});
|
|
81
63
|
// Sign the message - this will return an ABI-encoded signature from the smart wallet
|
|
82
64
|
const signature = await this.smartWallet.account.signMessage({
|
|
83
65
|
message: message
|
|
84
66
|
});
|
|
85
|
-
|
|
86
|
-
const authData = {
|
|
87
|
-
type: 'EIP1271_AUTH',
|
|
67
|
+
const authData = createEIP1271AuthData({
|
|
88
68
|
walletAddress: this.smartWallet.account.address,
|
|
89
|
-
message
|
|
90
|
-
signature
|
|
91
|
-
timestamp
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
// Encode as base64url
|
|
97
|
-
const encodedAuth = toBase64Url(JSON.stringify(authData));
|
|
69
|
+
message,
|
|
70
|
+
signature,
|
|
71
|
+
timestamp,
|
|
72
|
+
codeChallenge,
|
|
73
|
+
paymentRequestId
|
|
74
|
+
});
|
|
75
|
+
const jwtToken = createEIP1271JWT(authData);
|
|
98
76
|
this.logger.info(`codeChallenge: ${codeChallenge}`);
|
|
99
77
|
this.logger.info(`paymentRequestId: ${paymentRequestId}`);
|
|
100
78
|
this.logger.info(`walletAddress: ${this.smartWallet.account.address}`);
|
|
101
|
-
this.logger.info(`Generated EIP-1271
|
|
102
|
-
return
|
|
79
|
+
this.logger.info(`Generated EIP-1271 JWT: ${jwtToken}`);
|
|
80
|
+
return jwtToken;
|
|
103
81
|
}
|
|
104
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
105
82
|
async makePayment(amount, currency, receiver, memo) {
|
|
106
83
|
if (currency !== 'USDC') {
|
|
107
84
|
throw new Error('Only usdc currency is supported; received ' + currency);
|
|
108
85
|
}
|
|
109
|
-
this.logger.info(`Making spendPermission payment of ${amount} ${currency} to ${receiver} on Base`);
|
|
86
|
+
this.logger.info(`Making spendPermission payment of ${amount} ${currency} to ${receiver} on Base with memo: ${memo}`);
|
|
110
87
|
// Convert amount to USDC units (6 decimals) as BigInt for spendPermission
|
|
111
88
|
const amountInUSDCUnits = BigInt(amount.multipliedBy(10 ** USDC_DECIMALS).toFixed(0));
|
|
89
|
+
// Dynamically import prepareSpendCallData based on environment
|
|
90
|
+
const { prepareSpendCallData } = await getSpendPermissionModule();
|
|
112
91
|
const spendCalls = await prepareSpendCallData(this.spendPermission, amountInUSDCUnits);
|
|
113
92
|
// Add a second call to transfer USDC from the smart wallet to the receiver
|
|
93
|
+
let transferCallData = encodeFunctionData({
|
|
94
|
+
abi: ERC20_ABI,
|
|
95
|
+
functionName: "transfer",
|
|
96
|
+
args: [receiver, amountInUSDCUnits],
|
|
97
|
+
});
|
|
98
|
+
// Append memo to transfer call data if present
|
|
99
|
+
// This works because the EVM ignores extra calldata beyond what a function expects.
|
|
100
|
+
// The ERC20 transfer() function only reads the first 68 bytes (4-byte selector + 32-byte address + 32-byte amount).
|
|
101
|
+
// Any additional data appended after those 68 bytes is safely ignored by the USDC contract
|
|
102
|
+
// but remains accessible in the transaction data for payment verification.
|
|
103
|
+
// This is a well-established pattern used by OpenSea, Uniswap, and other major protocols.
|
|
104
|
+
if (memo && memo.trim()) {
|
|
105
|
+
const memoHex = Buffer.from(memo.trim(), 'utf8').toString('hex');
|
|
106
|
+
transferCallData = (transferCallData + memoHex);
|
|
107
|
+
this.logger.info(`Added memo "${memo.trim()}" to transfer call`);
|
|
108
|
+
}
|
|
114
109
|
const transferCall = {
|
|
115
110
|
to: USDC_CONTRACT_ADDRESS_BASE,
|
|
116
|
-
data:
|
|
117
|
-
abi: ERC20_ABI,
|
|
118
|
-
functionName: "transfer",
|
|
119
|
-
args: [receiver, amountInUSDCUnits],
|
|
120
|
-
}),
|
|
111
|
+
data: transferCallData,
|
|
121
112
|
value: '0x0'
|
|
122
113
|
};
|
|
123
114
|
// Combine spend permission calls with the transfer call
|
|
@@ -152,4 +143,6 @@ export class BaseAppPaymentMaker {
|
|
|
152
143
|
return txHash;
|
|
153
144
|
}
|
|
154
145
|
}
|
|
155
|
-
|
|
146
|
+
|
|
147
|
+
export { BaseAppPaymentMaker };
|
|
148
|
+
//# sourceMappingURL=baseAppPaymentMaker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseAppPaymentMaker.js","
|
|
1
|
+
{"version":3,"file":"baseAppPaymentMaker.js","sources":["../src/baseAppPaymentMaker.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EIP-1271 JWT helper utilities for creating properly formatted JWTs
|
|
3
|
+
* from EIP-1271 auth data.
|
|
4
|
+
*/
|
|
5
|
+
// Helper function to convert to base64url that works in both Node.js and browsers
|
|
6
|
+
function toBase64Url(data) {
|
|
7
|
+
// Convert string to base64
|
|
8
|
+
const base64 = typeof Buffer !== 'undefined'
|
|
9
|
+
? Buffer.from(data).toString('base64')
|
|
10
|
+
: btoa(data);
|
|
11
|
+
// Convert base64 to base64url
|
|
12
|
+
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Convert EIP-1271 auth data to JWT format
|
|
16
|
+
* @param authData The EIP-1271 auth data (signature will be moved to JWT signature section)
|
|
17
|
+
* @returns JWT string in the format header.payload.signature
|
|
18
|
+
*/
|
|
19
|
+
function createEIP1271JWT(authData) {
|
|
20
|
+
// Create JWT header
|
|
21
|
+
const header = {
|
|
22
|
+
alg: 'EIP1271',
|
|
23
|
+
typ: 'JWT'
|
|
24
|
+
};
|
|
25
|
+
// Create payload without signature (signature goes in JWT signature section)
|
|
26
|
+
const payload = {
|
|
27
|
+
sub: authData.walletAddress,
|
|
28
|
+
iss: 'accounts.atxp.ai',
|
|
29
|
+
aud: 'https://auth.atxp.ai',
|
|
30
|
+
iat: authData.timestamp,
|
|
31
|
+
exp: authData.timestamp + 3600, // 1 hour expiration
|
|
32
|
+
msg: authData.message,
|
|
33
|
+
...(authData.code_challenge && { code_challenge: authData.code_challenge }),
|
|
34
|
+
...(authData.payment_request_id && { payment_request_id: authData.payment_request_id })
|
|
35
|
+
};
|
|
36
|
+
// Encode header and payload
|
|
37
|
+
const encodedHeader = toBase64Url(JSON.stringify(header));
|
|
38
|
+
const encodedPayload = toBase64Url(JSON.stringify(payload));
|
|
39
|
+
// EIP-1271 signature goes in JWT signature section
|
|
40
|
+
const encodedSignature = toBase64Url(authData.signature);
|
|
41
|
+
// Return JWT format: header.payload.signature
|
|
42
|
+
return `${encodedHeader}.${encodedPayload}.${encodedSignature}`;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create auth data structure from signing parameters
|
|
46
|
+
*/
|
|
47
|
+
function createEIP1271AuthData({ walletAddress, message, signature, timestamp, nonce, codeChallenge, paymentRequestId }) {
|
|
48
|
+
return {
|
|
49
|
+
type: 'EIP1271_AUTH',
|
|
50
|
+
walletAddress,
|
|
51
|
+
message,
|
|
52
|
+
signature,
|
|
53
|
+
timestamp,
|
|
54
|
+
...(nonce && { nonce }),
|
|
55
|
+
...(codeChallenge && { code_challenge: codeChallenge }),
|
|
56
|
+
...(paymentRequestId && { payment_request_id: paymentRequestId })
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Construct the standardized message format for EIP-1271 signing
|
|
61
|
+
*/
|
|
62
|
+
function constructEIP1271Message({ walletAddress, timestamp, nonce, codeChallenge, paymentRequestId }) {
|
|
63
|
+
const messageParts = [
|
|
64
|
+
`PayMCP Authorization Request`,
|
|
65
|
+
``,
|
|
66
|
+
`Wallet: ${walletAddress}`,
|
|
67
|
+
`Timestamp: ${timestamp}`
|
|
68
|
+
];
|
|
69
|
+
if (nonce !== undefined && nonce !== null) {
|
|
70
|
+
messageParts.push(`Nonce: ${nonce}`);
|
|
71
|
+
}
|
|
72
|
+
if (codeChallenge) {
|
|
73
|
+
messageParts.push(`Code Challenge: ${codeChallenge}`);
|
|
74
|
+
}
|
|
75
|
+
if (paymentRequestId) {
|
|
76
|
+
messageParts.push(`Payment Request ID: ${paymentRequestId}`);
|
|
77
|
+
}
|
|
78
|
+
messageParts.push('', '', 'Sign this message to prove you control this wallet.');
|
|
79
|
+
return messageParts.join('\n');
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export { constructEIP1271Message, createEIP1271AuthData, createEIP1271JWT };
|
|
83
|
+
//# sourceMappingURL=eip1271JwtHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eip1271JwtHelper.js","sources":["../src/eip1271JwtHelper.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|