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

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/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # @joai/warps-wallet-gaupa
2
+
3
+ Gaupa wallet provider for Warps SDK. This package enables you to use Gaupa agentic wallets with the Warps SDK.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @joai/warps-wallet-gaupa
9
+ ```
10
+
11
+ ## Prerequisites
12
+
13
+ - `@joai/warps` core package installed
14
+ - Appropriate chain adapter package(s) for your target blockchain(s)
15
+ - Gaupa API credentials (API key and public key)
16
+
17
+ ## Usage
18
+
19
+ ```typescript
20
+ import { createGaupaWalletProvider } from '@joai/warps-wallet-gaupa'
21
+ import { WarpClient } from '@joai/warps'
22
+ import { getAllChainAdapters } from '@joai/warps-adapter-<chain>'
23
+
24
+ const config = {
25
+ env: 'devnet', // or 'mainnet'
26
+ walletProviders: {
27
+ <chain>: {
28
+ gaupa: createGaupaWalletProvider({
29
+ apiKey: 'your-api-key',
30
+ publicKey: 'your-public-key',
31
+ }),
32
+ },
33
+ },
34
+ }
35
+
36
+ const client = new WarpClient(config, {
37
+ chains: getAllChainAdapters(),
38
+ })
39
+ ```
40
+
41
+ ## API
42
+
43
+ ### `GaupaWalletProvider`
44
+
45
+ Implements the `WalletProvider` interface from `@joai/warps`.
46
+
47
+ **Methods:**
48
+
49
+ - `getAddress(): Promise<string | null>` - Get the wallet address from configuration
50
+ - `getPublicKey(): Promise<string | null>` - Derive public key from the wallet address
51
+ - `signTransaction(tx: Transaction): Promise<Transaction>` - Sign a transaction using the Gaupa API's `sign-agentic-message` endpoint. The transaction is serialized as JSON and signed as a message.
52
+ - `signMessage(message: string): Promise<string>` - Sign a message using the Gaupa API
53
+ - `generate(): Promise<WarpWalletDetails>` - Create a new agentic wallet via the Gaupa API
54
+
55
+ **Unsupported Methods:**
56
+
57
+ - `importFromMnemonic()` - Not supported. Use `generate()` to create wallets via Gaupa API.
58
+ - `importFromPrivateKey()` - Not supported. Use `generate()` to create wallets via Gaupa API.
59
+ - `export()` - Not supported. Private keys are managed by Gaupa and cannot be exported.
60
+
61
+ ## How It Works
62
+
63
+ 1. **API Configuration**: The API URL is automatically configured based on the environment:
64
+ - `devnet`: `https://devnet-login.gaupa.xyz/api`
65
+ - `mainnet` or other: `https://login.gaupa.xyz/api`
66
+
67
+ 2. **Wallet Creation**: Use `generate()` to create a new agentic wallet via the Gaupa API. The wallet address is stored in your Warps configuration.
68
+
69
+ 3. **Transaction Signing**: When signing a transaction, the provider:
70
+ - Serializes the transaction data as JSON
71
+ - Calls the Gaupa API's `sign-agentic-message` endpoint with the serialized transaction
72
+ - Converts the returned hex signature to a `Uint8Array` and applies it to the transaction
73
+
74
+ 4. **Message Signing**: Messages are signed directly via the `sign-agentic-message` endpoint.
75
+
76
+ ## Configuration
77
+
78
+ The wallet configuration is stored in your Warps config under `user.wallets.<chain>`:
79
+
80
+ ```json
81
+ {
82
+ "provider": "gaupa",
83
+ "address": "erd1..."
84
+ }
85
+ ```
86
+
87
+ The address is set automatically when you call `generate()` or can be configured manually.
@@ -0,0 +1,30 @@
1
+ import { Transaction } from '@multiversx/sdk-core';
2
+ import { WalletProvider, WarpWalletProvider, WarpClientConfig, WarpChainInfo, WarpWalletDetails, WalletProviderFactory } from '@joai/warps';
3
+
4
+ type ProviderConfig = {
5
+ apiKey: string;
6
+ publicKey: string;
7
+ };
8
+
9
+ declare class GaupaWalletProvider implements WalletProvider {
10
+ private readonly config;
11
+ private readonly chain;
12
+ private readonly gaupaConfig;
13
+ static readonly PROVIDER_NAME: WarpWalletProvider;
14
+ private readonly client;
15
+ private cachedAddress;
16
+ constructor(config: WarpClientConfig, chain: WarpChainInfo, gaupaConfig: ProviderConfig);
17
+ getAddress(): Promise<string | null>;
18
+ getPublicKey(): Promise<string | null>;
19
+ signTransaction(tx: Transaction): Promise<Transaction>;
20
+ signMessage(message: string): Promise<string>;
21
+ importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails>;
22
+ importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails>;
23
+ export(): Promise<WarpWalletDetails>;
24
+ generate(): Promise<WarpWalletDetails>;
25
+ private formatTransactionForApi;
26
+ }
27
+
28
+ declare const createGaupaWalletProvider: (gaupaConfig: ProviderConfig) => WalletProviderFactory;
29
+
30
+ export { GaupaWalletProvider, type ProviderConfig, createGaupaWalletProvider };
@@ -0,0 +1,30 @@
1
+ import { Transaction } from '@multiversx/sdk-core';
2
+ import { WalletProvider, WarpWalletProvider, WarpClientConfig, WarpChainInfo, WarpWalletDetails, WalletProviderFactory } from '@joai/warps';
3
+
4
+ type ProviderConfig = {
5
+ apiKey: string;
6
+ publicKey: string;
7
+ };
8
+
9
+ declare class GaupaWalletProvider implements WalletProvider {
10
+ private readonly config;
11
+ private readonly chain;
12
+ private readonly gaupaConfig;
13
+ static readonly PROVIDER_NAME: WarpWalletProvider;
14
+ private readonly client;
15
+ private cachedAddress;
16
+ constructor(config: WarpClientConfig, chain: WarpChainInfo, gaupaConfig: ProviderConfig);
17
+ getAddress(): Promise<string | null>;
18
+ getPublicKey(): Promise<string | null>;
19
+ signTransaction(tx: Transaction): Promise<Transaction>;
20
+ signMessage(message: string): Promise<string>;
21
+ importFromMnemonic(mnemonic: string): Promise<WarpWalletDetails>;
22
+ importFromPrivateKey(privateKey: string): Promise<WarpWalletDetails>;
23
+ export(): Promise<WarpWalletDetails>;
24
+ generate(): Promise<WarpWalletDetails>;
25
+ private formatTransactionForApi;
26
+ }
27
+
28
+ declare const createGaupaWalletProvider: (gaupaConfig: ProviderConfig) => WalletProviderFactory;
29
+
30
+ export { GaupaWalletProvider, type ProviderConfig, createGaupaWalletProvider };
package/dist/index.js ADDED
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ GaupaWalletProvider: () => GaupaWalletProvider,
24
+ createGaupaWalletProvider: () => createGaupaWalletProvider
25
+ });
26
+ module.exports = __toCommonJS(index_exports);
27
+
28
+ // src/GaupaWalletProvider.ts
29
+ var import_sdk_core = require("@multiversx/sdk-core");
30
+ var import_warps = require("@joai/warps");
31
+
32
+ // src/config.ts
33
+ var getGaupaApiUrl = (env) => {
34
+ if (env === "devnet") return "https://devnet-login.gaupa.xyz/api";
35
+ return "https://login.gaupa.xyz/api";
36
+ };
37
+
38
+ // src/GaupaApiClient.ts
39
+ var GaupaApiClient = class {
40
+ constructor(apiKey, apiUrl, publicKey) {
41
+ this.apiKey = apiKey;
42
+ this.publicKey = publicKey;
43
+ this.baseUrl = apiUrl.replace(/\/$/, "");
44
+ }
45
+ async createAgenticWallet(request) {
46
+ return this.request("/manage/create-agentic-wallet", {
47
+ method: "POST",
48
+ body: JSON.stringify(request)
49
+ });
50
+ }
51
+ async signMessage(request) {
52
+ return this.request("/manage/sign-agentic-message", {
53
+ method: "POST",
54
+ body: JSON.stringify(request)
55
+ });
56
+ }
57
+ async request(endpoint, options = {}) {
58
+ const url = `${this.baseUrl}${endpoint}`;
59
+ const headers = {
60
+ "Content-Type": "application/json",
61
+ "x-api-key": this.apiKey,
62
+ "Public-Key": this.publicKey
63
+ };
64
+ const response = await fetch(url, {
65
+ ...options,
66
+ headers
67
+ });
68
+ if (!response.ok) {
69
+ const errorText = await response.text().catch(() => "Unknown error");
70
+ throw new Error(`Gaupa API error (${response.status}): ${errorText}`);
71
+ }
72
+ return response.json();
73
+ }
74
+ };
75
+
76
+ // src/GaupaWalletProvider.ts
77
+ var _GaupaWalletProvider = class _GaupaWalletProvider {
78
+ constructor(config, chain, gaupaConfig) {
79
+ this.config = config;
80
+ this.chain = chain;
81
+ this.gaupaConfig = gaupaConfig;
82
+ this.cachedAddress = null;
83
+ const apiUrl = getGaupaApiUrl(config.env);
84
+ this.client = new GaupaApiClient(gaupaConfig.apiKey, apiUrl, gaupaConfig.publicKey);
85
+ }
86
+ async getAddress() {
87
+ if (this.cachedAddress) return this.cachedAddress;
88
+ const address = (0, import_warps.getWarpWalletAddressFromConfig)(this.config, this.chain.name);
89
+ if (!address) return null;
90
+ this.cachedAddress = address;
91
+ return address;
92
+ }
93
+ async getPublicKey() {
94
+ const address = await this.getAddress();
95
+ if (!address) return null;
96
+ const pubKey = import_sdk_core.Address.newFromBech32(address).getPublicKey().toString("hex");
97
+ return pubKey;
98
+ }
99
+ async signTransaction(tx) {
100
+ const walletAddress = await this.getAddress();
101
+ 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"));
109
+ return tx;
110
+ }
111
+ async signMessage(message) {
112
+ const walletAddress = await this.getAddress();
113
+ if (!walletAddress) throw new Error("GaupaWalletProvider: Wallet address not found");
114
+ const result = await this.client.signMessage({
115
+ message,
116
+ walletAddress
117
+ });
118
+ if (!result.signature) throw new Error("Gaupa API did not return signature");
119
+ return result.signature;
120
+ }
121
+ async importFromMnemonic(mnemonic) {
122
+ throw new Error("GaupaWalletProvider: importFromMnemonic() is not supported. Use generate() to create a new wallet via Gaupa API.");
123
+ }
124
+ async importFromPrivateKey(privateKey) {
125
+ throw new Error("GaupaWalletProvider: importFromPrivateKey() is not supported. Use generate() to create a new wallet via Gaupa API.");
126
+ }
127
+ async export() {
128
+ throw new Error("GaupaWalletProvider: export() is not supported. Private keys are managed by Gaupa and cannot be exported.");
129
+ }
130
+ async generate() {
131
+ 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");
134
+ const walletDetails = {
135
+ provider: _GaupaWalletProvider.PROVIDER_NAME,
136
+ address: wallet.wallet.address_multiversx
137
+ };
138
+ (0, import_warps.setWarpWalletInConfig)(this.config, this.chain.name, walletDetails);
139
+ this.cachedAddress = wallet.wallet.address_multiversx;
140
+ return walletDetails;
141
+ } catch (error) {
142
+ throw new Error(`GaupaWalletProvider: Failed to generate wallet: ${error}`);
143
+ }
144
+ }
145
+ formatTransactionForApi(tx) {
146
+ 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) }
153
+ };
154
+ }
155
+ };
156
+ _GaupaWalletProvider.PROVIDER_NAME = "gaupa";
157
+ var GaupaWalletProvider = _GaupaWalletProvider;
158
+
159
+ // src/helpers.ts
160
+ var createGaupaWalletProvider = (gaupaConfig) => {
161
+ return (config, chain) => new GaupaWalletProvider(config, chain, gaupaConfig);
162
+ };
163
+ // Annotate the CommonJS export names for ESM import in node:
164
+ 0 && (module.exports = {
165
+ GaupaWalletProvider,
166
+ createGaupaWalletProvider
167
+ });
168
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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":[]}
package/dist/index.mjs ADDED
@@ -0,0 +1,143 @@
1
+ // src/GaupaWalletProvider.ts
2
+ import { Address } from "@multiversx/sdk-core";
3
+ import {
4
+ getWarpWalletAddressFromConfig,
5
+ setWarpWalletInConfig
6
+ } from "@joai/warps";
7
+
8
+ // src/config.ts
9
+ var getGaupaApiUrl = (env) => {
10
+ if (env === "devnet") return "https://devnet-login.gaupa.xyz/api";
11
+ return "https://login.gaupa.xyz/api";
12
+ };
13
+
14
+ // src/GaupaApiClient.ts
15
+ var GaupaApiClient = class {
16
+ constructor(apiKey, apiUrl, publicKey) {
17
+ this.apiKey = apiKey;
18
+ this.publicKey = publicKey;
19
+ this.baseUrl = apiUrl.replace(/\/$/, "");
20
+ }
21
+ async createAgenticWallet(request) {
22
+ return this.request("/manage/create-agentic-wallet", {
23
+ method: "POST",
24
+ body: JSON.stringify(request)
25
+ });
26
+ }
27
+ async signMessage(request) {
28
+ return this.request("/manage/sign-agentic-message", {
29
+ method: "POST",
30
+ body: JSON.stringify(request)
31
+ });
32
+ }
33
+ async request(endpoint, options = {}) {
34
+ const url = `${this.baseUrl}${endpoint}`;
35
+ const headers = {
36
+ "Content-Type": "application/json",
37
+ "x-api-key": this.apiKey,
38
+ "Public-Key": this.publicKey
39
+ };
40
+ const response = await fetch(url, {
41
+ ...options,
42
+ headers
43
+ });
44
+ if (!response.ok) {
45
+ const errorText = await response.text().catch(() => "Unknown error");
46
+ throw new Error(`Gaupa API error (${response.status}): ${errorText}`);
47
+ }
48
+ return response.json();
49
+ }
50
+ };
51
+
52
+ // src/GaupaWalletProvider.ts
53
+ var _GaupaWalletProvider = class _GaupaWalletProvider {
54
+ constructor(config, chain, gaupaConfig) {
55
+ this.config = config;
56
+ this.chain = chain;
57
+ this.gaupaConfig = gaupaConfig;
58
+ this.cachedAddress = null;
59
+ const apiUrl = getGaupaApiUrl(config.env);
60
+ this.client = new GaupaApiClient(gaupaConfig.apiKey, apiUrl, gaupaConfig.publicKey);
61
+ }
62
+ async getAddress() {
63
+ if (this.cachedAddress) return this.cachedAddress;
64
+ const address = getWarpWalletAddressFromConfig(this.config, this.chain.name);
65
+ if (!address) return null;
66
+ this.cachedAddress = address;
67
+ return address;
68
+ }
69
+ async getPublicKey() {
70
+ const address = await this.getAddress();
71
+ if (!address) return null;
72
+ const pubKey = Address.newFromBech32(address).getPublicKey().toString("hex");
73
+ return pubKey;
74
+ }
75
+ async signTransaction(tx) {
76
+ const walletAddress = await this.getAddress();
77
+ 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"));
85
+ return tx;
86
+ }
87
+ async signMessage(message) {
88
+ const walletAddress = await this.getAddress();
89
+ if (!walletAddress) throw new Error("GaupaWalletProvider: Wallet address not found");
90
+ const result = await this.client.signMessage({
91
+ message,
92
+ walletAddress
93
+ });
94
+ if (!result.signature) throw new Error("Gaupa API did not return signature");
95
+ return result.signature;
96
+ }
97
+ async importFromMnemonic(mnemonic) {
98
+ throw new Error("GaupaWalletProvider: importFromMnemonic() is not supported. Use generate() to create a new wallet via Gaupa API.");
99
+ }
100
+ async importFromPrivateKey(privateKey) {
101
+ throw new Error("GaupaWalletProvider: importFromPrivateKey() is not supported. Use generate() to create a new wallet via Gaupa API.");
102
+ }
103
+ async export() {
104
+ throw new Error("GaupaWalletProvider: export() is not supported. Private keys are managed by Gaupa and cannot be exported.");
105
+ }
106
+ async generate() {
107
+ 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");
110
+ const walletDetails = {
111
+ provider: _GaupaWalletProvider.PROVIDER_NAME,
112
+ address: wallet.wallet.address_multiversx
113
+ };
114
+ setWarpWalletInConfig(this.config, this.chain.name, walletDetails);
115
+ this.cachedAddress = wallet.wallet.address_multiversx;
116
+ return walletDetails;
117
+ } catch (error) {
118
+ throw new Error(`GaupaWalletProvider: Failed to generate wallet: ${error}`);
119
+ }
120
+ }
121
+ formatTransactionForApi(tx) {
122
+ 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) }
129
+ };
130
+ }
131
+ };
132
+ _GaupaWalletProvider.PROVIDER_NAME = "gaupa";
133
+ var GaupaWalletProvider = _GaupaWalletProvider;
134
+
135
+ // src/helpers.ts
136
+ var createGaupaWalletProvider = (gaupaConfig) => {
137
+ return (config, chain) => new GaupaWalletProvider(config, chain, gaupaConfig);
138
+ };
139
+ export {
140
+ GaupaWalletProvider,
141
+ createGaupaWalletProvider
142
+ };
143
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +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":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@joai/warps-wallet-gaupa",
3
+ "version": "1.0.0-beta.11",
4
+ "description": "Gaupa wallet provider for multiple chains",
5
+ "type": "module",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.mjs",
11
+ "require": "./dist/index.js",
12
+ "default": "./dist/index.mjs"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "build": "tsup",
17
+ "test": "jest --config jest.config.mjs",
18
+ "lint": "tsc --noEmit",
19
+ "preversion": "npm run lint && npm run build"
20
+ },
21
+ "author": "",
22
+ "license": "MIT",
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "devDependencies": {
27
+ "@types/jest": "^30.0.0",
28
+ "jest": "^30.2.0",
29
+ "ts-jest": "^29.4.6",
30
+ "tsup": "^8.5.1",
31
+ "typescript": "^5.9.3"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "dependencies": {
37
+ "@joai/warps": "^3.0.0-beta.198"
38
+ }
39
+ }