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

# MerchantId

> Registry lintas provider: mendaftarkan provider, memilih default, dan mengekspor sesi.

`MerchantId` adalah facade tingkat atas yang menyatukan beberapa provider di balik satu registry. Setiap provider (`GopayProvider`, `ShopeeProvider`) diimplementasikan sebagai `MerchantProvider` dan didaftarkan dengan id unik.

## createMerchantId

```ts theme={null}
function createMerchantId(config?: MerchantIdConfig): MerchantId;
```

Membuat registry kosong (atau terisi bila `config.providers` diberikan). Setara dengan `new MerchantId(config)`.

```ts theme={null}
import { createMerchantId } from "merchantid";

const hub = createMerchantId();
```

## MerchantIdConfig

```ts theme={null}
interface MerchantIdConfig {
  providers?: RegisteredMerchantProvider[];
  defaultProviderId?: string;
}

interface RegisteredMerchantProvider {
  provider: MerchantProvider;
  makeDefault?: boolean;
}
```

## Metode

| Metode                         | Kembalian                       | Kegunaan                                                          |
| ------------------------------ | ------------------------------- | ----------------------------------------------------------------- |
| `register(provider, options?)` | `void`                          | Daftarkan provider; `{ makeDefault: true }` menjadikannya default |
| `unregister(providerId)`       | `boolean`                       | Cabut provider; `true` bila ada yang dicabut                      |
| `get(providerId)`              | `MerchantProvider \| undefined` | Ambil provider berdasarkan id                                     |
| `require(providerId)`          | `MerchantProvider`              | Seperti `get`, tetapi melempar `ConfigError` bila tidak ada       |
| `has(providerId)`              | `boolean`                       | Cek keberadaan                                                    |
| `list()`                       | `MerchantIdProviderSummary[]`   | Ringkasan semua provider terdaftar                                |
| `getDefault()`                 | `MerchantProvider \| undefined` | Provider default aktif                                            |
| `requireDefault()`             | `MerchantProvider`              | Default aktif atau melempar `ConfigError`                         |
| `setDefault(providerId)`       | `void`                          | Set provider default; melempar bila id tak dikenal                |
| `get defaultProviderId`        | `string \| undefined`           | Id provider default aktif                                         |

## MerchantIdProviderSummary

```ts theme={null}
interface MerchantIdProviderSummary {
  id: string;
  isDefault: boolean;
  authenticated: boolean;
}
```

Dikembalikan oleh `list()`. `authenticated` memanggil getter struktural tiap provider (bukan pemeriksaan liveness jaringan).

## Contoh

```ts theme={null}
import { createMerchantId } from "merchantid";
import { GopayProvider } from "merchantid";
import { ShopeeProvider } from "merchantid";

const hub = createMerchantId();
hub.register(new GopayProvider(), { makeDefault: true });
hub.register(new ShopeeProvider());

const gopay = hub.require("gopay");
const active = hub.requireDefault();

for (const p of hub.list()) {
  console.log(p.id, p.isDefault, p.authenticated);
}
```

Lihat [Multi provider](/guide/multi-provider) untuk pola registry dan kontrak `MerchantProvider`.
