@atcute/oauth-browser-client 2.0.3 → 3.0.1
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/README.md +19 -12
- package/dist/agents/exchange.d.ts +3 -2
- package/dist/agents/exchange.d.ts.map +1 -1
- package/dist/agents/exchange.js +3 -4
- package/dist/agents/exchange.js.map +1 -1
- package/dist/agents/server-agent.d.ts +6 -6
- package/dist/agents/server-agent.d.ts.map +1 -1
- package/dist/agents/server-agent.js +5 -9
- package/dist/agents/server-agent.js.map +1 -1
- package/dist/agents/sessions.d.ts +6 -5
- package/dist/agents/sessions.d.ts.map +1 -1
- package/dist/agents/sessions.js +16 -1
- package/dist/agents/sessions.js.map +1 -1
- package/dist/agents/user-agent.d.ts +2 -2
- package/dist/agents/user-agent.d.ts.map +1 -1
- package/dist/agents/user-agent.js +2 -2
- package/dist/agents/user-agent.js.map +1 -1
- package/dist/dpop.d.ts +2 -4
- package/dist/dpop.d.ts.map +1 -1
- package/dist/dpop.js +6 -79
- package/dist/dpop.js.map +1 -1
- package/dist/environment.d.ts +5 -5
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js.map +1 -1
- package/dist/errors.d.ts +3 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +3 -3
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +7 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -11
- package/dist/index.js.map +1 -1
- package/dist/resolvers.d.ts +5 -4
- package/dist/resolvers.d.ts.map +1 -1
- package/dist/resolvers.js +5 -5
- package/dist/resolvers.js.map +1 -1
- package/dist/store/db.d.ts +8 -8
- package/dist/store/db.d.ts.map +1 -1
- package/dist/store/db.js.map +1 -1
- package/dist/types/client-assertion.d.ts +2 -3
- package/dist/types/client-assertion.d.ts.map +1 -1
- package/dist/types/server.d.ts +2 -56
- package/dist/types/server.d.ts.map +1 -1
- package/dist/types/token.d.ts +9 -21
- package/dist/types/token.d.ts.map +1 -1
- package/dist/utils/dpop-key.d.ts +10 -0
- package/dist/utils/dpop-key.d.ts.map +1 -0
- package/dist/utils/dpop-key.js +13 -0
- package/dist/utils/dpop-key.js.map +1 -0
- package/dist/utils/misc.d.ts.map +1 -1
- package/dist/utils/misc.js.map +1 -1
- package/dist/utils/response.d.ts.map +1 -1
- package/dist/utils/response.js.map +1 -1
- package/dist/utils/runtime.d.ts +0 -6
- package/dist/utils/runtime.d.ts.map +1 -1
- package/dist/utils/runtime.js +0 -16
- package/dist/utils/runtime.js.map +1 -1
- package/dist/utils/strings.d.ts.map +1 -1
- package/dist/utils/strings.js.map +1 -1
- package/lib/agents/exchange.ts +15 -16
- package/lib/agents/server-agent.ts +21 -24
- package/lib/agents/sessions.ts +28 -7
- package/lib/agents/user-agent.ts +14 -8
- package/lib/dpop.ts +9 -110
- package/lib/environment.ts +5 -5
- package/lib/errors.ts +15 -14
- package/lib/index.ts +16 -16
- package/lib/resolvers.ts +17 -15
- package/lib/store/db.ts +8 -8
- package/lib/types/client-assertion.ts +2 -4
- package/lib/types/server.ts +2 -57
- package/lib/types/token.ts +10 -24
- package/lib/utils/dpop-key.ts +24 -0
- package/lib/utils/runtime.ts +0 -22
- package/package.json +20 -11
- package/dist/types/client.d.ts +0 -38
- package/dist/types/client.d.ts.map +0 -1
- package/dist/types/client.js +0 -2
- package/dist/types/client.js.map +0 -1
- package/dist/types/dpop.d.ts +0 -10
- package/dist/types/dpop.d.ts.map +0 -1
- package/dist/types/dpop.js +0 -2
- package/dist/types/dpop.js.map +0 -1
- package/dist/types/identity.d.ts +0 -6
- package/dist/types/identity.d.ts.map +0 -1
- package/dist/types/identity.js +0 -2
- package/dist/types/identity.js.map +0 -1
- package/dist/types/par.d.ts +0 -5
- package/dist/types/par.d.ts.map +0 -1
- package/dist/types/par.js +0 -2
- package/dist/types/par.js.map +0 -1
- package/dist/utils/identity-resolver.d.ts +0 -7
- package/dist/utils/identity-resolver.d.ts.map +0 -1
- package/dist/utils/identity-resolver.js +0 -8
- package/dist/utils/identity-resolver.js.map +0 -1
- package/lib/types/client.ts +0 -82
- package/lib/types/dpop.ts +0 -9
- package/lib/types/identity.ts +0 -12
- package/lib/types/par.ts +0 -4
- package/lib/utils/identity-resolver.ts +0 -12
package/lib/resolvers.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
import type { ResolvedActor } from '@atcute/identity-resolver';
|
|
1
2
|
import type { ActorIdentifier } from '@atcute/lexicons';
|
|
3
|
+
import type { OAuthAuthorizationServerMetadata, OAuthProtectedResourceMetadata } from '@atcute/oauth-types';
|
|
2
4
|
|
|
3
|
-
import { identityResolver } from './environment.
|
|
4
|
-
import { ResolverError } from './errors.
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import { extractContentType } from './utils/response.js';
|
|
8
|
-
import { isValidUrl } from './utils/strings.js';
|
|
5
|
+
import { identityResolver } from './environment.ts';
|
|
6
|
+
import { ResolverError } from './errors.ts';
|
|
7
|
+
import { extractContentType } from './utils/response.ts';
|
|
8
|
+
import { isValidUrl } from './utils/strings.ts';
|
|
9
9
|
|
|
10
10
|
export const resolveFromIdentifier = async (
|
|
11
11
|
ident: ActorIdentifier,
|
|
12
|
-
): Promise<{ identity:
|
|
12
|
+
): Promise<{ identity: ResolvedActor; metadata: OAuthAuthorizationServerMetadata }> => {
|
|
13
13
|
const identity = await identityResolver.resolve(ident);
|
|
14
14
|
|
|
15
15
|
return {
|
|
@@ -20,14 +20,14 @@ export const resolveFromIdentifier = async (
|
|
|
20
20
|
|
|
21
21
|
export const resolveFromService = async (
|
|
22
22
|
host: string,
|
|
23
|
-
): Promise<{ metadata:
|
|
23
|
+
): Promise<{ metadata: OAuthAuthorizationServerMetadata }> => {
|
|
24
24
|
try {
|
|
25
25
|
const metadata = await getMetadataFromResourceServer(host);
|
|
26
26
|
return { metadata };
|
|
27
27
|
} catch (err) {
|
|
28
28
|
if (err instanceof ResolverError) {
|
|
29
29
|
try {
|
|
30
|
-
const metadata = await
|
|
30
|
+
const metadata = await getOAuthAuthorizationServerMetadata(host);
|
|
31
31
|
return { metadata };
|
|
32
32
|
} catch {}
|
|
33
33
|
}
|
|
@@ -36,7 +36,7 @@ export const resolveFromService = async (
|
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
const
|
|
39
|
+
const getOAuthProtectedResourceMetadata = async (host: string): Promise<OAuthProtectedResourceMetadata> => {
|
|
40
40
|
const url = new URL(`/.well-known/oauth-protected-resource`, host);
|
|
41
41
|
const response = await fetch(url.href, {
|
|
42
42
|
redirect: 'manual',
|
|
@@ -49,7 +49,7 @@ const getProtectedResourceMetadata = async (host: string): Promise<ProtectedReso
|
|
|
49
49
|
throw new ResolverError(`unexpected response`);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
const metadata = (await response.json()) as
|
|
52
|
+
const metadata = (await response.json()) as OAuthProtectedResourceMetadata;
|
|
53
53
|
if (metadata.resource !== url.origin) {
|
|
54
54
|
throw new ResolverError(`unexpected issuer`);
|
|
55
55
|
}
|
|
@@ -57,7 +57,9 @@ const getProtectedResourceMetadata = async (host: string): Promise<ProtectedReso
|
|
|
57
57
|
return metadata;
|
|
58
58
|
};
|
|
59
59
|
|
|
60
|
-
const
|
|
60
|
+
const getOAuthAuthorizationServerMetadata = async (
|
|
61
|
+
host: string,
|
|
62
|
+
): Promise<OAuthAuthorizationServerMetadata> => {
|
|
61
63
|
const url = new URL(`/.well-known/oauth-authorization-server`, host);
|
|
62
64
|
const response = await fetch(url.href, {
|
|
63
65
|
redirect: 'manual',
|
|
@@ -70,7 +72,7 @@ const getAuthorizationServerMetadata = async (host: string): Promise<Authorizati
|
|
|
70
72
|
throw new ResolverError(`unexpected response`);
|
|
71
73
|
}
|
|
72
74
|
|
|
73
|
-
const metadata = (await response.json()) as
|
|
75
|
+
const metadata = (await response.json()) as OAuthAuthorizationServerMetadata;
|
|
74
76
|
if (metadata.issuer !== url.origin) {
|
|
75
77
|
throw new ResolverError(`unexpected issuer`);
|
|
76
78
|
}
|
|
@@ -93,7 +95,7 @@ const getAuthorizationServerMetadata = async (host: string): Promise<Authorizati
|
|
|
93
95
|
};
|
|
94
96
|
|
|
95
97
|
const getMetadataFromResourceServer = async (input: string) => {
|
|
96
|
-
const rs_metadata = await
|
|
98
|
+
const rs_metadata = await getOAuthProtectedResourceMetadata(input);
|
|
97
99
|
|
|
98
100
|
if (rs_metadata.authorization_servers?.length !== 1) {
|
|
99
101
|
throw new ResolverError(`expected exactly one authorization server in the listing`);
|
|
@@ -101,7 +103,7 @@ const getMetadataFromResourceServer = async (input: string) => {
|
|
|
101
103
|
|
|
102
104
|
const issuer = rs_metadata.authorization_servers[0];
|
|
103
105
|
|
|
104
|
-
const as_metadata = await
|
|
106
|
+
const as_metadata = await getOAuthAuthorizationServerMetadata(issuer);
|
|
105
107
|
|
|
106
108
|
if (as_metadata.protected_resources) {
|
|
107
109
|
if (!as_metadata.protected_resources.includes(rs_metadata.resource)) {
|
package/lib/store/db.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Did } from '@atcute/lexicons';
|
|
2
|
+
import type { DpopPrivateJwk } from '@atcute/oauth-crypto';
|
|
3
|
+
import type { OAuthAuthorizationServerMetadata } from '@atcute/oauth-types';
|
|
2
4
|
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
import
|
|
6
|
-
import type { Session } from '../types/token.js';
|
|
7
|
-
import { locks } from '../utils/runtime.js';
|
|
5
|
+
import type { SimpleStore } from '../types/store.ts';
|
|
6
|
+
import type { RawSession } from '../types/token.ts';
|
|
7
|
+
import { locks } from '../utils/runtime.ts';
|
|
8
8
|
|
|
9
9
|
export interface OAuthDatabaseOptions {
|
|
10
10
|
name: string;
|
|
@@ -19,7 +19,7 @@ interface SchemaItem<T> {
|
|
|
19
19
|
interface Schema {
|
|
20
20
|
sessions: {
|
|
21
21
|
key: Did;
|
|
22
|
-
value:
|
|
22
|
+
value: RawSession;
|
|
23
23
|
indexes: {
|
|
24
24
|
expiresAt: number;
|
|
25
25
|
};
|
|
@@ -27,8 +27,8 @@ interface Schema {
|
|
|
27
27
|
states: {
|
|
28
28
|
key: string;
|
|
29
29
|
value: {
|
|
30
|
-
dpopKey:
|
|
31
|
-
metadata:
|
|
30
|
+
dpopKey: DpopPrivateJwk;
|
|
31
|
+
metadata: OAuthAuthorizationServerMetadata;
|
|
32
32
|
verifier?: string;
|
|
33
33
|
state?: unknown;
|
|
34
34
|
};
|
|
@@ -6,18 +6,16 @@ export interface ClientAssertionCredentials {
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
export interface FetchClientAssertionParams {
|
|
9
|
-
/** JWK thumbprint of the DPoP key to bind the assertion to */
|
|
10
|
-
jkt: string;
|
|
11
9
|
/** authorization server issuer (audience for the assertion) */
|
|
12
10
|
aud: string;
|
|
13
|
-
|
|
14
11
|
/**
|
|
15
12
|
* create a DPoP proof to prove you possess the key for the claimed jkt.
|
|
16
13
|
*
|
|
17
14
|
* @param htu origin and pathname to your backend
|
|
15
|
+
* @param nonce optional DPoP nonce from the server
|
|
18
16
|
* @returns DPoP proof that can be included in the assertion
|
|
19
17
|
*/
|
|
20
|
-
createDpopProof: (htu: string) => Promise<string>;
|
|
18
|
+
createDpopProof: (htu: string, nonce?: string) => Promise<string>;
|
|
21
19
|
}
|
|
22
20
|
|
|
23
21
|
export type ClientAssertionFetcher = (
|
package/lib/types/server.ts
CHANGED
|
@@ -1,62 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
resource: string;
|
|
3
|
-
jwks_uri?: string;
|
|
4
|
-
authorization_servers?: string[];
|
|
5
|
-
scopes_supported?: string[];
|
|
6
|
-
bearer_methods_supported?: ('header' | 'body' | 'query')[];
|
|
7
|
-
resource_signing_alg_values_supported?: string[];
|
|
8
|
-
resource_documentation?: string;
|
|
9
|
-
resource_policy_uri?: string;
|
|
10
|
-
resource_tos_uri?: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface AuthorizationServerMetadata {
|
|
14
|
-
issuer: string;
|
|
15
|
-
authorization_endpoint: string;
|
|
16
|
-
token_endpoint: string;
|
|
17
|
-
jwks_uri?: string;
|
|
18
|
-
scopes_supported?: string[];
|
|
19
|
-
claims_supported?: string[];
|
|
20
|
-
claims_locales_supported?: string[];
|
|
21
|
-
claims_parameter_supported?: boolean;
|
|
22
|
-
request_parameter_supported?: boolean;
|
|
23
|
-
request_uri_parameter_supported?: boolean;
|
|
24
|
-
require_request_uri_registration?: boolean;
|
|
25
|
-
subject_types_supported?: string[];
|
|
26
|
-
response_types_supported?: string[];
|
|
27
|
-
response_modes_supported?: string[];
|
|
28
|
-
grant_types_supported?: string[];
|
|
29
|
-
code_challenge_methods_supported?: string[];
|
|
30
|
-
ui_locales_supported?: string[];
|
|
31
|
-
id_token_signing_alg_values_supported?: string[];
|
|
32
|
-
display_values_supported?: string[];
|
|
33
|
-
request_object_signing_alg_values_supported?: string[];
|
|
34
|
-
authorization_response_iss_parameter_supported?: boolean;
|
|
35
|
-
authorization_details_types_supported?: string[];
|
|
36
|
-
request_object_encryption_alg_values_supported?: string[];
|
|
37
|
-
request_object_encryption_enc_values_supported?: string[];
|
|
38
|
-
token_endpoint_auth_methods_supported?: string[];
|
|
39
|
-
token_endpoint_auth_signing_alg_values_supported?: string[];
|
|
40
|
-
revocation_endpoint?: string;
|
|
41
|
-
revocation_endpoint_auth_methods_supported?: string[];
|
|
42
|
-
revocation_endpoint_auth_signing_alg_values_supported?: string[];
|
|
43
|
-
introspection_endpoint?: string;
|
|
44
|
-
introspection_endpoint_auth_methods_supported?: string[];
|
|
45
|
-
introspection_endpoint_auth_signing_alg_values_supported?: string[];
|
|
46
|
-
pushed_authorization_request_endpoint?: string;
|
|
47
|
-
pushed_authorization_request_endpoint_auth_methods_supported?: string[];
|
|
48
|
-
pushed_authorization_request_endpoint_auth_signing_alg_values_supported?: string[];
|
|
49
|
-
require_pushed_authorization_requests?: boolean;
|
|
50
|
-
userinfo_endpoint?: string;
|
|
51
|
-
end_session_endpoint?: string;
|
|
52
|
-
registration_endpoint?: string;
|
|
53
|
-
dpop_signing_alg_values_supported?: string[];
|
|
54
|
-
protected_resources?: string[];
|
|
55
|
-
client_id_metadata_document_supported?: boolean;
|
|
56
|
-
}
|
|
1
|
+
import type { OAuthAuthorizationServerMetadata } from '@atcute/oauth-types';
|
|
57
2
|
|
|
58
3
|
export interface PersistedAuthorizationServerMetadata extends Pick<
|
|
59
|
-
|
|
4
|
+
OAuthAuthorizationServerMetadata,
|
|
60
5
|
| 'issuer'
|
|
61
6
|
| 'authorization_endpoint'
|
|
62
7
|
| 'introspection_endpoint'
|
package/lib/types/token.ts
CHANGED
|
@@ -1,29 +1,9 @@
|
|
|
1
1
|
import type { Did } from '@atcute/lexicons';
|
|
2
|
+
import type { DpopPrivateJwk } from '@atcute/oauth-crypto';
|
|
2
3
|
|
|
3
|
-
import type {
|
|
4
|
-
import type { PersistedAuthorizationServerMetadata } from './server.js';
|
|
4
|
+
import type { LegacyDpopKey } from '../utils/dpop-key.ts';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
access_token: string;
|
|
8
|
-
// Can be DPoP or Bearer, normalize casing.
|
|
9
|
-
token_type: string;
|
|
10
|
-
issuer?: string;
|
|
11
|
-
sub?: string;
|
|
12
|
-
scope?: string;
|
|
13
|
-
id_token?: `${string}.${string}.${string}`;
|
|
14
|
-
refresh_token?: string;
|
|
15
|
-
expires_in?: number;
|
|
16
|
-
authorization_details?:
|
|
17
|
-
| {
|
|
18
|
-
type: string;
|
|
19
|
-
locations?: string[];
|
|
20
|
-
actions?: string[];
|
|
21
|
-
datatypes?: string[];
|
|
22
|
-
identifier?: string;
|
|
23
|
-
privileges?: string[];
|
|
24
|
-
}[]
|
|
25
|
-
| undefined;
|
|
26
|
-
}
|
|
6
|
+
import type { PersistedAuthorizationServerMetadata } from './server.ts';
|
|
27
7
|
|
|
28
8
|
export interface TokenInfo {
|
|
29
9
|
scope: string;
|
|
@@ -39,8 +19,14 @@ export interface ExchangeInfo {
|
|
|
39
19
|
server: PersistedAuthorizationServerMetadata;
|
|
40
20
|
}
|
|
41
21
|
|
|
22
|
+
export interface RawSession {
|
|
23
|
+
dpopKey: DpopPrivateJwk | LegacyDpopKey;
|
|
24
|
+
info: ExchangeInfo;
|
|
25
|
+
token: TokenInfo;
|
|
26
|
+
}
|
|
27
|
+
|
|
42
28
|
export interface Session {
|
|
43
|
-
dpopKey:
|
|
29
|
+
dpopKey: DpopPrivateJwk;
|
|
44
30
|
info: ExchangeInfo;
|
|
45
31
|
token: TokenInfo;
|
|
46
32
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { fromBase64Url } from '@atcute/multibase';
|
|
2
|
+
import type { DpopPrivateJwk } from '@atcute/oauth-crypto';
|
|
3
|
+
|
|
4
|
+
export interface LegacyDpopKey {
|
|
5
|
+
typ: 'ES256';
|
|
6
|
+
key: string;
|
|
7
|
+
jwt: string;
|
|
8
|
+
jkt?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const ES256_ALG = { name: 'ECDSA', namedCurve: 'P-256' } as const;
|
|
12
|
+
|
|
13
|
+
export const isLegacyDpopKey = (key: DpopPrivateJwk | LegacyDpopKey): key is LegacyDpopKey => {
|
|
14
|
+
return typeof (key as LegacyDpopKey).key === 'string' && typeof (key as LegacyDpopKey).jwt === 'string';
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const migrateLegacyDpopKey = async (key: LegacyDpopKey): Promise<DpopPrivateJwk> => {
|
|
18
|
+
const pkcs8 = fromBase64Url(key.key);
|
|
19
|
+
const cryptoKey = await crypto.subtle.importKey('pkcs8', pkcs8, ES256_ALG, true, ['sign']);
|
|
20
|
+
const jwk = (await crypto.subtle.exportKey('jwk', cryptoKey)) as DpopPrivateJwk;
|
|
21
|
+
jwk.alg = 'ES256';
|
|
22
|
+
|
|
23
|
+
return jwk;
|
|
24
|
+
};
|
package/lib/utils/runtime.ts
CHANGED
|
@@ -1,23 +1 @@
|
|
|
1
|
-
import { nanoid } from 'nanoid';
|
|
2
|
-
|
|
3
|
-
import { toBase64Url } from '@atcute/multibase';
|
|
4
|
-
import { encodeUtf8, toSha256 } from '@atcute/uint8array';
|
|
5
|
-
|
|
6
1
|
export const locks: LockManager | undefined = typeof navigator !== 'undefined' ? navigator.locks : undefined;
|
|
7
|
-
|
|
8
|
-
export const stringToSha256 = async (input: string): Promise<string> => {
|
|
9
|
-
const bytes = encodeUtf8(input);
|
|
10
|
-
const digest = await toSha256(bytes);
|
|
11
|
-
|
|
12
|
-
return toBase64Url(digest);
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const generatePKCE = async (): Promise<{ verifier: string; challenge: string; method: string }> => {
|
|
16
|
-
const verifier = nanoid(64);
|
|
17
|
-
|
|
18
|
-
return {
|
|
19
|
-
verifier: verifier,
|
|
20
|
-
challenge: await stringToSha256(verifier),
|
|
21
|
-
method: 'S256',
|
|
22
|
-
};
|
|
23
|
-
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"type": "module",
|
|
3
2
|
"name": "@atcute/oauth-browser-client",
|
|
4
|
-
"version": "
|
|
3
|
+
"version": "3.0.1",
|
|
5
4
|
"description": "minimal OAuth browser client implementation for AT Protocol",
|
|
6
5
|
"license": "0BSD",
|
|
7
6
|
"repository": {
|
|
@@ -12,22 +11,32 @@
|
|
|
12
11
|
"dist/",
|
|
13
12
|
"lib/",
|
|
14
13
|
"!lib/**/*.bench.ts",
|
|
15
|
-
"!lib/**/*.test.ts"
|
|
14
|
+
"!lib/**/*.test.ts",
|
|
15
|
+
"!dist/**/*.{test,bench}.*"
|
|
16
16
|
],
|
|
17
|
+
"type": "module",
|
|
18
|
+
"sideEffects": false,
|
|
17
19
|
"exports": {
|
|
18
20
|
".": "./dist/index.js"
|
|
19
21
|
},
|
|
20
|
-
"
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public"
|
|
24
|
+
},
|
|
21
25
|
"dependencies": {
|
|
22
|
-
"nanoid": "^5.1.
|
|
23
|
-
"@atcute/client": "^4.
|
|
24
|
-
"@atcute/
|
|
25
|
-
"@atcute/
|
|
26
|
-
"@atcute/
|
|
27
|
-
"@atcute/
|
|
26
|
+
"nanoid": "^5.1.11",
|
|
27
|
+
"@atcute/client": "^4.2.2",
|
|
28
|
+
"@atcute/lexicons": "^1.3.1",
|
|
29
|
+
"@atcute/identity-resolver": "^1.2.3",
|
|
30
|
+
"@atcute/multibase": "^1.2.0",
|
|
31
|
+
"@atcute/oauth-types": "^0.1.1",
|
|
32
|
+
"@atcute/oauth-crypto": "^0.1.0"
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"@atcute/identity-resolver": "^1.0.0",
|
|
36
|
+
"@atcute/lexicons": "^1.0.0"
|
|
28
37
|
},
|
|
29
38
|
"scripts": {
|
|
30
|
-
"build": "tsgo
|
|
39
|
+
"build": "tsgo",
|
|
31
40
|
"prepublish": "rm -rf dist; pnpm run build"
|
|
32
41
|
}
|
|
33
42
|
}
|
package/dist/types/client.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
export interface ClientMetadata {
|
|
2
|
-
redirect_uris: string[];
|
|
3
|
-
response_types: ('code' | 'token' | 'none' | 'code id_token token' | 'code id_token' | 'code token' | 'id_token token' | 'id_token')[];
|
|
4
|
-
grant_types: ('authorization_code' | 'implicit' | 'refresh_token' | 'password' | 'client_credentials' | 'urn:ietf:params:oauth:grant-type:jwt-bearer' | 'urn:ietf:params:oauth:grant-type:saml2-bearer')[];
|
|
5
|
-
scope?: string;
|
|
6
|
-
token_endpoint_auth_method?: 'none' | 'client_secret_basic' | 'client_secret_jwt' | 'client_secret_post' | 'private_key_jwt' | 'self_signed_tls_client_auth' | 'tls_client_auth';
|
|
7
|
-
token_endpoint_auth_signing_alg?: string;
|
|
8
|
-
introspection_endpoint_auth_method?: 'none' | 'client_secret_basic' | 'client_secret_jwt' | 'client_secret_post' | 'private_key_jwt' | 'self_signed_tls_client_auth' | 'tls_client_auth';
|
|
9
|
-
introspection_endpoint_auth_signing_alg?: string;
|
|
10
|
-
revocation_endpoint_auth_method?: 'none' | 'client_secret_basic' | 'client_secret_jwt' | 'client_secret_post' | 'private_key_jwt' | 'self_signed_tls_client_auth' | 'tls_client_auth';
|
|
11
|
-
revocation_endpoint_auth_signing_alg?: string;
|
|
12
|
-
pushed_authorization_request_endpoint_auth_method?: 'none' | 'client_secret_basic' | 'client_secret_jwt' | 'client_secret_post' | 'private_key_jwt' | 'self_signed_tls_client_auth' | 'tls_client_auth';
|
|
13
|
-
pushed_authorization_request_endpoint_auth_signing_alg?: string;
|
|
14
|
-
userinfo_signed_response_alg?: string;
|
|
15
|
-
userinfo_encrypted_response_alg?: string;
|
|
16
|
-
jwks_uri?: string;
|
|
17
|
-
jwks?: unknown;
|
|
18
|
-
application_type?: 'web' | 'native';
|
|
19
|
-
subject_type?: 'public' | 'pairwise';
|
|
20
|
-
request_object_signing_alg?: string;
|
|
21
|
-
id_token_signed_response_alg?: string;
|
|
22
|
-
authorization_signed_response_alg?: string;
|
|
23
|
-
authorization_encrypted_response_enc?: 'A128CBC-HS256';
|
|
24
|
-
authorization_encrypted_response_alg?: string;
|
|
25
|
-
client_id?: string;
|
|
26
|
-
client_name?: string;
|
|
27
|
-
client_uri?: string;
|
|
28
|
-
policy_uri?: string;
|
|
29
|
-
tos_uri?: string;
|
|
30
|
-
logo_uri?: string;
|
|
31
|
-
default_max_age?: number;
|
|
32
|
-
require_auth_time?: boolean;
|
|
33
|
-
contacts?: string[];
|
|
34
|
-
tls_client_certificate_bound_access_tokens?: boolean;
|
|
35
|
-
dpop_bound_access_tokens?: boolean;
|
|
36
|
-
authorization_details_types?: string[];
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../lib/types/client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,CACb,MAAM,GACN,OAAO,GACP,MAAM,GACN,qBAAqB,GACrB,eAAe,GACf,YAAY,GACZ,gBAAgB,GAChB,UAAU,CACZ,EAAE,CAAC;IACJ,WAAW,EAAE,CACV,oBAAoB,GACpB,UAAU,GACV,eAAe,GACf,UAAU,GACV,oBAAoB,GACpB,6CAA6C,GAC7C,+CAA+C,CACjD,EAAE,CAAC;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0BAA0B,CAAC,EACxB,MAAM,GACN,qBAAqB,GACrB,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,6BAA6B,GAC7B,iBAAiB,CAAC;IACrB,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,kCAAkC,CAAC,EAChC,MAAM,GACN,qBAAqB,GACrB,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,6BAA6B,GAC7B,iBAAiB,CAAC;IACrB,uCAAuC,CAAC,EAAE,MAAM,CAAC;IACjD,+BAA+B,CAAC,EAC7B,MAAM,GACN,qBAAqB,GACrB,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,6BAA6B,GAC7B,iBAAiB,CAAC;IACrB,oCAAoC,CAAC,EAAE,MAAM,CAAC;IAC9C,iDAAiD,CAAC,EAC/C,MAAM,GACN,qBAAqB,GACrB,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,6BAA6B,GAC7B,iBAAiB,CAAC;IACrB,sDAAsD,CAAC,EAAE,MAAM,CAAC;IAChE,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACpC,YAAY,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACrC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,oCAAoC,CAAC,EAAE,eAAe,CAAC;IACvD,oCAAoC,CAAC,EAAE,MAAM,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,0CAA0C,CAAC,EAAE,OAAO,CAAC;IACrD,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;CACvC"}
|
package/dist/types/client.js
DELETED
package/dist/types/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../lib/types/client.ts"],"names":[],"mappings":""}
|
package/dist/types/dpop.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export interface DPoPKey {
|
|
2
|
-
typ: 'ES256';
|
|
3
|
-
/** private key in base64url-encoded pkcs #8 */
|
|
4
|
-
key: string;
|
|
5
|
-
/** base64url-encoded jwt token */
|
|
6
|
-
jwt: string;
|
|
7
|
-
/** JWK thumbprint (RFC 7638) for this key, used for client assertion binding */
|
|
8
|
-
jkt: string | undefined;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=dpop.d.ts.map
|
package/dist/types/dpop.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dpop.d.ts","sourceRoot":"","sources":["../../lib/types/dpop.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACvB,GAAG,EAAE,OAAO,CAAC;IACb,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACxB"}
|
package/dist/types/dpop.js
DELETED
package/dist/types/dpop.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dpop.js","sourceRoot":"","sources":["../../lib/types/dpop.ts"],"names":[],"mappings":""}
|
package/dist/types/identity.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { ActorResolver, LocalActorResolverOptions, ResolveActorOptions, ResolvedActor } from '@atcute/identity-resolver';
|
|
2
|
-
export type IdentityResolver = ActorResolver;
|
|
3
|
-
export type ResolvedIdentity = ResolvedActor;
|
|
4
|
-
export type ResolveIdentityOptions = ResolveActorOptions;
|
|
5
|
-
export type { LocalActorResolverOptions as DefaultIdentityResolverOptions };
|
|
6
|
-
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../lib/types/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACb,MAAM,2BAA2B,CAAC;AAGnC,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC7C,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC7C,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AACzD,YAAY,EAAE,yBAAyB,IAAI,8BAA8B,EAAE,CAAC"}
|
package/dist/types/identity.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../lib/types/identity.ts"],"names":[],"mappings":""}
|
package/dist/types/par.d.ts
DELETED
package/dist/types/par.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"par.d.ts","sourceRoot":"","sources":["../../lib/types/par.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACnB"}
|
package/dist/types/par.js
DELETED
package/dist/types/par.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"par.js","sourceRoot":"","sources":["../../lib/types/par.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { DefaultIdentityResolverOptions } from '../types/identity.js';
|
|
2
|
-
export type { DefaultIdentityResolverOptions };
|
|
3
|
-
/**
|
|
4
|
-
* @deprecated use `LocalActorResolver` from `@atcute/identity-resolver` instead
|
|
5
|
-
*/
|
|
6
|
-
export declare const defaultIdentityResolver: (options: DefaultIdentityResolverOptions) => import("@atcute/identity-resolver").ActorResolver;
|
|
7
|
-
//# sourceMappingURL=identity-resolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"identity-resolver.d.ts","sourceRoot":"","sources":["../../lib/utils/identity-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,8BAA8B,EAAoB,MAAM,sBAAsB,CAAC;AAE7F,YAAY,EAAE,8BAA8B,EAAE,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,uBAAuB,gGAEnC,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { LocalActorResolver } from '@atcute/identity-resolver';
|
|
2
|
-
/**
|
|
3
|
-
* @deprecated use `LocalActorResolver` from `@atcute/identity-resolver` instead
|
|
4
|
-
*/
|
|
5
|
-
export const defaultIdentityResolver = (options) => {
|
|
6
|
-
return new LocalActorResolver(options);
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=identity-resolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"identity-resolver.js","sourceRoot":"","sources":["../../lib/utils/identity-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAM/D;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAuC,EAAoB,EAAE,CAAC;IACrG,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAAA,CACvC,CAAC"}
|
package/lib/types/client.ts
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
export interface ClientMetadata {
|
|
2
|
-
redirect_uris: string[];
|
|
3
|
-
response_types: (
|
|
4
|
-
| 'code'
|
|
5
|
-
| 'token'
|
|
6
|
-
| 'none'
|
|
7
|
-
| 'code id_token token'
|
|
8
|
-
| 'code id_token'
|
|
9
|
-
| 'code token'
|
|
10
|
-
| 'id_token token'
|
|
11
|
-
| 'id_token'
|
|
12
|
-
)[];
|
|
13
|
-
grant_types: (
|
|
14
|
-
| 'authorization_code'
|
|
15
|
-
| 'implicit'
|
|
16
|
-
| 'refresh_token'
|
|
17
|
-
| 'password'
|
|
18
|
-
| 'client_credentials'
|
|
19
|
-
| 'urn:ietf:params:oauth:grant-type:jwt-bearer'
|
|
20
|
-
| 'urn:ietf:params:oauth:grant-type:saml2-bearer'
|
|
21
|
-
)[];
|
|
22
|
-
scope?: string;
|
|
23
|
-
token_endpoint_auth_method?:
|
|
24
|
-
| 'none'
|
|
25
|
-
| 'client_secret_basic'
|
|
26
|
-
| 'client_secret_jwt'
|
|
27
|
-
| 'client_secret_post'
|
|
28
|
-
| 'private_key_jwt'
|
|
29
|
-
| 'self_signed_tls_client_auth'
|
|
30
|
-
| 'tls_client_auth';
|
|
31
|
-
token_endpoint_auth_signing_alg?: string;
|
|
32
|
-
introspection_endpoint_auth_method?:
|
|
33
|
-
| 'none'
|
|
34
|
-
| 'client_secret_basic'
|
|
35
|
-
| 'client_secret_jwt'
|
|
36
|
-
| 'client_secret_post'
|
|
37
|
-
| 'private_key_jwt'
|
|
38
|
-
| 'self_signed_tls_client_auth'
|
|
39
|
-
| 'tls_client_auth';
|
|
40
|
-
introspection_endpoint_auth_signing_alg?: string;
|
|
41
|
-
revocation_endpoint_auth_method?:
|
|
42
|
-
| 'none'
|
|
43
|
-
| 'client_secret_basic'
|
|
44
|
-
| 'client_secret_jwt'
|
|
45
|
-
| 'client_secret_post'
|
|
46
|
-
| 'private_key_jwt'
|
|
47
|
-
| 'self_signed_tls_client_auth'
|
|
48
|
-
| 'tls_client_auth';
|
|
49
|
-
revocation_endpoint_auth_signing_alg?: string;
|
|
50
|
-
pushed_authorization_request_endpoint_auth_method?:
|
|
51
|
-
| 'none'
|
|
52
|
-
| 'client_secret_basic'
|
|
53
|
-
| 'client_secret_jwt'
|
|
54
|
-
| 'client_secret_post'
|
|
55
|
-
| 'private_key_jwt'
|
|
56
|
-
| 'self_signed_tls_client_auth'
|
|
57
|
-
| 'tls_client_auth';
|
|
58
|
-
pushed_authorization_request_endpoint_auth_signing_alg?: string;
|
|
59
|
-
userinfo_signed_response_alg?: string;
|
|
60
|
-
userinfo_encrypted_response_alg?: string;
|
|
61
|
-
jwks_uri?: string;
|
|
62
|
-
jwks?: unknown;
|
|
63
|
-
application_type?: 'web' | 'native';
|
|
64
|
-
subject_type?: 'public' | 'pairwise';
|
|
65
|
-
request_object_signing_alg?: string;
|
|
66
|
-
id_token_signed_response_alg?: string;
|
|
67
|
-
authorization_signed_response_alg?: string;
|
|
68
|
-
authorization_encrypted_response_enc?: 'A128CBC-HS256';
|
|
69
|
-
authorization_encrypted_response_alg?: string;
|
|
70
|
-
client_id?: string;
|
|
71
|
-
client_name?: string;
|
|
72
|
-
client_uri?: string;
|
|
73
|
-
policy_uri?: string;
|
|
74
|
-
tos_uri?: string;
|
|
75
|
-
logo_uri?: string;
|
|
76
|
-
default_max_age?: number;
|
|
77
|
-
require_auth_time?: boolean;
|
|
78
|
-
contacts?: string[];
|
|
79
|
-
tls_client_certificate_bound_access_tokens?: boolean;
|
|
80
|
-
dpop_bound_access_tokens?: boolean;
|
|
81
|
-
authorization_details_types?: string[];
|
|
82
|
-
}
|
package/lib/types/dpop.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export interface DPoPKey {
|
|
2
|
-
typ: 'ES256';
|
|
3
|
-
/** private key in base64url-encoded pkcs #8 */
|
|
4
|
-
key: string;
|
|
5
|
-
/** base64url-encoded jwt token */
|
|
6
|
-
jwt: string;
|
|
7
|
-
/** JWK thumbprint (RFC 7638) for this key, used for client assertion binding */
|
|
8
|
-
jkt: string | undefined;
|
|
9
|
-
}
|
package/lib/types/identity.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ActorResolver,
|
|
3
|
-
LocalActorResolverOptions,
|
|
4
|
-
ResolveActorOptions,
|
|
5
|
-
ResolvedActor,
|
|
6
|
-
} from '@atcute/identity-resolver';
|
|
7
|
-
|
|
8
|
-
// re-export types for backward compatibility
|
|
9
|
-
export type IdentityResolver = ActorResolver;
|
|
10
|
-
export type ResolvedIdentity = ResolvedActor;
|
|
11
|
-
export type ResolveIdentityOptions = ResolveActorOptions;
|
|
12
|
-
export type { LocalActorResolverOptions as DefaultIdentityResolverOptions };
|
package/lib/types/par.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { LocalActorResolver } from '@atcute/identity-resolver';
|
|
2
|
-
|
|
3
|
-
import type { DefaultIdentityResolverOptions, IdentityResolver } from '../types/identity.js';
|
|
4
|
-
|
|
5
|
-
export type { DefaultIdentityResolverOptions };
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @deprecated use `LocalActorResolver` from `@atcute/identity-resolver` instead
|
|
9
|
-
*/
|
|
10
|
-
export const defaultIdentityResolver = (options: DefaultIdentityResolverOptions): IdentityResolver => {
|
|
11
|
-
return new LocalActorResolver(options);
|
|
12
|
-
};
|