@permis/better-auth 0.0.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.
@@ -0,0 +1,122 @@
1
+ import { Action, PermisAdapter, PermisEngine, Permission, Resource, ResourceType, Role, Subject, SubjectId } from "@permis/core";
2
+
3
+ //#region src/bridge.d.ts
4
+ interface BetterAuthBridgeOptions {
5
+ roleResolver?: (session: Record<string, unknown>) => string[] | Promise<string[]>;
6
+ permissionResolver?: (session: Record<string, unknown>) => Permission[] | Promise<Permission[]>;
7
+ }
8
+ declare function betterAuthBridge(auth: {
9
+ $context?: {
10
+ session?: Record<string, unknown>;
11
+ };
12
+ api?: {
13
+ getSession?: () => Promise<Record<string, unknown>>;
14
+ };
15
+ }, options?: BetterAuthBridgeOptions): PermisAdapter;
16
+ //#endregion
17
+ //#region src/plugin.d.ts
18
+ interface PermisPluginOptions {
19
+ roles?: Role[];
20
+ permissions?: Permission[];
21
+ extendSchema?: boolean;
22
+ adapter?: PermisAdapter;
23
+ }
24
+ declare function permisPlugin(options: PermisPluginOptions): {
25
+ id: "permis";
26
+ adapter: PermisAdapter | undefined;
27
+ init: (auth: {
28
+ $context: Record<string, unknown>;
29
+ }) => void;
30
+ };
31
+ //#endregion
32
+ //#region src/guard.d.ts
33
+ declare function createGuard(engine: PermisEngine): (subject: SubjectId | Subject, action: Action, resource: ResourceType | Resource) => Promise<boolean>;
34
+ //#endregion
35
+ //#region src/session.d.ts
36
+ interface SessionEnrichment {
37
+ roles?: string[];
38
+ permissions?: Permission[];
39
+ }
40
+ declare function enrichSessionWithPermis(roles: Role[], subjectRoles: string[]): SessionEnrichment;
41
+ //#endregion
42
+ //#region src/schema.d.ts
43
+ declare function createPermisSchemaExtension(): {
44
+ permis_roles: {
45
+ name: {
46
+ type: "string";
47
+ required: boolean;
48
+ };
49
+ description: {
50
+ type: "string";
51
+ required: boolean;
52
+ };
53
+ condition: {
54
+ type: "string";
55
+ required: boolean;
56
+ };
57
+ active: {
58
+ type: "boolean";
59
+ required: boolean;
60
+ };
61
+ createdAt: {
62
+ type: "string";
63
+ required: boolean;
64
+ };
65
+ };
66
+ permis_permissions: {
67
+ id: {
68
+ type: "string";
69
+ required: boolean;
70
+ };
71
+ action: {
72
+ type: "string";
73
+ required: boolean;
74
+ };
75
+ resource: {
76
+ type: "string";
77
+ required: boolean;
78
+ };
79
+ fields: {
80
+ type: "string";
81
+ required: boolean;
82
+ };
83
+ condition: {
84
+ type: "string";
85
+ required: boolean;
86
+ };
87
+ description: {
88
+ type: "string";
89
+ required: boolean;
90
+ };
91
+ };
92
+ permis_role_permissions: {
93
+ roleName: {
94
+ type: "string";
95
+ required: boolean;
96
+ };
97
+ permissionId: {
98
+ type: "string";
99
+ required: boolean;
100
+ };
101
+ };
102
+ permis_subject_roles: {
103
+ subjectId: {
104
+ type: "string";
105
+ required: boolean;
106
+ };
107
+ roleName: {
108
+ type: "string";
109
+ required: boolean;
110
+ };
111
+ grantedAt: {
112
+ type: "string";
113
+ required: boolean;
114
+ };
115
+ grantedBy: {
116
+ type: "string";
117
+ required: boolean;
118
+ };
119
+ };
120
+ };
121
+ //#endregion
122
+ export { type BetterAuthBridgeOptions, type PermisPluginOptions, type SessionEnrichment, betterAuthBridge, createGuard, createPermisSchemaExtension, enrichSessionWithPermis, permisPlugin };
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ function e(e,t){let n=null;async function r(){return e.$context?.session?e.$context.session:n||(n=(e.api?.getSession?.()??Promise.resolve({})).finally(()=>{n=null}),n)}return{async getRolesForSubject(e){let n=await r();return t?.roleResolver?t.roleResolver(n):[]},async getPermissionsForRole(e){let n=await r();return t?.permissionResolver?t.permissionResolver(n):[]},async getPermissionsForSubject(e){let t=await this.getRolesForSubject(e),n=[];for(let e of t){let t=await this.getPermissionsForRole(e);n.push(...t)}return n},async resolveSubject(e){return{id:e}},async resolveResource(e,t){return{type:e,id:t}}}}function t(e){return{id:`permis`,adapter:e.adapter,init:t=>{t.$context.permis={roles:e.roles??[],permissions:e.permissions??[],adapter:e.adapter??null}}}}function n(e){return async(t,n,r)=>e.can(t,n,r)}function r(e,t){let n=[];for(let r of t){let t=e.find(e=>e.name===r);t&&n.push(...t.permissions)}return{roles:t,permissions:n}}function i(){return{permis_roles:{name:{type:`string`,required:!0},description:{type:`string`,required:!1},condition:{type:`string`,required:!1},active:{type:`boolean`,required:!1},createdAt:{type:`string`,required:!0}},permis_permissions:{id:{type:`string`,required:!0},action:{type:`string`,required:!0},resource:{type:`string`,required:!0},fields:{type:`string`,required:!1},condition:{type:`string`,required:!1},description:{type:`string`,required:!1}},permis_role_permissions:{roleName:{type:`string`,required:!0},permissionId:{type:`string`,required:!0}},permis_subject_roles:{subjectId:{type:`string`,required:!0},roleName:{type:`string`,required:!0},grantedAt:{type:`string`,required:!0},grantedBy:{type:`string`,required:!1}}}}export{e as betterAuthBridge,n as createGuard,i as createPermisSchemaExtension,r as enrichSessionWithPermis,t as permisPlugin};
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@permis/better-auth",
3
+ "version": "0.0.0",
4
+ "files": [
5
+ "dist"
6
+ ],
7
+ "type": "module",
8
+ "sideEffects": false,
9
+ "exports": {
10
+ ".": "./dist/index.mjs",
11
+ "./package.json": "./package.json"
12
+ },
13
+ "scripts": {
14
+ "build": "vp pack",
15
+ "dev": "vp pack --watch",
16
+ "test": "vp test",
17
+ "check": "vp check"
18
+ },
19
+ "dependencies": {
20
+ "@permis/core": "workspace:*"
21
+ },
22
+ "peerDependencies": {
23
+ "better-auth": "^1.0.0"
24
+ }
25
+ }