@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 +4 -0
- package/dist/core/auth/oauth/oidcProvider.d.ts +2 -2
- package/dist/core/auth/oauth/providers.d.ts +2 -2
- package/dist/core/auth/oauth/types.d.ts +2 -2
- package/dist/entries/auth/oauth/oidcProvider.js +4 -4
- package/dist/entries/auth/oauth/providers.js +4 -4
- package/package.json +1 -1
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:
|
|
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:
|
|
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:
|
|
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:
|
|
77
|
+
redirect_uri: redirectUri
|
|
78
78
|
})
|
|
79
79
|
});
|
|
80
80
|
const tokenBody = await tokenResponse.json();
|