# Inter-app API showcase

Generated with `wrnexus workspace inter-app-api-showcase`.

- `web` exposes `GET /api/product` and calls admin through private RPC.
- `admin` provides the `catalog` service.
- `packages/shared` owns the typed contract imported by both apps.

Run the verification from the repository root:

```bash
bun test examples/inter-app-api-showcase/apps/web/test/inter-app.test.ts
```

A WrNexus **workspace** — multiple apps, one gateway, interconnected.

```
inter-app-api-showcase/
  wrnexus.workspace.ts   # apps ↔ domains map (used by `wrnexus gateway`)
  apps/
    web/                # a WrNexus app  → localhost, web.localhost
    admin/              # a WrNexus app  → admin.localhost
  packages/
    shared/             # @app/shared — shared code + cross-app pubsub bus
```

## Run everything (one port, routed by domain)

```bash
bun install
bun run dev            # = wrnexus gateway  → http://127.0.0.1:3000
```

Add the hosts to your machine (e.g. /etc/hosts):

```
127.0.0.1 web.localhost admin.localhost
```

Open `http://localhost:3000` for the web app or
`http://admin.localhost:3000` for the admin app. The ports printed for individual
apps are internal gateway targets, not public workspace URLs.

## Interconnect

- **Shared code:** import `@app/shared` in any app.
- **Runtime messaging:** `import { bus } from "@app/shared"` then
  `bus.publish("tenant:created", {...})` in one app and
  `bus.subscribe("tenant:*", fn)` in another (needs Redis).
- **Databases:** point apps at the same `db`/`databases` in their config.

## Add another app

```bash
wrnexus workspace add reports --domain=reports.localhost
```
