@joai/warps-wallet-gaupa 1.0.0-beta.11 → 1.0.0-beta.13

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,5 +1,5 @@
1
- import { Transaction } from '@multiversx/sdk-core';
2
1
  import { WalletProvider, WarpWalletProvider, WarpClientConfig, WarpChainInfo, WarpWalletDetails, WalletProviderFactory } from '@joai/warps';
2
+ import { Transaction } from '@multiversx/sdk-core';
3
3
 
4
4
  type ProviderConfig = {
5
5
  apiKey: string;
@@ -22,6 +22,7 @@ declare class GaupaWalletProvider implements WalletProvider {
22
22
  importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails>;
23
23
  export(): Promise<WarpWalletDetails>;
24
24
  generate(): Promise<WarpWalletDetails>;
25
+ private getWalletForChainOrFail;
25
26
  private formatTransactionForApi;
26
27
  }
27
28
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { Transaction } from '@multiversx/sdk-core';
2
1
  import { WalletProvider, WarpWalletProvider, WarpClientConfig, WarpChainInfo, WarpWalletDetails, WalletProviderFactory } from '@joai/warps';
2
+ import { Transaction } from '@multiversx/sdk-core';
3
3
 
4
4
  type ProviderConfig = {
5
5
  apiKey: string;
@@ -22,6 +22,7 @@ declare class GaupaWalletProvider implements WalletProvider {
22
22
  importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails>;
23
23
  export(): Promise<WarpWalletDetails>;
24
24
  generate(): Promise<WarpWalletDetails>;
25
+ private getWalletForChainOrFail;
25
26
  private formatTransactionForApi;
26
27
  }
27
28
 
package/dist/index.js CHANGED
@@ -26,20 +26,21 @@ __export(index_exports, {
26
26
  module.exports = __toCommonJS(index_exports);
27
27
 
28
28
  // src/GaupaWalletProvider.ts
29
- var import_sdk_core = require("@multiversx/sdk-core");
30
29
  var import_warps = require("@joai/warps");
30
+ var import_sdk_core = require("@multiversx/sdk-core");
31
31
 
32
32
  // src/config.ts
33
33
  var getGaupaApiUrl = (env) => {
34
- if (env === "devnet") return "https://devnet-login.gaupa.xyz/api";
35
- return "https://login.gaupa.xyz/api";
34
+ if (env === "devnet") return "https://devnet-login.gaupa.xyz";
35
+ if (env === "testnet") return "https://testnet-login.gaupa.xyz";
36
+ return "https://login.gaupa.xyz";
36
37
  };
37
38
 
38
39
  // src/GaupaApiClient.ts
39
40
  var GaupaApiClient = class {
40
- constructor(apiKey, apiUrl, publicKey) {
41
- this.apiKey = apiKey;
41
+ constructor(publicKey, apiKey, apiUrl) {
42
42
  this.publicKey = publicKey;
43
+ this.apiKey = apiKey;
43
44
  this.baseUrl = apiUrl.replace(/\/$/, "");
44
45
  }
45
46
  async createAgenticWallet(request) {
@@ -48,6 +49,12 @@ var GaupaApiClient = class {
48
49
  body: JSON.stringify(request)
49
50
  });
50
51
  }
52
+ async signTransaction(request) {
53
+ return await this.request("/manage/submit-agentic-transaction", {
54
+ method: "POST",
55
+ body: JSON.stringify(request)
56
+ });
57
+ }
51
58
  async signMessage(request) {
52
59
  return this.request("/manage/sign-agentic-message", {
53
60
  method: "POST",
@@ -65,11 +72,21 @@ var GaupaApiClient = class {
65
72
  ...options,
66
73
  headers
67
74
  });
75
+ const responseStatus = response.status;
76
+ let responseBody;
77
+ try {
78
+ responseBody = await response.text();
79
+ } catch (error) {
80
+ responseBody = `Failed to read response body: ${error}`;
81
+ }
68
82
  if (!response.ok) {
69
- const errorText = await response.text().catch(() => "Unknown error");
70
- throw new Error(`Gaupa API error (${response.status}): ${errorText}`);
83
+ throw new Error(`Gaupa API error (${responseStatus}): ${responseBody || "Unknown error"}`);
84
+ }
85
+ try {
86
+ return JSON.parse(responseBody || "{}");
87
+ } catch (error) {
88
+ throw new Error(`Failed to parse response JSON: ${error}. Response: ${responseBody}`);
71
89
  }
72
- return response.json();
73
90
  }
74
91
  };
75
92
 
@@ -80,8 +97,7 @@ var _GaupaWalletProvider = class _GaupaWalletProvider {
80
97
  this.chain = chain;
81
98
  this.gaupaConfig = gaupaConfig;
82
99
  this.cachedAddress = null;
83
- const apiUrl = getGaupaApiUrl(config.env);
84
- this.client = new GaupaApiClient(gaupaConfig.apiKey, apiUrl, gaupaConfig.publicKey);
100
+ this.client = new GaupaApiClient(gaupaConfig.publicKey, gaupaConfig.apiKey, getGaupaApiUrl(config.env));
85
101
  }
86
102
  async getAddress() {
87
103
  if (this.cachedAddress) return this.cachedAddress;
@@ -99,22 +115,16 @@ var _GaupaWalletProvider = class _GaupaWalletProvider {
99
115
  async signTransaction(tx) {
100
116
  const walletAddress = await this.getAddress();
101
117
  if (!walletAddress) throw new Error("GaupaWalletProvider: Wallet address not found");
102
- const transactionData = this.formatTransactionForApi(tx);
103
- const message = JSON.stringify(transactionData);
104
- const result = await this.client.signMessage({
105
- message,
106
- walletAddress
107
- });
108
- tx.signature = new Uint8Array(Buffer.from(result.signature, "hex"));
118
+ tx.sender = import_sdk_core.Address.newFromBech32(walletAddress);
119
+ const result = await this.client.signTransaction(this.formatTransactionForApi(tx));
120
+ if (!result.data?.transaction?.signature) throw new Error("Gaupa API did not return a valid transaction signature");
121
+ tx.signature = new Uint8Array(Buffer.from(result.data.transaction.signature, "hex"));
109
122
  return tx;
110
123
  }
111
124
  async signMessage(message) {
112
125
  const walletAddress = await this.getAddress();
113
126
  if (!walletAddress) throw new Error("GaupaWalletProvider: Wallet address not found");
114
- const result = await this.client.signMessage({
115
- message,
116
- walletAddress
117
- });
127
+ const result = await this.client.signMessage({ message, walletAddress });
118
128
  if (!result.signature) throw new Error("Gaupa API did not return signature");
119
129
  return result.signature;
120
130
  }
@@ -128,28 +138,44 @@ var _GaupaWalletProvider = class _GaupaWalletProvider {
128
138
  throw new Error("GaupaWalletProvider: export() is not supported. Private keys are managed by Gaupa and cannot be exported.");
129
139
  }
130
140
  async generate() {
141
+ if (!this.config.user?.email) throw new Error("GaupaWalletProvider: Email is required to generate a wallet");
131
142
  try {
132
- const wallet = await this.client.createAgenticWallet({});
133
- if (!wallet.success || !wallet.wallet.address_multiversx) throw new Error("Gaupa API did not return a valid wallet");
143
+ const remoteWallet = await this.client.createAgenticWallet({ email: this.config.user.email, name: this.config.user.name });
144
+ if (!remoteWallet.success) throw new Error("Gaupa API did not return a valid wallet");
145
+ const address = this.getWalletForChainOrFail(remoteWallet.wallet);
146
+ if (!address) throw new Error("Gaupa API did not return a valid wallet");
134
147
  const walletDetails = {
135
148
  provider: _GaupaWalletProvider.PROVIDER_NAME,
136
- address: wallet.wallet.address_multiversx
149
+ address,
150
+ externalId: remoteWallet.userId
137
151
  };
138
152
  (0, import_warps.setWarpWalletInConfig)(this.config, this.chain.name, walletDetails);
139
- this.cachedAddress = wallet.wallet.address_multiversx;
153
+ this.cachedAddress = walletDetails.address;
140
154
  return walletDetails;
141
155
  } catch (error) {
142
156
  throw new Error(`GaupaWalletProvider: Failed to generate wallet: ${error}`);
143
157
  }
144
158
  }
159
+ getWalletForChainOrFail(wallet) {
160
+ if (this.chain.name === import_warps.WarpChainName.Multiversx && wallet.address_multiversx) return wallet.address_multiversx;
161
+ if (import_warps.EvmWalletChainNames.includes(this.chain.name) && wallet.address_evm) return wallet.address_evm;
162
+ throw new Error(`GaupaWalletProvider: Unsupported chain: ${this.chain.name}`);
163
+ }
145
164
  formatTransactionForApi(tx) {
165
+ const walletAddress = tx.sender.toBech32();
146
166
  return {
147
- receiver: tx.receiver.toBech32(),
148
- value: tx.value.toString(),
149
- ...tx.data?.length && { data: Buffer.from(tx.data).toString("base64") },
150
- gasLimit: Number(tx.gasLimit),
151
- gasPrice: Number(tx.gasPrice),
152
- ...tx.nonce !== void 0 && { nonce: Number(tx.nonce) }
167
+ walletAddress,
168
+ send: false,
169
+ relay: false,
170
+ transaction: {
171
+ sender: walletAddress,
172
+ receiver: tx.receiver.toBech32(),
173
+ value: tx.value.toString(),
174
+ gasLimit: Number(tx.gasLimit),
175
+ gasPrice: Number(tx.gasPrice),
176
+ ...tx.nonce !== void 0 && { nonce: Number(tx.nonce) },
177
+ ...tx.data?.length && { data: Buffer.from(tx.data).toString("base64") }
178
+ }
153
179
  };
154
180
  }
155
181
  };
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 { Address, Transaction } from '@multiversx/sdk-core'\nimport {\n getWarpWalletAddressFromConfig,\n setWarpWalletInConfig,\n WalletProvider,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport { getGaupaApiUrl } from './config'\nimport { GaupaApiClient } 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 const apiUrl = getGaupaApiUrl(config.env)\n this.client = new GaupaApiClient(gaupaConfig.apiKey, apiUrl, gaupaConfig.publicKey)\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 const transactionData = this.formatTransactionForApi(tx)\n const message = JSON.stringify(transactionData)\n\n const result = await this.client.signMessage({\n message,\n walletAddress,\n })\n\n tx.signature = new Uint8Array(Buffer.from(result.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({\n message,\n walletAddress,\n })\n\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 try {\n const wallet = await this.client.createAgenticWallet({})\n if (!wallet.success || !wallet.wallet.address_multiversx) throw new Error('Gaupa API did not return a valid wallet')\n\n const walletDetails: WarpWalletDetails = {\n provider: GaupaWalletProvider.PROVIDER_NAME,\n address: wallet.wallet.address_multiversx,\n }\n\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n this.cachedAddress = wallet.wallet.address_multiversx\n\n return walletDetails\n } catch (error) {\n throw new Error(`GaupaWalletProvider: Failed to generate wallet: ${error}`)\n }\n }\n\n private formatTransactionForApi(tx: Transaction) {\n return {\n receiver: tx.receiver.toBech32(),\n value: tx.value.toString(),\n ...(tx.data?.length && { data: Buffer.from(tx.data).toString('base64') }),\n gasLimit: Number(tx.gasLimit),\n gasPrice: Number(tx.gasPrice),\n ...(tx.nonce !== undefined && { nonce: Number(tx.nonce) }),\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/api'\n return 'https://login.gaupa.xyz/api'\n}\n","type CreateAgenticWalletRequest = { shard?: number }\ntype CreateAgenticWalletResponse = {\n success: boolean\n wallet: { address_multiversx: string; address_evm?: string; shard?: number | null }\n}\ntype SignMessageRequest = { message: string; walletAddress: string }\ntype SignMessageResponse = { address: string; signature: string; message: string; version: number; signer: string; txHash?: string }\n\nexport class GaupaApiClient {\n private readonly baseUrl: string\n private readonly apiKey: string\n private readonly publicKey: string\n\n constructor(apiKey: string, apiUrl: string, publicKey: string) {\n this.apiKey = apiKey\n this.publicKey = publicKey\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 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 if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unknown error')\n throw new Error(`Gaupa API error (${response.status}): ${errorText}`)\n }\n\n return response.json()\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/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({ email: this.config.user.email, name: this.config.user.name })\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 (this.chain.name === WarpChainName.Multiversx && wallet.address_multiversx) return wallet.address_multiversx\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
@@ -1,21 +1,24 @@
1
1
  // src/GaupaWalletProvider.ts
2
- import { Address } from "@multiversx/sdk-core";
3
2
  import {
3
+ EvmWalletChainNames,
4
4
  getWarpWalletAddressFromConfig,
5
- setWarpWalletInConfig
5
+ setWarpWalletInConfig,
6
+ WarpChainName
6
7
  } from "@joai/warps";
8
+ import { Address } from "@multiversx/sdk-core";
7
9
 
8
10
  // src/config.ts
9
11
  var getGaupaApiUrl = (env) => {
10
- if (env === "devnet") return "https://devnet-login.gaupa.xyz/api";
11
- return "https://login.gaupa.xyz/api";
12
+ if (env === "devnet") return "https://devnet-login.gaupa.xyz";
13
+ if (env === "testnet") return "https://testnet-login.gaupa.xyz";
14
+ return "https://login.gaupa.xyz";
12
15
  };
13
16
 
14
17
  // src/GaupaApiClient.ts
15
18
  var GaupaApiClient = class {
16
- constructor(apiKey, apiUrl, publicKey) {
17
- this.apiKey = apiKey;
19
+ constructor(publicKey, apiKey, apiUrl) {
18
20
  this.publicKey = publicKey;
21
+ this.apiKey = apiKey;
19
22
  this.baseUrl = apiUrl.replace(/\/$/, "");
20
23
  }
21
24
  async createAgenticWallet(request) {
@@ -24,6 +27,12 @@ var GaupaApiClient = class {
24
27
  body: JSON.stringify(request)
25
28
  });
26
29
  }
30
+ async signTransaction(request) {
31
+ return await this.request("/manage/submit-agentic-transaction", {
32
+ method: "POST",
33
+ body: JSON.stringify(request)
34
+ });
35
+ }
27
36
  async signMessage(request) {
28
37
  return this.request("/manage/sign-agentic-message", {
29
38
  method: "POST",
@@ -41,11 +50,21 @@ var GaupaApiClient = class {
41
50
  ...options,
42
51
  headers
43
52
  });
53
+ const responseStatus = response.status;
54
+ let responseBody;
55
+ try {
56
+ responseBody = await response.text();
57
+ } catch (error) {
58
+ responseBody = `Failed to read response body: ${error}`;
59
+ }
44
60
  if (!response.ok) {
45
- const errorText = await response.text().catch(() => "Unknown error");
46
- throw new Error(`Gaupa API error (${response.status}): ${errorText}`);
61
+ throw new Error(`Gaupa API error (${responseStatus}): ${responseBody || "Unknown error"}`);
62
+ }
63
+ try {
64
+ return JSON.parse(responseBody || "{}");
65
+ } catch (error) {
66
+ throw new Error(`Failed to parse response JSON: ${error}. Response: ${responseBody}`);
47
67
  }
48
- return response.json();
49
68
  }
50
69
  };
51
70
 
@@ -56,8 +75,7 @@ var _GaupaWalletProvider = class _GaupaWalletProvider {
56
75
  this.chain = chain;
57
76
  this.gaupaConfig = gaupaConfig;
58
77
  this.cachedAddress = null;
59
- const apiUrl = getGaupaApiUrl(config.env);
60
- this.client = new GaupaApiClient(gaupaConfig.apiKey, apiUrl, gaupaConfig.publicKey);
78
+ this.client = new GaupaApiClient(gaupaConfig.publicKey, gaupaConfig.apiKey, getGaupaApiUrl(config.env));
61
79
  }
62
80
  async getAddress() {
63
81
  if (this.cachedAddress) return this.cachedAddress;
@@ -75,22 +93,16 @@ var _GaupaWalletProvider = class _GaupaWalletProvider {
75
93
  async signTransaction(tx) {
76
94
  const walletAddress = await this.getAddress();
77
95
  if (!walletAddress) throw new Error("GaupaWalletProvider: Wallet address not found");
78
- const transactionData = this.formatTransactionForApi(tx);
79
- const message = JSON.stringify(transactionData);
80
- const result = await this.client.signMessage({
81
- message,
82
- walletAddress
83
- });
84
- tx.signature = new Uint8Array(Buffer.from(result.signature, "hex"));
96
+ tx.sender = Address.newFromBech32(walletAddress);
97
+ const result = await this.client.signTransaction(this.formatTransactionForApi(tx));
98
+ if (!result.data?.transaction?.signature) throw new Error("Gaupa API did not return a valid transaction signature");
99
+ tx.signature = new Uint8Array(Buffer.from(result.data.transaction.signature, "hex"));
85
100
  return tx;
86
101
  }
87
102
  async signMessage(message) {
88
103
  const walletAddress = await this.getAddress();
89
104
  if (!walletAddress) throw new Error("GaupaWalletProvider: Wallet address not found");
90
- const result = await this.client.signMessage({
91
- message,
92
- walletAddress
93
- });
105
+ const result = await this.client.signMessage({ message, walletAddress });
94
106
  if (!result.signature) throw new Error("Gaupa API did not return signature");
95
107
  return result.signature;
96
108
  }
@@ -104,28 +116,44 @@ var _GaupaWalletProvider = class _GaupaWalletProvider {
104
116
  throw new Error("GaupaWalletProvider: export() is not supported. Private keys are managed by Gaupa and cannot be exported.");
105
117
  }
106
118
  async generate() {
119
+ if (!this.config.user?.email) throw new Error("GaupaWalletProvider: Email is required to generate a wallet");
107
120
  try {
108
- const wallet = await this.client.createAgenticWallet({});
109
- if (!wallet.success || !wallet.wallet.address_multiversx) throw new Error("Gaupa API did not return a valid wallet");
121
+ const remoteWallet = await this.client.createAgenticWallet({ email: this.config.user.email, name: this.config.user.name });
122
+ if (!remoteWallet.success) throw new Error("Gaupa API did not return a valid wallet");
123
+ const address = this.getWalletForChainOrFail(remoteWallet.wallet);
124
+ if (!address) throw new Error("Gaupa API did not return a valid wallet");
110
125
  const walletDetails = {
111
126
  provider: _GaupaWalletProvider.PROVIDER_NAME,
112
- address: wallet.wallet.address_multiversx
127
+ address,
128
+ externalId: remoteWallet.userId
113
129
  };
114
130
  setWarpWalletInConfig(this.config, this.chain.name, walletDetails);
115
- this.cachedAddress = wallet.wallet.address_multiversx;
131
+ this.cachedAddress = walletDetails.address;
116
132
  return walletDetails;
117
133
  } catch (error) {
118
134
  throw new Error(`GaupaWalletProvider: Failed to generate wallet: ${error}`);
119
135
  }
120
136
  }
137
+ getWalletForChainOrFail(wallet) {
138
+ if (this.chain.name === WarpChainName.Multiversx && wallet.address_multiversx) return wallet.address_multiversx;
139
+ if (EvmWalletChainNames.includes(this.chain.name) && wallet.address_evm) return wallet.address_evm;
140
+ throw new Error(`GaupaWalletProvider: Unsupported chain: ${this.chain.name}`);
141
+ }
121
142
  formatTransactionForApi(tx) {
143
+ const walletAddress = tx.sender.toBech32();
122
144
  return {
123
- receiver: tx.receiver.toBech32(),
124
- value: tx.value.toString(),
125
- ...tx.data?.length && { data: Buffer.from(tx.data).toString("base64") },
126
- gasLimit: Number(tx.gasLimit),
127
- gasPrice: Number(tx.gasPrice),
128
- ...tx.nonce !== void 0 && { nonce: Number(tx.nonce) }
145
+ walletAddress,
146
+ send: false,
147
+ relay: false,
148
+ transaction: {
149
+ sender: walletAddress,
150
+ receiver: tx.receiver.toBech32(),
151
+ value: tx.value.toString(),
152
+ gasLimit: Number(tx.gasLimit),
153
+ gasPrice: Number(tx.gasPrice),
154
+ ...tx.nonce !== void 0 && { nonce: Number(tx.nonce) },
155
+ ...tx.data?.length && { data: Buffer.from(tx.data).toString("base64") }
156
+ }
129
157
  };
130
158
  }
131
159
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/GaupaWalletProvider.ts","../src/config.ts","../src/GaupaApiClient.ts","../src/helpers.ts"],"sourcesContent":["import { Address, Transaction } from '@multiversx/sdk-core'\nimport {\n getWarpWalletAddressFromConfig,\n setWarpWalletInConfig,\n WalletProvider,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n WarpWalletProvider,\n} from '@joai/warps'\nimport { getGaupaApiUrl } from './config'\nimport { GaupaApiClient } 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 const apiUrl = getGaupaApiUrl(config.env)\n this.client = new GaupaApiClient(gaupaConfig.apiKey, apiUrl, gaupaConfig.publicKey)\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 const transactionData = this.formatTransactionForApi(tx)\n const message = JSON.stringify(transactionData)\n\n const result = await this.client.signMessage({\n message,\n walletAddress,\n })\n\n tx.signature = new Uint8Array(Buffer.from(result.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({\n message,\n walletAddress,\n })\n\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 try {\n const wallet = await this.client.createAgenticWallet({})\n if (!wallet.success || !wallet.wallet.address_multiversx) throw new Error('Gaupa API did not return a valid wallet')\n\n const walletDetails: WarpWalletDetails = {\n provider: GaupaWalletProvider.PROVIDER_NAME,\n address: wallet.wallet.address_multiversx,\n }\n\n setWarpWalletInConfig(this.config, this.chain.name, walletDetails)\n this.cachedAddress = wallet.wallet.address_multiversx\n\n return walletDetails\n } catch (error) {\n throw new Error(`GaupaWalletProvider: Failed to generate wallet: ${error}`)\n }\n }\n\n private formatTransactionForApi(tx: Transaction) {\n return {\n receiver: tx.receiver.toBech32(),\n value: tx.value.toString(),\n ...(tx.data?.length && { data: Buffer.from(tx.data).toString('base64') }),\n gasLimit: Number(tx.gasLimit),\n gasPrice: Number(tx.gasPrice),\n ...(tx.nonce !== undefined && { nonce: Number(tx.nonce) }),\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/api'\n return 'https://login.gaupa.xyz/api'\n}\n","type CreateAgenticWalletRequest = { shard?: number }\ntype CreateAgenticWalletResponse = {\n success: boolean\n wallet: { address_multiversx: string; address_evm?: string; shard?: number | null }\n}\ntype SignMessageRequest = { message: string; walletAddress: string }\ntype SignMessageResponse = { address: string; signature: string; message: string; version: number; signer: string; txHash?: string }\n\nexport class GaupaApiClient {\n private readonly baseUrl: string\n private readonly apiKey: string\n private readonly publicKey: string\n\n constructor(apiKey: string, apiUrl: string, publicKey: string) {\n this.apiKey = apiKey\n this.publicKey = publicKey\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 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 if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unknown error')\n throw new Error(`Gaupa API error (${response.status}): ${errorText}`)\n }\n\n return response.json()\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,SAAS,eAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,OAMK;;;ACPA,IAAM,iBAAiB,CAAC,QAA8B;AAC3D,MAAI,QAAQ,SAAU,QAAO;AAC7B,SAAO;AACT;;;ACGO,IAAM,iBAAN,MAAqB;AAAA,EAK1B,YAAY,QAAgB,QAAgB,WAAmB;AAC7D,SAAK,SAAS;AACd,SAAK,YAAY;AACjB,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,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,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,eAAe;AACnE,YAAM,IAAI,MAAM,oBAAoB,SAAS,MAAM,MAAM,SAAS,EAAE;AAAA,IACtE;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;;;AFvCO,IAAM,uBAAN,MAAM,qBAA8C;AAAA,EAKzD,YACmB,QACA,OACA,aACjB;AAHiB;AACA;AACA;AALnB,SAAQ,gBAA+B;AAOrC,UAAM,SAAS,eAAe,OAAO,GAAG;AACxC,SAAK,SAAS,IAAI,eAAe,YAAY,QAAQ,QAAQ,YAAY,SAAS;AAAA,EACpF;AAAA,EAEA,MAAM,aAAqC;AACzC,QAAI,KAAK,cAAe,QAAO,KAAK;AACpC,UAAM,UAAU,+BAA+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,QAAQ,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,UAAM,kBAAkB,KAAK,wBAAwB,EAAE;AACvD,UAAM,UAAU,KAAK,UAAU,eAAe;AAE9C,UAAM,SAAS,MAAM,KAAK,OAAO,YAAY;AAAA,MAC3C;AAAA,MACA;AAAA,IACF,CAAC;AAED,OAAG,YAAY,IAAI,WAAW,OAAO,KAAK,OAAO,WAAW,KAAK,CAAC;AAElE,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;AAAA,MAC3C;AAAA,MACA;AAAA,IACF,CAAC;AAED,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;AACF,YAAM,SAAS,MAAM,KAAK,OAAO,oBAAoB,CAAC,CAAC;AACvD,UAAI,CAAC,OAAO,WAAW,CAAC,OAAO,OAAO,mBAAoB,OAAM,IAAI,MAAM,yCAAyC;AAEnH,YAAM,gBAAmC;AAAA,QACvC,UAAU,qBAAoB;AAAA,QAC9B,SAAS,OAAO,OAAO;AAAA,MACzB;AAEA,4BAAsB,KAAK,QAAQ,KAAK,MAAM,MAAM,aAAa;AACjE,WAAK,gBAAgB,OAAO,OAAO;AAEnC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,mDAAmD,KAAK,EAAE;AAAA,IAC5E;AAAA,EACF;AAAA,EAEQ,wBAAwB,IAAiB;AAC/C,WAAO;AAAA,MACL,UAAU,GAAG,SAAS,SAAS;AAAA,MAC/B,OAAO,GAAG,MAAM,SAAS;AAAA,MACzB,GAAI,GAAG,MAAM,UAAU,EAAE,MAAM,OAAO,KAAK,GAAG,IAAI,EAAE,SAAS,QAAQ,EAAE;AAAA,MACvE,UAAU,OAAO,GAAG,QAAQ;AAAA,MAC5B,UAAU,OAAO,GAAG,QAAQ;AAAA,MAC5B,GAAI,GAAG,UAAU,UAAa,EAAE,OAAO,OAAO,GAAG,KAAK,EAAE;AAAA,IAC1D;AAAA,EACF;AACF;AArGa,qBACK,gBAAoC;AAD/C,IAAM,sBAAN;;;AGVA,IAAM,4BAA4B,CAAC,gBAAuD;AAC/F,SAAO,CAAC,QAA0B,UAAyB,IAAI,oBAAoB,QAAQ,OAAO,WAAW;AAC/G;","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 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({ email: this.config.user.email, name: this.config.user.name })\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 (this.chain.name === WarpChainName.Multiversx && wallet.address_multiversx) return wallet.address_multiversx\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.0-beta.11",
3
+ "version": "1.0.0-beta.13",
4
4
  "description": "Gaupa wallet provider for multiple chains",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",