@absolutejs/auth 0.13.1 → 0.13.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.
- package/dist/index.js +67 -69
- package/dist/index.js.map +3 -3
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -346,7 +346,7 @@ var providers = defineProviders({
|
|
|
346
346
|
"id"
|
|
347
347
|
]);
|
|
348
348
|
if (typeof subject !== "number") {
|
|
349
|
-
throw new Error(
|
|
349
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
350
350
|
}
|
|
351
351
|
return subject;
|
|
352
352
|
},
|
|
@@ -398,8 +398,8 @@ var providers = defineProviders({
|
|
|
398
398
|
},
|
|
399
399
|
extractSubjectFromIdentity(identity) {
|
|
400
400
|
const subject = extractPropFromIdentity(identity, ["account_id"]);
|
|
401
|
-
if (typeof subject !== "
|
|
402
|
-
throw new Error(
|
|
401
|
+
if (typeof subject !== "number") {
|
|
402
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
403
403
|
}
|
|
404
404
|
return subject;
|
|
405
405
|
},
|
|
@@ -506,8 +506,8 @@ var providers = defineProviders({
|
|
|
506
506
|
authorizationUrl: "https://bitbucket.org/site/oauth2/authorize",
|
|
507
507
|
extractSubjectFromIdentity(identity) {
|
|
508
508
|
const subject = extractPropFromIdentity(identity, ["uuid"]);
|
|
509
|
-
if (typeof subject !== "
|
|
510
|
-
throw new Error(
|
|
509
|
+
if (typeof subject !== "number") {
|
|
510
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
511
511
|
}
|
|
512
512
|
return subject;
|
|
513
513
|
},
|
|
@@ -530,8 +530,8 @@ var providers = defineProviders({
|
|
|
530
530
|
authorizationUrl: "https://account.box.com/api/oauth2/authorize",
|
|
531
531
|
extractSubjectFromIdentity(identity) {
|
|
532
532
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
533
|
-
if (typeof subject !== "
|
|
534
|
-
throw new Error(
|
|
533
|
+
if (typeof subject !== "number") {
|
|
534
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
535
535
|
}
|
|
536
536
|
return subject;
|
|
537
537
|
},
|
|
@@ -563,8 +563,8 @@ var providers = defineProviders({
|
|
|
563
563
|
"Response",
|
|
564
564
|
"membershipId"
|
|
565
565
|
]);
|
|
566
|
-
if (typeof subject !== "
|
|
567
|
-
throw new Error(
|
|
566
|
+
if (typeof subject !== "number") {
|
|
567
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
568
568
|
}
|
|
569
569
|
return subject;
|
|
570
570
|
},
|
|
@@ -590,8 +590,8 @@ var providers = defineProviders({
|
|
|
590
590
|
authorizationUrl: "https://www.coinbase.com/oauth/authorize",
|
|
591
591
|
extractSubjectFromIdentity(identity) {
|
|
592
592
|
const subject = extractPropFromIdentity(identity, ["data", "id"]);
|
|
593
|
-
if (typeof subject !== "
|
|
594
|
-
throw new Error(
|
|
593
|
+
if (typeof subject !== "number") {
|
|
594
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
595
595
|
}
|
|
596
596
|
return subject;
|
|
597
597
|
},
|
|
@@ -634,7 +634,7 @@ var providers = defineProviders({
|
|
|
634
634
|
extractSubjectFromIdentity(identity) {
|
|
635
635
|
const subject = extractPropFromIdentity(identity, ["data", "id"]);
|
|
636
636
|
if (typeof subject !== "number") {
|
|
637
|
-
throw new Error(
|
|
637
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
638
638
|
}
|
|
639
639
|
return subject;
|
|
640
640
|
},
|
|
@@ -658,7 +658,7 @@ var providers = defineProviders({
|
|
|
658
658
|
extractSubjectFromIdentity(identity) {
|
|
659
659
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
660
660
|
if (typeof subject !== "number") {
|
|
661
|
-
throw new Error(
|
|
661
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
662
662
|
}
|
|
663
663
|
return subject;
|
|
664
664
|
},
|
|
@@ -681,8 +681,8 @@ var providers = defineProviders({
|
|
|
681
681
|
authorizationUrl: "https://www.dropbox.com/oauth2/authorize",
|
|
682
682
|
extractSubjectFromIdentity(identity) {
|
|
683
683
|
const subject = extractPropFromIdentity(identity, ["account_id"]);
|
|
684
|
-
if (typeof subject !== "
|
|
685
|
-
throw new Error(
|
|
684
|
+
if (typeof subject !== "number") {
|
|
685
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
686
686
|
}
|
|
687
687
|
return subject;
|
|
688
688
|
},
|
|
@@ -710,8 +710,8 @@ var providers = defineProviders({
|
|
|
710
710
|
authorizationUrl: "https://www.epicgames.com/id/authorize",
|
|
711
711
|
extractSubjectFromIdentity(identity) {
|
|
712
712
|
const subject = extractPropFromIdentity(identity, ["account_id"]);
|
|
713
|
-
if (typeof subject !== "
|
|
714
|
-
throw new Error(
|
|
713
|
+
if (typeof subject !== "number") {
|
|
714
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
715
715
|
}
|
|
716
716
|
return subject;
|
|
717
717
|
},
|
|
@@ -739,7 +739,7 @@ var providers = defineProviders({
|
|
|
739
739
|
"user_id"
|
|
740
740
|
]);
|
|
741
741
|
if (typeof subject !== "number") {
|
|
742
|
-
throw new Error(
|
|
742
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
743
743
|
}
|
|
744
744
|
return subject;
|
|
745
745
|
},
|
|
@@ -781,11 +781,9 @@ var providers = defineProviders({
|
|
|
781
781
|
figma: {
|
|
782
782
|
authorizationUrl: "https://www.figma.com/oauth",
|
|
783
783
|
extractSubjectFromIdentity(identity) {
|
|
784
|
-
const subject = extractPropFromIdentity(identity, [
|
|
785
|
-
"user_id_string"
|
|
786
|
-
]);
|
|
784
|
+
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
787
785
|
if (typeof subject !== "string") {
|
|
788
|
-
throw new Error(
|
|
786
|
+
throw new Error(`Invalid identity data shape: expected string, got ${typeof subject}`);
|
|
789
787
|
}
|
|
790
788
|
return subject;
|
|
791
789
|
},
|
|
@@ -829,7 +827,7 @@ var providers = defineProviders({
|
|
|
829
827
|
extractSubjectFromIdentity(identity) {
|
|
830
828
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
831
829
|
if (typeof subject !== "number") {
|
|
832
|
-
throw new Error(
|
|
830
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
833
831
|
}
|
|
834
832
|
return subject;
|
|
835
833
|
},
|
|
@@ -978,7 +976,7 @@ var providers = defineProviders({
|
|
|
978
976
|
"user_id"
|
|
979
977
|
]);
|
|
980
978
|
if (typeof subject !== "number") {
|
|
981
|
-
throw new Error(
|
|
979
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
982
980
|
}
|
|
983
981
|
return subject;
|
|
984
982
|
},
|
|
@@ -1008,8 +1006,8 @@ var providers = defineProviders({
|
|
|
1008
1006
|
authorizationUrl: "https://lichess.org/oauth/authorize",
|
|
1009
1007
|
extractSubjectFromIdentity(identity) {
|
|
1010
1008
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1011
|
-
if (typeof subject !== "
|
|
1012
|
-
throw new Error(
|
|
1009
|
+
if (typeof subject !== "number") {
|
|
1010
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1013
1011
|
}
|
|
1014
1012
|
return subject;
|
|
1015
1013
|
},
|
|
@@ -1056,8 +1054,8 @@ var providers = defineProviders({
|
|
|
1056
1054
|
"viewer",
|
|
1057
1055
|
"id"
|
|
1058
1056
|
]);
|
|
1059
|
-
if (typeof subject !== "
|
|
1060
|
-
throw new Error(
|
|
1057
|
+
if (typeof subject !== "number") {
|
|
1058
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1061
1059
|
}
|
|
1062
1060
|
return subject;
|
|
1063
1061
|
},
|
|
@@ -1111,8 +1109,8 @@ var providers = defineProviders({
|
|
|
1111
1109
|
authorizationUrl: (config) => `${config.baseURL}/oauth/authorize`,
|
|
1112
1110
|
extractSubjectFromIdentity(identity) {
|
|
1113
1111
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1114
|
-
if (typeof subject !== "
|
|
1115
|
-
throw new Error(
|
|
1112
|
+
if (typeof subject !== "number") {
|
|
1113
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1116
1114
|
}
|
|
1117
1115
|
return subject;
|
|
1118
1116
|
},
|
|
@@ -1142,8 +1140,8 @@ var providers = defineProviders({
|
|
|
1142
1140
|
authorizationUrl: "https://auth.mercadolibre.com/authorization",
|
|
1143
1141
|
extractSubjectFromIdentity(identity) {
|
|
1144
1142
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1145
|
-
if (typeof subject !== "
|
|
1146
|
-
throw new Error(
|
|
1143
|
+
if (typeof subject !== "number") {
|
|
1144
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1147
1145
|
}
|
|
1148
1146
|
return subject;
|
|
1149
1147
|
},
|
|
@@ -1167,8 +1165,8 @@ var providers = defineProviders({
|
|
|
1167
1165
|
authorizationUrl: "https://auth.mercadopago.com/authorization",
|
|
1168
1166
|
extractSubjectFromIdentity(identity) {
|
|
1169
1167
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1170
|
-
if (typeof subject !== "
|
|
1171
|
-
throw new Error(
|
|
1168
|
+
if (typeof subject !== "number") {
|
|
1169
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1172
1170
|
}
|
|
1173
1171
|
return subject;
|
|
1174
1172
|
},
|
|
@@ -1211,7 +1209,7 @@ var providers = defineProviders({
|
|
|
1211
1209
|
extractSubjectFromIdentity(identity) {
|
|
1212
1210
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1213
1211
|
if (typeof subject !== "number") {
|
|
1214
|
-
throw new Error(
|
|
1212
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
1215
1213
|
}
|
|
1216
1214
|
return subject;
|
|
1217
1215
|
},
|
|
@@ -1238,8 +1236,8 @@ var providers = defineProviders({
|
|
|
1238
1236
|
"response",
|
|
1239
1237
|
"id"
|
|
1240
1238
|
]);
|
|
1241
|
-
if (typeof subject !== "
|
|
1242
|
-
throw new Error(
|
|
1239
|
+
if (typeof subject !== "number") {
|
|
1240
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1243
1241
|
}
|
|
1244
1242
|
return subject;
|
|
1245
1243
|
},
|
|
@@ -1262,8 +1260,8 @@ var providers = defineProviders({
|
|
|
1262
1260
|
authorizationUrl: "https://api.notion.com/v1/oauth/authorize",
|
|
1263
1261
|
extractSubjectFromIdentity(identity) {
|
|
1264
1262
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1265
|
-
if (typeof subject !== "
|
|
1266
|
-
throw new Error(
|
|
1263
|
+
if (typeof subject !== "number") {
|
|
1264
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1267
1265
|
}
|
|
1268
1266
|
return subject;
|
|
1269
1267
|
},
|
|
@@ -1315,7 +1313,7 @@ var providers = defineProviders({
|
|
|
1315
1313
|
extractSubjectFromIdentity(identity) {
|
|
1316
1314
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1317
1315
|
if (typeof subject !== "number") {
|
|
1318
|
-
throw new Error(
|
|
1316
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
1319
1317
|
}
|
|
1320
1318
|
return subject;
|
|
1321
1319
|
},
|
|
@@ -1338,8 +1336,8 @@ var providers = defineProviders({
|
|
|
1338
1336
|
authorizationUrl: "https://www.patreon.com/oauth2/authorize",
|
|
1339
1337
|
extractSubjectFromIdentity(identity) {
|
|
1340
1338
|
const subject = extractPropFromIdentity(identity, ["data", "id"]);
|
|
1341
|
-
if (typeof subject !== "
|
|
1342
|
-
throw new Error(
|
|
1339
|
+
if (typeof subject !== "number") {
|
|
1340
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1343
1341
|
}
|
|
1344
1342
|
return subject;
|
|
1345
1343
|
},
|
|
@@ -1388,7 +1386,7 @@ var providers = defineProviders({
|
|
|
1388
1386
|
extractSubjectFromIdentity(identity) {
|
|
1389
1387
|
const subject = extractPropFromIdentity(identity, ["x_user_id"]);
|
|
1390
1388
|
if (typeof subject !== "number") {
|
|
1391
|
-
throw new Error(
|
|
1389
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
1392
1390
|
}
|
|
1393
1391
|
return subject;
|
|
1394
1392
|
},
|
|
@@ -1413,7 +1411,7 @@ var providers = defineProviders({
|
|
|
1413
1411
|
extractSubjectFromIdentity(identity) {
|
|
1414
1412
|
const subject = extractPropFromIdentity(identity, ["x_user_id"]);
|
|
1415
1413
|
if (typeof subject !== "number") {
|
|
1416
|
-
throw new Error(
|
|
1414
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
1417
1415
|
}
|
|
1418
1416
|
return subject;
|
|
1419
1417
|
},
|
|
@@ -1437,8 +1435,8 @@ var providers = defineProviders({
|
|
|
1437
1435
|
authorizationUrl: "https://www.reddit.com/api/v1/authorize",
|
|
1438
1436
|
extractSubjectFromIdentity(identity) {
|
|
1439
1437
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1440
|
-
if (typeof subject !== "
|
|
1441
|
-
throw new Error(
|
|
1438
|
+
if (typeof subject !== "number") {
|
|
1439
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1442
1440
|
}
|
|
1443
1441
|
return subject;
|
|
1444
1442
|
},
|
|
@@ -1513,7 +1511,7 @@ var providers = defineProviders({
|
|
|
1513
1511
|
extractSubjectFromIdentity(identity) {
|
|
1514
1512
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1515
1513
|
if (typeof subject !== "number") {
|
|
1516
|
-
throw new Error(
|
|
1514
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
1517
1515
|
}
|
|
1518
1516
|
return subject;
|
|
1519
1517
|
},
|
|
@@ -1560,8 +1558,8 @@ var providers = defineProviders({
|
|
|
1560
1558
|
authorizationUrl: "https://accounts.spotify.com/authorize",
|
|
1561
1559
|
extractSubjectFromIdentity(identity) {
|
|
1562
1560
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1563
|
-
if (typeof subject !== "
|
|
1564
|
-
throw new Error(
|
|
1561
|
+
if (typeof subject !== "number") {
|
|
1562
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1565
1563
|
}
|
|
1566
1564
|
return subject;
|
|
1567
1565
|
},
|
|
@@ -1589,8 +1587,8 @@ var providers = defineProviders({
|
|
|
1589
1587
|
"currentUser",
|
|
1590
1588
|
"id"
|
|
1591
1589
|
]);
|
|
1592
|
-
if (typeof subject !== "
|
|
1593
|
-
throw new Error(
|
|
1590
|
+
if (typeof subject !== "number") {
|
|
1591
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1594
1592
|
}
|
|
1595
1593
|
return subject;
|
|
1596
1594
|
},
|
|
@@ -1621,7 +1619,7 @@ var providers = defineProviders({
|
|
|
1621
1619
|
extractSubjectFromIdentity(identity) {
|
|
1622
1620
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1623
1621
|
if (typeof subject !== "number") {
|
|
1624
|
-
throw new Error(
|
|
1622
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
1625
1623
|
}
|
|
1626
1624
|
return subject;
|
|
1627
1625
|
},
|
|
@@ -1654,8 +1652,8 @@ var providers = defineProviders({
|
|
|
1654
1652
|
authorizationUrl: (config) => `${config.baseURL}/webman/sso/SSOOauth.cgi?client_id=${config.clientId}&response_type=code&redirect_uri=${config.redirectUri}`,
|
|
1655
1653
|
extractSubjectFromIdentity(identity) {
|
|
1656
1654
|
const subject = extractPropFromIdentity(identity, ["data", "id"]);
|
|
1657
|
-
if (typeof subject !== "
|
|
1658
|
-
throw new Error(
|
|
1655
|
+
if (typeof subject !== "number") {
|
|
1656
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1659
1657
|
}
|
|
1660
1658
|
return subject;
|
|
1661
1659
|
},
|
|
@@ -1684,8 +1682,8 @@ var providers = defineProviders({
|
|
|
1684
1682
|
"data",
|
|
1685
1683
|
"open_id"
|
|
1686
1684
|
]);
|
|
1687
|
-
if (typeof subject !== "
|
|
1688
|
-
throw new Error(
|
|
1685
|
+
if (typeof subject !== "number") {
|
|
1686
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1689
1687
|
}
|
|
1690
1688
|
return subject;
|
|
1691
1689
|
},
|
|
@@ -1715,8 +1713,8 @@ var providers = defineProviders({
|
|
|
1715
1713
|
authorizationUrl: "https://v5api.tiltify.com/oauth/authorize",
|
|
1716
1714
|
extractSubjectFromIdentity(identity) {
|
|
1717
1715
|
const subject = extractPropFromIdentity(identity, ["data", "id"]);
|
|
1718
|
-
if (typeof subject !== "
|
|
1719
|
-
throw new Error(
|
|
1716
|
+
if (typeof subject !== "number") {
|
|
1717
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1720
1718
|
}
|
|
1721
1719
|
return subject;
|
|
1722
1720
|
},
|
|
@@ -1743,8 +1741,8 @@ var providers = defineProviders({
|
|
|
1743
1741
|
"user",
|
|
1744
1742
|
"name"
|
|
1745
1743
|
]);
|
|
1746
|
-
if (typeof subject !== "
|
|
1747
|
-
throw new Error(
|
|
1744
|
+
if (typeof subject !== "number") {
|
|
1745
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1748
1746
|
}
|
|
1749
1747
|
return subject;
|
|
1750
1748
|
},
|
|
@@ -1797,8 +1795,8 @@ var providers = defineProviders({
|
|
|
1797
1795
|
authorizationUrl: "https://twitter.com/i/oauth2/authorize",
|
|
1798
1796
|
extractSubjectFromIdentity(identity) {
|
|
1799
1797
|
const subject = extractPropFromIdentity(identity, ["data", "id"]);
|
|
1800
|
-
if (typeof subject !== "
|
|
1801
|
-
throw new Error(
|
|
1798
|
+
if (typeof subject !== "number") {
|
|
1799
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1802
1800
|
}
|
|
1803
1801
|
return subject;
|
|
1804
1802
|
},
|
|
@@ -1832,7 +1830,7 @@ var providers = defineProviders({
|
|
|
1832
1830
|
"id"
|
|
1833
1831
|
]);
|
|
1834
1832
|
if (typeof subject !== "number") {
|
|
1835
|
-
throw new Error(
|
|
1833
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
1836
1834
|
}
|
|
1837
1835
|
return subject;
|
|
1838
1836
|
},
|
|
@@ -1859,7 +1857,7 @@ var providers = defineProviders({
|
|
|
1859
1857
|
"userid"
|
|
1860
1858
|
]);
|
|
1861
1859
|
if (typeof subject !== "number") {
|
|
1862
|
-
throw new Error(
|
|
1860
|
+
throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);
|
|
1863
1861
|
}
|
|
1864
1862
|
return subject;
|
|
1865
1863
|
},
|
|
@@ -1965,8 +1963,8 @@ var providers = defineProviders({
|
|
|
1965
1963
|
},
|
|
1966
1964
|
extractSubjectFromIdentity(identity) {
|
|
1967
1965
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1968
|
-
if (typeof subject !== "
|
|
1969
|
-
throw new Error(
|
|
1966
|
+
if (typeof subject !== "number") {
|
|
1967
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
1970
1968
|
}
|
|
1971
1969
|
return subject;
|
|
1972
1970
|
},
|
|
@@ -1996,8 +1994,8 @@ var providers = defineProviders({
|
|
|
1996
1994
|
authorizationUrl: "https://zoom.us/oauth/authorize",
|
|
1997
1995
|
extractSubjectFromIdentity(identity) {
|
|
1998
1996
|
const subject = extractPropFromIdentity(identity, ["id"]);
|
|
1999
|
-
if (typeof subject !== "
|
|
2000
|
-
throw new Error(
|
|
1997
|
+
if (typeof subject !== "number") {
|
|
1998
|
+
throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);
|
|
2001
1999
|
}
|
|
2002
2000
|
return subject;
|
|
2003
2001
|
},
|
|
@@ -2777,5 +2775,5 @@ export {
|
|
|
2777
2775
|
absoluteAuth
|
|
2778
2776
|
};
|
|
2779
2777
|
|
|
2780
|
-
//# debugId=
|
|
2778
|
+
//# debugId=21F30351EC82AA0A64756E2164756E21
|
|
2781
2779
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../node_modules/citra/dist/index.js", "../src/index.ts", "../src/authorize.ts", "../src/constants.ts", "../src/callback.ts", "../src/sessionStore.ts", "../src/typeGuards.ts", "../src/profile.ts", "../src/protectRoute.ts", "../src/refresh.ts", "../src/revoke.ts", "../src/signout.ts", "../src/status.ts", "../src/utils.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"// @bun\n// src/constants.ts\nvar NUM_GENERATOR_BYTES = 32;\nvar BASE64_BLOCK_SIZE = 4;\n\n// src/utils.ts\nvar createOAuth2FetchError = async (response) => {\n const clone = response.clone();\n const prefix = `HTTP ${response.status} ${response.statusText} for ${response.url}`;\n const payload = await response.json().catch(() => null);\n if (payload && typeof payload === \"object\" && Object.keys(payload).length) {\n return new Error(`${prefix}\n${JSON.stringify(payload)}`);\n }\n const text = await clone.text().catch(() => \"\");\n if (text) {\n return new Error(`${prefix}\n${text}`);\n }\n return new Error(prefix);\n};\nvar encodeBase64 = (input) => {\n let raw;\n if (typeof input === \"string\") {\n raw = input;\n } else {\n const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);\n raw = bytes.reduce((acc, byte) => acc + String.fromCharCode(byte), \"\");\n }\n return btoa(raw);\n};\nvar decodeBase64 = (input, toUint8Array = false) => {\n const b64 = input.replace(/-/g, \"+\").replace(/_/g, \"/\") + \"==\".slice(0, (BASE64_BLOCK_SIZE - input.length % BASE64_BLOCK_SIZE) % BASE64_BLOCK_SIZE);\n const raw = atob(b64);\n if (!toUint8Array) {\n return raw;\n }\n const bytes = new Uint8Array(raw.length);\n for (let i = 0;i < raw.length; i++) {\n bytes[i] = raw.charCodeAt(i);\n }\n return bytes;\n};\nvar hmacSha256 = async (message, secret) => {\n const encoder = new TextEncoder;\n const key = await crypto.subtle.importKey(\"raw\", encoder.encode(secret), { hash: \"SHA-256\", name: \"HMAC\" }, false, [\"sign\"]);\n const sigBuffer = await crypto.subtle.sign(\"HMAC\", key, encoder.encode(message));\n return Array.from(new Uint8Array(sigBuffer)).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n};\nvar decodeJWT = (tokenString) => {\n const [headerSegment, payloadSegment, signatureSegment] = tokenString.split(\".\");\n if (!headerSegment || !payloadSegment || !signatureSegment) {\n throw new Error(\"Invalid JWT format\");\n }\n const decodedPayload = decodeBase64(payloadSegment);\n if (typeof decodedPayload !== \"string\") {\n throw new Error(\"Expected JWT payload to be a UTF-8 string\");\n }\n return JSON.parse(decodedPayload);\n};\nvar getWithingsProps = async (config) => {\n const timestamp = Math.floor(Date.now() / 1000);\n const signature = `getnonce,${config.clientId},${timestamp}`;\n const hashedSignature = await hmacSha256(signature, config.clientSecret);\n const nonceUrl = new URL(\"https://wbsapi.withings.net/v2/signature\");\n nonceUrl.searchParams.set(\"action\", \"getnonce\");\n nonceUrl.searchParams.set(\"client_id\", config.clientId);\n nonceUrl.searchParams.set(\"timestamp\", timestamp.toString());\n nonceUrl.searchParams.set(\"signature\", hashedSignature);\n const nonceResponse = await fetch(nonceUrl.toString(), {\n method: \"POST\"\n });\n const nonceData = await nonceResponse.json();\n if (nonceData.status === 0) {\n return {\n hashedSignature,\n nonce: nonceData.body.nonce\n };\n }\n return;\n};\nvar createOAuth2Request = ({\n url,\n body,\n authIn,\n headers,\n encoding,\n clientId,\n clientSecret\n}) => {\n const oauthHeaders = new Headers(headers);\n oauthHeaders.set(\"Accept\", \"application/json\");\n oauthHeaders.set(\"User-Agent\", \"citra\");\n if (authIn === \"header\") {\n if (!clientSecret) {\n throw new Error(\"clientSecret required for header auth\");\n }\n oauthHeaders.set(\"Authorization\", `Basic ${encodeBase64(`${clientId}:${clientSecret}`)}`);\n }\n if (encoding === \"application/json\") {\n oauthHeaders.set(\"Content-Type\", \"application/json\");\n return new Request(url, {\n body: JSON.stringify(body),\n headers: oauthHeaders,\n method: \"POST\"\n });\n }\n oauthHeaders.set(\"Content-Type\", \"application/x-www-form-urlencoded\");\n const entries = body instanceof URLSearchParams ? Array.from(body.entries()) : Object.entries(body).filter((entry) => typeof entry[1] === \"string\");\n const params = new URLSearchParams(entries);\n if (authIn === \"body\") {\n params.set(\"client_id\", clientId);\n clientSecret && params.set(\"client_secret\", clientSecret);\n }\n return new Request(url, {\n body: params.toString(),\n headers: oauthHeaders,\n method: \"POST\"\n });\n};\n\n// src/arctic-utils.ts\nvar createS256CodeChallenge = async (codeVerifier) => {\n const data = new TextEncoder().encode(codeVerifier);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n return base64Url(hashBuffer);\n};\nvar createRandomBase64UrlGenerator = (length) => () => {\n const buffer = crypto.getRandomValues(new Uint8Array(length));\n return base64Url(buffer);\n};\nvar generateCodeVerifier = createRandomBase64UrlGenerator(NUM_GENERATOR_BYTES);\nvar generateState = createRandomBase64UrlGenerator(NUM_GENERATOR_BYTES);\nvar base64Url = (input) => encodeBase64(input).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n\n// src/graphqlQueries.ts\nvar anilistProfileQuery = `query {\n Viewer {\n id\n name\n about\n avatar {\n large\n medium\n }\n bannerImage\n siteUrl\n createdAt\n updatedAt\n donatorTier\n donatorBadge\n unreadNotificationCount\n options {\n titleLanguage\n displayAdultContent\n airingNotifications\n profileColor\n activityMergeTime\n staffNameLanguage\n }\n mediaListOptions {\n scoreFormat\n rowOrder\n animeList {\n sectionOrder\n customLists\n advancedScoringEnabled\n }\n mangaList {\n sectionOrder\n customLists\n advancedScoringEnabled\n }\n }\n statistics {\n anime {\n count\n meanScore\n minutesWatched\n episodesWatched\n }\n manga {\n count\n meanScore\n chaptersRead\n volumesRead\n }\n }\n favourites {\n anime {\n nodes {\n id\n title {\n romaji\n english\n }\n siteUrl\n }\n }\n manga {\n nodes {\n id\n title {\n romaji\n english\n }\n siteUrl\n }\n }\n characters {\n nodes {\n id\n name {\n full\n }\n image {\n large\n }\n }\n }\n staff {\n nodes {\n id\n name {\n full\n }\n image {\n large\n }\n }\n }\n studios {\n nodes {\n id\n name\n siteUrl\n }\n }\n }\n isFollower\n isFollowing\n }\n}`;\n\n// src/typeGuards.ts\nvar isValidProviderOption = (option) => Object.hasOwn(providers, option);\nvar isRefreshableProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.isRefreshable;\n};\nvar isRevocableProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.revocationRequest !== undefined;\n};\nvar isPKCEProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.PKCEMethod !== undefined;\n};\nvar isOIDCProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.isOIDC;\n};\nvar isScopeRequiredProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.scopeRequired;\n};\nvar isRefreshableOAuth2Client = (providerName, client) => isRefreshableProviderOption(providerName);\nvar isRevocableOAuth2Client = (providerName, client) => isRevocableProviderOption(providerName);\nvar hasClientSecret = (credentials) => {\n if (typeof credentials !== \"object\" || credentials === null)\n return false;\n const secret = Reflect.get(credentials, \"clientSecret\");\n return typeof secret === \"string\";\n};\nvar isObject = (x) => x !== null && typeof x === \"object\" && !Array.isArray(x) && Object.prototype.toString.call(x) === \"[object Object]\";\n\n// src/providers.ts\nvar extractPropFromIdentity = (identity, keys) => {\n let value = identity;\n for (const key of keys) {\n if (!isObject(value)) {\n throw new Error(`Invalid identity data shape: expected object, got ${typeof value}`);\n }\n value = value[key];\n }\n return value;\n};\nvar extractSubFromOIDCIdentity = (identity) => {\n const sub = extractPropFromIdentity(identity, [\"sub\"]);\n if (typeof sub !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return sub;\n};\nvar defineProviders = (providers2) => providers2;\nvar providers = defineProviders({\n \"42\": {\n authorizationUrl: \"https://api.intra.42.fr/oauth/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.intra.42.fr/v2/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.intra.42.fr/oauth/token\"\n }\n },\n amazoncognito: {\n authorizationUrl: \"https://${domain}/oauth2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.domain}/oauth2/userInfo`\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `https://${config.domain}/oauth2/revoke`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.domain}/oauth2/token`\n }\n },\n anilist: {\n authorizationUrl: \"https://anilist.co/api/v2/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"data\",\n \"Viewer\",\n \"id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n body: {\n query: anilistProfileQuery\n },\n encoding: \"application/json\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\",\n url: \"https://graphql.anilist.co\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://anilist.co/api/v2/oauth/token\"\n }\n },\n apple: {\n authorizationUrl: \"https://appleid.apple.com/auth/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://appleid.apple.com/auth/userinfo\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://appleid.apple.com/auth/token\"\n }\n },\n atlassian: {\n authorizationUrl: \"https://auth.atlassian.com/authorize\",\n createAuthorizationURLSearchParams: {\n audience: \"api.atlassian.com\"\n },\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"account_id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.atlassian.com/me\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://auth.atlassian.com/oauth/token\"\n }\n },\n auth0: {\n authorizationUrl: (config) => `https://${config.domain}/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.domain}/userinfo`\n },\n revocationRequest: {\n authIn: \"body\",\n body: new URLSearchParams({\n token_type_hint: \"refresh_token\"\n }),\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `https://${config.domain}/oauth/revoke`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.domain}/oauth/token`\n }\n },\n authentik: {\n authorizationUrl: (config) => `https://${config.baseURL}/oauth/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.baseURL}/api/v3/user/`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.baseURL}/oauth/token`\n }\n },\n autodesk: {\n authorizationUrl: \"https://developer.api.autodesk.com/authentication/v2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.userprofile.autodesk.com/userinfo\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://developer.api.autodesk.com/authentication/v2/token\"\n }\n },\n battlenet: {\n authorizationUrl: \"https://oauth.battle.net/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://oauth.battle.net/userinfo\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.battle.net/token\"\n }\n },\n bitbucket: {\n authorizationUrl: \"https://bitbucket.org/site/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"uuid\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.bitbucket.org/2.0/user\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://bitbucket.org/site/oauth2/access_token\"\n }\n },\n box: {\n authorizationUrl: \"https://account.box.com/api/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.box.com/2.0/users/me\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://api.box.com/oauth2/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.box.com/oauth2/token\"\n }\n },\n bungie: {\n authorizationUrl: \"https://www.bungie.net/en/OAuth/Authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"Response\",\n \"membershipId\"\n ]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n headers: {\n \"X-API-Key\": \"<YOUR_API_KEY>\"\n },\n method: \"GET\",\n url: \"https://www.bungie.net/Platform/User/GetCurrentBungieNetUser\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.bungie.net/Platform/App/OAuth/token\"\n }\n },\n coinbase: {\n authorizationUrl: \"https://www.coinbase.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.coinbase.com/v2/user\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.coinbase.com/oauth/token\"\n }\n },\n discord: {\n authorizationUrl: \"https://discord.com/api/oauth2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://discord.com/api/users/@me\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://discord.com/api/oauth2/token\"\n }\n },\n donationalerts: {\n authorizationUrl: \"https://www.donationalerts.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.donationalerts.com/api/v1/user/oauth\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.donationalerts.com/oauth/token\"\n }\n },\n dribbble: {\n authorizationUrl: \"https://dribbble.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.dribbble.com/v2/user\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://dribbble.com/oauth/token\"\n }\n },\n dropbox: {\n authorizationUrl: \"https://www.dropbox.com/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"account_id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"POST\",\n url: \"https://api.dropboxapi.com/2/users/get_current_account\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.dropboxapi.com/2/auth/token/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.dropboxapi.com/oauth2/token\"\n }\n },\n epicgames: {\n authorizationUrl: \"https://www.epicgames.com/id/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"account_id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.epicgames.dev/epic/oauth/v2/userInfo\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.epicgames.dev/epic/oauth/v1/token\"\n }\n },\n etsy: {\n authorizationUrl: \"https://www.etsy.com/oauth/connect\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"results\",\n \"0\",\n \"user_id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://openapi.etsy.com/v3/application/users/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.etsy.com/v3/public/oauth/token\"\n }\n },\n facebook: {\n authorizationUrl: \"https://www.facebook.com/v16.0/dialog/oauth\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: false,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n searchParams: [[\"fields\", \"id,name,email,picture\"]],\n url: \"https://graph.facebook.com/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://graph.facebook.com/v16.0/oauth/access_token\"\n }\n },\n figma: {\n authorizationUrl: \"https://www.figma.com/oauth\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"user_id_string\"\n ]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.figma.com/v1/me\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.figma.com/v1/oauth/token\"\n }\n },\n gitea: {\n authorizationUrl: (config) => `${config.baseURL}/login/oauth/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `${config.baseURL}/api/v1/user`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/login/oauth/access_token`\n }\n },\n github: {\n authorizationUrl: \"https://github.com/login/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.github.com/user\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://github.com/login/oauth/access_token\"\n }\n },\n gitlab: {\n authorizationUrl: (config) => `${config.baseURL}/oauth/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://gitlab.com/api/v4/user\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `${config.baseURL}/oauth/revoke`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/oauth/token`\n }\n },\n google: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n searchParams: [[\"personFields\", \"names,emailAddresses,photos\"]],\n url: \"https://people.googleapis.com/v1/people/me\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://oauth2.googleapis.com/revoke\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth2.googleapis.com/token\"\n }\n },\n intuit: {\n authorizationUrl: \"https://appcenter.intuit.com/connect/oauth2\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => config.environment === \"production\" ? \"https://accounts.platform.intuit.com/v1/openid_connect/userinfo\" : \"https://sandbox-accounts.platform.intuit.com/v1/openid_connect/userinfo\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n headers: (config) => ({\n Authorization: `Basic ${encodeBase64(`${config.clientId}:${config.clientSecret}`)}`\n }),\n tokenParamName: \"token\",\n url: \"https://developer.api.intuit.com/v2/oauth2/tokens/revoke\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer\"\n }\n },\n kakao: {\n authorizationUrl: \"https://kauth.kakao.com/oauth/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://kapi.kakao.com/v2/user/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://kauth.kakao.com/oauth/token\"\n }\n },\n keycloak: {\n authorizationUrl: (config) => `${config.realmURL}/protocol/openid-connect/auth`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.kick.com/v1/user\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `${config.realmURL}/protocol/openid-connect/revoke`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.realmURL}/protocol/openid-connect/token`\n }\n },\n kick: {\n authorizationUrl: \"https://id.kick.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"data\",\n \"user_id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.kick.com/public/v1/users\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://id.kick.com/oauth/revoke\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://id.kick.com/oauth/token\"\n }\n },\n lichess: {\n authorizationUrl: \"https://lichess.org/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://lichess.org/api/account\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://lichess.org/api/token\"\n }\n },\n line: {\n authorizationUrl: \"https://access.line.me/oauth2/v2.1/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.line.me/v2/profile\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.line.me/oauth2/v2.1/token\"\n }\n },\n linear: {\n authorizationUrl: \"https://linear.app/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"data\",\n \"viewer\",\n \"id\"\n ]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n body: {\n query: `query { viewer { id name } }`\n },\n encoding: \"application/json\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\",\n url: \"https://api.linear.app/graphql\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.linear.app/oauth/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.linear.app/oauth/token\"\n }\n },\n linkedin: {\n authorizationUrl: \"https://www.linkedin.com/oauth/v2/authorization\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.linkedin.com/v2/me\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.linkedin.com/oauth/v2/accessToken\"\n }\n },\n mastodon: {\n authorizationUrl: (config) => `${config.baseURL}/oauth/authorize`,\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `${config.baseURL}/api/v1/accounts/verify_credentials`\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `${config.baseURL}/oauth/revoke`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/oauth/token`\n }\n },\n mercadolibre: {\n authorizationUrl: \"https://auth.mercadolibre.com/authorization\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.mercadolibre.com/users/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.mercadolibre.com/oauth/token\"\n }\n },\n mercadopago: {\n authorizationUrl: \"https://auth.mercadopago.com/authorization\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.mercadopago.com/v1/users/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.mercadopago.com/oauth/token\"\n }\n },\n microsoftentraid: {\n authorizationUrl: (config) => `https://${config.tenantId}.b2clogin.com/${config.tenantId}/oauth2/v2.0/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.tenantId}.b2clogin.com/${config.tenantId}/openid/userinfo`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.tenantId}.b2clogin.com/${config.tenantId}/oauth2/v2.0/token`\n }\n },\n myanimelist: {\n authorizationUrl: \"https://myanimelist.net/v1/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"plain\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.myanimelist.net/v2/users/@me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://myanimelist.net/v1/oauth2/token\"\n }\n },\n naver: {\n authorizationUrl: \"https://nid.naver.com/oauth2.0/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"response\",\n \"id\"\n ]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://openapi.naver.com/v1/nid/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://nid.naver.com/oauth2.0/token\"\n }\n },\n notion: {\n authorizationUrl: \"https://api.notion.com/v1/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n headers: {\n \"Notion-Version\": \"2022-06-28\"\n },\n method: \"GET\",\n url: \"https://api.notion.com/v1/users/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.notion.com/v1/oauth/token\"\n }\n },\n okta: {\n authorizationUrl: (config) => `https://${config.domain}/oauth2/default/v1/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.domain}/oauth2/default/v1/userinfo`\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `https://${config.domain}/oauth2/default/v1/revoke`\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.domain}/oauth2/default/v1/token`\n }\n },\n osu: {\n authorizationUrl: \"https://osu.ppy.sh/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://osu.ppy.sh/api/v2/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://osu.ppy.sh/oauth/token\"\n }\n },\n patreon: {\n authorizationUrl: \"https://www.patreon.com/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.patreon.com/api/oauth2/v2/identity\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.patreon.com/api/oauth2/token\"\n }\n },\n polar: {\n authorizationUrl: \"https://polar.sh/oauth2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.polar.sh/v1/oauth2/userinfo\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://api.polar.sh/v1/oauth2/revoke\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.polar.sh/v1/oauth2/token\"\n }\n },\n polaraccesslink: {\n authorizationUrl: \"https://flow.polar.com/oauth2/authorization\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"x_user_id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.polaraccesslink.com/v3/users/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://polarremote.com/v2/oauth2/token\"\n }\n },\n polarteampro: {\n authorizationUrl: \"https://auth.polar.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"x_user_id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.polaraccesslink.com/v3/users/<USER_ID>\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://auth.polar.com/oauth/token\"\n }\n },\n reddit: {\n authorizationUrl: \"https://www.reddit.com/api/v1/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://oauth.reddit.com/api/v1/me\"\n },\n revocationRequest: {\n authIn: \"header\",\n body: new URLSearchParams({\n token_type_hint: \"refresh_token\"\n }),\n encoding: \"application/json\",\n url: \"https://www.reddit.com/api/v1/revoke_token\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.reddit.com/api/v1/access_token\"\n }\n },\n roblox: {\n authorizationUrl: \"https://apis.roblox.com/oauth/v1/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://apis.roblox.com/oauth/v1/userinfo\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://apis.roblox.com/oauth/v1/token\"\n }\n },\n salesforce: {\n authorizationUrl: \"https://login.salesforce.com/services/oauth2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://login.salesforce.com/services/oauth2/userinfo\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://login.salesforce.com/services/oauth2/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://login.salesforce.com/services/oauth2/token\"\n }\n },\n shikimori: {\n authorizationUrl: \"https://shikimori.org/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://shikimori.one/api/users/whoami\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://shikimori.org/oauth/token\"\n }\n },\n slack: {\n authorizationUrl: \"https://slack.com/openid/connect/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://slack.com/api/users.identity\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://slack.com/api/auth.revoke\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://slack.com/api/openid.connect.token\"\n }\n },\n spotify: {\n authorizationUrl: \"https://accounts.spotify.com/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.spotify.com/v1/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://accounts.spotify.com/api/token\"\n }\n },\n startgg: {\n authorizationUrl: \"https://start.gg/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"data\",\n \"currentUser\",\n \"id\"\n ]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n body: {\n query: `query { currentUser { id slug email player { gamerTag } } }`\n },\n encoding: \"application/json\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\",\n url: \"https://api.start.gg/gql/alpha\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.start.gg/oauth/access_token\"\n }\n },\n strava: {\n authorizationUrl: \"https://www.strava.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.strava.com/api/v3/athlete\"\n },\n revocationRequest: {\n authIn: \"query\",\n body: new URLSearchParams({\n token_type_hint: \"access_token\"\n }),\n encoding: \"application/json\",\n tokenParamName: \"access_token\",\n url: \"https://www.strava.com/oauth/deauthorize\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.strava.com/oauth/token\"\n }\n },\n synology: {\n authorizationUrl: (config) => `${config.baseURL}/webman/sso/SSOOauth.cgi?client_id=${config.clientId}&response_type=code&redirect_uri=${config.redirectUri}`,\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `${config.baseURL}/webman/sso/SSOUserInfo.cgi?client_id=${config.clientId}&access_token=${config.accessToken}`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/webman/sso/SSOAccessToken.cgi?client_id=${config.clientId}&client_secret=${config.clientSecret}`\n }\n },\n tiktok: {\n authorizationUrl: \"https://www.tiktok.com/v2/auth/authorize\",\n createAuthorizationURLSearchParams: (config) => ({\n client_key: config.clientId\n }),\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"data\",\n \"open_id\"\n ]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://open.douyin.com/oauth/userinfo\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://open.tiktokapis.com/v2/oauth/revoke/\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://open.tiktokapis.com/v2/oauth/token/\"\n }\n },\n tiltify: {\n authorizationUrl: \"https://v5api.tiltify.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://v5api.tiltify.com/api/public/current-user\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://v5api.tiltify.com/oauth/token\"\n }\n },\n tumblr: {\n authorizationUrl: \"https://www.tumblr.com/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"response\",\n \"user\",\n \"name\"\n ]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.tumblr.com/v2/user/info\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.tumblr.com/v2/oauth2/token\"\n }\n },\n twitch: {\n authorizationUrl: \"https://id.twitch.tv/oauth2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n headers: (config) => ({\n \"Client-Id\": config.clientId\n }),\n method: \"GET\",\n url: \"https://api.twitch.tv/helix/users\"\n },\n revocationRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n headers: (config) => ({\n \"Client-Id\": config.clientId\n }),\n tokenParamName: \"token\",\n url: \"https://id.twitch.tv/oauth2/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://id.twitch.tv/oauth2/token\"\n }\n },\n twitter: {\n authorizationUrl: \"https://twitter.com/i/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.twitter.com/2/users/me\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.twitter.com/2/oauth2/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.twitter.com/2/oauth2/token\"\n }\n },\n vk: {\n authorizationUrl: \"https://oauth.vk.com/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"response\",\n \"0\",\n \"id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.vk.com/method/users.get\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.vk.com/access_token\"\n }\n },\n withings: {\n authorizationUrl: \"https://account.withings.com/oauth2_user/authorize2\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"body\",\n \"userid\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n body: async (config) => {\n const props = await getWithingsProps(config);\n if (props === undefined)\n throw new Error(\"Failed to get Withings search properties\");\n const { nonce, hashedSignature } = props;\n return [\n [\"action\", \"getuser\"],\n [\"nonce\", nonce],\n [\"client_id\", config.clientId],\n [\"signature\", hashedSignature]\n ];\n },\n encoding: \"application/x-www-form-urlencoded\",\n method: \"POST\",\n url: \"https://wbsapi.withings.net/v2/oauth2\"\n },\n refreshAccessTokenBody: {\n action: \"requesttoken\"\n },\n revocationRequest: {\n authIn: \"header\",\n body: async (config) => {\n const props = await getWithingsProps(config);\n if (!props)\n throw new Error(\"Failed to get Withings props\");\n const { nonce, hashedSignature } = props;\n return [\n [\"action\", \"revoke\"],\n [\"client_id\", config.clientId],\n [\"nonce\", nonce],\n [\"signature\", hashedSignature]\n ];\n },\n encoding: \"application/x-www-form-urlencoded\",\n method: \"POST\",\n url: \"https://wbsapi.withings.net/v2/oauth2\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://wbsapi.withings.net/v2/oauth2\"\n },\n validateAuthorizationCodeBody: {\n action: \"requesttoken\"\n }\n },\n workos: {\n authorizationUrl: \"https://api.workos.com/sso/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.workos.com/sso/userinfo\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.workos.com/sso/token\"\n }\n },\n yahoo: {\n authorizationUrl: \"https://api.login.yahoo.com/oauth2/request_auth\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.login.yahoo.com/openid/v1/userinfo\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.login.yahoo.com/oauth2/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.login.yahoo.com/oauth2/get_token\"\n }\n },\n yandex: {\n authorizationUrl: \"https://oauth.yandex.com/authorize\",\n createAuthorizationURLSearchParams: {\n device_id: crypto.randomUUID(),\n device_name: `${navigator.platform ?? \"Unknown\"} \\u2014 ${(navigator.userAgent.split(\")\")[0] || \"\").split(\"(\").pop() || \"Unknown\"}`\n },\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://login.yandex.ru/info\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"access_token\",\n url: \"https://oauth.yandex.com/revoke_token\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.yandex.com/token\"\n }\n },\n zoom: {\n authorizationUrl: \"https://zoom.us/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.zoom.us/v2/users/me\"\n },\n revocationRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n headers: (config) => ({\n Authorization: `Basic ${btoa(`${config.clientId}:${config.clientSecret}`)}`\n }),\n tokenParamName: \"token\",\n url: \"https://zoom.us/oauth/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://zoom.us/oauth/token\"\n }\n }\n});\nvar providerOptions = Object.keys(providers).filter(isValidProviderOption);\nvar refreshableProviderOptions = Object.keys(providers).filter(isRefreshableProviderOption);\nvar oidcProviderOptions = Object.keys(providers).filter(isOIDCProviderOption);\nvar revocableProviderOptions = Object.keys(providers).filter(isRevocableProviderOption);\nvar scopeRequiredProviderOptions = Object.keys(providers).filter(isScopeRequiredProviderOption);\nvar pkceProviderOptions = Object.keys(providers).filter(isPKCEProviderOption);\n\n// src/index.ts\nvar createOAuth2Client = async (providerName, config) => {\n const meta = providers[providerName];\n const isConfigPropertyFunction = (cfgProp) => typeof cfgProp === \"function\";\n const resolveConfigProp = async (cfgProp) => {\n const result = isConfigPropertyFunction(cfgProp) ? cfgProp(config) : cfgProp;\n return await result;\n };\n const authorizationUrl = await resolveConfigProp(meta.authorizationUrl);\n const tokenUrl = await resolveConfigProp(meta.tokenRequest.url);\n return {\n async createAuthorizationUrl(opts) {\n const { state, scope = [], searchParams = [], codeVerifier } = opts;\n const url = new URL(authorizationUrl);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"client_id\", config.clientId);\n if (config.redirectUri)\n url.searchParams.set(\"redirect_uri\", config.redirectUri);\n if (state)\n url.searchParams.set(\"state\", state);\n if (scope.length !== 0) {\n const delimeter = providerName === \"withings\" ? \",\" : \" \";\n url.searchParams.set(\"scope\", scope.join(delimeter));\n }\n if (meta.PKCEMethod !== undefined) {\n if (!codeVerifier) {\n throw new Error(\"`codeVerifier` is required when PKCE is enabled\");\n }\n const codeChallenge = meta.PKCEMethod === \"S256\" ? await createS256CodeChallenge(codeVerifier) : codeVerifier;\n url.searchParams.set(\"code_challenge_method\", meta.PKCEMethod);\n url.searchParams.set(\"code_challenge\", codeChallenge);\n }\n Object.entries(resolveConfigProp(meta.createAuthorizationURLSearchParams) ?? {}).forEach(([key, value]) => url.searchParams.set(key, value));\n searchParams.forEach(([key, value]) => url.searchParams.set(key, value));\n return url;\n },\n async fetchUserProfile(accessToken) {\n const { profileRequest } = meta;\n const {\n url,\n method,\n authIn,\n searchParams,\n body: profileBody,\n headers,\n encoding\n } = profileRequest;\n const endpoint = new URL(await resolveConfigProp(url));\n const resolvedBody = await resolveConfigProp(profileBody);\n new URLSearchParams(await resolveConfigProp(searchParams)).forEach((value, key) => endpoint.searchParams.append(key, value));\n let headerEntries = [];\n const rawHeaders = headers ? await resolveConfigProp(headers) : undefined;\n if (rawHeaders instanceof Headers)\n headerEntries = Array.from(rawHeaders.entries());\n else if (Array.isArray(rawHeaders))\n headerEntries = rawHeaders;\n else if (rawHeaders && typeof rawHeaders === \"object\")\n headerEntries = Object.entries(rawHeaders);\n const profileHeaders = Object.fromEntries(headerEntries.filter(([, v]) => v !== \"\"));\n if (authIn === \"header\") {\n profileHeaders.Authorization = `Bearer ${accessToken}`;\n } else {\n endpoint.searchParams.append(\"access_token\", accessToken);\n }\n const init = { headers: profileHeaders, method };\n if (method === \"POST\" && resolvedBody != null) {\n profileHeaders[\"Content-Type\"] = encoding;\n init.body = encoding === \"application/json\" ? JSON.stringify(resolvedBody) : new URLSearchParams(resolvedBody).toString();\n }\n const response = await fetch(endpoint.toString(), init);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n return response.json();\n },\n async refreshAccessToken(refreshToken) {\n const { authIn, encoding } = meta.tokenRequest;\n const params = new URLSearchParams(meta.refreshAccessTokenBody);\n params.set(\"grant_type\", \"refresh_token\");\n params.set(\"refresh_token\", refreshToken);\n const { clientId } = config;\n let clientSecretValue;\n if (hasClientSecret(config)) {\n clientSecretValue = config.clientSecret;\n params.set(\"client_id\", clientId);\n params.set(\"client_secret\", clientSecretValue);\n }\n const request = createOAuth2Request({\n authIn,\n body: params,\n clientId,\n clientSecret: clientSecretValue,\n encoding,\n url: tokenUrl\n });\n const response = await fetch(request);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n return response.json();\n },\n async revokeToken(token) {\n const { revocationRequest } = meta;\n if (!revocationRequest) {\n throw new Error(\"Token revocation not defined for this provider\");\n }\n const { url, authIn, body, headers, tokenParamName } = revocationRequest;\n const endpoint = await resolveConfigProp(url);\n const resolvedBody = await resolveConfigProp(body);\n const revocationBody = new URLSearchParams(resolvedBody);\n const revocationHeaders = new Headers(headers && await resolveConfigProp(headers));\n const { clientId } = config;\n const clientSecret = hasClientSecret(config) ? config.clientSecret : undefined;\n let request;\n if (authIn === \"body\") {\n revocationBody.set(tokenParamName, token);\n revocationBody.set(\"client_id\", clientId);\n if (clientSecret)\n revocationBody.set(\"client_secret\", clientSecret);\n request = createOAuth2Request({\n authIn: \"body\",\n body: revocationBody,\n clientId,\n clientSecret,\n encoding: \"application/x-www-form-urlencoded\",\n headers: revocationHeaders,\n url: endpoint.toString()\n });\n } else if (authIn === \"header\") {\n revocationHeaders.set(\"Authorization\", `Bearer ${token}`);\n request = createOAuth2Request({\n authIn: \"header\",\n body: revocationBody,\n clientId,\n clientSecret,\n encoding: \"application/x-www-form-urlencoded\",\n headers: revocationHeaders,\n url: endpoint.toString()\n });\n } else {\n request = createOAuth2Request({\n authIn: \"query\",\n body: revocationBody,\n clientId,\n clientSecret,\n encoding: \"application/x-www-form-urlencoded\",\n headers: revocationHeaders,\n url: `${endpoint.toString()}?${tokenParamName}=${token}`\n });\n }\n const response = await fetch(request);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n },\n async validateAuthorizationCode(opts) {\n const { code, codeVerifier } = opts;\n const { authIn, encoding } = meta.tokenRequest;\n const bodyObj = {};\n for (const key in meta.validateAuthorizationCodeBody ?? {}) {\n const value = meta.validateAuthorizationCodeBody[key];\n if (typeof value === \"string\")\n bodyObj[key] = value;\n }\n bodyObj.grant_type = \"authorization_code\";\n bodyObj.code = code;\n if (config.redirectUri)\n bodyObj.redirect_uri = config.redirectUri;\n if (meta.PKCEMethod !== undefined) {\n if (!codeVerifier) {\n throw new Error(\"codeVerifier required when PKCE is enabled\");\n }\n bodyObj.code_verifier = codeVerifier;\n }\n const payload = encoding === \"application/json\" ? bodyObj : new URLSearchParams(bodyObj);\n const request = createOAuth2Request({\n authIn,\n body: payload,\n clientId: config.clientId,\n clientSecret: hasClientSecret(config) ? config.clientSecret : undefined,\n encoding,\n url: tokenUrl\n });\n const response = await fetch(request);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n return response.json();\n }\n };\n};\nexport {\n scopeRequiredProviderOptions,\n revocableProviderOptions,\n refreshableProviderOptions,\n providers,\n providerOptions,\n pkceProviderOptions,\n oidcProviderOptions,\n isValidProviderOption,\n isScopeRequiredProviderOption,\n isRevocableProviderOption,\n isRevocableOAuth2Client,\n isRefreshableProviderOption,\n isRefreshableOAuth2Client,\n isPKCEProviderOption,\n isObject,\n isOIDCProviderOption,\n hmacSha256,\n hasClientSecret,\n getWithingsProps,\n generateState,\n generateCodeVerifier,\n encodeBase64,\n defineProviders,\n decodeJWT,\n decodeBase64,\n createS256CodeChallenge,\n createOAuth2Request,\n createOAuth2FetchError,\n createOAuth2Client\n};\n",
|
|
5
|
+
"// @bun\n// src/constants.ts\nvar NUM_GENERATOR_BYTES = 32;\nvar BASE64_BLOCK_SIZE = 4;\n\n// src/utils.ts\nvar createOAuth2FetchError = async (response) => {\n const clone = response.clone();\n const prefix = `HTTP ${response.status} ${response.statusText} for ${response.url}`;\n const payload = await response.json().catch(() => null);\n if (payload && typeof payload === \"object\" && Object.keys(payload).length) {\n return new Error(`${prefix}\n${JSON.stringify(payload)}`);\n }\n const text = await clone.text().catch(() => \"\");\n if (text) {\n return new Error(`${prefix}\n${text}`);\n }\n return new Error(prefix);\n};\nvar encodeBase64 = (input) => {\n let raw;\n if (typeof input === \"string\") {\n raw = input;\n } else {\n const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);\n raw = bytes.reduce((acc, byte) => acc + String.fromCharCode(byte), \"\");\n }\n return btoa(raw);\n};\nvar decodeBase64 = (input, toUint8Array = false) => {\n const b64 = input.replace(/-/g, \"+\").replace(/_/g, \"/\") + \"==\".slice(0, (BASE64_BLOCK_SIZE - input.length % BASE64_BLOCK_SIZE) % BASE64_BLOCK_SIZE);\n const raw = atob(b64);\n if (!toUint8Array) {\n return raw;\n }\n const bytes = new Uint8Array(raw.length);\n for (let i = 0;i < raw.length; i++) {\n bytes[i] = raw.charCodeAt(i);\n }\n return bytes;\n};\nvar hmacSha256 = async (message, secret) => {\n const encoder = new TextEncoder;\n const key = await crypto.subtle.importKey(\"raw\", encoder.encode(secret), { hash: \"SHA-256\", name: \"HMAC\" }, false, [\"sign\"]);\n const sigBuffer = await crypto.subtle.sign(\"HMAC\", key, encoder.encode(message));\n return Array.from(new Uint8Array(sigBuffer)).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n};\nvar decodeJWT = (tokenString) => {\n const [headerSegment, payloadSegment, signatureSegment] = tokenString.split(\".\");\n if (!headerSegment || !payloadSegment || !signatureSegment) {\n throw new Error(\"Invalid JWT format\");\n }\n const decodedPayload = decodeBase64(payloadSegment);\n if (typeof decodedPayload !== \"string\") {\n throw new Error(\"Expected JWT payload to be a UTF-8 string\");\n }\n return JSON.parse(decodedPayload);\n};\nvar getWithingsProps = async (config) => {\n const timestamp = Math.floor(Date.now() / 1000);\n const signature = `getnonce,${config.clientId},${timestamp}`;\n const hashedSignature = await hmacSha256(signature, config.clientSecret);\n const nonceUrl = new URL(\"https://wbsapi.withings.net/v2/signature\");\n nonceUrl.searchParams.set(\"action\", \"getnonce\");\n nonceUrl.searchParams.set(\"client_id\", config.clientId);\n nonceUrl.searchParams.set(\"timestamp\", timestamp.toString());\n nonceUrl.searchParams.set(\"signature\", hashedSignature);\n const nonceResponse = await fetch(nonceUrl.toString(), {\n method: \"POST\"\n });\n const nonceData = await nonceResponse.json();\n if (nonceData.status === 0) {\n return {\n hashedSignature,\n nonce: nonceData.body.nonce\n };\n }\n return;\n};\nvar createOAuth2Request = ({\n url,\n body,\n authIn,\n headers,\n encoding,\n clientId,\n clientSecret\n}) => {\n const oauthHeaders = new Headers(headers);\n oauthHeaders.set(\"Accept\", \"application/json\");\n oauthHeaders.set(\"User-Agent\", \"citra\");\n if (authIn === \"header\") {\n if (!clientSecret) {\n throw new Error(\"clientSecret required for header auth\");\n }\n oauthHeaders.set(\"Authorization\", `Basic ${encodeBase64(`${clientId}:${clientSecret}`)}`);\n }\n if (encoding === \"application/json\") {\n oauthHeaders.set(\"Content-Type\", \"application/json\");\n return new Request(url, {\n body: JSON.stringify(body),\n headers: oauthHeaders,\n method: \"POST\"\n });\n }\n oauthHeaders.set(\"Content-Type\", \"application/x-www-form-urlencoded\");\n const entries = body instanceof URLSearchParams ? Array.from(body.entries()) : Object.entries(body).filter((entry) => typeof entry[1] === \"string\");\n const params = new URLSearchParams(entries);\n if (authIn === \"body\") {\n params.set(\"client_id\", clientId);\n clientSecret && params.set(\"client_secret\", clientSecret);\n }\n return new Request(url, {\n body: params.toString(),\n headers: oauthHeaders,\n method: \"POST\"\n });\n};\n\n// src/arctic-utils.ts\nvar createS256CodeChallenge = async (codeVerifier) => {\n const data = new TextEncoder().encode(codeVerifier);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n return base64Url(hashBuffer);\n};\nvar createRandomBase64UrlGenerator = (length) => () => {\n const buffer = crypto.getRandomValues(new Uint8Array(length));\n return base64Url(buffer);\n};\nvar generateCodeVerifier = createRandomBase64UrlGenerator(NUM_GENERATOR_BYTES);\nvar generateState = createRandomBase64UrlGenerator(NUM_GENERATOR_BYTES);\nvar base64Url = (input) => encodeBase64(input).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n\n// src/graphqlQueries.ts\nvar anilistProfileQuery = `query {\n Viewer {\n id\n name\n about\n avatar {\n large\n medium\n }\n bannerImage\n siteUrl\n createdAt\n updatedAt\n donatorTier\n donatorBadge\n unreadNotificationCount\n options {\n titleLanguage\n displayAdultContent\n airingNotifications\n profileColor\n activityMergeTime\n staffNameLanguage\n }\n mediaListOptions {\n scoreFormat\n rowOrder\n animeList {\n sectionOrder\n customLists\n advancedScoringEnabled\n }\n mangaList {\n sectionOrder\n customLists\n advancedScoringEnabled\n }\n }\n statistics {\n anime {\n count\n meanScore\n minutesWatched\n episodesWatched\n }\n manga {\n count\n meanScore\n chaptersRead\n volumesRead\n }\n }\n favourites {\n anime {\n nodes {\n id\n title {\n romaji\n english\n }\n siteUrl\n }\n }\n manga {\n nodes {\n id\n title {\n romaji\n english\n }\n siteUrl\n }\n }\n characters {\n nodes {\n id\n name {\n full\n }\n image {\n large\n }\n }\n }\n staff {\n nodes {\n id\n name {\n full\n }\n image {\n large\n }\n }\n }\n studios {\n nodes {\n id\n name\n siteUrl\n }\n }\n }\n isFollower\n isFollowing\n }\n}`;\n\n// src/typeGuards.ts\nvar isValidProviderOption = (option) => Object.hasOwn(providers, option);\nvar isRefreshableProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.isRefreshable;\n};\nvar isRevocableProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.revocationRequest !== undefined;\n};\nvar isPKCEProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.PKCEMethod !== undefined;\n};\nvar isOIDCProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.isOIDC;\n};\nvar isScopeRequiredProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.scopeRequired;\n};\nvar isRefreshableOAuth2Client = (providerName, client) => isRefreshableProviderOption(providerName);\nvar isRevocableOAuth2Client = (providerName, client) => isRevocableProviderOption(providerName);\nvar hasClientSecret = (credentials) => {\n if (typeof credentials !== \"object\" || credentials === null)\n return false;\n const secret = Reflect.get(credentials, \"clientSecret\");\n return typeof secret === \"string\";\n};\nvar isObject = (x) => x !== null && typeof x === \"object\" && !Array.isArray(x) && Object.prototype.toString.call(x) === \"[object Object]\";\n\n// src/providers.ts\nvar extractPropFromIdentity = (identity, keys) => {\n let value = identity;\n for (const key of keys) {\n if (!isObject(value)) {\n throw new Error(`Invalid identity data shape: expected object, got ${typeof value}`);\n }\n value = value[key];\n }\n return value;\n};\nvar extractSubFromOIDCIdentity = (identity) => {\n const sub = extractPropFromIdentity(identity, [\"sub\"]);\n if (typeof sub !== \"string\") {\n throw new Error(\"Invalid identity data shape\");\n }\n return sub;\n};\nvar defineProviders = (providers2) => providers2;\nvar providers = defineProviders({\n \"42\": {\n authorizationUrl: \"https://api.intra.42.fr/oauth/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.intra.42.fr/v2/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.intra.42.fr/oauth/token\"\n }\n },\n amazoncognito: {\n authorizationUrl: \"https://${domain}/oauth2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.domain}/oauth2/userInfo`\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `https://${config.domain}/oauth2/revoke`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.domain}/oauth2/token`\n }\n },\n anilist: {\n authorizationUrl: \"https://anilist.co/api/v2/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"data\",\n \"Viewer\",\n \"id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n body: {\n query: anilistProfileQuery\n },\n encoding: \"application/json\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\",\n url: \"https://graphql.anilist.co\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://anilist.co/api/v2/oauth/token\"\n }\n },\n apple: {\n authorizationUrl: \"https://appleid.apple.com/auth/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://appleid.apple.com/auth/userinfo\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://appleid.apple.com/auth/token\"\n }\n },\n atlassian: {\n authorizationUrl: \"https://auth.atlassian.com/authorize\",\n createAuthorizationURLSearchParams: {\n audience: \"api.atlassian.com\"\n },\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"account_id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.atlassian.com/me\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://auth.atlassian.com/oauth/token\"\n }\n },\n auth0: {\n authorizationUrl: (config) => `https://${config.domain}/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.domain}/userinfo`\n },\n revocationRequest: {\n authIn: \"body\",\n body: new URLSearchParams({\n token_type_hint: \"refresh_token\"\n }),\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `https://${config.domain}/oauth/revoke`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.domain}/oauth/token`\n }\n },\n authentik: {\n authorizationUrl: (config) => `https://${config.baseURL}/oauth/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.baseURL}/api/v3/user/`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.baseURL}/oauth/token`\n }\n },\n autodesk: {\n authorizationUrl: \"https://developer.api.autodesk.com/authentication/v2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.userprofile.autodesk.com/userinfo\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://developer.api.autodesk.com/authentication/v2/token\"\n }\n },\n battlenet: {\n authorizationUrl: \"https://oauth.battle.net/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://oauth.battle.net/userinfo\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.battle.net/token\"\n }\n },\n bitbucket: {\n authorizationUrl: \"https://bitbucket.org/site/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"uuid\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.bitbucket.org/2.0/user\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://bitbucket.org/site/oauth2/access_token\"\n }\n },\n box: {\n authorizationUrl: \"https://account.box.com/api/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.box.com/2.0/users/me\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://api.box.com/oauth2/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.box.com/oauth2/token\"\n }\n },\n bungie: {\n authorizationUrl: \"https://www.bungie.net/en/OAuth/Authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"Response\",\n \"membershipId\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n headers: {\n \"X-API-Key\": \"<YOUR_API_KEY>\"\n },\n method: \"GET\",\n url: \"https://www.bungie.net/Platform/User/GetCurrentBungieNetUser\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.bungie.net/Platform/App/OAuth/token\"\n }\n },\n coinbase: {\n authorizationUrl: \"https://www.coinbase.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.coinbase.com/v2/user\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.coinbase.com/oauth/token\"\n }\n },\n discord: {\n authorizationUrl: \"https://discord.com/api/oauth2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://discord.com/api/users/@me\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://discord.com/api/oauth2/token\"\n }\n },\n donationalerts: {\n authorizationUrl: \"https://www.donationalerts.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.donationalerts.com/api/v1/user/oauth\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.donationalerts.com/oauth/token\"\n }\n },\n dribbble: {\n authorizationUrl: \"https://dribbble.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.dribbble.com/v2/user\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://dribbble.com/oauth/token\"\n }\n },\n dropbox: {\n authorizationUrl: \"https://www.dropbox.com/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"account_id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"POST\",\n url: \"https://api.dropboxapi.com/2/users/get_current_account\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.dropboxapi.com/2/auth/token/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.dropboxapi.com/oauth2/token\"\n }\n },\n epicgames: {\n authorizationUrl: \"https://www.epicgames.com/id/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"account_id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.epicgames.dev/epic/oauth/v2/userInfo\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.epicgames.dev/epic/oauth/v1/token\"\n }\n },\n etsy: {\n authorizationUrl: \"https://www.etsy.com/oauth/connect\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"results\",\n \"0\",\n \"user_id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://openapi.etsy.com/v3/application/users/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.etsy.com/v3/public/oauth/token\"\n }\n },\n facebook: {\n authorizationUrl: \"https://www.facebook.com/v16.0/dialog/oauth\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: false,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n searchParams: [[\"fields\", \"id,name,email,picture\"]],\n url: \"https://graph.facebook.com/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://graph.facebook.com/v16.0/oauth/access_token\"\n }\n },\n figma: {\n authorizationUrl: \"https://www.figma.com/oauth\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"string\") {\n throw new Error(`Invalid identity data shape: expected string, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.figma.com/v1/me\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.figma.com/v1/oauth/token\"\n }\n },\n gitea: {\n authorizationUrl: (config) => `${config.baseURL}/login/oauth/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `${config.baseURL}/api/v1/user`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/login/oauth/access_token`\n }\n },\n github: {\n authorizationUrl: \"https://github.com/login/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.github.com/user\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://github.com/login/oauth/access_token\"\n }\n },\n gitlab: {\n authorizationUrl: (config) => `${config.baseURL}/oauth/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://gitlab.com/api/v4/user\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `${config.baseURL}/oauth/revoke`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/oauth/token`\n }\n },\n google: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n searchParams: [[\"personFields\", \"names,emailAddresses,photos\"]],\n url: \"https://people.googleapis.com/v1/people/me\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://oauth2.googleapis.com/revoke\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth2.googleapis.com/token\"\n }\n },\n intuit: {\n authorizationUrl: \"https://appcenter.intuit.com/connect/oauth2\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => config.environment === \"production\" ? \"https://accounts.platform.intuit.com/v1/openid_connect/userinfo\" : \"https://sandbox-accounts.platform.intuit.com/v1/openid_connect/userinfo\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n headers: (config) => ({\n Authorization: `Basic ${encodeBase64(`${config.clientId}:${config.clientSecret}`)}`\n }),\n tokenParamName: \"token\",\n url: \"https://developer.api.intuit.com/v2/oauth2/tokens/revoke\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer\"\n }\n },\n kakao: {\n authorizationUrl: \"https://kauth.kakao.com/oauth/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://kapi.kakao.com/v2/user/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://kauth.kakao.com/oauth/token\"\n }\n },\n keycloak: {\n authorizationUrl: (config) => `${config.realmURL}/protocol/openid-connect/auth`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.kick.com/v1/user\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `${config.realmURL}/protocol/openid-connect/revoke`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.realmURL}/protocol/openid-connect/token`\n }\n },\n kick: {\n authorizationUrl: \"https://id.kick.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"data\",\n \"user_id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.kick.com/public/v1/users\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://id.kick.com/oauth/revoke\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://id.kick.com/oauth/token\"\n }\n },\n lichess: {\n authorizationUrl: \"https://lichess.org/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://lichess.org/api/account\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://lichess.org/api/token\"\n }\n },\n line: {\n authorizationUrl: \"https://access.line.me/oauth2/v2.1/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.line.me/v2/profile\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.line.me/oauth2/v2.1/token\"\n }\n },\n linear: {\n authorizationUrl: \"https://linear.app/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"data\",\n \"viewer\",\n \"id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n body: {\n query: `query { viewer { id name } }`\n },\n encoding: \"application/json\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\",\n url: \"https://api.linear.app/graphql\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.linear.app/oauth/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.linear.app/oauth/token\"\n }\n },\n linkedin: {\n authorizationUrl: \"https://www.linkedin.com/oauth/v2/authorization\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.linkedin.com/v2/me\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.linkedin.com/oauth/v2/accessToken\"\n }\n },\n mastodon: {\n authorizationUrl: (config) => `${config.baseURL}/oauth/authorize`,\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `${config.baseURL}/api/v1/accounts/verify_credentials`\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `${config.baseURL}/oauth/revoke`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/oauth/token`\n }\n },\n mercadolibre: {\n authorizationUrl: \"https://auth.mercadolibre.com/authorization\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.mercadolibre.com/users/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.mercadolibre.com/oauth/token\"\n }\n },\n mercadopago: {\n authorizationUrl: \"https://auth.mercadopago.com/authorization\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.mercadopago.com/v1/users/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.mercadopago.com/oauth/token\"\n }\n },\n microsoftentraid: {\n authorizationUrl: (config) => `https://${config.tenantId}.b2clogin.com/${config.tenantId}/oauth2/v2.0/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.tenantId}.b2clogin.com/${config.tenantId}/openid/userinfo`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.tenantId}.b2clogin.com/${config.tenantId}/oauth2/v2.0/token`\n }\n },\n myanimelist: {\n authorizationUrl: \"https://myanimelist.net/v1/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"plain\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.myanimelist.net/v2/users/@me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://myanimelist.net/v1/oauth2/token\"\n }\n },\n naver: {\n authorizationUrl: \"https://nid.naver.com/oauth2.0/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"response\",\n \"id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://openapi.naver.com/v1/nid/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://nid.naver.com/oauth2.0/token\"\n }\n },\n notion: {\n authorizationUrl: \"https://api.notion.com/v1/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n headers: {\n \"Notion-Version\": \"2022-06-28\"\n },\n method: \"GET\",\n url: \"https://api.notion.com/v1/users/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.notion.com/v1/oauth/token\"\n }\n },\n okta: {\n authorizationUrl: (config) => `https://${config.domain}/oauth2/default/v1/authorize`,\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.domain}/oauth2/default/v1/userinfo`\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `https://${config.domain}/oauth2/default/v1/revoke`\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.domain}/oauth2/default/v1/token`\n }\n },\n osu: {\n authorizationUrl: \"https://osu.ppy.sh/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://osu.ppy.sh/api/v2/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://osu.ppy.sh/oauth/token\"\n }\n },\n patreon: {\n authorizationUrl: \"https://www.patreon.com/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.patreon.com/api/oauth2/v2/identity\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.patreon.com/api/oauth2/token\"\n }\n },\n polar: {\n authorizationUrl: \"https://polar.sh/oauth2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.polar.sh/v1/oauth2/userinfo\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://api.polar.sh/v1/oauth2/revoke\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.polar.sh/v1/oauth2/token\"\n }\n },\n polaraccesslink: {\n authorizationUrl: \"https://flow.polar.com/oauth2/authorization\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"x_user_id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.polaraccesslink.com/v3/users/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://polarremote.com/v2/oauth2/token\"\n }\n },\n polarteampro: {\n authorizationUrl: \"https://auth.polar.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"x_user_id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.polaraccesslink.com/v3/users/<USER_ID>\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://auth.polar.com/oauth/token\"\n }\n },\n reddit: {\n authorizationUrl: \"https://www.reddit.com/api/v1/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://oauth.reddit.com/api/v1/me\"\n },\n revocationRequest: {\n authIn: \"header\",\n body: new URLSearchParams({\n token_type_hint: \"refresh_token\"\n }),\n encoding: \"application/json\",\n url: \"https://www.reddit.com/api/v1/revoke_token\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.reddit.com/api/v1/access_token\"\n }\n },\n roblox: {\n authorizationUrl: \"https://apis.roblox.com/oauth/v1/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://apis.roblox.com/oauth/v1/userinfo\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://apis.roblox.com/oauth/v1/token\"\n }\n },\n salesforce: {\n authorizationUrl: \"https://login.salesforce.com/services/oauth2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://login.salesforce.com/services/oauth2/userinfo\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://login.salesforce.com/services/oauth2/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://login.salesforce.com/services/oauth2/token\"\n }\n },\n shikimori: {\n authorizationUrl: \"https://shikimori.org/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://shikimori.one/api/users/whoami\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://shikimori.org/oauth/token\"\n }\n },\n slack: {\n authorizationUrl: \"https://slack.com/openid/connect/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://slack.com/api/users.identity\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://slack.com/api/auth.revoke\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://slack.com/api/openid.connect.token\"\n }\n },\n spotify: {\n authorizationUrl: \"https://accounts.spotify.com/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.spotify.com/v1/me\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://accounts.spotify.com/api/token\"\n }\n },\n startgg: {\n authorizationUrl: \"https://start.gg/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"data\",\n \"currentUser\",\n \"id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n body: {\n query: `query { currentUser { id slug email player { gamerTag } } }`\n },\n encoding: \"application/json\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\",\n url: \"https://api.start.gg/gql/alpha\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.start.gg/oauth/access_token\"\n }\n },\n strava: {\n authorizationUrl: \"https://www.strava.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.strava.com/api/v3/athlete\"\n },\n revocationRequest: {\n authIn: \"query\",\n body: new URLSearchParams({\n token_type_hint: \"access_token\"\n }),\n encoding: \"application/json\",\n tokenParamName: \"access_token\",\n url: \"https://www.strava.com/oauth/deauthorize\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.strava.com/oauth/token\"\n }\n },\n synology: {\n authorizationUrl: (config) => `${config.baseURL}/webman/sso/SSOOauth.cgi?client_id=${config.clientId}&response_type=code&redirect_uri=${config.redirectUri}`,\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `${config.baseURL}/webman/sso/SSOUserInfo.cgi?client_id=${config.clientId}&access_token=${config.accessToken}`\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/webman/sso/SSOAccessToken.cgi?client_id=${config.clientId}&client_secret=${config.clientSecret}`\n }\n },\n tiktok: {\n authorizationUrl: \"https://www.tiktok.com/v2/auth/authorize\",\n createAuthorizationURLSearchParams: (config) => ({\n client_key: config.clientId\n }),\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"data\",\n \"open_id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://open.douyin.com/oauth/userinfo\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://open.tiktokapis.com/v2/oauth/revoke/\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://open.tiktokapis.com/v2/oauth/token/\"\n }\n },\n tiltify: {\n authorizationUrl: \"https://v5api.tiltify.com/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://v5api.tiltify.com/api/public/current-user\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://v5api.tiltify.com/oauth/token\"\n }\n },\n tumblr: {\n authorizationUrl: \"https://www.tumblr.com/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"response\",\n \"user\",\n \"name\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.tumblr.com/v2/user/info\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.tumblr.com/v2/oauth2/token\"\n }\n },\n twitch: {\n authorizationUrl: \"https://id.twitch.tv/oauth2/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n headers: (config) => ({\n \"Client-Id\": config.clientId\n }),\n method: \"GET\",\n url: \"https://api.twitch.tv/helix/users\"\n },\n revocationRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n headers: (config) => ({\n \"Client-Id\": config.clientId\n }),\n tokenParamName: \"token\",\n url: \"https://id.twitch.tv/oauth2/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://id.twitch.tv/oauth2/token\"\n }\n },\n twitter: {\n authorizationUrl: \"https://twitter.com/i/oauth2/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"data\", \"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.twitter.com/2/users/me\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.twitter.com/2/oauth2/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.twitter.com/2/oauth2/token\"\n }\n },\n vk: {\n authorizationUrl: \"https://oauth.vk.com/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"response\",\n \"0\",\n \"id\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.vk.com/method/users.get\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.vk.com/access_token\"\n }\n },\n withings: {\n authorizationUrl: \"https://account.withings.com/oauth2_user/authorize2\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\n \"body\",\n \"userid\"\n ]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected number, got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n body: async (config) => {\n const props = await getWithingsProps(config);\n if (props === undefined)\n throw new Error(\"Failed to get Withings search properties\");\n const { nonce, hashedSignature } = props;\n return [\n [\"action\", \"getuser\"],\n [\"nonce\", nonce],\n [\"client_id\", config.clientId],\n [\"signature\", hashedSignature]\n ];\n },\n encoding: \"application/x-www-form-urlencoded\",\n method: \"POST\",\n url: \"https://wbsapi.withings.net/v2/oauth2\"\n },\n refreshAccessTokenBody: {\n action: \"requesttoken\"\n },\n revocationRequest: {\n authIn: \"header\",\n body: async (config) => {\n const props = await getWithingsProps(config);\n if (!props)\n throw new Error(\"Failed to get Withings props\");\n const { nonce, hashedSignature } = props;\n return [\n [\"action\", \"revoke\"],\n [\"client_id\", config.clientId],\n [\"nonce\", nonce],\n [\"signature\", hashedSignature]\n ];\n },\n encoding: \"application/x-www-form-urlencoded\",\n method: \"POST\",\n url: \"https://wbsapi.withings.net/v2/oauth2\"\n },\n scopeRequired: true,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://wbsapi.withings.net/v2/oauth2\"\n },\n validateAuthorizationCodeBody: {\n action: \"requesttoken\"\n }\n },\n workos: {\n authorizationUrl: \"https://api.workos.com/sso/authorize\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.workos.com/sso/userinfo\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.workos.com/sso/token\"\n }\n },\n yahoo: {\n authorizationUrl: \"https://api.login.yahoo.com/oauth2/request_auth\",\n extractSubjectFromIdentity: extractSubFromOIDCIdentity,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.login.yahoo.com/openid/v1/userinfo\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.login.yahoo.com/oauth2/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.login.yahoo.com/oauth2/get_token\"\n }\n },\n yandex: {\n authorizationUrl: \"https://oauth.yandex.com/authorize\",\n createAuthorizationURLSearchParams: {\n device_id: crypto.randomUUID(),\n device_name: `${navigator.platform ?? \"Unknown\"} \\u2014 ${(navigator.userAgent.split(\")\")[0] || \"\").split(\"(\").pop() || \"Unknown\"}`\n },\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://login.yandex.ru/info\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"access_token\",\n url: \"https://oauth.yandex.com/revoke_token\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.yandex.com/token\"\n }\n },\n zoom: {\n authorizationUrl: \"https://zoom.us/oauth/authorize\",\n extractSubjectFromIdentity(identity) {\n const subject = extractPropFromIdentity(identity, [\"id\"]);\n if (typeof subject !== \"number\") {\n throw new Error(`Invalid identity data shape: expected string got ${typeof subject}`);\n }\n return subject;\n },\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.zoom.us/v2/users/me\"\n },\n revocationRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n headers: (config) => ({\n Authorization: `Basic ${btoa(`${config.clientId}:${config.clientSecret}`)}`\n }),\n tokenParamName: \"token\",\n url: \"https://zoom.us/oauth/revoke\"\n },\n scopeRequired: false,\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://zoom.us/oauth/token\"\n }\n }\n});\nvar providerOptions = Object.keys(providers).filter(isValidProviderOption);\nvar refreshableProviderOptions = Object.keys(providers).filter(isRefreshableProviderOption);\nvar oidcProviderOptions = Object.keys(providers).filter(isOIDCProviderOption);\nvar revocableProviderOptions = Object.keys(providers).filter(isRevocableProviderOption);\nvar scopeRequiredProviderOptions = Object.keys(providers).filter(isScopeRequiredProviderOption);\nvar pkceProviderOptions = Object.keys(providers).filter(isPKCEProviderOption);\n\n// src/index.ts\nvar createOAuth2Client = async (providerName, config) => {\n const meta = providers[providerName];\n const isConfigPropertyFunction = (cfgProp) => typeof cfgProp === \"function\";\n const resolveConfigProp = async (cfgProp) => {\n const result = isConfigPropertyFunction(cfgProp) ? cfgProp(config) : cfgProp;\n return await result;\n };\n const authorizationUrl = await resolveConfigProp(meta.authorizationUrl);\n const tokenUrl = await resolveConfigProp(meta.tokenRequest.url);\n return {\n async createAuthorizationUrl(opts) {\n const { state, scope = [], searchParams = [], codeVerifier } = opts;\n const url = new URL(authorizationUrl);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"client_id\", config.clientId);\n if (config.redirectUri)\n url.searchParams.set(\"redirect_uri\", config.redirectUri);\n if (state)\n url.searchParams.set(\"state\", state);\n if (scope.length !== 0) {\n const delimeter = providerName === \"withings\" ? \",\" : \" \";\n url.searchParams.set(\"scope\", scope.join(delimeter));\n }\n if (meta.PKCEMethod !== undefined) {\n if (!codeVerifier) {\n throw new Error(\"`codeVerifier` is required when PKCE is enabled\");\n }\n const codeChallenge = meta.PKCEMethod === \"S256\" ? await createS256CodeChallenge(codeVerifier) : codeVerifier;\n url.searchParams.set(\"code_challenge_method\", meta.PKCEMethod);\n url.searchParams.set(\"code_challenge\", codeChallenge);\n }\n Object.entries(resolveConfigProp(meta.createAuthorizationURLSearchParams) ?? {}).forEach(([key, value]) => url.searchParams.set(key, value));\n searchParams.forEach(([key, value]) => url.searchParams.set(key, value));\n return url;\n },\n async fetchUserProfile(accessToken) {\n const { profileRequest } = meta;\n const {\n url,\n method,\n authIn,\n searchParams,\n body: profileBody,\n headers,\n encoding\n } = profileRequest;\n const endpoint = new URL(await resolveConfigProp(url));\n const resolvedBody = await resolveConfigProp(profileBody);\n new URLSearchParams(await resolveConfigProp(searchParams)).forEach((value, key) => endpoint.searchParams.append(key, value));\n let headerEntries = [];\n const rawHeaders = headers ? await resolveConfigProp(headers) : undefined;\n if (rawHeaders instanceof Headers)\n headerEntries = Array.from(rawHeaders.entries());\n else if (Array.isArray(rawHeaders))\n headerEntries = rawHeaders;\n else if (rawHeaders && typeof rawHeaders === \"object\")\n headerEntries = Object.entries(rawHeaders);\n const profileHeaders = Object.fromEntries(headerEntries.filter(([, v]) => v !== \"\"));\n if (authIn === \"header\") {\n profileHeaders.Authorization = `Bearer ${accessToken}`;\n } else {\n endpoint.searchParams.append(\"access_token\", accessToken);\n }\n const init = { headers: profileHeaders, method };\n if (method === \"POST\" && resolvedBody != null) {\n profileHeaders[\"Content-Type\"] = encoding;\n init.body = encoding === \"application/json\" ? JSON.stringify(resolvedBody) : new URLSearchParams(resolvedBody).toString();\n }\n const response = await fetch(endpoint.toString(), init);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n return response.json();\n },\n async refreshAccessToken(refreshToken) {\n const { authIn, encoding } = meta.tokenRequest;\n const params = new URLSearchParams(meta.refreshAccessTokenBody);\n params.set(\"grant_type\", \"refresh_token\");\n params.set(\"refresh_token\", refreshToken);\n const { clientId } = config;\n let clientSecretValue;\n if (hasClientSecret(config)) {\n clientSecretValue = config.clientSecret;\n params.set(\"client_id\", clientId);\n params.set(\"client_secret\", clientSecretValue);\n }\n const request = createOAuth2Request({\n authIn,\n body: params,\n clientId,\n clientSecret: clientSecretValue,\n encoding,\n url: tokenUrl\n });\n const response = await fetch(request);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n return response.json();\n },\n async revokeToken(token) {\n const { revocationRequest } = meta;\n if (!revocationRequest) {\n throw new Error(\"Token revocation not defined for this provider\");\n }\n const { url, authIn, body, headers, tokenParamName } = revocationRequest;\n const endpoint = await resolveConfigProp(url);\n const resolvedBody = await resolveConfigProp(body);\n const revocationBody = new URLSearchParams(resolvedBody);\n const revocationHeaders = new Headers(headers && await resolveConfigProp(headers));\n const { clientId } = config;\n const clientSecret = hasClientSecret(config) ? config.clientSecret : undefined;\n let request;\n if (authIn === \"body\") {\n revocationBody.set(tokenParamName, token);\n revocationBody.set(\"client_id\", clientId);\n if (clientSecret)\n revocationBody.set(\"client_secret\", clientSecret);\n request = createOAuth2Request({\n authIn: \"body\",\n body: revocationBody,\n clientId,\n clientSecret,\n encoding: \"application/x-www-form-urlencoded\",\n headers: revocationHeaders,\n url: endpoint.toString()\n });\n } else if (authIn === \"header\") {\n revocationHeaders.set(\"Authorization\", `Bearer ${token}`);\n request = createOAuth2Request({\n authIn: \"header\",\n body: revocationBody,\n clientId,\n clientSecret,\n encoding: \"application/x-www-form-urlencoded\",\n headers: revocationHeaders,\n url: endpoint.toString()\n });\n } else {\n request = createOAuth2Request({\n authIn: \"query\",\n body: revocationBody,\n clientId,\n clientSecret,\n encoding: \"application/x-www-form-urlencoded\",\n headers: revocationHeaders,\n url: `${endpoint.toString()}?${tokenParamName}=${token}`\n });\n }\n const response = await fetch(request);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n },\n async validateAuthorizationCode(opts) {\n const { code, codeVerifier } = opts;\n const { authIn, encoding } = meta.tokenRequest;\n const bodyObj = {};\n for (const key in meta.validateAuthorizationCodeBody ?? {}) {\n const value = meta.validateAuthorizationCodeBody[key];\n if (typeof value === \"string\")\n bodyObj[key] = value;\n }\n bodyObj.grant_type = \"authorization_code\";\n bodyObj.code = code;\n if (config.redirectUri)\n bodyObj.redirect_uri = config.redirectUri;\n if (meta.PKCEMethod !== undefined) {\n if (!codeVerifier) {\n throw new Error(\"codeVerifier required when PKCE is enabled\");\n }\n bodyObj.code_verifier = codeVerifier;\n }\n const payload = encoding === \"application/json\" ? bodyObj : new URLSearchParams(bodyObj);\n const request = createOAuth2Request({\n authIn,\n body: payload,\n clientId: config.clientId,\n clientSecret: hasClientSecret(config) ? config.clientSecret : undefined,\n encoding,\n url: tokenUrl\n });\n const response = await fetch(request);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n return response.json();\n }\n };\n};\nexport {\n scopeRequiredProviderOptions,\n revocableProviderOptions,\n refreshableProviderOptions,\n providers,\n providerOptions,\n pkceProviderOptions,\n oidcProviderOptions,\n isValidProviderOption,\n isScopeRequiredProviderOption,\n isRevocableProviderOption,\n isRevocableOAuth2Client,\n isRefreshableProviderOption,\n isRefreshableOAuth2Client,\n isPKCEProviderOption,\n isObject,\n isOIDCProviderOption,\n hmacSha256,\n hasClientSecret,\n getWithingsProps,\n generateState,\n generateCodeVerifier,\n encodeBase64,\n defineProviders,\n decodeJWT,\n decodeBase64,\n createS256CodeChallenge,\n createOAuth2Request,\n createOAuth2FetchError,\n createOAuth2Client\n};\n",
|
|
6
6
|
"import { isValidProviderOption, createOAuth2Client } from 'citra';\nimport { Elysia } from 'elysia';\nimport { authorize } from './authorize';\nimport { callback } from './callback';\nimport { profile } from './profile';\nimport { protectRoute } from './protectRoute';\nimport { refresh } from './refresh';\nimport { revoke } from './revoke';\nimport { signout } from './signout';\nimport { status } from './status';\nimport { AbsoluteAuthProps, ClientProviders } from './types';\n\nexport const absoluteAuth = async <UserType>({\n\tprovidersConfiguration,\n\tauthorizeRoute,\n\tcallbackRoute,\n\tprofileRoute,\n\tsignoutRoute,\n\tstatusRoute,\n\trefreshRoute,\n\trevokeRoute,\n\tonAuthorizeSuccess,\n\tonAuthorizeError,\n\tonProfileSuccess,\n\tonProfileError,\n\tonCallbackSuccess,\n\tonCallbackError,\n\tonStatus,\n\tonRefreshSuccess,\n\tonRefreshError,\n\tonSignOut,\n\tonRevocationSuccess,\n\tonRevocationError\n}: AbsoluteAuthProps<UserType>) => {\n\tconst entryPromises: Array<Promise<[string, ClientProviders[string]]>> = [];\n\n\tfor (const [providerName, providerConfig] of Object.entries(\n\t\tprovidersConfiguration\n\t)) {\n\t\tif (!isValidProviderOption(providerName)) continue;\n\n\t\tentryPromises.push(\n\t\t\tcreateOAuth2Client(providerName, providerConfig.credentials).then(\n\t\t\t\t(providerInstance) => [\n\t\t\t\t\tproviderName,\n\t\t\t\t\t{\n\t\t\t\t\t\tproviderInstance,\n\t\t\t\t\t\tscope: providerConfig.scope,\n\t\t\t\t\t\tsearchParams: providerConfig.searchParams\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t)\n\t\t);\n\t}\n\n\tconst clientProviders: ClientProviders = Object.fromEntries(\n\t\tawait Promise.all(entryPromises)\n\t);\n\n\treturn new Elysia()\n\t\t.use(signout({ onSignOut, signoutRoute }))\n\t\t.use(\n\t\t\trevoke({\n\t\t\t\tclientProviders,\n\t\t\t\tonRevocationError,\n\t\t\t\tonRevocationSuccess,\n\t\t\t\trevokeRoute\n\t\t\t})\n\t\t)\n\t\t.use(status<UserType>({ onStatus, statusRoute }))\n\t\t.use(\n\t\t\trefresh({\n\t\t\t\tclientProviders,\n\t\t\t\tonRefreshError,\n\t\t\t\tonRefreshSuccess,\n\t\t\t\trefreshRoute\n\t\t\t})\n\t\t)\n\t\t.use(\n\t\t\tauthorize({\n\t\t\t\tauthorizeRoute,\n\t\t\t\tclientProviders,\n\t\t\t\tonAuthorizeError,\n\t\t\t\tonAuthorizeSuccess\n\t\t\t})\n\t\t)\n\t\t.use(\n\t\t\tcallback<UserType>({\n\t\t\t\tcallbackRoute,\n\t\t\t\tclientProviders,\n\t\t\t\tonCallbackError,\n\t\t\t\tonCallbackSuccess\n\t\t\t})\n\t\t)\n\t\t.use(\n\t\t\tprofile({\n\t\t\t\tclientProviders,\n\t\t\t\tonProfileError,\n\t\t\t\tonProfileSuccess,\n\t\t\t\tprofileRoute\n\t\t\t})\n\t\t)\n\t\t.use(protectRoute());\n};\n\nexport * from './types';\nexport { isValidUser } from './typeGuards';\nexport * from './utils';\nexport type {\n\tOAuth2TokenResponse,\n\tOAuth2Client,\n\tProviderOption,\n\tPKCEProvider,\n\tOIDCProvider,\n\tRefreshableProvider,\n\tRevocableProvider,\n\tScopeRequiredProvider,\n\tCredentialsFor\n} from 'citra';\n\nexport {\n\tproviderOptions,\n\trefreshableProviderOptions,\n\trevocableProviderOptions,\n\toidcProviderOptions,\n\tpkceProviderOptions,\n\tscopeRequiredProviderOptions,\n\tdecodeJWT,\n\tisValidProviderOption,\n\tisRefreshableOAuth2Client,\n\tisRefreshableProviderOption,\n\tisOIDCProviderOption,\n\tisPKCEProviderOption,\n\tisRevocableProviderOption,\n\tisRevocableOAuth2Client\n} from 'citra';\n",
|
|
7
7
|
"import {\n\tgenerateCodeVerifier,\n\tgenerateState,\n\tisPKCEProviderOption,\n\tisValidProviderOption\n} from 'citra';\nimport { Elysia } from 'elysia';\nimport { COOKIE_DURATION } from './constants';\nimport {\n\tAuthorizeRoute,\n\tClientProviders,\n\tOnAuthorizeError,\n\tOnAuthorizeSuccess\n} from './types';\n\ntype AuthorizeProps = {\n\tclientProviders: ClientProviders;\n\tauthorizeRoute?: AuthorizeRoute;\n\tonAuthorizeSuccess: OnAuthorizeSuccess;\n\tonAuthorizeError: OnAuthorizeError;\n};\n\nexport const authorize = ({\n\tclientProviders,\n\tauthorizeRoute = '/oauth2/:provider/authorization',\n\tonAuthorizeSuccess,\n\tonAuthorizeError\n}: AuthorizeProps) =>\n\tnew Elysia().get(\n\t\tauthorizeRoute,\n\t\tasync ({\n\t\t\terror,\n\t\t\tredirect,\n\t\t\tcookie: { state, code_verifier, auth_provider, origin_url },\n\t\t\tparams: { provider },\n\t\t\theaders\n\t\t}) => {\n\t\t\tif (\n\t\t\t\tauth_provider === undefined ||\n\t\t\t\torigin_url === undefined ||\n\t\t\t\tstate === undefined ||\n\t\t\t\tcode_verifier === undefined\n\t\t\t)\n\t\t\t\treturn error('Bad Request', 'Cookies are missing');\n\n\t\t\tif (provider === undefined)\n\t\t\t\treturn error('Bad Request', 'Provider is required');\n\n\t\t\tif (!isValidProviderOption(provider))\n\t\t\t\treturn error('Bad Request', 'Invalid provider');\n\n\t\t\tconst providerConfig = clientProviders[provider];\n\t\t\tif (!providerConfig)\n\t\t\t\treturn error('Unauthorized', 'Client provider not found');\n\n\t\t\tconst { providerInstance, scope, searchParams } = providerConfig;\n\t\t\tconst referer = headers['referer'] ?? '/';\n\n\t\t\torigin_url.set({\n\t\t\t\thttpOnly: true,\n\t\t\t\tmaxAge: COOKIE_DURATION,\n\t\t\t\tpath: '/',\n\t\t\t\tsameSite: 'lax',\n\t\t\t\tsecure: true,\n\t\t\t\tvalue: referer\n\t\t\t});\n\n\t\t\tauth_provider.set({\n\t\t\t\thttpOnly: true,\n\t\t\t\tmaxAge: COOKIE_DURATION,\n\t\t\t\tpath: '/',\n\t\t\t\tsameSite: 'lax',\n\t\t\t\tsecure: true,\n\t\t\t\tvalue: provider\n\t\t\t});\n\n\t\t\tconst currentState = generateState();\n\t\t\tstate.set({\n\t\t\t\thttpOnly: true,\n\t\t\t\tmaxAge: COOKIE_DURATION,\n\t\t\t\tpath: '/',\n\t\t\t\tsameSite: 'lax',\n\t\t\t\tsecure: true,\n\t\t\t\tvalue: currentState\n\t\t\t});\n\n\t\t\tconst codeVerifier = isPKCEProviderOption(provider)\n\t\t\t\t? generateCodeVerifier()\n\t\t\t\t: undefined;\n\n\t\t\tif (codeVerifier) {\n\t\t\t\tcode_verifier.set({\n\t\t\t\t\thttpOnly: true,\n\t\t\t\t\tmaxAge: COOKIE_DURATION,\n\t\t\t\t\tpath: '/',\n\t\t\t\t\tsameSite: 'lax',\n\t\t\t\t\tsecure: true,\n\t\t\t\t\tvalue: codeVerifier\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst authorizationURL =\n\t\t\t\t\tawait providerInstance.createAuthorizationUrl(\n\t\t\t\t\t\tcodeVerifier\n\t\t\t\t\t\t\t? { codeVerifier, scope, state: currentState }\n\t\t\t\t\t\t\t: { scope, state: currentState }\n\t\t\t\t\t);\n\n\t\t\t\tsearchParams?.forEach(([key, value]) =>\n\t\t\t\t\tauthorizationURL.searchParams.set(key, value)\n\t\t\t\t);\n\n\t\t\t\tawait onAuthorizeSuccess?.({\n\t\t\t\t\tauthorizationUrl: authorizationURL,\n\t\t\t\t\tauthProvider: provider\n\t\t\t\t});\n\n\t\t\t\treturn redirect(authorizationURL.toString());\n\t\t\t} catch (err) {\n\t\t\t\tawait onAuthorizeError?.({\n\t\t\t\t\tauthProvider: provider,\n\t\t\t\t\terror: err\n\t\t\t\t});\n\n\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\treturn error(\n\t\t\t\t\t\t'Internal Server Error',\n\t\t\t\t\t\t`${err.message} - ${err.stack ?? ''}`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn error('Internal Server Error', `Unknown error: ${err}`);\n\t\t\t}\n\t\t}\n\t);\n",
|
|
8
8
|
"export const SECONDS_IN_A_MINUTE = 60;\nexport const MILLISECONDS_IN_A_SECOND = 1000;\nexport const MILLISECONDS_IN_A_MINUTE =\n\tMILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE;\nexport const MINUTES_IN_AN_HOUR = 60;\nexport const HOURS_IN_A_DAY = 24;\nexport const MILLISECONDS_IN_A_DAY =\n\tMILLISECONDS_IN_A_SECOND *\n\tSECONDS_IN_A_MINUTE *\n\tMINUTES_IN_AN_HOUR *\n\tHOURS_IN_A_DAY;\nexport const COOKIE_MINUTES = 30;\nexport const COOKIE_DURATION = SECONDS_IN_A_MINUTE * COOKIE_MINUTES;\n",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"import { Elysia } from 'elysia';\nimport { sessionStore } from './sessionStore';\nimport { OnStatus, RouteString } from './types';\n\ntype StatusProps<UserType> = {\n\tstatusRoute?: RouteString;\n\tonStatus: OnStatus<UserType>;\n};\n\nexport const status = <UserType>({\n\tstatusRoute = '/oauth2/status',\n\tonStatus\n}: StatusProps<UserType>) =>\n\tnew Elysia()\n\t\t.use(sessionStore<UserType>())\n\t\t.get(\n\t\t\tstatusRoute,\n\t\t\tasync ({\n\t\t\t\terror,\n\t\t\t\tcookie: { user_session_id },\n\t\t\t\tstore: { session }\n\t\t\t}) => {\n\t\t\t\tif (user_session_id === undefined) {\n\t\t\t\t\treturn error('Bad Request', 'Cookies are missing');\n\t\t\t\t}\n\n\t\t\t\tconst sessionId = user_session_id.value;\n\t\t\t\tconst user =\n\t\t\t\t\tsessionId !== undefined && session[sessionId]\n\t\t\t\t\t\t? session[sessionId].user\n\t\t\t\t\t\t: null;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait onStatus?.({ user });\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\t\treturn error(\n\t\t\t\t\t\t\t'Internal Server Error',\n\t\t\t\t\t\t\t`Error: ${err.message} - ${err.stack ?? ''}`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn error(\n\t\t\t\t\t\t'Internal Server Error',\n\t\t\t\t\t\t`Unknown Error: ${err}`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn new Response(\n\t\t\t\t\tJSON.stringify({ isLoggedIn: user !== null, user }),\n\t\t\t\t\t{ headers: { 'Content-Type': 'application/json' } }\n\t\t\t\t);\n\t\t\t}\n\t\t);\n",
|
|
18
18
|
"import { decodeJWT } from 'citra';\nimport { MILLISECONDS_IN_A_DAY } from './constants';\nimport { isValidUser } from './typeGuards';\nimport {\n\tAbsoluteAuthProps,\n\tInsantiateUserSessionProps,\n\tOAuth2ConfigurationOptions\n} from './types';\n\nexport const instantiateUserSession = async <UserType>({\n\tuserSessionId,\n\tauthProvider,\n\tsession,\n\ttokenResponse,\n\tproviderInstance,\n\tgetUser,\n\tcreateUser\n}: InsantiateUserSessionProps<UserType>) => {\n\tlet userIdentity;\n\n\tif (tokenResponse.id_token) {\n\t\tuserIdentity = decodeJWT(tokenResponse.id_token);\n\t} else if (authProvider === 'withings') {\n\t\t// @ts-expect-error TODO: Withings is its own case edit the validate response to accept this case\n\t\tuserIdentity = tokenResponse.body;\n\t} else {\n\t\tuserIdentity = await providerInstance.fetchUserProfile(\n\t\t\ttokenResponse.access_token\n\t\t);\n\t}\n\n\tlet user = await getUser(userIdentity);\n\tuser = user ?? (await createUser(userIdentity));\n\n\t// TODO : See if theres a better way to check valid user and not throw an error\n\tif (!isValidUser<UserType>(user))\n\t\tthrow new Error('Internal Server Error - Invalid user schema');\n\n\tsession[userSessionId] = {\n\t\taccessToken: tokenResponse.access_token,\n\t\texpiresAt: Date.now() + MILLISECONDS_IN_A_DAY,\n\t\trefreshToken: tokenResponse.refresh_token,\n\t\tuser\n\t};\n};\n\nexport const createAuthConfiguration = <UserType>(\n\tconfiguration: AbsoluteAuthProps<UserType>\n) => configuration;\n\nexport const createProvidersConfiguration = (\n\tprovidersConfiguration: OAuth2ConfigurationOptions\n) => providersConfiguration;\n"
|
|
19
19
|
],
|
|
20
|
-
"mappings": "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",
|
|
21
|
-
"debugId": "
|
|
20
|
+
"mappings": "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",
|
|
21
|
+
"debugId": "21F30351EC82AA0A64756E2164756E21",
|
|
22
22
|
"names": []
|
|
23
23
|
}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.13.
|
|
2
|
+
"version": "0.13.2",
|
|
3
3
|
"name": "@absolutejs/auth",
|
|
4
4
|
"description": "An authorization library for absolutejs",
|
|
5
5
|
"repository": {
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"elysia": ">= 1.2.25"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"citra": "0.22.
|
|
36
|
+
"citra": "0.22.2"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@absolutejs/absolute": "0.4.0",
|