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