bitbadgesjs-sdk 0.30.0 → 0.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +258 -47
  2. package/dist/cjs/api-indexer/BitBadgesApi.js +12 -12
  3. package/dist/cjs/api-indexer/metadata/tokenMetadata.d.ts +4 -4
  4. package/dist/cjs/api-indexer/metadata/tokenMetadata.d.ts.map +1 -1
  5. package/dist/cjs/index.d.ts +1 -0
  6. package/dist/cjs/index.d.ts.map +1 -1
  7. package/dist/cjs/index.js +1 -0
  8. package/dist/cjs/index.js.map +1 -1
  9. package/dist/cjs/signing/BitBadgesSigningClient.d.ts +33 -0
  10. package/dist/cjs/signing/BitBadgesSigningClient.d.ts.map +1 -0
  11. package/dist/cjs/signing/BitBadgesSigningClient.js +292 -0
  12. package/dist/cjs/signing/BitBadgesSigningClient.js.map +1 -0
  13. package/dist/cjs/signing/BitBadgesSigningClient.spec.d.ts +2 -0
  14. package/dist/cjs/signing/BitBadgesSigningClient.spec.d.ts.map +1 -0
  15. package/dist/cjs/signing/BitBadgesSigningClient.spec.js +187 -0
  16. package/dist/cjs/signing/BitBadgesSigningClient.spec.js.map +1 -0
  17. package/dist/cjs/signing/adapters/GenericCosmosAdapter.d.ts +68 -0
  18. package/dist/cjs/signing/adapters/GenericCosmosAdapter.d.ts.map +1 -0
  19. package/dist/cjs/signing/adapters/GenericCosmosAdapter.js +183 -0
  20. package/dist/cjs/signing/adapters/GenericCosmosAdapter.js.map +1 -0
  21. package/dist/cjs/signing/adapters/GenericEvmAdapter.d.ts +47 -0
  22. package/dist/cjs/signing/adapters/GenericEvmAdapter.d.ts.map +1 -0
  23. package/dist/cjs/signing/adapters/GenericEvmAdapter.js +93 -0
  24. package/dist/cjs/signing/adapters/GenericEvmAdapter.js.map +1 -0
  25. package/dist/cjs/signing/adapters/WalletAdapter.d.ts +23 -0
  26. package/dist/cjs/signing/adapters/WalletAdapter.d.ts.map +1 -0
  27. package/dist/cjs/signing/adapters/WalletAdapter.js +16 -0
  28. package/dist/cjs/signing/adapters/WalletAdapter.js.map +1 -0
  29. package/dist/cjs/signing/adapters/index.d.ts +4 -0
  30. package/dist/cjs/signing/adapters/index.d.ts.map +1 -0
  31. package/dist/cjs/signing/adapters/index.js +10 -0
  32. package/dist/cjs/signing/adapters/index.js.map +1 -0
  33. package/dist/cjs/signing/index.d.ts +5 -0
  34. package/dist/cjs/signing/index.d.ts.map +1 -0
  35. package/dist/cjs/signing/index.js +12 -0
  36. package/dist/cjs/signing/index.js.map +1 -0
  37. package/dist/cjs/signing/types.d.ts +76 -0
  38. package/dist/cjs/signing/types.d.ts.map +1 -0
  39. package/dist/cjs/signing/types.js +24 -0
  40. package/dist/cjs/signing/types.js.map +1 -0
  41. package/dist/cjs/tsconfig.build.tsbuildinfo +1 -1
  42. package/dist/esm/api-indexer/BitBadgesApi.js +12 -12
  43. package/dist/esm/api-indexer/metadata/tokenMetadata.d.ts +4 -4
  44. package/dist/esm/api-indexer/metadata/tokenMetadata.d.ts.map +1 -1
  45. package/dist/esm/index.d.ts +1 -0
  46. package/dist/esm/index.d.ts.map +1 -1
  47. package/dist/esm/index.js +1 -0
  48. package/dist/esm/index.js.map +1 -1
  49. package/dist/esm/signing/BitBadgesSigningClient.d.ts +33 -0
  50. package/dist/esm/signing/BitBadgesSigningClient.d.ts.map +1 -0
  51. package/dist/esm/signing/BitBadgesSigningClient.js +294 -0
  52. package/dist/esm/signing/BitBadgesSigningClient.js.map +1 -0
  53. package/dist/esm/signing/BitBadgesSigningClient.spec.d.ts +2 -0
  54. package/dist/esm/signing/BitBadgesSigningClient.spec.d.ts.map +1 -0
  55. package/dist/esm/signing/BitBadgesSigningClient.spec.js +181 -0
  56. package/dist/esm/signing/BitBadgesSigningClient.spec.js.map +1 -0
  57. package/dist/esm/signing/adapters/GenericCosmosAdapter.d.ts +68 -0
  58. package/dist/esm/signing/adapters/GenericCosmosAdapter.d.ts.map +1 -0
  59. package/dist/esm/signing/adapters/GenericCosmosAdapter.js +156 -0
  60. package/dist/esm/signing/adapters/GenericCosmosAdapter.js.map +1 -0
  61. package/dist/esm/signing/adapters/GenericEvmAdapter.d.ts +47 -0
  62. package/dist/esm/signing/adapters/GenericEvmAdapter.d.ts.map +1 -0
  63. package/dist/esm/signing/adapters/GenericEvmAdapter.js +92 -0
  64. package/dist/esm/signing/adapters/GenericEvmAdapter.js.map +1 -0
  65. package/dist/esm/signing/adapters/WalletAdapter.d.ts +23 -0
  66. package/dist/esm/signing/adapters/WalletAdapter.d.ts.map +1 -0
  67. package/dist/esm/signing/adapters/WalletAdapter.js +12 -0
  68. package/dist/esm/signing/adapters/WalletAdapter.js.map +1 -0
  69. package/dist/esm/signing/adapters/index.d.ts +4 -0
  70. package/dist/esm/signing/adapters/index.d.ts.map +1 -0
  71. package/dist/esm/signing/adapters/index.js +4 -0
  72. package/dist/esm/signing/adapters/index.js.map +1 -0
  73. package/dist/esm/signing/index.d.ts +5 -0
  74. package/dist/esm/signing/index.d.ts.map +1 -0
  75. package/dist/esm/signing/index.js +4 -0
  76. package/dist/esm/signing/index.js.map +1 -0
  77. package/dist/esm/signing/types.d.ts +76 -0
  78. package/dist/esm/signing/types.d.ts.map +1 -0
  79. package/dist/esm/signing/types.js +21 -0
  80. package/dist/esm/signing/types.js.map +1 -0
  81. package/dist/esm/tsconfig-esm.build.tsbuildinfo +1 -1
  82. package/package.json +1 -1
@@ -0,0 +1,294 @@
1
+ import { convertToBitBadgesAddress } from '../address-converter/converter.js';
2
+ import { generateEndpointAccount } from '../node-rest-api/account.js';
3
+ import { createTransactionPayload, createTxBroadcastBody } from '../transactions/messages/base.js';
4
+ import axios from 'axios';
5
+ import { NETWORK_CONFIGS } from './types.js';
6
+ const DEFAULT_GAS_LIMIT = 400000;
7
+ const DEFAULT_EVM_PRECOMPILE_GAS_LIMIT = 2000000;
8
+ const DEFAULT_GAS_MULTIPLIER = 1.3;
9
+ const DEFAULT_MAX_SEQUENCE_RETRIES = 3;
10
+ const DEFAULT_FEE_DENOM = 'ubadge';
11
+ const DEFAULT_GAS_PRICE = 0.025;
12
+ export class BitBadgesSigningClient {
13
+ adapter;
14
+ networkConfig;
15
+ sequenceRetryEnabled;
16
+ maxSequenceRetries;
17
+ gasMultiplier;
18
+ defaultGasLimit;
19
+ evmPrecompileGasLimit;
20
+ apiKey;
21
+ axiosInstance;
22
+ cachedAccountInfo = null;
23
+ constructor(options) {
24
+ this.adapter = options.adapter;
25
+ const network = options.network || 'mainnet';
26
+ const baseConfig = NETWORK_CONFIGS[network];
27
+ this.networkConfig = {
28
+ apiUrl: options.apiUrl || baseConfig.apiUrl,
29
+ nodeUrl: options.nodeUrl || baseConfig.nodeUrl,
30
+ cosmosChainId: options.cosmosChainId || baseConfig.cosmosChainId,
31
+ evmChainId: options.evmChainId ?? baseConfig.evmChainId
32
+ };
33
+ this.sequenceRetryEnabled = options.sequenceRetryEnabled !== false;
34
+ this.maxSequenceRetries = options.maxSequenceRetries || DEFAULT_MAX_SEQUENCE_RETRIES;
35
+ this.gasMultiplier = options.gasMultiplier || DEFAULT_GAS_MULTIPLIER;
36
+ this.defaultGasLimit = options.defaultGasLimit || DEFAULT_GAS_LIMIT;
37
+ this.evmPrecompileGasLimit = options.evmPrecompileGasLimit || DEFAULT_EVM_PRECOMPILE_GAS_LIMIT;
38
+ this.apiKey = options.apiKey;
39
+ this.axiosInstance = axios.create({
40
+ headers: {
41
+ 'Content-Type': 'application/json',
42
+ ...(this.apiKey && { 'x-api-key': this.apiKey })
43
+ }
44
+ });
45
+ }
46
+ get config() {
47
+ return this.networkConfig;
48
+ }
49
+ get address() {
50
+ const addr = this.adapter.address;
51
+ if (addr.startsWith('0x')) {
52
+ return convertToBitBadgesAddress(addr);
53
+ }
54
+ return addr;
55
+ }
56
+ get chainType() {
57
+ return this.adapter.chainType;
58
+ }
59
+ get chainId() {
60
+ return this.networkConfig.cosmosChainId;
61
+ }
62
+ get evmChainId() {
63
+ return this.networkConfig.evmChainId;
64
+ }
65
+ get nodeUrl() {
66
+ return this.networkConfig.nodeUrl;
67
+ }
68
+ get apiUrl() {
69
+ return this.networkConfig.apiUrl;
70
+ }
71
+ async getAccountInfo(forceRefresh = false) {
72
+ if (this.cachedAccountInfo && !forceRefresh) {
73
+ return this.cachedAccountInfo;
74
+ }
75
+ const bbAddress = this.address;
76
+ const endpoint = generateEndpointAccount(bbAddress);
77
+ const response = await this.axiosInstance.get(`${this.nodeUrl}${endpoint}`);
78
+ const account = response.data?.account;
79
+ const baseAccount = account?.base_account || account;
80
+ if (!baseAccount) {
81
+ let publicKey = '';
82
+ try {
83
+ publicKey = await this.adapter.getPublicKey();
84
+ }
85
+ catch {
86
+ }
87
+ this.cachedAccountInfo = {
88
+ address: bbAddress,
89
+ accountNumber: 0,
90
+ sequence: 0,
91
+ publicKey
92
+ };
93
+ return this.cachedAccountInfo;
94
+ }
95
+ let publicKey = baseAccount.pub_key?.key || '';
96
+ if (!publicKey) {
97
+ try {
98
+ publicKey = await this.adapter.getPublicKey();
99
+ }
100
+ catch {
101
+ }
102
+ }
103
+ this.cachedAccountInfo = {
104
+ address: bbAddress,
105
+ accountNumber: parseInt(baseAccount.account_number || '0', 10),
106
+ sequence: parseInt(baseAccount.sequence || '0', 10),
107
+ publicKey
108
+ };
109
+ return this.cachedAccountInfo;
110
+ }
111
+ clearCache() {
112
+ this.cachedAccountInfo = null;
113
+ }
114
+ calculateFee(gasLimit) {
115
+ const amount = Math.ceil(gasLimit * DEFAULT_GAS_PRICE);
116
+ return {
117
+ amount: amount.toString(),
118
+ denom: DEFAULT_FEE_DENOM,
119
+ gas: gasLimit.toString()
120
+ };
121
+ }
122
+ async simulate(messages, options) {
123
+ const accountInfo = await this.getAccountInfo();
124
+ if (!accountInfo.publicKey) {
125
+ throw new Error('Public key is required for simulation. Sign a transaction first to register the public key on chain.');
126
+ }
127
+ const protoMessages = this.normalizeMessages(messages);
128
+ const dummySignature = '0'.repeat(128);
129
+ const txContext = {
130
+ chainIdOverride: this.chainId,
131
+ sender: {
132
+ address: this.address,
133
+ sequence: accountInfo.sequence,
134
+ accountNumber: accountInfo.accountNumber,
135
+ publicKey: accountInfo.publicKey
136
+ },
137
+ fee: this.calculateFee(this.defaultGasLimit),
138
+ memo: options?.memo || ''
139
+ };
140
+ const broadcastBody = createTxBroadcastBody(txContext, protoMessages, dummySignature);
141
+ const response = await this.axiosInstance.post(`${this.apiUrl}/api/v0/simulate`, JSON.parse(broadcastBody));
142
+ const gasUsed = parseInt(response.data.gas_info?.gas_used || '0', 10);
143
+ const gasLimit = Math.ceil(gasUsed * this.gasMultiplier);
144
+ return {
145
+ gasUsed,
146
+ gasLimit,
147
+ fee: this.calculateFee(gasLimit)
148
+ };
149
+ }
150
+ normalizeMessages(messages) {
151
+ return messages.map((msg) => {
152
+ if (msg && typeof msg.toProto === 'function') {
153
+ return msg.toProto();
154
+ }
155
+ return msg;
156
+ });
157
+ }
158
+ async signAndBroadcast(messages, options) {
159
+ if (this.adapter.chainType === 'evm') {
160
+ return this.signAndBroadcastEvm(messages, options);
161
+ }
162
+ return this.signAndBroadcastCosmos(messages, options);
163
+ }
164
+ async signAndBroadcastCosmos(messages, options, retryCount = 0) {
165
+ const accountInfo = await this.getAccountInfo();
166
+ if (!accountInfo.publicKey) {
167
+ const pubKey = await this.adapter.getPublicKey();
168
+ if (!pubKey) {
169
+ throw new Error('Public key is required for Cosmos transactions');
170
+ }
171
+ accountInfo.publicKey = pubKey;
172
+ this.cachedAccountInfo = accountInfo;
173
+ }
174
+ const protoMessages = this.normalizeMessages(messages);
175
+ let fee;
176
+ if (options?.fee) {
177
+ fee = options.fee;
178
+ }
179
+ else if (options?.simulate !== false) {
180
+ try {
181
+ const simResult = await this.simulate(messages, { memo: options?.memo });
182
+ const multiplier = options?.gasMultiplier || this.gasMultiplier;
183
+ const adjustedGas = Math.ceil(simResult.gasUsed * multiplier);
184
+ fee = this.calculateFee(adjustedGas);
185
+ }
186
+ catch {
187
+ fee = this.calculateFee(this.defaultGasLimit);
188
+ }
189
+ }
190
+ else {
191
+ fee = this.calculateFee(this.defaultGasLimit);
192
+ }
193
+ const txContext = {
194
+ chainIdOverride: this.chainId,
195
+ sender: {
196
+ address: this.address,
197
+ sequence: accountInfo.sequence,
198
+ accountNumber: accountInfo.accountNumber,
199
+ publicKey: accountInfo.publicKey
200
+ },
201
+ fee,
202
+ memo: options?.memo || ''
203
+ };
204
+ const payload = createTransactionPayload(txContext, protoMessages);
205
+ if (!this.adapter.signDirect) {
206
+ throw new Error('Cosmos adapter must implement signDirect');
207
+ }
208
+ const signResult = await this.adapter.signDirect(payload, accountInfo.accountNumber);
209
+ const broadcastBody = createTxBroadcastBody(txContext, protoMessages, signResult.signature);
210
+ try {
211
+ const response = await this.axiosInstance.post(`${this.apiUrl}/api/v0/broadcast`, JSON.parse(broadcastBody));
212
+ const txResponse = response.data.tx_response;
213
+ const code = txResponse?.code || 0;
214
+ if (code !== 0 && this.isSequenceMismatchError(txResponse?.raw_log)) {
215
+ if (this.sequenceRetryEnabled && retryCount < this.maxSequenceRetries) {
216
+ this.clearCache();
217
+ return this.signAndBroadcastCosmos(messages, options, retryCount + 1);
218
+ }
219
+ }
220
+ if (code === 0 && this.cachedAccountInfo) {
221
+ this.cachedAccountInfo.sequence += 1;
222
+ }
223
+ return {
224
+ txHash: txResponse?.txhash || '',
225
+ rawResponse: response.data,
226
+ success: code === 0,
227
+ error: code !== 0 ? txResponse?.raw_log : undefined,
228
+ code
229
+ };
230
+ }
231
+ catch (error) {
232
+ const rawLog = error?.response?.data?.tx_response?.raw_log || error?.message || '';
233
+ if (this.isSequenceMismatchError(rawLog)) {
234
+ if (this.sequenceRetryEnabled && retryCount < this.maxSequenceRetries) {
235
+ this.clearCache();
236
+ return this.signAndBroadcastCosmos(messages, options, retryCount + 1);
237
+ }
238
+ }
239
+ return {
240
+ txHash: '',
241
+ rawResponse: error?.response?.data,
242
+ success: false,
243
+ error: error?.message || 'Unknown error',
244
+ code: error?.response?.data?.tx_response?.code || -1
245
+ };
246
+ }
247
+ }
248
+ isSequenceMismatchError(message) {
249
+ if (!message)
250
+ return false;
251
+ return message.includes('account sequence mismatch') || message.includes('incorrect account sequence');
252
+ }
253
+ async signAndBroadcastEvm(messages, options) {
254
+ if (!this.adapter.sendEvmTransaction) {
255
+ throw new Error('EVM adapter must implement sendEvmTransaction');
256
+ }
257
+ const protoMessages = this.normalizeMessages(messages);
258
+ const evmAddress = this.adapter.address;
259
+ const txContext = {
260
+ chainIdOverride: this.chainId,
261
+ evmAddress,
262
+ fee: this.calculateFee(this.evmPrecompileGasLimit),
263
+ memo: options?.memo || ''
264
+ };
265
+ const payload = createTransactionPayload(txContext, protoMessages);
266
+ if (!payload.evmTx) {
267
+ throw new Error('Messages are not supported for EVM precompile conversion');
268
+ }
269
+ try {
270
+ const txHash = await this.adapter.sendEvmTransaction({
271
+ to: payload.evmTx.to,
272
+ data: payload.evmTx.data,
273
+ value: payload.evmTx.value,
274
+ gasLimit: this.evmPrecompileGasLimit
275
+ });
276
+ return {
277
+ txHash,
278
+ rawResponse: { evmTx: payload.evmTx },
279
+ success: true,
280
+ code: 0
281
+ };
282
+ }
283
+ catch (error) {
284
+ return {
285
+ txHash: '',
286
+ rawResponse: null,
287
+ success: false,
288
+ error: error?.message || 'EVM transaction failed',
289
+ code: -1
290
+ };
291
+ }
292
+ }
293
+ }
294
+ //# sourceMappingURL=BitBadgesSigningClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitBadgesSigningClient.js","sourceRoot":"","sources":["../../../src/signing/BitBadgesSigningClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BitBadgesSigningClient.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitBadgesSigningClient.spec.d.ts","sourceRoot":"","sources":["../../../src/signing/BitBadgesSigningClient.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,181 @@
1
+ import { BitBadgesSigningClient } from './BitBadgesSigningClient.js';
2
+ jest.mock('axios', () => ({
3
+ create: jest.fn(() => ({
4
+ get: jest.fn(),
5
+ post: jest.fn()
6
+ }))
7
+ }));
8
+ class MockCosmosAdapter {
9
+ chainType = 'cosmos';
10
+ address = 'bb1test123456789abcdefghijklmnopqrstuv';
11
+ async getPublicKey() {
12
+ return 'A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4Y5Z6';
13
+ }
14
+ async signDirect(_payload, _accountNumber) {
15
+ return {
16
+ signature: '0'.repeat(128),
17
+ publicKey: 'A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4Y5Z6'
18
+ };
19
+ }
20
+ supportsSignDirect() {
21
+ return true;
22
+ }
23
+ supportsSignAmino() {
24
+ return false;
25
+ }
26
+ supportsEvmTransaction() {
27
+ return false;
28
+ }
29
+ }
30
+ class MockEvmAdapter {
31
+ chainType = 'evm';
32
+ address = '0x1234567890123456789012345678901234567890';
33
+ async getPublicKey() {
34
+ return '';
35
+ }
36
+ async sendEvmTransaction(_tx) {
37
+ return '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890';
38
+ }
39
+ supportsSignDirect() {
40
+ return false;
41
+ }
42
+ supportsSignAmino() {
43
+ return false;
44
+ }
45
+ supportsEvmTransaction() {
46
+ return true;
47
+ }
48
+ }
49
+ describe('BitBadgesSigningClient', () => {
50
+ describe('constructor', () => {
51
+ it('should create a client with default options', () => {
52
+ const adapter = new MockCosmosAdapter();
53
+ const client = new BitBadgesSigningClient({ adapter });
54
+ expect(client.address).toBe(adapter.address);
55
+ expect(client.chainType).toBe('cosmos');
56
+ });
57
+ it('should create a client with custom options', () => {
58
+ const adapter = new MockCosmosAdapter();
59
+ const client = new BitBadgesSigningClient({
60
+ adapter,
61
+ apiUrl: 'https://custom-api.example.com',
62
+ nodeUrl: 'https://custom-node.example.com:1317',
63
+ network: 'testnet',
64
+ sequenceRetryEnabled: false,
65
+ maxSequenceRetries: 5,
66
+ gasMultiplier: 1.5,
67
+ defaultGasLimit: 500000
68
+ });
69
+ expect(client.address).toBe(adapter.address);
70
+ });
71
+ it('should handle EVM adapter address conversion', () => {
72
+ const adapter = new MockEvmAdapter();
73
+ const client = new BitBadgesSigningClient({ adapter });
74
+ expect(client.chainType).toBe('evm');
75
+ });
76
+ });
77
+ describe('clearCache', () => {
78
+ it('should clear cached account info', () => {
79
+ const adapter = new MockCosmosAdapter();
80
+ const client = new BitBadgesSigningClient({ adapter });
81
+ client.clearCache();
82
+ });
83
+ });
84
+ describe('adapter type detection', () => {
85
+ it('should detect Cosmos adapter', () => {
86
+ const adapter = new MockCosmosAdapter();
87
+ const client = new BitBadgesSigningClient({ adapter });
88
+ expect(client.chainType).toBe('cosmos');
89
+ });
90
+ it('should detect EVM adapter', () => {
91
+ const adapter = new MockEvmAdapter();
92
+ const client = new BitBadgesSigningClient({ adapter });
93
+ expect(client.chainType).toBe('evm');
94
+ });
95
+ });
96
+ });
97
+ describe('WalletAdapter interfaces', () => {
98
+ describe('MockCosmosAdapter', () => {
99
+ const adapter = new MockCosmosAdapter();
100
+ it('should have correct chainType', () => {
101
+ expect(adapter.chainType).toBe('cosmos');
102
+ });
103
+ it('should support signDirect', () => {
104
+ expect(adapter.supportsSignDirect()).toBe(true);
105
+ });
106
+ it('should not support EVM transactions', () => {
107
+ expect(adapter.supportsEvmTransaction()).toBe(false);
108
+ });
109
+ it('should return public key', async () => {
110
+ const pubKey = await adapter.getPublicKey();
111
+ expect(pubKey).toBeTruthy();
112
+ });
113
+ it('should sign transactions', async () => {
114
+ const mockPayload = {
115
+ signDirect: {
116
+ body: { toBinary: () => new Uint8Array() },
117
+ authInfo: { toBinary: () => new Uint8Array() },
118
+ signBytes: 'dGVzdA=='
119
+ },
120
+ legacyAmino: {
121
+ body: { toBinary: () => new Uint8Array() },
122
+ authInfo: { toBinary: () => new Uint8Array() },
123
+ signBytes: 'dGVzdA=='
124
+ }
125
+ };
126
+ const result = await adapter.signDirect(mockPayload, 123);
127
+ expect(result.signature).toBeTruthy();
128
+ expect(result.signature.length).toBe(128);
129
+ expect(result.publicKey).toBeTruthy();
130
+ });
131
+ });
132
+ describe('MockEvmAdapter', () => {
133
+ const adapter = new MockEvmAdapter();
134
+ it('should have correct chainType', () => {
135
+ expect(adapter.chainType).toBe('evm');
136
+ });
137
+ it('should not support signDirect', () => {
138
+ expect(adapter.supportsSignDirect()).toBe(false);
139
+ });
140
+ it('should support EVM transactions', () => {
141
+ expect(adapter.supportsEvmTransaction()).toBe(true);
142
+ });
143
+ it('should send EVM transactions', async () => {
144
+ const txHash = await adapter.sendEvmTransaction({
145
+ to: '0x1001',
146
+ data: '0x12345678',
147
+ value: '0'
148
+ });
149
+ expect(txHash).toBeTruthy();
150
+ expect(txHash.startsWith('0x')).toBe(true);
151
+ });
152
+ });
153
+ });
154
+ describe('SigningClientOptions', () => {
155
+ it('should use default values when not specified', () => {
156
+ const adapter = new MockCosmosAdapter();
157
+ const client = new BitBadgesSigningClient({ adapter });
158
+ expect(client).toBeDefined();
159
+ });
160
+ it('should respect network mode', () => {
161
+ const adapter = new MockCosmosAdapter();
162
+ const clientMainnet = new BitBadgesSigningClient({ adapter, network: 'mainnet' });
163
+ const clientTestnet = new BitBadgesSigningClient({ adapter, network: 'testnet' });
164
+ const clientLocal = new BitBadgesSigningClient({ adapter, network: 'local' });
165
+ expect(clientMainnet).toBeDefined();
166
+ expect(clientTestnet).toBeDefined();
167
+ expect(clientLocal).toBeDefined();
168
+ });
169
+ it('should respect custom chain IDs', () => {
170
+ const adapter = new MockCosmosAdapter();
171
+ const client = new BitBadgesSigningClient({
172
+ adapter,
173
+ cosmosChainId: 'custom-chain-123',
174
+ evmChainId: 12345
175
+ });
176
+ expect(client).toBeDefined();
177
+ expect(client.config.cosmosChainId).toBe('custom-chain-123');
178
+ expect(client.evmChainId).toBe(12345);
179
+ });
180
+ });
181
+ //# sourceMappingURL=BitBadgesSigningClient.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitBadgesSigningClient.spec.js","sourceRoot":"","sources":["../../../src/signing/BitBadgesSigningClient.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { BaseWalletAdapter, type WalletAdapter } from './WalletAdapter.js';
2
+ import type { SigningResult } from '../types.js';
3
+ import type { TransactionPayload } from '../../transactions/messages/base.js';
4
+ interface KeplrLike {
5
+ enable(chainId: string): Promise<void>;
6
+ getKey(chainId: string): Promise<{
7
+ name: string;
8
+ algo: string;
9
+ pubKey: Uint8Array;
10
+ address: Uint8Array;
11
+ bech32Address: string;
12
+ isNanoLedger: boolean;
13
+ }>;
14
+ signDirect(chainId: string, signer: string, signDoc: {
15
+ bodyBytes: Uint8Array;
16
+ authInfoBytes: Uint8Array;
17
+ chainId: string;
18
+ accountNumber: bigint | string;
19
+ }, signOptions?: {
20
+ preferNoSetFee?: boolean;
21
+ preferNoSetMemo?: boolean;
22
+ disableBalanceCheck?: boolean;
23
+ }): Promise<{
24
+ signed: {
25
+ bodyBytes: Uint8Array;
26
+ authInfoBytes: Uint8Array;
27
+ chainId: string;
28
+ accountNumber: string;
29
+ };
30
+ signature: {
31
+ pub_key: {
32
+ type: string;
33
+ value: string;
34
+ };
35
+ signature: string;
36
+ };
37
+ }>;
38
+ }
39
+ export interface GenericCosmosAdapterConfig {
40
+ chainId: string;
41
+ prefix?: string;
42
+ }
43
+ export declare class GenericCosmosAdapter extends BaseWalletAdapter implements WalletAdapter {
44
+ readonly chainType: "cosmos";
45
+ readonly address: string;
46
+ private readonly chainId;
47
+ private readonly prefix;
48
+ private readonly publicKeyBase64;
49
+ private readonly signingStrategy;
50
+ private readonly isBrowserWallet;
51
+ private constructor();
52
+ static fromKeplr(chainId: string): Promise<GenericCosmosAdapter>;
53
+ static fromLeap(chainId: string): Promise<GenericCosmosAdapter>;
54
+ static fromCosmostation(chainId: string): Promise<GenericCosmosAdapter>;
55
+ static fromBrowserWallet(wallet: KeplrLike, chainId: string, prefix?: string): Promise<GenericCosmosAdapter>;
56
+ static fromWallet(wallet: KeplrLike, chainId: string, prefix?: string): Promise<GenericCosmosAdapter>;
57
+ static fromMnemonic(mnemonic: string, chainId: string, prefix?: string): Promise<GenericCosmosAdapter>;
58
+ static fromPrivateKey(privateKey: string, chainId: string, prefix?: string): Promise<GenericCosmosAdapter>;
59
+ private static createFromEthersWallet;
60
+ private static compressPublicKey;
61
+ getPublicKey(): Promise<string>;
62
+ signDirect(payload: TransactionPayload, accountNumber: number): Promise<SigningResult>;
63
+ supportsSignDirect(): boolean;
64
+ supportsSignAmino(): boolean;
65
+ supportsEvmTransaction(): boolean;
66
+ }
67
+ export {};
68
+ //# sourceMappingURL=GenericCosmosAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericCosmosAdapter.d.ts","sourceRoot":"","sources":["../../../../src/signing/adapters/GenericCosmosAdapter.ts"],"names":[],"mappings":"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"}