···6969- **Publication**: Yoast organization name, website name, homepage meta description
7070- **Documents**: Yoast SEO title, social title, X title, meta description, social description, X description, social image, X image
71717272+## Self-Hosting the OAuth Service
7373+7474+Wireservice authenticates with AT Protocol through an external OAuth service. By default it uses `https://aip.wireservice.net`, but you can run your own instance using [AIP](https://github.com/graze-social/aip), a high-performance OAuth 2.1 authorization server with native AT Protocol integration.
7575+7676+### Running AIP
7777+7878+AIP requires Rust 1.87+. To run locally:
7979+8080+1. Generate an OAuth signing key with `goat`: `goat key generate -t p256`. Save the public and private keys somewhere safe.
8181+8282+2. Clone AIP: `git clone https://github.com/graze-social/aip.git`
8383+8484+3. Setup environment variables:
8585+8686+```
8787+EXTERNAL_BASE=https://your-domain.com
8888+DPOP_NONCE_SEED=$(openssl rand -hex 32)
8989+STORAGE_BACKEND=sqlite
9090+ATPROTO_OAUTH_SIGNING_KEYS=`did:key:${YOUR_PRIVATE_KEY}`
9191+OAUTH_SIGNING_KEYS=`did:key:${YOUR_PRIVATE_KEY}`
9292+ENABLE_CLIENT_API=true
9393+OAUTH_SUPPORTED_SCOPES="atproto:atproto atproto:repo:site.standard.publication atproto:repo:site.standard.document
9494+atproto:blob:*/*"
9595+```
9696+9797+4. Run AIP: `cargo run --bin aip`
9898+9999+Or with Docker:
100100+101101+```bash
102102+docker build -t aip .
103103+docker run -p 8080:8080 \
104104+ // all of the above env vars here
105105+ aip
106106+```
107107+108108+For production, use the `postgres` storage backend instead of `sqlite`. Depending on your hosting environment, you may need to manually set the `DNS_NAMESERVERS` env var so that your AIP service can resolve handles properly. (Wireservice uses `8.8.8.8,1.1.1.1`).
109109+110110+### Configuring Wireservice
111111+112112+Once your AIP instance is running, update the OAuth Service URL in WordPress:
113113+114114+1. Go to **Settings > Wireservice**.
115115+2. Set the **OAuth Service URL** to your AIP instance (e.g., `https://your-domain.com`).
116116+117117+This is stored as the `wireservice_oauth_url` option and can also be set programmatically:
118118+119119+```php
120120+update_option('wireservice_oauth_url', 'https://your-domain.com');
121121+```
122122+72123## Filters
7312474125```php
···8613787138## License
881398989-[AGPL-3.0-or-later](LICENSE.md)
140140+[AGPL 3.0](LICENSE.md)