@mastra/auth-studio 1.3.5 → 1.3.6-alpha.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.
- package/dist/_types/@internal_auth/dist/ee/interfaces/permissions.generated.d.ts +5 -1
- package/dist/index.cjs +34 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -9
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -158,6 +158,8 @@ export declare const PERMISSION_PATTERNS: {
|
|
|
158
158
|
readonly 'datasets:write': 'datasets:write';
|
|
159
159
|
/** View embedders */
|
|
160
160
|
readonly 'embedders:read': 'embedders:read';
|
|
161
|
+
/** Delete experiments */
|
|
162
|
+
readonly 'experiments:delete': 'experiments:delete';
|
|
161
163
|
/** View experiments */
|
|
162
164
|
readonly 'experiments:read': 'experiments:read';
|
|
163
165
|
/** View infrastructure */
|
|
@@ -311,7 +313,7 @@ export type PermissionPattern = keyof typeof PERMISSION_PATTERNS;
|
|
|
311
313
|
/**
|
|
312
314
|
* All valid resource:action permission combinations (excludes wildcards).
|
|
313
315
|
*/
|
|
314
|
-
export declare const PERMISSIONS: readonly ['a2a:read', 'a2a:write', 'agent-builder:execute', 'agent-builder:read', 'agent-builder:write', 'agent-controller:execute', 'agent-controller:read', 'agents:create', 'agents:delete', 'agents:execute', 'agents:read', 'agents:write', 'auth:read', 'background-tasks:read', 'channels:read', 'channels:write', 'datasets:delete', 'datasets:execute', 'datasets:read', 'datasets:write', 'embedders:read', 'experiments:read', 'infrastructure:read', 'logs:read', 'mcp:execute', 'mcp:read', 'mcp:write', 'memory:delete', 'memory:execute', 'memory:read', 'memory:write', 'observability:read', 'observability:write', 'processor-providers:read', 'processors:execute', 'processors:read', 'schedules:delete', 'schedules:execute', 'schedules:read', 'schedules:write', 'scores:read', 'scores:write', 'stored-agents:delete', 'stored-agents:publish', 'stored-agents:read', 'stored-agents:write', 'stored-mcp-clients:delete', 'stored-mcp-clients:publish', 'stored-mcp-clients:read', 'stored-mcp-clients:write', 'stored-prompt-blocks:delete', 'stored-prompt-blocks:publish', 'stored-prompt-blocks:read', 'stored-prompt-blocks:write', 'stored-scorers:delete', 'stored-scorers:publish', 'stored-scorers:read', 'stored-scorers:write', 'stored-skills:delete', 'stored-skills:publish', 'stored-skills:read', 'stored-skills:write', 'stored-workflows:read', 'stored-workflows:write', 'stored-workspaces:delete', 'stored-workspaces:read', 'stored-workspaces:write', 'system:read', 'tool-providers:delete', 'tool-providers:read', 'tool-providers:write', 'tools:execute', 'tools:read', 'vector:delete', 'vector:execute', 'vector:read', 'vector:write', 'vectors:read', 'workflows:delete', 'workflows:execute', 'workflows:read', 'workflows:write', 'workspaces:delete', 'workspaces:read', 'workspaces:write'];
|
|
316
|
+
export declare const PERMISSIONS: readonly ['a2a:read', 'a2a:write', 'agent-builder:execute', 'agent-builder:read', 'agent-builder:write', 'agent-controller:execute', 'agent-controller:read', 'agents:create', 'agents:delete', 'agents:execute', 'agents:read', 'agents:write', 'auth:read', 'background-tasks:read', 'channels:read', 'channels:write', 'datasets:delete', 'datasets:execute', 'datasets:read', 'datasets:write', 'embedders:read', 'experiments:delete', 'experiments:read', 'infrastructure:read', 'logs:read', 'mcp:execute', 'mcp:read', 'mcp:write', 'memory:delete', 'memory:execute', 'memory:read', 'memory:write', 'observability:read', 'observability:write', 'processor-providers:read', 'processors:execute', 'processors:read', 'schedules:delete', 'schedules:execute', 'schedules:read', 'schedules:write', 'scores:read', 'scores:write', 'stored-agents:delete', 'stored-agents:publish', 'stored-agents:read', 'stored-agents:write', 'stored-mcp-clients:delete', 'stored-mcp-clients:publish', 'stored-mcp-clients:read', 'stored-mcp-clients:write', 'stored-prompt-blocks:delete', 'stored-prompt-blocks:publish', 'stored-prompt-blocks:read', 'stored-prompt-blocks:write', 'stored-scorers:delete', 'stored-scorers:publish', 'stored-scorers:read', 'stored-scorers:write', 'stored-skills:delete', 'stored-skills:publish', 'stored-skills:read', 'stored-skills:write', 'stored-workflows:read', 'stored-workflows:write', 'stored-workspaces:delete', 'stored-workspaces:read', 'stored-workspaces:write', 'system:read', 'tool-providers:delete', 'tool-providers:read', 'tool-providers:write', 'tools:execute', 'tools:read', 'vector:delete', 'vector:execute', 'vector:read', 'vector:write', 'vectors:read', 'workflows:delete', 'workflows:execute', 'workflows:read', 'workflows:write', 'workspaces:delete', 'workspaces:read', 'workspaces:write'];
|
|
315
317
|
/**
|
|
316
318
|
* Specific permission type (e.g., 'agents:read', 'workflows:execute').
|
|
317
319
|
*/
|
|
@@ -365,6 +367,8 @@ export declare const MastraFGAPermissions: {
|
|
|
365
367
|
readonly DATASETS_WRITE: 'datasets:write';
|
|
366
368
|
/** View embedders */
|
|
367
369
|
readonly EMBEDDERS_READ: 'embedders:read';
|
|
370
|
+
/** Delete experiments */
|
|
371
|
+
readonly EXPERIMENTS_DELETE: 'experiments:delete';
|
|
368
372
|
/** View experiments */
|
|
369
373
|
readonly EXPERIMENTS_READ: 'experiments:read';
|
|
370
374
|
/** View infrastructure */
|
package/dist/index.cjs
CHANGED
|
@@ -312,7 +312,7 @@ var MastraAuthProvider = class extends MastraBase {
|
|
|
312
312
|
}
|
|
313
313
|
};
|
|
314
314
|
//#endregion
|
|
315
|
-
//#region ../../packages/_internals/auth/dist/ee-
|
|
315
|
+
//#region ../../packages/_internals/auth/dist/ee-BYnTZaqt.js
|
|
316
316
|
/**
|
|
317
317
|
* FGA enforcement utility for checking fine-grained authorization.
|
|
318
318
|
*
|
|
@@ -758,16 +758,38 @@ var MastraAuthStudio = class extends MastraAuthProvider {
|
|
|
758
758
|
const sessionCookie = this.userSessionCookies.get(userId);
|
|
759
759
|
if (!sessionCookie) return false;
|
|
760
760
|
try {
|
|
761
|
-
|
|
762
|
-
if (me?.organizationId === organizationId) return isAdminRole(me.role);
|
|
763
|
-
const res = await fetch(`${this.sharedApiUrl}/auth/orgs`, { headers: { Cookie: `${COOKIE_NAME}=${sessionCookie}` } });
|
|
764
|
-
if (!res.ok) return false;
|
|
765
|
-
const membership = (await res.json()).organizations?.find((o) => o.id === organizationId);
|
|
766
|
-
return isAdminRole(membership?.role ?? void 0);
|
|
761
|
+
return isAdminRole(await this.fetchOrganizationRole(sessionCookie, organizationId));
|
|
767
762
|
} catch {
|
|
768
763
|
return false;
|
|
769
764
|
}
|
|
770
765
|
}
|
|
766
|
+
async fetchOrganizationRole(sessionCookie, organizationId) {
|
|
767
|
+
const me = await this.fetchMe(sessionCookie);
|
|
768
|
+
if (me?.organizationId === organizationId) return me.role;
|
|
769
|
+
return this.fetchMembershipRole(sessionCookie, organizationId);
|
|
770
|
+
}
|
|
771
|
+
async fetchMembershipRole(sessionCookie, organizationId) {
|
|
772
|
+
const res = await fetch(`${this.sharedApiUrl}/auth/orgs`, {
|
|
773
|
+
headers: { Cookie: `${COOKIE_NAME}=${sessionCookie}` },
|
|
774
|
+
signal: AbortSignal.timeout(VERIFY_FETCH_TIMEOUT_MS)
|
|
775
|
+
});
|
|
776
|
+
if (!res.ok) return void 0;
|
|
777
|
+
return (await res.json()).organizations?.find((o) => o.id === organizationId)?.role ?? void 0;
|
|
778
|
+
}
|
|
779
|
+
async asPinnedOrganizationMember(user, sessionCookie) {
|
|
780
|
+
const pinnedOrganizationId = this.organizationId;
|
|
781
|
+
if (!pinnedOrganizationId) return user;
|
|
782
|
+
const sessionAlreadyOnPinnedOrganization = user.organizationId === pinnedOrganizationId;
|
|
783
|
+
const memberOfPinnedOrganization = user.memberOrgIds?.includes(pinnedOrganizationId) ?? false;
|
|
784
|
+
if (sessionAlreadyOnPinnedOrganization || !memberOfPinnedOrganization) return user;
|
|
785
|
+
const roleInPinnedOrganization = await this.fetchMembershipRole(sessionCookie, pinnedOrganizationId);
|
|
786
|
+
return {
|
|
787
|
+
...user,
|
|
788
|
+
organizationId: pinnedOrganizationId,
|
|
789
|
+
role: roleInPinnedOrganization,
|
|
790
|
+
permissions: void 0
|
|
791
|
+
};
|
|
792
|
+
}
|
|
771
793
|
/**
|
|
772
794
|
* Record the sealed session cookie last seen for a user so
|
|
773
795
|
* {@link ensureOrganization} / {@link isOrganizationAdmin} can act on their
|
|
@@ -848,7 +870,7 @@ var MastraAuthStudio = class extends MastraAuthProvider {
|
|
|
848
870
|
}
|
|
849
871
|
const data = await res.json();
|
|
850
872
|
this.rememberUserSession(data.user.id, sessionCookie);
|
|
851
|
-
const
|
|
873
|
+
const sessionUser = {
|
|
852
874
|
id: data.user.id,
|
|
853
875
|
email: data.user.email,
|
|
854
876
|
name: [data.user.firstName, data.user.lastName].filter(Boolean).join(" ") || void 0,
|
|
@@ -858,6 +880,7 @@ var MastraAuthStudio = class extends MastraAuthProvider {
|
|
|
858
880
|
permissions: data.permissions,
|
|
859
881
|
memberOrgIds: data.memberOrgIds
|
|
860
882
|
};
|
|
883
|
+
const user = await this.asPinnedOrganizationMember(sessionUser, sessionCookie);
|
|
861
884
|
if (user.organizationId) this.cacheVerification(cacheKey, user);
|
|
862
885
|
return user;
|
|
863
886
|
} catch (error) {
|
|
@@ -880,8 +903,10 @@ var MastraAuthStudio = class extends MastraAuthProvider {
|
|
|
880
903
|
const cached = this.getCachedVerification(cacheKey);
|
|
881
904
|
if (cached) return cached;
|
|
882
905
|
try {
|
|
906
|
+
const headers = { Authorization: `Bearer ${token}` };
|
|
907
|
+
if (this.organizationId) headers["x-organization-id"] = this.organizationId;
|
|
883
908
|
const res = await fetch(`${this.sharedApiUrl}/auth/verify`, {
|
|
884
|
-
headers
|
|
909
|
+
headers,
|
|
885
910
|
signal: AbortSignal.timeout(VERIFY_FETCH_TIMEOUT_MS)
|
|
886
911
|
});
|
|
887
912
|
if (!res.ok) {
|