@plandesk/api 1.0.0-beta.3 → 1.0.0-beta.4
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/access-control.d.ts
CHANGED
|
@@ -90,6 +90,7 @@ export declare const member: import("better-auth/plugins/access").Role<import("b
|
|
|
90
90
|
}>;
|
|
91
91
|
export declare const admin: import("better-auth/plugins/access").Role<import("better-auth/plugins/access").ExactRoleStatements<{
|
|
92
92
|
readonly project: ["create", "delete"];
|
|
93
|
+
readonly invitation: ["create", "cancel"];
|
|
93
94
|
readonly task: readonly ["read", "create", "update", "delete"];
|
|
94
95
|
readonly document: readonly ["read", "create", "update", "delete"];
|
|
95
96
|
readonly edge: readonly ["read", "create", "update", "delete"];
|
|
@@ -98,7 +99,6 @@ export declare const admin: import("better-auth/plugins/access").Role<import("be
|
|
|
98
99
|
readonly agent_run: readonly ["read", "create", "update", "delete"];
|
|
99
100
|
readonly organization: readonly [];
|
|
100
101
|
readonly member: readonly [];
|
|
101
|
-
readonly invitation: readonly [];
|
|
102
102
|
readonly team: readonly [];
|
|
103
103
|
readonly ac: readonly [];
|
|
104
104
|
readonly apiKey: readonly [];
|
package/dist/access-control.js
CHANGED
|
@@ -35,6 +35,10 @@ export const member = ac.newRole(memberPermissions);
|
|
|
35
35
|
export const admin = ac.newRole({
|
|
36
36
|
...memberPermissions,
|
|
37
37
|
project: ['create', 'delete'],
|
|
38
|
+
// Admins can invite teammates (as member or admin) and cancel invites, but
|
|
39
|
+
// cannot manage members directly (member:update/delete) or mint owners —
|
|
40
|
+
// better-auth blocks a non-owner inviting the creatorRole. Owner-only stays owner-only.
|
|
41
|
+
invitation: ['create', 'cancel'],
|
|
38
42
|
});
|
|
39
43
|
export const owner = ac.newRole({
|
|
40
44
|
...memberPermissions,
|
package/dist/routes/orgs.js
CHANGED
|
@@ -122,8 +122,9 @@ export function createOrgsRouter(db, options = {}) {
|
|
|
122
122
|
return c.json({ members }, 200);
|
|
123
123
|
});
|
|
124
124
|
/**
|
|
125
|
-
* BA3c: invite by email (link-only, no mailer).
|
|
126
|
-
* (
|
|
125
|
+
* BA3c: invite by email (link-only, no mailer). Owners and admins may invite
|
|
126
|
+
* (invitation:create); better-auth still blocks a non-owner inviting an owner.
|
|
127
|
+
* Returns claimUrl for the inviter to deliver by hand.
|
|
127
128
|
*/
|
|
128
129
|
router.post('/orgs/:id/invitations', async (c) => {
|
|
129
130
|
const orgId = c.req.param('id');
|
|
@@ -131,11 +132,11 @@ export function createOrgsRouter(db, options = {}) {
|
|
|
131
132
|
return c.json({ error: 'not_found' }, 404);
|
|
132
133
|
}
|
|
133
134
|
const authCtx = getOrgAuthContext();
|
|
134
|
-
// Session
|
|
135
|
+
// Session only — token/loopback cannot drive better-auth createInvitation.
|
|
135
136
|
if (authCtx.kind !== 'session') {
|
|
136
137
|
return c.json({ error: 'forbidden' }, 403);
|
|
137
138
|
}
|
|
138
|
-
requirePermission(authCtx, '
|
|
139
|
+
requirePermission(authCtx, 'invitation', 'create');
|
|
139
140
|
if (betterAuth === undefined) {
|
|
140
141
|
return c.json({ error: 'unavailable' }, 503);
|
|
141
142
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plandesk/api",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@libsql/kysely-libsql": "^0.4.1",
|
|
27
27
|
"better-auth": "1.6.23",
|
|
28
28
|
"hono": "^4.12.23",
|
|
29
|
-
"@plandesk/db": "1.0.0-beta.
|
|
29
|
+
"@plandesk/db": "1.0.0-beta.4"
|
|
30
30
|
},
|
|
31
31
|
"description": "Plan Desk REST + SSE API and service layer (local-first planning workspace).",
|
|
32
32
|
"license": "MIT",
|