antarctic 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +252 -0
  2. package/dist/auth.d.ts +19 -11
  3. package/dist/auth.js +16 -23
  4. package/dist/index.d.ts +1 -1
  5. package/dist/providers/42.d.ts +4 -4
  6. package/dist/providers/42.js +9 -8
  7. package/dist/providers/amazon-cognito.d.ts +4 -4
  8. package/dist/providers/amazon-cognito.js +9 -8
  9. package/dist/providers/anilist.d.ts +4 -4
  10. package/dist/providers/anilist.js +10 -9
  11. package/dist/providers/apple.d.ts +3 -3
  12. package/dist/providers/apple.js +8 -7
  13. package/dist/providers/atlassian.d.ts +4 -4
  14. package/dist/providers/atlassian.js +9 -8
  15. package/dist/providers/auth0.d.ts +4 -4
  16. package/dist/providers/auth0.js +9 -8
  17. package/dist/providers/authentik.d.ts +4 -4
  18. package/dist/providers/authentik.js +9 -8
  19. package/dist/providers/autodesk.d.ts +4 -4
  20. package/dist/providers/autodesk.js +9 -8
  21. package/dist/providers/battlenet.d.ts +4 -4
  22. package/dist/providers/battlenet.js +9 -8
  23. package/dist/providers/bitbucket.d.ts +4 -4
  24. package/dist/providers/bitbucket.js +10 -9
  25. package/dist/providers/box.d.ts +4 -4
  26. package/dist/providers/box.js +9 -8
  27. package/dist/providers/bungie.d.ts +4 -4
  28. package/dist/providers/bungie.js +9 -8
  29. package/dist/providers/coinbase.d.ts +4 -4
  30. package/dist/providers/coinbase.js +9 -8
  31. package/dist/providers/discord.d.ts +4 -4
  32. package/dist/providers/discord.js +9 -8
  33. package/dist/providers/donation-alerts.d.ts +4 -4
  34. package/dist/providers/donation-alerts.js +9 -8
  35. package/dist/providers/dribbble.d.ts +4 -4
  36. package/dist/providers/dribbble.js +9 -8
  37. package/dist/providers/dropbox.d.ts +4 -4
  38. package/dist/providers/dropbox.js +9 -8
  39. package/dist/providers/epicgames.d.ts +4 -4
  40. package/dist/providers/epicgames.js +9 -8
  41. package/dist/providers/etsy.d.ts +4 -4
  42. package/dist/providers/etsy.js +8 -7
  43. package/dist/providers/facebook.d.ts +4 -4
  44. package/dist/providers/facebook.js +9 -8
  45. package/dist/providers/figma.d.ts +4 -4
  46. package/dist/providers/figma.js +9 -8
  47. package/dist/providers/gitea.d.ts +4 -4
  48. package/dist/providers/gitea.js +9 -8
  49. package/dist/providers/github.d.ts +4 -4
  50. package/dist/providers/github.js +9 -8
  51. package/dist/providers/gitlab.d.ts +4 -4
  52. package/dist/providers/gitlab.js +9 -8
  53. package/dist/providers/google.d.ts +4 -4
  54. package/dist/providers/google.js +9 -8
  55. package/dist/providers/intuit.d.ts +4 -4
  56. package/dist/providers/intuit.js +9 -8
  57. package/dist/providers/kakao.d.ts +4 -4
  58. package/dist/providers/kakao.js +9 -8
  59. package/dist/providers/keycloak.d.ts +4 -4
  60. package/dist/providers/keycloak.js +9 -8
  61. package/dist/providers/kick.d.ts +4 -4
  62. package/dist/providers/kick.js +9 -8
  63. package/dist/providers/lichess.d.ts +4 -4
  64. package/dist/providers/lichess.js +9 -8
  65. package/dist/providers/line.d.ts +4 -4
  66. package/dist/providers/line.js +9 -8
  67. package/dist/providers/linear.d.ts +4 -4
  68. package/dist/providers/linear.js +9 -8
  69. package/dist/providers/linkedin.d.ts +4 -4
  70. package/dist/providers/linkedin.js +9 -8
  71. package/dist/providers/mastodon.d.ts +4 -4
  72. package/dist/providers/mastodon.js +9 -8
  73. package/dist/providers/mercadolibre.d.ts +4 -4
  74. package/dist/providers/mercadolibre.js +10 -9
  75. package/dist/providers/mercadopago.d.ts +4 -4
  76. package/dist/providers/mercadopago.js +10 -9
  77. package/dist/providers/microsoft-entra-id.d.ts +4 -4
  78. package/dist/providers/microsoft-entra-id.js +9 -8
  79. package/dist/providers/myanimelist.d.ts +4 -4
  80. package/dist/providers/myanimelist.js +10 -9
  81. package/dist/providers/naver.d.ts +4 -4
  82. package/dist/providers/naver.js +10 -9
  83. package/dist/providers/notion.d.ts +4 -4
  84. package/dist/providers/notion.js +10 -9
  85. package/dist/providers/okta.d.ts +4 -4
  86. package/dist/providers/okta.js +9 -8
  87. package/dist/providers/osu.d.ts +4 -4
  88. package/dist/providers/osu.js +9 -8
  89. package/dist/providers/patreon.d.ts +4 -4
  90. package/dist/providers/patreon.js +9 -8
  91. package/dist/providers/polar.d.ts +4 -4
  92. package/dist/providers/polar.js +9 -8
  93. package/dist/providers/reddit.d.ts +4 -4
  94. package/dist/providers/reddit.js +9 -8
  95. package/dist/providers/roblox.d.ts +4 -4
  96. package/dist/providers/roblox.js +9 -8
  97. package/dist/providers/salesforce.d.ts +4 -4
  98. package/dist/providers/salesforce.js +9 -8
  99. package/dist/providers/shikimori.d.ts +4 -4
  100. package/dist/providers/shikimori.js +10 -9
  101. package/dist/providers/slack.d.ts +4 -4
  102. package/dist/providers/slack.js +9 -8
  103. package/dist/providers/spotify.d.ts +4 -4
  104. package/dist/providers/spotify.js +9 -8
  105. package/dist/providers/startgg.d.ts +4 -4
  106. package/dist/providers/startgg.js +8 -7
  107. package/dist/providers/strava.d.ts +4 -4
  108. package/dist/providers/strava.js +9 -8
  109. package/dist/providers/tiktok.d.ts +4 -4
  110. package/dist/providers/tiktok.js +9 -8
  111. package/dist/providers/tiltify.d.ts +4 -4
  112. package/dist/providers/tiltify.js +9 -8
  113. package/dist/providers/tumblr.d.ts +4 -4
  114. package/dist/providers/tumblr.js +9 -8
  115. package/dist/providers/twitch.d.ts +4 -4
  116. package/dist/providers/twitch.js +9 -8
  117. package/dist/providers/twitter.d.ts +4 -4
  118. package/dist/providers/twitter.js +9 -8
  119. package/dist/providers/vk.d.ts +4 -4
  120. package/dist/providers/vk.js +9 -8
  121. package/dist/providers/withings.d.ts +4 -4
  122. package/dist/providers/withings.js +9 -8
  123. package/dist/providers/workos.d.ts +4 -4
  124. package/dist/providers/workos.js +10 -9
  125. package/dist/providers/yahoo.d.ts +4 -4
  126. package/dist/providers/yahoo.js +9 -8
  127. package/dist/providers/yandex.d.ts +4 -4
  128. package/dist/providers/yandex.js +9 -8
  129. package/dist/providers/zoom.d.ts +4 -4
  130. package/dist/providers/zoom.js +9 -8
  131. package/package.json +2 -1
  132. package/readme.md +0 -155
@@ -1,5 +1,5 @@
1
1
  import { createOAuth2Request, sendTokenRequest } from "../request.js";
2
- import { consumeOAuthState, fetchUserProfile, generateOAuthState, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveScopes, saveOAuthState } from "../auth.js";
2
+ import { extractOAuthTokens, fetchUserProfile, generateOAuthState, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveOAuthState, resolveScopes } from "../auth.js";
3
3
  const authorizationEndpoint = "https://auth.atlassian.com/authorize";
4
4
  const tokenEndpoint = "https://auth.atlassian.com/oauth/token";
5
5
  const userEndpoint = "https://api.atlassian.com/me";
@@ -10,7 +10,7 @@ export class Atlassian {
10
10
  clientSecret;
11
11
  redirectURI;
12
12
  auth = null;
13
- constructor(clientIdOrOptions, clientSecret, redirectURI) {
13
+ constructor(clientIdOrOptions = {}, clientSecret, redirectURI) {
14
14
  if (typeof clientIdOrOptions === "object") {
15
15
  this.auth = resolveAuthConfig(envPrefix, clientIdOrOptions, {
16
16
  clientSecret: true,
@@ -64,13 +64,13 @@ export class Atlassian {
64
64
  const auth = requireAuthConfig(this.auth);
65
65
  const state = generateOAuthState();
66
66
  const url = this.createAuthorizationURL(state, resolveScopes(scopes, auth, defaultScopes));
67
- await saveOAuthState(auth.store, state, {});
68
- return url;
67
+ const payload = {};
68
+ return { url, state, payload };
69
69
  }
70
- async getUser(query) {
71
- const auth = requireAuthConfig(this.auth);
70
+ async getUser(query, saved) {
71
+ requireAuthConfig(this.auth);
72
72
  const { code, state } = parseCallbackQuery(query);
73
- await consumeOAuthState(auth.store, state);
73
+ resolveOAuthState(state, saved);
74
74
  const tokens = await this.validateAuthorizationCode(code);
75
75
  const profile = await fetchUserProfile(userEndpoint, tokens.accessToken());
76
76
  return {
@@ -78,7 +78,8 @@ export class Atlassian {
78
78
  name: profileString(profile.name) ?? profileString(profile.nickname),
79
79
  email: profileString(profile.email),
80
80
  image: profileString(profile.picture),
81
- raw: profile
81
+ raw: profile,
82
+ ...extractOAuthTokens(tokens)
82
83
  };
83
84
  }
84
85
  }
@@ -1,5 +1,5 @@
1
1
  import type { OAuth2Tokens } from "../oauth2.js";
2
- import type { OAuthCallbackQuery, OAuthUser, ProviderOptions } from "../auth.js";
2
+ import type { AuthorizationRequest, OAuthCallbackQuery, OAuthUser, ProviderOptions, SavedOAuthState } from "../auth.js";
3
3
  export interface Auth0Options extends ProviderOptions {
4
4
  domain?: string;
5
5
  }
@@ -10,12 +10,12 @@ export declare class Auth0 {
10
10
  private userinfoEndpoint;
11
11
  private client;
12
12
  private auth;
13
- constructor(options: Auth0Options);
13
+ constructor(options?: Auth0Options);
14
14
  constructor(domain: string, clientId: string, clientSecret: string | null, redirectURI: string);
15
15
  createAuthorizationURL(state: string, codeVerifier: string | null, scopes: string[]): Promise<URL>;
16
16
  validateAuthorizationCode(code: string, codeVerifier: string | null): Promise<OAuth2Tokens>;
17
17
  refreshAccessToken(refreshToken: string): Promise<OAuth2Tokens>;
18
18
  revokeToken(token: string): Promise<void>;
19
- getAuthorizationURL(scopes?: string[]): Promise<URL>;
20
- getUser(query: OAuthCallbackQuery): Promise<OAuthUser>;
19
+ getAuthorizationURL(scopes?: string[]): Promise<AuthorizationRequest>;
20
+ getUser(query: OAuthCallbackQuery, saved: SavedOAuthState): Promise<OAuthUser>;
21
21
  }
@@ -1,6 +1,6 @@
1
1
  import { CodeChallengeMethod, OAuth2Client } from "../client.js";
2
2
  import { decodeIdToken } from "../oidc.js";
3
- import { consumeOAuthState, fetchUserProfile, generateOAuthCodeVerifier, generateOAuthState, InvalidOAuthCallbackError, parseCallbackQuery, profileId, profileString, requireAuthConfig, requireProviderOption, resolveAuthConfig, resolveScopes, saveOAuthState } from "../auth.js";
3
+ import { extractOAuthTokens, fetchUserProfile, generateOAuthCodeVerifier, generateOAuthState, InvalidOAuthCallbackError, parseCallbackQuery, profileId, profileString, requireAuthConfig, requireProviderOption, resolveAuthConfig, resolveOAuthState, resolveScopes } from "../auth.js";
4
4
  const envPrefix = "AUTH0";
5
5
  const defaultScopes = ["openid", "profile", "email"];
6
6
  export class Auth0 {
@@ -10,7 +10,7 @@ export class Auth0 {
10
10
  userinfoEndpoint;
11
11
  client;
12
12
  auth = null;
13
- constructor(domainOrOptions, clientId, clientSecret, redirectURI) {
13
+ constructor(domainOrOptions = {}, clientId, clientSecret, redirectURI) {
14
14
  let domain;
15
15
  if (typeof domainOrOptions === "object") {
16
16
  this.auth = resolveAuthConfig(envPrefix, domainOrOptions, { redirectURI: true });
@@ -52,13 +52,13 @@ export class Auth0 {
52
52
  const state = generateOAuthState();
53
53
  const codeVerifier = generateOAuthCodeVerifier();
54
54
  const url = await this.createAuthorizationURL(state, codeVerifier, resolveScopes(scopes, auth, defaultScopes));
55
- await saveOAuthState(auth.store, state, { codeVerifier });
56
- return url;
55
+ const payload = { codeVerifier };
56
+ return { url, state, payload };
57
57
  }
58
- async getUser(query) {
59
- const auth = requireAuthConfig(this.auth);
58
+ async getUser(query, saved) {
59
+ requireAuthConfig(this.auth);
60
60
  const { code, state } = parseCallbackQuery(query);
61
- const stored = await consumeOAuthState(auth.store, state);
61
+ const stored = resolveOAuthState(state, saved);
62
62
  if (typeof stored.codeVerifier !== "string") {
63
63
  throw new InvalidOAuthCallbackError("Missing PKCE code verifier for OAuth state");
64
64
  }
@@ -75,7 +75,8 @@ export class Auth0 {
75
75
  name: profileString(claims.name) ?? profileString(claims.nickname),
76
76
  email: profileString(claims.email),
77
77
  image: profileString(claims.picture),
78
- raw: claims
78
+ raw: claims,
79
+ ...extractOAuthTokens(tokens)
79
80
  };
80
81
  }
81
82
  }
@@ -1,5 +1,5 @@
1
1
  import type { OAuth2Tokens } from "../oauth2.js";
2
- import type { OAuthCallbackQuery, OAuthUser, ProviderOptions } from "../auth.js";
2
+ import type { AuthorizationRequest, OAuthCallbackQuery, OAuthUser, ProviderOptions, SavedOAuthState } from "../auth.js";
3
3
  export interface AuthentikOptions extends ProviderOptions {
4
4
  baseURL?: string;
5
5
  }
@@ -10,12 +10,12 @@ export declare class Authentik {
10
10
  private userinfoEndpoint;
11
11
  private client;
12
12
  private auth;
13
- constructor(options: AuthentikOptions);
13
+ constructor(options?: AuthentikOptions);
14
14
  constructor(baseURL: string, clientId: string, clientSecret: string | null, redirectURI: string);
15
15
  createAuthorizationURL(state: string, codeVerifier: string, scopes: string[]): Promise<URL>;
16
16
  validateAuthorizationCode(code: string, codeVerifier: string): Promise<OAuth2Tokens>;
17
17
  refreshAccessToken(refreshToken: string): Promise<OAuth2Tokens>;
18
18
  revokeToken(token: string): Promise<void>;
19
- getAuthorizationURL(scopes?: string[]): Promise<URL>;
20
- getUser(query: OAuthCallbackQuery): Promise<OAuthUser>;
19
+ getAuthorizationURL(scopes?: string[]): Promise<AuthorizationRequest>;
20
+ getUser(query: OAuthCallbackQuery, saved: SavedOAuthState): Promise<OAuthUser>;
21
21
  }
@@ -1,7 +1,7 @@
1
1
  import { CodeChallengeMethod, OAuth2Client } from "../client.js";
2
2
  import { joinURIAndPath } from "../request.js";
3
3
  import { decodeIdToken } from "../oidc.js";
4
- import { consumeOAuthState, fetchUserProfile, generateOAuthCodeVerifier, generateOAuthState, InvalidOAuthCallbackError, parseCallbackQuery, profileId, profileString, requireAuthConfig, requireProviderOption, resolveAuthConfig, resolveScopes, saveOAuthState } from "../auth.js";
4
+ import { extractOAuthTokens, fetchUserProfile, generateOAuthCodeVerifier, generateOAuthState, InvalidOAuthCallbackError, parseCallbackQuery, profileId, profileString, requireAuthConfig, requireProviderOption, resolveAuthConfig, resolveOAuthState, resolveScopes } from "../auth.js";
5
5
  const envPrefix = "AUTHENTIK";
6
6
  const defaultScopes = ["openid", "profile", "email"];
7
7
  export class Authentik {
@@ -11,7 +11,7 @@ export class Authentik {
11
11
  userinfoEndpoint;
12
12
  client;
13
13
  auth = null;
14
- constructor(baseURLOrOptions, clientId, clientSecret, redirectURI) {
14
+ constructor(baseURLOrOptions = {}, clientId, clientSecret, redirectURI) {
15
15
  let baseURL;
16
16
  if (typeof baseURLOrOptions === "object") {
17
17
  this.auth = resolveAuthConfig(envPrefix, baseURLOrOptions, { redirectURI: true });
@@ -47,13 +47,13 @@ export class Authentik {
47
47
  const state = generateOAuthState();
48
48
  const codeVerifier = generateOAuthCodeVerifier();
49
49
  const url = await this.createAuthorizationURL(state, codeVerifier, resolveScopes(scopes, auth, defaultScopes));
50
- await saveOAuthState(auth.store, state, { codeVerifier });
51
- return url;
50
+ const payload = { codeVerifier };
51
+ return { url, state, payload };
52
52
  }
53
- async getUser(query) {
54
- const auth = requireAuthConfig(this.auth);
53
+ async getUser(query, saved) {
54
+ requireAuthConfig(this.auth);
55
55
  const { code, state } = parseCallbackQuery(query);
56
- const stored = await consumeOAuthState(auth.store, state);
56
+ const stored = resolveOAuthState(state, saved);
57
57
  if (typeof stored.codeVerifier !== "string") {
58
58
  throw new InvalidOAuthCallbackError("Missing PKCE code verifier for OAuth state");
59
59
  }
@@ -70,7 +70,8 @@ export class Authentik {
70
70
  name: profileString(claims.name) ?? profileString(claims.preferred_username),
71
71
  email: profileString(claims.email),
72
72
  image: profileString(claims.picture),
73
- raw: claims
73
+ raw: claims,
74
+ ...extractOAuthTokens(tokens)
74
75
  };
75
76
  }
76
77
  }
@@ -1,16 +1,16 @@
1
1
  import type { OAuth2Tokens } from "../oauth2.js";
2
- import type { OAuthCallbackQuery, OAuthUser, ProviderOptions } from "../auth.js";
2
+ import type { AuthorizationRequest, OAuthCallbackQuery, OAuthUser, ProviderOptions, SavedOAuthState } from "../auth.js";
3
3
  export interface AutodeskOptions extends ProviderOptions {
4
4
  }
5
5
  export declare class Autodesk {
6
6
  private client;
7
7
  private auth;
8
- constructor(options: AutodeskOptions);
8
+ constructor(options?: AutodeskOptions);
9
9
  constructor(clientId: string, clientSecret: string | null, redirectURI: string);
10
10
  createAuthorizationURL(state: string, codeVerifier: string, scopes: string[]): Promise<URL>;
11
11
  validateAuthorizationCode(code: string, codeVerifier: string): Promise<OAuth2Tokens>;
12
12
  refreshAccessToken(refreshToken: string): Promise<OAuth2Tokens>;
13
13
  revokeToken(token: string): Promise<void>;
14
- getAuthorizationURL(scopes?: string[]): Promise<URL>;
15
- getUser(query: OAuthCallbackQuery): Promise<OAuthUser>;
14
+ getAuthorizationURL(scopes?: string[]): Promise<AuthorizationRequest>;
15
+ getUser(query: OAuthCallbackQuery, saved: SavedOAuthState): Promise<OAuthUser>;
16
16
  }
@@ -1,5 +1,5 @@
1
1
  import { CodeChallengeMethod, OAuth2Client } from "../client.js";
2
- import { consumeOAuthState, fetchUserProfile, generateOAuthCodeVerifier, generateOAuthState, InvalidOAuthCallbackError, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveScopes, saveOAuthState } from "../auth.js";
2
+ import { extractOAuthTokens, fetchUserProfile, generateOAuthCodeVerifier, generateOAuthState, InvalidOAuthCallbackError, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveOAuthState, resolveScopes } from "../auth.js";
3
3
  const authorizationEndpoint = "https://developer.api.autodesk.com/authentication/v2/authorize";
4
4
  const tokenEndpoint = "https://developer.api.autodesk.com/authentication/v2/token";
5
5
  const tokenRevocationEndpoint = "https://developer.api.autodesk.com/authentication/v2/revoke";
@@ -9,7 +9,7 @@ const defaultScopes = ["openid", "user-profile:read"];
9
9
  export class Autodesk {
10
10
  client;
11
11
  auth = null;
12
- constructor(clientIdOrOptions, clientSecret, redirectURI) {
12
+ constructor(clientIdOrOptions = {}, clientSecret, redirectURI) {
13
13
  if (typeof clientIdOrOptions === "object") {
14
14
  this.auth = resolveAuthConfig(envPrefix, clientIdOrOptions, { redirectURI: true });
15
15
  this.client = new OAuth2Client(this.auth.clientId, this.auth.clientSecret, this.auth.redirectURI);
@@ -38,13 +38,13 @@ export class Autodesk {
38
38
  const state = generateOAuthState();
39
39
  const codeVerifier = generateOAuthCodeVerifier();
40
40
  const url = await this.createAuthorizationURL(state, codeVerifier, resolveScopes(scopes, auth, defaultScopes));
41
- await saveOAuthState(auth.store, state, { codeVerifier });
42
- return url;
41
+ const payload = { codeVerifier };
42
+ return { url, state, payload };
43
43
  }
44
- async getUser(query) {
45
- const auth = requireAuthConfig(this.auth);
44
+ async getUser(query, saved) {
45
+ requireAuthConfig(this.auth);
46
46
  const { code, state } = parseCallbackQuery(query);
47
- const stored = await consumeOAuthState(auth.store, state);
47
+ const stored = resolveOAuthState(state, saved);
48
48
  if (typeof stored.codeVerifier !== "string") {
49
49
  throw new InvalidOAuthCallbackError("Missing PKCE code verifier for OAuth state");
50
50
  }
@@ -55,7 +55,8 @@ export class Autodesk {
55
55
  name: profileString(claims.name) ?? profileString(claims.preferred_username),
56
56
  email: profileString(claims.email),
57
57
  image: profileString(claims.picture),
58
- raw: claims
58
+ raw: claims,
59
+ ...extractOAuthTokens(tokens)
59
60
  };
60
61
  }
61
62
  }
@@ -1,5 +1,5 @@
1
1
  import type { OAuth2Tokens } from "../oauth2.js";
2
- import type { OAuthCallbackQuery, OAuthUser, ProviderOptions } from "../auth.js";
2
+ import type { AuthorizationRequest, OAuthCallbackQuery, OAuthUser, ProviderOptions, SavedOAuthState } from "../auth.js";
3
3
  export interface BattleNetOptions extends ProviderOptions {
4
4
  }
5
5
  export declare class BattleNet {
@@ -7,10 +7,10 @@ export declare class BattleNet {
7
7
  private clientSecret;
8
8
  private redirectURI;
9
9
  private auth;
10
- constructor(options: BattleNetOptions);
10
+ constructor(options?: BattleNetOptions);
11
11
  constructor(clientId: string, clientSecret: string, redirectURI: string);
12
12
  createAuthorizationURL(state: string, scopes: string[]): URL;
13
13
  validateAuthorizationCode(code: string): Promise<OAuth2Tokens>;
14
- getAuthorizationURL(scopes?: string[]): Promise<URL>;
15
- getUser(query: OAuthCallbackQuery): Promise<OAuthUser>;
14
+ getAuthorizationURL(scopes?: string[]): Promise<AuthorizationRequest>;
15
+ getUser(query: OAuthCallbackQuery, saved: SavedOAuthState): Promise<OAuthUser>;
16
16
  }
@@ -1,5 +1,5 @@
1
1
  import { createOAuth2Request, sendTokenRequest } from "../request.js";
2
- import { consumeOAuthState, fetchUserProfile, generateOAuthState, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveScopes, saveOAuthState } from "../auth.js";
2
+ import { extractOAuthTokens, fetchUserProfile, generateOAuthState, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveOAuthState, resolveScopes } from "../auth.js";
3
3
  const authorizationEndpoint = "https://oauth.battle.net/authorize";
4
4
  const tokenEndpoint = "https://oauth.battle.net/token";
5
5
  const userinfoEndpoint = "https://oauth.battle.net/userinfo";
@@ -10,7 +10,7 @@ export class BattleNet {
10
10
  clientSecret;
11
11
  redirectURI;
12
12
  auth = null;
13
- constructor(clientIdOrOptions, clientSecret, redirectURI) {
13
+ constructor(clientIdOrOptions = {}, clientSecret, redirectURI) {
14
14
  if (typeof clientIdOrOptions === "object") {
15
15
  this.auth = resolveAuthConfig(envPrefix, clientIdOrOptions, {
16
16
  clientSecret: true,
@@ -50,13 +50,13 @@ export class BattleNet {
50
50
  const auth = requireAuthConfig(this.auth);
51
51
  const state = generateOAuthState();
52
52
  const url = this.createAuthorizationURL(state, resolveScopes(scopes, auth, defaultScopes));
53
- await saveOAuthState(auth.store, state, {});
54
- return url;
53
+ const payload = {};
54
+ return { url, state, payload };
55
55
  }
56
- async getUser(query) {
57
- const auth = requireAuthConfig(this.auth);
56
+ async getUser(query, saved) {
57
+ requireAuthConfig(this.auth);
58
58
  const { code, state } = parseCallbackQuery(query);
59
- await consumeOAuthState(auth.store, state);
59
+ resolveOAuthState(state, saved);
60
60
  const tokens = await this.validateAuthorizationCode(code);
61
61
  const profile = await fetchUserProfile(userinfoEndpoint, tokens.accessToken());
62
62
  return {
@@ -64,7 +64,8 @@ export class BattleNet {
64
64
  name: profileString(profile.battletag),
65
65
  email: null,
66
66
  image: null,
67
- raw: profile
67
+ raw: profile,
68
+ ...extractOAuthTokens(tokens)
68
69
  };
69
70
  }
70
71
  }
@@ -1,15 +1,15 @@
1
1
  import type { OAuth2Tokens } from "../oauth2.js";
2
- import type { OAuthCallbackQuery, OAuthUser, ProviderOptions } from "../auth.js";
2
+ import type { AuthorizationRequest, OAuthCallbackQuery, OAuthUser, ProviderOptions, SavedOAuthState } from "../auth.js";
3
3
  export interface BitbucketOptions extends ProviderOptions {
4
4
  }
5
5
  export declare class Bitbucket {
6
6
  private client;
7
7
  private auth;
8
- constructor(options: BitbucketOptions);
8
+ constructor(options?: BitbucketOptions);
9
9
  constructor(clientId: string, clientSecret: string, redirectURI: string);
10
10
  createAuthorizationURL(state: string): URL;
11
11
  validateAuthorizationCode(code: string): Promise<OAuth2Tokens>;
12
12
  refreshAccessToken(refreshToken: string): Promise<OAuth2Tokens>;
13
- getAuthorizationURL(): Promise<URL>;
14
- getUser(query: OAuthCallbackQuery): Promise<OAuthUser>;
13
+ getAuthorizationURL(): Promise<AuthorizationRequest>;
14
+ getUser(query: OAuthCallbackQuery, saved: SavedOAuthState): Promise<OAuthUser>;
15
15
  }
@@ -1,5 +1,5 @@
1
1
  import { OAuth2Client } from "../client.js";
2
- import { consumeOAuthState, fetchUserProfile, generateOAuthState, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, saveOAuthState } from "../auth.js";
2
+ import { extractOAuthTokens, fetchUserProfile, generateOAuthState, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveOAuthState } from "../auth.js";
3
3
  const authorizationEndpoint = "https://bitbucket.org/site/oauth2/authorize";
4
4
  const tokenEndpoint = "https://bitbucket.org/site/oauth2/access_token";
5
5
  const userEndpoint = "https://api.bitbucket.org/2.0/user";
@@ -8,7 +8,7 @@ const envPrefix = "BITBUCKET";
8
8
  export class Bitbucket {
9
9
  client;
10
10
  auth = null;
11
- constructor(clientIdOrOptions, clientSecret, redirectURI) {
11
+ constructor(clientIdOrOptions = {}, clientSecret, redirectURI) {
12
12
  if (typeof clientIdOrOptions === "object") {
13
13
  this.auth = resolveAuthConfig(envPrefix, clientIdOrOptions, {
14
14
  clientSecret: true,
@@ -33,16 +33,16 @@ export class Bitbucket {
33
33
  return tokens;
34
34
  }
35
35
  async getAuthorizationURL() {
36
- const auth = requireAuthConfig(this.auth);
36
+ requireAuthConfig(this.auth);
37
37
  const state = generateOAuthState();
38
38
  const url = this.createAuthorizationURL(state);
39
- await saveOAuthState(auth.store, state, {});
40
- return url;
39
+ const payload = {};
40
+ return { url, state, payload };
41
41
  }
42
- async getUser(query) {
43
- const auth = requireAuthConfig(this.auth);
42
+ async getUser(query, saved) {
43
+ requireAuthConfig(this.auth);
44
44
  const { code, state } = parseCallbackQuery(query);
45
- await consumeOAuthState(auth.store, state);
45
+ resolveOAuthState(state, saved);
46
46
  const tokens = await this.validateAuthorizationCode(code);
47
47
  const accessToken = tokens.accessToken();
48
48
  const profile = await fetchUserProfile(userEndpoint, accessToken);
@@ -58,7 +58,8 @@ export class Bitbucket {
58
58
  name: profileString(profile.display_name) ?? profileString(profile.username),
59
59
  email: await fetchPrimaryEmail(accessToken),
60
60
  image,
61
- raw: profile
61
+ raw: profile,
62
+ ...extractOAuthTokens(tokens)
62
63
  };
63
64
  }
64
65
  }
@@ -1,5 +1,5 @@
1
1
  import type { OAuth2Tokens } from "../oauth2.js";
2
- import type { OAuthCallbackQuery, OAuthUser, ProviderOptions } from "../auth.js";
2
+ import type { AuthorizationRequest, OAuthCallbackQuery, OAuthUser, ProviderOptions, SavedOAuthState } from "../auth.js";
3
3
  export interface BoxOptions extends ProviderOptions {
4
4
  }
5
5
  export declare class Box {
@@ -7,12 +7,12 @@ export declare class Box {
7
7
  private clientSecret;
8
8
  private redirectURI;
9
9
  private auth;
10
- constructor(options: BoxOptions);
10
+ constructor(options?: BoxOptions);
11
11
  constructor(clientId: string, clientSecret: string, redirectURI: string);
12
12
  createAuthorizationURL(state: string, scopes: string[]): URL;
13
13
  validateAuthorizationCode(code: string): Promise<OAuth2Tokens>;
14
14
  refreshAccessToken(refreshToken: string): Promise<OAuth2Tokens>;
15
15
  revokeToken(token: string): Promise<void>;
16
- getAuthorizationURL(scopes?: string[]): Promise<URL>;
17
- getUser(query: OAuthCallbackQuery): Promise<OAuthUser>;
16
+ getAuthorizationURL(scopes?: string[]): Promise<AuthorizationRequest>;
17
+ getUser(query: OAuthCallbackQuery, saved: SavedOAuthState): Promise<OAuthUser>;
18
18
  }
@@ -1,5 +1,5 @@
1
1
  import { createOAuth2Request, sendTokenRequest, sendTokenRevocationRequest } from "../request.js";
2
- import { consumeOAuthState, fetchUserProfile, generateOAuthState, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveScopes, saveOAuthState } from "../auth.js";
2
+ import { extractOAuthTokens, fetchUserProfile, generateOAuthState, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveOAuthState, resolveScopes } from "../auth.js";
3
3
  const authorizationEndpoint = "https://account.box.com/api/oauth2/authorize";
4
4
  const tokenEndpoint = "https://api.box.com/oauth2/token";
5
5
  const tokenRevocationEndpoint = "https://api.box.com/oauth2/revoke";
@@ -11,7 +11,7 @@ export class Box {
11
11
  clientSecret;
12
12
  redirectURI;
13
13
  auth = null;
14
- constructor(clientIdOrOptions, clientSecret, redirectURI) {
14
+ constructor(clientIdOrOptions = {}, clientSecret, redirectURI) {
15
15
  if (typeof clientIdOrOptions === "object") {
16
16
  this.auth = resolveAuthConfig(envPrefix, clientIdOrOptions, {
17
17
  clientSecret: true,
@@ -71,13 +71,13 @@ export class Box {
71
71
  const auth = requireAuthConfig(this.auth);
72
72
  const state = generateOAuthState();
73
73
  const url = this.createAuthorizationURL(state, resolveScopes(scopes, auth, defaultScopes));
74
- await saveOAuthState(auth.store, state, {});
75
- return url;
74
+ const payload = {};
75
+ return { url, state, payload };
76
76
  }
77
- async getUser(query) {
78
- const auth = requireAuthConfig(this.auth);
77
+ async getUser(query, saved) {
78
+ requireAuthConfig(this.auth);
79
79
  const { code, state } = parseCallbackQuery(query);
80
- await consumeOAuthState(auth.store, state);
80
+ resolveOAuthState(state, saved);
81
81
  const tokens = await this.validateAuthorizationCode(code);
82
82
  const profile = await fetchUserProfile(userEndpoint, tokens.accessToken());
83
83
  return {
@@ -85,7 +85,8 @@ export class Box {
85
85
  name: profileString(profile.name),
86
86
  email: profileString(profile.login),
87
87
  image: profileString(profile.avatar_url),
88
- raw: profile
88
+ raw: profile,
89
+ ...extractOAuthTokens(tokens)
89
90
  };
90
91
  }
91
92
  }
@@ -1,5 +1,5 @@
1
1
  import type { OAuth2Tokens } from "../oauth2.js";
2
- import type { OAuthCallbackQuery, OAuthUser, ProviderOptions } from "../auth.js";
2
+ import type { AuthorizationRequest, OAuthCallbackQuery, OAuthUser, ProviderOptions, SavedOAuthState } from "../auth.js";
3
3
  export interface BungieOptions extends ProviderOptions {
4
4
  apiKey?: string;
5
5
  }
@@ -7,11 +7,11 @@ export declare class Bungie {
7
7
  private client;
8
8
  private apiKey;
9
9
  private auth;
10
- constructor(options: BungieOptions);
10
+ constructor(options?: BungieOptions);
11
11
  constructor(clientId: string, clientSecret: string | null, redirectURI: string);
12
12
  createAuthorizationURL(state: string, scopes: string[]): URL;
13
13
  validateAuthorizationCode(code: string): Promise<OAuth2Tokens>;
14
14
  refreshAccessToken(refreshToken: string): Promise<OAuth2Tokens>;
15
- getAuthorizationURL(scopes?: string[]): Promise<URL>;
16
- getUser(query: OAuthCallbackQuery): Promise<OAuthUser>;
15
+ getAuthorizationURL(scopes?: string[]): Promise<AuthorizationRequest>;
16
+ getUser(query: OAuthCallbackQuery, saved: SavedOAuthState): Promise<OAuthUser>;
17
17
  }
@@ -1,5 +1,5 @@
1
1
  import { OAuth2Client } from "../client.js";
2
- import { consumeOAuthState, fetchUserProfile, generateOAuthState, OAuthConfigurationError, OAuthProviderError, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveProviderOption, resolveScopes, saveOAuthState } from "../auth.js";
2
+ import { extractOAuthTokens, fetchUserProfile, generateOAuthState, OAuthConfigurationError, OAuthProviderError, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveOAuthState, resolveProviderOption, resolveScopes } from "../auth.js";
3
3
  const authorizationEndpoint = "https://www.bungie.net/en/oauth/authorize";
4
4
  const tokenEndpoint = "https://www.bungie.net/platform/app/oauth/token";
5
5
  const userEndpoint = "https://www.bungie.net/platform/User/GetCurrentBungieNetUser/";
@@ -10,7 +10,7 @@ export class Bungie {
10
10
  client;
11
11
  apiKey = null;
12
12
  auth = null;
13
- constructor(clientIdOrOptions, clientSecret, redirectURI) {
13
+ constructor(clientIdOrOptions = {}, clientSecret, redirectURI) {
14
14
  if (typeof clientIdOrOptions === "object") {
15
15
  this.auth = resolveAuthConfig(envPrefix, clientIdOrOptions, { redirectURI: true });
16
16
  this.apiKey = resolveProviderOption(clientIdOrOptions.apiKey, envPrefix, "API_KEY");
@@ -36,16 +36,16 @@ export class Bungie {
36
36
  const auth = requireAuthConfig(this.auth);
37
37
  const state = generateOAuthState();
38
38
  const url = this.createAuthorizationURL(state, resolveScopes(scopes, auth, defaultScopes));
39
- await saveOAuthState(auth.store, state, {});
40
- return url;
39
+ const payload = {};
40
+ return { url, state, payload };
41
41
  }
42
- async getUser(query) {
43
- const auth = requireAuthConfig(this.auth);
42
+ async getUser(query, saved) {
43
+ requireAuthConfig(this.auth);
44
44
  if (this.apiKey === null) {
45
45
  throw new OAuthConfigurationError("Missing 'apiKey': pass it in the constructor options or set BUNGIE_API_KEY");
46
46
  }
47
47
  const { code, state } = parseCallbackQuery(query);
48
- await consumeOAuthState(auth.store, state);
48
+ resolveOAuthState(state, saved);
49
49
  const tokens = await this.validateAuthorizationCode(code);
50
50
  const body = await fetchUserProfile(userEndpoint, tokens.accessToken(), {
51
51
  "X-API-Key": this.apiKey
@@ -67,7 +67,8 @@ export class Bungie {
67
67
  name: profileString(user.cachedBungieGlobalDisplayName) ?? profileString(user.displayName),
68
68
  email: null,
69
69
  image,
70
- raw: user
70
+ raw: user,
71
+ ...extractOAuthTokens(tokens)
71
72
  };
72
73
  }
73
74
  }
@@ -1,5 +1,5 @@
1
1
  import type { OAuth2Tokens } from "../oauth2.js";
2
- import type { OAuthCallbackQuery, OAuthUser, ProviderOptions } from "../auth.js";
2
+ import type { AuthorizationRequest, OAuthCallbackQuery, OAuthUser, ProviderOptions, SavedOAuthState } from "../auth.js";
3
3
  export interface CoinbaseOptions extends ProviderOptions {
4
4
  }
5
5
  export declare class Coinbase {
@@ -7,12 +7,12 @@ export declare class Coinbase {
7
7
  private clientSecret;
8
8
  private redirectURI;
9
9
  private auth;
10
- constructor(options: CoinbaseOptions);
10
+ constructor(options?: CoinbaseOptions);
11
11
  constructor(clientId: string, clientSecret: string, redirectURI: string);
12
12
  createAuthorizationURL(state: string, scopes: string[]): URL;
13
13
  validateAuthorizationCode(code: string): Promise<OAuth2Tokens>;
14
14
  refreshAccessToken(refreshToken: string): Promise<OAuth2Tokens>;
15
15
  revokeToken(token: string): Promise<void>;
16
- getAuthorizationURL(scopes?: string[]): Promise<URL>;
17
- getUser(query: OAuthCallbackQuery): Promise<OAuthUser>;
16
+ getAuthorizationURL(scopes?: string[]): Promise<AuthorizationRequest>;
17
+ getUser(query: OAuthCallbackQuery, saved: SavedOAuthState): Promise<OAuthUser>;
18
18
  }
@@ -1,5 +1,5 @@
1
1
  import { createOAuth2Request, sendTokenRequest, sendTokenRevocationRequest } from "../request.js";
2
- import { consumeOAuthState, fetchUserProfile, generateOAuthState, OAuthProviderError, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveScopes, saveOAuthState } from "../auth.js";
2
+ import { extractOAuthTokens, fetchUserProfile, generateOAuthState, OAuthProviderError, parseCallbackQuery, profileId, profileString, requireAuthConfig, resolveAuthConfig, resolveOAuthState, resolveScopes } from "../auth.js";
3
3
  const authorizationEndpoint = "https://www.coinbase.com/oauth/authorize";
4
4
  const tokenEndpoint = "https://www.coinbase.com/oauth/token";
5
5
  const tokenRevocationEndpoint = "https://api.coinbase.com/oauth/revoke";
@@ -11,7 +11,7 @@ export class Coinbase {
11
11
  clientSecret;
12
12
  redirectURI;
13
13
  auth = null;
14
- constructor(clientIdOrOptions, clientSecret, redirectURI) {
14
+ constructor(clientIdOrOptions = {}, clientSecret, redirectURI) {
15
15
  if (typeof clientIdOrOptions === "object") {
16
16
  this.auth = resolveAuthConfig(envPrefix, clientIdOrOptions, {
17
17
  clientSecret: true,
@@ -71,13 +71,13 @@ export class Coinbase {
71
71
  const auth = requireAuthConfig(this.auth);
72
72
  const state = generateOAuthState();
73
73
  const url = this.createAuthorizationURL(state, resolveScopes(scopes, auth, defaultScopes));
74
- await saveOAuthState(auth.store, state, {});
75
- return url;
74
+ const payload = {};
75
+ return { url, state, payload };
76
76
  }
77
- async getUser(query) {
78
- const auth = requireAuthConfig(this.auth);
77
+ async getUser(query, saved) {
78
+ requireAuthConfig(this.auth);
79
79
  const { code, state } = parseCallbackQuery(query);
80
- await consumeOAuthState(auth.store, state);
80
+ resolveOAuthState(state, saved);
81
81
  const tokens = await this.validateAuthorizationCode(code);
82
82
  const body = await fetchUserProfile(userEndpoint, tokens.accessToken());
83
83
  const profile = body.data;
@@ -90,7 +90,8 @@ export class Coinbase {
90
90
  name: profileString(user.name) ?? profileString(user.username),
91
91
  email: profileString(user.email),
92
92
  image: profileString(user.avatar_url),
93
- raw: user
93
+ raw: user,
94
+ ...extractOAuthTokens(tokens)
94
95
  };
95
96
  }
96
97
  }
@@ -1,16 +1,16 @@
1
1
  import type { OAuth2Tokens } from "../oauth2.js";
2
- import type { OAuthCallbackQuery, OAuthUser, ProviderOptions } from "../auth.js";
2
+ import type { AuthorizationRequest, OAuthCallbackQuery, OAuthUser, ProviderOptions, SavedOAuthState } from "../auth.js";
3
3
  export interface DiscordOptions extends ProviderOptions {
4
4
  }
5
5
  export declare class Discord {
6
6
  private client;
7
7
  private auth;
8
- constructor(options: DiscordOptions);
8
+ constructor(options?: DiscordOptions);
9
9
  constructor(clientId: string, clientSecret: string | null, redirectURI: string);
10
10
  createAuthorizationURL(state: string, codeVerifier: string | null, scopes: string[]): Promise<URL>;
11
11
  validateAuthorizationCode(code: string, codeVerifier: string | null): Promise<OAuth2Tokens>;
12
12
  refreshAccessToken(refreshToken: string): Promise<OAuth2Tokens>;
13
13
  revokeToken(token: string): Promise<void>;
14
- getAuthorizationURL(scopes?: string[]): Promise<URL>;
15
- getUser(query: OAuthCallbackQuery): Promise<OAuthUser>;
14
+ getAuthorizationURL(scopes?: string[]): Promise<AuthorizationRequest>;
15
+ getUser(query: OAuthCallbackQuery, saved: SavedOAuthState): Promise<OAuthUser>;
16
16
  }