@atproto/oauth-provider 0.9.2 → 0.9.3

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 (121) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/client/client.js +6 -6
  3. package/dist/client/client.js.map +1 -1
  4. package/dist/device/device-manager.js +1 -1
  5. package/dist/device/device-manager.js.map +1 -1
  6. package/dist/dpop/dpop-manager.js +15 -15
  7. package/dist/dpop/dpop-manager.js.map +1 -1
  8. package/dist/errors/access-denied-error.d.ts +4 -7
  9. package/dist/errors/access-denied-error.d.ts.map +1 -1
  10. package/dist/errors/access-denied-error.js +4 -13
  11. package/dist/errors/access-denied-error.js.map +1 -1
  12. package/dist/errors/account-selection-required-error.d.ts +2 -2
  13. package/dist/errors/account-selection-required-error.d.ts.map +1 -1
  14. package/dist/errors/account-selection-required-error.js +2 -2
  15. package/dist/errors/account-selection-required-error.js.map +1 -1
  16. package/dist/errors/authorization-error.d.ts +10 -0
  17. package/dist/errors/authorization-error.d.ts.map +1 -0
  18. package/dist/errors/authorization-error.js +31 -0
  19. package/dist/errors/authorization-error.js.map +1 -0
  20. package/dist/errors/consent-required-error.d.ts +2 -2
  21. package/dist/errors/consent-required-error.d.ts.map +1 -1
  22. package/dist/errors/consent-required-error.js +2 -2
  23. package/dist/errors/consent-required-error.js.map +1 -1
  24. package/dist/errors/error-parser.d.ts.map +1 -1
  25. package/dist/errors/error-parser.js +2 -1
  26. package/dist/errors/error-parser.js.map +1 -1
  27. package/dist/errors/invalid-authorization-details-error.d.ts +2 -2
  28. package/dist/errors/invalid-authorization-details-error.d.ts.map +1 -1
  29. package/dist/errors/invalid-authorization-details-error.js +2 -2
  30. package/dist/errors/invalid-authorization-details-error.js.map +1 -1
  31. package/dist/errors/invalid-scope-error.d.ts +2 -2
  32. package/dist/errors/invalid-scope-error.d.ts.map +1 -1
  33. package/dist/errors/invalid-scope-error.js +2 -2
  34. package/dist/errors/invalid-scope-error.js.map +1 -1
  35. package/dist/errors/login-required-error.d.ts +2 -3
  36. package/dist/errors/login-required-error.d.ts.map +1 -1
  37. package/dist/errors/login-required-error.js +2 -7
  38. package/dist/errors/login-required-error.js.map +1 -1
  39. package/dist/lib/http/response.d.ts +4 -4
  40. package/dist/lib/http/response.d.ts.map +1 -1
  41. package/dist/lib/http/response.js +8 -7
  42. package/dist/lib/http/response.js.map +1 -1
  43. package/dist/lib/http/stream.d.ts +1 -0
  44. package/dist/lib/http/stream.d.ts.map +1 -1
  45. package/dist/lib/http/stream.js +6 -0
  46. package/dist/lib/http/stream.js.map +1 -1
  47. package/dist/lib/util/error.d.ts +2 -0
  48. package/dist/lib/util/error.d.ts.map +1 -0
  49. package/dist/lib/util/error.js +11 -0
  50. package/dist/lib/util/error.js.map +1 -0
  51. package/dist/lib/util/zod-error.d.ts +3 -1
  52. package/dist/lib/util/zod-error.d.ts.map +1 -1
  53. package/dist/lib/util/zod-error.js +20 -10
  54. package/dist/lib/util/zod-error.js.map +1 -1
  55. package/dist/oauth-errors.d.ts +1 -1
  56. package/dist/oauth-errors.d.ts.map +1 -1
  57. package/dist/oauth-errors.js +1 -1
  58. package/dist/oauth-errors.js.map +1 -1
  59. package/dist/oauth-hooks.d.ts +3 -2
  60. package/dist/oauth-hooks.d.ts.map +1 -1
  61. package/dist/oauth-hooks.js +4 -3
  62. package/dist/oauth-hooks.js.map +1 -1
  63. package/dist/oauth-provider.d.ts.map +1 -1
  64. package/dist/oauth-provider.js +18 -21
  65. package/dist/oauth-provider.js.map +1 -1
  66. package/dist/request/request-manager.d.ts.map +1 -1
  67. package/dist/request/request-manager.js +12 -12
  68. package/dist/request/request-manager.js.map +1 -1
  69. package/dist/router/create-api-middleware.d.ts.map +1 -1
  70. package/dist/router/create-api-middleware.js +60 -45
  71. package/dist/router/create-api-middleware.js.map +1 -1
  72. package/dist/router/create-authorization-page-middleware.d.ts.map +1 -1
  73. package/dist/router/create-authorization-page-middleware.js +19 -17
  74. package/dist/router/create-authorization-page-middleware.js.map +1 -1
  75. package/dist/router/create-oauth-middleware.d.ts.map +1 -1
  76. package/dist/router/create-oauth-middleware.js +21 -18
  77. package/dist/router/create-oauth-middleware.js.map +1 -1
  78. package/dist/router/send-redirect.js +2 -2
  79. package/dist/router/send-redirect.js.map +1 -1
  80. package/dist/token/token-manager.js +1 -1
  81. package/dist/types/authorization-response-error.d.ts +5 -0
  82. package/dist/types/authorization-response-error.d.ts.map +1 -0
  83. package/dist/types/authorization-response-error.js +21 -0
  84. package/dist/types/authorization-response-error.js.map +1 -0
  85. package/dist/types/par-response-error.d.ts +5 -0
  86. package/dist/types/par-response-error.d.ts.map +1 -0
  87. package/dist/types/par-response-error.js +22 -0
  88. package/dist/types/par-response-error.js.map +1 -0
  89. package/package.json +5 -5
  90. package/src/client/client.ts +6 -6
  91. package/src/device/device-manager.ts +1 -1
  92. package/src/dpop/dpop-manager.ts +16 -16
  93. package/src/errors/access-denied-error.ts +6 -33
  94. package/src/errors/account-selection-required-error.ts +2 -2
  95. package/src/errors/authorization-error.ts +45 -0
  96. package/src/errors/consent-required-error.ts +2 -2
  97. package/src/errors/error-parser.ts +2 -1
  98. package/src/errors/invalid-authorization-details-error.ts +2 -2
  99. package/src/errors/invalid-scope-error.ts +2 -2
  100. package/src/errors/login-required-error.ts +2 -12
  101. package/src/lib/http/response.ts +14 -13
  102. package/src/lib/http/stream.ts +6 -0
  103. package/src/lib/util/error.ts +7 -0
  104. package/src/lib/util/zod-error.ts +23 -11
  105. package/src/oauth-errors.ts +1 -1
  106. package/src/oauth-hooks.ts +3 -2
  107. package/src/oauth-provider.ts +18 -28
  108. package/src/request/request-manager.ts +12 -18
  109. package/src/router/create-api-middleware.ts +84 -62
  110. package/src/router/create-authorization-page-middleware.ts +19 -21
  111. package/src/router/create-oauth-middleware.ts +28 -27
  112. package/src/router/send-redirect.ts +2 -2
  113. package/src/token/token-manager.ts +1 -1
  114. package/src/types/authorization-response-error.ts +27 -0
  115. package/src/types/par-response-error.ts +25 -0
  116. package/tsconfig.build.tsbuildinfo +1 -1
  117. package/dist/errors/invalid-parameters-error.d.ts +0 -6
  118. package/dist/errors/invalid-parameters-error.d.ts.map +0 -1
  119. package/dist/errors/invalid-parameters-error.js +0 -11
  120. package/dist/errors/invalid-parameters-error.js.map +0 -1
  121. package/src/errors/invalid-parameters-error.ts +0 -12
@@ -1 +1 @@
1
- {"version":3,"file":"create-authorization-page-middleware.d.ts","sourceRoot":"","sources":["../../src/router/create-authorization-page-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAOhE,OAAO,EACL,UAAU,EAQX,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAMzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAQhE,wBAAgB,iCAAiC,CAC/C,GAAG,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,EAChC,GAAG,SAAS,eAAe,GAAG,eAAe,EAC7C,GAAG,SAAS,cAAc,GAAG,cAAc,EAE3C,MAAM,EAAE,aAAa,EACrB,EAAE,OAAO,EAAE,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,GACvC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAmH3B"}
1
+ {"version":3,"file":"create-authorization-page-middleware.d.ts","sourceRoot":"","sources":["../../src/router/create-authorization-page-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAOhE,OAAO,EACL,UAAU,EAQX,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAMzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAQhE,wBAAgB,iCAAiC,CAC/C,GAAG,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,EAChC,GAAG,SAAS,eAAe,GAAG,eAAe,EAC7C,GAAG,SAAS,cAAc,GAAG,cAAc,EAE3C,MAAM,EAAE,aAAa,EACrB,EAAE,OAAO,EAAE,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,GACvC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAoH3B"}
@@ -2,10 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createAuthorizationPageMiddleware = createAuthorizationPageMiddleware;
4
4
  const oauth_types_1 = require("@atproto/oauth-types");
5
- const access_denied_error_js_1 = require("../errors/access-denied-error.js");
5
+ const authorization_error_js_1 = require("../errors/authorization-error.js");
6
6
  const invalid_request_error_js_1 = require("../errors/invalid-request-error.js");
7
7
  const index_js_1 = require("../lib/http/index.js");
8
- const zod_error_js_1 = require("../lib/util/zod-error.js");
8
+ const error_js_1 = require("../lib/util/error.js");
9
9
  const request_uri_js_1 = require("../request/request-uri.js");
10
10
  const send_authorization_page_js_1 = require("./assets/send-authorization-page.js");
11
11
  const send_error_page_js_1 = require("./assets/send-error-page.js");
@@ -27,13 +27,13 @@ function createAuthorizationPageMiddleware(server, { onError }) {
27
27
  const query = Object.fromEntries(this.url.searchParams);
28
28
  const clientCredentials = await oauth_types_1.oauthClientCredentialsSchema
29
29
  .parseAsync(query, { path: ['query'] })
30
- .catch(throwInvalidRequest);
30
+ .catch((err) => throwInvalidRequest(err, 'Invalid client credentials'));
31
31
  if ('client_secret' in clientCredentials) {
32
32
  throw new invalid_request_error_js_1.InvalidRequestError('Client secret must not be provided');
33
33
  }
34
34
  const authorizationRequest = await oauth_types_1.oauthAuthorizationRequestQuerySchema
35
35
  .parseAsync(query, { path: ['query'] })
36
- .catch(throwInvalidRequest);
36
+ .catch((err) => throwInvalidRequest(err, 'Invalid request parameters'));
37
37
  const deviceInfo = await server.deviceManager.load(req, res);
38
38
  try {
39
39
  const result = await server.authorize(clientCredentials, authorizationRequest, deviceInfo.deviceId, deviceInfo.deviceMetadata);
@@ -45,18 +45,20 @@ function createAuthorizationPageMiddleware(server, { onError }) {
45
45
  }
46
46
  }
47
47
  catch (err) {
48
- // If we have the "redirect_uri" parameter, we can redirect the user
49
- // to the client with an error.
50
- if (err instanceof access_denied_error_js_1.AccessDeniedError && err.parameters.redirect_uri) {
51
- // Prefer logging the cause
52
- onError?.(req, res, err.cause ?? err, 'Authorization failed');
53
- return sendAuthorizeRedirect(res, {
54
- issuer: server.issuer,
55
- parameters: err.parameters,
56
- redirect: err.toJSON(),
57
- });
48
+ onError?.(req, res, err, 'Authorization request denied');
49
+ if (err instanceof authorization_error_js_1.AuthorizationError) {
50
+ try {
51
+ return sendAuthorizeRedirect(res, {
52
+ issuer: server.issuer,
53
+ parameters: err.parameters,
54
+ redirect: err.toJSON(),
55
+ });
56
+ }
57
+ catch {
58
+ // If we fail to send the redirect, we fall back to sending an error
59
+ }
58
60
  }
59
- throw err;
61
+ return sendErrorPage(req, res, err);
60
62
  }
61
63
  }));
62
64
  // This is a private endpoint that will be called by the user after the
@@ -92,8 +94,8 @@ function createAuthorizationPageMiddleware(server, { onError }) {
92
94
  };
93
95
  }
94
96
  }
95
- function throwInvalidRequest(err) {
96
- throw new invalid_request_error_js_1.InvalidRequestError((0, zod_error_js_1.extractZodErrorMessage)(err) ?? 'Input validation error', err);
97
+ function throwInvalidRequest(err, prefix) {
98
+ throw new invalid_request_error_js_1.InvalidRequestError((0, error_js_1.formatError)(err, prefix), err);
97
99
  }
98
100
  function sendAuthorizeRedirect(res, { issuer, parameters, redirect }) {
99
101
  const redirectUri = (0, send_redirect_js_1.buildRedirectUri)(parameters);
@@ -1 +1 @@
1
- {"version":3,"file":"create-authorization-page-middleware.js","sourceRoot":"","sources":["../../src/router/create-authorization-page-middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-authorization-page-middleware.js","sourceRoot":"","sources":["../../src/router/create-authorization-page-middleware.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-oauth-middleware.d.ts","sourceRoot":"","sources":["../../src/router/create-oauth-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAYhE,OAAO,EACL,UAAU,EAOX,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAqChE,wBAAgB,qBAAqB,CACnC,GAAG,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,EAChC,GAAG,SAAS,eAAe,GAAG,eAAe,EAC7C,GAAG,SAAS,cAAc,GAAG,cAAc,EAE3C,MAAM,EAAE,aAAa,EACrB,EAAE,OAAO,EAAE,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,GACvC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAuK3B"}
1
+ {"version":3,"file":"create-oauth-middleware.d.ts","sourceRoot":"","sources":["../../src/router/create-oauth-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAYhE,OAAO,EACL,UAAU,EAOX,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAqChE,wBAAgB,qBAAqB,CACnC,GAAG,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,EAChC,GAAG,SAAS,eAAe,GAAG,eAAe,EAC7C,GAAG,SAAS,cAAc,GAAG,cAAc,EAE3C,MAAM,EAAE,aAAa,EACrB,EAAE,OAAO,EAAE,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,GACvC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAgL3B"}
@@ -8,7 +8,8 @@ const invalid_grant_error_js_1 = require("../errors/invalid-grant-error.js");
8
8
  const invalid_request_error_js_1 = require("../errors/invalid-request-error.js");
9
9
  const www_authenticate_error_js_1 = require("../errors/www-authenticate-error.js");
10
10
  const index_js_1 = require("../lib/http/index.js");
11
- const zod_error_js_1 = require("../lib/util/zod-error.js");
11
+ const error_js_1 = require("../lib/util/error.js");
12
+ const oauth_errors_js_1 = require("../oauth-errors.js");
12
13
  // CORS preflight
13
14
  const corsHeaders = function (req, res, next) {
14
15
  res.setHeader('Access-Control-Max-Age', '86400'); // 1 day
@@ -52,10 +53,10 @@ function createOAuthMiddleware(server, { onError }) {
52
53
  // https://datatracker.ietf.org/doc/html/rfc6749#autoid-56
53
54
  const credentials = await oauth_types_1.oauthClientCredentialsSchema
54
55
  .parseAsync(payload, { path: ['body'] })
55
- .catch(throwInvalidClient);
56
+ .catch((err) => throwInvalidClient(err, 'Client credentials missing'));
56
57
  const authorizationRequest = await oauth_types_1.oauthAuthorizationRequestParSchema
57
58
  .parseAsync(payload, { path: ['body'] })
58
- .catch(throwInvalidRequest);
59
+ .catch((err) => throwInvalidRequest(err, 'Invalid authorization request'));
59
60
  const dpopProof = await server.checkDpopProof(req.method, this.url, req.headers);
60
61
  return server.pushedAuthorizationRequest(credentials, authorizationRequest, dpopProof);
61
62
  }, 201));
@@ -71,10 +72,10 @@ function createOAuthMiddleware(server, { onError }) {
71
72
  const clientMetadata = await server.deviceManager.getRequestMetadata(req);
72
73
  const clientCredentials = await oauth_types_1.oauthClientCredentialsSchema
73
74
  .parseAsync(payload, { path: ['body'] })
74
- .catch(throwInvalidGrant);
75
+ .catch((err) => throwInvalidGrant(err, 'Client credentials missing'));
75
76
  const tokenRequest = await oauth_types_1.oauthTokenRequestSchema
76
77
  .parseAsync(payload, { path: ['body'] })
77
- .catch(throwInvalidGrant);
78
+ .catch((err) => throwInvalidGrant(err, 'Invalid request payload'));
78
79
  const dpopProof = await server.checkDpopProof(req.method, this.url, req.headers);
79
80
  return server.token(clientCredentials, clientMetadata, tokenRequest, dpopProof);
80
81
  }));
@@ -83,10 +84,10 @@ function createOAuthMiddleware(server, { onError }) {
83
84
  const payload = await (0, index_js_1.parseHttpRequest)(req, ['json', 'urlencoded']);
84
85
  const credentials = await oauth_types_1.oauthClientCredentialsSchema
85
86
  .parseAsync(payload, { path: ['body'] })
86
- .catch(throwInvalidRequest);
87
+ .catch((err) => throwInvalidRequest(err, 'Client credentials missing'));
87
88
  const tokenIdentification = await oauth_types_1.oauthTokenIdentificationSchema
88
89
  .parseAsync(payload, { path: ['body'] })
89
- .catch(throwInvalidRequest);
90
+ .catch((err) => throwInvalidRequest(err, 'Invalid request payload'));
90
91
  const dpopProof = await server.checkDpopProof(req.method, this.url, req.headers);
91
92
  try {
92
93
  await server.revoke(credentials, tokenIdentification, dpopProof);
@@ -116,30 +117,32 @@ function createOAuthMiddleware(server, { onError }) {
116
117
  res.setHeader(name, dpopNonce);
117
118
  res.appendHeader('Access-Control-Expose-Headers', name);
118
119
  }
119
- const payload = await buildOAuthResponse.call(this, req, res);
120
- return { payload, status };
120
+ const json = await buildOAuthResponse.call(this, req, res);
121
+ return { json, status };
121
122
  }
122
123
  catch (err) {
123
- onError?.(req, res, err, 'OAuth request error');
124
+ onError?.(req, res, err, err instanceof oauth_errors_js_1.OAuthError
125
+ ? `OAuth "${err.error}" error`
126
+ : 'Unexpected error');
124
127
  if (!res.headersSent && err instanceof www_authenticate_error_js_1.WWWAuthenticateError) {
125
128
  const name = 'WWW-Authenticate';
126
129
  res.setHeader(name, err.wwwAuthenticateHeader);
127
130
  res.appendHeader('Access-Control-Expose-Headers', name);
128
131
  }
129
132
  const status = (0, error_parser_js_1.buildErrorStatus)(err);
130
- const payload = (0, error_parser_js_1.buildErrorPayload)(err);
131
- return { payload, status };
133
+ const json = (0, error_parser_js_1.buildErrorPayload)(err);
134
+ return { json, status };
132
135
  }
133
136
  });
134
137
  }
135
138
  }
136
- function throwInvalidGrant(err) {
137
- throw new invalid_grant_error_js_1.InvalidGrantError((0, zod_error_js_1.extractZodErrorMessage)(err) ?? 'Invalid grant', err);
139
+ function throwInvalidGrant(err, prefix) {
140
+ throw new invalid_grant_error_js_1.InvalidGrantError((0, error_js_1.formatError)(err, prefix), err);
138
141
  }
139
- function throwInvalidClient(err) {
140
- throw new invalid_client_error_js_1.InvalidClientError((0, zod_error_js_1.extractZodErrorMessage)(err) ?? 'Client authentication failed', err);
142
+ function throwInvalidClient(err, prefix) {
143
+ throw new invalid_client_error_js_1.InvalidClientError((0, error_js_1.formatError)(err, prefix), err);
141
144
  }
142
- function throwInvalidRequest(err) {
143
- throw new invalid_request_error_js_1.InvalidRequestError((0, zod_error_js_1.extractZodErrorMessage)(err) ?? 'Input validation error', err);
145
+ function throwInvalidRequest(err, prefix) {
146
+ throw new invalid_request_error_js_1.InvalidRequestError((0, error_js_1.formatError)(err, prefix), err);
144
147
  }
145
148
  //# sourceMappingURL=create-oauth-middleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-oauth-middleware.js","sourceRoot":"","sources":["../../src/router/create-oauth-middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-oauth-middleware.js","sourceRoot":"","sources":["../../src/router/create-oauth-middleware.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ exports.buildRedirectUri = buildRedirectUri;
5
5
  exports.buildRedirectMode = buildRedirectMode;
6
6
  exports.buildRedirectParams = buildRedirectParams;
7
7
  exports.sendRedirect = sendRedirect;
8
- const access_denied_error_js_1 = require("../errors/access-denied-error.js");
8
+ const authorization_error_js_1 = require("../errors/authorization-error.js");
9
9
  const index_js_1 = require("../lib/html/index.js");
10
10
  const send_web_page_js_1 = require("../lib/send-web-page.js");
11
11
  // https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-11#section-7.5.4
@@ -26,7 +26,7 @@ function buildRedirectUri(parameters) {
26
26
  const uri = parameters.redirect_uri;
27
27
  if (uri)
28
28
  return uri;
29
- throw new access_denied_error_js_1.AccessDeniedError(parameters, 'No redirect_uri', 'invalid_request');
29
+ throw new authorization_error_js_1.AuthorizationError(parameters, 'No redirect_uri', 'invalid_request');
30
30
  }
31
31
  function buildRedirectMode(parameters) {
32
32
  const mode = parameters.response_mode || 'query'; // @TODO default should depend on response_type
@@ -1 +1 @@
1
- {"version":3,"file":"send-redirect.js","sourceRoot":"","sources":["../../src/router/send-redirect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send-redirect.js","sourceRoot":"","sources":["../../src/router/send-redirect.ts"],"names":[],"mappings":"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"}
@@ -188,7 +188,7 @@ class TokenManager {
188
188
  // @TODO Add another store method that atomically consumes the refresh token
189
189
  // with a lock.
190
190
  const tokenInfo = await this.findByRefreshToken(token).catch((err) => {
191
- throw invalid_token_error_js_1.InvalidTokenError.from(err, `Invalid refresh token`);
191
+ throw invalid_grant_error_js_1.InvalidGrantError.from(err, `Invalid refresh token`);
192
192
  });
193
193
  if (!tokenInfo) {
194
194
  throw new invalid_grant_error_js_1.InvalidGrantError(`Invalid refresh token`);
@@ -0,0 +1,5 @@
1
+ import { z } from 'zod';
2
+ export declare const authorizationResponseErrorSchema: z.ZodUnion<[z.ZodEnum<["invalid_request", "unauthorized_client", "access_denied", "unsupported_response_type", "invalid_scope", "server_error", "temporarily_unavailable"]>, z.ZodEnum<["interaction_required", "login_required", "account_selection_required", "consent_required", "invalid_request_uri", "invalid_request_object", "request_not_supported", "request_uri_not_supported", "registration_not_supported"]>, z.ZodLiteral<"invalid_authorization_details">]>;
3
+ export type AuthorizationResponseError = z.infer<typeof authorizationResponseErrorSchema>;
4
+ export declare function isAuthorizationResponseError<T>(value: T): value is T & AuthorizationResponseError;
5
+ //# sourceMappingURL=authorization-response-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-response-error.d.ts","sourceRoot":"","sources":["../../src/types/authorization-response-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,eAAO,MAAM,gCAAgC,4cAU3C,CAAA;AAEF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,gCAAgC,CACxC,CAAA;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAC5C,KAAK,EAAE,CAAC,GACP,KAAK,IAAI,CAAC,GAAG,0BAA0B,CAEzC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authorizationResponseErrorSchema = void 0;
4
+ exports.isAuthorizationResponseError = isAuthorizationResponseError;
5
+ const zod_1 = require("zod");
6
+ const oauth_types_1 = require("@atproto/oauth-types");
7
+ exports.authorizationResponseErrorSchema = zod_1.z.union([
8
+ oauth_types_1.oauthAuthorizationResponseErrorSchema,
9
+ // OIDC authentication error response are not part of the ATproto flavoured
10
+ // OAuth but we allow them because they provide better feedback to the client
11
+ // (in particular when SSO is used).
12
+ oauth_types_1.oidcAuthorizationResponseErrorSchema,
13
+ // This error is defined by rfc9396 (not part of the OAuth 2.1 or OIDC). But
14
+ // since, in ATproto flavoured OAuth, client registration is a dynamic part of
15
+ // the authorization process, we allow it.
16
+ zod_1.z.literal('invalid_authorization_details'),
17
+ ]);
18
+ function isAuthorizationResponseError(value) {
19
+ return exports.authorizationResponseErrorSchema.safeParse(value).success;
20
+ }
21
+ //# sourceMappingURL=authorization-response-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-response-error.js","sourceRoot":"","sources":["../../src/types/authorization-response-error.ts"],"names":[],"mappings":";;;AAsBA,oEAIC;AA1BD,6BAAuB;AACvB,sDAG6B;AAEhB,QAAA,gCAAgC,GAAG,OAAC,CAAC,KAAK,CAAC;IACtD,mDAAqC;IACrC,2EAA2E;IAC3E,6EAA6E;IAC7E,oCAAoC;IACpC,kDAAoC;IACpC,4EAA4E;IAC5E,8EAA8E;IAC9E,0CAA0C;IAC1C,OAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC;CAC3C,CAAC,CAAA;AAMF,SAAgB,4BAA4B,CAC1C,KAAQ;IAER,OAAO,wCAAgC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AAClE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { z } from 'zod';
2
+ export declare const parResponseErrorSchema: z.ZodIntersection<z.ZodUnion<[z.ZodEnum<["invalid_request", "unauthorized_client", "access_denied", "unsupported_response_type", "invalid_scope", "server_error", "temporarily_unavailable"]>, z.ZodEnum<["interaction_required", "login_required", "account_selection_required", "consent_required", "invalid_request_uri", "invalid_request_object", "request_not_supported", "request_uri_not_supported", "registration_not_supported"]>, z.ZodLiteral<"invalid_authorization_details">]>, z.ZodEnum<["invalid_request", "unauthorized_client", "unsupported_response_type", "invalid_scope", "server_error", "temporarily_unavailable"]>>;
3
+ export type PARResponseError = z.infer<typeof parResponseErrorSchema>;
4
+ export declare function isPARResponseError<T>(value: T): value is T & PARResponseError;
5
+ //# sourceMappingURL=par-response-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"par-response-error.d.ts","sourceRoot":"","sources":["../../src/types/par-response-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAQvB,eAAO,MAAM,sBAAsB,+mBAUlC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,gBAAgB,CAE7E"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parResponseErrorSchema = void 0;
4
+ exports.isPARResponseError = isPARResponseError;
5
+ const zod_1 = require("zod");
6
+ const authorization_response_error_js_1 = require("./authorization-response-error.js");
7
+ // https://datatracker.ietf.org/doc/html/rfc9126#section-2.3-1
8
+ // > Since initial processing of the pushed authorization request does not
9
+ // > involve resource owner interaction, error codes related to user
10
+ // > interaction, such as "access_denied", are never returned.
11
+ exports.parResponseErrorSchema = zod_1.z.intersection(authorization_response_error_js_1.authorizationResponseErrorSchema, zod_1.z.enum([
12
+ 'invalid_request',
13
+ 'unauthorized_client',
14
+ 'unsupported_response_type',
15
+ 'invalid_scope',
16
+ 'server_error',
17
+ 'temporarily_unavailable',
18
+ ]));
19
+ function isPARResponseError(value) {
20
+ return exports.parResponseErrorSchema.safeParse(value).success;
21
+ }
22
+ //# sourceMappingURL=par-response-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"par-response-error.js","sourceRoot":"","sources":["../../src/types/par-response-error.ts"],"names":[],"mappings":";;;AAsBA,gDAEC;AAxBD,6BAAuB;AACvB,uFAAoF;AAEpF,8DAA8D;AAC9D,0EAA0E;AAC1E,oEAAoE;AACpE,8DAA8D;AAEjD,QAAA,sBAAsB,GAAG,OAAC,CAAC,YAAY,CAClD,kEAAgC,EAChC,OAAC,CAAC,IAAI,CAAC;IACL,iBAAiB;IACjB,qBAAqB;IACrB,2BAA2B;IAC3B,eAAe;IACf,cAAc;IACd,yBAAyB;CAC1B,CAAC,CACH,CAAA;AAID,SAAgB,kBAAkB,CAAI,KAAQ;IAC5C,OAAO,8BAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACxD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/oauth-provider",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "license": "MIT",
5
5
  "description": "Generic OAuth2 and OpenID Connect provider for Node.js. Currently only supports features needed for Atproto.",
6
6
  "keywords": [
@@ -51,10 +51,10 @@
51
51
  "@atproto/did": "0.1.5",
52
52
  "@atproto/jwk": "0.4.0",
53
53
  "@atproto/jwk-jose": "0.1.9",
54
- "@atproto/oauth-types": "0.3.1",
55
- "@atproto/oauth-provider-api": "0.1.5",
56
- "@atproto/oauth-provider-frontend": "0.1.9",
57
- "@atproto/oauth-provider-ui": "0.1.10",
54
+ "@atproto/oauth-types": "0.4.0",
55
+ "@atproto/oauth-provider-api": "0.1.6",
56
+ "@atproto/oauth-provider-frontend": "0.1.10",
57
+ "@atproto/oauth-provider-ui": "0.1.11",
58
58
  "@atproto/syntax": "0.4.0"
59
59
  },
60
60
  "devDependencies": {
@@ -24,10 +24,10 @@ import {
24
24
  OAuthRedirectUri,
25
25
  } from '@atproto/oauth-types'
26
26
  import { CLIENT_ASSERTION_MAX_AGE, JAR_MAX_AGE } from '../constants.js'
27
+ import { AuthorizationError } from '../errors/authorization-error.js'
27
28
  import { InvalidAuthorizationDetailsError } from '../errors/invalid-authorization-details-error.js'
28
29
  import { InvalidClientError } from '../errors/invalid-client-error.js'
29
30
  import { InvalidClientMetadataError } from '../errors/invalid-client-metadata-error.js'
30
- import { InvalidParametersError } from '../errors/invalid-parameters-error.js'
31
31
  import { InvalidRequestError } from '../errors/invalid-request-error.js'
32
32
  import { InvalidScopeError } from '../errors/invalid-scope-error.js'
33
33
  import { asArray } from '../lib/util/cast.js'
@@ -285,7 +285,7 @@ export class Client {
285
285
  parameters: Readonly<OAuthAuthorizationRequestParameters>,
286
286
  ): Readonly<OAuthAuthorizationRequestParameters> {
287
287
  if (parameters.client_id !== this.id) {
288
- throw new InvalidParametersError(
288
+ throw new AuthorizationError(
289
289
  parameters,
290
290
  'The "client_id" parameter field does not match the value used to authenticate the client',
291
291
  )
@@ -314,7 +314,7 @@ export class Client {
314
314
  }
315
315
 
316
316
  if (!this.metadata.response_types.includes(parameters.response_type)) {
317
- throw new InvalidParametersError(
317
+ throw new AuthorizationError(
318
318
  parameters,
319
319
  `Invalid response_type "${parameters.response_type}" requested by the client`,
320
320
  )
@@ -322,7 +322,7 @@ export class Client {
322
322
 
323
323
  if (parameters.response_type.includes('code')) {
324
324
  if (!this.metadata.grant_types.includes('authorization_code')) {
325
- throw new InvalidParametersError(
325
+ throw new AuthorizationError(
326
326
  parameters,
327
327
  `This client is not allowed to use the "authorization_code" grant type`,
328
328
  )
@@ -336,7 +336,7 @@ export class Client {
336
336
  compareRedirectUri(uri, redirect_uri),
337
337
  )
338
338
  ) {
339
- throw new InvalidParametersError(
339
+ throw new AuthorizationError(
340
340
  parameters,
341
341
  `Invalid redirect_uri ${redirect_uri}`,
342
342
  )
@@ -351,7 +351,7 @@ export class Client {
351
351
  // > "redirect_uri": OPTIONAL if only one redirect URI is registered for
352
352
  // > this client. REQUIRED if multiple redirect URIs are registered for this
353
353
  // > client.
354
- throw new InvalidParametersError(parameters, 'redirect_uri is required')
354
+ throw new AuthorizationError(parameters, 'redirect_uri is required')
355
355
  }
356
356
  }
357
357
 
@@ -261,7 +261,7 @@ export class DeviceManager {
261
261
  const rawValue = Object.hasOwn(cookies, name) ? cookies[name] : null
262
262
  if (!rawValue) return null
263
263
 
264
- const result = schema.safeParse(rawValue, { path: ['cookie', name] })
264
+ const result = schema.safeParse(rawValue)
265
265
  if (!result.success) return null
266
266
 
267
267
  const value = result.data
@@ -68,7 +68,7 @@ export class DpopManager {
68
68
  maxTokenAge: 10, // Will ensure presence & validity of "iat" claim
69
69
  clockTolerance: DPOP_NONCE_MAX_AGE / 1e3,
70
70
  }).catch((err) => {
71
- throw newInvalidDpopProofError('Failed to verify DPoP proof', err)
71
+ throw wrapInvalidDpopProofError(err, 'Failed to verify DPoP proof')
72
72
  })
73
73
 
74
74
  // @NOTE For legacy & backwards compatibility reason, we cannot use
@@ -86,20 +86,20 @@ export class DpopManager {
86
86
  const { ath, htm, htu, jti, nonce } = payload
87
87
 
88
88
  if (nonce !== undefined && typeof nonce !== 'string') {
89
- throw newInvalidDpopProofError('Invalid DPoP "nonce" type')
89
+ throw new InvalidDpopProofError('Invalid DPoP "nonce" type')
90
90
  }
91
91
 
92
92
  if (!jti || typeof jti !== 'string') {
93
- throw newInvalidDpopProofError('DPoP "jti" missing')
93
+ throw new InvalidDpopProofError('DPoP "jti" missing')
94
94
  }
95
95
 
96
96
  // Note rfc9110#section-9.1 states that the method name is case-sensitive
97
97
  if (!htm || htm !== httpMethod) {
98
- throw newInvalidDpopProofError('DPoP "htm" mismatch')
98
+ throw new InvalidDpopProofError('DPoP "htm" mismatch')
99
99
  }
100
100
 
101
101
  if (!htu || typeof htu !== 'string') {
102
- throw newInvalidDpopProofError('Invalid DPoP "htu" type')
102
+ throw new InvalidDpopProofError('Invalid DPoP "htu" type')
103
103
  }
104
104
 
105
105
  // > To reduce the likelihood of false negatives, servers SHOULD employ
@@ -109,7 +109,7 @@ export class DpopManager {
109
109
  //
110
110
  // RFC9449 section 4.3. Checking DPoP Proofs - https://datatracker.ietf.org/doc/html/rfc9449#section-4.3
111
111
  if (!htu || parseHtu(htu) !== normalizeHtuUrl(httpUrl)) {
112
- throw newInvalidDpopProofError('DPoP "htu" mismatch')
112
+ throw new InvalidDpopProofError('DPoP "htu" mismatch')
113
113
  }
114
114
 
115
115
  if (!nonce && this.dpopNonce) {
@@ -123,17 +123,17 @@ export class DpopManager {
123
123
  if (accessToken) {
124
124
  const accessTokenHash = createHash('sha256').update(accessToken).digest()
125
125
  if (ath !== accessTokenHash.toString('base64url')) {
126
- throw newInvalidDpopProofError('DPoP "ath" mismatch')
126
+ throw new InvalidDpopProofError('DPoP "ath" mismatch')
127
127
  }
128
128
  } else if (ath !== undefined) {
129
- throw newInvalidDpopProofError('DPoP "ath" claim not allowed')
129
+ throw new InvalidDpopProofError('DPoP "ath" claim not allowed')
130
130
  }
131
131
 
132
132
  // @NOTE we can assert there is a jwk because the jwtVerify used the
133
133
  // EmbeddedJWK key getter mechanism.
134
134
  const jwk = protectedHeader.jwk!
135
135
  const jkt = await calculateJwkThumbprint(jwk, 'sha256').catch((err) => {
136
- throw newInvalidDpopProofError('Failed to calculate jkt', err)
136
+ throw wrapInvalidDpopProofError(err, 'Failed to calculate jkt')
137
137
  })
138
138
 
139
139
  return { jti, jkt, htm, htu }
@@ -147,12 +147,12 @@ function extractProof(
147
147
  switch (typeof dpopHeader) {
148
148
  case 'string':
149
149
  if (dpopHeader) return dpopHeader
150
- throw newInvalidDpopProofError('DPoP header cannot be empty')
150
+ throw new InvalidDpopProofError('DPoP header cannot be empty')
151
151
  case 'object':
152
152
  // @NOTE the "0" case should never happen a node.js HTTP server will only
153
153
  // return an array if the header is set multiple times.
154
154
  if (dpopHeader.length === 1 && dpopHeader[0]) return dpopHeader[0]!
155
- throw newInvalidDpopProofError('DPoP header must contain a single proof')
155
+ throw new InvalidDpopProofError('DPoP header must contain a single proof')
156
156
  default:
157
157
  return null
158
158
  }
@@ -177,7 +177,7 @@ function normalizeHtuUrl(url: Readonly<URL>): string {
177
177
  function parseHtu(htu: string): string {
178
178
  const url = ifURL(htu)
179
179
  if (!url) {
180
- throw newInvalidDpopProofError('DPoP "htu" is not a valid URL')
180
+ throw new InvalidDpopProofError('DPoP "htu" is not a valid URL')
181
181
  }
182
182
 
183
183
  // @NOTE the checks bellow can be removed once once jwtPayloadSchema is used
@@ -185,11 +185,11 @@ function parseHtu(htu: string): string {
185
185
  // (though the htuSchema).
186
186
 
187
187
  if (url.password || url.username) {
188
- throw newInvalidDpopProofError('DPoP "htu" must not contain credentials')
188
+ throw new InvalidDpopProofError('DPoP "htu" must not contain credentials')
189
189
  }
190
190
 
191
191
  if (url.protocol !== 'http:' && url.protocol !== 'https:') {
192
- throw newInvalidDpopProofError('DPoP "htu" must be http or https')
192
+ throw new InvalidDpopProofError('DPoP "htu" must be http or https')
193
193
  }
194
194
 
195
195
  // @NOTE For legacy & backwards compatibility reason, we allow a query and
@@ -200,9 +200,9 @@ function parseHtu(htu: string): string {
200
200
  return normalizeHtuUrl(url)
201
201
  }
202
202
 
203
- function newInvalidDpopProofError(
203
+ function wrapInvalidDpopProofError(
204
+ err: unknown,
204
205
  title: string,
205
- err?: unknown,
206
206
  ): InvalidDpopProofError {
207
207
  const msg =
208
208
  err instanceof JOSEError || err instanceof ValidationError
@@ -1,39 +1,12 @@
1
- import {
2
- OAuthAuthenticationErrorResponse,
3
- OAuthAuthorizationRequestParameters,
4
- OidcAuthenticationErrorResponse,
5
- } from '@atproto/oauth-types'
6
- import { buildErrorPayload } from './error-parser.js'
7
- import { OAuthError } from './oauth-error.js'
1
+ import { OAuthAuthorizationRequestParameters } from '@atproto/oauth-types'
2
+ import { AuthorizationError } from './authorization-error.js'
8
3
 
9
- export type AuthenticationErrorResponse =
10
- | OAuthAuthenticationErrorResponse
11
- // OIDC authentication error response are not part of the ATproto flavoured
12
- // OAuth but we allow them because they provide better feedback to the client
13
- // (in particular when SSO is used).
14
- | OidcAuthenticationErrorResponse
15
- // This error is defined by rfc9396 (not part of the OAuth 2.1 or OIDC). But
16
- // since, in ATproto flavoured OAuth, client registration is a dynamic part of
17
- // the authorization process, we allow it.
18
- | 'invalid_authorization_details'
19
-
20
- export class AccessDeniedError extends OAuthError {
4
+ export class AccessDeniedError extends AuthorizationError {
21
5
  constructor(
22
- public readonly parameters: OAuthAuthorizationRequestParameters,
23
- error_description: string,
24
- error: AuthenticationErrorResponse = 'access_denied',
6
+ parameters: OAuthAuthorizationRequestParameters,
7
+ error_description = 'Access denied',
25
8
  cause?: unknown,
26
9
  ) {
27
- super(error, error_description, 400, cause)
28
- }
29
-
30
- static from(
31
- parameters: OAuthAuthorizationRequestParameters,
32
- cause: unknown,
33
- error: AuthenticationErrorResponse,
34
- ): AccessDeniedError {
35
- if (cause instanceof AccessDeniedError) return cause
36
- const { error_description } = buildErrorPayload(cause)
37
- return new AccessDeniedError(parameters, error_description, error, cause)
10
+ super(parameters, error_description, 'access_denied', cause)
38
11
  }
39
12
  }
@@ -1,7 +1,7 @@
1
1
  import { OAuthAuthorizationRequestParameters } from '@atproto/oauth-types'
2
- import { AccessDeniedError } from './access-denied-error.js'
2
+ import { AuthorizationError } from './authorization-error.js'
3
3
 
4
- export class AccountSelectionRequiredError extends AccessDeniedError {
4
+ export class AccountSelectionRequiredError extends AuthorizationError {
5
5
  constructor(
6
6
  parameters: OAuthAuthorizationRequestParameters,
7
7
  error_description = 'Account selection required',