@atproto/oauth-client-expo 0.0.8 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/expo-oauth-client-interface.d.ts +1 -1
- package/dist/expo-oauth-client-interface.d.ts.map +1 -1
- package/dist/expo-oauth-client-interface.js.map +1 -1
- package/dist/expo-oauth-client.native.d.ts +1 -1
- package/dist/expo-oauth-client.native.d.ts.map +1 -1
- package/dist/expo-oauth-client.native.js +11 -10
- package/dist/expo-oauth-client.native.js.map +1 -1
- package/dist/polyfill.native.d.ts +0 -1
- package/dist/polyfill.native.d.ts.map +1 -1
- package/dist/polyfill.native.js +0 -1
- package/dist/polyfill.native.js.map +1 -1
- package/package.json +4 -5
- package/src/expo-oauth-client-interface.ts +1 -1
- package/src/expo-oauth-client.native.ts +13 -13
- package/src/polyfill.native.ts +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @atproto/oauth-client-expo
|
|
2
2
|
|
|
3
|
+
## 0.0.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#4642](https://github.com/bluesky-social/atproto/pull/4642) [`a23d132`](https://github.com/bluesky-social/atproto/commit/a23d13268ccfd51a54d21256469b8cb43f7b07df) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Remove dependency on `event-target-polyfill`
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`a23d132`](https://github.com/bluesky-social/atproto/commit/a23d13268ccfd51a54d21256469b8cb43f7b07df), [`a23d132`](https://github.com/bluesky-social/atproto/commit/a23d13268ccfd51a54d21256469b8cb43f7b07df), [`a23d132`](https://github.com/bluesky-social/atproto/commit/a23d13268ccfd51a54d21256469b8cb43f7b07df), [`a23d132`](https://github.com/bluesky-social/atproto/commit/a23d13268ccfd51a54d21256469b8cb43f7b07df), [`a23d132`](https://github.com/bluesky-social/atproto/commit/a23d13268ccfd51a54d21256469b8cb43f7b07df)]:
|
|
10
|
+
- @atproto/oauth-client@0.6.0
|
|
11
|
+
- @atproto/oauth-client-browser@0.3.41
|
|
12
|
+
|
|
13
|
+
## 0.0.9
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- [#4606](https://github.com/bluesky-social/atproto/pull/4606) [`78fee14`](https://github.com/bluesky-social/atproto/commit/78fee144ff46ffc4585f318c72eea98e4357ba7b) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Add iOS specific options on authentication web-view
|
|
18
|
+
|
|
19
|
+
- [#4606](https://github.com/bluesky-social/atproto/pull/4606) [`78fee14`](https://github.com/bluesky-social/atproto/commit/78fee144ff46ffc4585f318c72eea98e4357ba7b) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Remove dev logs
|
|
20
|
+
|
|
3
21
|
## 0.0.8
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AuthorizeOptions, OAuthClient, OAuthSession } from '@atproto/oauth-client';
|
|
2
|
-
export interface ExpoOAuthClientInterface extends OAuthClient,
|
|
2
|
+
export interface ExpoOAuthClientInterface extends OAuthClient, AsyncDisposable {
|
|
3
3
|
signIn(input: string, options?: AuthorizeOptions): Promise<OAuthSession>;
|
|
4
4
|
handleCallback(): Promise<null | OAuthSession>;
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expo-oauth-client-interface.d.ts","sourceRoot":"","sources":["../src/expo-oauth-client-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACb,MAAM,uBAAuB,CAAA;AAE9B,MAAM,WAAW,wBAAyB,SAAQ,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"expo-oauth-client-interface.d.ts","sourceRoot":"","sources":["../src/expo-oauth-client-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACb,MAAM,uBAAuB,CAAA;AAE9B,MAAM,WAAW,wBAAyB,SAAQ,WAAW,EAAE,eAAe;IAC5E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACxE,cAAc,IAAI,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,CAAA;CAC/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expo-oauth-client-interface.js","sourceRoot":"","sources":["../src/expo-oauth-client-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n AuthorizeOptions,\n OAuthClient,\n OAuthSession,\n} from '@atproto/oauth-client'\n\nexport interface ExpoOAuthClientInterface extends OAuthClient,
|
|
1
|
+
{"version":3,"file":"expo-oauth-client-interface.js","sourceRoot":"","sources":["../src/expo-oauth-client-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n AuthorizeOptions,\n OAuthClient,\n OAuthSession,\n} from '@atproto/oauth-client'\n\nexport interface ExpoOAuthClientInterface extends OAuthClient, AsyncDisposable {\n signIn(input: string, options?: AuthorizeOptions): Promise<OAuthSession>\n handleCallback(): Promise<null | OAuthSession>\n}\n"]}
|
|
@@ -7,6 +7,6 @@ export declare class ExpoOAuthClient extends OAuthClient implements ExpoOAuthCli
|
|
|
7
7
|
constructor(options: ExpoOAuthClientOptions);
|
|
8
8
|
handleCallback(): Promise<null | OAuthSession>;
|
|
9
9
|
signIn(input: string, options?: AuthorizeOptions): Promise<OAuthSession>;
|
|
10
|
-
[Symbol.
|
|
10
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=expo-oauth-client.native.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expo-oauth-client.native.d.ts","sourceRoot":"","sources":["../src/expo-oauth-client.native.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,
|
|
1
|
+
{"version":3,"file":"expo-oauth-client.native.d.ts","sourceRoot":"","sources":["../src/expo-oauth-client.native.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,EAEb,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAYpE,eAAO,MAAM,uBAAuB,QAA0C,CAAA;AAS9E,qBAAa,eACX,SAAQ,WACR,YAAW,wBAAwB;;gBAIvB,OAAO,EAAE,sBAAsB;IAwBrC,cAAc,IAAI,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;IAI9C,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,YAAY,CAAC;IAsClB,CAAC,MAAM,CAAC,YAAY,CAAC;CAG5B"}
|
|
@@ -57,6 +57,11 @@ import { ExpoKey } from './utils/expo-key';
|
|
|
57
57
|
import { AuthorizationServerMetadataCache, DidCache, DpopNonceCache, HandleCache, ProtectedResourceMetadataCache, SessionStore, StateStore, } from './utils/stores';
|
|
58
58
|
export const CUSTOM_URI_SCHEME_REGEX = /^(?:[^.]+(?:\.[^.]+)+):\/(?:[^/].*)?$/;
|
|
59
59
|
const isCustomUriScheme = (uri) => CUSTOM_URI_SCHEME_REGEX.test(uri);
|
|
60
|
+
const runtimeImplementation = {
|
|
61
|
+
createKey: async (algs) => ExpoKey.generate(algs),
|
|
62
|
+
digest: async (bytes, { name }) => NativeModule.digest(bytes, name),
|
|
63
|
+
getRandomValues: async (length) => NativeModule.getRandomValues(length),
|
|
64
|
+
};
|
|
60
65
|
export class ExpoOAuthClient extends OAuthClient {
|
|
61
66
|
#disposables;
|
|
62
67
|
constructor(options) {
|
|
@@ -67,11 +72,7 @@ export class ExpoOAuthClient extends OAuthClient {
|
|
|
67
72
|
...options,
|
|
68
73
|
responseMode: options.responseMode ?? 'query',
|
|
69
74
|
keyset: undefined,
|
|
70
|
-
runtimeImplementation
|
|
71
|
-
createKey: async (algs) => ExpoKey.generate(algs),
|
|
72
|
-
digest: async (bytes, { name }) => NativeModule.digest(bytes, name),
|
|
73
|
-
getRandomValues: async (length) => NativeModule.getRandomValues(length),
|
|
74
|
-
},
|
|
75
|
+
runtimeImplementation,
|
|
75
76
|
sessionStore: stack.use(new SessionStore()),
|
|
76
77
|
stateStore: stack.use(new StateStore()),
|
|
77
78
|
didCache: stack.use(new DidCache()),
|
|
@@ -80,7 +81,6 @@ export class ExpoOAuthClient extends OAuthClient {
|
|
|
80
81
|
authorizationServerMetadataCache: stack.use(new AuthorizationServerMetadataCache()),
|
|
81
82
|
protectedResourceMetadataCache: stack.use(new ProtectedResourceMetadataCache()),
|
|
82
83
|
});
|
|
83
|
-
stack.defer(() => super[Symbol.dispose]?.());
|
|
84
84
|
this.#disposables = stack.move();
|
|
85
85
|
}
|
|
86
86
|
catch (e_1) {
|
|
@@ -105,9 +105,10 @@ export class ExpoOAuthClient extends OAuthClient {
|
|
|
105
105
|
redirect_uri: redirectUri,
|
|
106
106
|
display: options?.display ?? 'touch',
|
|
107
107
|
});
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
const result = await openAuthSessionAsync(url.toString(), redirectUri, {
|
|
109
|
+
dismissButtonStyle: 'cancel', // iOS only
|
|
110
|
+
preferEphemeralSession: false, // iOS only
|
|
111
|
+
});
|
|
111
112
|
if (result.type === 'success') {
|
|
112
113
|
const callbackUrl = new URL(result.url);
|
|
113
114
|
const params = this.responseMode === 'fragment'
|
|
@@ -122,7 +123,7 @@ export class ExpoOAuthClient extends OAuthClient {
|
|
|
122
123
|
throw new Error(`Authentication cancelled: ${result.type}`);
|
|
123
124
|
}
|
|
124
125
|
}
|
|
125
|
-
[Symbol.
|
|
126
|
+
async [Symbol.asyncDispose]() {
|
|
126
127
|
this.#disposables.dispose();
|
|
127
128
|
}
|
|
128
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expo-oauth-client.native.js","sourceRoot":"","sources":["../src/expo-oauth-client.native.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAEL,WAAW,
|
|
1
|
+
{"version":3,"file":"expo-oauth-client.native.js","sourceRoot":"","sources":["../src/expo-oauth-client.native.ts"],"names":[],"mappings":"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","sourcesContent":["import { openAuthSessionAsync } from 'expo-web-browser'\nimport {\n AuthorizeOptions,\n OAuthClient,\n OAuthSession,\n RuntimeImplementation,\n} from '@atproto/oauth-client'\nimport { default as NativeModule } from './ExpoAtprotoOAuthClientModule'\nimport { ExpoOAuthClientInterface } from './expo-oauth-client-interface'\nimport { ExpoOAuthClientOptions } from './expo-oauth-client-options'\nimport { ExpoKey } from './utils/expo-key'\nimport {\n AuthorizationServerMetadataCache,\n DidCache,\n DpopNonceCache,\n HandleCache,\n ProtectedResourceMetadataCache,\n SessionStore,\n StateStore,\n} from './utils/stores'\n\nexport const CUSTOM_URI_SCHEME_REGEX = /^(?:[^.]+(?:\\.[^.]+)+):\\/(?:[^/].*)?$/\nconst isCustomUriScheme = (uri: string) => CUSTOM_URI_SCHEME_REGEX.test(uri)\n\nconst runtimeImplementation: RuntimeImplementation = {\n createKey: async (algs) => ExpoKey.generate(algs),\n digest: async (bytes, { name }) => NativeModule.digest(bytes, name),\n getRandomValues: async (length) => NativeModule.getRandomValues(length),\n}\n\nexport class ExpoOAuthClient\n extends OAuthClient\n implements ExpoOAuthClientInterface\n{\n readonly #disposables: DisposableStack\n\n constructor(options: ExpoOAuthClientOptions) {\n using stack = new DisposableStack()\n\n super({\n ...options,\n responseMode: options.responseMode ?? 'query',\n keyset: undefined,\n runtimeImplementation,\n sessionStore: stack.use(new SessionStore()),\n stateStore: stack.use(new StateStore()),\n didCache: stack.use(new DidCache()),\n handleCache: stack.use(new HandleCache()),\n dpopNonceCache: stack.use(new DpopNonceCache()),\n authorizationServerMetadataCache: stack.use(\n new AuthorizationServerMetadataCache(),\n ),\n protectedResourceMetadataCache: stack.use(\n new ProtectedResourceMetadataCache(),\n ),\n })\n\n this.#disposables = stack.move()\n }\n\n async handleCallback(): Promise<null | OAuthSession> {\n return null\n }\n\n async signIn(\n input: string,\n options?: AuthorizeOptions,\n ): Promise<OAuthSession> {\n const redirectUri =\n options?.redirect_uri ??\n this.clientMetadata.redirect_uris.find(isCustomUriScheme)\n\n if (!redirectUri) {\n throw new TypeError(\n 'A redirect URI with a custom scheme is required for Expo OAuth.',\n )\n }\n\n const url = await this.authorize(input, {\n ...options,\n redirect_uri: redirectUri,\n display: options?.display ?? 'touch',\n })\n\n const result = await openAuthSessionAsync(url.toString(), redirectUri, {\n dismissButtonStyle: 'cancel', // iOS only\n preferEphemeralSession: false, // iOS only\n })\n\n if (result.type === 'success') {\n const callbackUrl = new URL(result.url)\n const params =\n this.responseMode === 'fragment'\n ? new URLSearchParams(callbackUrl.hash.slice(1))\n : callbackUrl.searchParams\n\n const { session } = await this.callback(params, {\n redirect_uri: redirectUri,\n })\n return session\n } else {\n throw new Error(`Authentication cancelled: ${result.type}`)\n }\n }\n\n async [Symbol.asyncDispose]() {\n this.#disposables.dispose()\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polyfill.native.d.ts","sourceRoot":"","sources":["../src/polyfill.native.ts"],"names":[],"mappings":"AAAA,OAAO,gDAAgD,CAAA;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"polyfill.native.d.ts","sourceRoot":"","sources":["../src/polyfill.native.ts"],"names":[],"mappings":"AAAA,OAAO,gDAAgD,CAAA;AACvD,OAAO,gCAAgC,CAAA"}
|
package/dist/polyfill.native.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polyfill.native.js","sourceRoot":"","sources":["../src/polyfill.native.ts"],"names":[],"mappings":"AAAA,OAAO,gDAAgD,CAAA;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"polyfill.native.js","sourceRoot":"","sources":["../src/polyfill.native.ts"],"names":[],"mappings":"AAAA,OAAO,gDAAgD,CAAA;AACvD,OAAO,gCAAgC,CAAA","sourcesContent":["import 'core-js/proposals/explicit-resource-management'\nimport 'react-native-url-polyfill/auto'\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/oauth-client-expo",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "ATPROTO OAuth client for Expo applications",
|
|
6
6
|
"authors": [
|
|
@@ -33,13 +33,12 @@
|
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"core-js": "^3",
|
|
36
|
-
"event-target-polyfill": "^0.0.4",
|
|
37
36
|
"expo-web-browser": "^15.0.8",
|
|
38
37
|
"react-native-mmkv": "^3.3.3",
|
|
39
38
|
"react-native-url-polyfill": "^3.0.0",
|
|
40
|
-
"@atproto-labs/simple-store": "0.3.0",
|
|
41
|
-
"@atproto/oauth-client": "0.
|
|
42
|
-
"@atproto/oauth-client-browser": "0.3.
|
|
39
|
+
"@atproto-labs/simple-store": "^0.3.0",
|
|
40
|
+
"@atproto/oauth-client": "^0.6.0",
|
|
41
|
+
"@atproto/oauth-client-browser": "^0.3.41"
|
|
43
42
|
},
|
|
44
43
|
"peerDependencies": {
|
|
45
44
|
"expo": "*",
|
|
@@ -4,7 +4,7 @@ import type {
|
|
|
4
4
|
OAuthSession,
|
|
5
5
|
} from '@atproto/oauth-client'
|
|
6
6
|
|
|
7
|
-
export interface ExpoOAuthClientInterface extends OAuthClient,
|
|
7
|
+
export interface ExpoOAuthClientInterface extends OAuthClient, AsyncDisposable {
|
|
8
8
|
signIn(input: string, options?: AuthorizeOptions): Promise<OAuthSession>
|
|
9
9
|
handleCallback(): Promise<null | OAuthSession>
|
|
10
10
|
}
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
AuthorizeOptions,
|
|
4
4
|
OAuthClient,
|
|
5
5
|
OAuthSession,
|
|
6
|
+
RuntimeImplementation,
|
|
6
7
|
} from '@atproto/oauth-client'
|
|
7
8
|
import { default as NativeModule } from './ExpoAtprotoOAuthClientModule'
|
|
8
9
|
import { ExpoOAuthClientInterface } from './expo-oauth-client-interface'
|
|
@@ -21,6 +22,12 @@ import {
|
|
|
21
22
|
export const CUSTOM_URI_SCHEME_REGEX = /^(?:[^.]+(?:\.[^.]+)+):\/(?:[^/].*)?$/
|
|
22
23
|
const isCustomUriScheme = (uri: string) => CUSTOM_URI_SCHEME_REGEX.test(uri)
|
|
23
24
|
|
|
25
|
+
const runtimeImplementation: RuntimeImplementation = {
|
|
26
|
+
createKey: async (algs) => ExpoKey.generate(algs),
|
|
27
|
+
digest: async (bytes, { name }) => NativeModule.digest(bytes, name),
|
|
28
|
+
getRandomValues: async (length) => NativeModule.getRandomValues(length),
|
|
29
|
+
}
|
|
30
|
+
|
|
24
31
|
export class ExpoOAuthClient
|
|
25
32
|
extends OAuthClient
|
|
26
33
|
implements ExpoOAuthClientInterface
|
|
@@ -34,11 +41,7 @@ export class ExpoOAuthClient
|
|
|
34
41
|
...options,
|
|
35
42
|
responseMode: options.responseMode ?? 'query',
|
|
36
43
|
keyset: undefined,
|
|
37
|
-
runtimeImplementation
|
|
38
|
-
createKey: async (algs) => ExpoKey.generate(algs),
|
|
39
|
-
digest: async (bytes, { name }) => NativeModule.digest(bytes, name),
|
|
40
|
-
getRandomValues: async (length) => NativeModule.getRandomValues(length),
|
|
41
|
-
},
|
|
44
|
+
runtimeImplementation,
|
|
42
45
|
sessionStore: stack.use(new SessionStore()),
|
|
43
46
|
stateStore: stack.use(new StateStore()),
|
|
44
47
|
didCache: stack.use(new DidCache()),
|
|
@@ -52,8 +55,6 @@ export class ExpoOAuthClient
|
|
|
52
55
|
),
|
|
53
56
|
})
|
|
54
57
|
|
|
55
|
-
stack.defer(() => super[Symbol.dispose]?.())
|
|
56
|
-
|
|
57
58
|
this.#disposables = stack.move()
|
|
58
59
|
}
|
|
59
60
|
|
|
@@ -81,11 +82,10 @@ export class ExpoOAuthClient
|
|
|
81
82
|
display: options?.display ?? 'touch',
|
|
82
83
|
})
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
console.debug('AUTH SESSION RESULT', result)
|
|
85
|
+
const result = await openAuthSessionAsync(url.toString(), redirectUri, {
|
|
86
|
+
dismissButtonStyle: 'cancel', // iOS only
|
|
87
|
+
preferEphemeralSession: false, // iOS only
|
|
88
|
+
})
|
|
89
89
|
|
|
90
90
|
if (result.type === 'success') {
|
|
91
91
|
const callbackUrl = new URL(result.url)
|
|
@@ -103,7 +103,7 @@ export class ExpoOAuthClient
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
[Symbol.
|
|
106
|
+
async [Symbol.asyncDispose]() {
|
|
107
107
|
this.#disposables.dispose()
|
|
108
108
|
}
|
|
109
109
|
}
|
package/src/polyfill.native.ts
CHANGED