Fix connect to members workflow
This commit is contained in:
parent
38425bbb08
commit
5f2e123b9d
@ -174,32 +174,35 @@ export default class Services {
|
||||
}
|
||||
|
||||
public async checkConnections(members: Member[]): Promise<void> {
|
||||
const memberPromises = members.map(async (member) => {
|
||||
const addressPromises = member.sp_addresses.map(async (address) => {
|
||||
// Ensure the amount is available before proceeding
|
||||
try {
|
||||
await this.ensureSufficientAmount();
|
||||
} catch (e) {
|
||||
console.error('Failed to get tokens from relay, check connection');
|
||||
return;
|
||||
}
|
||||
let unconnectedAddresses = [];
|
||||
for (const member of members) {
|
||||
for (const address of member.sp_addresses) {
|
||||
const sharedSecret = await this.getSecretForAddress(address);
|
||||
if (!sharedSecret) {
|
||||
const connectMemberResult = await this.connectMember([{ sp_addresses: [address] }]);
|
||||
await this.handleApiReturn(connectMemberResult);
|
||||
unconnectedAddresses.push(address);
|
||||
}
|
||||
});
|
||||
|
||||
await Promise.all(addressPromises);
|
||||
});
|
||||
|
||||
await Promise.all(memberPromises);
|
||||
}
|
||||
}
|
||||
if (unconnectedAddresses && unconnectedAddresses.length != 0) {
|
||||
const apiResult = await this.connectAddresses(unconnectedAddresses);
|
||||
await this.handleApiReturn(apiResult);
|
||||
}
|
||||
}
|
||||
|
||||
public async connectMember(members: Member[]): Promise<ApiReturn> {
|
||||
if (members.length === 0) {
|
||||
throw new Error('Trying to connect to empty members list');
|
||||
public async connectAddresses(addresses: string[]): Promise<ApiReturn> {
|
||||
if (addresses.length === 0) {
|
||||
throw new Error('Trying to connect to empty addresses list');
|
||||
}
|
||||
|
||||
const members_str = members.map((member) => JSON.stringify(member));
|
||||
|
||||
try {
|
||||
// Ensure the amount is available before proceeding
|
||||
await this.ensureSufficientAmount();
|
||||
return this.sdkClient.create_connect_transaction(members_str, 1);
|
||||
return this.sdkClient.create_connect_transaction(addresses, 1);
|
||||
} catch (e) {
|
||||
console.error('Failed to connect member:', e);
|
||||
throw e;
|
||||
@ -245,8 +248,8 @@ export default class Services {
|
||||
throw new Error('No paired member in device');
|
||||
}
|
||||
const allMembers: Member[] = otherMembers;
|
||||
allMembers.push({ sp_addresses: me });
|
||||
const meAndOne = [{ sp_addresses: me }, otherMembers.pop()!];
|
||||
allMembers.push({ sp_addresses: me });
|
||||
const everyOneElse = otherMembers;
|
||||
const messagingTemplate = {
|
||||
description: 'messaging',
|
||||
@ -531,6 +534,7 @@ export default class Services {
|
||||
public async handleApiReturn(apiReturn: ApiReturn) {
|
||||
if (apiReturn.new_tx_to_send && apiReturn.new_tx_to_send.transaction.length != 0) {
|
||||
await this.sendNewTxMessage(JSON.stringify(apiReturn.new_tx_to_send));
|
||||
await new Promise(r => setTimeout(r, 500));
|
||||
}
|
||||
|
||||
if (apiReturn.secrets) {
|
||||
|
@ -164,13 +164,10 @@ export async function prepareAndSendPairingTx(secondDeviceAddress: string) {
|
||||
// Device 1 wait Device 2
|
||||
service.device1 = true;
|
||||
|
||||
const sharedSecret = await service.getSecretForAddress(secondDeviceAddress);
|
||||
if (!sharedSecret) {
|
||||
const member = {
|
||||
sp_addresses: [secondDeviceAddress],
|
||||
};
|
||||
const connectMemberResult = await service.connectMember([member]);
|
||||
await service.handleApiReturn(connectMemberResult);
|
||||
try {
|
||||
await service.checkConnections([{ sp_addresses: [secondDeviceAddress] }]);
|
||||
} catch (e) {
|
||||
throw e;
|
||||
}
|
||||
// Create the process
|
||||
setTimeout(async () => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user