TL,DR: you’ll want the Customer API, Orders API, and Invoices API.
I would check out this script: connect-api-examples/invoice.js at master · square/connect-api-examples · GitHub
It generates an invoice that’s assigned to a customer, and then captures payment using a card on file. The invoice is generated from an order that is created, so the only arguments needed are the location_id, order_id, and customer_id. You can schedule invoices to capture payment down to the minute (I believe), so you could create the invoice, and then schedule it capture payment 1 hour after the session ends.
Of note here is that the above script is only compatible with version <9 of the SDK, since they switched over to using big integers for total amounts in that version. You can read more about that in this thread: BigInt Type Error on new Node SDK which includes fixes for both React Native and Express.