build(sdk): publish @punktfunk/host to the Gitea npm registry

- package.json: drop private; point main/types/exports/bin at a tsc-built dist/;
  add publishConfig (unom/npm registry), files, repo metadata, and the
  MIT OR Apache-2.0 license; effect becomes a peerDependency (shared instance).
- tsconfig.build.json: emit dist/ JS + .d.ts (bun shebang preserved on the bin).
- .npmrc: map the @punktfunk scope to the registry (no token committed).
- sdk-publish.yml: publish on sdk-v* tags or manual dispatch, reusing the
  REGISTRY_TOKEN secret; typecheck/test/build/tag-matches-version gate.
- README: Install section for consumers.

Verified: build green, frozen lockfile stable, bun publish --dry-run packs
@punktfunk/host@0.1.0 (dist + README only) to the unom registry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-17 15:54:36 +02:00
parent 34519566ba
commit 691c064a37
6 changed files with 142 additions and 11 deletions
+33
View File
@@ -15,6 +15,31 @@ Two surfaces, one core:
`effect/Schema` (REST shapes generated from the host's OpenAPI spec; event shapes mirroring
the host's snapshot-tested wire format).
## Install
Published to the unom [Gitea npm registry](https://git.unom.io/unom/-/packages). Point the
`@punktfunk` scope at it once — in your project's `.npmrc` (or `~/.npmrc`):
```ini
@punktfunk:registry=https://git.unom.io/api/packages/unom/npm/
```
Then install:
```sh
bun add @punktfunk/host # or: npm i @punktfunk/host
```
`effect` is a **peer dependency** (auto-installed by bun / npm ≥ 7) — so the SDK and your own
`@punktfunk/host/effect` code share one Effect instance.
If the registry requires authentication (private org, or from CI), add a token line with a Gitea
PAT that has `read:package`:
```ini
//git.unom.io/api/packages/unom/npm/:_authToken=${NODE_AUTH_TOKEN}
```
## Quickstart
```ts
@@ -66,6 +91,14 @@ A complexity ladder in [`examples/`](./examples) — start at the top:
Examples 13 are the plain Promise facade and cover most automation; you only need example 4's
Effect surface for composed, interruptible programs. Run any with `bun examples/<file>.ts`.
Plus a real-world recipe:
- [`virtualhere-dualsense.ts`](./examples/virtualhere-dualsense.ts) — **USB passthrough**: bind a
real DualSense (shared from the couch over [VirtualHere](https://www.virtualhere.com/)) to the
host for the length of each connection and release it after — full gyro, touchpad, adaptive
triggers and USB rumble instead of an emulated pad. Shows the `client.connected`/`disconnected`
bracket and clean release on `systemctl stop`.
## Connection resolution
`connect()` / `PunktfunkHostLive()` resolve, in order: