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