@getstrata/core 0.5.69 → 0.5.70

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/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # @getstrata/core changelog
2
2
 
3
+ ## 0.5.70
4
+
5
+ - `OAuthProvider.getAuthorizationUrl` / `exchangeCode` accept an optional `redirectUri` so HTMX login can use `/oauth/:provider/callback` while the API keeps `OAUTH_REDIRECT_URI`.
6
+
3
7
  ## 0.5.69
4
8
 
5
9
  - `MembershipLookup.updateMemberRole(organizationId, userId, role)` is required. The uninitialized lookup throws until `configureMembershipLookup()` is called. `MembershipService.updateMemberRole` delegates to the adapter.
@@ -11,8 +11,8 @@ declare class OidcProvider implements OAuthProvider {
11
11
  private readonly options;
12
12
  readonly name: string;
13
13
  constructor(options: OidcProviderOptions);
14
- getAuthorizationUrl(state: string): string;
15
- exchangeCode(code: string): Promise<OAuthProfile>;
14
+ getAuthorizationUrl(state: string, redirectUri?: string): string;
15
+ exchangeCode(code: string, redirectUri?: string): Promise<OAuthProfile>;
16
16
  }
17
17
  export type { OidcProviderOptions };
18
18
  export { OidcProvider };
@@ -8,8 +8,8 @@ declare class GitHubOAuthProvider implements OAuthProvider {
8
8
  private readonly options;
9
9
  readonly name = "github";
10
10
  constructor(options: GitHubOAuthOptions);
11
- getAuthorizationUrl(state: string): string;
12
- exchangeCode(code: string): Promise<OAuthProfile>;
11
+ getAuthorizationUrl(state: string, redirectUri?: string): string;
12
+ exchangeCode(code: string, redirectUri?: string): Promise<OAuthProfile>;
13
13
  }
14
14
  declare class MockOAuthProvider implements OAuthProvider {
15
15
  private readonly profile;
@@ -5,7 +5,7 @@ interface OAuthProfile {
5
5
  }
6
6
  interface OAuthProvider {
7
7
  readonly name: string;
8
- getAuthorizationUrl(state: string): string;
9
- exchangeCode(code: string): Promise<OAuthProfile>;
8
+ getAuthorizationUrl(state: string, redirectUri?: string): string;
9
+ exchangeCode(code: string, redirectUri?: string): Promise<OAuthProfile>;
10
10
  }
11
11
  export type { OAuthProfile, OAuthProvider };
@@ -7,24 +7,24 @@ class OidcProvider {
7
7
  this.options = options;
8
8
  this.name = options.name;
9
9
  }
10
- getAuthorizationUrl(state) {
10
+ getAuthorizationUrl(state, redirectUri = this.options.redirectUri) {
11
11
  const params = new URLSearchParams({
12
12
  client_id: this.options.clientId,
13
- redirect_uri: this.options.redirectUri,
13
+ redirect_uri: redirectUri,
14
14
  response_type: "code",
15
15
  scope: (this.options.scopes ?? ["openid", "email", "profile"]).join(" "),
16
16
  state
17
17
  });
18
18
  return `${this.options.issuer.replace(/\/$/, "")}/authorize?${params.toString()}`;
19
19
  }
20
- async exchangeCode(code) {
20
+ async exchangeCode(code, redirectUri = this.options.redirectUri) {
21
21
  const tokenResponse = await fetch(`${this.options.issuer.replace(/\/$/, "")}/token`, {
22
22
  method: "POST",
23
23
  headers: { "content-type": "application/x-www-form-urlencoded" },
24
24
  body: new URLSearchParams({
25
25
  grant_type: "authorization_code",
26
26
  code,
27
- redirect_uri: this.options.redirectUri,
27
+ redirect_uri: redirectUri,
28
28
  client_id: this.options.clientId,
29
29
  client_secret: this.options.clientSecret
30
30
  })
@@ -54,16 +54,16 @@ class GitHubOAuthProvider {
54
54
  constructor(options) {
55
55
  this.options = options;
56
56
  }
57
- getAuthorizationUrl(state) {
57
+ getAuthorizationUrl(state, redirectUri = this.options.redirectUri) {
58
58
  const params = new URLSearchParams({
59
59
  client_id: this.options.clientId,
60
- redirect_uri: this.options.redirectUri,
60
+ redirect_uri: redirectUri,
61
61
  scope: "read:user user:email",
62
62
  state
63
63
  });
64
64
  return `https://github.com/login/oauth/authorize?${params.toString()}`;
65
65
  }
66
- async exchangeCode(code) {
66
+ async exchangeCode(code, redirectUri = this.options.redirectUri) {
67
67
  const tokenResponse = await fetch("https://github.com/login/oauth/access_token", {
68
68
  method: "POST",
69
69
  headers: {
@@ -74,7 +74,7 @@ class GitHubOAuthProvider {
74
74
  client_id: this.options.clientId,
75
75
  client_secret: this.options.clientSecret,
76
76
  code,
77
- redirect_uri: this.options.redirectUri
77
+ redirect_uri: redirectUri
78
78
  })
79
79
  });
80
80
  const tokenBody = await tokenResponse.json();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstrata/core",
3
- "version": "0.5.69",
3
+ "version": "0.5.70",
4
4
  "description": "Strata — Laravel-inspired Bun framework public API",
5
5
  "type": "module",
6
6
  "license": "MIT",