forked from
mary.my.id/atcute
a collection of lightweight TypeScript packages for AT Protocol, the protocol powering Bluesky
1# atcute
2
3lightweight TypeScript packages for [AT Protocol](https://atproto.com), the protocol powering
4Bluesky.
5
6## quick start
7
8```sh
9npm install @atcute/client @atcute/bluesky
10```
11
12```ts
13import { Client, simpleFetchHandler } from '@atcute/client';
14import type {} from '@atcute/bluesky';
15
16const client = new Client({
17 handler: simpleFetchHandler({ service: 'https://public.api.bsky.app' }),
18});
19
20const { data } = await client.get('app.bsky.actor.getProfile', {
21 params: { actor: 'bsky.app' },
22});
23
24console.log(data.displayName);
25// -> Bluesky
26```
27
28for authenticated requests, see the [client docs](./packages/clients/client) or use the
29[OAuth browser client](./packages/oauth/browser-client) for web apps.
30
31## packages
32
33| Packages |
34| ----------------------------------------------------------------------------------------------------------- |
35| **Client packages** |
36| [`client`](./packages/clients/client): XRPC HTTP client |
37| [`firehose`](./packages/clients/firehose): XRPC subscription client |
38| [`jetstream`](./packages/clients/jetstream): Jetstream WebSocket client |
39| [`tap`](./packages/clients/tap): Tap WebSocket client |
40| [`cache`](./packages/clients/cache): normalized cache store |
41| **Server packages** |
42| [`xrpc-server`](./packages/servers/xrpc-server): XRPC web framework |
43| [`xrpc-server-bun`](./packages/servers/xrpc-server-bun): Bun WebSocket adapter |
44| [`xrpc-server-cloudflare`](./packages/servers/xrpc-server-cloudflare): Cloudflare Workers WebSocket adapter |
45| [`xrpc-server-deno`](./packages/servers/xrpc-server-deno): Deno WebSocket adapter |
46| [`xrpc-server-node`](./packages/servers/xrpc-server-node): Node.js WebSocket adapter |
47| **OAuth packages** |
48| [`oauth-browser-client`](./packages/oauth/browser-client): minimal OAuth client for SPAs |
49| [`oauth-node-client`](./packages/oauth/node-client): OAuth client for Node.js |
50| **Lexicon packages** |
51| [`lex-cli`](./packages/lexicons/lex-cli): generate TypeScript from lexicon schemas |
52| [`lexicon-doc`](./packages/lexicons/lexicon-doc): parse and author lexicon documents |
53| [`lexicon-resolver`](./packages/lexicons/lexicon-resolver): resolve lexicons from the network |
54| [`lexicon-resolver-node`](./packages/lexicons/lexicon-resolver-node): Node.js lexicon resolvers |
55| [`lexicons`](./packages/lexicons/lexicons): core types and schema validation |
56| **Lexicon definition packages** |
57| [`atproto`](./packages/definitions/atproto): `com.atproto.*` definitions |
58| [`bluemoji`](./packages/definitions/bluemoji): `blue.moji.*` definitions |
59| [`bluesky`](./packages/definitions/bluesky): `app.bsky.*`, `chat.bsky.*` definitions |
60| [`frontpage`](./packages/definitions/frontpage): `fyi.unravel.frontpage.*` definitions |
61| [`leaflet`](./packages/definitions/leaflet): `pub.leaflet.*` definitions |
62| [`lexicon-community`](./packages/definitions/lexicon-community): `community.lexicon.*` definitions |
63| [`microcosm`](./packages/definitions/microcosm): `blue.microcosm.*`, `com.bad-example.*` definitions |
64| [`ozone`](./packages/definitions/ozone): `tools.ozone.*` definitions |
65| [`pckt`](./packages/definitions/pckt): `blog.pckt.*` definitions |
66| [`standard-site`](./packages/definitions/standard-site): `site.standard.*` definitions |
67| [`tangled`](./packages/definitions/tangled): `sh.tangled.*` definitions |
68| [`whitewind`](./packages/definitions/whitewind): `com.whtwnd.*` definitions |
69| **Identity packages** |
70| [`identity`](./packages/identity/identity): handle, DID and DID document types |
71| [`identity-resolver`](./packages/identity/identity-resolver): handle and DID document resolution |
72| [`identity-resolver-node`](./packages/identity/identity-resolver-node): Node.js DNS-based handle resolver |
73| [`did-plc`](./packages/identity/did-plc): did:plc operation validation |
74| **Utility packages** |
75| [`car`](./packages/utilities/car): CAR archive codec |
76| [`cbor`](./packages/utilities/cbor): deterministic CBOR codec |
77| [`cid`](./packages/utilities/cid): content identifier codec |
78| [`crypto`](./packages/utilities/crypto): signing and verification |
79| [`mst`](./packages/utilities/mst): merkle search tree utilities |
80| [`multibase`](./packages/utilities/multibase): base32/base64 encoding |
81| [`repo`](./packages/utilities/repo): repository export reader |
82| [`tid`](./packages/utilities/tid): timestamp identifier codec |
83| [`varint`](./packages/utilities/varint): LEB128 varint codec |
84| **Bluesky-specific packages** |
85| [`bluesky-moderation`](./packages/bluesky/moderation): content moderation interpretation |
86| [`bluesky-richtext-builder`](./packages/bluesky/richtext-builder): rich text facet builder |
87| [`bluesky-richtext-parser`](./packages/bluesky/richtext-parser): parse rich text syntax |
88| [`bluesky-richtext-segmenter`](./packages/bluesky/richtext-segmenter): segment text by facets |
89| [`bluesky-search-parser`](./packages/bluesky/search-parser): search query tokenizer |
90| [`bluesky-threading`](./packages/bluesky/threading): atomic thread publishing |
91
92## contributing
93
94this monorepo uses [mise](https://mise.jdx.dev) for runtime versioning and pnpm for package
95management.
96
97```sh
98# install runtimes
99mise install
100
101# build all packages
102pnpm run -r build
103
104# pull latest lexicons and regenerate definitions
105pnpm run -r pull
106pnpm run -r generate
107```