def METHOD_NAME(cls, root, info, *, id, data=None, customer_ip_address=None):
    transaction_item = cls.get_node_or_error(
        info, id, only_type="TransactionItem", field="token"
    )
    transaction_item = cast(payment_models.TransactionItem, transaction_item)
    events = transaction_item.events.all()
    if processed_event := cls.get_already_processed_event(events):
        return cls(
            transaction=transaction_item,
            transaction_event=processed_event,
            data=None,
        )
    request_event = cls.get_request_event(events)
    source_object = cls.get_source_object(transaction_item)
    app = cls.clean_payment_app(transaction_item)
    app_identifier = app.identifier
    app_identifier = cast(str, app_identifier)
    action = cls.get_action(request_event, source_object.channel)
    customer_ip_address = clean_customer_ip_address(
        info,
        customer_ip_address,
        error_code=TransactionProcessErrorCode.INVALID.value,
    )
    manager = get_plugin_manager_promise(info.context).get()
    event, data = handle_transaction_process_session(
        transaction_item=transaction_item,
        source_object=source_object,
        payment_gateway_data=PaymentGatewayData(
            app_identifier=app_identifier, data=data
        ),
        app=app,
        action=action,
        customer_ip_address=customer_ip_address,
        manager=manager,
        request_event=request_event,
    )
    transaction_item.refresh_from_db()
    return cls(transaction=transaction_item, transaction_event=event, data=data)