Feature Policies API + Invitations Policies (#375)

- Added Feature Policy API: a declarative system to enable/disable/modify default behavior in the SaaS kit
- Team invitation policies with pre-checks using the Feature Policy API: Invite Members dialog now shows loading, errors, and clear reasons when invitations are blocked
- Version bump to 2.16.0 and widespread dependency updates (Supabase, React types, react-i18next, etc.).
- Added comprehensive docs for the new policy system and orchestrators.
- Subscription cancellations now trigger immediate invoicing explicitly
This commit is contained in:
Giancarlo Buomprisco
2025-09-30 12:36:19 +08:00
committed by GitHub
parent 3c13b5ec1e
commit 1dd6fdad22
53 changed files with 3908 additions and 1128 deletions

View File

@@ -12,7 +12,7 @@
"author": "Makerkit",
"devDependencies": {
"@playwright/test": "^1.55.1",
"@supabase/supabase-js": "2.57.4",
"@supabase/supabase-js": "2.58.0",
"@types/node": "^24.5.2",
"dotenv": "17.2.2",
"node-html-parser": "^7.0.1",

View File

@@ -115,18 +115,17 @@ export class InvitationsPageObject {
async acceptInvitation() {
console.log('Accepting invitation...');
const click = this.page
.locator('[data-test="join-team-form"] button[type="submit"]')
.click();
const response = this.page.waitForResponse((response) => {
return (
response.url().includes('/join') &&
response.request().method() === 'POST'
);
});
await Promise.all([click, response]);
await Promise.all([
this.page
.locator('[data-test="join-team-form"] button[type="submit"]')
.click(),
this.page.waitForResponse((response) => {
return (
response.url().includes('/join') &&
response.request().method() === 'POST'
);
}),
]);
console.log('Invitation accepted');
}

View File

@@ -13,7 +13,7 @@ test.describe('Team Invitation with MFA Flow', () => {
const invitations = new InvitationsPageObject(page);
await auth.loginAsUser({
email: 'test@makerkit.dev',
email: 'owner@makerkit.dev',
});
const teamName = `test-team-${Math.random().toString(36).substring(2, 15)}`;