@atproto/oauth-types 0.6.3 → 0.7.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 (107) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/atproto-loopback-client-id.js +17 -21
  3. package/dist/atproto-loopback-client-id.js.map +1 -1
  4. package/dist/atproto-loopback-client-metadata.js +6 -10
  5. package/dist/atproto-loopback-client-metadata.js.map +1 -1
  6. package/dist/atproto-loopback-client-redirect-uris.js +1 -4
  7. package/dist/atproto-loopback-client-redirect-uris.js.map +1 -1
  8. package/dist/atproto-oauth-scope.js +11 -17
  9. package/dist/atproto-oauth-scope.js.map +1 -1
  10. package/dist/atproto-oauth-token-response.d.ts +3 -3
  11. package/dist/atproto-oauth-token-response.js +9 -12
  12. package/dist/atproto-oauth-token-response.js.map +1 -1
  13. package/dist/constants.js +1 -4
  14. package/dist/constants.js.map +1 -1
  15. package/dist/index.js +49 -65
  16. package/dist/index.js.map +1 -1
  17. package/dist/oauth-access-token.js +2 -5
  18. package/dist/oauth-access-token.js.map +1 -1
  19. package/dist/oauth-authorization-code-grant-token-request.js +7 -10
  20. package/dist/oauth-authorization-code-grant-token-request.js.map +1 -1
  21. package/dist/oauth-authorization-details.js +10 -13
  22. package/dist/oauth-authorization-details.js.map +1 -1
  23. package/dist/oauth-authorization-request-jar.js +4 -7
  24. package/dist/oauth-authorization-request-jar.js.map +1 -1
  25. package/dist/oauth-authorization-request-par.js +6 -9
  26. package/dist/oauth-authorization-request-par.js.map +1 -1
  27. package/dist/oauth-authorization-request-parameters.js +35 -38
  28. package/dist/oauth-authorization-request-parameters.js.map +1 -1
  29. package/dist/oauth-authorization-request-query.js +11 -14
  30. package/dist/oauth-authorization-request-query.js.map +1 -1
  31. package/dist/oauth-authorization-request-uri.js +4 -7
  32. package/dist/oauth-authorization-request-uri.js.map +1 -1
  33. package/dist/oauth-authorization-response-error.js +2 -5
  34. package/dist/oauth-authorization-response-error.js.map +1 -1
  35. package/dist/oauth-authorization-server-metadata.js +52 -55
  36. package/dist/oauth-authorization-server-metadata.js.map +1 -1
  37. package/dist/oauth-client-credentials-grant-token-request.js +3 -6
  38. package/dist/oauth-client-credentials-grant-token-request.js.map +1 -1
  39. package/dist/oauth-client-credentials.js +17 -20
  40. package/dist/oauth-client-credentials.js.map +1 -1
  41. package/dist/oauth-client-id-discoverable.js +26 -33
  42. package/dist/oauth-client-id-discoverable.js.map +1 -1
  43. package/dist/oauth-client-id-loopback.js +20 -29
  44. package/dist/oauth-client-id-loopback.js.map +1 -1
  45. package/dist/oauth-client-id.js +2 -5
  46. package/dist/oauth-client-id.js.map +1 -1
  47. package/dist/oauth-client-metadata.d.ts.map +1 -1
  48. package/dist/oauth-client-metadata.js +41 -44
  49. package/dist/oauth-client-metadata.js.map +1 -1
  50. package/dist/oauth-code-challenge-method.js +2 -5
  51. package/dist/oauth-code-challenge-method.js.map +1 -1
  52. package/dist/oauth-endpoint-auth-method.js +2 -5
  53. package/dist/oauth-endpoint-auth-method.js.map +1 -1
  54. package/dist/oauth-endpoint-name.js +1 -4
  55. package/dist/oauth-endpoint-name.js.map +1 -1
  56. package/dist/oauth-grant-type.js +2 -5
  57. package/dist/oauth-grant-type.js.map +1 -1
  58. package/dist/oauth-introspection-response.js +1 -2
  59. package/dist/oauth-issuer-identifier.js +7 -10
  60. package/dist/oauth-issuer-identifier.js.map +1 -1
  61. package/dist/oauth-par-response.js +4 -7
  62. package/dist/oauth-par-response.js.map +1 -1
  63. package/dist/oauth-password-grant-token-request.js +5 -8
  64. package/dist/oauth-password-grant-token-request.js.map +1 -1
  65. package/dist/oauth-prompt-mode.js +2 -5
  66. package/dist/oauth-prompt-mode.js.map +1 -1
  67. package/dist/oauth-protected-resource-metadata.js +14 -17
  68. package/dist/oauth-protected-resource-metadata.js.map +1 -1
  69. package/dist/oauth-redirect-uri.js +10 -13
  70. package/dist/oauth-redirect-uri.js.map +1 -1
  71. package/dist/oauth-refresh-token-grant-token-request.js +5 -8
  72. package/dist/oauth-refresh-token-grant-token-request.js.map +1 -1
  73. package/dist/oauth-refresh-token.js +2 -5
  74. package/dist/oauth-refresh-token.js.map +1 -1
  75. package/dist/oauth-request-uri.js +2 -5
  76. package/dist/oauth-request-uri.js.map +1 -1
  77. package/dist/oauth-response-mode.js +2 -5
  78. package/dist/oauth-response-mode.js.map +1 -1
  79. package/dist/oauth-response-type.js +2 -5
  80. package/dist/oauth-response-type.js.map +1 -1
  81. package/dist/oauth-scope.js +4 -8
  82. package/dist/oauth-scope.js.map +1 -1
  83. package/dist/oauth-token-identification.js +6 -9
  84. package/dist/oauth-token-identification.js.map +1 -1
  85. package/dist/oauth-token-request.js +10 -13
  86. package/dist/oauth-token-request.js.map +1 -1
  87. package/dist/oauth-token-response.js +12 -15
  88. package/dist/oauth-token-response.js.map +1 -1
  89. package/dist/oauth-token-type.js +4 -7
  90. package/dist/oauth-token-type.js.map +1 -1
  91. package/dist/oidc-authorization-error-response.js +2 -5
  92. package/dist/oidc-authorization-error-response.js.map +1 -1
  93. package/dist/oidc-claims-parameter.js +2 -5
  94. package/dist/oidc-claims-parameter.js.map +1 -1
  95. package/dist/oidc-claims-properties.js +5 -8
  96. package/dist/oidc-claims-properties.js.map +1 -1
  97. package/dist/oidc-entity-type.js +2 -5
  98. package/dist/oidc-entity-type.js.map +1 -1
  99. package/dist/oidc-userinfo.js +10 -13
  100. package/dist/oidc-userinfo.js.map +1 -1
  101. package/dist/uri.js +25 -28
  102. package/dist/uri.js.map +1 -1
  103. package/dist/util.js +12 -26
  104. package/dist/util.js.map +1 -1
  105. package/package.json +8 -7
  106. package/src/atproto-oauth-token-response.ts +1 -1
  107. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1,52 +1,45 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.conventionalOAuthClientIdSchema = exports.oauthClientIdDiscoverableSchema = void 0;
4
- exports.isOAuthClientIdDiscoverable = isOAuthClientIdDiscoverable;
5
- exports.isConventionalOAuthClientId = isConventionalOAuthClientId;
6
- exports.assertOAuthDiscoverableClientId = assertOAuthDiscoverableClientId;
7
- exports.parseOAuthDiscoverableClientId = parseOAuthDiscoverableClientId;
8
- const zod_1 = require("zod");
9
- const oauth_client_id_js_1 = require("./oauth-client-id.js");
10
- const uri_js_1 = require("./uri.js");
11
- const util_js_1 = require("./util.js");
1
+ import { z } from 'zod';
2
+ import { oauthClientIdSchema } from './oauth-client-id.js';
3
+ import { httpsUriSchema } from './uri.js';
4
+ import { extractUrlPath, isHostnameIP } from './util.js';
12
5
  /**
13
6
  * @see {@link https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-00.html}
14
7
  */
15
- exports.oauthClientIdDiscoverableSchema = zod_1.z
16
- .intersection(oauth_client_id_js_1.oauthClientIdSchema, uri_js_1.httpsUriSchema)
8
+ export const oauthClientIdDiscoverableSchema = z
9
+ .intersection(oauthClientIdSchema, httpsUriSchema)
17
10
  .superRefine((value, ctx) => {
18
11
  const url = new URL(value);
19
12
  if (url.username || url.password) {
20
13
  ctx.addIssue({
21
- code: zod_1.z.ZodIssueCode.custom,
14
+ code: z.ZodIssueCode.custom,
22
15
  message: 'ClientID must not contain credentials',
23
16
  });
24
17
  return false;
25
18
  }
26
19
  if (url.hash) {
27
20
  ctx.addIssue({
28
- code: zod_1.z.ZodIssueCode.custom,
21
+ code: z.ZodIssueCode.custom,
29
22
  message: 'ClientID must not contain a fragment',
30
23
  });
31
24
  return false;
32
25
  }
33
26
  if (url.pathname === '/') {
34
27
  ctx.addIssue({
35
- code: zod_1.z.ZodIssueCode.custom,
28
+ code: z.ZodIssueCode.custom,
36
29
  message: 'ClientID must contain a path component (e.g. "/client-metadata.json")',
37
30
  });
38
31
  return false;
39
32
  }
40
33
  if (url.pathname.endsWith('/')) {
41
34
  ctx.addIssue({
42
- code: zod_1.z.ZodIssueCode.custom,
35
+ code: z.ZodIssueCode.custom,
43
36
  message: 'ClientID path must not end with a trailing slash',
44
37
  });
45
38
  return false;
46
39
  }
47
- if ((0, util_js_1.isHostnameIP)(url.hostname)) {
40
+ if (isHostnameIP(url.hostname)) {
48
41
  ctx.addIssue({
49
- code: zod_1.z.ZodIssueCode.custom,
42
+ code: z.ZodIssueCode.custom,
50
43
  message: 'ClientID hostname must not be an IP address',
51
44
  });
52
45
  return false;
@@ -54,50 +47,50 @@ exports.oauthClientIdDiscoverableSchema = zod_1.z
54
47
  // URL constructor normalizes the URL, so we extract the path manually to
55
48
  // avoid normalization, then compare it to the normalized path to ensure
56
49
  // that the URL does not contain path traversal or other unexpected characters
57
- if ((0, util_js_1.extractUrlPath)(value) !== url.pathname) {
50
+ if (extractUrlPath(value) !== url.pathname) {
58
51
  ctx.addIssue({
59
- code: zod_1.z.ZodIssueCode.custom,
52
+ code: z.ZodIssueCode.custom,
60
53
  message: `ClientID must be in canonical form ("${url.href}", got "${value}")`,
61
54
  });
62
55
  return false;
63
56
  }
64
57
  return true;
65
58
  });
66
- function isOAuthClientIdDiscoverable(clientId) {
67
- return exports.oauthClientIdDiscoverableSchema.safeParse(clientId).success;
59
+ export function isOAuthClientIdDiscoverable(clientId) {
60
+ return oauthClientIdDiscoverableSchema.safeParse(clientId).success;
68
61
  }
69
- exports.conventionalOAuthClientIdSchema = exports.oauthClientIdDiscoverableSchema.superRefine((value, ctx) => {
62
+ export const conventionalOAuthClientIdSchema = oauthClientIdDiscoverableSchema.superRefine((value, ctx) => {
70
63
  const url = new URL(value);
71
64
  if (url.port) {
72
65
  ctx.addIssue({
73
- code: zod_1.z.ZodIssueCode.custom,
66
+ code: z.ZodIssueCode.custom,
74
67
  message: 'ClientID must not contain a port',
75
68
  });
76
69
  return false;
77
70
  }
78
71
  if (url.search) {
79
72
  ctx.addIssue({
80
- code: zod_1.z.ZodIssueCode.custom,
73
+ code: z.ZodIssueCode.custom,
81
74
  message: 'ClientID must not contain a query string',
82
75
  });
83
76
  return false;
84
77
  }
85
78
  if (url.pathname !== '/oauth-client-metadata.json') {
86
79
  ctx.addIssue({
87
- code: zod_1.z.ZodIssueCode.custom,
80
+ code: z.ZodIssueCode.custom,
88
81
  message: 'ClientID must be "/oauth-client-metadata.json"',
89
82
  });
90
83
  return false;
91
84
  }
92
85
  return true;
93
86
  });
94
- function isConventionalOAuthClientId(clientId) {
95
- return exports.conventionalOAuthClientIdSchema.safeParse(clientId).success;
87
+ export function isConventionalOAuthClientId(clientId) {
88
+ return conventionalOAuthClientIdSchema.safeParse(clientId).success;
96
89
  }
97
- function assertOAuthDiscoverableClientId(value) {
98
- void exports.oauthClientIdDiscoverableSchema.parse(value);
90
+ export function assertOAuthDiscoverableClientId(value) {
91
+ void oauthClientIdDiscoverableSchema.parse(value);
99
92
  }
100
- function parseOAuthDiscoverableClientId(clientId) {
101
- return new URL(exports.oauthClientIdDiscoverableSchema.parse(clientId));
93
+ export function parseOAuthDiscoverableClientId(clientId) {
94
+ return new URL(oauthClientIdDiscoverableSchema.parse(clientId));
102
95
  }
103
96
  //# sourceMappingURL=oauth-client-id-discoverable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-client-id-discoverable.js","sourceRoot":"","sources":["../src/oauth-client-id-discoverable.ts"],"names":[],"mappings":";;;AAwEA,kEAIC;AAuCD,kEAIC;AAED,0EAIC;AAED,wEAEC;AAjID,6BAA+B;AAC/B,6DAA0D;AAC1D,qCAAyC;AACzC,uCAAwD;AAExD;;GAEG;AACU,QAAA,+BAA+B,GAAG,OAAC;KAC7C,YAAY,CAAC,wCAAmB,EAAE,uBAAc,CAAC;KACjD,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAA0C,EAAE;IAClE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;IAE1B,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,uCAAuC;SACjD,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,sCAAsC;SAChD,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;QACzB,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EACL,uEAAuE;SAC1E,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,kDAAkD;SAC5D,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,IAAA,sBAAY,EAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,6CAA6C;SACvD,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,yEAAyE;IACzE,wEAAwE;IACxE,8EAA8E;IAC9E,IAAI,IAAA,wBAAc,EAAC,KAAK,CAAC,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3C,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,wCAAwC,GAAG,CAAC,IAAI,WAAW,KAAK,IAAI;SAC9E,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA;AAMJ,SAAgB,2BAA2B,CACzC,QAAgB;IAEhB,OAAO,uCAA+B,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAA;AACpE,CAAC;AAEY,QAAA,+BAA+B,GAC1C,uCAA+B,CAAC,WAAW,CACzC,CAAC,KAAK,EAAE,GAAG,EAA2D,EAAE;IACtE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;IAE1B,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,kCAAkC;SAC5C,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,0CAA0C;SACpD,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,6BAA6B,EAAE,CAAC;QACnD,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,gDAAgD;SAC1D,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CACF,CAAA;AAMH,SAAgB,2BAA2B,CACzC,QAAgB;IAEhB,OAAO,uCAA+B,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAA;AACpE,CAAC;AAED,SAAgB,+BAA+B,CAC7C,KAAa;IAEb,KAAK,uCAA+B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AACnD,CAAC;AAED,SAAgB,8BAA8B,CAAC,QAAgB;IAC7D,OAAO,IAAI,GAAG,CAAC,uCAA+B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;AACjE,CAAC","sourcesContent":["import { TypeOf, z } from 'zod'\nimport { oauthClientIdSchema } from './oauth-client-id.js'\nimport { httpsUriSchema } from './uri.js'\nimport { extractUrlPath, isHostnameIP } from './util.js'\n\n/**\n * @see {@link https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-00.html}\n */\nexport const oauthClientIdDiscoverableSchema = z\n .intersection(oauthClientIdSchema, httpsUriSchema)\n .superRefine((value, ctx): value is `https://${string}/${string}` => {\n const url = new URL(value)\n\n if (url.username || url.password) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID must not contain credentials',\n })\n return false\n }\n\n if (url.hash) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID must not contain a fragment',\n })\n return false\n }\n\n if (url.pathname === '/') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n 'ClientID must contain a path component (e.g. \"/client-metadata.json\")',\n })\n return false\n }\n\n if (url.pathname.endsWith('/')) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID path must not end with a trailing slash',\n })\n return false\n }\n\n if (isHostnameIP(url.hostname)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID hostname must not be an IP address',\n })\n return false\n }\n\n // URL constructor normalizes the URL, so we extract the path manually to\n // avoid normalization, then compare it to the normalized path to ensure\n // that the URL does not contain path traversal or other unexpected characters\n if (extractUrlPath(value) !== url.pathname) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `ClientID must be in canonical form (\"${url.href}\", got \"${value}\")`,\n })\n return false\n }\n\n return true\n })\n\nexport type OAuthClientIdDiscoverable = TypeOf<\n typeof oauthClientIdDiscoverableSchema\n>\n\nexport function isOAuthClientIdDiscoverable(\n clientId: string,\n): clientId is OAuthClientIdDiscoverable {\n return oauthClientIdDiscoverableSchema.safeParse(clientId).success\n}\n\nexport const conventionalOAuthClientIdSchema =\n oauthClientIdDiscoverableSchema.superRefine(\n (value, ctx): value is `https://${string}/oauth-client-metadata.json` => {\n const url = new URL(value)\n\n if (url.port) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID must not contain a port',\n })\n return false\n }\n\n if (url.search) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID must not contain a query string',\n })\n return false\n }\n\n if (url.pathname !== '/oauth-client-metadata.json') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID must be \"/oauth-client-metadata.json\"',\n })\n return false\n }\n\n return true\n },\n )\n\nexport type ConventionalOAuthClientId = TypeOf<\n typeof conventionalOAuthClientIdSchema\n>\n\nexport function isConventionalOAuthClientId(\n clientId: string,\n): clientId is ConventionalOAuthClientId {\n return conventionalOAuthClientIdSchema.safeParse(clientId).success\n}\n\nexport function assertOAuthDiscoverableClientId(\n value: string,\n): asserts value is OAuthClientIdDiscoverable {\n void oauthClientIdDiscoverableSchema.parse(value)\n}\n\nexport function parseOAuthDiscoverableClientId(clientId: string): URL {\n return new URL(oauthClientIdDiscoverableSchema.parse(clientId))\n}\n"]}
1
+ {"version":3,"file":"oauth-client-id-discoverable.js","sourceRoot":"","sources":["../src/oauth-client-id-discoverable.ts"],"names":[],"mappings":"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","sourcesContent":["import { TypeOf, z } from 'zod'\nimport { oauthClientIdSchema } from './oauth-client-id.js'\nimport { httpsUriSchema } from './uri.js'\nimport { extractUrlPath, isHostnameIP } from './util.js'\n\n/**\n * @see {@link https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-00.html}\n */\nexport const oauthClientIdDiscoverableSchema = z\n .intersection(oauthClientIdSchema, httpsUriSchema)\n .superRefine((value, ctx): value is `https://${string}/${string}` => {\n const url = new URL(value)\n\n if (url.username || url.password) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID must not contain credentials',\n })\n return false\n }\n\n if (url.hash) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID must not contain a fragment',\n })\n return false\n }\n\n if (url.pathname === '/') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n 'ClientID must contain a path component (e.g. \"/client-metadata.json\")',\n })\n return false\n }\n\n if (url.pathname.endsWith('/')) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID path must not end with a trailing slash',\n })\n return false\n }\n\n if (isHostnameIP(url.hostname)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID hostname must not be an IP address',\n })\n return false\n }\n\n // URL constructor normalizes the URL, so we extract the path manually to\n // avoid normalization, then compare it to the normalized path to ensure\n // that the URL does not contain path traversal or other unexpected characters\n if (extractUrlPath(value) !== url.pathname) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `ClientID must be in canonical form (\"${url.href}\", got \"${value}\")`,\n })\n return false\n }\n\n return true\n })\n\nexport type OAuthClientIdDiscoverable = TypeOf<\n typeof oauthClientIdDiscoverableSchema\n>\n\nexport function isOAuthClientIdDiscoverable(\n clientId: string,\n): clientId is OAuthClientIdDiscoverable {\n return oauthClientIdDiscoverableSchema.safeParse(clientId).success\n}\n\nexport const conventionalOAuthClientIdSchema =\n oauthClientIdDiscoverableSchema.superRefine(\n (value, ctx): value is `https://${string}/oauth-client-metadata.json` => {\n const url = new URL(value)\n\n if (url.port) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID must not contain a port',\n })\n return false\n }\n\n if (url.search) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID must not contain a query string',\n })\n return false\n }\n\n if (url.pathname !== '/oauth-client-metadata.json') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'ClientID must be \"/oauth-client-metadata.json\"',\n })\n return false\n }\n\n return true\n },\n )\n\nexport type ConventionalOAuthClientId = TypeOf<\n typeof conventionalOAuthClientIdSchema\n>\n\nexport function isConventionalOAuthClientId(\n clientId: string,\n): clientId is ConventionalOAuthClientId {\n return conventionalOAuthClientIdSchema.safeParse(clientId).success\n}\n\nexport function assertOAuthDiscoverableClientId(\n value: string,\n): asserts value is OAuthClientIdDiscoverable {\n void oauthClientIdDiscoverableSchema.parse(value)\n}\n\nexport function parseOAuthDiscoverableClientId(clientId: string): URL {\n return new URL(oauthClientIdDiscoverableSchema.parse(clientId))\n}\n"]}
@@ -1,49 +1,40 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.oauthClientIdLoopbackSchema = exports.LOOPBACK_CLIENT_ID_ORIGIN = void 0;
4
- exports.assertOAuthLoopbackClientId = assertOAuthLoopbackClientId;
5
- exports.isOAuthClientIdLoopback = isOAuthClientIdLoopback;
6
- exports.asOAuthClientIdLoopback = asOAuthClientIdLoopback;
7
- exports.parseOAuthLoopbackClientId = parseOAuthLoopbackClientId;
8
- exports.safeParseOAuthLoopbackClientId = safeParseOAuthLoopbackClientId;
9
- exports.safeParseOAuthLoopbackClientIdQueryString = safeParseOAuthLoopbackClientIdQueryString;
10
- const oauth_client_id_js_1 = require("./oauth-client-id.js");
11
- const oauth_redirect_uri_js_1 = require("./oauth-redirect-uri.js");
12
- const oauth_scope_js_1 = require("./oauth-scope.js");
13
- exports.LOOPBACK_CLIENT_ID_ORIGIN = 'http://localhost';
14
- exports.oauthClientIdLoopbackSchema = oauth_client_id_js_1.oauthClientIdSchema.superRefine((input, ctx) => {
1
+ import { oauthClientIdSchema } from './oauth-client-id.js';
2
+ import { oauthLoopbackClientRedirectUriSchema, } from './oauth-redirect-uri.js';
3
+ import { oauthScopeSchema } from './oauth-scope.js';
4
+ export const LOOPBACK_CLIENT_ID_ORIGIN = 'http://localhost';
5
+ export const oauthClientIdLoopbackSchema = oauthClientIdSchema.superRefine((input, ctx) => {
15
6
  const result = safeParseOAuthLoopbackClientId(input);
16
7
  if (!result.success) {
17
8
  ctx.addIssue({ code: 'custom', message: result.message });
18
9
  }
19
10
  return result.success;
20
11
  });
21
- function assertOAuthLoopbackClientId(input) {
12
+ export function assertOAuthLoopbackClientId(input) {
22
13
  void parseOAuthLoopbackClientId(input);
23
14
  }
24
- function isOAuthClientIdLoopback(input) {
15
+ export function isOAuthClientIdLoopback(input) {
25
16
  return safeParseOAuthLoopbackClientId(input).success;
26
17
  }
27
- function asOAuthClientIdLoopback(input) {
18
+ export function asOAuthClientIdLoopback(input) {
28
19
  assertOAuthLoopbackClientId(input);
29
20
  return input;
30
21
  }
31
- function parseOAuthLoopbackClientId(input) {
22
+ export function parseOAuthLoopbackClientId(input) {
32
23
  const result = safeParseOAuthLoopbackClientId(input);
33
24
  if (result.success)
34
25
  return result.value;
35
26
  throw new TypeError(`Invalid loopback client ID: ${result.message}`);
36
27
  }
37
- function safeParseOAuthLoopbackClientId(input) {
28
+ export function safeParseOAuthLoopbackClientId(input) {
38
29
  // @NOTE Not using "new URL" to ensure input indeed matches the type
39
30
  // OAuthClientIdLoopback
40
- if (!input.startsWith(exports.LOOPBACK_CLIENT_ID_ORIGIN)) {
31
+ if (!input.startsWith(LOOPBACK_CLIENT_ID_ORIGIN)) {
41
32
  return {
42
33
  success: false,
43
- message: `Value must start with "${exports.LOOPBACK_CLIENT_ID_ORIGIN}"`,
34
+ message: `Value must start with "${LOOPBACK_CLIENT_ID_ORIGIN}"`,
44
35
  };
45
36
  }
46
- if (input.includes('#', exports.LOOPBACK_CLIENT_ID_ORIGIN.length)) {
37
+ if (input.includes('#', LOOPBACK_CLIENT_ID_ORIGIN.length)) {
47
38
  return {
48
39
  success: false,
49
40
  message: 'Value must not contain a hash component',
@@ -51,10 +42,10 @@ function safeParseOAuthLoopbackClientId(input) {
51
42
  }
52
43
  // Since we don't allow a path component (except for a single "/") the query
53
44
  // string starts after the origin (+ 1 if there is a "/")
54
- const queryStringIdx = input.length > exports.LOOPBACK_CLIENT_ID_ORIGIN.length &&
55
- input.charCodeAt(exports.LOOPBACK_CLIENT_ID_ORIGIN.length) === 0x2f /* '/' */
56
- ? exports.LOOPBACK_CLIENT_ID_ORIGIN.length + 1
57
- : exports.LOOPBACK_CLIENT_ID_ORIGIN.length;
45
+ const queryStringIdx = input.length > LOOPBACK_CLIENT_ID_ORIGIN.length &&
46
+ input.charCodeAt(LOOPBACK_CLIENT_ID_ORIGIN.length) === 0x2f /* '/' */
47
+ ? LOOPBACK_CLIENT_ID_ORIGIN.length + 1
48
+ : LOOPBACK_CLIENT_ID_ORIGIN.length;
58
49
  // Since we determined the position of the query string based on the origin
59
50
  // length (instead of looking for a "?"), we need to make sure the query
60
51
  // string position (if any) indeed starts with a "?".
@@ -68,7 +59,7 @@ function safeParseOAuthLoopbackClientId(input) {
68
59
  const queryString = input.slice(queryStringIdx + 1);
69
60
  return safeParseOAuthLoopbackClientIdQueryString(queryString);
70
61
  }
71
- function safeParseOAuthLoopbackClientIdQueryString(input) {
62
+ export function safeParseOAuthLoopbackClientIdQueryString(input) {
72
63
  // Parse query params
73
64
  const params = {};
74
65
  const it = typeof input === 'string' ? new URLSearchParams(input) : input;
@@ -80,7 +71,7 @@ function safeParseOAuthLoopbackClientIdQueryString(input) {
80
71
  message: 'Duplicate "scope" query parameter',
81
72
  };
82
73
  }
83
- const res = oauth_scope_js_1.oauthScopeSchema.safeParse(value);
74
+ const res = oauthScopeSchema.safeParse(value);
84
75
  if (!res.success) {
85
76
  const reason = res.error.issues.map((i) => i.message).join(', ');
86
77
  return {
@@ -91,7 +82,7 @@ function safeParseOAuthLoopbackClientIdQueryString(input) {
91
82
  params.scope = res.data;
92
83
  }
93
84
  else if (key === 'redirect_uri') {
94
- const res = oauth_redirect_uri_js_1.oauthLoopbackClientRedirectUriSchema.safeParse(value);
85
+ const res = oauthLoopbackClientRedirectUriSchema.safeParse(value);
95
86
  if (!res.success) {
96
87
  const reason = res.error.issues.map((i) => i.message).join(', ');
97
88
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-client-id-loopback.js","sourceRoot":"","sources":["../src/oauth-client-id-loopback.ts"],"names":[],"mappings":"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","sourcesContent":["import { oauthClientIdSchema } from './oauth-client-id.js'\nimport {\n OAuthLoopbackRedirectURI,\n oauthLoopbackClientRedirectUriSchema,\n} from './oauth-redirect-uri.js'\nimport { OAuthScope, oauthScopeSchema } from './oauth-scope.js'\n\nexport const LOOPBACK_CLIENT_ID_ORIGIN = 'http://localhost'\n\n// @NOTE This is not actually based on a standard, but rather a convention\n// established by Bluesky in the Atproto specs and implementation. As such, and\n// in order to respect the convention from this package, these should be\n// prefixed with \"Atproto\" instead of \"OAuth\". For legacy reasons, we keep the\n// current names, but we should rename them in a future major release, unless\n// loopback client ids have since then been standardized.\n\nexport type OAuthClientIdLoopback =\n `http://localhost${'' | `/`}${'' | `?${string}`}`\n\nexport type OAuthLoopbackClientIdParams = {\n scope?: OAuthScope\n redirect_uris?: [OAuthLoopbackRedirectURI, ...OAuthLoopbackRedirectURI[]]\n}\n\nexport const oauthClientIdLoopbackSchema = oauthClientIdSchema.superRefine(\n (input, ctx): input is OAuthClientIdLoopback => {\n const result = safeParseOAuthLoopbackClientId(input)\n if (!result.success) {\n ctx.addIssue({ code: 'custom', message: result.message })\n }\n return result.success\n },\n)\n\nexport function assertOAuthLoopbackClientId(\n input: string,\n): asserts input is OAuthClientIdLoopback {\n void parseOAuthLoopbackClientId(input)\n}\n\nexport function isOAuthClientIdLoopback<T extends string>(\n input: T,\n): input is T & OAuthClientIdLoopback {\n return safeParseOAuthLoopbackClientId(input).success\n}\n\nexport function asOAuthClientIdLoopback<T extends string>(input: T) {\n assertOAuthLoopbackClientId(input)\n return input\n}\n\nexport function parseOAuthLoopbackClientId(\n input: string,\n): OAuthLoopbackClientIdParams {\n const result = safeParseOAuthLoopbackClientId(input)\n if (result.success) return result.value\n\n throw new TypeError(`Invalid loopback client ID: ${result.message}`)\n}\n\n/**\n * Similar to Zod's {@link SafeParseReturnType} but uses a simple \"message\"\n * string instead of an \"error\" Error object.\n */\ntype LightParseReturnType<T> =\n | { success: true; value: T }\n | { success: false; message: string }\n\nexport function safeParseOAuthLoopbackClientId(\n input: string,\n): LightParseReturnType<OAuthLoopbackClientIdParams> {\n // @NOTE Not using \"new URL\" to ensure input indeed matches the type\n // OAuthClientIdLoopback\n\n if (!input.startsWith(LOOPBACK_CLIENT_ID_ORIGIN)) {\n return {\n success: false,\n message: `Value must start with \"${LOOPBACK_CLIENT_ID_ORIGIN}\"`,\n }\n }\n\n if (input.includes('#', LOOPBACK_CLIENT_ID_ORIGIN.length)) {\n return {\n success: false,\n message: 'Value must not contain a hash component',\n }\n }\n\n // Since we don't allow a path component (except for a single \"/\") the query\n // string starts after the origin (+ 1 if there is a \"/\")\n const queryStringIdx =\n input.length > LOOPBACK_CLIENT_ID_ORIGIN.length &&\n input.charCodeAt(LOOPBACK_CLIENT_ID_ORIGIN.length) === 0x2f /* '/' */\n ? LOOPBACK_CLIENT_ID_ORIGIN.length + 1\n : LOOPBACK_CLIENT_ID_ORIGIN.length\n\n // Since we determined the position of the query string based on the origin\n // length (instead of looking for a \"?\"), we need to make sure the query\n // string position (if any) indeed starts with a \"?\".\n if (\n input.length !== queryStringIdx &&\n input.charCodeAt(queryStringIdx) !== 0x3f /* '?' */\n ) {\n return {\n success: false,\n message: 'Value must not contain a path component',\n }\n }\n\n const queryString = input.slice(queryStringIdx + 1)\n return safeParseOAuthLoopbackClientIdQueryString(queryString)\n}\n\nexport function safeParseOAuthLoopbackClientIdQueryString(\n input: string | Iterable<[key: string, value: string]>,\n): LightParseReturnType<OAuthLoopbackClientIdParams> {\n // Parse query params\n const params: OAuthLoopbackClientIdParams = {}\n\n const it = typeof input === 'string' ? new URLSearchParams(input) : input\n for (const [key, value] of it) {\n if (key === 'scope') {\n if ('scope' in params) {\n return {\n success: false,\n message: 'Duplicate \"scope\" query parameter',\n }\n }\n\n const res = oauthScopeSchema.safeParse(value)\n if (!res.success) {\n const reason = res.error.issues.map((i) => i.message).join(', ')\n return {\n success: false,\n message: `Invalid \"scope\" query parameter: ${reason || 'Validation failed'}`,\n }\n }\n\n params.scope = res.data\n } else if (key === 'redirect_uri') {\n const res = oauthLoopbackClientRedirectUriSchema.safeParse(value)\n if (!res.success) {\n const reason = res.error.issues.map((i) => i.message).join(', ')\n return {\n success: false,\n message: `Invalid \"redirect_uri\" query parameter: ${reason || 'Validation failed'}`,\n }\n }\n\n if (params.redirect_uris == null) params.redirect_uris = [res.data]\n else params.redirect_uris.push(res.data)\n } else {\n return {\n success: false,\n message: `Unexpected query parameter \"${key}\"`,\n }\n }\n }\n\n return {\n success: true,\n value: params,\n }\n}\n"]}
1
+ {"version":3,"file":"oauth-client-id-loopback.js","sourceRoot":"","sources":["../src/oauth-client-id-loopback.ts"],"names":[],"mappings":"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","sourcesContent":["import { oauthClientIdSchema } from './oauth-client-id.js'\nimport {\n OAuthLoopbackRedirectURI,\n oauthLoopbackClientRedirectUriSchema,\n} from './oauth-redirect-uri.js'\nimport { OAuthScope, oauthScopeSchema } from './oauth-scope.js'\n\nexport const LOOPBACK_CLIENT_ID_ORIGIN = 'http://localhost'\n\n// @NOTE This is not actually based on a standard, but rather a convention\n// established by Bluesky in the Atproto specs and implementation. As such, and\n// in order to respect the convention from this package, these should be\n// prefixed with \"Atproto\" instead of \"OAuth\". For legacy reasons, we keep the\n// current names, but we should rename them in a future major release, unless\n// loopback client ids have since then been standardized.\n\nexport type OAuthClientIdLoopback =\n `http://localhost${'' | `/`}${'' | `?${string}`}`\n\nexport type OAuthLoopbackClientIdParams = {\n scope?: OAuthScope\n redirect_uris?: [OAuthLoopbackRedirectURI, ...OAuthLoopbackRedirectURI[]]\n}\n\nexport const oauthClientIdLoopbackSchema = oauthClientIdSchema.superRefine(\n (input, ctx): input is OAuthClientIdLoopback => {\n const result = safeParseOAuthLoopbackClientId(input)\n if (!result.success) {\n ctx.addIssue({ code: 'custom', message: result.message })\n }\n return result.success\n },\n)\n\nexport function assertOAuthLoopbackClientId(\n input: string,\n): asserts input is OAuthClientIdLoopback {\n void parseOAuthLoopbackClientId(input)\n}\n\nexport function isOAuthClientIdLoopback<T extends string>(\n input: T,\n): input is T & OAuthClientIdLoopback {\n return safeParseOAuthLoopbackClientId(input).success\n}\n\nexport function asOAuthClientIdLoopback<T extends string>(input: T) {\n assertOAuthLoopbackClientId(input)\n return input\n}\n\nexport function parseOAuthLoopbackClientId(\n input: string,\n): OAuthLoopbackClientIdParams {\n const result = safeParseOAuthLoopbackClientId(input)\n if (result.success) return result.value\n\n throw new TypeError(`Invalid loopback client ID: ${result.message}`)\n}\n\n/**\n * Similar to Zod's {@link SafeParseReturnType} but uses a simple \"message\"\n * string instead of an \"error\" Error object.\n */\ntype LightParseReturnType<T> =\n | { success: true; value: T }\n | { success: false; message: string }\n\nexport function safeParseOAuthLoopbackClientId(\n input: string,\n): LightParseReturnType<OAuthLoopbackClientIdParams> {\n // @NOTE Not using \"new URL\" to ensure input indeed matches the type\n // OAuthClientIdLoopback\n\n if (!input.startsWith(LOOPBACK_CLIENT_ID_ORIGIN)) {\n return {\n success: false,\n message: `Value must start with \"${LOOPBACK_CLIENT_ID_ORIGIN}\"`,\n }\n }\n\n if (input.includes('#', LOOPBACK_CLIENT_ID_ORIGIN.length)) {\n return {\n success: false,\n message: 'Value must not contain a hash component',\n }\n }\n\n // Since we don't allow a path component (except for a single \"/\") the query\n // string starts after the origin (+ 1 if there is a \"/\")\n const queryStringIdx =\n input.length > LOOPBACK_CLIENT_ID_ORIGIN.length &&\n input.charCodeAt(LOOPBACK_CLIENT_ID_ORIGIN.length) === 0x2f /* '/' */\n ? LOOPBACK_CLIENT_ID_ORIGIN.length + 1\n : LOOPBACK_CLIENT_ID_ORIGIN.length\n\n // Since we determined the position of the query string based on the origin\n // length (instead of looking for a \"?\"), we need to make sure the query\n // string position (if any) indeed starts with a \"?\".\n if (\n input.length !== queryStringIdx &&\n input.charCodeAt(queryStringIdx) !== 0x3f /* '?' */\n ) {\n return {\n success: false,\n message: 'Value must not contain a path component',\n }\n }\n\n const queryString = input.slice(queryStringIdx + 1)\n return safeParseOAuthLoopbackClientIdQueryString(queryString)\n}\n\nexport function safeParseOAuthLoopbackClientIdQueryString(\n input: string | Iterable<[key: string, value: string]>,\n): LightParseReturnType<OAuthLoopbackClientIdParams> {\n // Parse query params\n const params: OAuthLoopbackClientIdParams = {}\n\n const it = typeof input === 'string' ? new URLSearchParams(input) : input\n for (const [key, value] of it) {\n if (key === 'scope') {\n if ('scope' in params) {\n return {\n success: false,\n message: 'Duplicate \"scope\" query parameter',\n }\n }\n\n const res = oauthScopeSchema.safeParse(value)\n if (!res.success) {\n const reason = res.error.issues.map((i) => i.message).join(', ')\n return {\n success: false,\n message: `Invalid \"scope\" query parameter: ${reason || 'Validation failed'}`,\n }\n }\n\n params.scope = res.data\n } else if (key === 'redirect_uri') {\n const res = oauthLoopbackClientRedirectUriSchema.safeParse(value)\n if (!res.success) {\n const reason = res.error.issues.map((i) => i.message).join(', ')\n return {\n success: false,\n message: `Invalid \"redirect_uri\" query parameter: ${reason || 'Validation failed'}`,\n }\n }\n\n if (params.redirect_uris == null) params.redirect_uris = [res.data]\n else params.redirect_uris.push(res.data)\n } else {\n return {\n success: false,\n message: `Unexpected query parameter \"${key}\"`,\n }\n }\n }\n\n return {\n success: true,\n value: params,\n }\n}\n"]}
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.oauthClientIdSchema = void 0;
4
- const zod_1 = require("zod");
5
- exports.oauthClientIdSchema = zod_1.z.string().min(1);
1
+ import { z } from 'zod';
2
+ export const oauthClientIdSchema = z.string().min(1);
6
3
  //# sourceMappingURL=oauth-client-id.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-client-id.js","sourceRoot":"","sources":["../src/oauth-client-id.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA","sourcesContent":["import { z } from 'zod'\n\nexport const oauthClientIdSchema = z.string().min(1)\nexport type OAuthClientId = z.infer<typeof oauthClientIdSchema>\n"]}
1
+ {"version":3,"file":"oauth-client-id.js","sourceRoot":"","sources":["../src/oauth-client-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA","sourcesContent":["import { z } from 'zod'\n\nexport const oauthClientIdSchema = z.string().min(1)\nexport type OAuthClientId = z.infer<typeof oauthClientIdSchema>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-client-metadata.d.ts","sourceRoot":"","sources":["../src/oauth-client-metadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-client-metadata.d.ts","sourceRoot":"","sources":["../src/oauth-client-metadata.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,12 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.oauthClientMetadataSchema = void 0;
4
- const zod_1 = require("zod");
5
- const jwk_1 = require("@atproto/jwk");
6
- const oauth_client_id_js_1 = require("./oauth-client-id.js");
7
- const oauth_endpoint_auth_method_js_1 = require("./oauth-endpoint-auth-method.js");
8
- const oauth_grant_type_js_1 = require("./oauth-grant-type.js");
9
- const oauth_redirect_uri_js_1 = require("./oauth-redirect-uri.js");
10
- const oauth_response_type_js_1 = require("./oauth-response-type.js");
11
- const oauth_scope_js_1 = require("./oauth-scope.js");
12
- const uri_js_1 = require("./uri.js");
1
+ import { z } from 'zod';
2
+ import { jwksPubSchema } from '@atproto/jwk';
3
+ import { oauthClientIdSchema } from './oauth-client-id.js';
4
+ import { oauthEndpointAuthMethod } from './oauth-endpoint-auth-method.js';
5
+ import { oauthGrantTypeSchema } from './oauth-grant-type.js';
6
+ import { oauthRedirectUriSchema } from './oauth-redirect-uri.js';
7
+ import { oauthResponseTypeSchema } from './oauth-response-type.js';
8
+ import { oauthScopeSchema } from './oauth-scope.js';
9
+ import { webUriSchema } from './uri.js';
13
10
  /**
14
11
  * @see {@link https://openid.net/specs/openid-connect-registration-1_0.html}
15
12
  * @see {@link https://datatracker.ietf.org/doc/html/rfc7591}
@@ -17,47 +14,47 @@ const uri_js_1 = require("./uri.js");
17
14
  * environments. Make sure to validate the URIs before using it in a production
18
15
  * environment.
19
16
  */
20
- exports.oauthClientMetadataSchema = zod_1.z.object({
17
+ export const oauthClientMetadataSchema = z.object({
21
18
  /**
22
19
  * @note redirect_uris require additional validation
23
20
  */
24
21
  // https://www.rfc-editor.org/rfc/rfc7591.html#section-2
25
- redirect_uris: zod_1.z.array(oauth_redirect_uri_js_1.oauthRedirectUriSchema).nonempty(),
26
- response_types: zod_1.z
27
- .array(oauth_response_type_js_1.oauthResponseTypeSchema)
22
+ redirect_uris: z.array(oauthRedirectUriSchema).nonempty(),
23
+ response_types: z
24
+ .array(oauthResponseTypeSchema)
28
25
  .nonempty()
29
26
  // > If omitted, the default is that the client will use only the "code"
30
27
  // > response type.
31
28
  .default(['code']),
32
- grant_types: zod_1.z
33
- .array(oauth_grant_type_js_1.oauthGrantTypeSchema)
29
+ grant_types: z
30
+ .array(oauthGrantTypeSchema)
34
31
  .nonempty()
35
32
  // > If omitted, the default behavior is that the client will use only the
36
33
  // > "authorization_code" Grant Type.
37
34
  .default(['authorization_code']),
38
- scope: oauth_scope_js_1.oauthScopeSchema.optional(),
35
+ scope: oauthScopeSchema.optional(),
39
36
  // https://www.rfc-editor.org/rfc/rfc7591.html#section-2
40
- token_endpoint_auth_method: oauth_endpoint_auth_method_js_1.oauthEndpointAuthMethod
37
+ token_endpoint_auth_method: oauthEndpointAuthMethod
41
38
  // > If unspecified or omitted, the default is "client_secret_basic" [...].
42
39
  .default('client_secret_basic'),
43
- token_endpoint_auth_signing_alg: zod_1.z.string().optional(),
44
- userinfo_signed_response_alg: zod_1.z.string().optional(),
45
- userinfo_encrypted_response_alg: zod_1.z.string().optional(),
46
- jwks_uri: uri_js_1.webUriSchema.optional(),
47
- jwks: jwk_1.jwksPubSchema.optional(),
48
- application_type: zod_1.z.enum(['web', 'native']).default('web'), // default, per spec, is "web"
49
- subject_type: zod_1.z.enum(['public', 'pairwise']).default('public'),
50
- request_object_signing_alg: zod_1.z.string().optional(),
51
- id_token_signed_response_alg: zod_1.z.string().optional(),
52
- authorization_signed_response_alg: zod_1.z.string().default('RS256'),
53
- authorization_encrypted_response_enc: zod_1.z.enum(['A128CBC-HS256']).optional(),
54
- authorization_encrypted_response_alg: zod_1.z.string().optional(),
55
- client_id: oauth_client_id_js_1.oauthClientIdSchema.optional(),
56
- client_name: zod_1.z.string().optional(),
57
- client_uri: uri_js_1.webUriSchema.optional(),
58
- policy_uri: uri_js_1.webUriSchema.optional(),
59
- tos_uri: uri_js_1.webUriSchema.optional(),
60
- logo_uri: uri_js_1.webUriSchema.optional(), // @TODO: allow data: uri ?
40
+ token_endpoint_auth_signing_alg: z.string().optional(),
41
+ userinfo_signed_response_alg: z.string().optional(),
42
+ userinfo_encrypted_response_alg: z.string().optional(),
43
+ jwks_uri: webUriSchema.optional(),
44
+ jwks: jwksPubSchema.optional(),
45
+ application_type: z.enum(['web', 'native']).default('web'), // default, per spec, is "web"
46
+ subject_type: z.enum(['public', 'pairwise']).default('public'),
47
+ request_object_signing_alg: z.string().optional(),
48
+ id_token_signed_response_alg: z.string().optional(),
49
+ authorization_signed_response_alg: z.string().default('RS256'),
50
+ authorization_encrypted_response_enc: z.enum(['A128CBC-HS256']).optional(),
51
+ authorization_encrypted_response_alg: z.string().optional(),
52
+ client_id: oauthClientIdSchema.optional(),
53
+ client_name: z.string().optional(),
54
+ client_uri: webUriSchema.optional(),
55
+ policy_uri: webUriSchema.optional(),
56
+ tos_uri: webUriSchema.optional(),
57
+ logo_uri: webUriSchema.optional(), // @TODO: allow data: uri ?
61
58
  /**
62
59
  * Default Maximum Authentication Age. Specifies that the End-User MUST be
63
60
  * actively authenticated if the End-User was authenticated longer ago than
@@ -65,13 +62,13 @@ exports.oauthClientMetadataSchema = zod_1.z.object({
65
62
  * this default value. If omitted, no default Maximum Authentication Age is
66
63
  * specified.
67
64
  */
68
- default_max_age: zod_1.z.number().optional(),
69
- require_auth_time: zod_1.z.boolean().optional(),
70
- contacts: zod_1.z.array(zod_1.z.string().email()).optional(),
71
- tls_client_certificate_bound_access_tokens: zod_1.z.boolean().optional(),
65
+ default_max_age: z.number().optional(),
66
+ require_auth_time: z.boolean().optional(),
67
+ contacts: z.array(z.string().email()).optional(),
68
+ tls_client_certificate_bound_access_tokens: z.boolean().optional(),
72
69
  // https://datatracker.ietf.org/doc/html/rfc9449#section-5.2
73
- dpop_bound_access_tokens: zod_1.z.boolean().optional(),
70
+ dpop_bound_access_tokens: z.boolean().optional(),
74
71
  // https://datatracker.ietf.org/doc/html/rfc9396#section-14.5
75
- authorization_details_types: zod_1.z.array(zod_1.z.string()).optional(),
72
+ authorization_details_types: z.array(z.string()).optional(),
76
73
  });
77
74
  //# sourceMappingURL=oauth-client-metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-client-metadata.js","sourceRoot":"","sources":["../src/oauth-client-metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { jwksPubSchema } from '@atproto/jwk'\nimport { oauthClientIdSchema } from './oauth-client-id.js'\nimport { oauthEndpointAuthMethod } from './oauth-endpoint-auth-method.js'\nimport { oauthGrantTypeSchema } from './oauth-grant-type.js'\nimport { oauthRedirectUriSchema } from './oauth-redirect-uri.js'\nimport { oauthResponseTypeSchema } from './oauth-response-type.js'\nimport { oauthScopeSchema } from './oauth-scope.js'\nimport { webUriSchema } from './uri.js'\n\n/**\n * @see {@link https://openid.net/specs/openid-connect-registration-1_0.html}\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7591}\n * @note we do not enforce https: scheme in URIs to support development\n * environments. Make sure to validate the URIs before using it in a production\n * environment.\n */\nexport const oauthClientMetadataSchema = z.object({\n /**\n * @note redirect_uris require additional validation\n */\n // https://www.rfc-editor.org/rfc/rfc7591.html#section-2\n redirect_uris: z.array(oauthRedirectUriSchema).nonempty(),\n response_types: z\n .array(oauthResponseTypeSchema)\n .nonempty()\n // > If omitted, the default is that the client will use only the \"code\"\n // > response type.\n .default(['code']),\n grant_types: z\n .array(oauthGrantTypeSchema)\n .nonempty()\n // > If omitted, the default behavior is that the client will use only the\n // > \"authorization_code\" Grant Type.\n .default(['authorization_code']),\n scope: oauthScopeSchema.optional(),\n // https://www.rfc-editor.org/rfc/rfc7591.html#section-2\n token_endpoint_auth_method: oauthEndpointAuthMethod\n // > If unspecified or omitted, the default is \"client_secret_basic\" [...].\n .default('client_secret_basic'),\n token_endpoint_auth_signing_alg: z.string().optional(),\n userinfo_signed_response_alg: z.string().optional(),\n userinfo_encrypted_response_alg: z.string().optional(),\n jwks_uri: webUriSchema.optional(),\n jwks: jwksPubSchema.optional(),\n application_type: z.enum(['web', 'native']).default('web'), // default, per spec, is \"web\"\n subject_type: z.enum(['public', 'pairwise']).default('public'),\n request_object_signing_alg: z.string().optional(),\n id_token_signed_response_alg: z.string().optional(),\n authorization_signed_response_alg: z.string().default('RS256'),\n authorization_encrypted_response_enc: z.enum(['A128CBC-HS256']).optional(),\n authorization_encrypted_response_alg: z.string().optional(),\n client_id: oauthClientIdSchema.optional(),\n client_name: z.string().optional(),\n client_uri: webUriSchema.optional(),\n policy_uri: webUriSchema.optional(),\n tos_uri: webUriSchema.optional(),\n logo_uri: webUriSchema.optional(), // @TODO: allow data: uri ?\n\n /**\n * Default Maximum Authentication Age. Specifies that the End-User MUST be\n * actively authenticated if the End-User was authenticated longer ago than\n * the specified number of seconds. The max_age request parameter overrides\n * this default value. If omitted, no default Maximum Authentication Age is\n * specified.\n */\n default_max_age: z.number().optional(),\n require_auth_time: z.boolean().optional(),\n contacts: z.array(z.string().email()).optional(),\n tls_client_certificate_bound_access_tokens: z.boolean().optional(),\n\n // https://datatracker.ietf.org/doc/html/rfc9449#section-5.2\n dpop_bound_access_tokens: z.boolean().optional(),\n\n // https://datatracker.ietf.org/doc/html/rfc9396#section-14.5\n authorization_details_types: z.array(z.string()).optional(),\n})\n\nexport type OAuthClientMetadata = z.infer<typeof oauthClientMetadataSchema>\nexport type OAuthClientMetadataInput = z.input<typeof oauthClientMetadataSchema>\n"]}
1
+ {"version":3,"file":"oauth-client-metadata.js","sourceRoot":"","sources":["../src/oauth-client-metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { jwksPubSchema } from '@atproto/jwk'\nimport { oauthClientIdSchema } from './oauth-client-id.js'\nimport { oauthEndpointAuthMethod } from './oauth-endpoint-auth-method.js'\nimport { oauthGrantTypeSchema } from './oauth-grant-type.js'\nimport { oauthRedirectUriSchema } from './oauth-redirect-uri.js'\nimport { oauthResponseTypeSchema } from './oauth-response-type.js'\nimport { oauthScopeSchema } from './oauth-scope.js'\nimport { webUriSchema } from './uri.js'\n\n/**\n * @see {@link https://openid.net/specs/openid-connect-registration-1_0.html}\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7591}\n * @note we do not enforce https: scheme in URIs to support development\n * environments. Make sure to validate the URIs before using it in a production\n * environment.\n */\nexport const oauthClientMetadataSchema = z.object({\n /**\n * @note redirect_uris require additional validation\n */\n // https://www.rfc-editor.org/rfc/rfc7591.html#section-2\n redirect_uris: z.array(oauthRedirectUriSchema).nonempty(),\n response_types: z\n .array(oauthResponseTypeSchema)\n .nonempty()\n // > If omitted, the default is that the client will use only the \"code\"\n // > response type.\n .default(['code']),\n grant_types: z\n .array(oauthGrantTypeSchema)\n .nonempty()\n // > If omitted, the default behavior is that the client will use only the\n // > \"authorization_code\" Grant Type.\n .default(['authorization_code']),\n scope: oauthScopeSchema.optional(),\n // https://www.rfc-editor.org/rfc/rfc7591.html#section-2\n token_endpoint_auth_method: oauthEndpointAuthMethod\n // > If unspecified or omitted, the default is \"client_secret_basic\" [...].\n .default('client_secret_basic'),\n token_endpoint_auth_signing_alg: z.string().optional(),\n userinfo_signed_response_alg: z.string().optional(),\n userinfo_encrypted_response_alg: z.string().optional(),\n jwks_uri: webUriSchema.optional(),\n jwks: jwksPubSchema.optional(),\n application_type: z.enum(['web', 'native']).default('web'), // default, per spec, is \"web\"\n subject_type: z.enum(['public', 'pairwise']).default('public'),\n request_object_signing_alg: z.string().optional(),\n id_token_signed_response_alg: z.string().optional(),\n authorization_signed_response_alg: z.string().default('RS256'),\n authorization_encrypted_response_enc: z.enum(['A128CBC-HS256']).optional(),\n authorization_encrypted_response_alg: z.string().optional(),\n client_id: oauthClientIdSchema.optional(),\n client_name: z.string().optional(),\n client_uri: webUriSchema.optional(),\n policy_uri: webUriSchema.optional(),\n tos_uri: webUriSchema.optional(),\n logo_uri: webUriSchema.optional(), // @TODO: allow data: uri ?\n\n /**\n * Default Maximum Authentication Age. Specifies that the End-User MUST be\n * actively authenticated if the End-User was authenticated longer ago than\n * the specified number of seconds. The max_age request parameter overrides\n * this default value. If omitted, no default Maximum Authentication Age is\n * specified.\n */\n default_max_age: z.number().optional(),\n require_auth_time: z.boolean().optional(),\n contacts: z.array(z.string().email()).optional(),\n tls_client_certificate_bound_access_tokens: z.boolean().optional(),\n\n // https://datatracker.ietf.org/doc/html/rfc9449#section-5.2\n dpop_bound_access_tokens: z.boolean().optional(),\n\n // https://datatracker.ietf.org/doc/html/rfc9396#section-14.5\n authorization_details_types: z.array(z.string()).optional(),\n})\n\nexport type OAuthClientMetadata = z.infer<typeof oauthClientMetadataSchema>\nexport type OAuthClientMetadataInput = z.input<typeof oauthClientMetadataSchema>\n"]}
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.oauthCodeChallengeMethodSchema = void 0;
4
- const zod_1 = require("zod");
5
- exports.oauthCodeChallengeMethodSchema = zod_1.z.enum(['S256', 'plain']);
1
+ import { z } from 'zod';
2
+ export const oauthCodeChallengeMethodSchema = z.enum(['S256', 'plain']);
6
3
  //# sourceMappingURL=oauth-code-challenge-method.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-code-challenge-method.js","sourceRoot":"","sources":["../src/oauth-code-challenge-method.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,8BAA8B,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA","sourcesContent":["import { z } from 'zod'\n\nexport const oauthCodeChallengeMethodSchema = z.enum(['S256', 'plain'])\n"]}
1
+ {"version":3,"file":"oauth-code-challenge-method.js","sourceRoot":"","sources":["../src/oauth-code-challenge-method.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA","sourcesContent":["import { z } from 'zod'\n\nexport const oauthCodeChallengeMethodSchema = z.enum(['S256', 'plain'])\n"]}
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.oauthEndpointAuthMethod = void 0;
4
- const zod_1 = require("zod");
5
- exports.oauthEndpointAuthMethod = zod_1.z.enum([
1
+ import { z } from 'zod';
2
+ export const oauthEndpointAuthMethod = z.enum([
6
3
  'client_secret_basic',
7
4
  'client_secret_jwt',
8
5
  'client_secret_post',
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-endpoint-auth-method.js","sourceRoot":"","sources":["../src/oauth-endpoint-auth-method.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,uBAAuB,GAAG,OAAC,CAAC,IAAI,CAAC;IAC5C,qBAAqB;IACrB,mBAAmB;IACnB,oBAAoB;IACpB,MAAM;IACN,iBAAiB;IACjB,6BAA6B;IAC7B,iBAAiB;CAClB,CAAC,CAAA","sourcesContent":["import { z } from 'zod'\n\nexport const oauthEndpointAuthMethod = z.enum([\n 'client_secret_basic',\n 'client_secret_jwt',\n 'client_secret_post',\n 'none',\n 'private_key_jwt',\n 'self_signed_tls_client_auth',\n 'tls_client_auth',\n])\n\nexport type OauthEndpointAuthMethod = z.infer<typeof oauthEndpointAuthMethod>\n"]}
1
+ {"version":3,"file":"oauth-endpoint-auth-method.js","sourceRoot":"","sources":["../src/oauth-endpoint-auth-method.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC5C,qBAAqB;IACrB,mBAAmB;IACnB,oBAAoB;IACpB,MAAM;IACN,iBAAiB;IACjB,6BAA6B;IAC7B,iBAAiB;CAClB,CAAC,CAAA","sourcesContent":["import { z } from 'zod'\n\nexport const oauthEndpointAuthMethod = z.enum([\n 'client_secret_basic',\n 'client_secret_jwt',\n 'client_secret_post',\n 'none',\n 'private_key_jwt',\n 'self_signed_tls_client_auth',\n 'tls_client_auth',\n])\n\nexport type OauthEndpointAuthMethod = z.infer<typeof oauthEndpointAuthMethod>\n"]}
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OAUTH_ENDPOINT_NAMES = void 0;
4
- exports.OAUTH_ENDPOINT_NAMES = [
1
+ export const OAUTH_ENDPOINT_NAMES = [
5
2
  'token',
6
3
  'revocation',
7
4
  'introspection',
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-endpoint-name.js","sourceRoot":"","sources":["../src/oauth-endpoint-name.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG;IAClC,OAAO;IACP,YAAY;IACZ,eAAe;IACf,8BAA8B;CACtB,CAAA","sourcesContent":["export const OAUTH_ENDPOINT_NAMES = [\n 'token',\n 'revocation',\n 'introspection',\n 'pushed_authorization_request',\n] as const\n\nexport type OAuthEndpointName = (typeof OAUTH_ENDPOINT_NAMES)[number]\n"]}
1
+ {"version":3,"file":"oauth-endpoint-name.js","sourceRoot":"","sources":["../src/oauth-endpoint-name.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO;IACP,YAAY;IACZ,eAAe;IACf,8BAA8B;CACtB,CAAA","sourcesContent":["export const OAUTH_ENDPOINT_NAMES = [\n 'token',\n 'revocation',\n 'introspection',\n 'pushed_authorization_request',\n] as const\n\nexport type OAuthEndpointName = (typeof OAUTH_ENDPOINT_NAMES)[number]\n"]}
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.oauthGrantTypeSchema = void 0;
4
- const zod_1 = require("zod");
5
- exports.oauthGrantTypeSchema = zod_1.z.enum([
1
+ import { z } from 'zod';
2
+ export const oauthGrantTypeSchema = z.enum([
6
3
  'authorization_code',
7
4
  'implicit',
8
5
  'refresh_token',
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-grant-type.js","sourceRoot":"","sources":["../src/oauth-grant-type.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,oBAAoB,GAAG,OAAC,CAAC,IAAI,CAAC;IACzC,oBAAoB;IACpB,UAAU;IACV,eAAe;IACf,UAAU,EAAE,wBAAwB;IACpC,oBAAoB;IACpB,6CAA6C;IAC7C,+CAA+C;CAChD,CAAC,CAAA","sourcesContent":["import { z } from 'zod'\n\nexport const oauthGrantTypeSchema = z.enum([\n 'authorization_code',\n 'implicit',\n 'refresh_token',\n 'password', // Not part of OAuth 2.1\n 'client_credentials',\n 'urn:ietf:params:oauth:grant-type:jwt-bearer',\n 'urn:ietf:params:oauth:grant-type:saml2-bearer',\n])\n\nexport type OAuthGrantType = z.infer<typeof oauthGrantTypeSchema>\n"]}
1
+ {"version":3,"file":"oauth-grant-type.js","sourceRoot":"","sources":["../src/oauth-grant-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,oBAAoB;IACpB,UAAU;IACV,eAAe;IACf,UAAU,EAAE,wBAAwB;IACpC,oBAAoB;IACpB,6CAA6C;IAC7C,+CAA+C;CAChD,CAAC,CAAA","sourcesContent":["import { z } from 'zod'\n\nexport const oauthGrantTypeSchema = z.enum([\n 'authorization_code',\n 'implicit',\n 'refresh_token',\n 'password', // Not part of OAuth 2.1\n 'client_credentials',\n 'urn:ietf:params:oauth:grant-type:jwt-bearer',\n 'urn:ietf:params:oauth:grant-type:saml2-bearer',\n])\n\nexport type OAuthGrantType = z.infer<typeof oauthGrantTypeSchema>\n"]}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=oauth-introspection-response.js.map