Something went wrong. Try again.
A lexicon-driven AppView for ATProto. forked from gamesgamesgamesgames.games/happyview
Something went wrong. Try again.
README.md
# @happyview/oauth-client-node
Node.js OAuth client for authenticating with a [HappyView](https://github.com/gamesgamesgamesgamesgames/happyview) instance using AT Protocol.
Built on top of [`@happyview/oauth-client`](https://www.npmjs.com/package/@happyview/oauth-client). Matches the API surface of [`@atproto/oauth-client-node`](https://www.npmjs.com/package/@atproto/oauth-client-node).
## Installation
```bash
npm install @happyview/oauth-client-node
```
## Usage
### Setup
```typescript
import { HappyViewNodeClient } from "@happyview/oauth-client-node";
const client = new HappyViewNodeClient({
instanceUrl: "https://happyview.example.com",
clientId: "https://example.com/oauth-client-metadata.json",
clientKey: "hvc_your_client_key",
clientSecret: "hvs_your_secret", // optional, for confidential clients
redirectUri: "https://example.com/oauth/callback",
storage: myStorageAdapter,
});
```
### Authorize
Generate an authorization URL and redirect the user:
```typescript
const url = await client.authorize("alice.bsky.social");
// Redirect the user to url.href
```
With options:
```typescript
const url = await client.authorize("alice.bsky.social", {
scope: "atproto transition:generic",
redirect_uri: "https://example.com/alt-callback",
prompt: "login",
display: "page",
});
```
### Callback
On your callback route, process the OAuth response:
```typescript
const params = new URLSearchParams(req.url.split("?")[1]);
const { session, state } = await client.callback(params);
```
### Restore Session
Restore a session by DID:
```typescript
const session = await client.restore("did:plc:abc123");
```
### Session
```typescript
// Authenticated requests
const response = await session.fetchHandler(
"/xrpc/com.example.getStuff?limit=10",
{ method: "GET" },
);
// Token metadata
const info = session.getTokenInfo();
// { sub, scope, iss, aud }
// Self-revoke
await session.signOut();
```
### Using with @atproto/api
```typescript
import { Agent } from "@atproto/api";
const agent = new Agent(…