connect method
Future<ConnectResponse>
connect({
- Map<
String, RequiredNamespace> ? requiredNamespaces, - Map<
String, RequiredNamespace> ? optionalNamespaces, - Map<
String, String> ? sessionProperties, - String? pairingTopic,
- List<
Relay> ? relays, - List<
List< ? methods = DEFAULT_METHODS,String> >
override
Implementation
@override
Future<ConnectResponse> connect({
Map<String, RequiredNamespace>? requiredNamespaces,
Map<String, RequiredNamespace>? optionalNamespaces,
Map<String, String>? sessionProperties,
String? pairingTopic,
List<Relay>? relays,
List<List<String>>? methods = DEFAULT_METHODS,
}) async {
_checkInitialized();
await _isValidConnect(
requiredNamespaces: requiredNamespaces ?? {},
optionalNamespaces: optionalNamespaces ?? {},
sessionProperties: sessionProperties,
pairingTopic: pairingTopic,
relays: relays,
);
String? pTopic = pairingTopic;
Uri? uri;
if (pTopic == null) {
final CreateResponse newTopicAndUri = await core.pairing.create(
methods: methods,
);
pTopic = newTopicAndUri.topic;
uri = newTopicAndUri.uri;
// print('connect generated topic: $topic');
} else {
core.pairing.isValidPairingTopic(topic: pTopic);
}
final publicKey = await core.crypto.generateKeyPair();
final int id = JsonRpcUtils.payloadId();
final WcSessionProposeRequest request = WcSessionProposeRequest(
relays:
relays ?? [Relay(WalletConnectConstants.RELAYER_DEFAULT_PROTOCOL)],
requiredNamespaces: requiredNamespaces ?? {},
optionalNamespaces: optionalNamespaces ?? {},
proposer: ConnectionMetadata(
publicKey: publicKey,
metadata: metadata,
),
sessionProperties: sessionProperties,
);
final expiry = WalletConnectUtils.calculateExpiry(
WalletConnectConstants.FIVE_MINUTES,
);
final ProposalData proposal = ProposalData(
id: id,
expiry: expiry,
relays: request.relays,
proposer: request.proposer,
requiredNamespaces: request.requiredNamespaces,
optionalNamespaces: request.optionalNamespaces ?? {},
sessionProperties: request.sessionProperties,
pairingTopic: pTopic,
);
await _setProposal(
id,
proposal,
);
Completer<SessionData> completer = Completer();
pendingProposals.add(
SessionProposalCompleter(
id: id,
selfPublicKey: publicKey,
pairingTopic: pTopic,
requiredNamespaces: request.requiredNamespaces,
optionalNamespaces: request.optionalNamespaces ?? {},
sessionProperties: request.sessionProperties,
completer: completer,
),
);
_connectResponseHandler(
pTopic,
request,
id,
);
final ConnectResponse resp = ConnectResponse(
pairingTopic: pTopic,
session: completer,
uri: uri,
);
return resp;
}