@atproto/oauth-provider 0.2.0 → 0.2.2

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 (170) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/account/account-store.d.ts +2 -2
  3. package/dist/assets/app/bundle-manifest.json +3 -3
  4. package/dist/assets/app/main.css +1 -1
  5. package/dist/assets/app/main.js +3 -3
  6. package/dist/assets/app/main.js.map +1 -1
  7. package/dist/assets/assets-middleware.d.ts.map +1 -1
  8. package/dist/assets/assets-middleware.js +4 -2
  9. package/dist/assets/assets-middleware.js.map +1 -1
  10. package/dist/client/client-manager.d.ts.map +1 -1
  11. package/dist/client/client-manager.js +127 -118
  12. package/dist/client/client-manager.js.map +1 -1
  13. package/dist/client/client-utils.d.ts +1 -2
  14. package/dist/client/client-utils.d.ts.map +1 -1
  15. package/dist/client/client-utils.js +3 -12
  16. package/dist/client/client-utils.js.map +1 -1
  17. package/dist/client/client.d.ts +8 -3
  18. package/dist/client/client.d.ts.map +1 -1
  19. package/dist/client/client.js +70 -1
  20. package/dist/client/client.js.map +1 -1
  21. package/dist/constants.d.ts +0 -1
  22. package/dist/constants.d.ts.map +1 -1
  23. package/dist/constants.js +1 -2
  24. package/dist/constants.js.map +1 -1
  25. package/dist/errors/access-denied-error.d.ts +4 -4
  26. package/dist/errors/access-denied-error.d.ts.map +1 -1
  27. package/dist/errors/access-denied-error.js +2 -2
  28. package/dist/errors/access-denied-error.js.map +1 -1
  29. package/dist/errors/account-selection-required-error.d.ts +2 -2
  30. package/dist/errors/account-selection-required-error.d.ts.map +1 -1
  31. package/dist/errors/account-selection-required-error.js.map +1 -1
  32. package/dist/errors/consent-required-error.d.ts +2 -2
  33. package/dist/errors/consent-required-error.d.ts.map +1 -1
  34. package/dist/errors/consent-required-error.js.map +1 -1
  35. package/dist/errors/invalid-authorization-details-error.d.ts +2 -2
  36. package/dist/errors/invalid-authorization-details-error.d.ts.map +1 -1
  37. package/dist/errors/invalid-authorization-details-error.js.map +1 -1
  38. package/dist/errors/invalid-client-id-error.d.ts +1 -1
  39. package/dist/errors/invalid-client-id-error.d.ts.map +1 -1
  40. package/dist/errors/invalid-client-id-error.js +12 -6
  41. package/dist/errors/invalid-client-id-error.js.map +1 -1
  42. package/dist/errors/invalid-client-metadata-error.d.ts +1 -1
  43. package/dist/errors/invalid-client-metadata-error.d.ts.map +1 -1
  44. package/dist/errors/invalid-client-metadata-error.js +11 -3
  45. package/dist/errors/invalid-client-metadata-error.js.map +1 -1
  46. package/dist/errors/invalid-parameters-error.d.ts +2 -2
  47. package/dist/errors/invalid-parameters-error.d.ts.map +1 -1
  48. package/dist/errors/invalid-parameters-error.js.map +1 -1
  49. package/dist/errors/invalid-scope-error.d.ts +9 -0
  50. package/dist/errors/invalid-scope-error.d.ts.map +1 -0
  51. package/dist/errors/invalid-scope-error.js +14 -0
  52. package/dist/errors/invalid-scope-error.js.map +1 -0
  53. package/dist/errors/login-required-error.d.ts +2 -2
  54. package/dist/errors/login-required-error.d.ts.map +1 -1
  55. package/dist/errors/login-required-error.js.map +1 -1
  56. package/dist/lib/html/html.d.ts +1 -1
  57. package/dist/lib/html/html.d.ts.map +1 -1
  58. package/dist/lib/html/html.js +14 -11
  59. package/dist/lib/html/html.js.map +1 -1
  60. package/dist/lib/http/parser.d.ts +9 -2
  61. package/dist/lib/http/parser.d.ts.map +1 -1
  62. package/dist/lib/http/parser.js +15 -7
  63. package/dist/lib/http/parser.js.map +1 -1
  64. package/dist/lib/http/request.d.ts +0 -23
  65. package/dist/lib/http/request.d.ts.map +1 -1
  66. package/dist/lib/http/request.js +1 -11
  67. package/dist/lib/http/request.js.map +1 -1
  68. package/dist/lib/http/stream.d.ts +28 -6
  69. package/dist/lib/http/stream.d.ts.map +1 -1
  70. package/dist/lib/http/stream.js +21 -32
  71. package/dist/lib/http/stream.js.map +1 -1
  72. package/dist/lib/util/authorization-header.d.ts.map +1 -1
  73. package/dist/lib/util/authorization-header.js +1 -1
  74. package/dist/lib/util/authorization-header.js.map +1 -1
  75. package/dist/lib/util/hostname.d.ts +3 -2
  76. package/dist/lib/util/hostname.d.ts.map +1 -1
  77. package/dist/lib/util/hostname.js +12 -8
  78. package/dist/lib/util/hostname.js.map +1 -1
  79. package/dist/metadata/build-metadata.d.ts.map +1 -1
  80. package/dist/metadata/build-metadata.js +2 -1
  81. package/dist/metadata/build-metadata.js.map +1 -1
  82. package/dist/oauth-errors.d.ts +1 -0
  83. package/dist/oauth-errors.d.ts.map +1 -1
  84. package/dist/oauth-errors.js +3 -1
  85. package/dist/oauth-errors.js.map +1 -1
  86. package/dist/oauth-hooks.d.ts +3 -3
  87. package/dist/oauth-hooks.d.ts.map +1 -1
  88. package/dist/oauth-provider.d.ts +20 -22
  89. package/dist/oauth-provider.d.ts.map +1 -1
  90. package/dist/oauth-provider.js +234 -176
  91. package/dist/oauth-provider.js.map +1 -1
  92. package/dist/oauth-verifier.d.ts +2 -2
  93. package/dist/oauth-verifier.d.ts.map +1 -1
  94. package/dist/oauth-verifier.js.map +1 -1
  95. package/dist/output/build-authorize-data.d.ts +2 -2
  96. package/dist/output/build-authorize-data.d.ts.map +1 -1
  97. package/dist/output/send-authorize-redirect.d.ts +2 -4
  98. package/dist/output/send-authorize-redirect.d.ts.map +1 -1
  99. package/dist/output/send-authorize-redirect.js +5 -2
  100. package/dist/output/send-authorize-redirect.js.map +1 -1
  101. package/dist/request/request-data.d.ts +2 -2
  102. package/dist/request/request-data.d.ts.map +1 -1
  103. package/dist/request/request-info.d.ts +2 -2
  104. package/dist/request/request-info.d.ts.map +1 -1
  105. package/dist/request/request-manager.d.ts +4 -4
  106. package/dist/request/request-manager.d.ts.map +1 -1
  107. package/dist/request/request-manager.js +94 -60
  108. package/dist/request/request-manager.js.map +1 -1
  109. package/dist/signer/signed-token-payload.d.ts +122 -122
  110. package/dist/signer/signer.d.ts +41 -40
  111. package/dist/signer/signer.d.ts.map +1 -1
  112. package/dist/signer/signer.js +13 -15
  113. package/dist/signer/signer.js.map +1 -1
  114. package/dist/token/token-claims.d.ts +121 -121
  115. package/dist/token/token-data.d.ts +3 -3
  116. package/dist/token/token-data.d.ts.map +1 -1
  117. package/dist/token/token-manager.d.ts +4 -5
  118. package/dist/token/token-manager.d.ts.map +1 -1
  119. package/dist/token/token-manager.js +96 -72
  120. package/dist/token/token-manager.js.map +1 -1
  121. package/dist/token/verify-token-claims.d.ts +3 -3
  122. package/dist/token/verify-token-claims.d.ts.map +1 -1
  123. package/dist/token/verify-token-claims.js.map +1 -1
  124. package/package.json +7 -6
  125. package/src/assets/app/components/sign-in-form.tsx +31 -2
  126. package/src/assets/app/components/url-viewer.tsx +3 -3
  127. package/src/assets/assets-middleware.ts +4 -2
  128. package/src/client/client-manager.ts +163 -161
  129. package/src/client/client-utils.ts +7 -12
  130. package/src/client/client.ts +112 -3
  131. package/src/constants.ts +0 -2
  132. package/src/errors/access-denied-error.ts +10 -4
  133. package/src/errors/account-selection-required-error.ts +2 -2
  134. package/src/errors/consent-required-error.ts +2 -2
  135. package/src/errors/invalid-authorization-details-error.ts +2 -2
  136. package/src/errors/invalid-client-id-error.ts +15 -4
  137. package/src/errors/invalid-client-metadata-error.ts +15 -3
  138. package/src/errors/invalid-parameters-error.ts +2 -2
  139. package/src/errors/invalid-scope-error.ts +15 -0
  140. package/src/errors/login-required-error.ts +2 -2
  141. package/src/lib/html/html.ts +14 -12
  142. package/src/lib/http/parser.ts +21 -8
  143. package/src/lib/http/request.ts +1 -23
  144. package/src/lib/http/stream.ts +29 -60
  145. package/src/lib/util/authorization-header.ts +5 -2
  146. package/src/lib/util/hostname.ts +9 -5
  147. package/src/metadata/build-metadata.ts +3 -1
  148. package/src/oauth-errors.ts +1 -0
  149. package/src/oauth-hooks.ts +3 -3
  150. package/src/oauth-provider.ts +368 -269
  151. package/src/oauth-verifier.ts +2 -2
  152. package/src/output/build-authorize-data.ts +2 -2
  153. package/src/output/send-authorize-redirect.ts +7 -6
  154. package/src/request/request-data.ts +2 -2
  155. package/src/request/request-info.ts +2 -2
  156. package/src/request/request-manager.ts +129 -103
  157. package/src/signer/signer.ts +24 -25
  158. package/src/token/token-data.ts +3 -3
  159. package/src/token/token-manager.ts +141 -99
  160. package/src/token/verify-token-claims.ts +3 -3
  161. package/dist/request/types.d.ts +0 -328
  162. package/dist/request/types.d.ts.map +0 -1
  163. package/dist/request/types.js +0 -27
  164. package/dist/request/types.js.map +0 -1
  165. package/dist/token/types.d.ts +0 -250
  166. package/dist/token/types.d.ts.map +0 -1
  167. package/dist/token/types.js +0 -36
  168. package/dist/token/types.js.map +0 -1
  169. package/src/request/types.ts +0 -48
  170. package/src/token/types.ts +0 -86
@@ -14,17 +14,77 @@ export declare const tokenClaimsSchema: z.ZodIntersection<z.ZodObject<{
14
14
  exp: number;
15
15
  }>, z.ZodObject<z.objectUtil.extendShape<{
16
16
  nonce: z.ZodOptional<z.ZodOptional<z.ZodString>>;
17
+ client_id: z.ZodOptional<z.ZodOptional<z.ZodString>>;
18
+ scope: z.ZodOptional<z.ZodOptional<z.ZodString>>;
19
+ authorization_details: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
20
+ type: z.ZodString;
21
+ locations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
22
+ actions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
23
+ datatypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
24
+ identifier: z.ZodOptional<z.ZodString>;
25
+ privileges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
26
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
27
+ type: z.ZodString;
28
+ locations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
29
+ actions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
30
+ datatypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
31
+ identifier: z.ZodOptional<z.ZodString>;
32
+ privileges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
33
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
34
+ type: z.ZodString;
35
+ locations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
36
+ actions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
37
+ datatypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
38
+ identifier: z.ZodOptional<z.ZodString>;
39
+ privileges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
40
+ }, z.ZodTypeAny, "passthrough">>, "many">>>;
41
+ auth_time: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
42
+ acr: z.ZodOptional<z.ZodOptional<z.ZodString>>;
17
43
  name: z.ZodOptional<z.ZodOptional<z.ZodString>>;
44
+ family_name: z.ZodOptional<z.ZodOptional<z.ZodString>>;
45
+ given_name: z.ZodOptional<z.ZodOptional<z.ZodString>>;
46
+ middle_name: z.ZodOptional<z.ZodOptional<z.ZodString>>;
47
+ nickname: z.ZodOptional<z.ZodOptional<z.ZodString>>;
48
+ preferred_username: z.ZodOptional<z.ZodOptional<z.ZodString>>;
49
+ gender: z.ZodOptional<z.ZodOptional<z.ZodString>>;
50
+ picture: z.ZodOptional<z.ZodOptional<z.ZodString>>;
51
+ profile: z.ZodOptional<z.ZodOptional<z.ZodString>>;
52
+ website: z.ZodOptional<z.ZodOptional<z.ZodString>>;
53
+ birthdate: z.ZodOptional<z.ZodOptional<z.ZodString>>;
54
+ zoneinfo: z.ZodOptional<z.ZodOptional<z.ZodString>>;
55
+ locale: z.ZodOptional<z.ZodOptional<z.ZodString>>;
56
+ updated_at: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
57
+ email: z.ZodOptional<z.ZodOptional<z.ZodString>>;
58
+ email_verified: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
59
+ phone_number: z.ZodOptional<z.ZodOptional<z.ZodString>>;
60
+ phone_number_verified: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
61
+ address: z.ZodOptional<z.ZodOptional<z.ZodObject<{
62
+ formatted: z.ZodOptional<z.ZodString>;
63
+ street_address: z.ZodOptional<z.ZodString>;
64
+ locality: z.ZodOptional<z.ZodString>;
65
+ region: z.ZodOptional<z.ZodString>;
66
+ postal_code: z.ZodOptional<z.ZodString>;
67
+ country: z.ZodOptional<z.ZodString>;
68
+ }, "strip", z.ZodTypeAny, {
69
+ formatted?: string | undefined;
70
+ street_address?: string | undefined;
71
+ locality?: string | undefined;
72
+ region?: string | undefined;
73
+ postal_code?: string | undefined;
74
+ country?: string | undefined;
75
+ }, {
76
+ formatted?: string | undefined;
77
+ street_address?: string | undefined;
78
+ locality?: string | undefined;
79
+ region?: string | undefined;
80
+ postal_code?: string | undefined;
81
+ country?: string | undefined;
82
+ }>>>;
18
83
  htm: z.ZodOptional<z.ZodOptional<z.ZodString>>;
19
84
  htu: z.ZodOptional<z.ZodOptional<z.ZodString>>;
20
85
  ath: z.ZodOptional<z.ZodOptional<z.ZodString>>;
21
86
  sub: z.ZodOptional<z.ZodOptional<z.ZodString>>;
22
- preferred_username: z.ZodOptional<z.ZodOptional<z.ZodString>>;
23
- email: z.ZodOptional<z.ZodOptional<z.ZodString>>;
24
- email_verified: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
25
- picture: z.ZodOptional<z.ZodOptional<z.ZodString>>;
26
87
  nbf: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
27
- acr: z.ZodOptional<z.ZodOptional<z.ZodString>>;
28
88
  azp: z.ZodOptional<z.ZodOptional<z.ZodString>>;
29
89
  amr: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
30
90
  cnf: z.ZodOptional<z.ZodOptional<z.ZodObject<{
@@ -1308,86 +1368,57 @@ export declare const tokenClaimsSchema: z.ZodIntersection<z.ZodObject<{
1308
1368
  jkt?: string | undefined;
1309
1369
  osc?: string | undefined;
1310
1370
  }>>>;
1311
- client_id: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1312
- scope: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1313
1371
  at_hash: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1314
1372
  c_hash: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1315
1373
  s_hash: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1316
- auth_time: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
1317
- family_name: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1318
- given_name: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1319
- middle_name: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1320
- nickname: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1321
- gender: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1322
- profile: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1323
- website: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1324
- birthdate: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1325
- zoneinfo: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1326
- locale: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1327
- updated_at: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
1328
- phone_number: z.ZodOptional<z.ZodOptional<z.ZodString>>;
1329
- phone_number_verified: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
1330
- address: z.ZodOptional<z.ZodOptional<z.ZodObject<{
1331
- formatted: z.ZodOptional<z.ZodString>;
1332
- street_address: z.ZodOptional<z.ZodString>;
1333
- locality: z.ZodOptional<z.ZodString>;
1334
- region: z.ZodOptional<z.ZodString>;
1335
- postal_code: z.ZodOptional<z.ZodString>;
1336
- country: z.ZodOptional<z.ZodString>;
1337
- }, "strip", z.ZodTypeAny, {
1338
- formatted?: string | undefined;
1339
- street_address?: string | undefined;
1340
- locality?: string | undefined;
1341
- region?: string | undefined;
1342
- postal_code?: string | undefined;
1343
- country?: string | undefined;
1344
- }, {
1345
- formatted?: string | undefined;
1346
- street_address?: string | undefined;
1347
- locality?: string | undefined;
1348
- region?: string | undefined;
1349
- postal_code?: string | undefined;
1350
- country?: string | undefined;
1351
- }>>>;
1352
- authorization_details: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
1353
- type: z.ZodString;
1354
- locations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1355
- actions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1356
- datatypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1357
- identifier: z.ZodOptional<z.ZodString>;
1358
- privileges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1359
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
1360
- type: z.ZodString;
1361
- locations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1362
- actions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1363
- datatypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1364
- identifier: z.ZodOptional<z.ZodString>;
1365
- privileges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1366
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
1367
- type: z.ZodString;
1368
- locations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1369
- actions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1370
- datatypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1371
- identifier: z.ZodOptional<z.ZodString>;
1372
- privileges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1373
- }, z.ZodTypeAny, "passthrough">>, "many">>>;
1374
1374
  }, {
1375
1375
  sub: z.ZodString;
1376
1376
  client_id: z.ZodString;
1377
1377
  }>, "strip", z.ZodTypeAny, {
1378
- sub: string;
1379
1378
  client_id: string;
1379
+ sub: string;
1380
1380
  nonce?: string | undefined;
1381
+ scope?: string | undefined;
1382
+ authorization_details?: z.objectOutputType<{
1383
+ type: z.ZodString;
1384
+ locations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1385
+ actions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1386
+ datatypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1387
+ identifier: z.ZodOptional<z.ZodString>;
1388
+ privileges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1389
+ }, z.ZodTypeAny, "passthrough">[] | undefined;
1390
+ auth_time?: number | undefined;
1391
+ acr?: string | undefined;
1381
1392
  name?: string | undefined;
1382
- htm?: string | undefined;
1383
- htu?: string | undefined;
1384
- ath?: string | undefined;
1393
+ family_name?: string | undefined;
1394
+ given_name?: string | undefined;
1395
+ middle_name?: string | undefined;
1396
+ nickname?: string | undefined;
1385
1397
  preferred_username?: string | undefined;
1398
+ gender?: string | undefined;
1399
+ picture?: string | undefined;
1400
+ profile?: string | undefined;
1401
+ website?: string | undefined;
1402
+ birthdate?: string | undefined;
1403
+ zoneinfo?: string | undefined;
1404
+ locale?: string | undefined;
1405
+ updated_at?: number | undefined;
1386
1406
  email?: string | undefined;
1387
1407
  email_verified?: boolean | undefined;
1388
- picture?: string | undefined;
1408
+ phone_number?: string | undefined;
1409
+ phone_number_verified?: boolean | undefined;
1410
+ address?: {
1411
+ formatted?: string | undefined;
1412
+ street_address?: string | undefined;
1413
+ locality?: string | undefined;
1414
+ region?: string | undefined;
1415
+ postal_code?: string | undefined;
1416
+ country?: string | undefined;
1417
+ } | undefined;
1418
+ htm?: string | undefined;
1419
+ htu?: string | undefined;
1420
+ ath?: string | undefined;
1389
1421
  nbf?: number | undefined;
1390
- acr?: string | undefined;
1391
1422
  azp?: string | undefined;
1392
1423
  amr?: string[] | undefined;
1393
1424
  cnf?: {
@@ -1494,22 +1525,40 @@ export declare const tokenClaimsSchema: z.ZodIntersection<z.ZodObject<{
1494
1525
  jkt?: string | undefined;
1495
1526
  osc?: string | undefined;
1496
1527
  } | undefined;
1497
- scope?: string | undefined;
1498
1528
  at_hash?: string | undefined;
1499
1529
  c_hash?: string | undefined;
1500
1530
  s_hash?: string | undefined;
1531
+ }, {
1532
+ client_id: string;
1533
+ sub: string;
1534
+ nonce?: string | undefined;
1535
+ scope?: string | undefined;
1536
+ authorization_details?: z.objectInputType<{
1537
+ type: z.ZodString;
1538
+ locations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1539
+ actions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1540
+ datatypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1541
+ identifier: z.ZodOptional<z.ZodString>;
1542
+ privileges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1543
+ }, z.ZodTypeAny, "passthrough">[] | undefined;
1501
1544
  auth_time?: number | undefined;
1545
+ acr?: string | undefined;
1546
+ name?: string | undefined;
1502
1547
  family_name?: string | undefined;
1503
1548
  given_name?: string | undefined;
1504
1549
  middle_name?: string | undefined;
1505
1550
  nickname?: string | undefined;
1551
+ preferred_username?: string | undefined;
1506
1552
  gender?: string | undefined;
1553
+ picture?: string | undefined;
1507
1554
  profile?: string | undefined;
1508
1555
  website?: string | undefined;
1509
1556
  birthdate?: string | undefined;
1510
1557
  zoneinfo?: string | undefined;
1511
1558
  locale?: string | undefined;
1512
1559
  updated_at?: number | undefined;
1560
+ email?: string | undefined;
1561
+ email_verified?: boolean | undefined;
1513
1562
  phone_number?: string | undefined;
1514
1563
  phone_number_verified?: boolean | undefined;
1515
1564
  address?: {
@@ -1520,28 +1569,10 @@ export declare const tokenClaimsSchema: z.ZodIntersection<z.ZodObject<{
1520
1569
  postal_code?: string | undefined;
1521
1570
  country?: string | undefined;
1522
1571
  } | undefined;
1523
- authorization_details?: z.objectOutputType<{
1524
- type: z.ZodString;
1525
- locations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1526
- actions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1527
- datatypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1528
- identifier: z.ZodOptional<z.ZodString>;
1529
- privileges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1530
- }, z.ZodTypeAny, "passthrough">[] | undefined;
1531
- }, {
1532
- sub: string;
1533
- client_id: string;
1534
- nonce?: string | undefined;
1535
- name?: string | undefined;
1536
1572
  htm?: string | undefined;
1537
1573
  htu?: string | undefined;
1538
1574
  ath?: string | undefined;
1539
- preferred_username?: string | undefined;
1540
- email?: string | undefined;
1541
- email_verified?: boolean | undefined;
1542
- picture?: string | undefined;
1543
1575
  nbf?: number | undefined;
1544
- acr?: string | undefined;
1545
1576
  azp?: string | undefined;
1546
1577
  amr?: string[] | undefined;
1547
1578
  cnf?: {
@@ -1648,40 +1679,9 @@ export declare const tokenClaimsSchema: z.ZodIntersection<z.ZodObject<{
1648
1679
  jkt?: string | undefined;
1649
1680
  osc?: string | undefined;
1650
1681
  } | undefined;
1651
- scope?: string | undefined;
1652
1682
  at_hash?: string | undefined;
1653
1683
  c_hash?: string | undefined;
1654
1684
  s_hash?: string | undefined;
1655
- auth_time?: number | undefined;
1656
- family_name?: string | undefined;
1657
- given_name?: string | undefined;
1658
- middle_name?: string | undefined;
1659
- nickname?: string | undefined;
1660
- gender?: string | undefined;
1661
- profile?: string | undefined;
1662
- website?: string | undefined;
1663
- birthdate?: string | undefined;
1664
- zoneinfo?: string | undefined;
1665
- locale?: string | undefined;
1666
- updated_at?: number | undefined;
1667
- phone_number?: string | undefined;
1668
- phone_number_verified?: boolean | undefined;
1669
- address?: {
1670
- formatted?: string | undefined;
1671
- street_address?: string | undefined;
1672
- locality?: string | undefined;
1673
- region?: string | undefined;
1674
- postal_code?: string | undefined;
1675
- country?: string | undefined;
1676
- } | undefined;
1677
- authorization_details?: z.objectInputType<{
1678
- type: z.ZodString;
1679
- locations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1680
- actions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1681
- datatypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1682
- identifier: z.ZodOptional<z.ZodString>;
1683
- privileges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1684
- }, z.ZodTypeAny, "passthrough">[] | undefined;
1685
1685
  }>>;
1686
1686
  export type TokenClaims = Simplify<z.infer<typeof tokenClaimsSchema>>;
1687
1687
  //# sourceMappingURL=token-claims.d.ts.map
@@ -1,10 +1,10 @@
1
- import { OAuthAuthenticationRequestParameters, OAuthAuthorizationDetails } from '@atproto/oauth-types';
1
+ import { OAuthAuthorizationDetails, OAuthAuthorizationRequestParameters } from '@atproto/oauth-types';
2
2
  import { ClientAuth } from '../client/client-auth.js';
3
3
  import { ClientId } from '../client/client-id.js';
4
4
  import { DeviceId } from '../device/device-id.js';
5
5
  import { Sub } from '../oidc/sub.js';
6
6
  import { Code } from '../request/code.js';
7
- export type { ClientAuth, ClientId, Code, DeviceId, OAuthAuthenticationRequestParameters, OAuthAuthorizationDetails, Sub, };
7
+ export type { ClientAuth, ClientId, Code, DeviceId, OAuthAuthorizationDetails, OAuthAuthorizationRequestParameters, Sub, };
8
8
  export type TokenData = {
9
9
  createdAt: Date;
10
10
  updatedAt: Date;
@@ -13,7 +13,7 @@ export type TokenData = {
13
13
  clientAuth: ClientAuth;
14
14
  deviceId: DeviceId | null;
15
15
  sub: Sub;
16
- parameters: OAuthAuthenticationRequestParameters;
16
+ parameters: OAuthAuthorizationRequestParameters;
17
17
  details: OAuthAuthorizationDetails | null;
18
18
  code: Code | null;
19
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"token-data.d.ts","sourceRoot":"","sources":["../../src/token/token-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EACpC,yBAAyB,EAC1B,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAEzC,YAAY,EACV,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,oCAAoC,EACpC,yBAAyB,EACzB,GAAG,GACJ,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;IACzB,GAAG,EAAE,GAAG,CAAA;IACR,UAAU,EAAE,oCAAoC,CAAA;IAChD,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAAA;IACzC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CAClB,CAAA"}
1
+ {"version":3,"file":"token-data.d.ts","sourceRoot":"","sources":["../../src/token/token-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,mCAAmC,EACpC,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAEzC,YAAY,EACV,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,yBAAyB,EACzB,mCAAmC,EACnC,GAAG,GACJ,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;IACzB,GAAG,EAAE,GAAG,CAAA;IACR,UAAU,EAAE,mCAAmC,CAAA;IAC/C,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAAA;IACzC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CAClB,CAAA"}
@@ -1,4 +1,4 @@
1
- import { AccessToken, OAuthAuthenticationRequestParameters, OAuthTokenResponse, OAuthTokenType } from '@atproto/oauth-types';
1
+ import { OAuthAccessToken, OAuthAuthorizationRequestParameters, OAuthAuthorizationCodeGrantTokenRequest, OAuthClientCredentialsGrantTokenRequest, OAuthPasswordGrantTokenRequest, OAuthRefreshTokenGrantTokenRequest, OAuthTokenResponse, OAuthTokenType } from '@atproto/oauth-types';
2
2
  import { AccessTokenType } from '../access-token/access-token-type.js';
3
3
  import { DeviceAccountInfo } from '../account/account-store.js';
4
4
  import { Account } from '../account/account.js';
@@ -9,7 +9,6 @@ import { OAuthHooks } from '../oauth-hooks.js';
9
9
  import { Signer } from '../signer/signer.js';
10
10
  import { TokenId } from './token-id.js';
11
11
  import { TokenInfo, TokenStore } from './token-store.js';
12
- import { CodeGrantRequest, RefreshGrantRequest } from './types.js';
13
12
  import { VerifyTokenClaimsOptions, VerifyTokenClaimsResult } from './verify-token-claims.js';
14
13
  export type AuthenticateTokenIdResult = VerifyTokenClaimsResult & {
15
14
  tokenInfo: TokenInfo;
@@ -26,10 +25,10 @@ export declare class TokenManager {
26
25
  create(client: Client, clientAuth: ClientAuth, account: Account, device: null | {
27
26
  id: DeviceId;
28
27
  info: DeviceAccountInfo;
29
- }, parameters: OAuthAuthenticationRequestParameters, input: CodeGrantRequest, dpopJkt: null | string): Promise<OAuthTokenResponse>;
30
- protected buildTokenResponse(client: Client, accessToken: AccessToken, refreshToken: string | undefined, expiresAt: Date, parameters: OAuthAuthenticationRequestParameters, account: Account, authorizationDetails: null | any): Promise<OAuthTokenResponse>;
28
+ }, parameters: OAuthAuthorizationRequestParameters, input: OAuthAuthorizationCodeGrantTokenRequest | OAuthClientCredentialsGrantTokenRequest | OAuthPasswordGrantTokenRequest, dpopJkt: null | string): Promise<OAuthTokenResponse>;
29
+ protected buildTokenResponse(client: Client, accessToken: OAuthAccessToken, refreshToken: string | undefined, expiresAt: Date, parameters: OAuthAuthorizationRequestParameters, account: Account, authorizationDetails: null | any): Promise<OAuthTokenResponse>;
31
30
  protected validateAccess(client: Client, clientAuth: ClientAuth, tokenInfo: TokenInfo): Promise<void>;
32
- refresh(client: Client, clientAuth: ClientAuth, input: RefreshGrantRequest, dpopJkt: null | string): Promise<OAuthTokenResponse>;
31
+ refresh(client: Client, clientAuth: ClientAuth, input: OAuthRefreshTokenGrantTokenRequest, dpopJkt: null | string): Promise<OAuthTokenResponse>;
33
32
  /**
34
33
  * @see {@link https://datatracker.ietf.org/doc/html/rfc7009#section-2.2 | RFC7009 Section 2.2}
35
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/token/token-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/token/token-manager.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,6 @@ const invalid_grant_error_js_1 = require("../errors/invalid-grant-error.js");
12
12
  const invalid_request_error_js_1 = require("../errors/invalid-request-error.js");
13
13
  const invalid_token_error_js_1 = require("../errors/invalid-token-error.js");
14
14
  const date_js_1 = require("../lib/util/date.js");
15
- const redirect_uri_js_1 = require("../lib/util/redirect-uri.js");
16
15
  const code_js_1 = require("../request/code.js");
17
16
  const refresh_token_js_1 = require("./refresh-token.js");
18
17
  const token_id_js_1 = require("./token-id.js");
@@ -40,16 +39,19 @@ class TokenManager {
40
39
  return this.accessTokenType === access_token_type_js_1.AccessTokenType.jwt;
41
40
  }
42
41
  async create(client, clientAuth, account, device, parameters, input, dpopJkt) {
42
+ // @NOTE the atproto specific DPoP requirement is enforced though the
43
+ // "dpop_bound_access_tokens" metadata, which is enforced by the
44
+ // ClientManager class.
43
45
  if (client.metadata.dpop_bound_access_tokens && !dpopJkt) {
44
46
  throw new invalid_dpop_proof_error_js_1.InvalidDpopProofError('DPoP proof required');
45
47
  }
46
48
  if (!parameters.dpop_jkt) {
49
+ // Allow clients to bind their access tokens to a DPoP key during
50
+ // token request if they didn't provide a "dpop_jkt" during the
51
+ // authorization request.
47
52
  if (dpopJkt)
48
53
  parameters = { ...parameters, dpop_jkt: dpopJkt };
49
54
  }
50
- else if (!dpopJkt) {
51
- throw new invalid_dpop_proof_error_js_1.InvalidDpopProofError('DPoP proof required');
52
- }
53
55
  else if (parameters.dpop_jkt !== dpopJkt) {
54
56
  throw new invalid_dpop_key_binding_error_js_1.InvalidDpopKeyBindingError();
55
57
  }
@@ -62,66 +64,64 @@ class TokenManager {
62
64
  if (!client.metadata.grant_types.includes(input.grant_type)) {
63
65
  throw new invalid_grant_error_js_1.InvalidGrantError(`This client is not allowed to use the "${input.grant_type}" grant type`);
64
66
  }
67
+ let code = null;
65
68
  switch (input.grant_type) {
66
- case 'authorization_code':
67
- if (!parameters.code_challenge || !parameters.code_challenge_method) {
68
- throw new invalid_grant_error_js_1.InvalidGrantError('PKCE is required');
69
+ case 'authorization_code': {
70
+ if (!(0, code_js_1.isCode)(input.code)) {
71
+ throw new invalid_grant_error_js_1.InvalidGrantError('Invalid code');
69
72
  }
70
- if (!parameters.redirect_uri) {
71
- const redirect_uri = client.metadata.redirect_uris.find((uri) => (0, redirect_uri_js_1.compareRedirectUri)(uri, input.redirect_uri));
72
- if (redirect_uri) {
73
- parameters = { ...parameters, redirect_uri };
74
- }
75
- else {
76
- throw new invalid_grant_error_js_1.InvalidGrantError(`Invalid redirect_uri`);
77
- }
73
+ const tokenInfo = await this.store.findTokenByCode(input.code);
74
+ if (tokenInfo) {
75
+ await this.store.deleteToken(tokenInfo.id);
76
+ throw new invalid_grant_error_js_1.InvalidGrantError(`Code replayed`);
78
77
  }
79
- else if (parameters.redirect_uri !== input.redirect_uri) {
80
- throw new invalid_grant_error_js_1.InvalidGrantError('This code was issued for another redirect_uri');
78
+ code = input.code;
79
+ if (parameters.redirect_uri !== input.redirect_uri) {
80
+ throw new invalid_grant_error_js_1.InvalidGrantError('The redirect_uri parameter must match the one used in the authorization request');
81
81
  }
82
- break;
83
- default:
84
- throw new Error(`Unsupported grant type "${input.grant_type}"`);
85
- }
86
- if (parameters.code_challenge) {
87
- if (!('code_verifier' in input) || !input.code_verifier) {
88
- throw new invalid_grant_error_js_1.InvalidGrantError('code_verifier is required');
89
- }
90
- // Prevent client from generating too short code_verifiers
91
- if (input.code_verifier.length < 43) {
92
- throw new invalid_grant_error_js_1.InvalidGrantError('code_verifier too short');
93
- }
94
- switch (parameters.code_challenge_method) {
95
- case undefined: // Default is "plain" (per spec)
96
- case 'plain': {
97
- if (parameters.code_challenge !== input.code_verifier) {
98
- throw new invalid_grant_error_js_1.InvalidGrantError('Invalid code_verifier');
82
+ if (parameters.code_challenge) {
83
+ if (!input.code_verifier) {
84
+ throw new invalid_grant_error_js_1.InvalidGrantError('code_verifier is required');
99
85
  }
100
- break;
101
- }
102
- case 'S256': {
103
- // Because the code_challenge is base64url-encoded, we will decode
104
- // it in order to compare based on bytes.
105
- const inputChallenge = Buffer.from(parameters.code_challenge, 'base64');
106
- const computedChallenge = (0, node_crypto_1.createHash)('sha256')
107
- .update(input.code_verifier)
108
- .digest();
109
- if (inputChallenge.compare(computedChallenge) !== 0) {
110
- throw new invalid_grant_error_js_1.InvalidGrantError('Invalid code_verifier');
86
+ if (input.code_verifier.length < 43) {
87
+ throw new invalid_grant_error_js_1.InvalidGrantError('code_verifier too short');
111
88
  }
112
- break;
89
+ switch (parameters.code_challenge_method ?? 'plain') {
90
+ case 'plain': {
91
+ if (parameters.code_challenge !== input.code_verifier) {
92
+ throw new invalid_grant_error_js_1.InvalidGrantError('Invalid code_verifier');
93
+ }
94
+ break;
95
+ }
96
+ case 'S256': {
97
+ const inputChallenge = Buffer.from(parameters.code_challenge, 'base64');
98
+ const computedChallenge = (0, node_crypto_1.createHash)('sha256')
99
+ .update(input.code_verifier)
100
+ .digest();
101
+ if (inputChallenge.compare(computedChallenge) !== 0) {
102
+ throw new invalid_grant_error_js_1.InvalidGrantError('Invalid code_verifier');
103
+ }
104
+ break;
105
+ }
106
+ default: {
107
+ // Should never happen (because request validation should catch this)
108
+ throw new Error(`Unsupported code_challenge_method`);
109
+ }
110
+ }
111
+ }
112
+ else if (input.code_verifier !== undefined) {
113
+ throw new invalid_request_error_js_1.InvalidRequestError("code_challenge parameter wasn't provided");
113
114
  }
114
- default: {
115
- throw new invalid_request_error_js_1.InvalidRequestError(`Unsupported code_challenge_method ${parameters.code_challenge_method}`);
115
+ if (!device) {
116
+ // Fool-proofing (authorization_code grant should always have a device)
117
+ throw new invalid_request_error_js_1.InvalidRequestError('consent was not given for this device');
116
118
  }
119
+ break;
117
120
  }
118
- }
119
- const code = 'code' in input ? input.code : undefined;
120
- if (code) {
121
- const tokenInfo = await this.store.findTokenByCode(code);
122
- if (tokenInfo) {
123
- await this.store.deleteToken(tokenInfo.id);
124
- throw new invalid_grant_error_js_1.InvalidGrantError(`Code replayed`);
121
+ default: {
122
+ // Other grants (e.g "password", "client_credentials") could be added
123
+ // here in the future...
124
+ throw new invalid_request_error_js_1.InvalidRequestError(`Unsupported grant type "${input.grant_type}"`);
125
125
  }
126
126
  }
127
127
  const tokenId = await (0, token_id_js_1.generateTokenId)();
@@ -141,22 +141,31 @@ class TokenManager {
141
141
  sub: account.sub,
142
142
  parameters,
143
143
  details: authorizationDetails ?? null,
144
- code: code ?? null,
144
+ code,
145
145
  };
146
146
  await this.store.createToken(tokenId, tokenData, refreshToken);
147
- const accessToken = !this.useJwtAccessToken(account)
148
- ? tokenId
149
- : await this.signer.accessToken(client, parameters, account, {
150
- // We don't specify the alg here. We suppose the Resource server will be
151
- // able to verify the token using any alg.
152
- alg: undefined,
153
- exp: expiresAt,
154
- iat: now,
155
- jti: tokenId,
156
- cnf: parameters.dpop_jkt ? { jkt: parameters.dpop_jkt } : undefined,
157
- authorization_details: authorizationDetails,
158
- });
159
- return this.buildTokenResponse(client, accessToken, refreshToken, expiresAt, parameters, account, authorizationDetails);
147
+ try {
148
+ const accessToken = !this.useJwtAccessToken(account)
149
+ ? tokenId
150
+ : await this.signer.accessToken(client, parameters, {
151
+ // We don't specify the alg here. We suppose the Resource server will be
152
+ // able to verify the token using any alg.
153
+ aud: account.aud,
154
+ sub: account.sub,
155
+ alg: undefined,
156
+ exp: expiresAt,
157
+ iat: now,
158
+ jti: tokenId,
159
+ cnf: parameters.dpop_jkt ? { jkt: parameters.dpop_jkt } : undefined,
160
+ authorization_details: authorizationDetails,
161
+ });
162
+ return this.buildTokenResponse(client, accessToken, refreshToken, expiresAt, parameters, account, authorizationDetails);
163
+ }
164
+ catch (err) {
165
+ // Just in case the token could not be issued, we delete it from the store
166
+ await this.store.deleteToken(tokenId);
167
+ throw err;
168
+ }
160
169
  }
161
170
  async buildTokenResponse(client, accessToken, refreshToken, expiresAt, parameters, account, authorizationDetails) {
162
171
  const tokenResponse = {
@@ -190,17 +199,30 @@ class TokenManager {
190
199
  }
191
200
  }
192
201
  async refresh(client, clientAuth, input, dpopJkt) {
193
- const tokenInfo = await this.store.findTokenByRefreshToken(input.refresh_token);
202
+ const refreshTokenParsed = refresh_token_js_1.refreshTokenSchema.safeParse(input.refresh_token);
203
+ if (!refreshTokenParsed.success) {
204
+ throw new invalid_request_error_js_1.InvalidRequestError('Invalid refresh token');
205
+ }
206
+ const refreshToken = refreshTokenParsed.data;
207
+ const tokenInfo = await this.store.findTokenByRefreshToken(refreshToken);
194
208
  if (!tokenInfo?.currentRefreshToken) {
195
209
  throw new invalid_grant_error_js_1.InvalidGrantError(`Invalid refresh token`);
196
210
  }
197
211
  const { account, data } = tokenInfo;
198
212
  const { parameters } = data;
199
213
  try {
200
- if (tokenInfo.currentRefreshToken !== input.refresh_token) {
214
+ if (tokenInfo.currentRefreshToken !== refreshToken) {
201
215
  throw new invalid_grant_error_js_1.InvalidGrantError(`refresh token replayed`);
202
216
  }
203
217
  await this.validateAccess(client, clientAuth, tokenInfo);
218
+ if (input.grant_type !== 'refresh_token') {
219
+ // Fool-proofing (should never happen)
220
+ throw new invalid_grant_error_js_1.InvalidGrantError(`Invalid grant type`);
221
+ }
222
+ if (!client.metadata.grant_types.includes(input.grant_type)) {
223
+ // In case the client metadata was updated after the token was issued
224
+ throw new invalid_grant_error_js_1.InvalidGrantError(`This client is not allowed to use the "${input.grant_type}" grant type`);
225
+ }
204
226
  if (parameters.dpop_jkt) {
205
227
  if (!dpopJkt) {
206
228
  throw new invalid_dpop_proof_error_js_1.InvalidDpopProofError('DPoP proof required');
@@ -250,9 +272,11 @@ class TokenManager {
250
272
  });
251
273
  const accessToken = !this.useJwtAccessToken(account)
252
274
  ? nextTokenId
253
- : await this.signer.accessToken(client, parameters, account, {
275
+ : await this.signer.accessToken(client, parameters, {
254
276
  // We don't specify the alg here. We suppose the Resource server will be
255
277
  // able to verify the token using any alg.
278
+ aud: account.aud,
279
+ sub: account.sub,
256
280
  alg: undefined,
257
281
  exp: expiresAt,
258
282
  iat: now,