@joai/warps-wallet-gaupa 1.0.1 → 1.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.
package/dist/index.d.cts CHANGED
@@ -21,6 +21,7 @@ declare class GaupaWalletProvider implements WalletProvider {
21
21
  importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails>;
22
22
  importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails>;
23
23
  export(): Promise<WarpWalletDetails>;
24
+ delete(externalId: string): Promise<void>;
24
25
  generate(): Promise<WarpWalletDetails>;
25
26
  private getWalletForChainOrFail;
26
27
  private formatTransactionForApi;
package/dist/index.d.ts CHANGED
@@ -21,6 +21,7 @@ declare class GaupaWalletProvider implements WalletProvider {
21
21
  importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails>;
22
22
  importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails>;
23
23
  export(): Promise<WarpWalletDetails>;
24
+ delete(externalId: string): Promise<void>;
24
25
  generate(): Promise<WarpWalletDetails>;
25
26
  private getWalletForChainOrFail;
26
27
  private formatTransactionForApi;
package/dist/index.js CHANGED
@@ -137,6 +137,9 @@ var _GaupaWalletProvider = class _GaupaWalletProvider {
137
137
  async export() {
138
138
  throw new Error("GaupaWalletProvider: export() is not supported. Private keys are managed by Gaupa and cannot be exported.");
139
139
  }
140
+ async delete(externalId) {
141
+ throw new Error("GaupaWalletProvider: delete() is not supported. Wallets are managed by Gaupa.");
142
+ }
140
143
  async generate() {
141
144
  if (!this.config.user?.email) throw new Error("GaupaWalletProvider: Email is required to generate a wallet");
142
145
  try {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/GaupaWalletProvider.ts","../src/config.ts","../src/GaupaApiClient.ts","../src/helpers.ts"],"sourcesContent":["export * from './GaupaWalletProvider'\nexport * from './helpers'\nexport * from './types'\n","import {\n EvmWalletChainNames,\n getWarpWalletAddressFromConfig,\n setWarpWalletInConfig,\n WalletProvider,\n WarpChainInfo,\n WarpChainName,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport { Address, Transaction } from '@multiversx/sdk-core'\nimport { getGaupaApiUrl } from './config'\nimport { GaupaApiClient, WalletResponse } from './GaupaApiClient'\nimport { ProviderConfig } from './types'\n\nexport class GaupaWalletProvider implements WalletProvider {\n static readonly PROVIDER_NAME: WarpWalletProvider = 'gaupa'\n private readonly client: GaupaApiClient\n private cachedAddress: string | null = null\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo,\n private readonly gaupaConfig: ProviderConfig\n ) {\n this.client = new GaupaApiClient(gaupaConfig.publicKey, gaupaConfig.apiKey, getGaupaApiUrl(config.env))\n }\n\n async getAddress(): Promise<string | null> {\n if (this.cachedAddress) return this.cachedAddress\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (!address) return null\n this.cachedAddress = address\n return address\n }\n\n async getPublicKey(): Promise<string | null> {\n const address = await this.getAddress()\n if (!address) return null\n const pubKey = Address.newFromBech32(address).getPublicKey().toString('hex')\n return pubKey\n }\n\n async signTransaction(tx: Transaction): Promise<Transaction> {\n const walletAddress = await this.getAddress()\n if (!walletAddress) throw new Error('GaupaWalletProvider: Wallet address not found')\n\n tx.sender = Address.newFromBech32(walletAddress)\n const result = await this.client.signTransaction(this.formatTransactionForApi(tx))\n if (!result.data?.transaction?.signature) throw new Error('Gaupa API did not return a valid transaction signature')\n\n tx.signature = new Uint8Array(Buffer.from(result.data.transaction.signature, 'hex'))\n\n return tx\n }\n\n async signMessage(message: string): Promise<string> {\n const walletAddress = await this.getAddress()\n if (!walletAddress) throw new Error('GaupaWalletProvider: Wallet address not found')\n\n const result = await this.client.signMessage({ message, walletAddress })\n if (!result.signature) throw new Error('Gaupa API did not return signature')\n\n return result.signature\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: importFromMnemonic() is not supported. Use generate() to create a new wallet via Gaupa API.')\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: importFromPrivateKey() is not supported. Use generate() to create a new wallet via Gaupa API.')\n }\n\n async export(): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: export() is not supported. Private keys are managed by Gaupa and cannot be exported.')\n }\n\n async generate(): Promise<WarpWalletDetails> {\n if (!this.config.user?.email) throw new Error('GaupaWalletProvider: Email is required to generate a wallet')\n try {\n const remoteWallet = await this.client.createAgenticWallet({\n email: this.config.user.email,\n name: this.config.user?.name || undefined,\n })\n\n if (!remoteWallet.success) throw new Error('Gaupa API did not return a valid wallet')\n const address = this.getWalletForChainOrFail(remoteWallet.wallet)\n if (!address) throw new Error('Gaupa API did not return a valid wallet')\n\n const walletDetails: WarpWalletDetails = {\n provider: GaupaWalletProvider.PROVIDER_NAME,\n address,\n externalId: remoteWallet.userId,\n }\n\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n this.cachedAddress = walletDetails.address\n\n return walletDetails\n } catch (error) {\n throw new Error(`GaupaWalletProvider: Failed to generate wallet: ${error}`)\n }\n }\n\n private getWalletForChainOrFail(wallet: WalletResponse): string {\n if (\n (this.chain.name === WarpChainName.Multiversx || this.chain.name === WarpChainName.Claws) &&\n wallet.address_multiversx\n ) {\n return wallet.address_multiversx\n }\n if (EvmWalletChainNames.includes(this.chain.name) && wallet.address_evm) return wallet.address_evm\n throw new Error(`GaupaWalletProvider: Unsupported chain: ${this.chain.name}`)\n }\n\n private formatTransactionForApi(tx: Transaction) {\n const walletAddress = tx.sender.toBech32()\n return {\n walletAddress,\n send: false,\n relay: false,\n transaction: {\n sender: walletAddress,\n receiver: tx.receiver.toBech32(),\n value: tx.value.toString(),\n gasLimit: Number(tx.gasLimit),\n gasPrice: Number(tx.gasPrice),\n ...(tx.nonce !== undefined && { nonce: Number(tx.nonce) }),\n ...(tx.data?.length && { data: Buffer.from(tx.data).toString('base64') }),\n },\n }\n }\n}\n","import { WarpChainEnv } from '@joai/warps'\n\nexport const getGaupaApiUrl = (env: WarpChainEnv): string => {\n if (env === 'devnet') return 'https://devnet-login.gaupa.xyz'\n if (env === 'testnet') return 'https://testnet-login.gaupa.xyz'\n return 'https://login.gaupa.xyz'\n}\n","type CreateAgenticWalletRequest = { email: string; name?: string; shard?: number; userId?: string }\ntype CreateAgenticWalletResponse = {\n success: boolean\n userId: string\n wallet: WalletResponse\n}\ntype SignMessageRequest = { message: string; walletAddress: string }\ntype SignMessageResponse = { address: string; signature: string; message: string; version: number; signer: string; txHash?: string }\ntype SignTransactionRequest = {\n userId?: string\n walletAddress?: string\n send?: boolean\n relay?: boolean\n transaction: {\n sender?: string\n receiver: string\n value: string\n data?: string\n gasLimit: number\n gasPrice: number\n nonce?: number\n }\n}\ntype SignTransactionResponse = {\n status: string\n data: {\n transaction: {\n nonce: number\n value: string\n receiver: string\n sender: string\n gasPrice: number\n gasLimit: number\n chainID: string\n version: number\n signature: string\n }\n sender: string\n receiver: string\n timestamp: string\n }\n}\nexport type WalletResponse = {\n address_multiversx: string\n address_evm?: string\n shard?: number | null\n}\n\nexport class GaupaApiClient {\n private readonly publicKey: string\n private readonly apiKey: string\n private readonly baseUrl: string\n\n constructor(publicKey: string, apiKey: string, apiUrl: string) {\n this.publicKey = publicKey\n this.apiKey = apiKey\n this.baseUrl = apiUrl.replace(/\\/$/, '')\n }\n\n async createAgenticWallet(request: CreateAgenticWalletRequest): Promise<CreateAgenticWalletResponse> {\n return this.request<CreateAgenticWalletResponse>('/manage/create-agentic-wallet', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n async signTransaction(request: SignTransactionRequest): Promise<SignTransactionResponse> {\n return await this.request<SignTransactionResponse>('/manage/submit-agentic-transaction', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n async signMessage(request: SignMessageRequest): Promise<SignMessageResponse> {\n return this.request<SignMessageResponse>('/manage/sign-agentic-message', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n private async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'Public-Key': this.publicKey,\n }\n\n const response = await fetch(url, {\n ...options,\n headers,\n })\n\n const responseStatus = response.status\n let responseBody: string | undefined\n\n try {\n responseBody = await response.text()\n } catch (error) {\n responseBody = `Failed to read response body: ${error}`\n }\n\n if (!response.ok) {\n throw new Error(`Gaupa API error (${responseStatus}): ${responseBody || 'Unknown error'}`)\n }\n\n try {\n return JSON.parse(responseBody || '{}')\n } catch (error) {\n throw new Error(`Failed to parse response JSON: ${error}. Response: ${responseBody}`)\n }\n }\n}\n","import { WalletProviderFactory, WarpChainInfo, WarpClientConfig } from '@joai/warps'\nimport { GaupaWalletProvider } from './GaupaWalletProvider'\nimport { ProviderConfig } from './types'\n\nexport const createGaupaWalletProvider = (gaupaConfig: ProviderConfig): WalletProviderFactory => {\n return (config: WarpClientConfig, chain: WarpChainInfo) => new GaupaWalletProvider(config, chain, gaupaConfig)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAUO;AACP,sBAAqC;;;ACT9B,IAAM,iBAAiB,CAAC,QAA8B;AAC3D,MAAI,QAAQ,SAAU,QAAO;AAC7B,MAAI,QAAQ,UAAW,QAAO;AAC9B,SAAO;AACT;;;AC0CO,IAAM,iBAAN,MAAqB;AAAA,EAK1B,YAAY,WAAmB,QAAgB,QAAgB;AAC7D,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,UAAU,OAAO,QAAQ,OAAO,EAAE;AAAA,EACzC;AAAA,EAEA,MAAM,oBAAoB,SAA2E;AACnG,WAAO,KAAK,QAAqC,iCAAiC;AAAA,MAChF,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,SAAmE;AACvF,WAAO,MAAM,KAAK,QAAiC,sCAAsC;AAAA,MACvF,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,SAA2D;AAC3E,WAAO,KAAK,QAA6B,gCAAgC;AAAA,MACvE,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,QAAW,UAAkB,UAAuB,CAAC,GAAe;AAChF,UAAM,MAAM,GAAG,KAAK,OAAO,GAAG,QAAQ;AACtC,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,aAAa,KAAK;AAAA,MAClB,cAAc,KAAK;AAAA,IACrB;AAEA,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,SAAS;AAChC,QAAI;AAEJ,QAAI;AACF,qBAAe,MAAM,SAAS,KAAK;AAAA,IACrC,SAAS,OAAO;AACd,qBAAe,iCAAiC,KAAK;AAAA,IACvD;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,oBAAoB,cAAc,MAAM,gBAAgB,eAAe,EAAE;AAAA,IAC3F;AAEA,QAAI;AACF,aAAO,KAAK,MAAM,gBAAgB,IAAI;AAAA,IACxC,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,kCAAkC,KAAK,eAAe,YAAY,EAAE;AAAA,IACtF;AAAA,EACF;AACF;;;AFhGO,IAAM,uBAAN,MAAM,qBAA8C;AAAA,EAKzD,YACmB,QACA,OACA,aACjB;AAHiB;AACA;AACA;AALnB,SAAQ,gBAA+B;AAOrC,SAAK,SAAS,IAAI,eAAe,YAAY,WAAW,YAAY,QAAQ,eAAe,OAAO,GAAG,CAAC;AAAA,EACxG;AAAA,EAEA,MAAM,aAAqC;AACzC,QAAI,KAAK,cAAe,QAAO,KAAK;AACpC,UAAM,cAAU,6CAA+B,KAAK,QAAQ,KAAK,MAAM,IAAI;AAC3E,QAAI,CAAC,QAAS,QAAO;AACrB,SAAK,gBAAgB;AACrB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,eAAuC;AAC3C,UAAM,UAAU,MAAM,KAAK,WAAW;AACtC,QAAI,CAAC,QAAS,QAAO;AACrB,UAAM,SAAS,wBAAQ,cAAc,OAAO,EAAE,aAAa,EAAE,SAAS,KAAK;AAC3E,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,gBAAgB,IAAuC;AAC3D,UAAM,gBAAgB,MAAM,KAAK,WAAW;AAC5C,QAAI,CAAC,cAAe,OAAM,IAAI,MAAM,+CAA+C;AAEnF,OAAG,SAAS,wBAAQ,cAAc,aAAa;AAC/C,UAAM,SAAS,MAAM,KAAK,OAAO,gBAAgB,KAAK,wBAAwB,EAAE,CAAC;AACjF,QAAI,CAAC,OAAO,MAAM,aAAa,UAAW,OAAM,IAAI,MAAM,wDAAwD;AAElH,OAAG,YAAY,IAAI,WAAW,OAAO,KAAK,OAAO,KAAK,YAAY,WAAW,KAAK,CAAC;AAEnF,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,SAAkC;AAClD,UAAM,gBAAgB,MAAM,KAAK,WAAW;AAC5C,QAAI,CAAC,cAAe,OAAM,IAAI,MAAM,+CAA+C;AAEnF,UAAM,SAAS,MAAM,KAAK,OAAO,YAAY,EAAE,SAAS,cAAc,CAAC;AACvE,QAAI,CAAC,OAAO,UAAW,OAAM,IAAI,MAAM,oCAAoC;AAE3E,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,mBAAmB,UAA8C;AACrE,UAAM,IAAI,MAAM,kHAAkH;AAAA,EACpI;AAAA,EAEA,MAAM,qBAAqB,YAAgD;AACzE,UAAM,IAAI,MAAM,oHAAoH;AAAA,EACtI;AAAA,EAEA,MAAM,SAAqC;AACzC,UAAM,IAAI,MAAM,2GAA2G;AAAA,EAC7H;AAAA,EAEA,MAAM,WAAuC;AAC3C,QAAI,CAAC,KAAK,OAAO,MAAM,MAAO,OAAM,IAAI,MAAM,6DAA6D;AAC3G,QAAI;AACF,YAAM,eAAe,MAAM,KAAK,OAAO,oBAAoB;AAAA,QACzD,OAAO,KAAK,OAAO,KAAK;AAAA,QACxB,MAAM,KAAK,OAAO,MAAM,QAAQ;AAAA,MAClC,CAAC;AAED,UAAI,CAAC,aAAa,QAAS,OAAM,IAAI,MAAM,yCAAyC;AACpF,YAAM,UAAU,KAAK,wBAAwB,aAAa,MAAM;AAChE,UAAI,CAAC,QAAS,OAAM,IAAI,MAAM,yCAAyC;AAEvE,YAAM,gBAAmC;AAAA,QACvC,UAAU,qBAAoB;AAAA,QAC9B;AAAA,QACA,YAAY,aAAa;AAAA,MAC3B;AAEA,8CAAsB,KAAK,QAAQ,KAAK,MAAM,MAAM,aAAa;AACjE,WAAK,gBAAgB,cAAc;AAEnC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,mDAAmD,KAAK,EAAE;AAAA,IAC5E;AAAA,EACF;AAAA,EAEQ,wBAAwB,QAAgC;AAC9D,SACG,KAAK,MAAM,SAAS,2BAAc,cAAc,KAAK,MAAM,SAAS,2BAAc,UACnF,OAAO,oBACP;AACA,aAAO,OAAO;AAAA,IAChB;AACA,QAAI,iCAAoB,SAAS,KAAK,MAAM,IAAI,KAAK,OAAO,YAAa,QAAO,OAAO;AACvF,UAAM,IAAI,MAAM,2CAA2C,KAAK,MAAM,IAAI,EAAE;AAAA,EAC9E;AAAA,EAEQ,wBAAwB,IAAiB;AAC/C,UAAM,gBAAgB,GAAG,OAAO,SAAS;AACzC,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,QACX,QAAQ;AAAA,QACR,UAAU,GAAG,SAAS,SAAS;AAAA,QAC/B,OAAO,GAAG,MAAM,SAAS;AAAA,QACzB,UAAU,OAAO,GAAG,QAAQ;AAAA,QAC5B,UAAU,OAAO,GAAG,QAAQ;AAAA,QAC5B,GAAI,GAAG,UAAU,UAAa,EAAE,OAAO,OAAO,GAAG,KAAK,EAAE;AAAA,QACxD,GAAI,GAAG,MAAM,UAAU,EAAE,MAAM,OAAO,KAAK,GAAG,IAAI,EAAE,SAAS,QAAQ,EAAE;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AACF;AAtHa,qBACK,gBAAoC;AAD/C,IAAM,sBAAN;;;AGZA,IAAM,4BAA4B,CAAC,gBAAuD;AAC/F,SAAO,CAAC,QAA0B,UAAyB,IAAI,oBAAoB,QAAQ,OAAO,WAAW;AAC/G;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/GaupaWalletProvider.ts","../src/config.ts","../src/GaupaApiClient.ts","../src/helpers.ts"],"sourcesContent":["export * from './GaupaWalletProvider'\nexport * from './helpers'\nexport * from './types'\n","import {\n EvmWalletChainNames,\n getWarpWalletAddressFromConfig,\n setWarpWalletInConfig,\n WalletProvider,\n WarpChainInfo,\n WarpChainName,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport { Address, Transaction } from '@multiversx/sdk-core'\nimport { getGaupaApiUrl } from './config'\nimport { GaupaApiClient, WalletResponse } from './GaupaApiClient'\nimport { ProviderConfig } from './types'\n\nexport class GaupaWalletProvider implements WalletProvider {\n static readonly PROVIDER_NAME: WarpWalletProvider = 'gaupa'\n private readonly client: GaupaApiClient\n private cachedAddress: string | null = null\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo,\n private readonly gaupaConfig: ProviderConfig\n ) {\n this.client = new GaupaApiClient(gaupaConfig.publicKey, gaupaConfig.apiKey, getGaupaApiUrl(config.env))\n }\n\n async getAddress(): Promise<string | null> {\n if (this.cachedAddress) return this.cachedAddress\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (!address) return null\n this.cachedAddress = address\n return address\n }\n\n async getPublicKey(): Promise<string | null> {\n const address = await this.getAddress()\n if (!address) return null\n const pubKey = Address.newFromBech32(address).getPublicKey().toString('hex')\n return pubKey\n }\n\n async signTransaction(tx: Transaction): Promise<Transaction> {\n const walletAddress = await this.getAddress()\n if (!walletAddress) throw new Error('GaupaWalletProvider: Wallet address not found')\n\n tx.sender = Address.newFromBech32(walletAddress)\n const result = await this.client.signTransaction(this.formatTransactionForApi(tx))\n if (!result.data?.transaction?.signature) throw new Error('Gaupa API did not return a valid transaction signature')\n\n tx.signature = new Uint8Array(Buffer.from(result.data.transaction.signature, 'hex'))\n\n return tx\n }\n\n async signMessage(message: string): Promise<string> {\n const walletAddress = await this.getAddress()\n if (!walletAddress) throw new Error('GaupaWalletProvider: Wallet address not found')\n\n const result = await this.client.signMessage({ message, walletAddress })\n if (!result.signature) throw new Error('Gaupa API did not return signature')\n\n return result.signature\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: importFromMnemonic() is not supported. Use generate() to create a new wallet via Gaupa API.')\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: importFromPrivateKey() is not supported. Use generate() to create a new wallet via Gaupa API.')\n }\n\n async export(): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: export() is not supported. Private keys are managed by Gaupa and cannot be exported.')\n }\n\n async delete(externalId: string): Promise<void> {\n throw new Error('GaupaWalletProvider: delete() is not supported. Wallets are managed by Gaupa.')\n }\n\n async generate(): Promise<WarpWalletDetails> {\n if (!this.config.user?.email) throw new Error('GaupaWalletProvider: Email is required to generate a wallet')\n try {\n const remoteWallet = await this.client.createAgenticWallet({\n email: this.config.user.email,\n name: this.config.user?.name || undefined,\n })\n\n if (!remoteWallet.success) throw new Error('Gaupa API did not return a valid wallet')\n const address = this.getWalletForChainOrFail(remoteWallet.wallet)\n if (!address) throw new Error('Gaupa API did not return a valid wallet')\n\n const walletDetails: WarpWalletDetails = {\n provider: GaupaWalletProvider.PROVIDER_NAME,\n address,\n externalId: remoteWallet.userId,\n }\n\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n this.cachedAddress = walletDetails.address\n\n return walletDetails\n } catch (error) {\n throw new Error(`GaupaWalletProvider: Failed to generate wallet: ${error}`)\n }\n }\n\n private getWalletForChainOrFail(wallet: WalletResponse): string {\n if (\n (this.chain.name === WarpChainName.Multiversx || this.chain.name === WarpChainName.Claws) &&\n wallet.address_multiversx\n ) {\n return wallet.address_multiversx\n }\n if (EvmWalletChainNames.includes(this.chain.name) && wallet.address_evm) return wallet.address_evm\n throw new Error(`GaupaWalletProvider: Unsupported chain: ${this.chain.name}`)\n }\n\n private formatTransactionForApi(tx: Transaction) {\n const walletAddress = tx.sender.toBech32()\n return {\n walletAddress,\n send: false,\n relay: false,\n transaction: {\n sender: walletAddress,\n receiver: tx.receiver.toBech32(),\n value: tx.value.toString(),\n gasLimit: Number(tx.gasLimit),\n gasPrice: Number(tx.gasPrice),\n ...(tx.nonce !== undefined && { nonce: Number(tx.nonce) }),\n ...(tx.data?.length && { data: Buffer.from(tx.data).toString('base64') }),\n },\n }\n }\n}\n","import { WarpChainEnv } from '@joai/warps'\n\nexport const getGaupaApiUrl = (env: WarpChainEnv): string => {\n if (env === 'devnet') return 'https://devnet-login.gaupa.xyz'\n if (env === 'testnet') return 'https://testnet-login.gaupa.xyz'\n return 'https://login.gaupa.xyz'\n}\n","type CreateAgenticWalletRequest = { email: string; name?: string; shard?: number; userId?: string }\ntype CreateAgenticWalletResponse = {\n success: boolean\n userId: string\n wallet: WalletResponse\n}\ntype SignMessageRequest = { message: string; walletAddress: string }\ntype SignMessageResponse = { address: string; signature: string; message: string; version: number; signer: string; txHash?: string }\ntype SignTransactionRequest = {\n userId?: string\n walletAddress?: string\n send?: boolean\n relay?: boolean\n transaction: {\n sender?: string\n receiver: string\n value: string\n data?: string\n gasLimit: number\n gasPrice: number\n nonce?: number\n }\n}\ntype SignTransactionResponse = {\n status: string\n data: {\n transaction: {\n nonce: number\n value: string\n receiver: string\n sender: string\n gasPrice: number\n gasLimit: number\n chainID: string\n version: number\n signature: string\n }\n sender: string\n receiver: string\n timestamp: string\n }\n}\nexport type WalletResponse = {\n address_multiversx: string\n address_evm?: string\n shard?: number | null\n}\n\nexport class GaupaApiClient {\n private readonly publicKey: string\n private readonly apiKey: string\n private readonly baseUrl: string\n\n constructor(publicKey: string, apiKey: string, apiUrl: string) {\n this.publicKey = publicKey\n this.apiKey = apiKey\n this.baseUrl = apiUrl.replace(/\\/$/, '')\n }\n\n async createAgenticWallet(request: CreateAgenticWalletRequest): Promise<CreateAgenticWalletResponse> {\n return this.request<CreateAgenticWalletResponse>('/manage/create-agentic-wallet', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n async signTransaction(request: SignTransactionRequest): Promise<SignTransactionResponse> {\n return await this.request<SignTransactionResponse>('/manage/submit-agentic-transaction', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n async signMessage(request: SignMessageRequest): Promise<SignMessageResponse> {\n return this.request<SignMessageResponse>('/manage/sign-agentic-message', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n private async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'Public-Key': this.publicKey,\n }\n\n const response = await fetch(url, {\n ...options,\n headers,\n })\n\n const responseStatus = response.status\n let responseBody: string | undefined\n\n try {\n responseBody = await response.text()\n } catch (error) {\n responseBody = `Failed to read response body: ${error}`\n }\n\n if (!response.ok) {\n throw new Error(`Gaupa API error (${responseStatus}): ${responseBody || 'Unknown error'}`)\n }\n\n try {\n return JSON.parse(responseBody || '{}')\n } catch (error) {\n throw new Error(`Failed to parse response JSON: ${error}. Response: ${responseBody}`)\n }\n }\n}\n","import { WalletProviderFactory, WarpChainInfo, WarpClientConfig } from '@joai/warps'\nimport { GaupaWalletProvider } from './GaupaWalletProvider'\nimport { ProviderConfig } from './types'\n\nexport const createGaupaWalletProvider = (gaupaConfig: ProviderConfig): WalletProviderFactory => {\n return (config: WarpClientConfig, chain: WarpChainInfo) => new GaupaWalletProvider(config, chain, gaupaConfig)\n}\n"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -115,6 +115,9 @@ var _GaupaWalletProvider = class _GaupaWalletProvider {
115
115
  async export() {
116
116
  throw new Error("GaupaWalletProvider: export() is not supported. Private keys are managed by Gaupa and cannot be exported.");
117
117
  }
118
+ async delete(externalId) {
119
+ throw new Error("GaupaWalletProvider: delete() is not supported. Wallets are managed by Gaupa.");
120
+ }
118
121
  async generate() {
119
122
  if (!this.config.user?.email) throw new Error("GaupaWalletProvider: Email is required to generate a wallet");
120
123
  try {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/GaupaWalletProvider.ts","../src/config.ts","../src/GaupaApiClient.ts","../src/helpers.ts"],"sourcesContent":["import {\n EvmWalletChainNames,\n getWarpWalletAddressFromConfig,\n setWarpWalletInConfig,\n WalletProvider,\n WarpChainInfo,\n WarpChainName,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport { Address, Transaction } from '@multiversx/sdk-core'\nimport { getGaupaApiUrl } from './config'\nimport { GaupaApiClient, WalletResponse } from './GaupaApiClient'\nimport { ProviderConfig } from './types'\n\nexport class GaupaWalletProvider implements WalletProvider {\n static readonly PROVIDER_NAME: WarpWalletProvider = 'gaupa'\n private readonly client: GaupaApiClient\n private cachedAddress: string | null = null\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo,\n private readonly gaupaConfig: ProviderConfig\n ) {\n this.client = new GaupaApiClient(gaupaConfig.publicKey, gaupaConfig.apiKey, getGaupaApiUrl(config.env))\n }\n\n async getAddress(): Promise<string | null> {\n if (this.cachedAddress) return this.cachedAddress\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (!address) return null\n this.cachedAddress = address\n return address\n }\n\n async getPublicKey(): Promise<string | null> {\n const address = await this.getAddress()\n if (!address) return null\n const pubKey = Address.newFromBech32(address).getPublicKey().toString('hex')\n return pubKey\n }\n\n async signTransaction(tx: Transaction): Promise<Transaction> {\n const walletAddress = await this.getAddress()\n if (!walletAddress) throw new Error('GaupaWalletProvider: Wallet address not found')\n\n tx.sender = Address.newFromBech32(walletAddress)\n const result = await this.client.signTransaction(this.formatTransactionForApi(tx))\n if (!result.data?.transaction?.signature) throw new Error('Gaupa API did not return a valid transaction signature')\n\n tx.signature = new Uint8Array(Buffer.from(result.data.transaction.signature, 'hex'))\n\n return tx\n }\n\n async signMessage(message: string): Promise<string> {\n const walletAddress = await this.getAddress()\n if (!walletAddress) throw new Error('GaupaWalletProvider: Wallet address not found')\n\n const result = await this.client.signMessage({ message, walletAddress })\n if (!result.signature) throw new Error('Gaupa API did not return signature')\n\n return result.signature\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: importFromMnemonic() is not supported. Use generate() to create a new wallet via Gaupa API.')\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: importFromPrivateKey() is not supported. Use generate() to create a new wallet via Gaupa API.')\n }\n\n async export(): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: export() is not supported. Private keys are managed by Gaupa and cannot be exported.')\n }\n\n async generate(): Promise<WarpWalletDetails> {\n if (!this.config.user?.email) throw new Error('GaupaWalletProvider: Email is required to generate a wallet')\n try {\n const remoteWallet = await this.client.createAgenticWallet({\n email: this.config.user.email,\n name: this.config.user?.name || undefined,\n })\n\n if (!remoteWallet.success) throw new Error('Gaupa API did not return a valid wallet')\n const address = this.getWalletForChainOrFail(remoteWallet.wallet)\n if (!address) throw new Error('Gaupa API did not return a valid wallet')\n\n const walletDetails: WarpWalletDetails = {\n provider: GaupaWalletProvider.PROVIDER_NAME,\n address,\n externalId: remoteWallet.userId,\n }\n\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n this.cachedAddress = walletDetails.address\n\n return walletDetails\n } catch (error) {\n throw new Error(`GaupaWalletProvider: Failed to generate wallet: ${error}`)\n }\n }\n\n private getWalletForChainOrFail(wallet: WalletResponse): string {\n if (\n (this.chain.name === WarpChainName.Multiversx || this.chain.name === WarpChainName.Claws) &&\n wallet.address_multiversx\n ) {\n return wallet.address_multiversx\n }\n if (EvmWalletChainNames.includes(this.chain.name) && wallet.address_evm) return wallet.address_evm\n throw new Error(`GaupaWalletProvider: Unsupported chain: ${this.chain.name}`)\n }\n\n private formatTransactionForApi(tx: Transaction) {\n const walletAddress = tx.sender.toBech32()\n return {\n walletAddress,\n send: false,\n relay: false,\n transaction: {\n sender: walletAddress,\n receiver: tx.receiver.toBech32(),\n value: tx.value.toString(),\n gasLimit: Number(tx.gasLimit),\n gasPrice: Number(tx.gasPrice),\n ...(tx.nonce !== undefined && { nonce: Number(tx.nonce) }),\n ...(tx.data?.length && { data: Buffer.from(tx.data).toString('base64') }),\n },\n }\n }\n}\n","import { WarpChainEnv } from '@joai/warps'\n\nexport const getGaupaApiUrl = (env: WarpChainEnv): string => {\n if (env === 'devnet') return 'https://devnet-login.gaupa.xyz'\n if (env === 'testnet') return 'https://testnet-login.gaupa.xyz'\n return 'https://login.gaupa.xyz'\n}\n","type CreateAgenticWalletRequest = { email: string; name?: string; shard?: number; userId?: string }\ntype CreateAgenticWalletResponse = {\n success: boolean\n userId: string\n wallet: WalletResponse\n}\ntype SignMessageRequest = { message: string; walletAddress: string }\ntype SignMessageResponse = { address: string; signature: string; message: string; version: number; signer: string; txHash?: string }\ntype SignTransactionRequest = {\n userId?: string\n walletAddress?: string\n send?: boolean\n relay?: boolean\n transaction: {\n sender?: string\n receiver: string\n value: string\n data?: string\n gasLimit: number\n gasPrice: number\n nonce?: number\n }\n}\ntype SignTransactionResponse = {\n status: string\n data: {\n transaction: {\n nonce: number\n value: string\n receiver: string\n sender: string\n gasPrice: number\n gasLimit: number\n chainID: string\n version: number\n signature: string\n }\n sender: string\n receiver: string\n timestamp: string\n }\n}\nexport type WalletResponse = {\n address_multiversx: string\n address_evm?: string\n shard?: number | null\n}\n\nexport class GaupaApiClient {\n private readonly publicKey: string\n private readonly apiKey: string\n private readonly baseUrl: string\n\n constructor(publicKey: string, apiKey: string, apiUrl: string) {\n this.publicKey = publicKey\n this.apiKey = apiKey\n this.baseUrl = apiUrl.replace(/\\/$/, '')\n }\n\n async createAgenticWallet(request: CreateAgenticWalletRequest): Promise<CreateAgenticWalletResponse> {\n return this.request<CreateAgenticWalletResponse>('/manage/create-agentic-wallet', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n async signTransaction(request: SignTransactionRequest): Promise<SignTransactionResponse> {\n return await this.request<SignTransactionResponse>('/manage/submit-agentic-transaction', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n async signMessage(request: SignMessageRequest): Promise<SignMessageResponse> {\n return this.request<SignMessageResponse>('/manage/sign-agentic-message', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n private async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'Public-Key': this.publicKey,\n }\n\n const response = await fetch(url, {\n ...options,\n headers,\n })\n\n const responseStatus = response.status\n let responseBody: string | undefined\n\n try {\n responseBody = await response.text()\n } catch (error) {\n responseBody = `Failed to read response body: ${error}`\n }\n\n if (!response.ok) {\n throw new Error(`Gaupa API error (${responseStatus}): ${responseBody || 'Unknown error'}`)\n }\n\n try {\n return JSON.parse(responseBody || '{}')\n } catch (error) {\n throw new Error(`Failed to parse response JSON: ${error}. Response: ${responseBody}`)\n }\n }\n}\n","import { WalletProviderFactory, WarpChainInfo, WarpClientConfig } from '@joai/warps'\nimport { GaupaWalletProvider } from './GaupaWalletProvider'\nimport { ProviderConfig } from './types'\n\nexport const createGaupaWalletProvider = (gaupaConfig: ProviderConfig): WalletProviderFactory => {\n return (config: WarpClientConfig, chain: WarpChainInfo) => new GaupaWalletProvider(config, chain, gaupaConfig)\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/GaupaWalletProvider.ts","../src/config.ts","../src/GaupaApiClient.ts","../src/helpers.ts"],"sourcesContent":["import {\n EvmWalletChainNames,\n getWarpWalletAddressFromConfig,\n setWarpWalletInConfig,\n WalletProvider,\n WarpChainInfo,\n WarpChainName,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport { Address, Transaction } from '@multiversx/sdk-core'\nimport { getGaupaApiUrl } from './config'\nimport { GaupaApiClient, WalletResponse } from './GaupaApiClient'\nimport { ProviderConfig } from './types'\n\nexport class GaupaWalletProvider implements WalletProvider {\n static readonly PROVIDER_NAME: WarpWalletProvider = 'gaupa'\n private readonly client: GaupaApiClient\n private cachedAddress: string | null = null\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo,\n private readonly gaupaConfig: ProviderConfig\n ) {\n this.client = new GaupaApiClient(gaupaConfig.publicKey, gaupaConfig.apiKey, getGaupaApiUrl(config.env))\n }\n\n async getAddress(): Promise<string | null> {\n if (this.cachedAddress) return this.cachedAddress\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (!address) return null\n this.cachedAddress = address\n return address\n }\n\n async getPublicKey(): Promise<string | null> {\n const address = await this.getAddress()\n if (!address) return null\n const pubKey = Address.newFromBech32(address).getPublicKey().toString('hex')\n return pubKey\n }\n\n async signTransaction(tx: Transaction): Promise<Transaction> {\n const walletAddress = await this.getAddress()\n if (!walletAddress) throw new Error('GaupaWalletProvider: Wallet address not found')\n\n tx.sender = Address.newFromBech32(walletAddress)\n const result = await this.client.signTransaction(this.formatTransactionForApi(tx))\n if (!result.data?.transaction?.signature) throw new Error('Gaupa API did not return a valid transaction signature')\n\n tx.signature = new Uint8Array(Buffer.from(result.data.transaction.signature, 'hex'))\n\n return tx\n }\n\n async signMessage(message: string): Promise<string> {\n const walletAddress = await this.getAddress()\n if (!walletAddress) throw new Error('GaupaWalletProvider: Wallet address not found')\n\n const result = await this.client.signMessage({ message, walletAddress })\n if (!result.signature) throw new Error('Gaupa API did not return signature')\n\n return result.signature\n }\n\n async importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: importFromMnemonic() is not supported. Use generate() to create a new wallet via Gaupa API.')\n }\n\n async importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: importFromPrivateKey() is not supported. Use generate() to create a new wallet via Gaupa API.')\n }\n\n async export(): Promise<WarpWalletDetails> {\n throw new Error('GaupaWalletProvider: export() is not supported. Private keys are managed by Gaupa and cannot be exported.')\n }\n\n async delete(externalId: string): Promise<void> {\n throw new Error('GaupaWalletProvider: delete() is not supported. Wallets are managed by Gaupa.')\n }\n\n async generate(): Promise<WarpWalletDetails> {\n if (!this.config.user?.email) throw new Error('GaupaWalletProvider: Email is required to generate a wallet')\n try {\n const remoteWallet = await this.client.createAgenticWallet({\n email: this.config.user.email,\n name: this.config.user?.name || undefined,\n })\n\n if (!remoteWallet.success) throw new Error('Gaupa API did not return a valid wallet')\n const address = this.getWalletForChainOrFail(remoteWallet.wallet)\n if (!address) throw new Error('Gaupa API did not return a valid wallet')\n\n const walletDetails: WarpWalletDetails = {\n provider: GaupaWalletProvider.PROVIDER_NAME,\n address,\n externalId: remoteWallet.userId,\n }\n\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n this.cachedAddress = walletDetails.address\n\n return walletDetails\n } catch (error) {\n throw new Error(`GaupaWalletProvider: Failed to generate wallet: ${error}`)\n }\n }\n\n private getWalletForChainOrFail(wallet: WalletResponse): string {\n if (\n (this.chain.name === WarpChainName.Multiversx || this.chain.name === WarpChainName.Claws) &&\n wallet.address_multiversx\n ) {\n return wallet.address_multiversx\n }\n if (EvmWalletChainNames.includes(this.chain.name) && wallet.address_evm) return wallet.address_evm\n throw new Error(`GaupaWalletProvider: Unsupported chain: ${this.chain.name}`)\n }\n\n private formatTransactionForApi(tx: Transaction) {\n const walletAddress = tx.sender.toBech32()\n return {\n walletAddress,\n send: false,\n relay: false,\n transaction: {\n sender: walletAddress,\n receiver: tx.receiver.toBech32(),\n value: tx.value.toString(),\n gasLimit: Number(tx.gasLimit),\n gasPrice: Number(tx.gasPrice),\n ...(tx.nonce !== undefined && { nonce: Number(tx.nonce) }),\n ...(tx.data?.length && { data: Buffer.from(tx.data).toString('base64') }),\n },\n }\n }\n}\n","import { WarpChainEnv } from '@joai/warps'\n\nexport const getGaupaApiUrl = (env: WarpChainEnv): string => {\n if (env === 'devnet') return 'https://devnet-login.gaupa.xyz'\n if (env === 'testnet') return 'https://testnet-login.gaupa.xyz'\n return 'https://login.gaupa.xyz'\n}\n","type CreateAgenticWalletRequest = { email: string; name?: string; shard?: number; userId?: string }\ntype CreateAgenticWalletResponse = {\n success: boolean\n userId: string\n wallet: WalletResponse\n}\ntype SignMessageRequest = { message: string; walletAddress: string }\ntype SignMessageResponse = { address: string; signature: string; message: string; version: number; signer: string; txHash?: string }\ntype SignTransactionRequest = {\n userId?: string\n walletAddress?: string\n send?: boolean\n relay?: boolean\n transaction: {\n sender?: string\n receiver: string\n value: string\n data?: string\n gasLimit: number\n gasPrice: number\n nonce?: number\n }\n}\ntype SignTransactionResponse = {\n status: string\n data: {\n transaction: {\n nonce: number\n value: string\n receiver: string\n sender: string\n gasPrice: number\n gasLimit: number\n chainID: string\n version: number\n signature: string\n }\n sender: string\n receiver: string\n timestamp: string\n }\n}\nexport type WalletResponse = {\n address_multiversx: string\n address_evm?: string\n shard?: number | null\n}\n\nexport class GaupaApiClient {\n private readonly publicKey: string\n private readonly apiKey: string\n private readonly baseUrl: string\n\n constructor(publicKey: string, apiKey: string, apiUrl: string) {\n this.publicKey = publicKey\n this.apiKey = apiKey\n this.baseUrl = apiUrl.replace(/\\/$/, '')\n }\n\n async createAgenticWallet(request: CreateAgenticWalletRequest): Promise<CreateAgenticWalletResponse> {\n return this.request<CreateAgenticWalletResponse>('/manage/create-agentic-wallet', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n async signTransaction(request: SignTransactionRequest): Promise<SignTransactionResponse> {\n return await this.request<SignTransactionResponse>('/manage/submit-agentic-transaction', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n async signMessage(request: SignMessageRequest): Promise<SignMessageResponse> {\n return this.request<SignMessageResponse>('/manage/sign-agentic-message', {\n method: 'POST',\n body: JSON.stringify(request),\n })\n }\n\n private async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'Public-Key': this.publicKey,\n }\n\n const response = await fetch(url, {\n ...options,\n headers,\n })\n\n const responseStatus = response.status\n let responseBody: string | undefined\n\n try {\n responseBody = await response.text()\n } catch (error) {\n responseBody = `Failed to read response body: ${error}`\n }\n\n if (!response.ok) {\n throw new Error(`Gaupa API error (${responseStatus}): ${responseBody || 'Unknown error'}`)\n }\n\n try {\n return JSON.parse(responseBody || '{}')\n } catch (error) {\n throw new Error(`Failed to parse response JSON: ${error}. Response: ${responseBody}`)\n }\n }\n}\n","import { WalletProviderFactory, WarpChainInfo, WarpClientConfig } from '@joai/warps'\nimport { GaupaWalletProvider } from './GaupaWalletProvider'\nimport { ProviderConfig } from './types'\n\nexport const createGaupaWalletProvider = (gaupaConfig: ProviderConfig): WalletProviderFactory => {\n return (config: WarpClientConfig, chain: WarpChainInfo) => new GaupaWalletProvider(config, chain, gaupaConfig)\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joai/warps-wallet-gaupa",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Gaupa wallet provider for multiple chains",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -25,7 +25,7 @@
25
25
  ],
26
26
  "devDependencies": {
27
27
  "@types/jest": "^30.0.0",
28
- "jest": "^30.2.0",
28
+ "jest": "^30.3.0",
29
29
  "ts-jest": "^29.4.6",
30
30
  "tsup": "^8.5.1",
31
31
  "typescript": "^5.9.3"
@@ -34,6 +34,6 @@
34
34
  "access": "public"
35
35
  },
36
36
  "dependencies": {
37
- "@joai/warps": "^3.1.0"
37
+ "@joai/warps": "^4.3.0"
38
38
  }
39
39
  }