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}