From 9f76885b91acd76cec4d30682d8b6eed39f7c141 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Fri, 22 Nov 2024 16:11:47 +0100 Subject: [PATCH] Add connectMember method --- src/services/service.ts | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/services/service.ts b/src/services/service.ts index 9ef2363..706ef73 100755 --- a/src/services/service.ts +++ b/src/services/service.ts @@ -103,6 +103,50 @@ export default class Services { return apiReturn; } + public async connectMember(members: Member[]): Promise { + if (members.length === 0) { + throw new Error('Trying to connect to empty members list'); + } + + const members_str = members.map(member => JSON.stringify(member)); + + const waitForAmount = async (): Promise => { + let attempts = 3; + while (attempts > 0) { + const amount = this.getAmount(); + if (amount !== 0n) { + return amount; + } + attempts--; + if (attempts > 0) { + await new Promise((resolve) => setTimeout(resolve, 1000)); // Wait for 1 second + } + } + throw new Error('Amount is still 0 after 3 attempts'); + }; + + let availableAmt = this.getAmount(); + if (availableAmt === 0n) { + const faucetMsg = this.createFaucetMessage(); + this.sendFaucetMessage(faucetMsg); + + try { + availableAmt = await waitForAmount(); + } catch (e) { + console.error('Failed to retrieve amount:', e); + throw e; // Rethrow the error if needed + } + } + + try { + const apiReturn = this.sdkClient.create_connect_transaction(members_str, 1); + + await this.handleApiReturn(apiReturn); + } catch (e) { + console.error('Failed to connect:', e); + } + } + public async sendPairingTx(spAddress: string): Promise { const localAddress = this.sdkClient.get_address(); const emptyTxid = '0'.repeat(64);