@getstrata/core 0.5.68 → 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,13 @@
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
+
7
+ ## 0.5.69
8
+
9
+ - `MembershipLookup.updateMemberRole(organizationId, userId, role)` is required. The uninitialized lookup throws until `configureMembershipLookup()` is called. `MembershipService.updateMemberRole` delegates to the adapter.
10
+
3
11
  ## 0.5.68
4
12
 
5
13
  - Published core no longer imports WorkHub `src/config`. Frontend mode, queue retries, CORS, and upload limits read env (`FRONTEND_MODE`, `QUEUE_*`, `CORS_ALLOWED_ORIGINS`, `MAX_UPLOAD_BYTES`).
@@ -16,6 +16,7 @@ declare class MembershipService {
16
16
  role?: OrganizationMemberRole;
17
17
  }): Promise<import("../contracts/membership").MembershipRecord>;
18
18
  removeMember(organizationId: number, userId: number): Promise<unknown>;
19
+ updateMemberRole(organizationId: number, userId: number, role: OrganizationMemberRole): Promise<import("../contracts/membership").MembershipRecord>;
19
20
  }
20
21
  export type { MembershipRepositoryLike };
21
22
  export default MembershipService;
@@ -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 };
@@ -16,5 +16,6 @@ interface MembershipLookup {
16
16
  role?: OrganizationMemberRole;
17
17
  }): Promise<MembershipRecord>;
18
18
  removeMember(organizationId: number, userId: number): Promise<unknown>;
19
+ updateMemberRole(organizationId: number, userId: number, role: OrganizationMemberRole): Promise<MembershipRecord>;
19
20
  }
20
21
  export type { MembershipLookup, MembershipRecord, OrganizationMemberRole };
@@ -69,6 +69,9 @@ var uninitializedMembershipLookup = {
69
69
  },
70
70
  async removeMember() {
71
71
  throw new Error("configureMembershipLookup() must be called before mutating memberships.");
72
+ },
73
+ async updateMemberRole() {
74
+ throw new Error("configureMembershipLookup() must be called before mutating memberships.");
72
75
  }
73
76
  };
74
77
  var membershipRepository = uninitializedMembershipLookup;
@@ -73,6 +73,9 @@ var uninitializedMembershipLookup = {
73
73
  },
74
74
  async removeMember() {
75
75
  throw new Error("configureMembershipLookup() must be called before mutating memberships.");
76
+ },
77
+ async updateMemberRole() {
78
+ throw new Error("configureMembershipLookup() must be called before mutating memberships.");
76
79
  }
77
80
  };
78
81
  var membershipRepository = uninitializedMembershipLookup;
@@ -72,6 +72,9 @@ var uninitializedMembershipLookup = {
72
72
  },
73
73
  async removeMember() {
74
74
  throw new Error("configureMembershipLookup() must be called before mutating memberships.");
75
+ },
76
+ async updateMemberRole() {
77
+ throw new Error("configureMembershipLookup() must be called before mutating memberships.");
75
78
  }
76
79
  };
77
80
  var membershipRepository = uninitializedMembershipLookup;
@@ -157,6 +160,9 @@ class MembershipService {
157
160
  removeMember(organizationId, userId) {
158
161
  return this.members.removeMember(organizationId, userId);
159
162
  }
163
+ updateMemberRole(organizationId, userId, role) {
164
+ return this.members.updateMemberRole(organizationId, userId, role);
165
+ }
160
166
  }
161
167
  var membershipService_default = MembershipService;
162
168
  export {
@@ -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/dist/index.js CHANGED
@@ -364,6 +364,9 @@ var uninitializedMembershipLookup = {
364
364
  },
365
365
  async removeMember() {
366
366
  throw new Error("configureMembershipLookup() must be called before mutating memberships.");
367
+ },
368
+ async updateMemberRole() {
369
+ throw new Error("configureMembershipLookup() must be called before mutating memberships.");
367
370
  }
368
371
  };
369
372
  var membershipRepository = uninitializedMembershipLookup;
@@ -688,6 +691,9 @@ class MembershipService {
688
691
  removeMember(organizationId, userId) {
689
692
  return this.members.removeMember(organizationId, userId);
690
693
  }
694
+ updateMemberRole(organizationId, userId, role) {
695
+ return this.members.updateMemberRole(organizationId, userId, role);
696
+ }
691
697
  }
692
698
  var membershipService_default = MembershipService;
693
699
  // ../../src/core/auth/policy.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstrata/core",
3
- "version": "0.5.68",
3
+ "version": "0.5.70",
4
4
  "description": "Strata — Laravel-inspired Bun framework public API",
5
5
  "type": "module",
6
6
  "license": "MIT",