this repo has no description
1import {
2 type Fetch,
3 type OAuthClientMetadataInput,
4 type OAuthClientOptions,
5 type OAuthResponseMode,
6 atprotoLoopbackClientMetadata,
7 OAuthClient,
8} from "@atproto/oauth-client";
9import { ReactNativeRuntimeImplementation } from "./react-native-runtime-implementation";
10import { ReactNativeOAuthDatabase } from "./react-native-oauth-database";
11
12export type Simplify<T> = { [K in keyof T]: T[K] } & NonNullable<unknown>;
13
14export type ReactNativeOAuthClientOptions = Simplify<
15 {
16 clientMetadata?: Readonly<OAuthClientMetadataInput>;
17 responseMode?: Exclude<OAuthResponseMode, "form_post">;
18 fetch?: Fetch;
19 } & Omit<
20 OAuthClientOptions,
21 | "clientMetadata"
22 | "responseMode"
23 | "keyset"
24 | "fetch"
25 | "runtimeImplementation"
26 | "sessionStore"
27 | "stateStore"
28 | "didCache"
29 | "handleCache"
30 | "dpopNonceCache"
31 | "authorizationServerMetadataCache"
32 | "protectedResourceMetadataCache"
33 >
34>;
35
36export class ReactNativeOAuthClient extends OAuthClient {
37 constructor({
38 responseMode = "fragment",
39 ...options
40 }: ReactNativeOAuthClientOptions) {
41 const database = new ReactNativeOAuthDatabase();
42
43 if (!["query", "fragment"].includes(responseMode)) {
44 throw new TypeError(`Invalid response mode: ${responseMode}`);
45 }
46
47 if (!options.clientMetadata) {
48 throw new TypeError(`No client metadata provided`);
49 }
50
51 super({
52 ...options,
53 clientMetadata:
54 options.clientMetadata ?? atprotoLoopbackClientMetadata("localhost"), // HACK: this fixes a type error for now, look into it later
55 responseMode,
56 keyset: undefined,
57 runtimeImplementation: new ReactNativeRuntimeImplementation(),
58 sessionStore: database.getSessionStore(),
59 stateStore: database.getStateStore(),
60 didCache: database.getDidCache(),
61 handleCache: database.getHandleCache(),
62 dpopNonceCache: database.getDpopNonceCache(),
63 authorizationServerMetadataCache:
64 database.getAuthorizationServerMetadataCache(),
65 protectedResourceMetadataCache:
66 database.getProtectedResourceMetadataCache(),
67 });
68 }
69}