connect method
Future<ConnectResponse>
connect({
- required Map<
String, RequiredNamespace> requiredNamespaces, - String? pairingTopic,
- List<
Relay> ? relays,
override
Implementation
@override
Future<ConnectResponse> connect({
required Map<String, RequiredNamespace> requiredNamespaces,
String? pairingTopic,
List<Relay>? relays,
}) async {
_checkInitialized();
await _isValidConnect(
requiredNamespaces,
pairingTopic,
relays,
);
String? topic = pairingTopic;
Uri? uri;
bool active = false;
if (topic != null) {
final PairingInfo pairing = core.pairing.getStore().get(topic)!;
active = pairing.active;
}
if (topic == null || !active) {
final CreateResponse newTopicAndUri = await core.pairing.create();
topic = newTopicAndUri.topic;
uri = newTopicAndUri.uri;
// print('connect generated topic: $topic');
}
final publicKey = await core.crypto.generateKeyPair();
final int id = PairingUtils.payloadId();
final WcSessionProposeRequest request = WcSessionProposeRequest(
relays: relays == null
? [Relay(WalletConnectConstants.RELAYER_DEFAULT_PROTOCOL)]
: relays,
requiredNamespaces: requiredNamespaces,
proposer: ConnectionMetadata(
publicKey: publicKey,
metadata: selfMetadata,
),
);
final expiry = WalletConnectUtils.calculateExpiry(
WalletConnectConstants.FIVE_MINUTES,
);
final ProposalData proposal = ProposalData(
id: id,
expiry: expiry,
relays: request.relays,
proposer: request.proposer,
requiredNamespaces: request.requiredNamespaces,
pairingTopic: topic,
);
await _setProposal(
id,
proposal,
);
Completer completer = Completer.sync();
pendingProposals[id] = SessionProposalCompleter(
publicKey,
topic,
request.requiredNamespaces,
completer,
);
connectResponseHandler(
topic,
request,
id,
);
final ConnectResponse resp = ConnectResponse(
session: completer,
uri: uri,
);
return resp;
}