@atproto/oauth-provider 0.2.1 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. package/CHANGELOG.md +45 -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 +5 -4
  125. package/src/assets/app/components/accept-form.tsx +6 -2
  126. package/src/assets/app/components/client-name.tsx +10 -11
  127. package/src/assets/app/components/sign-in-form.tsx +31 -2
  128. package/src/assets/assets-middleware.ts +4 -2
  129. package/src/client/client-manager.ts +163 -161
  130. package/src/client/client-utils.ts +7 -12
  131. package/src/client/client.ts +112 -3
  132. package/src/constants.ts +0 -2
  133. package/src/errors/access-denied-error.ts +10 -4
  134. package/src/errors/account-selection-required-error.ts +2 -2
  135. package/src/errors/consent-required-error.ts +2 -2
  136. package/src/errors/invalid-authorization-details-error.ts +2 -2
  137. package/src/errors/invalid-client-id-error.ts +15 -4
  138. package/src/errors/invalid-client-metadata-error.ts +15 -3
  139. package/src/errors/invalid-parameters-error.ts +2 -2
  140. package/src/errors/invalid-scope-error.ts +15 -0
  141. package/src/errors/login-required-error.ts +2 -2
  142. package/src/lib/html/html.ts +14 -12
  143. package/src/lib/http/parser.ts +21 -8
  144. package/src/lib/http/request.ts +1 -23
  145. package/src/lib/http/stream.ts +29 -60
  146. package/src/lib/util/authorization-header.ts +5 -2
  147. package/src/lib/util/hostname.ts +9 -5
  148. package/src/metadata/build-metadata.ts +3 -1
  149. package/src/oauth-errors.ts +1 -0
  150. package/src/oauth-hooks.ts +3 -3
  151. package/src/oauth-provider.ts +368 -269
  152. package/src/oauth-verifier.ts +2 -2
  153. package/src/output/build-authorize-data.ts +2 -2
  154. package/src/output/send-authorize-redirect.ts +7 -6
  155. package/src/request/request-data.ts +2 -2
  156. package/src/request/request-info.ts +2 -2
  157. package/src/request/request-manager.ts +129 -103
  158. package/src/signer/signer.ts +24 -25
  159. package/src/token/token-data.ts +3 -3
  160. package/src/token/token-manager.ts +141 -99
  161. package/src/token/verify-token-claims.ts +3 -3
  162. package/dist/request/types.d.ts +0 -328
  163. package/dist/request/types.d.ts.map +0 -1
  164. package/dist/request/types.js +0 -27
  165. package/dist/request/types.js.map +0 -1
  166. package/dist/token/types.d.ts +0 -250
  167. package/dist/token/types.d.ts.map +0 -1
  168. package/dist/token/types.js +0 -36
  169. package/dist/token/types.js.map +0 -1
  170. package/src/request/types.ts +0 -48
  171. 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":"AACA,OAAO,EAEL,gBAAgB,EAChB,mCAAmC,EACnC,uCAAuC,EACvC,uCAAuC,EACvC,8BAA8B,EAC9B,kCAAkC,EAClC,kBAAkB,EAClB,cAAc,EACf,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAQ5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAOjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAQ5C,OAAO,EACL,OAAO,EAIR,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EAExB,MAAM,0BAA0B,CAAA;AAEjC,MAAM,MAAM,yBAAyB,GAAG,uBAAuB,GAAG;IAChE,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,qBAAa,YAAY;IAErB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU;IACpC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACjC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU;IACpC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe;IACnD,SAAS,CAAC,QAAQ,CAAC,WAAW;gBAJX,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,EACjB,eAAe,EAAE,eAAe,EAChC,WAAW,SAAgB;IAGhD,SAAS,CAAC,iBAAiB,CAAC,GAAG,OAAa;IAI5C,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO;IAQtC,MAAM,CACV,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,IAAI,GAAG;QAAE,EAAE,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,iBAAiB,CAAA;KAAE,EACxD,UAAU,EAAE,mCAAmC,EAC/C,KAAK,EACD,uCAAuC,GACvC,uCAAuC,GACvC,8BAA8B,EAClC,OAAO,EAAE,IAAI,GAAG,MAAM,GACrB,OAAO,CAAC,kBAAkB,CAAC;cA0Kd,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,SAAS,EAAE,IAAI,EACf,UAAU,EAAE,mCAAmC,EAC/C,OAAO,EAAE,OAAO,EAChB,oBAAoB,EAAE,IAAI,GAAG,GAAG,GAC/B,OAAO,CAAC,kBAAkB,CAAC;cAoBd,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS;IAmBhB,OAAO,CACX,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,kCAAkC,EACzC,OAAO,EAAE,IAAI,GAAG,MAAM,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAiI9B;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC1C;;;;OAIG;IACG,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,SAAS,CAAC;cAoBL,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA0CjE,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO;IAcxD,mBAAmB,CACvB,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,aAAa,CAAC,EAAE,wBAAwB,GACvC,OAAO,CAAC,yBAAyB,CAAC;CA0BtC"}
@@ -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,