@atproto/oauth-client 0.2.1 → 0.3.0

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.
Files changed (59) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +12 -6
  3. package/dist/atproto-token-response.d.ts +110 -0
  4. package/dist/atproto-token-response.d.ts.map +1 -0
  5. package/dist/atproto-token-response.js +20 -0
  6. package/dist/atproto-token-response.js.map +1 -0
  7. package/dist/fetch-dpop.js +1 -2
  8. package/dist/fetch-dpop.js.map +1 -1
  9. package/dist/oauth-authorization-server-metadata-resolver.d.ts +6 -2
  10. package/dist/oauth-authorization-server-metadata-resolver.d.ts.map +1 -1
  11. package/dist/oauth-authorization-server-metadata-resolver.js +18 -9
  12. package/dist/oauth-authorization-server-metadata-resolver.js.map +1 -1
  13. package/dist/oauth-callback-error.d.ts.map +1 -1
  14. package/dist/oauth-client.d.ts +30 -15
  15. package/dist/oauth-client.d.ts.map +1 -1
  16. package/dist/oauth-client.js +24 -17
  17. package/dist/oauth-client.js.map +1 -1
  18. package/dist/oauth-protected-resource-metadata-resolver.d.ts +5 -1
  19. package/dist/oauth-protected-resource-metadata-resolver.d.ts.map +1 -1
  20. package/dist/oauth-protected-resource-metadata-resolver.js +18 -11
  21. package/dist/oauth-protected-resource-metadata-resolver.js.map +1 -1
  22. package/dist/oauth-resolver.d.ts +2 -2
  23. package/dist/oauth-server-agent.d.ts +15 -12
  24. package/dist/oauth-server-agent.d.ts.map +1 -1
  25. package/dist/oauth-server-agent.js +66 -47
  26. package/dist/oauth-server-agent.js.map +1 -1
  27. package/dist/oauth-session.d.ts +13 -8
  28. package/dist/oauth-session.d.ts.map +1 -1
  29. package/dist/oauth-session.js +12 -7
  30. package/dist/oauth-session.js.map +1 -1
  31. package/dist/runtime.d.ts +1 -1
  32. package/dist/runtime.js.map +1 -1
  33. package/dist/session-getter.d.ts +5 -4
  34. package/dist/session-getter.d.ts.map +1 -1
  35. package/dist/session-getter.js +52 -32
  36. package/dist/session-getter.js.map +1 -1
  37. package/dist/types.d.ts +98 -102
  38. package/dist/types.d.ts.map +1 -1
  39. package/dist/types.js.map +1 -1
  40. package/dist/util.d.ts +6 -1
  41. package/dist/util.d.ts.map +1 -1
  42. package/dist/util.js +56 -2
  43. package/dist/util.js.map +1 -1
  44. package/dist/validate-client-metadata.d.ts.map +1 -1
  45. package/dist/validate-client-metadata.js +17 -7
  46. package/dist/validate-client-metadata.js.map +1 -1
  47. package/package.json +9 -9
  48. package/src/atproto-token-response.ts +22 -0
  49. package/src/oauth-authorization-server-metadata-resolver.ts +22 -8
  50. package/src/oauth-client.ts +62 -32
  51. package/src/oauth-protected-resource-metadata-resolver.ts +22 -12
  52. package/src/oauth-server-agent.ts +89 -70
  53. package/src/oauth-session.ts +21 -13
  54. package/src/runtime.ts +1 -1
  55. package/src/session-getter.ts +53 -33
  56. package/src/types.ts +16 -11
  57. package/src/util.ts +78 -0
  58. package/src/validate-client-metadata.ts +23 -6
  59. package/tsconfig.build.tsbuildinfo +1 -0
@@ -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,sDAG6B;AAmBhB,QAAA,oBAAoB,GAAG,uCAAyB,CAAC,MAAM,CAAC;IACnE,SAAS,EAAE,iCAAmB,CAAC,GAAG,EAAE;CACrC,CAAC,CAAA"}
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
@@ -1 +1 @@
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;AAK7C;;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"}
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.CustomEventTarget = exports.CustomEvent = exports.contentMime = exports.timeoutSignal = void 0;
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":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-client-metadata.d.ts","sourceRoot":"","sources":["../src/validate-client-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAE/D,OAAO,EAAE,cAAc,EAAwB,MAAM,YAAY,CAAA;AAKjE,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,wBAAwB,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,cAAc,CA0DhB"}
1
+ {"version":3,"file":"validate-client-metadata.d.ts","sourceRoot":"","sources":["../src/validate-client-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EACL,wBAAwB,EAGzB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,cAAc,EAAwB,MAAM,YAAY,CAAA;AAKjE,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,wBAAwB,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,cAAc,CAuEhB"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateClientMetadata = void 0;
3
+ exports.validateClientMetadata = validateClientMetadata;
4
+ const oauth_types_1 = require("@atproto/oauth-types");
4
5
  const types_js_1 = require("./types.js");
5
6
  const TOKEN_ENDPOINT_AUTH_METHOD = `token_endpoint_auth_method`;
6
7
  const TOKEN_ENDPOINT_AUTH_SIGNING_ALG = `token_endpoint_auth_signing_alg`;
@@ -23,12 +24,22 @@ function validateClientMetadata(input, keyset) {
23
24
  input = { ...input, jwks: keyset.toJSON() };
24
25
  }
25
26
  const metadata = types_js_1.clientMetadataSchema.parse(input);
26
- // ATPROTO uses client metadata discovery
27
- try {
28
- new URL(metadata.client_id);
27
+ // Validate client ID
28
+ if (metadata.client_id.startsWith('http:')) {
29
+ (0, oauth_types_1.assertOAuthLoopbackClientId)(metadata.client_id);
30
+ }
31
+ else {
32
+ (0, oauth_types_1.assertOAuthDiscoverableClientId)(metadata.client_id);
33
+ }
34
+ const scopes = metadata.scope?.split(' ');
35
+ if (!scopes?.includes('atproto')) {
36
+ throw new TypeError(`Client metadata must include the "atproto" scope`);
29
37
  }
30
- catch (cause) {
31
- throw new TypeError(`client_id must be a valid URL`, { cause });
38
+ if (!metadata.response_types.includes('code')) {
39
+ throw new TypeError(`"response_types" must include "code"`);
40
+ }
41
+ if (!metadata.grant_types.includes('authorization_code')) {
42
+ throw new TypeError(`"grant_types" must include "authorization_code"`);
32
43
  }
33
44
  const method = metadata[TOKEN_ENDPOINT_AUTH_METHOD];
34
45
  switch (method) {
@@ -52,5 +63,4 @@ function validateClientMetadata(input, keyset) {
52
63
  }
53
64
  return metadata;
54
65
  }
55
- exports.validateClientMetadata = validateClientMetadata;
56
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":";;;AAGA,yCAAiE;AAEjE,MAAM,0BAA0B,GAAG,4BAA4B,CAAA;AAC/D,MAAM,+BAA+B,GAAG,iCAAiC,CAAA;AAEzE,SAAgB,sBAAsB,CACpC,KAA+B,EAC/B,MAAe;IAEf,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAA;QAC1E,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAA;YACvD,CAAC;iBAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,SAAS,CAAC,iBAAiB,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;QACnD,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAA;IAC7C,CAAC;IAED,MAAM,QAAQ,GAAG,+BAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAElD,yCAAyC;IACzC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,SAAS,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,0BAA0B,CAAC,CAAA;IACnD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,MAAM,IAAI,SAAS,CAAC,GAAG,0BAA0B,mBAAmB,CAAC,CAAA;QACvE,KAAK,MAAM;YACT,IAAI,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,SAAS,CACjB,GAAG,+BAA+B,8BAA8B,0BAA0B,QAAQ,MAAM,GAAG,CAC5G,CAAA;YACH,CAAC;YACD,MAAK;QACP,KAAK,iBAAiB;YACpB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;gBAClB,MAAM,IAAI,SAAS,CACjB,4CAA4C,0BAA0B,QAAQ,MAAM,GAAG,CACxF,CAAA;YACH,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,SAAS,CACjB,GAAG,+BAA+B,0BAA0B,0BAA0B,QAAQ,MAAM,GAAG,CACxG,CAAA;YACH,CAAC;YACD,MAAK;QACP;YACE,MAAM,IAAI,SAAS,CACjB,+CAA+C,MAAM,EAAE,CACxD,CAAA;IACL,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AA7DD,wDA6DC"}
1
+ {"version":3,"file":"validate-client-metadata.js","sourceRoot":"","sources":["../src/validate-client-metadata.ts"],"names":[],"mappings":";;AAYA,wDA0EC;AArFD,sDAI6B;AAE7B,yCAAiE;AAEjE,MAAM,0BAA0B,GAAG,4BAA4B,CAAA;AAC/D,MAAM,+BAA+B,GAAG,iCAAiC,CAAA;AAEzE,SAAgB,sBAAsB,CACpC,KAA+B,EAC/B,MAAe;IAEf,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAA;QAC1E,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAA;YACvD,CAAC;iBAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,SAAS,CAAC,iBAAiB,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;QACnD,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAA;IAC7C,CAAC;IAED,MAAM,QAAQ,GAAG,+BAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAElD,qBAAqB;IACrB,IAAI,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,IAAA,yCAA2B,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IACjD,CAAC;SAAM,CAAC;QACN,IAAA,6CAA+B,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAA;IACzE,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAA;IAC7D,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAA;IACxE,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,0BAA0B,CAAC,CAAA;IACnD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,MAAM,IAAI,SAAS,CAAC,GAAG,0BAA0B,mBAAmB,CAAC,CAAA;QACvE,KAAK,MAAM;YACT,IAAI,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,SAAS,CACjB,GAAG,+BAA+B,8BAA8B,0BAA0B,QAAQ,MAAM,GAAG,CAC5G,CAAA;YACH,CAAC;YACD,MAAK;QACP,KAAK,iBAAiB;YACpB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;gBAClB,MAAM,IAAI,SAAS,CACjB,4CAA4C,0BAA0B,QAAQ,MAAM,GAAG,CACxF,CAAA;YACH,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,SAAS,CACjB,GAAG,+BAA+B,0BAA0B,0BAA0B,QAAQ,MAAM,GAAG,CACxG,CAAA;YACH,CAAC;YACD,MAAK;QACP;YACE,MAAM,IAAI,SAAS,CACjB,+CAA+C,MAAM,EAAE,CACxD,CAAA;IACL,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/oauth-client",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
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.3",
31
- "@atproto-labs/fetch": "0.1.0",
32
- "@atproto-labs/handle-resolver": "0.1.3",
33
- "@atproto-labs/identity-resolver": "0.1.3",
30
+ "@atproto-labs/did-resolver": "0.1.5",
31
+ "@atproto-labs/fetch": "0.1.1",
32
+ "@atproto-labs/handle-resolver": "0.1.4",
33
+ "@atproto-labs/identity-resolver": "0.1.5",
34
34
  "@atproto-labs/simple-store": "0.1.1",
35
35
  "@atproto-labs/simple-store-memory": "0.1.1",
36
- "@atproto/did": "0.1.2",
36
+ "@atproto/did": "0.1.3",
37
37
  "@atproto/jwk": "0.1.1",
38
- "@atproto/oauth-types": "0.1.4",
39
- "@atproto/xrpc": "0.6.2"
38
+ "@atproto/oauth-types": "0.2.0",
39
+ "@atproto/xrpc": "0.6.3"
40
40
  },
41
41
  "devDependencies": {
42
- "typescript": "^5.3.3"
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(cache: AuthorizationServerMetadataCache, fetch?: Fetch) {
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
- issuer: string,
52
+ input: string,
43
53
  options?: GetCachedOptions,
44
54
  ): Promise<OAuthAuthorizationServerMetadata> {
45
- return super.get(oauthIssuerIdentifierSchema.parse(issuer), options)
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
 
@@ -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(input: string, options?: AuthorizeOptions): Promise<URL> {
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
- input,
261
- options,
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,16 +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:
289
- // Negotiate by using the order in the client metadata
290
- this.clientMetadata.response_types?.find((t) =>
291
- metadata['response_types_supported']?.includes(t),
292
- ) ?? 'code',
293
-
294
- display: options?.display,
295
- prompt: options?.prompt,
296
- scope: options?.scope || undefined,
297
- ui_locales: options?.ui_locales,
315
+ response_type: 'code' as const,
316
+ scope: options?.scope ?? this.clientMetadata.scope,
298
317
  }
299
318
 
300
319
  if (metadata.pushed_authorization_request_endpoint) {
@@ -400,14 +419,14 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
400
419
  )
401
420
 
402
421
  if (issuerParam != null) {
403
- if (!server.serverMetadata.issuer) {
422
+ if (!server.issuer) {
404
423
  throw new OAuthCallbackError(
405
424
  params,
406
425
  'Issuer not found in metadata',
407
426
  stateData.appState,
408
427
  )
409
428
  }
410
- if (server.serverMetadata.issuer !== issuerParam) {
429
+ if (server.issuer !== issuerParam) {
411
430
  throw new OAuthCallbackError(
412
431
  params,
413
432
  'Issuer mismatch',
@@ -435,7 +454,7 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
435
454
 
436
455
  return { session, state: stateData.appState ?? null }
437
456
  } catch (err) {
438
- await server.revoke(tokenSet.access_token)
457
+ await server.revoke(tokenSet.refresh_token || tokenSet.access_token)
439
458
 
440
459
  throw err
441
460
  }
@@ -452,11 +471,17 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
452
471
  *
453
472
  * @param refresh See {@link SessionGetter.getSession}
454
473
  */
455
- async restore(sub: string, refresh?: boolean): Promise<OAuthSession> {
456
- const { dpopKey, tokenSet } = await this.sessionGetter.getSession(
457
- sub,
458
- refresh,
459
- )
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
+ })
460
485
 
461
486
  const server = await this.serverFactory.fromIssuer(tokenSet.iss, dpopKey, {
462
487
  noCache: refresh === true,
@@ -467,10 +492,12 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
467
492
  }
468
493
 
469
494
  async revoke(sub: string) {
470
- const { dpopKey, tokenSet } = await this.sessionGetter.getSession(
471
- sub,
472
- false,
473
- )
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
+ })
474
501
 
475
502
  // NOT using `;(await this.restore(sub, false)).signOut()` because we want
476
503
  // the tokens to be deleted even if it was not possible to fetch the issuer
@@ -483,7 +510,10 @@ export class OAuthClient extends CustomEventTarget<OAuthClientEventMap> {
483
510
  }
484
511
  }
485
512
 
486
- protected createSession(server: OAuthServerAgent, sub: string): OAuthSession {
513
+ protected createSession(
514
+ server: OAuthServerAgent,
515
+ sub: AtprotoDid,
516
+ ): OAuthSession {
487
517
  return new OAuthSession(server, sub, this.sessionGetter, this.fetch)
488
518
  }
489
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
- if (
50
- protocol === 'https:' ||
51
- (protocol === 'http:' && ALLOW_UNSECURE_ORIGINS)
52
- ) {
53
- return super.get(origin, options)
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
- throw new TypeError(`Forbidden resource sercure protocol "${protocol}"`)
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