@brninpay/sdk 0.1.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.
Files changed (95) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/LICENSE +203 -0
  3. package/README.md +5 -0
  4. package/dist/actor-client.d.ts +13 -0
  5. package/dist/actor-client.d.ts.map +1 -0
  6. package/dist/actor-client.js +44 -0
  7. package/dist/actor-client.js.map +1 -0
  8. package/dist/bundler/client.d.ts +20 -0
  9. package/dist/bundler/client.d.ts.map +1 -0
  10. package/dist/bundler/client.js +228 -0
  11. package/dist/bundler/client.js.map +1 -0
  12. package/dist/bundler/providers/alchemy.d.ts +3 -0
  13. package/dist/bundler/providers/alchemy.d.ts.map +1 -0
  14. package/dist/bundler/providers/alchemy.js +15 -0
  15. package/dist/bundler/providers/alchemy.js.map +1 -0
  16. package/dist/bundler/providers/pimlico.d.ts +3 -0
  17. package/dist/bundler/providers/pimlico.d.ts.map +1 -0
  18. package/dist/bundler/providers/pimlico.js +12 -0
  19. package/dist/bundler/providers/pimlico.js.map +1 -0
  20. package/dist/client.d.ts +24 -0
  21. package/dist/client.d.ts.map +1 -0
  22. package/dist/client.js +352 -0
  23. package/dist/client.js.map +1 -0
  24. package/dist/conversion.d.ts +3 -0
  25. package/dist/conversion.d.ts.map +1 -0
  26. package/dist/conversion.js +27 -0
  27. package/dist/conversion.js.map +1 -0
  28. package/dist/erc4337/builder.d.ts +15 -0
  29. package/dist/erc4337/builder.d.ts.map +1 -0
  30. package/dist/erc4337/builder.js +144 -0
  31. package/dist/erc4337/builder.js.map +1 -0
  32. package/dist/erc4337/providers/kernel.d.ts +23 -0
  33. package/dist/erc4337/providers/kernel.d.ts.map +1 -0
  34. package/dist/erc4337/providers/kernel.js +120 -0
  35. package/dist/erc4337/providers/kernel.js.map +1 -0
  36. package/dist/erc4337/providers/safe.d.ts +23 -0
  37. package/dist/erc4337/providers/safe.d.ts.map +1 -0
  38. package/dist/erc4337/providers/safe.js +117 -0
  39. package/dist/erc4337/providers/safe.js.map +1 -0
  40. package/dist/erc4337/providers/types.d.ts +88 -0
  41. package/dist/erc4337/providers/types.d.ts.map +1 -0
  42. package/dist/erc4337/providers/types.js +35 -0
  43. package/dist/erc4337/providers/types.js.map +1 -0
  44. package/dist/erc4337/smart-wallet.d.ts +16 -0
  45. package/dist/erc4337/smart-wallet.d.ts.map +1 -0
  46. package/dist/erc4337/smart-wallet.js +86 -0
  47. package/dist/erc4337/smart-wallet.js.map +1 -0
  48. package/dist/index.d.ts +16 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +15 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/modules/payment-intents.d.ts +99 -0
  53. package/dist/modules/payment-intents.d.ts.map +1 -0
  54. package/dist/modules/payment-intents.js +118 -0
  55. package/dist/modules/payment-intents.js.map +1 -0
  56. package/dist/modules/policies.d.ts +87 -0
  57. package/dist/modules/policies.d.ts.map +1 -0
  58. package/dist/modules/policies.js +61 -0
  59. package/dist/modules/policies.js.map +1 -0
  60. package/dist/paymaster/client.d.ts +11 -0
  61. package/dist/paymaster/client.d.ts.map +1 -0
  62. package/dist/paymaster/client.js +119 -0
  63. package/dist/paymaster/client.js.map +1 -0
  64. package/dist/runtimee.d.ts +4 -0
  65. package/dist/runtimee.d.ts.map +1 -0
  66. package/dist/runtimee.js +4 -0
  67. package/dist/runtimee.js.map +1 -0
  68. package/dist/types.d.ts +389 -0
  69. package/dist/types.d.ts.map +1 -0
  70. package/dist/types.js +2 -0
  71. package/dist/types.js.map +1 -0
  72. package/package.json +29 -0
  73. package/src/actor-client.ts +57 -0
  74. package/src/bundler/client.ts +306 -0
  75. package/src/bundler/providers/alchemy.ts +21 -0
  76. package/src/bundler/providers/pimlico.ts +17 -0
  77. package/src/client.ts +472 -0
  78. package/src/conversion.ts +25 -0
  79. package/src/erc4337/builder.ts +181 -0
  80. package/src/erc4337/providers/kernel.ts +136 -0
  81. package/src/erc4337/providers/safe.ts +133 -0
  82. package/src/erc4337/providers/types.ts +73 -0
  83. package/src/erc4337/smart-wallet.ts +115 -0
  84. package/src/index.ts +60 -0
  85. package/src/modules/payment-intents.ts +156 -0
  86. package/src/modules/policies.ts +79 -0
  87. package/src/paymaster/client.ts +155 -0
  88. package/src/runtimee.ts +3 -0
  89. package/src/types.ts +469 -0
  90. package/test/architecture/architecture-invariants.test.ts +61 -0
  91. package/test/client.test.ts +180 -0
  92. package/test/conversion.test.ts +42 -0
  93. package/test/runtimee.test.ts +30 -0
  94. package/tsconfig.json +9 -0
  95. package/vitest.config.ts +8 -0
package/dist/client.js ADDED
@@ -0,0 +1,352 @@
1
+ import { AllowlistDeniedError, AuthorizationError, BudgetExhaustedError, ErrorCode, ExecutionError, HmacVerificationError, NetworkError, RateLimitExceededError, ValidationError, deserializeBigInts, generateNonce, sha256Hex, signHmacSha256, } from '@brninpay/core';
2
+ import { ActorClient } from './actor-client.js';
3
+ import { PaymentIntentClient } from './modules/payment-intents.js';
4
+ import { PolicyClient } from './modules/policies.js';
5
+ const DEFAULT_BASE_URL = 'https://api.runtimee.dev';
6
+ const DEFAULT_TIMEOUT_MS = 15_000;
7
+ const DEFAULT_RETRY_POLICY = {
8
+ retries: 2,
9
+ baseDelayMs: 250,
10
+ maxDelayMs: 2_000,
11
+ retryMethods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
12
+ };
13
+ const defaultLogger = {
14
+ debug: () => undefined,
15
+ info: () => undefined,
16
+ warn: () => undefined,
17
+ error: () => undefined,
18
+ };
19
+ function validateBaseUrl(baseUrl) {
20
+ const url = new URL(baseUrl);
21
+ const isLocalhost = ['localhost', '127.0.0.1'].includes(url.hostname);
22
+ if (url.protocol !== 'https:' && !(url.protocol === 'http:' && isLocalhost)) {
23
+ throw new ValidationError('SDK baseUrl must use HTTPS unless it points to localhost for development', { baseUrl });
24
+ }
25
+ return url;
26
+ }
27
+ function sleep(ms) {
28
+ return new Promise((resolve) => setTimeout(resolve, ms));
29
+ }
30
+ function mergeRetryPolicy(policy) {
31
+ return {
32
+ retries: policy?.retries ?? DEFAULT_RETRY_POLICY.retries,
33
+ baseDelayMs: policy?.baseDelayMs ?? DEFAULT_RETRY_POLICY.baseDelayMs,
34
+ maxDelayMs: policy?.maxDelayMs ?? DEFAULT_RETRY_POLICY.maxDelayMs,
35
+ retryMethods: policy?.retryMethods ?? DEFAULT_RETRY_POLICY.retryMethods,
36
+ };
37
+ }
38
+ function buildQueryString(query) {
39
+ if (!query) {
40
+ return '';
41
+ }
42
+ const search = new URLSearchParams();
43
+ for (const [key, value] of Object.entries(query)) {
44
+ if (value !== undefined && value !== null) {
45
+ search.set(key, String(value));
46
+ }
47
+ }
48
+ const encoded = search.toString();
49
+ return encoded ? `?${encoded}` : '';
50
+ }
51
+ function normalizePath(path) {
52
+ return path.startsWith('/') ? path : `/${path}`;
53
+ }
54
+ function createAbortSignal(signal, timeoutMs) {
55
+ const controller = new AbortController();
56
+ const timeoutId = setTimeout(() => controller.abort('Request timed out'), timeoutMs);
57
+ const onAbort = () => controller.abort(signal?.reason);
58
+ signal?.addEventListener('abort', onAbort, { once: true });
59
+ return {
60
+ signal: controller.signal,
61
+ cleanup() {
62
+ clearTimeout(timeoutId);
63
+ signal?.removeEventListener('abort', onAbort);
64
+ },
65
+ };
66
+ }
67
+ function isRetriableStatus(status) {
68
+ return status === 408 || status === 409 || status === 425 || status === 429 || status >= 500;
69
+ }
70
+ function getRetryAfterMs(response) {
71
+ const retryAfter = response.headers.get('retry-after');
72
+ if (!retryAfter) {
73
+ return null;
74
+ }
75
+ const seconds = Number(retryAfter);
76
+ if (Number.isFinite(seconds)) {
77
+ return seconds * 1000;
78
+ }
79
+ const dateMs = new Date(retryAfter).getTime();
80
+ if (Number.isNaN(dateMs)) {
81
+ return null;
82
+ }
83
+ return Math.max(dateMs - Date.now(), 0);
84
+ }
85
+ function computeBackoffMs(attempt, policy, response) {
86
+ const retryAfterMs = response ? getRetryAfterMs(response) : null;
87
+ if (retryAfterMs !== null) {
88
+ return retryAfterMs;
89
+ }
90
+ const exponentialDelay = Math.min(policy.baseDelayMs * 2 ** Math.max(attempt - 1, 0), policy.maxDelayMs);
91
+ const jitter = Math.floor(Math.random() * Math.min(100, policy.baseDelayMs));
92
+ return exponentialDelay + jitter;
93
+ }
94
+ function formatRequestBody(body) {
95
+ if (body === undefined) {
96
+ return undefined;
97
+ }
98
+ return JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value));
99
+ }
100
+ async function parseResponsePayload(response) {
101
+ const contentType = response.headers.get('content-type') ?? '';
102
+ if (contentType.includes('application/json')) {
103
+ return deserializeBigInts(await response.json());
104
+ }
105
+ if (contentType.startsWith('text/')) {
106
+ return response.text();
107
+ }
108
+ if (response.status === 204) {
109
+ return null;
110
+ }
111
+ const text = await response.text();
112
+ if (!text) {
113
+ return null;
114
+ }
115
+ try {
116
+ return deserializeBigInts(JSON.parse(text));
117
+ }
118
+ catch {
119
+ return text;
120
+ }
121
+ }
122
+ function normalizeApiError(payload) {
123
+ if (payload && typeof payload === 'object') {
124
+ const value = payload;
125
+ return {
126
+ code: typeof value.code === 'string' ? value.code : undefined,
127
+ message: typeof value.message === 'string'
128
+ ? value.message
129
+ : typeof value.error === 'string'
130
+ ? value.error
131
+ : undefined,
132
+ details: value.details,
133
+ statusCode: typeof value.statusCode === 'number' ? value.statusCode : undefined,
134
+ error: typeof value.error === 'string' ? value.error : undefined,
135
+ };
136
+ }
137
+ if (typeof payload === 'string') {
138
+ return { message: payload, error: payload };
139
+ }
140
+ return {};
141
+ }
142
+ function mapApiError(status, payload) {
143
+ const apiError = normalizeApiError(payload);
144
+ const message = apiError.message ?? apiError.error ?? `Request failed with status ${status}`;
145
+ switch (apiError.code) {
146
+ case ErrorCode.VALIDATION_ERROR:
147
+ return new ValidationError(message, apiError.details);
148
+ case ErrorCode.BUDGET_EXHAUSTED: {
149
+ const details = (apiError.details ?? {});
150
+ return new BudgetExhaustedError(typeof details.policyId === 'string' ? details.policyId : 'unknown', BigInt(typeof details.budgetUsed === 'string' ? details.budgetUsed : '0'), BigInt(typeof details.budgetLimit === 'string' ? details.budgetLimit : '0'));
151
+ }
152
+ case ErrorCode.ALLOWLIST_DENIED: {
153
+ const details = (apiError.details ?? {});
154
+ return new AllowlistDeniedError(typeof details.policyId === 'string' ? details.policyId : 'unknown', typeof details.target === 'string' ? details.target : 'unknown');
155
+ }
156
+ case ErrorCode.RATE_LIMIT_EXCEEDED: {
157
+ const details = (apiError.details ?? {});
158
+ return new RateLimitExceededError(typeof details.policyId === 'string' ? details.policyId : 'unknown', typeof details.windowMs === 'number' ? details.windowMs : 0, typeof details.maxCalls === 'number' ? details.maxCalls : 0);
159
+ }
160
+ case ErrorCode.HMAC_VERIFICATION_FAILED:
161
+ return new HmacVerificationError(message, apiError.details);
162
+ }
163
+ if (status === 400) {
164
+ return new ValidationError(message, apiError.details);
165
+ }
166
+ if (status === 401 || status === 403) {
167
+ return new AuthorizationError(apiError.code ?? ErrorCode.AUTHORIZATION_ERROR, message, apiError.details);
168
+ }
169
+ if (status === 429) {
170
+ return new RateLimitExceededError('api', 0, 0, { cause: payload });
171
+ }
172
+ if (status >= 500) {
173
+ return new ExecutionError(apiError.code ?? ErrorCode.EXECUTION_ERROR, message, apiError.details);
174
+ }
175
+ return new ExecutionError(apiError.code ?? ErrorCode.EXECUTION_ERROR, message, apiError.details);
176
+ }
177
+ export class BrninpayClient {
178
+ actors;
179
+ paymentIntents;
180
+ policies;
181
+ fetchImplementation;
182
+ logger;
183
+ baseUrl;
184
+ apiKey;
185
+ apiSecret;
186
+ timeoutMs;
187
+ defaultHeaders;
188
+ retryPolicy;
189
+ requestInterceptors;
190
+ responseInterceptors;
191
+ constructor(config) {
192
+ if (!config.apiKey?.trim()) {
193
+ throw new ValidationError('Runtimee SDK requires a non-empty apiKey');
194
+ }
195
+ this.baseUrl = validateBaseUrl(config.baseUrl ?? DEFAULT_BASE_URL);
196
+ this.apiKey = config.apiKey;
197
+ this.apiSecret = config.apiSecret?.trim() || undefined;
198
+ this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
199
+ this.fetchImplementation = config.fetchImplementation ?? fetch.bind(globalThis);
200
+ this.logger = config.logger ?? defaultLogger;
201
+ this.defaultHeaders = { ...(config.headers ?? {}) };
202
+ this.retryPolicy = mergeRetryPolicy(config.retryPolicy);
203
+ this.requestInterceptors = config.requestInterceptors ?? [];
204
+ this.responseInterceptors = config.responseInterceptors ?? [];
205
+ if (!Number.isInteger(this.timeoutMs) || this.timeoutMs <= 0) {
206
+ throw new ValidationError('Runtimee SDK timeoutMs must be a positive integer', {
207
+ timeoutMs: config.timeoutMs,
208
+ });
209
+ }
210
+ this.actors = new ActorClient(this);
211
+ this.paymentIntents = new PaymentIntentClient(this);
212
+ this.policies = new PolicyClient(this);
213
+ }
214
+ async request(options) {
215
+ const method = options.method ?? 'GET';
216
+ const retryPolicy = mergeRetryPolicy(options.retryPolicy);
217
+ if (!retryPolicy.retryMethods.includes(method) && retryPolicy.retries > 0) {
218
+ this.logger.debug('Retries disabled for HTTP method', { method, path: options.path });
219
+ }
220
+ let lastError;
221
+ for (let attempt = 1; attempt <= retryPolicy.retries + 1; attempt += 1) {
222
+ try {
223
+ return await this.executeRequest({
224
+ ...options,
225
+ method,
226
+ retryPolicy,
227
+ attempt,
228
+ });
229
+ }
230
+ catch (error) {
231
+ lastError = error instanceof Error ? error : new Error(String(error));
232
+ const isLastAttempt = attempt > retryPolicy.retries;
233
+ if (isLastAttempt || !retryPolicy.retryMethods.includes(method)) {
234
+ throw lastError;
235
+ }
236
+ const response = error.response;
237
+ if (response && !isRetriableStatus(response.status)) {
238
+ throw lastError;
239
+ }
240
+ const backoffMs = computeBackoffMs(attempt, retryPolicy, response);
241
+ this.logger.warn('Retrying SDK request after failure', {
242
+ attempt,
243
+ method,
244
+ path: options.path,
245
+ backoffMs,
246
+ error: lastError.message,
247
+ });
248
+ await sleep(backoffMs);
249
+ }
250
+ }
251
+ throw lastError ?? new Error('SDK request failed without an error object');
252
+ }
253
+ async executeRequest(options) {
254
+ const path = normalizePath(options.path);
255
+ const url = new URL(`${this.baseUrl.origin}${path}${buildQueryString(options.query)}`);
256
+ const bodyText = formatRequestBody(options.body);
257
+ const headers = new Headers({
258
+ Accept: 'application/json',
259
+ 'Content-Type': 'application/json',
260
+ 'X-API-Key': this.apiKey,
261
+ ...this.defaultHeaders,
262
+ ...(options.headers ?? {}),
263
+ });
264
+ const timeoutMs = options.timeoutMs ?? this.timeoutMs;
265
+ const requestContext = {
266
+ url,
267
+ method: options.method,
268
+ headers,
269
+ bodyText,
270
+ timeoutMs,
271
+ attempt: options.attempt,
272
+ };
273
+ for (const interceptor of this.requestInterceptors) {
274
+ const nextContext = await interceptor(requestContext);
275
+ if (nextContext) {
276
+ requestContext.url = nextContext.url;
277
+ requestContext.method = nextContext.method;
278
+ requestContext.headers = nextContext.headers;
279
+ requestContext.bodyText = nextContext.bodyText;
280
+ requestContext.timeoutMs = nextContext.timeoutMs;
281
+ }
282
+ }
283
+ await this.applyAuthentication(requestContext);
284
+ const { signal, cleanup } = createAbortSignal(options.signal, requestContext.timeoutMs);
285
+ try {
286
+ const response = await this.fetchImplementation(requestContext.url, {
287
+ method: requestContext.method,
288
+ headers: requestContext.headers,
289
+ body: requestContext.bodyText,
290
+ signal,
291
+ });
292
+ const payload = await parseResponsePayload(response);
293
+ if (!response.ok) {
294
+ const mappedError = mapApiError(response.status, payload);
295
+ mappedError.response = response;
296
+ throw mappedError;
297
+ }
298
+ let responseContext = {
299
+ request: requestContext,
300
+ response,
301
+ data: payload,
302
+ };
303
+ for (const interceptor of this.responseInterceptors) {
304
+ const nextContext = await interceptor(responseContext);
305
+ if (nextContext) {
306
+ responseContext = nextContext;
307
+ }
308
+ }
309
+ return responseContext.data;
310
+ }
311
+ catch (error) {
312
+ if (error instanceof Error && error.name === 'AbortError') {
313
+ throw new NetworkError(`Request timed out after ${requestContext.timeoutMs}ms`, {
314
+ path,
315
+ method: requestContext.method,
316
+ });
317
+ }
318
+ if (error instanceof TypeError) {
319
+ throw new NetworkError(error.message, { path, method: requestContext.method }, { cause: error });
320
+ }
321
+ throw error;
322
+ }
323
+ finally {
324
+ cleanup();
325
+ }
326
+ }
327
+ async applyAuthentication(context) {
328
+ if (!this.apiSecret) {
329
+ context.headers.set('Authorization', `Bearer ${this.apiKey}`);
330
+ return;
331
+ }
332
+ const timestamp = new Date().toISOString();
333
+ const nonce = generateNonce();
334
+ const payloadHash = await sha256Hex(context.bodyText ?? '');
335
+ const signingPayload = [
336
+ timestamp,
337
+ nonce,
338
+ context.method.toUpperCase(),
339
+ `${context.url.pathname}${context.url.search}`,
340
+ payloadHash,
341
+ ].join('.');
342
+ const signature = await signHmacSha256({
343
+ secret: this.apiSecret,
344
+ message: signingPayload,
345
+ });
346
+ context.headers.set('X-API-Key', this.apiKey);
347
+ context.headers.set('X-Signature', signature);
348
+ context.headers.set('X-Timestamp', timestamp);
349
+ context.headers.set('X-Nonce', nonce);
350
+ }
351
+ }
352
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function parseUsdc(amount: string): bigint;
2
+ export declare function formatUsdc(amount: bigint): string;
3
+ //# sourceMappingURL=conversion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../src/conversion.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAahD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMjD"}
@@ -0,0 +1,27 @@
1
+ const USDC_DECIMALS = 6;
2
+ const MULTIPLIER = 10n ** BigInt(USDC_DECIMALS);
3
+ export function parseUsdc(amount) {
4
+ const parts = amount.split('.');
5
+ if (parts.length > 2)
6
+ throw new Error(`Invalid USDC amount: ${amount}`);
7
+ const whole = parts[0] || '0';
8
+ let fraction = parts[1] || '';
9
+ if (fraction.length > USDC_DECIMALS) {
10
+ fraction = fraction.slice(0, USDC_DECIMALS);
11
+ }
12
+ fraction = fraction.padEnd(USDC_DECIMALS, '0');
13
+ const full = whole + fraction;
14
+ const parsed = BigInt(full);
15
+ if (parsed < 0n)
16
+ throw new Error(`Negative USDC amount: ${amount}`);
17
+ return parsed;
18
+ }
19
+ export function formatUsdc(amount) {
20
+ const whole = amount / MULTIPLIER;
21
+ const fraction = amount % MULTIPLIER;
22
+ if (fraction === 0n)
23
+ return whole.toString();
24
+ const fractionStr = fraction.toString().padStart(USDC_DECIMALS, '0').replace(/0+$/, '');
25
+ return `${whole}.${fractionStr}`;
26
+ }
27
+ //# sourceMappingURL=conversion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversion.js","sourceRoot":"","sources":["../src/conversion.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,CAAC,CAAA;AACvB,MAAM,UAAU,GAAG,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,CAAA;AAE/C,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAA;IACvE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAA;IAC7B,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC7B,IAAI,QAAQ,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;QACpC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;IAC7C,CAAC;IACD,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;IAC9C,MAAM,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAA;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3B,IAAI,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAA;IACnE,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,MAAM,GAAG,UAAU,CAAA;IACjC,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;IACpC,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACvF,OAAO,GAAG,KAAK,IAAI,WAAW,EAAE,CAAA;AAClC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type Address, type UserOperation, type UserOperationCall } from '@brninpay/core';
2
+ import type { PreparedUserOperationContext, SmartWalletAccountProvider, UserOperationBuilderConfig } from '../types.js';
3
+ export declare class UserOperationBuilder {
4
+ private readonly config;
5
+ constructor(config: UserOperationBuilderConfig);
6
+ buildUSDCTransfer(parameters: {
7
+ recipient: Address;
8
+ amount: bigint;
9
+ }): UserOperationCall;
10
+ buildBatchOperations(calls: readonly UserOperationCall[]): readonly UserOperationCall[];
11
+ prepareUserOperation(provider: SmartWalletAccountProvider, context: PreparedUserOperationContext): Promise<UserOperation>;
12
+ private applyGasEstimate;
13
+ private getSuggestedFees;
14
+ }
15
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/erc4337/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EAEZ,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EACV,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,aAAa,CAAA;AAmBpB,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,0BAA0B;IAE/D,iBAAiB,CAAC,UAAU,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB;IAgBxF,oBAAoB,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,iBAAiB,EAAE;IAQjF,oBAAoB,CACxB,QAAQ,EAAE,0BAA0B,EACpC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,aAAa,CAAC;IAmEzB,OAAO,CAAC,gBAAgB;YA0BV,gBAAgB;CA0B/B"}
@@ -0,0 +1,144 @@
1
+ import { ValidationError, } from '@brninpay/core';
2
+ import { encodeFunctionData } from 'viem';
3
+ const USDC_ABI = [
4
+ {
5
+ type: 'function',
6
+ name: 'transfer',
7
+ stateMutability: 'nonpayable',
8
+ inputs: [
9
+ { name: 'to', type: 'address' },
10
+ { name: 'value', type: 'uint256' },
11
+ ],
12
+ outputs: [{ name: '', type: 'bool' }],
13
+ },
14
+ ];
15
+ function appendFactoryToInitCode(factory, factoryData) {
16
+ return `${factory}${factoryData.slice(2)}`;
17
+ }
18
+ export class UserOperationBuilder {
19
+ config;
20
+ constructor(config) {
21
+ this.config = config;
22
+ }
23
+ buildUSDCTransfer(parameters) {
24
+ if (parameters.amount <= 0n) {
25
+ throw new ValidationError('USDC transfer amount must be greater than zero');
26
+ }
27
+ return {
28
+ to: this.config.usdcAddress,
29
+ value: 0n,
30
+ data: encodeFunctionData({
31
+ abi: USDC_ABI,
32
+ functionName: 'transfer',
33
+ args: [parameters.recipient, parameters.amount],
34
+ }),
35
+ };
36
+ }
37
+ buildBatchOperations(calls) {
38
+ if (calls.length === 0) {
39
+ throw new ValidationError('buildBatchOperations requires at least one call');
40
+ }
41
+ return calls.map((call) => ({ ...call }));
42
+ }
43
+ async prepareUserOperation(provider, context) {
44
+ const callData = await provider.encodeCalls(context.calls);
45
+ const nonce = context.nonce ?? (await provider.getNonce(context.walletAddress));
46
+ const fees = await this.getSuggestedFees();
47
+ const stubSignature = await provider.getStubSignature();
48
+ const factoryArgs = context.walletDeployed ? {} : await provider.getFactoryArgs();
49
+ const baseUserOperation = this.config.entryPointVersion === 'v0.6'
50
+ ? {
51
+ version: 'v0.6',
52
+ sender: context.walletAddress,
53
+ nonce,
54
+ initCode: factoryArgs.factory && factoryArgs.factoryData
55
+ ? appendFactoryToInitCode(factoryArgs.factory, factoryArgs.factoryData)
56
+ : '0x',
57
+ callData,
58
+ callGasLimit: 0n,
59
+ verificationGasLimit: 0n,
60
+ preVerificationGas: 0n,
61
+ maxFeePerGas: fees.maxFeePerGas,
62
+ maxPriorityFeePerGas: fees.maxPriorityFeePerGas,
63
+ paymasterAndData: context.sponsorship?.version === 'v0.6' ? context.sponsorship.paymasterAndData : '0x',
64
+ signature: stubSignature,
65
+ }
66
+ : {
67
+ version: 'v0.7',
68
+ sender: context.walletAddress,
69
+ nonce,
70
+ factory: factoryArgs.factory ?? '0x',
71
+ factoryData: factoryArgs.factoryData ?? '0x',
72
+ callData,
73
+ callGasLimit: 0n,
74
+ verificationGasLimit: 0n,
75
+ preVerificationGas: 0n,
76
+ maxFeePerGas: fees.maxFeePerGas,
77
+ maxPriorityFeePerGas: fees.maxPriorityFeePerGas,
78
+ paymaster: context.sponsorship?.version === 'v0.7' ? context.sponsorship.paymaster : '0x',
79
+ paymasterVerificationGasLimit: context.sponsorship?.version === 'v0.7'
80
+ ? context.sponsorship.paymasterVerificationGasLimit
81
+ : 0n,
82
+ paymasterPostOpGasLimit: context.sponsorship?.version === 'v0.7'
83
+ ? context.sponsorship.paymasterPostOpGasLimit
84
+ : 0n,
85
+ paymasterData: context.sponsorship?.version === 'v0.7' ? context.sponsorship.paymasterData : '0x',
86
+ signature: stubSignature,
87
+ };
88
+ if (!this.config.bundlerClient) {
89
+ return this.applyGasEstimate(baseUserOperation, {
90
+ callGasLimit: 180000n,
91
+ verificationGasLimit: 120000n,
92
+ preVerificationGas: 60000n,
93
+ maxFeePerGas: fees.maxFeePerGas,
94
+ maxPriorityFeePerGas: fees.maxPriorityFeePerGas,
95
+ });
96
+ }
97
+ const gasEstimate = await this.config.bundlerClient.estimateUserOperationGas(baseUserOperation);
98
+ return this.applyGasEstimate(baseUserOperation, gasEstimate);
99
+ }
100
+ applyGasEstimate(userOperation, gasEstimate) {
101
+ if (userOperation.version === 'v0.6') {
102
+ return {
103
+ ...userOperation,
104
+ callGasLimit: gasEstimate.callGasLimit,
105
+ verificationGasLimit: gasEstimate.verificationGasLimit,
106
+ preVerificationGas: gasEstimate.preVerificationGas,
107
+ maxFeePerGas: gasEstimate.maxFeePerGas,
108
+ maxPriorityFeePerGas: gasEstimate.maxPriorityFeePerGas,
109
+ };
110
+ }
111
+ return {
112
+ ...userOperation,
113
+ callGasLimit: gasEstimate.callGasLimit,
114
+ verificationGasLimit: gasEstimate.verificationGasLimit,
115
+ preVerificationGas: gasEstimate.preVerificationGas,
116
+ maxFeePerGas: gasEstimate.maxFeePerGas,
117
+ maxPriorityFeePerGas: gasEstimate.maxPriorityFeePerGas,
118
+ paymasterVerificationGasLimit: gasEstimate.paymasterVerificationGasLimit ?? userOperation.paymasterVerificationGasLimit,
119
+ paymasterPostOpGasLimit: gasEstimate.paymasterPostOpGasLimit ?? userOperation.paymasterPostOpGasLimit,
120
+ };
121
+ }
122
+ async getSuggestedFees() {
123
+ if (this.config.publicClient?.estimateFeesPerGas) {
124
+ const fees = await this.config.publicClient.estimateFeesPerGas();
125
+ const gasPrice = fees.gasPrice ?? 0n;
126
+ return {
127
+ maxFeePerGas: fees.maxFeePerGas ?? gasPrice,
128
+ maxPriorityFeePerGas: fees.maxPriorityFeePerGas ?? gasPrice,
129
+ };
130
+ }
131
+ if (this.config.publicClient?.getGasPrice) {
132
+ const gasPrice = await this.config.publicClient.getGasPrice();
133
+ return {
134
+ maxFeePerGas: gasPrice,
135
+ maxPriorityFeePerGas: gasPrice,
136
+ };
137
+ }
138
+ return {
139
+ maxFeePerGas: 1000000000n,
140
+ maxPriorityFeePerGas: 100000000n,
141
+ };
142
+ }
143
+ }
144
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/erc4337/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { ProviderBaseConfig, SmartAccountProvider } from './types.js';
2
+ export declare class KernelAccountProvider implements SmartAccountProvider {
3
+ private readonly config;
4
+ readonly kind: "kernel";
5
+ readonly saltNonce: bigint;
6
+ constructor(config: ProviderBaseConfig);
7
+ get owner(): import("../../types.js").SmartAccountOwner;
8
+ get chainId(): number;
9
+ get entryPointAddress(): `0x${string}`;
10
+ get entryPointVersion(): import("@brninpay/core").EntryPointVersion;
11
+ get factoryAddress(): `0x${string}`;
12
+ getCounterfactualAddress(): Promise<`0x${string}`>;
13
+ getFactoryArgs(): Promise<{
14
+ factory: `0x${string}`;
15
+ factoryData: `0x${string}`;
16
+ }>;
17
+ encodeCalls(calls: Parameters<SmartAccountProvider['encodeCalls']>[0]): Promise<`0x${string}`>;
18
+ getNonce(address: `0x${string}`, key?: bigint): Promise<bigint>;
19
+ getStubSignature(): Promise<`0x${string}`>;
20
+ signUserOperation(userOperation: Parameters<SmartAccountProvider['signUserOperation']>[0]): Promise<`0x${string}`>;
21
+ isDeployed(address: `0x${string}`): Promise<boolean>;
22
+ }
23
+ //# sourceMappingURL=kernel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../../src/erc4337/providers/kernel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAmC1E,qBAAa,qBAAsB,YAAW,oBAAoB;IAIpD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;gBAEG,MAAM,EAAE,kBAAkB;IAIvD,IAAI,KAAK,+CAER;IAED,IAAI,OAAO,WAEV;IAED,IAAI,iBAAiB,kBAEpB;IAED,IAAI,iBAAiB,+CAEpB;IAED,IAAI,cAAc,kBAEjB;IAEK,wBAAwB;IASxB,cAAc;;;;IAWd,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAqBrE,QAAQ,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,EAAE,GAAG,SAAK;IASzC,gBAAgB;IAIhB,iBAAiB,CAAC,aAAa,EAAE,UAAU,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IAWzF,UAAU,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE;CAIxC"}