> ## Documentation Index
> Fetch the complete documentation index at: https://docs.norbaas.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# TanStack Start

> Pagamentos e checkouts facilitados ao extremo com TanStack Start 

`pnpm install @norbaas-sh/tanstack-start zod`

## Checkout

Crie um manipulador de Checkout que cuida dos redirecionamentos.

```typescript theme={null}
// routes/api/checkout.ts
import { Checkout } from "@norbaas-sh/tanstack-start";
import { createAPIFileRoute } from "@tanstack/react-start/api";

export const APIRoute = createAPIFileRoute("/api/checkout")({
  GET: Checkout({
    accessToken: process.env.NORBAAS_ACCESS_TOKEN,
    successUrl: process.env.SUCCESS_URL,
    server: "sandbox", //  Use sandbox se estiver testando o Norbaas - omita o parâmetro ou passe 'production' caso contrário
  }),
});
```

### Parâmetros de Consulta

Passe parâmetros de consulta para esta rota.

* products `?products=123`
* customerId (opcional) `?products=123&customerId=xxx`
* customerExternalId (opcional) `?products=123&customerExternalId=xxx`
* customerEmail (opcional) `?products=123&customerEmail=janedoe@gmail.com`
* customerName (opcional) `?products=123&customerName=Jane`
* metadata (opcional) `URL-Encoded JSON string`

## Portal do Cliente

Crie um portal do cliente onde seu cliente pode visualizar pedidos e assinaturas.

```typescript theme={null}
// routes/api/portal.ts
import { CustomerPortal } from "@norbaas-sh/tanstack-start";
import { createAPIFileRoute } from "@tanstack/react-start/api";
import { getSupabaseServerClient } from "~/servers/supabase-server";

export const APIRoute = createAPIFileRoute("/api/portal")({
  GET: CustomerPortal({
    accessToken: process.env.NORBAAS_ACCESS_TOKEN,
    getCustomerId: async (request: Request) => "", // Function to resolve a Norbaas Customer ID
    server: "sandbox", // Use sandbox se estiver testando o Norbaas - omita o parâmetro ou passe 'production' caso contrário
  }),
});
```

## Webhooks

Uma utilidade simples que resolve cargas úteis de webhook recebidas assinando corretamente o segredo do webhook.

```typescript theme={null}
// api/webhook/norbaas.ts
import { Webhooks } from "@norbaas-sh/tanstack-start";
import { createAPIFileRoute } from "@tanstack/react-start/api";

export const APIRoute = createAPIFileRoute("/api/webhook/norbaas")({
  POST: Webhooks({
    webhookSecret: process.env.NORBAAS_WEBHOOK_SECRET!,
    onPayload: async (payload) => {
      // Manipule a carga útil
      // Não é necessário retornar uma resposta de confirmação
    },
  }),
});
```

#### Manipuladores de Carga Útil

O manipulador de Webhook também oferece suporte a manipuladores granulares para integração facilitada.

* onCheckoutCreated: (payload) =>
* onCheckoutUpdated: (payload) =>
* onOrderCreated: (payload) =>
* onOrderUpdated: (payload) =>
* onOrderPaid: (payload) =>
* onSubscriptionCreated: (payload) =>
* onSubscriptionUpdated: (payload) =>
* onSubscriptionActive: (payload) =>
* onSubscriptionCanceled: (payload) =>
* onSubscriptionRevoked: (payload) =>
* onProductCreated: (payload) =>
* onProductUpdated: (payload) =>
* onOrganizationUpdated: (payload) =>
* onBenefitCreated: (payload) =>
* onBenefitUpdated: (payload) =>
* onBenefitGrantCreated: (payload) =>
* onBenefitGrantUpdated: (payload) =>
* onBenefitGrantRevoked: (payload) =>
* onCustomerCreated: (payload) =>
* onCustomerUpdated: (payload) =>
* onCustomerDeleted: (payload) =>
* onCustomerStateChanged: (payload) =>
