sendApproveSessionRequest method

  1. @override
Future sendApproveSessionRequest(
  1. String sessionTopic,
  2. String pairingTopic, {
  3. required int responseId,
  4. required Map<String, dynamic> sessionProposalResponse,
  5. required Map<String, dynamic> sessionSettlementRequest,
  6. EncodeOptions? encodeOptions,
})
override

Sign 2.5 Substitutes wc_sessionPropose sendResult() and WC_SESSION_SETTLE sendRequest() during signEngine.approveSession()

Implementation

@override
Future<dynamic> sendApproveSessionRequest(
  String sessionTopic,
  String pairingTopic, {
  required int responseId,
  required Map<String, dynamic> sessionProposalResponse,
  required Map<String, dynamic> sessionSettlementRequest,
  EncodeOptions? encodeOptions,
}) async {
  final pairingPayload = JsonRpcUtils.formatJsonRpcResponse<dynamic>(
    responseId,
    sessionProposalResponse,
  );

  final String? pairingResponseMessage = await core.crypto.encode(
    pairingTopic,
    pairingPayload,
    options: encodeOptions,
  );

  if (pairingResponseMessage == null) {
    return;
  }

  //
  final sessionSettlePayload = JsonRpcUtils.formatJsonRpcRequest(
    MethodConstants.WC_SESSION_SETTLE,
    sessionSettlementRequest,
  );

  final String? sessionSettlementRequestMessage = await core.crypto.encode(
    sessionTopic,
    sessionSettlePayload,
    options: encodeOptions,
  );

  if (sessionSettlementRequestMessage == null) {
    return;
  }

  final payload = {
    'sessionTopic': sessionTopic,
    'pairingTopic': pairingTopic,
    'sessionProposalResponse': pairingResponseMessage,
    'sessionSettlementRequest': sessionSettlementRequestMessage,
  };

  // ttl and tag are not required on Sign 2.5 methods, it's assigned relay-side
  final options = PublishOptions(
    correlationId: responseId,
    publishMethod: RelayClient.WC_APPROVE_SESSION,
  );

  await core.relayClient.publishPayload(
    payload: payload,
    options: options,
  );
  core.logger.d(
    '[$runtimeType] sendApproveSessionRequest relayClient, '
    'payload: ${jsonEncode(payload)}, options: ${jsonEncode(options.toJson())}',
  );
}