@crossmint/client-sdk-smart-wallet 0.1.0 → 0.1.2

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/index.d.cts CHANGED
@@ -1,11 +1,19 @@
1
- import { EVMBlockchainIncludingTestnet } from '@crossmint/common-sdk-base';
2
- export { EVMBlockchainIncludingTestnet as Blockchain, blockchainToChainId } from '@crossmint/common-sdk-base';
1
+ import { ObjectValues } from '@crossmint/common-sdk-base';
2
+ export { EVMBlockchainIncludingTestnet as Chain, blockchainToChainId } from '@crossmint/common-sdk-base';
3
3
  import { LocalAccount, EIP1193Provider, HttpTransport, Chain, Hex, PublicClient } from 'viem';
4
4
  import { PasskeyValidatorContractVersion } from '@zerodev/passkey-validator';
5
5
  import { SmartAccountClient } from 'permissionless';
6
6
  import { SmartAccount } from 'permissionless/accounts';
7
7
  import { EntryPoint } from 'permissionless/types/entrypoint';
8
8
 
9
+ declare const SmartWalletChain: {
10
+ readonly BASE: "base";
11
+ readonly POLYGON: "polygon";
12
+ readonly BASE_SEPOLIA: "base-sepolia";
13
+ readonly POLYGON_AMOY: "polygon-amoy";
14
+ };
15
+ type SmartWalletChain = ObjectValues<typeof SmartWalletChain>;
16
+
9
17
  type SmartWalletSDKInitParams = {
10
18
  clientApiKey: string;
11
19
  };
@@ -95,7 +103,11 @@ declare const SmartWalletErrors: {
95
103
  readonly ERROR_WALLET_CONFIG: "smart-wallet:wallet-config.error";
96
104
  readonly ERROR_ADMIN_MISMATCH: "smart-wallet:wallet-config.admin-mismatch";
97
105
  readonly ERROR_PASSKEY_MISMATCH: "smart-wallet:wallet-config.passkey-mismatch";
106
+ readonly ERROR_PASSKEY_PROMPT: "smart-wallet:passkey.prompt";
107
+ readonly ERROR_PASSKEY_INCOMPATIBLE_AUTHENTICATOR: "smart-wallet.passkey.incompatible-authenticator";
108
+ readonly ERROR_PASSKEY_REGISTRATION: "smart-wallet:passkey.registration";
98
109
  readonly ERROR_ADMIN_SIGNER_ALREADY_USED: "smart-wallet:wallet-config.admin-signer-already-used";
110
+ readonly ERROR_PROJECT_NONCUSTODIAL_WALLETS_NOT_ENABLED: "smart-wallet:wallet-config.non-custodial-wallets-not-enabled";
99
111
  readonly UNCATEGORIZED: "smart-wallet:uncategorized";
100
112
  };
101
113
  type SmartWalletErrorCode = (typeof SmartWalletErrors)[keyof typeof SmartWalletErrors];
@@ -149,6 +161,18 @@ declare class UserWalletAlreadyCreatedError extends SmartWalletSDKError {
149
161
  readonly code: "smart-wallet:user-wallet-already-created.error";
150
162
  constructor(userId: string);
151
163
  }
164
+ declare class PasskeyPromptError extends SmartWalletSDKError {
165
+ passkeyName: string;
166
+ constructor(passkeyName: string);
167
+ }
168
+ declare class PasskeyRegistrationError extends SmartWalletSDKError {
169
+ passkeyName: string;
170
+ constructor(passkeyName: string);
171
+ }
172
+ declare class PasskeyIncompatibleAuthenticatorError extends SmartWalletSDKError {
173
+ passkeyName: string;
174
+ constructor(passkeyName: string);
175
+ }
152
176
  declare class OutOfCreditsError extends SmartWalletSDKError {
153
177
  constructor(message?: string);
154
178
  }
@@ -160,6 +184,7 @@ declare class AdminAlreadyUsedError extends ConfigError {
160
184
  constructor();
161
185
  }
162
186
  declare class NonCustodialWalletsNotEnabledError extends ConfigError {
187
+ readonly code: "smart-wallet:wallet-config.non-custodial-wallets-not-enabled";
163
188
  constructor();
164
189
  }
165
190
 
@@ -188,7 +213,7 @@ declare abstract class BaseCrossmintService extends LoggerWrapper {
188
213
 
189
214
  declare class CrossmintWalletService extends BaseCrossmintService {
190
215
  idempotentCreateSmartWallet(user: UserParams, input: StoreSmartWalletParams): Promise<any>;
191
- getSmartWalletConfig(user: UserParams, chain: EVMBlockchainIncludingTestnet): Promise<{
216
+ getSmartWalletConfig(user: UserParams, chain: SmartWalletChain): Promise<{
192
217
  kernelVersion: string;
193
218
  entryPointVersion: string;
194
219
  userId: string;
@@ -197,12 +222,12 @@ declare class CrossmintWalletService extends BaseCrossmintService {
197
222
  }[];
198
223
  smartContractWalletAddress?: string;
199
224
  }>;
200
- fetchNFTs(address: string, chain: EVMBlockchainIncludingTestnet): Promise<any>;
225
+ fetchNFTs(address: string, chain: SmartWalletChain): Promise<any>;
201
226
  getPasskeyServerUrl(): string;
202
227
  }
203
228
 
204
229
  interface EVMToken {
205
- chain: EVMBlockchainIncludingTestnet;
230
+ chain: SmartWalletChain;
206
231
  contractAddress: string;
207
232
  }
208
233
  interface NFTEVMToken extends EVMToken {
@@ -236,7 +261,7 @@ type TransferType = ERC20TransferType | SFTTransferType | NFTTransferType;
236
261
  declare class EVMSmartWallet extends LoggerWrapper {
237
262
  private readonly crossmintService;
238
263
  private readonly accountClient;
239
- readonly chain: EVMBlockchainIncludingTestnet;
264
+ readonly chain: SmartWalletChain;
240
265
  /**
241
266
  * [viem](https://viem.sh/) clients that provide an interface for core wallet functionality.
242
267
  */
@@ -250,7 +275,7 @@ declare class EVMSmartWallet extends LoggerWrapper {
250
275
  */
251
276
  public: PublicClient;
252
277
  };
253
- constructor(crossmintService: CrossmintWalletService, accountClient: SmartWalletClient, publicClient: PublicClient<HttpTransport>, chain: EVMBlockchainIncludingTestnet);
278
+ constructor(crossmintService: CrossmintWalletService, accountClient: SmartWalletClient, publicClient: PublicClient<HttpTransport>, chain: SmartWalletChain);
254
279
  /**
255
280
  * The address of the smart wallet.
256
281
  */
@@ -283,7 +308,7 @@ declare class SmartWalletSDK extends LoggerWrapper {
283
308
  * const wallet = await smartWalletSDK.getOrCreateWallet({ jwt: "xxx" }, "base");
284
309
  * ```
285
310
  */
286
- getOrCreateWallet(user: UserParams, chain: EVMBlockchainIncludingTestnet, walletParams?: WalletParams): Promise<EVMSmartWallet>;
311
+ getOrCreateWallet(user: UserParams, chain: SmartWalletChain, walletParams?: WalletParams): Promise<EVMSmartWallet>;
287
312
  }
288
313
 
289
- export { AdminAlreadyUsedError, AdminMismatchError, ConfigError, CrossmintServiceError, type EOASigner, type ERC20TransferType, EVMSmartWallet, JWTDecryptionError, JWTExpiredError, JWTIdentifierError, JWTInvalidError, type NFTTransferType, NonCustodialWalletsNotEnabledError, NotAuthorizedError, OutOfCreditsError, PasskeyMismatchError, type PasskeySigner, type SFTTransferType, SmartWalletSDK, SmartWalletSDKError, type SmartWalletSDKInitParams, TransferError, type TransferType, type UserParams, UserWalletAlreadyCreatedError, type ViemAccount, type WalletParams };
314
+ export { AdminAlreadyUsedError, AdminMismatchError, ConfigError, CrossmintServiceError, type EOASigner, type ERC20TransferType, EVMSmartWallet, JWTDecryptionError, JWTExpiredError, JWTIdentifierError, JWTInvalidError, type NFTTransferType, NonCustodialWalletsNotEnabledError, NotAuthorizedError, OutOfCreditsError, PasskeyIncompatibleAuthenticatorError, PasskeyMismatchError, PasskeyPromptError, PasskeyRegistrationError, type PasskeySigner, type SFTTransferType, SmartWalletSDK, SmartWalletSDKError, type SmartWalletSDKInitParams, TransferError, type TransferType, type UserParams, UserWalletAlreadyCreatedError, type ViemAccount, type WalletParams };
package/dist/index.d.ts CHANGED
@@ -1,11 +1,19 @@
1
- import { EVMBlockchainIncludingTestnet } from '@crossmint/common-sdk-base';
2
- export { EVMBlockchainIncludingTestnet as Blockchain, blockchainToChainId } from '@crossmint/common-sdk-base';
1
+ import { ObjectValues } from '@crossmint/common-sdk-base';
2
+ export { EVMBlockchainIncludingTestnet as Chain, blockchainToChainId } from '@crossmint/common-sdk-base';
3
3
  import { LocalAccount, EIP1193Provider, HttpTransport, Chain, Hex, PublicClient } from 'viem';
4
4
  import { PasskeyValidatorContractVersion } from '@zerodev/passkey-validator';
5
5
  import { SmartAccountClient } from 'permissionless';
6
6
  import { SmartAccount } from 'permissionless/accounts';
7
7
  import { EntryPoint } from 'permissionless/types/entrypoint';
8
8
 
9
+ declare const SmartWalletChain: {
10
+ readonly BASE: "base";
11
+ readonly POLYGON: "polygon";
12
+ readonly BASE_SEPOLIA: "base-sepolia";
13
+ readonly POLYGON_AMOY: "polygon-amoy";
14
+ };
15
+ type SmartWalletChain = ObjectValues<typeof SmartWalletChain>;
16
+
9
17
  type SmartWalletSDKInitParams = {
10
18
  clientApiKey: string;
11
19
  };
@@ -95,7 +103,11 @@ declare const SmartWalletErrors: {
95
103
  readonly ERROR_WALLET_CONFIG: "smart-wallet:wallet-config.error";
96
104
  readonly ERROR_ADMIN_MISMATCH: "smart-wallet:wallet-config.admin-mismatch";
97
105
  readonly ERROR_PASSKEY_MISMATCH: "smart-wallet:wallet-config.passkey-mismatch";
106
+ readonly ERROR_PASSKEY_PROMPT: "smart-wallet:passkey.prompt";
107
+ readonly ERROR_PASSKEY_INCOMPATIBLE_AUTHENTICATOR: "smart-wallet.passkey.incompatible-authenticator";
108
+ readonly ERROR_PASSKEY_REGISTRATION: "smart-wallet:passkey.registration";
98
109
  readonly ERROR_ADMIN_SIGNER_ALREADY_USED: "smart-wallet:wallet-config.admin-signer-already-used";
110
+ readonly ERROR_PROJECT_NONCUSTODIAL_WALLETS_NOT_ENABLED: "smart-wallet:wallet-config.non-custodial-wallets-not-enabled";
99
111
  readonly UNCATEGORIZED: "smart-wallet:uncategorized";
100
112
  };
101
113
  type SmartWalletErrorCode = (typeof SmartWalletErrors)[keyof typeof SmartWalletErrors];
@@ -149,6 +161,18 @@ declare class UserWalletAlreadyCreatedError extends SmartWalletSDKError {
149
161
  readonly code: "smart-wallet:user-wallet-already-created.error";
150
162
  constructor(userId: string);
151
163
  }
164
+ declare class PasskeyPromptError extends SmartWalletSDKError {
165
+ passkeyName: string;
166
+ constructor(passkeyName: string);
167
+ }
168
+ declare class PasskeyRegistrationError extends SmartWalletSDKError {
169
+ passkeyName: string;
170
+ constructor(passkeyName: string);
171
+ }
172
+ declare class PasskeyIncompatibleAuthenticatorError extends SmartWalletSDKError {
173
+ passkeyName: string;
174
+ constructor(passkeyName: string);
175
+ }
152
176
  declare class OutOfCreditsError extends SmartWalletSDKError {
153
177
  constructor(message?: string);
154
178
  }
@@ -160,6 +184,7 @@ declare class AdminAlreadyUsedError extends ConfigError {
160
184
  constructor();
161
185
  }
162
186
  declare class NonCustodialWalletsNotEnabledError extends ConfigError {
187
+ readonly code: "smart-wallet:wallet-config.non-custodial-wallets-not-enabled";
163
188
  constructor();
164
189
  }
165
190
 
@@ -188,7 +213,7 @@ declare abstract class BaseCrossmintService extends LoggerWrapper {
188
213
 
189
214
  declare class CrossmintWalletService extends BaseCrossmintService {
190
215
  idempotentCreateSmartWallet(user: UserParams, input: StoreSmartWalletParams): Promise<any>;
191
- getSmartWalletConfig(user: UserParams, chain: EVMBlockchainIncludingTestnet): Promise<{
216
+ getSmartWalletConfig(user: UserParams, chain: SmartWalletChain): Promise<{
192
217
  kernelVersion: string;
193
218
  entryPointVersion: string;
194
219
  userId: string;
@@ -197,12 +222,12 @@ declare class CrossmintWalletService extends BaseCrossmintService {
197
222
  }[];
198
223
  smartContractWalletAddress?: string;
199
224
  }>;
200
- fetchNFTs(address: string, chain: EVMBlockchainIncludingTestnet): Promise<any>;
225
+ fetchNFTs(address: string, chain: SmartWalletChain): Promise<any>;
201
226
  getPasskeyServerUrl(): string;
202
227
  }
203
228
 
204
229
  interface EVMToken {
205
- chain: EVMBlockchainIncludingTestnet;
230
+ chain: SmartWalletChain;
206
231
  contractAddress: string;
207
232
  }
208
233
  interface NFTEVMToken extends EVMToken {
@@ -236,7 +261,7 @@ type TransferType = ERC20TransferType | SFTTransferType | NFTTransferType;
236
261
  declare class EVMSmartWallet extends LoggerWrapper {
237
262
  private readonly crossmintService;
238
263
  private readonly accountClient;
239
- readonly chain: EVMBlockchainIncludingTestnet;
264
+ readonly chain: SmartWalletChain;
240
265
  /**
241
266
  * [viem](https://viem.sh/) clients that provide an interface for core wallet functionality.
242
267
  */
@@ -250,7 +275,7 @@ declare class EVMSmartWallet extends LoggerWrapper {
250
275
  */
251
276
  public: PublicClient;
252
277
  };
253
- constructor(crossmintService: CrossmintWalletService, accountClient: SmartWalletClient, publicClient: PublicClient<HttpTransport>, chain: EVMBlockchainIncludingTestnet);
278
+ constructor(crossmintService: CrossmintWalletService, accountClient: SmartWalletClient, publicClient: PublicClient<HttpTransport>, chain: SmartWalletChain);
254
279
  /**
255
280
  * The address of the smart wallet.
256
281
  */
@@ -283,7 +308,7 @@ declare class SmartWalletSDK extends LoggerWrapper {
283
308
  * const wallet = await smartWalletSDK.getOrCreateWallet({ jwt: "xxx" }, "base");
284
309
  * ```
285
310
  */
286
- getOrCreateWallet(user: UserParams, chain: EVMBlockchainIncludingTestnet, walletParams?: WalletParams): Promise<EVMSmartWallet>;
311
+ getOrCreateWallet(user: UserParams, chain: SmartWalletChain, walletParams?: WalletParams): Promise<EVMSmartWallet>;
287
312
  }
288
313
 
289
- export { AdminAlreadyUsedError, AdminMismatchError, ConfigError, CrossmintServiceError, type EOASigner, type ERC20TransferType, EVMSmartWallet, JWTDecryptionError, JWTExpiredError, JWTIdentifierError, JWTInvalidError, type NFTTransferType, NonCustodialWalletsNotEnabledError, NotAuthorizedError, OutOfCreditsError, PasskeyMismatchError, type PasskeySigner, type SFTTransferType, SmartWalletSDK, SmartWalletSDKError, type SmartWalletSDKInitParams, TransferError, type TransferType, type UserParams, UserWalletAlreadyCreatedError, type ViemAccount, type WalletParams };
314
+ export { AdminAlreadyUsedError, AdminMismatchError, ConfigError, CrossmintServiceError, type EOASigner, type ERC20TransferType, EVMSmartWallet, JWTDecryptionError, JWTExpiredError, JWTIdentifierError, JWTInvalidError, type NFTTransferType, NonCustodialWalletsNotEnabledError, NotAuthorizedError, OutOfCreditsError, PasskeyIncompatibleAuthenticatorError, PasskeyMismatchError, PasskeyPromptError, PasskeyRegistrationError, type PasskeySigner, type SFTTransferType, SmartWalletSDK, SmartWalletSDKError, type SmartWalletSDKInitParams, TransferError, type TransferType, type UserParams, UserWalletAlreadyCreatedError, type ViemAccount, type WalletParams };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var it=Object.defineProperty,ct=Object.defineProperties;var lt=Object.getOwnPropertyDescriptors;var Te=Object.getOwnPropertySymbols;var pt=Object.prototype.hasOwnProperty,dt=Object.prototype.propertyIsEnumerable;var Se=(r,e,t)=>e in r?it(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,u=(r,e)=>{for(var t in e||(e={}))pt.call(e,t)&&Se(r,t,e[t]);if(Te)for(var t of Te(e))dt.call(e,t)&&Se(r,t,e[t]);return r},f=(r,e)=>ct(r,lt(e));var i=(r,e,t)=>new Promise((n,o)=>{var a=m=>{try{c(t.next(m))}catch(p){o(p)}},s=m=>{try{c(t.throw(m))}catch(p){o(p)}},c=m=>m.done?n(m.value):Promise.resolve(m.value).then(a,s);c((t=t.apply(r,e)).next())});import{EVMBlockchainIncludingTestnet as Ko,blockchainToChainId as Lo}from"@crossmint/common-sdk-base";function $(){return typeof window!="undefined"}function J(){return process.env.NODE_ENV==="test"?!1:window.location.origin.includes("localhost")}function Z(r,e){return(r==null?void 0:r.toLowerCase())===(e==null?void 0:e.toLowerCase())}var ie=!1,Y=class{logInfo(e,t){ie&&console.log(e,t)}logError(e,t){ie&&console.error(e,t)}logWarn(e,t){ie&&console.warn(e,t)}};var he="ZeroDev";var Ie="pub035be8a594b35be1887b6ba76c4029ca",Re="http://localhost:3000/api",_e="https://staging.crossmint.com/api",Ae="https://www.crossmint.com/api",De="9ee29857-8077-404b-9a9a-31eeea996a4a",Oe="023d4a21-d801-4450-b629-24439ab1369d",we="3d166617-da86-494b-9348-e8a13343bc04",Ce="e9314f9e-a13d-414f-b965-c591a0248243",be="1641cd99-c1ef-404a-9d26-a9dc67b1ba51",ke="3cfecfb6-9d7d-4ef6-acaa-ac8f79f6cd5a",ve="7ff22858-06f0-4f3a-8b46-5b41d8c75d0e",xe="3b24773b-d91e-4c01-8ce5-04807463bbca",We="d54706a0-304b-419e-8a33-03c26ba3f0e9",Ve="ce986d52-4f27-4a2b-b429-eb2322f15f32",Me="6204f336-643f-41af-94e1-f8d146c91675",Ne="3eb830c5-f91b-48e0-bb7d-dc30103a60b2",Be="6188b92b-993e-4f39-be22-56e4806416a8",Ue="8b8b6d1a-184c-4198-8f29-c07e63aad595",Ke="5535aa3b-4f9c-45af-9c38-0072369564a3",Le="b6a6db7c-65de-4f74-9d8f-f70d9c083531";var T="SCW_SDK",$e="0.1.0",ce="2024-06-09",Je="https://rpc.zerodev.app/api/v2/bundler/",Ze="https://rpc.zerodev.app/api/v2/paymaster/",F="https://api.developer.coinbase.com/rpc/v1/base-sepolia/6BTAmOQZ0x1YWtI24hIKKqdHWmVP1UXf",H="https://api.developer.coinbase.com/rpc/v1/base/6BTAmOQZ0x1YWtI24hIKKqdHWmVP1UXf";import{datadogLogs as pe}from"@datadog/browser-logs";var D=class{logInfo(e,t){le(e,"info",t)}logError(e,t){le(e,"error",t)}logWarn(e,t){le(e,"warn",t)}};function le(r,e,t){let n=t?f(u({},t),{service:T}):{service:T};mt(),pe.logger[e](r,n)}function mt(){pe.getInternalContext()==null&&pe.init({clientToken:Ie,site:"datadoghq.com",forwardErrorsToLogs:!1,sampleRate:100})}function ut(){return $()&&J()?new Y:new D}var{logInfo:G,logWarn:Ar,logError:I}=ut();import{isAddress as ze,publicActions as Tt}from"viem";var y={NOT_AUTHORIZED:"smart-wallet:not-authorized",TRANSFER:"smart-wallet:transfer.error",CROSSMINT_SERVICE:"smart-wallet:crossmint-service.error",ERROR_JWT_EXPIRED:"smart-wallet:not-authorized.jwt-expired",ERROR_JWT_INVALID:"smart-wallet:not-authorized.jwt-invalid",ERROR_JWT_DECRYPTION:"smart-wallet:not-authorized.jwt-decryption",ERROR_JWT_IDENTIFIER:"smart-wallet:not-authorized.jwt-identifier",ERROR_USER_WALLET_ALREADY_CREATED:"smart-wallet:user-wallet-already-created.error",ERROR_OUT_OF_CREDITS:"smart-wallet:out-of-credits.error",ERROR_WALLET_CONFIG:"smart-wallet:wallet-config.error",ERROR_ADMIN_MISMATCH:"smart-wallet:wallet-config.admin-mismatch",ERROR_PASSKEY_MISMATCH:"smart-wallet:wallet-config.passkey-mismatch",ERROR_ADMIN_SIGNER_ALREADY_USED:"smart-wallet:wallet-config.admin-signer-already-used",UNCATEGORIZED:"smart-wallet:uncategorized"},l=class extends Error{constructor(e,t,n=y.UNCATEGORIZED){super(e),this.details=t,this.code=n}},C=class extends l{constructor(e){super(e,void 0,y.TRANSFER)}},P=class extends l{constructor(e,t){super(e,void 0,y.CROSSMINT_SERVICE),this.status=t}},S=class extends l{constructor(e,t,n){super(e,y.ERROR_ADMIN_MISMATCH),this.required=t,this.used=n}},b=class extends l{constructor(e,t,n){super(e,y.ERROR_PASSKEY_MISMATCH),this.required=t,this.used=n}},R=class extends l{constructor(e){super(e,void 0,y.NOT_AUTHORIZED)}},k=class extends R{constructor(t){super(`JWT provided expired at timestamp ${t}`);this.code=y.ERROR_JWT_EXPIRED;this.expiredAt=t.toISOString()}},v=class extends R{constructor(){super("Invalid JWT provided");this.code=y.ERROR_JWT_INVALID}},x=class extends R{constructor(){super("Error decrypting JWT");this.code=y.ERROR_JWT_DECRYPTION}},W=class extends R{constructor(t){super(`Missing required identifier '${t}' in the JWT`);this.code=y.ERROR_JWT_IDENTIFIER;this.identifierKey=t}},_=class extends l{constructor(t){super(`The user with userId ${t.toString()} already has a wallet created for this project`);this.code=y.ERROR_USER_WALLET_ALREADY_CREATED}},V=class extends l{constructor(e){super("You've run out of Crossmint API credits. Visit https://docs.crossmint.com/docs/errors for more information",void 0,y.ERROR_OUT_OF_CREDITS)}},M=class extends l{constructor(e){super(e,void 0,y.ERROR_WALLET_CONFIG)}},N=class extends M{constructor(){super("This signer was already used to create another wallet. Please use a different signer.");this.code=y.ERROR_ADMIN_SIGNER_ALREADY_USED}},B=class extends M{constructor(){super("Non-custodial wallets are not enabled for this project")}};import{v4 as yt}from"uuid";var h=class{constructor(e,t={},n=yt()){this.extraInfo=t;this.logIdempotencyKey=n;return new Proxy(this,{get:(o,a,s)=>{let c=o[a],m=`[${T} - ${e} - ${String(a)}]`;return typeof c=="function"?(...p)=>{this.logInput(p,m);let d=c.apply(o,p);return d instanceof Promise?d.then(E=>(this.logOutput(E,m),E)).catch(E=>{throw this.logError(E,m),E}):(this.logOutput(d,m),d)}:Reflect.get(o,a,s)}})}logInput(e,t){O(`${t} input - ${g(e)} - extra_info - ${g(this.extraInfo)} - log_idempotency_key - ${this.logIdempotencyKey}`,f(u({args:e},this.extraInfo),{logIdempotencyKey:this.logIdempotencyKey}))}logOutput(e,t){O(`${t} output - ${g(e)} - extra_info - ${g(this.extraInfo)} - log_idempotency_key - ${this.logIdempotencyKey}`,f(u({res:e},this.extraInfo),{logIdempotencyKey:this.logIdempotencyKey}))}logError(e,t){I(`${t} threw_error - ${e} - extra_info - ${g(this.extraInfo)} - log_idempotency_key - ${this.logIdempotencyKey}`,u({err:e},this.extraInfo))}logPerformance(e,t){return A(e,t,this.extraInfo)}};function A(r,e,t){return i(this,null,function*(){let n=new Date().getTime(),o=yield e(),a=new Date().getTime()-n,s=u({durationInMs:a},t);return O(`[${T} - ${r} - TIME] - ${g(s)}`,{args:s}),o})}function Ye(r,e){return function(...t){let n=`[${T} - function: ${e}]`;O(`${n} input: ${g(t)}`,{args:t});try{let o=r.apply(this,t);return o instanceof Promise?o.then(a=>(O(`${n} output: ${g(a)}`,{res:a}),a)).catch(a=>{throw I(`${n} threw_error: ${g(a)}`,{err:a}),a}):(O(`${n} output: ${g(o)}`,{res:o}),o)}catch(o){throw I(`${n} threw_error: ${g(o)}`,{err:o}),o}}}function g(r){try{return r!=null?JSON.stringify(r,null,2):r}catch(e){return Et(r)}}function Et(r){let e={};for(let t in r)Object.prototype.hasOwnProperty.call(r,t)&&typeof r[t]!="object"&&typeof r[t]!="function"&&(e[t]=r[t]);return JSON.stringify(e,null,2)}function O(r,e){if(J()){console.log(r);return}G(r,e)}function Fe(r){var t;let e=r instanceof Error?r:{message:"Unknown error",name:"Unknown error"};if(!(e instanceof Error)&&((t=e.constructor)==null?void 0:t.name)!=="SyntheticBaseEvent")throw I("ERROR_TO_JSON_FAILED",{error:e}),new Error("[errorToJSON] err is not instanceof Error nor SyntheticBaseEvent");return JSON.parse(JSON.stringify(e,Object.getOwnPropertyNames(e)))}import{erc20Abi as Pt,erc721Abi as gt}from"viem";var He=[{inputs:[{internalType:"string",name:"uri_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"operator",type:"address"},{indexed:!1,internalType:"bool",name:"approved",type:"bool"}],name:"ApprovalForAll",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"operator",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"},{indexed:!1,internalType:"uint256[]",name:"values",type:"uint256[]"}],name:"TransferBatch",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"operator",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"id",type:"uint256"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"TransferSingle",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"string",name:"value",type:"string"},{indexed:!0,internalType:"uint256",name:"id",type:"uint256"}],name:"URI",type:"event"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"id",type:"uint256"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"accounts",type:"address[]"},{internalType:"uint256[]",name:"ids",type:"uint256[]"}],name:"balanceOfBatch",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"address",name:"operator",type:"address"}],name:"isApprovedForAll",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"},{internalType:"bytes",name:"data",type:"bytes"}],name:"safeBatchTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"id",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"safeTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"operator",type:"address"},{internalType:"bool",name:"approved",type:"bool"}],name:"setApprovalForAll",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"uri",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];function Ge({contract:r,config:e,from:t,to:n}){switch(e.token.type){case"ft":return{account:t,address:r,abi:Pt,functionName:"transfer",args:[n,e.amount]};case"sft":return{account:t,address:r,abi:He,functionName:"safeTransferFrom",args:[t.address,n,e.token.tokenId,e.quantity,"0x00"],tokenId:e.token.tokenId};case"nft":return{account:t,address:r,abi:gt,functionName:"safeTransferFrom",args:[t.address,n,e.token.tokenId],tokenId:e.token.tokenId}}}var U=class extends h{constructor(t,n,o,a){super("EVMSmartWallet",{chain:a,address:n.account.address});this.crossmintService=t;this.accountClient=n;this.chain=a,this.client={wallet:n,public:o}}get address(){return this.accountClient.account.address}transferToken(t,n){return i(this,null,function*(){return this.logPerformance("TRANSFER",()=>i(this,null,function*(){if(this.chain!==n.token.chain)throw new Error(`Chain mismatch: Expected ${n.token.chain}, but got ${this.chain}. Ensure you are interacting with the correct blockchain.`);if(!ze(t))throw new Error(`Invalid recipient address: '${t}' is not a valid EVM address.`);if(!ze(n.token.contractAddress))throw new Error(`Invalid contract address: '${n.token.contractAddress}' is not a valid EVM address.`);let o=Ge({contract:n.token.contractAddress,to:t,from:this.accountClient.account,config:n});try{let a=this.accountClient.extend(Tt),{request:s}=yield a.simulateContract(o);return yield a.writeContract(s)}catch(a){I("[TRANSFER] - ERROR_TRANSFERRING_TOKEN",{service:T,error:Fe(a),tokenId:o.tokenId,contractAddress:n.token.contractAddress,chain:n.token.chain});let s=o.tokenId==null?"":`:${o.tokenId}}`;throw new C(`Error transferring token ${n.token.contractAddress}${s}`)}}))})}nfts(){return i(this,null,function*(){return this.crossmintService.fetchNFTs(this.address,this.chain)})}};import{stringify as pr}from"viem";import{validateAPIKey as dr}from"@crossmint/common-sdk-base";import{validateAPIKey as St}from"@crossmint/common-sdk-base";var z=class{constructor(e={ERROR_JWT_INVALID:()=>new v,ERROR_JWT_DECRYPTION:()=>new x,ERROR_JWT_EXPIRED:({expiredAt:t})=>new k(new Date(t)),ERROR_JWT_IDENTIFIER:({identifierKey:t})=>new W(t),ERROR_USER_WALLET_ALREADY_CREATED:({userId:t})=>new _(t),ERROR_ADMIN_SIGNER_ALREADY_USED:()=>new N,ERROR_PROJECT_NONCUSTODIAL_WALLETS_NOT_ENABLED:()=>new B}){this.errors=e}throwErrorFromResponse(n){return i(this,arguments,function*({response:e,onServerErrorMessage:t}){if(!e.ok){if(e.status>=500)throw new P(t,e.status);if(e.status===402)throw new V;try{let o=yield e.json(),a=o.code;if(a!=null&&this.errors[a]!=null)throw this.errors[a](o);if(o.message!=null)throw new P(o.message,e.status)}catch(o){console.error("Error parsing response",o)}throw new P(yield e.text(),e.status)}})}};var K=class K extends h{constructor(e){super("BaseCrossmintService");let t=St(e);if(!t.isValid)throw new Error("API key invalid");this.crossmintAPIHeaders={accept:"application/json","content-type":"application/json","x-api-key":e},this.crossmintBaseUrl=this.getUrlFromEnv(t.environment),this.apiErrorService=new z}fetchCrossmintAPI(a){return i(this,arguments,function*(e,t={method:"GET"},n,o){return A("FETCH_CROSSMINT_API",()=>i(this,null,function*(){let s=`${this.crossmintBaseUrl}/${e}`,{body:c,method:m}=t,p;try{p=yield fetch(s,{body:c,method:m,headers:u(u({},this.crossmintAPIHeaders),o!=null&&{Authorization:`Bearer ${o}`})})}catch(d){throw new P(`Error fetching Crossmint API: ${d}`)}return p.ok||(yield this.apiErrorService.throwErrorFromResponse({response:p,onServerErrorMessage:n})),yield p.json()}),{endpoint:e})})}getUrlFromEnv(e){let t=K.urlMap[e];if(!t)throw console.log(" CrossmintService.urlMap: ",K.urlMap),new Error(`URL not found for environment: ${e}`);return t}};K.urlMap={development:Re,staging:_e,production:Ae};var j=K;import{EVMBlockchainIncludingTestnet as dn}from"@crossmint/common-sdk-base";var q=class extends j{idempotentCreateSmartWallet(e,t){return i(this,null,function*(){return this.fetchCrossmintAPI(`${ce}/sdk/smart-wallet`,{method:"PUT",body:JSON.stringify(t)},"Error creating abstract wallet. Please contact support",e.jwt)})}getSmartWalletConfig(e,t){return i(this,null,function*(){return this.fetchCrossmintAPI(`${ce}/sdk/smart-wallet/config?chain=${t}`,{method:"GET"},"Error getting smart wallet version configuration. Please contact support",e.jwt)})}fetchNFTs(e,t){return i(this,null,function*(){return this.fetchCrossmintAPI(`v1-alpha1/wallets/${t}:${e}/nfts`,{method:"GET"},`Error fetching NFTs for wallet: ${e}`)})}getPasskeyServerUrl(){return this.crossmintBaseUrl+"/internal/passkeys"}};import{EVMBlockchainIncludingTestnet as X}from"@crossmint/common-sdk-base";function ht(r){return[X.ZKYOTO,X.ZKATANA,X.ASTAR_ZKEVM,X.HYPERSONIC_TESTNET].includes(r)}function Q(r){return ht(r)}import{stringify as je}from"viem";var It=["sendTransaction","writeContract","sendUserOperation"],Rt=["signMessage","signTypedData"];function de(r){return It.includes(r)}function _t(r){return Rt.includes(r)}var ee=class{constructor(e){this.errorProcessor=e}decorate({crossmintChain:e,smartAccountClient:t}){return new Proxy(t,{get:(n,o,a)=>{let s=Reflect.get(n,o,a);return typeof s!="function"||typeof o!="string"||!(_t(o)||de(o))?s:(...c)=>A(`CrossmintSmartWallet.${o}`,()=>this.execute(n,o,s,c,e))}})}execute(e,t,n,o,a){return i(this,null,function*(){try{G(`[CrossmintSmartWallet.${t}] - params: ${je(o)}`);let s=de(t)?this.processTxnArgs(t,a,o):o;return yield n.call(e,...s)}catch(s){let c=de(t)?"signing":"sending transaction";throw this.errorProcessor.map(s,new l(`Error ${c}: ${s.message}`,je(s)))}})}processTxnArgs(e,t,n){if(e==="sendUserOperation"){let[{userOperation:a,middleware:s,account:c}]=n;return[{middleware:s,account:c,userOperation:this.addGelatoBundlerProperties(t,a)},...n.slice(1)]}let[o]=n;return[this.addGelatoBundlerProperties(t,o),...n.slice(1)]}addGelatoBundlerProperties(e,t){return Q(e)?f(u({},t),{maxFeePerGas:"0x0",maxPriorityFeePerGas:"0x0"}):t}};function te(r){return{pubKeyX:r.pubKeyX,pubKeyY:r.pubKeyY,passkeyName:r.passkeyName,type:"passkeys"}}import{createKernelAccountClient as rr}from"@zerodev/sdk";import{ENTRYPOINT_ADDRESS_V06 as nr,ENTRYPOINT_ADDRESS_V07 as or}from"permissionless";import{createPublicClient as ar,getAddress as sr,http as at}from"viem";import{blockchainToChainId as ir}from"@crossmint/common-sdk-base";var me=["0.3.1","0.3.0","0.2.4"];function qe(r){return me.includes(r)}var ue=["v0.6","v0.7"];function Xe(r){return ue.includes(r)}import{arbitrum as At,arbitrumNova as Dt,arbitrumSepolia as Ot,astarZkEVM as wt,astarZkyoto as Ct,base as bt,baseSepolia as kt,bsc as vt,goerli as xt,mainnet as Wt,optimism as Vt,optimismSepolia as Mt,polygon as Nt,polygonAmoy as Bt,sepolia as Ut}from"viem/chains";import{EVMBlockchainIncludingTestnet as Qe}from"@crossmint/common-sdk-base";var ye=r=>{let e=new Map([["ethereum",De],["polygon",Oe],["bsc",we],["optimism",Ce],["arbitrum",be],["ethereum-goerli",ke],["ethereum-sepolia",ve],["polygon-amoy",xe],["zkatana",We],["zkyoto",Ve],["arbitrum-sepolia",Ue],["base-goerli",null],["base-sepolia",Ne],["bsc-testnet",null],["optimism-goerli",null],["optimism-sepolia",Be],["zora-goerli",null],["zora-sepolia",null],["base",Ke],["zora",null],["arbitrumnova",Le],["astar-zkevm",Me],["apex",null]]).get(r);if(e==null)throw new Error(`ZeroDev project id not found for chain ${r}`);return e},re=r=>{switch(r){case"ethereum":return Wt;case"ethereum-goerli":return xt;case"ethereum-sepolia":return Ut;case"polygon":return Nt;case"polygon-amoy":return Bt;case"optimism":return Vt;case"optimism-sepolia":return Mt;case"arbitrum":return At;case"arbitrumnova":return Dt;case"arbitrum-sepolia":return Ot;case"base":return bt;case"base-sepolia":return kt;case"zkyoto":return Ct;case"astar-zkevm":return wt;case"bsc":return vt;default:throw new Error(`Unsupported network: ${r}`)}},Ee=r=>{switch(r){case Qe.BASE_SEPOLIA:return F;case Qe.BASE:return H;default:return Je+ye(r)+"?bundlerProvider=STACKUP"}};import{providerToSmartAccountSigner as Kt}from"permissionless";var et=Ye(e=>i(void 0,[e],function*({walletParams:r}){if(Lt(r.signer))return yield Kt(r.signer);if($t(r.signer))return r.signer.account;{let t=r.signer;throw new l(`The signer type ${t.type} is not supported`)}}),"createOwnerSigner");function Lt(r){return r&&typeof r.request=="function"}function $t(r){return r&&r.type==="VIEM_ACCOUNT"}import{signerToEcdsaValidator as Jt}from"@zerodev/ecdsa-validator";import{createKernelAccount as Zt}from"@zerodev/sdk";var ne=class{get(m,p){return i(this,arguments,function*({chain:e,publicClient:t,entryPoint:n,walletParams:o,kernelVersion:a,user:s},c){let d=yield et({chain:e,walletParams:o});if(c!=null&&!Z(d.address,c.eoaAddress))throw new S(`User '${s.id}' has an existing wallet with an eoa signer '${c.eoaAddress}', this does not match input eoa signer '${d.address}'.`,c,{type:"eoa",eoaAddress:c.eoaAddress});let E=yield Jt(t,{signer:d,entryPoint:n.address,kernelVersion:a});return{account:yield Zt(t,{plugins:{sudo:E},index:BigInt(0),entryPoint:n.address,kernelVersion:a}),signerData:{eoaAddress:d.address,type:"eoa"}}})}};import{PasskeyValidatorContractVersion as Yt,WebAuthnMode as Ft,toPasskeyValidator as Ht}from"@zerodev/passkey-validator";import{createKernelAccount as Gt}from"@zerodev/sdk";import{toWebAuthnKey as zt}from"@zerodev/webauthn-key";function tt(r){return r.walletParams.signer.type==="PASSKEY"}var oe=class{constructor(e){this.crossmintService=e}get(c,m){return i(this,arguments,function*({user:e,publicClient:t,walletParams:n,entryPoint:o,kernelVersion:a},s){var ge;let p=(ge=n.signer.passkeyName)!=null?ge:e.id;if(s!=null&&s.passkeyName!==p)throw new b(`User '${e.id}' has an existing wallet created with a passkey named '${s.passkeyName}', this does match input passkey name '${p}'.`,te(s));let d=yield this.getPasskey(e,p,s),E=Yt.V0_0_2,w=s==null?E:s.validatorContractVersion,L=yield Ht(t,{webAuthnKey:d,entryPoint:o.address,validatorContractVersion:w,kernelVersion:a}),st=yield Gt(t,{plugins:{sudo:L},entryPoint:o.address,kernelVersion:a});return{signerData:this.getSignerData(L,w,p),account:st}})}getPasskey(e,t,n){return i(this,null,function*(){return n!=null?{pubX:BigInt(n.pubKeyX),pubY:BigInt(n.pubKeyY),authenticatorId:n.authenticatorId,authenticatorIdHash:n.authenticatorIdHash}:zt({passkeyName:t,passkeyServerUrl:this.crossmintService.getPasskeyServerUrl(),mode:Ft.Register,passkeyServerHeaders:this.createPasskeysServerHeaders(e)})})}getSignerData(e,t,n){return f(u({},jt(e.getSerializedData())),{passkeyName:n,validatorContractVersion:t,domain:window.location.hostname,type:"passkeys"})}createPasskeysServerHeaders(e){return{"x-api-key":this.crossmintService.crossmintAPIHeaders["x-api-key"],Authorization:`Bearer ${e.jwt}`}}},jt=r=>{let e=qt(r),t=new TextDecoder().decode(e);return JSON.parse(t)};function qt(r){let e=atob(r);return Uint8Array.from(e,t=>t.codePointAt(0))}import{createZeroDevPaymasterClient as Xt}from"@zerodev/sdk";import{http as Qt}from"viem";import{EVMBlockchainIncludingTestnet as rt}from"@crossmint/common-sdk-base";function nt(r){return!Q(r)}var er=r=>{switch(r){case rt.BASE_SEPOLIA:return F;case rt.BASE:return H;default:return Ze+ye(r)+"?paymasterProvider=STACKUP"}};function ot({entryPoint:r,chain:e}){return{middleware:{sponsorUserOperation:n=>i(this,[n],function*({userOperation:t}){return Xt({chain:re(e),transport:Qt(er(e)),entryPoint:r}).sponsorUserOperation({userOperation:t,entryPoint:r})})}}}var ae=class{constructor(e,t,n=new fe(new ne,new oe(e))){this.crossmintWalletService=e;this.clientDecorator=t;this.accountFactory=n}getOrCreate(e,t,n){return i(this,null,function*(){let{entryPoint:o,kernelVersion:a,existingSignerConfig:s,smartContractWalletAddress:c,userId:m}=yield this.fetchConfig(e,t),p=ar({transport:at(Ee(t))}),{account:d,signerData:E}=yield this.accountFactory.get({chain:t,walletParams:n,publicClient:p,user:f(u({},e),{id:m}),entryPoint:o,kernelVersion:a},s);if(c!=null&&!Z(c,d.address))throw new _(m);s==null&&(yield this.crossmintWalletService.idempotentCreateSmartWallet(e,{type:he,smartContractWalletAddress:d.address,signerData:E,version:0,baseLayer:"evm",chainId:ir(t),entryPointVersion:o.version,kernelVersion:a}));let w=rr(u({account:d,chain:re(t),entryPoint:d.entryPoint,bundlerTransport:at(Ee(t))},nt(t)&&ot({entryPoint:d.entryPoint,chain:t}))),L=this.clientDecorator.decorate({crossmintChain:t,smartAccountClient:w});return new U(this.crossmintWalletService,L,p,t)})}fetchConfig(e,t){return i(this,null,function*(){let{entryPointVersion:n,kernelVersion:o,signers:a,smartContractWalletAddress:s,userId:c}=yield this.crossmintWalletService.getSmartWalletConfig(e,t);if(!qe(o))throw new l(`Unsupported kernel version. Supported versions: ${me.join(", ")}. Version used: ${o}, Please contact support`);if(!Xe(n))throw new l(`Unsupported entry point version. Supported versions: ${ue.join(", ")}. Version used: ${n}. Please contact support`);if(n==="v0.7"&&o.startsWith("0.2")||n==="v0.6"&&o.startsWith("0.3"))throw new l(`Unsupported combination: entryPoint ${n} and kernel version ${o}. Please contact support`);return{entryPoint:{version:n,address:n==="v0.6"?nr:or},kernelVersion:o,userId:c,existingSignerConfig:this.getSigner(a),smartContractWalletAddress:s!=null?sr(s):void 0}})}getSigner(e){if(e.length!==0){if(e.length>1)throw new P("Invalid wallet signer configuration. Please contact support");return e[0].signerData}}},fe=class{constructor(e,t){this.eoa=e;this.passkey=t}get(e,t){if(tt(e)){if(t!=null&&(t==null?void 0:t.type)!=="passkeys")throw new S(`Cannot create wallet with passkey signer for user '${e.user.id}', they have an existing wallet with eoa signer '${t.eoaAddress}.'`,t);return this.passkey.get(e,t)}if(t!=null&&(t==null?void 0:t.type)!=="eoa")throw new S(`Cannot create wallet with eoa signer for user '${e.user.id}', they already have a wallet with a passkey named '${t.passkeyName}' as it's signer.`,te(t));return this.eoa.get(e,t)}};import{BaseError as cr,stringify as lr}from"viem";var se=class{constructor(e){this.logger=e}map(e,t){return this.record(e),e instanceof l||e instanceof cr?e:t}record(e){let t=e instanceof Error?e.message:String(e);this.logger.logError(`Smart Wallet SDK Error: ${t}`,{stack:e instanceof Error?e.stack:void 0,name:e instanceof Error?e.name:"UnknownError",details:lr(e),domain:window.location.hostname,sdk_version:$e})}};var Pe=class r extends h{constructor(t,n){super("SmartWalletSDK");this.smartWalletService=t;this.errorProcessor=n}static init({clientApiKey:t}){if(!$())throw new l("Smart Wallet SDK should only be used client side.");if(!dr(t).isValid)throw new Error("API key invalid");let o=new q(t),a=new se(new D);return new r(new ae(o,new ee(a)),a)}getOrCreateWallet(a,s){return i(this,arguments,function*(t,n,o={signer:{type:"PASSKEY"}}){return A("GET_OR_CREATE_WALLET",()=>i(this,null,function*(){try{return yield this.smartWalletService.getOrCreate(t,n,o)}catch(c){throw this.errorProcessor.map(c,new l(`Wallet creation failed: ${c.message}.`,pr(c)))}}),{user:t,chain:n})})}};export{N as AdminAlreadyUsedError,S as AdminMismatchError,Ko as Blockchain,M as ConfigError,P as CrossmintServiceError,U as EVMSmartWallet,x as JWTDecryptionError,k as JWTExpiredError,W as JWTIdentifierError,v as JWTInvalidError,B as NonCustodialWalletsNotEnabledError,R as NotAuthorizedError,V as OutOfCreditsError,b as PasskeyMismatchError,Pe as SmartWalletSDK,l as SmartWalletSDKError,C as TransferError,_ as UserWalletAlreadyCreatedError,Lo as blockchainToChainId};
1
+ var Ht=Object.defineProperty,jt=Object.defineProperties;var zt=Object.getOwnPropertyDescriptors;var Rt=Object.getOwnPropertySymbols;var qt=Object.prototype.hasOwnProperty,Xt=Object.prototype.propertyIsEnumerable;var Tt=(r,t,e)=>t in r?Ht(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,d=(r,t)=>{for(var e in t||(t={}))qt.call(t,e)&&Tt(r,e,t[e]);if(Rt)for(var e of Rt(t))Xt.call(t,e)&&Tt(r,e,t[e]);return r},E=(r,t)=>jt(r,zt(t));var i=(r,t,e)=>new Promise((n,a)=>{var o=u=>{try{l(e.next(u))}catch(p){a(p)}},s=u=>{try{l(e.throw(u))}catch(p){a(p)}},l=u=>u.done?n(u.value):Promise.resolve(u.value).then(o,s);l((e=e.apply(r,t)).next())});import{blockchainToChainId as Sa,EVMBlockchainIncludingTestnet as ga}from"@crossmint/common-sdk-base";function J(){return typeof window!="undefined"}function G(){return process.env.NODE_ENV==="test"?!1:window.location.origin.includes("localhost")}function H(r,t){return(r==null?void 0:r.toLowerCase())===(t==null?void 0:t.toLowerCase())}var lt=!1,j=class{logInfo(t,e){lt&&console.log(t,e)}logError(t,e){lt&&console.error(t,e)}logWarn(t,e){lt&&console.warn(t,e)}};var At="ZeroDev";var wt="pub035be8a594b35be1887b6ba76c4029ca",It="http://localhost:3000/api",Ct="https://staging.crossmint.com/api",_t="https://www.crossmint.com/api",P="SCW_SDK",Ot="0.1.0",ct="2024-06-09",Wt="https://rpc.zerodev.app/api/v2/bundler/",bt="https://rpc.zerodev.app/api/v2/paymaster/";import{datadogLogs as mt}from"@datadog/browser-logs";var C=class{logInfo(t,e){pt(t,"info",e)}logError(t,e){pt(t,"error",e)}logWarn(t,e){pt(t,"warn",e)}};function pt(r,t,e){let n=e?E(d({},e),{service:P}):{service:P};Zt(),mt.logger[t](r,n)}function Zt(){mt.getInternalContext()==null&&mt.init({clientToken:wt,site:"datadoghq.com",forwardErrorsToLogs:!1,sampleRate:100})}function Qt(){return J()&&G()?new j:new C}var{logInfo:z,logWarn:rr,logError:T}=Qt();import{isAddress as Nt,publicActions as oe}from"viem";var y={NOT_AUTHORIZED:"smart-wallet:not-authorized",TRANSFER:"smart-wallet:transfer.error",CROSSMINT_SERVICE:"smart-wallet:crossmint-service.error",ERROR_JWT_EXPIRED:"smart-wallet:not-authorized.jwt-expired",ERROR_JWT_INVALID:"smart-wallet:not-authorized.jwt-invalid",ERROR_JWT_DECRYPTION:"smart-wallet:not-authorized.jwt-decryption",ERROR_JWT_IDENTIFIER:"smart-wallet:not-authorized.jwt-identifier",ERROR_USER_WALLET_ALREADY_CREATED:"smart-wallet:user-wallet-already-created.error",ERROR_OUT_OF_CREDITS:"smart-wallet:out-of-credits.error",ERROR_WALLET_CONFIG:"smart-wallet:wallet-config.error",ERROR_ADMIN_MISMATCH:"smart-wallet:wallet-config.admin-mismatch",ERROR_PASSKEY_MISMATCH:"smart-wallet:wallet-config.passkey-mismatch",ERROR_PASSKEY_PROMPT:"smart-wallet:passkey.prompt",ERROR_PASSKEY_INCOMPATIBLE_AUTHENTICATOR:"smart-wallet.passkey.incompatible-authenticator",ERROR_PASSKEY_REGISTRATION:"smart-wallet:passkey.registration",ERROR_ADMIN_SIGNER_ALREADY_USED:"smart-wallet:wallet-config.admin-signer-already-used",ERROR_PROJECT_NONCUSTODIAL_WALLETS_NOT_ENABLED:"smart-wallet:wallet-config.non-custodial-wallets-not-enabled",UNCATEGORIZED:"smart-wallet:uncategorized"},c=class extends Error{constructor(t,e,n=y.UNCATEGORIZED){super(t),this.details=e,this.code=n}},O=class extends c{constructor(t){super(t,void 0,y.TRANSFER)}},S=class extends c{constructor(t,e){super(t,void 0,y.CROSSMINT_SERVICE),this.status=e}},h=class extends c{constructor(t,e,n){super(t,y.ERROR_ADMIN_MISMATCH),this.required=e,this.used=n}},W=class extends c{constructor(t,e,n){super(t,y.ERROR_PASSKEY_MISMATCH),this.required=e,this.used=n}},A=class extends c{constructor(t){super(t,void 0,y.NOT_AUTHORIZED)}},b=class extends A{constructor(e){super(`JWT provided expired at timestamp ${e}`);this.code=y.ERROR_JWT_EXPIRED;this.expiredAt=e.toISOString()}},D=class extends A{constructor(){super("Invalid JWT provided");this.code=y.ERROR_JWT_INVALID}},v=class extends A{constructor(){super("Error decrypting JWT");this.code=y.ERROR_JWT_DECRYPTION}},x=class extends A{constructor(e){super(`Missing required identifier '${e}' in the JWT`);this.code=y.ERROR_JWT_IDENTIFIER;this.identifierKey=e}},w=class extends c{constructor(e){super(`The user with userId ${e.toString()} already has a wallet created for this project`);this.code=y.ERROR_USER_WALLET_ALREADY_CREATED}},k=class extends c{constructor(t){super(`Prompt was either cancelled or timed out for passkey ${t}`,void 0,y.ERROR_PASSKEY_PROMPT),this.passkeyName=t}},N=class extends c{constructor(t){super(`Registration for passkey ${t} failed, either the registration took too long, or passkey signature vaildation failed.`,void 0,y.ERROR_PASSKEY_REGISTRATION),this.passkeyName=t}},V=class extends c{constructor(t){super(`User selected authenticator for passkey ${t} is not compatible with Crossmint's Smart Wallets.`,void 0,y.ERROR_PASSKEY_INCOMPATIBLE_AUTHENTICATOR),this.passkeyName=t}},M=class extends c{constructor(t){super("You've run out of Crossmint API credits. Visit https://docs.crossmint.com/docs/errors for more information",void 0,y.ERROR_OUT_OF_CREDITS)}},L=class extends c{constructor(t){super(t,void 0,y.ERROR_WALLET_CONFIG)}},U=class extends L{constructor(){super("This signer was already used to create another wallet. Please use a different signer.");this.code=y.ERROR_ADMIN_SIGNER_ALREADY_USED}},K=class extends L{constructor(){super("Non-custodial wallets are not enabled for this project");this.code=y.ERROR_PROJECT_NONCUSTODIAL_WALLETS_NOT_ENABLED}};import{v4 as te}from"uuid";var R=class{constructor(t,e={},n=te()){this.extraInfo=e;this.logIdempotencyKey=n;return new Proxy(this,{get:(a,o,s)=>{let l=a[o],u=`[${P} - ${t} - ${String(o)}]`;return typeof l=="function"?(...p)=>{this.logInput(p,u);let m=l.apply(a,p);return m instanceof Promise?m.then(f=>(this.logOutput(f,u),f)).catch(f=>{throw this.logError(f,u),f}):(this.logOutput(m,u),m)}:Reflect.get(a,o,s)}})}logInput(t,e){_(`${e} input - ${g(t)} - extra_info - ${g(this.extraInfo)} - log_idempotency_key - ${this.logIdempotencyKey}`,E(d({args:t},this.extraInfo),{logIdempotencyKey:this.logIdempotencyKey}))}logOutput(t,e){_(`${e} output - ${g(t)} - extra_info - ${g(this.extraInfo)} - log_idempotency_key - ${this.logIdempotencyKey}`,E(d({res:t},this.extraInfo),{logIdempotencyKey:this.logIdempotencyKey}))}logError(t,e){T(`${e} threw_error - ${t} - extra_info - ${g(this.extraInfo)} - log_idempotency_key - ${this.logIdempotencyKey}`,d({err:t},this.extraInfo))}logPerformance(t,e){return I(t,e,this.extraInfo)}};function I(r,t,e){return i(this,null,function*(){let n=new Date().getTime(),a=yield t(),o=new Date().getTime()-n,s=d({durationInMs:o},e);return _(`[${P} - ${r} - TIME] - ${g(s)}`,{args:s}),a})}function Dt(r,t){return function(...e){let n=`[${P} - function: ${t}]`;_(`${n} input: ${g(e)}`,{args:e});try{let a=r.apply(this,e);return a instanceof Promise?a.then(o=>(_(`${n} output: ${g(o)}`,{res:o}),o)).catch(o=>{throw T(`${n} threw_error: ${g(o)}`,{err:o}),o}):(_(`${n} output: ${g(a)}`,{res:a}),a)}catch(a){throw T(`${n} threw_error: ${g(a)}`,{err:a}),a}}}function g(r){try{return r!=null?JSON.stringify(r,null,2):r}catch(t){return ee(r)}}function ee(r){let t={};for(let e in r)Object.prototype.hasOwnProperty.call(r,e)&&typeof r[e]!="object"&&typeof r[e]!="function"&&(t[e]=r[e]);return JSON.stringify(t,null,2)}function _(r,t){if(G()){console.log(r);return}z(r,t)}function vt(r){var e;let t=r instanceof Error?r:{message:"Unknown error",name:"Unknown error"};if(!(t instanceof Error)&&((e=t.constructor)==null?void 0:e.name)!=="SyntheticBaseEvent")throw T("ERROR_TO_JSON_FAILED",{error:t}),new Error("[errorToJSON] err is not instanceof Error nor SyntheticBaseEvent");return JSON.parse(JSON.stringify(t,Object.getOwnPropertyNames(t)))}import{erc20Abi as ne,erc721Abi as ae}from"viem";var xt=[{inputs:[{internalType:"string",name:"uri_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"operator",type:"address"},{indexed:!1,internalType:"bool",name:"approved",type:"bool"}],name:"ApprovalForAll",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"operator",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"},{indexed:!1,internalType:"uint256[]",name:"values",type:"uint256[]"}],name:"TransferBatch",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"operator",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"id",type:"uint256"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"TransferSingle",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"string",name:"value",type:"string"},{indexed:!0,internalType:"uint256",name:"id",type:"uint256"}],name:"URI",type:"event"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"id",type:"uint256"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"accounts",type:"address[]"},{internalType:"uint256[]",name:"ids",type:"uint256[]"}],name:"balanceOfBatch",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"address",name:"operator",type:"address"}],name:"isApprovedForAll",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"},{internalType:"bytes",name:"data",type:"bytes"}],name:"safeBatchTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"id",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"safeTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"operator",type:"address"},{internalType:"bool",name:"approved",type:"bool"}],name:"setApprovalForAll",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"uri",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];function kt({contract:r,config:t,from:e,to:n}){switch(t.token.type){case"ft":return{account:e,address:r,abi:ne,functionName:"transfer",args:[n,t.amount]};case"sft":return{account:e,address:r,abi:xt,functionName:"safeTransferFrom",args:[e.address,n,t.token.tokenId,t.quantity,"0x00"],tokenId:t.token.tokenId};case"nft":return{account:e,address:r,abi:ae,functionName:"safeTransferFrom",args:[e.address,n,t.token.tokenId],tokenId:t.token.tokenId}}}var $=class extends R{constructor(e,n,a,o){super("EVMSmartWallet",{chain:o,address:n.account.address});this.crossmintService=e;this.accountClient=n;this.chain=o,this.client={wallet:n,public:a}}get address(){return this.accountClient.account.address}transferToken(e,n){return i(this,null,function*(){return this.logPerformance("TRANSFER",()=>i(this,null,function*(){if(this.chain!==n.token.chain)throw new Error(`Chain mismatch: Expected ${n.token.chain}, but got ${this.chain}. Ensure you are interacting with the correct blockchain.`);if(!Nt(e))throw new Error(`Invalid recipient address: '${e}' is not a valid EVM address.`);if(!Nt(n.token.contractAddress))throw new Error(`Invalid contract address: '${n.token.contractAddress}' is not a valid EVM address.`);let a=kt({contract:n.token.contractAddress,to:e,from:this.accountClient.account,config:n});try{let o=this.accountClient.extend(oe),{request:s}=yield o.simulateContract(a);return yield o.writeContract(s)}catch(o){T("[TRANSFER] - ERROR_TRANSFERRING_TOKEN",{service:P,error:vt(o),tokenId:a.tokenId,contractAddress:n.token.contractAddress,chain:n.token.chain});let s=a.tokenId==null?"":`:${a.tokenId}}`;throw new O(`Error transferring token ${n.token.contractAddress}${s}`)}}))})}nfts(){return i(this,null,function*(){return this.crossmintService.fetchNFTs(this.address,this.chain)})}};import{stringify as $e}from"viem";import{validateAPIKey as Be}from"@crossmint/common-sdk-base";import{validateAPIKey as se}from"@crossmint/common-sdk-base";var q=class{constructor(t={ERROR_JWT_INVALID:()=>new D,ERROR_JWT_DECRYPTION:()=>new v,ERROR_JWT_EXPIRED:({expiredAt:e})=>new b(new Date(e)),ERROR_JWT_IDENTIFIER:({identifierKey:e})=>new x(e),ERROR_USER_WALLET_ALREADY_CREATED:({userId:e})=>new w(e),ERROR_ADMIN_SIGNER_ALREADY_USED:()=>new U,ERROR_PROJECT_NONCUSTODIAL_WALLETS_NOT_ENABLED:()=>new K}){this.errors=t}throwErrorFromResponse(n){return i(this,arguments,function*({response:t,onServerErrorMessage:e}){if(!t.ok){if(t.status>=500)throw new S(e,t.status);if(t.status===402)throw new M;try{let a=yield t.json(),o=a.code;if(o!=null&&this.errors[o]!=null)throw this.errors[o](a);if(a.message!=null)throw new S(a.message,t.status)}catch(a){if(a instanceof c)throw a;console.error("Error parsing response",a)}throw new S(yield t.text(),t.status)}})}};var B=class B extends R{constructor(t){super("BaseCrossmintService");let e=se(t);if(!e.isValid)throw new Error("API key invalid");this.crossmintAPIHeaders={accept:"application/json","content-type":"application/json","x-api-key":t},this.crossmintBaseUrl=this.getUrlFromEnv(e.environment),this.apiErrorService=new q}fetchCrossmintAPI(o){return i(this,arguments,function*(t,e={method:"GET"},n,a){return I("FETCH_CROSSMINT_API",()=>i(this,null,function*(){let s=`${this.crossmintBaseUrl}/${t}`,{body:l,method:u}=e,p;try{p=yield fetch(s,{body:l,method:u,headers:d(d({},this.crossmintAPIHeaders),a!=null&&{Authorization:`Bearer ${a}`})})}catch(m){throw new S(`Error fetching Crossmint API: ${m}`)}return p.ok||(yield this.apiErrorService.throwErrorFromResponse({response:p,onServerErrorMessage:n})),yield p.json()}),{endpoint:t})})}getUrlFromEnv(t){let e=B.urlMap[t];if(!e)throw console.log(" CrossmintService.urlMap: ",B.urlMap),new Error(`URL not found for environment: ${t}`);return e}};B.urlMap={development:It,staging:Ct,production:_t};var X=B;var Z=class extends X{idempotentCreateSmartWallet(t,e){return i(this,null,function*(){return this.fetchCrossmintAPI(`${ct}/sdk/smart-wallet`,{method:"PUT",body:JSON.stringify(e)},"Error creating abstract wallet. Please contact support",t.jwt)})}getSmartWalletConfig(t,e){return i(this,null,function*(){return this.fetchCrossmintAPI(`${ct}/sdk/smart-wallet/config?chain=${e}`,{method:"GET"},"Error getting smart wallet version configuration. Please contact support",t.jwt)})}fetchNFTs(t,e){return i(this,null,function*(){return this.fetchCrossmintAPI(`v1-alpha1/wallets/${e}:${t}/nfts`,{method:"GET"},`Error fetching NFTs for wallet: ${t}`)})}getPasskeyServerUrl(){return this.crossmintBaseUrl+"/internal/passkeys"}};function Q(r){return!1}import{stringify as Vt}from"viem";var ie=["sendTransaction","writeContract","sendUserOperation"],le=["signMessage","signTypedData"];function dt(r){return ie.includes(r)}function ce(r){return le.includes(r)}var tt=class{constructor(t){this.errorProcessor=t}decorate({crossmintChain:t,smartAccountClient:e}){return new Proxy(e,{get:(n,a,o)=>{let s=Reflect.get(n,a,o);return typeof s!="function"||typeof a!="string"||!(ce(a)||dt(a))?s:(...l)=>I(`CrossmintSmartWallet.${a}`,()=>this.execute(n,a,s,l,t))}})}execute(t,e,n,a,o){return i(this,null,function*(){try{z(`[CrossmintSmartWallet.${e}] - params: ${Vt(a)}`);let s=dt(e)?this.processTxnArgs(e,o,a):a;return yield n.call(t,...s)}catch(s){let l=dt(e)?"signing":"sending transaction";throw this.errorProcessor.map(s,new c(`Error ${l}: ${s.message}`,Vt(s)))}})}processTxnArgs(t,e,n){if(t==="sendUserOperation"){let[{userOperation:o,middleware:s,account:l}]=n;return[{middleware:s,account:l,userOperation:this.addGelatoBundlerProperties(e,o)},...n.slice(1)]}let[a]=n;return[this.addGelatoBundlerProperties(e,a),...n.slice(1)]}addGelatoBundlerProperties(t,e){return Q(t)?E(d({},e),{maxFeePerGas:"0x0",maxPriorityFeePerGas:"0x0"}):e}};function et(r){return{pubKeyX:r.pubKeyX,pubKeyY:r.pubKeyY,passkeyName:r.passkeyName,type:"passkeys"}}import{createKernelAccountClient as xe}from"@zerodev/sdk";import{ENTRYPOINT_ADDRESS_V06 as ke,ENTRYPOINT_ADDRESS_V07 as Ne}from"permissionless";import{createPublicClient as Ve,getAddress as Me,http as Jt}from"viem";import{blockchainToChainId as Le}from"@crossmint/common-sdk-base";var ut=["0.3.1","0.3.0","0.2.4"];function Mt(r){return ut.includes(r)}var yt=["v0.6","v0.7"];function Lt(r){return yt.includes(r)}import{base as pe,baseSepolia as me,polygon as de,polygonAmoy as ue}from"viem/chains";import{BlockchainIncludingTestnet as rt,objectValues as ft}from"@crossmint/common-sdk-base";var Ut={BASE_SEPOLIA:rt.BASE_SEPOLIA,POLYGON_AMOY:rt.POLYGON_AMOY},en=ft(Ut),Kt={BASE:rt.BASE,POLYGON:rt.POLYGON},rn=ft(Kt),ye=d(d({},Ut),Kt),nn=ft(ye),Et={polygon:"5c9f4865-ca8e-44bb-9b9e-3810b2b46f9f","polygon-amoy":"3deef404-ca06-4a5d-9a58-907c99e7ef00","base-sepolia":"5a127978-6473-4784-9dfb-f74395b220a6",base:"e8b3020f-4dde-4176-8a7d-be8102527a5c"},nt={polygon:de,"polygon-amoy":ue,base:pe,"base-sepolia":me},St=r=>Wt+Et[r];import{providerToSmartAccountSigner as fe}from"permissionless";var $t=Dt(t=>i(void 0,[t],function*({walletParams:r}){if(Ee(r.signer))return yield fe(r.signer);if(Se(r.signer))return r.signer.account;{let e=r.signer;throw new c(`The signer type ${e.type} is not supported`)}}),"createOwnerSigner");function Ee(r){return r&&typeof r.request=="function"}function Se(r){return r&&r.type==="VIEM_ACCOUNT"}import{signerToEcdsaValidator as ge}from"@zerodev/ecdsa-validator";import{createKernelAccount as Pe}from"@zerodev/sdk";var at=class{get(u,p){return i(this,arguments,function*({chain:t,publicClient:e,entryPoint:n,walletParams:a,kernelVersion:o,user:s},l){let m=yield $t({chain:t,walletParams:a});if(l!=null&&!H(m.address,l.eoaAddress))throw new h(`User '${s.id}' has an existing wallet with an eoa signer '${l.eoaAddress}', this does not match input eoa signer '${m.address}'.`,l,{type:"eoa",eoaAddress:l.eoaAddress});let f=yield ge(e,{signer:m,entryPoint:n.address,kernelVersion:o});return{account:yield Pe(e,{plugins:{sudo:f},index:BigInt(0),entryPoint:n.address,kernelVersion:o}),signerData:{eoaAddress:m.address,type:"eoa"}}})}};import{PasskeyValidatorContractVersion as he,WebAuthnMode as Re,toPasskeyValidator as Te}from"@zerodev/passkey-validator";import{createKernelAccount as Ae}from"@zerodev/sdk";import{toWebAuthnKey as we}from"@zerodev/webauthn-key";function Bt(r){return r.walletParams.signer.type==="PASSKEY"}var ot=class{constructor(t){this.crossmintService=t}get(l,u){return i(this,arguments,function*({user:t,publicClient:e,walletParams:n,entryPoint:a,kernelVersion:o},s){var m;let p=(m=n.signer.passkeyName)!=null?m:t.id;if(s!=null&&s.passkeyName!==p)throw new W(`User '${t.id}' has an existing wallet created with a passkey named '${s.passkeyName}', this does match input passkey name '${p}'.`,et(s));try{let f=yield this.getPasskey(t,p,s),Y=he.V0_0_2,F=s==null?Y:s.validatorContractVersion,ht=yield Te(e,{webAuthnKey:f,entryPoint:a.address,validatorContractVersion:F,kernelVersion:o}),Gt=yield Ae(e,{plugins:{sudo:ht},entryPoint:a.address,kernelVersion:o});return{signerData:this.getSignerData(ht,F,p),account:this.decorate(Gt,p)}}catch(f){throw this.mapError(f,p)}})}getPasskey(t,e,n){return i(this,null,function*(){return n!=null?{pubX:BigInt(n.pubKeyX),pubY:BigInt(n.pubKeyY),authenticatorId:n.authenticatorId,authenticatorIdHash:n.authenticatorIdHash}:we({passkeyName:e,passkeyServerUrl:this.crossmintService.getPasskeyServerUrl(),mode:Re.Register,passkeyServerHeaders:this.createPasskeysServerHeaders(t)})})}getSignerData(t,e,n){return E(d({},_e(t.getSerializedData())),{passkeyName:n,validatorContractVersion:e,domain:window.location.hostname,type:"passkeys"})}createPasskeysServerHeaders(t){return{"x-api-key":this.crossmintService.crossmintAPIHeaders["x-api-key"],Authorization:`Bearer ${t.jwt}`}}mapError(t,e){return t.code===0&&t.name==="DataError"?new V(e):t.message==="Registration not verified"?new N(e):t.code==="ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY"&&t.name==="NotAllowedError"?new k(e):t}decorate(t,e){return new Proxy(t,{get:(n,a,o)=>{let s=Reflect.get(n,a,o);return typeof s!="function"||typeof a!="string"||!Ce(a)?s:(...l)=>i(this,null,function*(){try{return yield s.call(n,...l)}catch(u){throw this.mapError(u,e)}})}})}},Ie=["signMessage","signTypedData","signUserOperation","signTransaction"];function Ce(r){return Ie.includes(r)}var _e=r=>{let t=Oe(r),e=new TextDecoder().decode(t);return JSON.parse(e)};function Oe(r){let t=atob(r);return Uint8Array.from(t,e=>e.codePointAt(0))}import{createZeroDevPaymasterClient as We}from"@zerodev/sdk";import{http as be}from"viem";function Yt(r){return!Q(r)}var De=r=>bt+Et[r];function Ft({entryPoint:r,chain:t}){return{middleware:{sponsorUserOperation:n=>i(this,[n],function*({userOperation:e}){return We({chain:nt[t],transport:be(De(t)),entryPoint:r}).sponsorUserOperation({userOperation:e,entryPoint:r})})}}}var st=class{constructor(t,e,n=new gt(new at,new ot(t))){this.crossmintWalletService=t;this.clientDecorator=e;this.accountFactory=n}getOrCreate(t,e,n){return i(this,null,function*(){let{entryPoint:a,kernelVersion:o,existingSignerConfig:s,smartContractWalletAddress:l,userId:u}=yield this.fetchConfig(t,e),p=Ve({transport:Jt(St(e))}),{account:m,signerData:f}=yield this.accountFactory.get({chain:e,walletParams:n,publicClient:p,user:E(d({},t),{id:u}),entryPoint:a,kernelVersion:o},s);if(l!=null&&!H(l,m.address))throw new w(u);s==null&&(yield this.crossmintWalletService.idempotentCreateSmartWallet(t,{type:At,smartContractWalletAddress:m.address,signerData:f,version:0,baseLayer:"evm",chainId:Le(e),entryPointVersion:a.version,kernelVersion:o}));let Y=xe(d({account:m,chain:nt[e],entryPoint:m.entryPoint,bundlerTransport:Jt(St(e))},Yt(e)&&Ft({entryPoint:m.entryPoint,chain:e}))),F=this.clientDecorator.decorate({crossmintChain:e,smartAccountClient:Y});return new $(this.crossmintWalletService,F,p,e)})}fetchConfig(t,e){return i(this,null,function*(){let{entryPointVersion:n,kernelVersion:a,signers:o,smartContractWalletAddress:s,userId:l}=yield this.crossmintWalletService.getSmartWalletConfig(t,e);if(!Mt(a))throw new c(`Unsupported kernel version. Supported versions: ${ut.join(", ")}. Version used: ${a}, Please contact support`);if(!Lt(n))throw new c(`Unsupported entry point version. Supported versions: ${yt.join(", ")}. Version used: ${n}. Please contact support`);if(n==="v0.7"&&a.startsWith("0.2")||n==="v0.6"&&a.startsWith("0.3"))throw new c(`Unsupported combination: entryPoint ${n} and kernel version ${a}. Please contact support`);return{entryPoint:{version:n,address:n==="v0.6"?ke:Ne},kernelVersion:a,userId:l,existingSignerConfig:this.getSigner(o),smartContractWalletAddress:s!=null?Me(s):void 0}})}getSigner(t){if(t.length!==0){if(t.length>1)throw new S("Invalid wallet signer configuration. Please contact support");return t[0].signerData}}},gt=class{constructor(t,e){this.eoa=t;this.passkey=e}get(t,e){if(Bt(t)){if(e!=null&&(e==null?void 0:e.type)!=="passkeys")throw new h(`Cannot create wallet with passkey signer for user '${t.user.id}', they have an existing wallet with eoa signer '${e.eoaAddress}.'`,e);return this.passkey.get(t,e)}if(e!=null&&(e==null?void 0:e.type)!=="eoa")throw new h(`Cannot create wallet with eoa signer for user '${t.user.id}', they already have a wallet with a passkey named '${e.passkeyName}' as it's signer.`,et(e));return this.eoa.get(t,e)}};import{BaseError as Ue,stringify as Ke}from"viem";var it=class{constructor(t){this.logger=t}map(t,e){return this.record(t),t instanceof c||t instanceof Ue?t:e}record(t){let e=t instanceof Error?t.message:String(t);this.logger.logError(`Smart Wallet SDK Error: ${e}`,{stack:t instanceof Error?t.stack:void 0,name:t instanceof Error?t.name:"UnknownError",details:Ke(t),domain:window.location.hostname,sdk_version:Ot})}};var Pt=class r extends R{constructor(e,n){super("SmartWalletSDK");this.smartWalletService=e;this.errorProcessor=n}static init({clientApiKey:e}){if(!J())throw new c("Smart Wallet SDK should only be used client side.");if(!Be(e).isValid)throw new Error("API key invalid");let a=new Z(e),o=new it(new C);return new r(new st(a,new tt(o)),o)}getOrCreateWallet(o,s){return i(this,arguments,function*(e,n,a={signer:{type:"PASSKEY"}}){return I("GET_OR_CREATE_WALLET",()=>i(this,null,function*(){try{return yield this.smartWalletService.getOrCreate(e,n,a)}catch(l){throw this.errorProcessor.map(l,new c(`Wallet creation failed: ${l.message}.`,$e(l)))}}),{user:e,chain:n})})}};export{U as AdminAlreadyUsedError,h as AdminMismatchError,ga as Chain,L as ConfigError,S as CrossmintServiceError,$ as EVMSmartWallet,v as JWTDecryptionError,b as JWTExpiredError,x as JWTIdentifierError,D as JWTInvalidError,K as NonCustodialWalletsNotEnabledError,A as NotAuthorizedError,M as OutOfCreditsError,V as PasskeyIncompatibleAuthenticatorError,W as PasskeyMismatchError,k as PasskeyPromptError,N as PasskeyRegistrationError,Pt as SmartWalletSDK,c as SmartWalletSDKError,O as TransferError,w as UserWalletAlreadyCreatedError,Sa as blockchainToChainId};
2
2
  //# sourceMappingURL=index.js.map