@atproto/oauth-client 0.2.2 → 0.3.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/CHANGELOG.md +35 -0
- package/README.md +12 -6
- package/dist/atproto-token-response.d.ts +110 -0
- package/dist/atproto-token-response.d.ts.map +1 -0
- package/dist/atproto-token-response.js +20 -0
- package/dist/atproto-token-response.js.map +1 -0
- package/dist/fetch-dpop.js +1 -2
- package/dist/fetch-dpop.js.map +1 -1
- package/dist/oauth-authorization-server-metadata-resolver.d.ts +6 -2
- package/dist/oauth-authorization-server-metadata-resolver.d.ts.map +1 -1
- package/dist/oauth-authorization-server-metadata-resolver.js +18 -9
- package/dist/oauth-authorization-server-metadata-resolver.js.map +1 -1
- package/dist/oauth-callback-error.d.ts.map +1 -1
- package/dist/oauth-client.d.ts +30 -15
- package/dist/oauth-client.d.ts.map +1 -1
- package/dist/oauth-client.js +22 -13
- package/dist/oauth-client.js.map +1 -1
- package/dist/oauth-protected-resource-metadata-resolver.d.ts +5 -1
- package/dist/oauth-protected-resource-metadata-resolver.d.ts.map +1 -1
- package/dist/oauth-protected-resource-metadata-resolver.js +18 -11
- package/dist/oauth-protected-resource-metadata-resolver.js.map +1 -1
- package/dist/oauth-resolver.d.ts +1 -1
- package/dist/oauth-server-agent.d.ts +14 -11
- package/dist/oauth-server-agent.d.ts.map +1 -1
- package/dist/oauth-server-agent.js +66 -47
- package/dist/oauth-server-agent.js.map +1 -1
- package/dist/oauth-session.d.ts +13 -8
- package/dist/oauth-session.d.ts.map +1 -1
- package/dist/oauth-session.js +12 -7
- package/dist/oauth-session.js.map +1 -1
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/session-getter.d.ts +5 -4
- package/dist/session-getter.d.ts.map +1 -1
- package/dist/session-getter.js +52 -32
- package/dist/session-getter.js.map +1 -1
- package/dist/types.d.ts +98 -102
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +6 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +56 -2
- package/dist/util.js.map +1 -1
- package/dist/validate-client-metadata.js +1 -2
- package/dist/validate-client-metadata.js.map +1 -1
- package/package.json +8 -8
- package/src/atproto-token-response.ts +22 -0
- package/src/oauth-authorization-server-metadata-resolver.ts +22 -8
- package/src/oauth-client.ts +61 -27
- package/src/oauth-protected-resource-metadata-resolver.ts +22 -12
- package/src/oauth-server-agent.ts +87 -68
- package/src/oauth-session.ts +21 -13
- package/src/runtime.ts +1 -1
- package/src/session-getter.ts +53 -33
- package/src/types.ts +16 -11
- package/src/util.ts +78 -0
- package/tsconfig.build.tsbuildinfo +1 -0
package/dist/types.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,CAAC,MAAM,KAAK,CAAA;AAMnB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAA;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,WAAW,CAAA;IAGpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,sDAI6B;AAuBhB,QAAA,oBAAoB,GAAG,uCAAyB,CAAC,MAAM,CAAC;IACnE,SAAS,EAAE,iCAAmB,CAAC,GAAG,EAAE;CACrC,CAAC,CAAA"}
|
package/dist/util.d.ts
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
/// <reference types="node" />
|
2
1
|
export type Awaitable<T> = T | PromiseLike<T>;
|
2
|
+
export type Simplify<T> = {
|
3
|
+
[K in keyof T]: T[K];
|
4
|
+
} & NonNullable<unknown>;
|
3
5
|
/**
|
4
6
|
* @todo (?) move to common package
|
5
7
|
*/
|
@@ -17,4 +19,7 @@ export declare class CustomEventTarget<EventDetailMap extends Record<string, unk
|
|
17
19
|
removeEventListener<T extends Extract<keyof EventDetailMap, string>>(type: T, callback: (event: CustomEvent<EventDetailMap[T]>) => void, options?: EventListenerOptions | boolean): void;
|
18
20
|
dispatchCustomEvent<T extends Extract<keyof EventDetailMap, string>>(type: T, detail: EventDetailMap[T], init?: EventInit): boolean;
|
19
21
|
}
|
22
|
+
export type SpaceSeparatedValue<Value extends string> = `${Value}` | `${Value} ${string}` | `${string} ${Value}` | `${string} ${Value} ${string}`;
|
23
|
+
export declare const includesSpaceSeparatedValue: <Value extends string>(input: string, value: Value) => input is SpaceSeparatedValue<Value>;
|
24
|
+
export declare function combineSignals(signals: readonly (AbortSignal | undefined)[]): AbortController & Disposable;
|
20
25
|
//# sourceMappingURL=util.d.ts.map
|
package/dist/util.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;AAC7C,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAKzE;;GAEG;AACH,eAAO,MAAM,aAAa,YACf,MAAM,YACL;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KACjC,WAAW,GAAG,UAmChB,CAAA;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,OAAO,UAAU,CAAC,WA4BtC,CAAA;AAEN,qBAAa,iBAAiB,CAAC,cAAc,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3E,QAAQ,CAAC,WAAW,cAAoB;IAExC,gBAAgB,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,cAAc,EAAE,MAAM,CAAC,EAC9D,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EACzD,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,GAC1C,IAAI;IAIP,mBAAmB,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,cAAc,EAAE,MAAM,CAAC,EACjE,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EACzD,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,GACvC,IAAI;IAQP,mBAAmB,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,cAAc,EAAE,MAAM,CAAC,EACjE,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,IAAI,CAAC,EAAE,SAAS,GACf,OAAO;CAKX;AAED,MAAM,MAAM,mBAAmB,CAAC,KAAK,SAAS,MAAM,IAChD,GAAG,KAAK,EAAE,GACV,GAAG,KAAK,IAAI,MAAM,EAAE,GACpB,GAAG,MAAM,IAAI,KAAK,EAAE,GACpB,GAAG,MAAM,IAAI,KAAK,IAAI,MAAM,EAAE,CAAA;AAElC,eAAO,MAAM,2BAA2B,GAAI,KAAK,SAAS,MAAM,SACvD,MAAM,SACN,KAAK,KACX,KAAK,IAAI,mBAAmB,CAAC,KAAK,CA+BpC,CAAA;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,GAgCrD,eAAe,GAAG,UAAU,CAClD"}
|
package/dist/util.js
CHANGED
@@ -11,7 +11,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
12
12
|
};
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
14
|
-
exports.
|
14
|
+
exports.includesSpaceSeparatedValue = exports.CustomEventTarget = exports.CustomEvent = exports.timeoutSignal = void 0;
|
15
|
+
exports.contentMime = contentMime;
|
16
|
+
exports.combineSignals = combineSignals;
|
15
17
|
// @ts-expect-error
|
16
18
|
Symbol.dispose ?? (Symbol.dispose = Symbol('@@dispose'));
|
17
19
|
/**
|
@@ -42,7 +44,6 @@ exports.timeoutSignal = timeoutSignal;
|
|
42
44
|
function contentMime(headers) {
|
43
45
|
return headers.get('content-type')?.split(';')[0].trim();
|
44
46
|
}
|
45
|
-
exports.contentMime = contentMime;
|
46
47
|
/**
|
47
48
|
* Ponyfill for `CustomEvent` constructor.
|
48
49
|
*/
|
@@ -95,4 +96,57 @@ class CustomEventTarget {
|
|
95
96
|
}
|
96
97
|
}
|
97
98
|
exports.CustomEventTarget = CustomEventTarget;
|
99
|
+
const includesSpaceSeparatedValue = (input, value) => {
|
100
|
+
if (value.length === 0)
|
101
|
+
throw new TypeError('Value cannot be empty');
|
102
|
+
if (value.includes(' '))
|
103
|
+
throw new TypeError('Value cannot contain spaces');
|
104
|
+
// Optimized version of:
|
105
|
+
// return input.split(' ').includes(value)
|
106
|
+
const inputLength = input.length;
|
107
|
+
const valueLength = value.length;
|
108
|
+
if (inputLength < valueLength)
|
109
|
+
return false;
|
110
|
+
let idx = input.indexOf(value);
|
111
|
+
let idxEnd;
|
112
|
+
while (idx !== -1) {
|
113
|
+
idxEnd = idx + valueLength;
|
114
|
+
if (
|
115
|
+
// at beginning or preceded by space
|
116
|
+
(idx === 0 || input[idx - 1] === ' ') &&
|
117
|
+
// at end or followed by space
|
118
|
+
(idxEnd === inputLength || input[idxEnd] === ' ')) {
|
119
|
+
return true;
|
120
|
+
}
|
121
|
+
idx = input.indexOf(value, idxEnd + 1);
|
122
|
+
}
|
123
|
+
return false;
|
124
|
+
};
|
125
|
+
exports.includesSpaceSeparatedValue = includesSpaceSeparatedValue;
|
126
|
+
function combineSignals(signals) {
|
127
|
+
const controller = new AbortController();
|
128
|
+
const onAbort = function (_event) {
|
129
|
+
const reason = new Error('This operation was aborted', {
|
130
|
+
cause: this.reason,
|
131
|
+
});
|
132
|
+
controller.abort(reason);
|
133
|
+
};
|
134
|
+
for (const sig of signals) {
|
135
|
+
if (!sig)
|
136
|
+
continue;
|
137
|
+
if (sig.aborted) {
|
138
|
+
// Remove "abort" listener that was added to sig in previous iterations
|
139
|
+
controller.abort();
|
140
|
+
throw new Error('One of the signals is already aborted', {
|
141
|
+
cause: sig.reason,
|
142
|
+
});
|
143
|
+
}
|
144
|
+
sig.addEventListener('abort', onAbort, { signal: controller.signal });
|
145
|
+
}
|
146
|
+
controller[Symbol.dispose] = () => {
|
147
|
+
const reason = new Error('AbortController was disposed');
|
148
|
+
controller.abort(reason);
|
149
|
+
};
|
150
|
+
return controller;
|
151
|
+
}
|
98
152
|
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.validateClientMetadata =
|
3
|
+
exports.validateClientMetadata = validateClientMetadata;
|
4
4
|
const oauth_types_1 = require("@atproto/oauth-types");
|
5
5
|
const types_js_1 = require("./types.js");
|
6
6
|
const TOKEN_ENDPOINT_AUTH_METHOD = `token_endpoint_auth_method`;
|
@@ -63,5 +63,4 @@ function validateClientMetadata(input, keyset) {
|
|
63
63
|
}
|
64
64
|
return metadata;
|
65
65
|
}
|
66
|
-
exports.validateClientMetadata = validateClientMetadata;
|
67
66
|
//# sourceMappingURL=validate-client-metadata.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"validate-client-metadata.js","sourceRoot":"","sources":["../src/validate-client-metadata.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"validate-client-metadata.js","sourceRoot":"","sources":["../src/validate-client-metadata.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@atproto/oauth-client",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.3.1",
|
4
4
|
"license": "MIT",
|
5
5
|
"description": "OAuth client for ATPROTO PDS. This package serves as common base for environment-specific implementations (NodeJS, Browser, React-Native).",
|
6
6
|
"keywords": [
|
@@ -27,19 +27,19 @@
|
|
27
27
|
"dependencies": {
|
28
28
|
"multiformats": "^9.9.0",
|
29
29
|
"zod": "^3.23.8",
|
30
|
-
"@atproto-labs/did-resolver": "0.1.
|
30
|
+
"@atproto-labs/did-resolver": "0.1.5",
|
31
31
|
"@atproto-labs/fetch": "0.1.1",
|
32
|
-
"@atproto-labs/handle-resolver": "0.1.
|
33
|
-
"@atproto-labs/identity-resolver": "0.1.
|
32
|
+
"@atproto-labs/handle-resolver": "0.1.4",
|
33
|
+
"@atproto-labs/identity-resolver": "0.1.6",
|
34
34
|
"@atproto-labs/simple-store": "0.1.1",
|
35
35
|
"@atproto-labs/simple-store-memory": "0.1.1",
|
36
|
-
"@atproto/did": "0.1.
|
36
|
+
"@atproto/did": "0.1.3",
|
37
37
|
"@atproto/jwk": "0.1.1",
|
38
|
-
"@atproto/oauth-types": "0.
|
39
|
-
"@atproto/xrpc": "0.6.
|
38
|
+
"@atproto/oauth-types": "0.2.0",
|
39
|
+
"@atproto/xrpc": "0.6.4"
|
40
40
|
},
|
41
41
|
"devDependencies": {
|
42
|
-
"typescript": "^5.
|
42
|
+
"typescript": "^5.6.3"
|
43
43
|
},
|
44
44
|
"scripts": {
|
45
45
|
"build": "tsc --build tsconfig.build.json"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { atprotoDidSchema } from '@atproto/did'
|
2
|
+
import { oauthTokenResponseSchema } from '@atproto/oauth-types'
|
3
|
+
import { z } from 'zod'
|
4
|
+
|
5
|
+
import { includesSpaceSeparatedValue, SpaceSeparatedValue } from './util'
|
6
|
+
|
7
|
+
export type AtprotoScope = SpaceSeparatedValue<'atproto'>
|
8
|
+
export const isAtprotoScope = (input: string): input is AtprotoScope =>
|
9
|
+
includesSpaceSeparatedValue(input, 'atproto')
|
10
|
+
export const atprotoScopeSchema = z
|
11
|
+
.string()
|
12
|
+
.refine(isAtprotoScope, 'The "atproto" scope is required')
|
13
|
+
|
14
|
+
export const atprotoTokenResponseSchema = oauthTokenResponseSchema.extend({
|
15
|
+
token_type: z.literal('DPoP'),
|
16
|
+
sub: atprotoDidSchema,
|
17
|
+
scope: atprotoScopeSchema,
|
18
|
+
// OpenID is not compatible with atproto identities
|
19
|
+
id_token: z.never().optional(),
|
20
|
+
})
|
21
|
+
|
22
|
+
export type AtprotoTokenResponse = z.infer<typeof atprotoTokenResponseSchema>
|
@@ -14,7 +14,7 @@ import {
|
|
14
14
|
oauthAuthorizationServerMetadataValidator,
|
15
15
|
oauthIssuerIdentifierSchema,
|
16
16
|
} from '@atproto/oauth-types'
|
17
|
-
import { contentMime } from './util'
|
17
|
+
import { contentMime } from './util.js'
|
18
18
|
|
19
19
|
export type { GetCachedOptions, OAuthAuthorizationServerMetadata }
|
20
20
|
|
@@ -23,6 +23,10 @@ export type AuthorizationServerMetadataCache = SimpleStore<
|
|
23
23
|
OAuthAuthorizationServerMetadata
|
24
24
|
>
|
25
25
|
|
26
|
+
export type OAuthAuthorizationServerMetadataResolverConfig = {
|
27
|
+
allowHttpIssuer?: boolean
|
28
|
+
}
|
29
|
+
|
26
30
|
/**
|
27
31
|
* @see {@link https://datatracker.ietf.org/doc/html/rfc8414}
|
28
32
|
*/
|
@@ -31,31 +35,41 @@ export class OAuthAuthorizationServerMetadataResolver extends CachedGetter<
|
|
31
35
|
OAuthAuthorizationServerMetadata
|
32
36
|
> {
|
33
37
|
private readonly fetch: Fetch<unknown>
|
38
|
+
private readonly allowHttpIssuer: boolean
|
34
39
|
|
35
|
-
constructor(
|
40
|
+
constructor(
|
41
|
+
cache: AuthorizationServerMetadataCache,
|
42
|
+
fetch?: Fetch,
|
43
|
+
config?: OAuthAuthorizationServerMetadataResolverConfig,
|
44
|
+
) {
|
36
45
|
super(async (issuer, options) => this.fetchMetadata(issuer, options), cache)
|
37
46
|
|
38
47
|
this.fetch = bindFetch(fetch)
|
48
|
+
this.allowHttpIssuer = config?.allowHttpIssuer === true
|
39
49
|
}
|
40
50
|
|
41
51
|
async get(
|
42
|
-
|
52
|
+
input: string,
|
43
53
|
options?: GetCachedOptions,
|
44
54
|
): Promise<OAuthAuthorizationServerMetadata> {
|
45
|
-
|
55
|
+
const issuer = oauthIssuerIdentifierSchema.parse(input)
|
56
|
+
if (!this.allowHttpIssuer && issuer.startsWith('http:')) {
|
57
|
+
throw new TypeError(
|
58
|
+
'Unsecure issuer URL protocol only allowed in development and test environments',
|
59
|
+
)
|
60
|
+
}
|
61
|
+
return super.get(issuer, options)
|
46
62
|
}
|
47
63
|
|
48
64
|
private async fetchMetadata(
|
49
65
|
issuer: string,
|
50
66
|
options?: GetCachedOptions,
|
51
67
|
): Promise<OAuthAuthorizationServerMetadata> {
|
52
|
-
const headers = new Headers([['accept', 'application/json']])
|
53
|
-
if (options?.noCache) headers.set('cache-control', 'no-cache')
|
54
|
-
|
55
68
|
const url = new URL(`/.well-known/oauth-authorization-server`, issuer)
|
56
69
|
const request = new Request(url, {
|
70
|
+
headers: { accept: 'application/json' },
|
71
|
+
cache: options?.noCache ? 'no-cache' : undefined,
|
57
72
|
signal: options?.signal,
|
58
|
-
headers,
|
59
73
|
redirect: 'manual', // response must be 200 OK
|
60
74
|
})
|
61
75
|
|
package/src/oauth-client.ts
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
import {
|
2
|
+
assertAtprotoDid,
|
3
|
+
AtprotoDid,
|
2
4
|
DidCache,
|
3
5
|
DidResolverCached,
|
4
6
|
DidResolverCommon,
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
8
|
+
type DidResolverCommonOptions,
|
5
9
|
} from '@atproto-labs/did-resolver'
|
6
10
|
import { Fetch } from '@atproto-labs/fetch'
|
7
11
|
import {
|
@@ -14,6 +18,7 @@ import { IdentityResolver } from '@atproto-labs/identity-resolver'
|
|
14
18
|
import { SimpleStoreMemory } from '@atproto-labs/simple-store-memory'
|
15
19
|
import { Key, Keyset } from '@atproto/jwk'
|
16
20
|
import {
|
21
|
+
OAuthAuthorizationRequestParameters,
|
17
22
|
OAuthClientIdDiscoverable,
|
18
23
|
OAuthClientMetadata,
|
19
24
|
OAuthClientMetadataInput,
|
@@ -73,6 +78,21 @@ export type OAuthClientOptions = {
|
|
73
78
|
responseMode: OAuthResponseMode
|
74
79
|
clientMetadata: Readonly<OAuthClientMetadataInput>
|
75
80
|
keyset?: Keyset | Iterable<Key | undefined | null | false>
|
81
|
+
/**
|
82
|
+
* Determines if the client will allow communicating with the OAuth Servers
|
83
|
+
* (Authorization & Resource), or to retrieve "did:web" documents, over
|
84
|
+
* unsafe HTTP connections. It is recommended to set this to `true` only for
|
85
|
+
* development purposes.
|
86
|
+
*
|
87
|
+
* @note This does not affect the identity resolution mechanism, which will
|
88
|
+
* allow HTTP connections to the PLC Directory (if the provided directory url
|
89
|
+
* is "http:" based).
|
90
|
+
* @default false
|
91
|
+
* @see {@link OAuthProtectedResourceMetadataResolver.allowHttpResource}
|
92
|
+
* @see {@link OAuthAuthorizationServerMetadataResolver.allowHttpIssuer}
|
93
|
+
* @see {@link DidResolverCommonOptions.allowHttp}
|
94
|
+
*/
|
95
|
+
allowHttp?: boolean
|
76
96
|
|
77
97
|
// Stores
|
78
98
|
stateStore: StateStore
|
@@ -143,11 +163,12 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
143
163
|
readonly serverFactory: OAuthServerFactory
|
144
164
|
|
145
165
|
// Stores
|
146
|
-
readonly sessionGetter: SessionGetter
|
147
|
-
readonly stateStore: StateStore
|
166
|
+
protected readonly sessionGetter: SessionGetter
|
167
|
+
protected readonly stateStore: StateStore
|
148
168
|
|
149
169
|
constructor({
|
150
170
|
fetch = globalThis.fetch,
|
171
|
+
allowHttp = false,
|
151
172
|
|
152
173
|
stateStore,
|
153
174
|
sessionStore,
|
@@ -186,7 +207,7 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
186
207
|
this.oauthResolver = new OAuthResolver(
|
187
208
|
new IdentityResolver(
|
188
209
|
new DidResolverCached(
|
189
|
-
new DidResolverCommon({ fetch, plcDirectoryUrl }),
|
210
|
+
new DidResolverCommon({ fetch, plcDirectoryUrl, allowHttp }),
|
190
211
|
didCache,
|
191
212
|
),
|
192
213
|
new CachedHandleResolver(
|
@@ -197,10 +218,12 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
197
218
|
new OAuthProtectedResourceMetadataResolver(
|
198
219
|
protectedResourceMetadataCache,
|
199
220
|
fetch,
|
221
|
+
{ allowHttpResource: allowHttp },
|
200
222
|
),
|
201
223
|
new OAuthAuthorizationServerMetadataResolver(
|
202
224
|
authorizationServerMetadataCache,
|
203
225
|
fetch,
|
226
|
+
{ allowHttpIssuer: allowHttp },
|
204
227
|
),
|
205
228
|
)
|
206
229
|
this.serverFactory = new OAuthServerFactory(
|
@@ -248,7 +271,10 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
248
271
|
return this.keyset?.publicJwks ?? ({ keys: [] as const } as const)
|
249
272
|
}
|
250
273
|
|
251
|
-
async authorize(
|
274
|
+
async authorize(
|
275
|
+
input: string,
|
276
|
+
{ signal, ...options }: AuthorizeOptions = {},
|
277
|
+
): Promise<URL> {
|
252
278
|
const redirectUri =
|
253
279
|
options?.redirect_uri ?? this.clientMetadata.redirect_uris[0]
|
254
280
|
if (!this.clientMetadata.redirect_uris.includes(redirectUri)) {
|
@@ -256,10 +282,9 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
256
282
|
throw new TypeError('Invalid redirect_uri')
|
257
283
|
}
|
258
284
|
|
259
|
-
const { identity, metadata } = await this.oauthResolver.resolve(
|
260
|
-
|
261
|
-
|
262
|
-
)
|
285
|
+
const { identity, metadata } = await this.oauthResolver.resolve(input, {
|
286
|
+
signal,
|
287
|
+
})
|
263
288
|
|
264
289
|
const pkce = await this.runtime.generatePKCE()
|
265
290
|
const dpopKey = await this.runtime.generateKey(
|
@@ -275,7 +300,9 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
275
300
|
appState: options?.state,
|
276
301
|
})
|
277
302
|
|
278
|
-
const parameters = {
|
303
|
+
const parameters: OAuthAuthorizationRequestParameters = {
|
304
|
+
...options,
|
305
|
+
|
279
306
|
client_id: this.clientMetadata.client_id,
|
280
307
|
redirect_uri: redirectUri,
|
281
308
|
code_challenge: pkce.challenge,
|
@@ -285,12 +312,8 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
285
312
|
? input // If input is a handle or a DID, use it as a login_hint
|
286
313
|
: undefined,
|
287
314
|
response_mode: this.responseMode,
|
288
|
-
response_type: 'code',
|
289
|
-
|
290
|
-
display: options?.display,
|
291
|
-
prompt: options?.prompt,
|
315
|
+
response_type: 'code' as const,
|
292
316
|
scope: options?.scope ?? this.clientMetadata.scope,
|
293
|
-
ui_locales: options?.ui_locales,
|
294
317
|
}
|
295
318
|
|
296
319
|
if (metadata.pushed_authorization_request_endpoint) {
|
@@ -396,14 +419,14 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
396
419
|
)
|
397
420
|
|
398
421
|
if (issuerParam != null) {
|
399
|
-
if (!server.
|
422
|
+
if (!server.issuer) {
|
400
423
|
throw new OAuthCallbackError(
|
401
424
|
params,
|
402
425
|
'Issuer not found in metadata',
|
403
426
|
stateData.appState,
|
404
427
|
)
|
405
428
|
}
|
406
|
-
if (server.
|
429
|
+
if (server.issuer !== issuerParam) {
|
407
430
|
throw new OAuthCallbackError(
|
408
431
|
params,
|
409
432
|
'Issuer mismatch',
|
@@ -431,7 +454,7 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
431
454
|
|
432
455
|
return { session, state: stateData.appState ?? null }
|
433
456
|
} catch (err) {
|
434
|
-
await server.revoke(tokenSet.access_token)
|
457
|
+
await server.revoke(tokenSet.refresh_token || tokenSet.access_token)
|
435
458
|
|
436
459
|
throw err
|
437
460
|
}
|
@@ -448,11 +471,17 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
448
471
|
*
|
449
472
|
* @param refresh See {@link SessionGetter.getSession}
|
450
473
|
*/
|
451
|
-
async restore(
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
474
|
+
async restore(
|
475
|
+
sub: string,
|
476
|
+
refresh: boolean | 'auto' = 'auto',
|
477
|
+
): Promise<OAuthSession> {
|
478
|
+
// sub arg is lightly typed for convenience of library user
|
479
|
+
assertAtprotoDid(sub)
|
480
|
+
|
481
|
+
const { dpopKey, tokenSet } = await this.sessionGetter.get(sub, {
|
482
|
+
noCache: refresh === true,
|
483
|
+
allowStale: refresh === false,
|
484
|
+
})
|
456
485
|
|
457
486
|
const server = await this.serverFactory.fromIssuer(tokenSet.iss, dpopKey, {
|
458
487
|
noCache: refresh === true,
|
@@ -463,10 +492,12 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
463
492
|
}
|
464
493
|
|
465
494
|
async revoke(sub: string) {
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
495
|
+
// sub arg is lightly typed for convenience of library user
|
496
|
+
assertAtprotoDid(sub)
|
497
|
+
|
498
|
+
const { dpopKey, tokenSet } = await this.sessionGetter.get(sub, {
|
499
|
+
allowStale: true,
|
500
|
+
})
|
470
501
|
|
471
502
|
// NOT using `;(await this.restore(sub, false)).signOut()` because we want
|
472
503
|
// the tokens to be deleted even if it was not possible to fetch the issuer
|
@@ -479,7 +510,10 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
|
|
479
510
|
}
|
480
511
|
}
|
481
512
|
|
482
|
-
protected createSession(
|
513
|
+
protected createSession(
|
514
|
+
server: OAuthServerAgent,
|
515
|
+
sub: AtprotoDid,
|
516
|
+
): OAuthSession {
|
483
517
|
return new OAuthSession(server, sub, this.sessionGetter, this.fetch)
|
484
518
|
}
|
485
519
|
}
|
@@ -10,11 +10,10 @@ import {
|
|
10
10
|
SimpleStore,
|
11
11
|
} from '@atproto-labs/simple-store'
|
12
12
|
import {
|
13
|
-
ALLOW_UNSECURE_ORIGINS,
|
14
13
|
OAuthProtectedResourceMetadata,
|
15
14
|
oauthProtectedResourceMetadataSchema,
|
16
15
|
} from '@atproto/oauth-types'
|
17
|
-
import { contentMime } from './util'
|
16
|
+
import { contentMime } from './util.js'
|
18
17
|
|
19
18
|
export type { GetCachedOptions, OAuthProtectedResourceMetadata }
|
20
19
|
|
@@ -23,6 +22,10 @@ export type ProtectedResourceMetadataCache = SimpleStore<
|
|
23
22
|
OAuthProtectedResourceMetadata
|
24
23
|
>
|
25
24
|
|
25
|
+
export type OAuthProtectedResourceMetadataResolverConfig = {
|
26
|
+
allowHttpResource?: boolean
|
27
|
+
}
|
28
|
+
|
26
29
|
/**
|
27
30
|
* @see {@link https://datatracker.ietf.org/doc/html/draft-ietf-oauth-resource-metadata-05}
|
28
31
|
*/
|
@@ -31,14 +34,17 @@ export class OAuthProtectedResourceMetadataResolver extends CachedGetter<
|
|
31
34
|
OAuthProtectedResourceMetadata
|
32
35
|
> {
|
33
36
|
private readonly fetch: Fetch<unknown>
|
37
|
+
private readonly allowHttpResource: boolean
|
34
38
|
|
35
39
|
constructor(
|
36
40
|
cache: ProtectedResourceMetadataCache,
|
37
41
|
fetch: Fetch = globalThis.fetch,
|
42
|
+
config?: OAuthProtectedResourceMetadataResolverConfig,
|
38
43
|
) {
|
39
44
|
super(async (origin, options) => this.fetchMetadata(origin, options), cache)
|
40
45
|
|
41
46
|
this.fetch = bindFetch(fetch)
|
47
|
+
this.allowHttpResource = config?.allowHttpResource === true
|
42
48
|
}
|
43
49
|
|
44
50
|
async get(
|
@@ -46,27 +52,31 @@ export class OAuthProtectedResourceMetadataResolver extends CachedGetter<
|
|
46
52
|
options?: GetCachedOptions,
|
47
53
|
): Promise<OAuthProtectedResourceMetadata> {
|
48
54
|
const { protocol, origin } = new URL(resource)
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
55
|
+
|
56
|
+
if (protocol !== 'https:' && protocol !== 'http:') {
|
57
|
+
throw new TypeError(
|
58
|
+
`Invalid protected resource metadata URL protocol: ${protocol}`,
|
59
|
+
)
|
54
60
|
}
|
55
61
|
|
56
|
-
|
62
|
+
if (protocol === 'http:' && !this.allowHttpResource) {
|
63
|
+
throw new TypeError(
|
64
|
+
`Unsecure resource metadata URL (${protocol}) only allowed in development and test environments`,
|
65
|
+
)
|
66
|
+
}
|
67
|
+
|
68
|
+
return super.get(origin, options)
|
57
69
|
}
|
58
70
|
|
59
71
|
private async fetchMetadata(
|
60
72
|
origin: string,
|
61
73
|
options?: GetCachedOptions,
|
62
74
|
): Promise<OAuthProtectedResourceMetadata> {
|
63
|
-
const headers = new Headers([['accept', 'application/json']])
|
64
|
-
if (options?.noCache) headers.set('cache-control', 'no-cache')
|
65
|
-
|
66
75
|
const url = new URL(`/.well-known/oauth-protected-resource`, origin)
|
67
76
|
const request = new Request(url, {
|
68
77
|
signal: options?.signal,
|
69
|
-
headers,
|
78
|
+
headers: { accept: 'application/json' },
|
79
|
+
cache: options?.noCache ? 'no-cache' : undefined,
|
70
80
|
redirect: 'manual', // response must be 200 OK
|
71
81
|
})
|
72
82
|
|