@contractspec/lib.identity-rbac 3.7.17 → 3.7.18

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.
Files changed (43) hide show
  1. package/dist/browser/contracts/index.js +1 -1045
  2. package/dist/browser/contracts/organization.js +1 -655
  3. package/dist/browser/contracts/rbac.js +1 -599
  4. package/dist/browser/contracts/user.js +1 -235
  5. package/dist/browser/entities/index.js +1 -464
  6. package/dist/browser/entities/organization.js +1 -150
  7. package/dist/browser/entities/rbac.js +1 -124
  8. package/dist/browser/entities/user.js +1 -168
  9. package/dist/browser/events.js +1 -374
  10. package/dist/browser/identity-rbac.capability.js +1 -31
  11. package/dist/browser/identity-rbac.feature.js +1 -67
  12. package/dist/browser/index.js +1 -2099
  13. package/dist/browser/policies/engine.js +1 -154
  14. package/dist/browser/policies/index.js +1 -154
  15. package/dist/contracts/index.js +1 -1045
  16. package/dist/contracts/organization.js +1 -655
  17. package/dist/contracts/rbac.js +1 -599
  18. package/dist/contracts/user.js +1 -235
  19. package/dist/entities/index.js +1 -464
  20. package/dist/entities/organization.js +1 -150
  21. package/dist/entities/rbac.js +1 -124
  22. package/dist/entities/user.js +1 -168
  23. package/dist/events.js +1 -374
  24. package/dist/identity-rbac.capability.js +1 -31
  25. package/dist/identity-rbac.feature.js +1 -67
  26. package/dist/index.js +1 -2099
  27. package/dist/node/contracts/index.js +1 -1045
  28. package/dist/node/contracts/organization.js +1 -655
  29. package/dist/node/contracts/rbac.js +1 -599
  30. package/dist/node/contracts/user.js +1 -235
  31. package/dist/node/entities/index.js +1 -464
  32. package/dist/node/entities/organization.js +1 -150
  33. package/dist/node/entities/rbac.js +1 -124
  34. package/dist/node/entities/user.js +1 -168
  35. package/dist/node/events.js +1 -374
  36. package/dist/node/identity-rbac.capability.js +1 -31
  37. package/dist/node/identity-rbac.feature.js +1 -67
  38. package/dist/node/index.js +1 -2099
  39. package/dist/node/policies/engine.js +1 -154
  40. package/dist/node/policies/index.js +1 -154
  41. package/dist/policies/engine.js +1 -154
  42. package/dist/policies/index.js +1 -154
  43. package/package.json +5 -5
@@ -1,154 +1 @@
1
- // src/policies/engine.ts
2
- var Permission = {
3
- USER_CREATE: "user.create",
4
- USER_READ: "user.read",
5
- USER_UPDATE: "user.update",
6
- USER_DELETE: "user.delete",
7
- USER_LIST: "user.list",
8
- USER_MANAGE: "user.manage",
9
- ORG_CREATE: "org.create",
10
- ORG_READ: "org.read",
11
- ORG_UPDATE: "org.update",
12
- ORG_DELETE: "org.delete",
13
- ORG_LIST: "org.list",
14
- MEMBER_INVITE: "member.invite",
15
- MEMBER_REMOVE: "member.remove",
16
- MEMBER_UPDATE_ROLE: "member.update_role",
17
- MEMBER_LIST: "member.list",
18
- MANAGE_MEMBERS: "org.manage_members",
19
- TEAM_CREATE: "team.create",
20
- TEAM_UPDATE: "team.update",
21
- TEAM_DELETE: "team.delete",
22
- TEAM_MANAGE: "team.manage",
23
- ROLE_CREATE: "role.create",
24
- ROLE_UPDATE: "role.update",
25
- ROLE_DELETE: "role.delete",
26
- ROLE_ASSIGN: "role.assign",
27
- ROLE_REVOKE: "role.revoke",
28
- BILLING_VIEW: "billing.view",
29
- BILLING_MANAGE: "billing.manage",
30
- PROJECT_CREATE: "project.create",
31
- PROJECT_READ: "project.read",
32
- PROJECT_UPDATE: "project.update",
33
- PROJECT_DELETE: "project.delete",
34
- PROJECT_MANAGE: "project.manage",
35
- ADMIN_ACCESS: "admin.access",
36
- ADMIN_IMPERSONATE: "admin.impersonate"
37
- };
38
- var StandardRole = {
39
- OWNER: {
40
- name: "owner",
41
- description: "Organization owner with full access",
42
- permissions: Object.values(Permission)
43
- },
44
- ADMIN: {
45
- name: "admin",
46
- description: "Administrator with most permissions",
47
- permissions: [
48
- Permission.USER_READ,
49
- Permission.USER_LIST,
50
- Permission.ORG_READ,
51
- Permission.ORG_UPDATE,
52
- Permission.MEMBER_INVITE,
53
- Permission.MEMBER_REMOVE,
54
- Permission.MEMBER_UPDATE_ROLE,
55
- Permission.MEMBER_LIST,
56
- Permission.MANAGE_MEMBERS,
57
- Permission.TEAM_CREATE,
58
- Permission.TEAM_UPDATE,
59
- Permission.TEAM_DELETE,
60
- Permission.TEAM_MANAGE,
61
- Permission.PROJECT_CREATE,
62
- Permission.PROJECT_READ,
63
- Permission.PROJECT_UPDATE,
64
- Permission.PROJECT_DELETE,
65
- Permission.PROJECT_MANAGE,
66
- Permission.BILLING_VIEW
67
- ]
68
- },
69
- MEMBER: {
70
- name: "member",
71
- description: "Regular organization member",
72
- permissions: [
73
- Permission.USER_READ,
74
- Permission.ORG_READ,
75
- Permission.MEMBER_LIST,
76
- Permission.PROJECT_READ,
77
- Permission.PROJECT_CREATE
78
- ]
79
- },
80
- VIEWER: {
81
- name: "viewer",
82
- description: "Read-only access",
83
- permissions: [
84
- Permission.USER_READ,
85
- Permission.ORG_READ,
86
- Permission.MEMBER_LIST,
87
- Permission.PROJECT_READ
88
- ]
89
- }
90
- };
91
-
92
- class RBACPolicyEngine {
93
- roleCache = new Map;
94
- bindingCache = new Map;
95
- async checkPermission(input, bindings) {
96
- const { userId, orgId, permission } = input;
97
- const now = new Date;
98
- const userBindings = bindings.filter((b) => b.targetType === "user" && b.targetId === userId);
99
- const orgBindings = orgId ? bindings.filter((b) => b.targetType === "organization" && b.targetId === orgId) : [];
100
- const allBindings = [...userBindings, ...orgBindings];
101
- const activeBindings = allBindings.filter((b) => !b.expiresAt || b.expiresAt > now);
102
- if (activeBindings.length === 0) {
103
- return {
104
- allowed: false,
105
- reason: "No active role bindings found"
106
- };
107
- }
108
- for (const binding of activeBindings) {
109
- if (binding.role.permissions.includes(permission)) {
110
- return {
111
- allowed: true,
112
- matchedRole: binding.role.name
113
- };
114
- }
115
- }
116
- return {
117
- allowed: false,
118
- reason: `No role grants the "${permission}" permission`
119
- };
120
- }
121
- async getPermissions(userId, orgId, bindings) {
122
- const now = new Date;
123
- const userBindings = bindings.filter((b) => b.targetType === "user" && b.targetId === userId);
124
- const orgBindings = orgId ? bindings.filter((b) => b.targetType === "organization" && b.targetId === orgId) : [];
125
- const allBindings = [...userBindings, ...orgBindings];
126
- const activeBindings = allBindings.filter((b) => !b.expiresAt || b.expiresAt > now);
127
- const permissions = new Set;
128
- const roles = [];
129
- for (const binding of activeBindings) {
130
- roles.push(binding.role);
131
- for (const perm of binding.role.permissions) {
132
- permissions.add(perm);
133
- }
134
- }
135
- return { permissions, roles };
136
- }
137
- async hasAnyPermission(userId, orgId, permissions, bindings) {
138
- const { permissions: userPerms } = await this.getPermissions(userId, orgId, bindings);
139
- return permissions.some((p) => userPerms.has(p));
140
- }
141
- async hasAllPermissions(userId, orgId, permissions, bindings) {
142
- const { permissions: userPerms } = await this.getPermissions(userId, orgId, bindings);
143
- return permissions.every((p) => userPerms.has(p));
144
- }
145
- }
146
- function createRBACEngine() {
147
- return new RBACPolicyEngine;
148
- }
149
- export {
150
- createRBACEngine,
151
- StandardRole,
152
- RBACPolicyEngine,
153
- Permission
154
- };
1
+ var f={USER_CREATE:"user.create",USER_READ:"user.read",USER_UPDATE:"user.update",USER_DELETE:"user.delete",USER_LIST:"user.list",USER_MANAGE:"user.manage",ORG_CREATE:"org.create",ORG_READ:"org.read",ORG_UPDATE:"org.update",ORG_DELETE:"org.delete",ORG_LIST:"org.list",MEMBER_INVITE:"member.invite",MEMBER_REMOVE:"member.remove",MEMBER_UPDATE_ROLE:"member.update_role",MEMBER_LIST:"member.list",MANAGE_MEMBERS:"org.manage_members",TEAM_CREATE:"team.create",TEAM_UPDATE:"team.update",TEAM_DELETE:"team.delete",TEAM_MANAGE:"team.manage",ROLE_CREATE:"role.create",ROLE_UPDATE:"role.update",ROLE_DELETE:"role.delete",ROLE_ASSIGN:"role.assign",ROLE_REVOKE:"role.revoke",BILLING_VIEW:"billing.view",BILLING_MANAGE:"billing.manage",PROJECT_CREATE:"project.create",PROJECT_READ:"project.read",PROJECT_UPDATE:"project.update",PROJECT_DELETE:"project.delete",PROJECT_MANAGE:"project.manage",ADMIN_ACCESS:"admin.access",ADMIN_IMPERSONATE:"admin.impersonate"},M={OWNER:{name:"owner",description:"Organization owner with full access",permissions:Object.values(f)},ADMIN:{name:"admin",description:"Administrator with most permissions",permissions:[f.USER_READ,f.USER_LIST,f.ORG_READ,f.ORG_UPDATE,f.MEMBER_INVITE,f.MEMBER_REMOVE,f.MEMBER_UPDATE_ROLE,f.MEMBER_LIST,f.MANAGE_MEMBERS,f.TEAM_CREATE,f.TEAM_UPDATE,f.TEAM_DELETE,f.TEAM_MANAGE,f.PROJECT_CREATE,f.PROJECT_READ,f.PROJECT_UPDATE,f.PROJECT_DELETE,f.PROJECT_MANAGE,f.BILLING_VIEW]},MEMBER:{name:"member",description:"Regular organization member",permissions:[f.USER_READ,f.ORG_READ,f.MEMBER_LIST,f.PROJECT_READ,f.PROJECT_CREATE]},VIEWER:{name:"viewer",description:"Read-only access",permissions:[f.USER_READ,f.ORG_READ,f.MEMBER_LIST,f.PROJECT_READ]}};class K{roleCache=new Map;bindingCache=new Map;async checkPermission(z,j){let{userId:k,orgId:q,permission:x}=z,D=new Date,J=j.filter((h)=>h.targetType==="user"&&h.targetId===k),G=q?j.filter((h)=>h.targetType==="organization"&&h.targetId===q):[],F=[...J,...G].filter((h)=>!h.expiresAt||h.expiresAt>D);if(F.length===0)return{allowed:!1,reason:"No active role bindings found"};for(let h of F)if(h.role.permissions.includes(x))return{allowed:!0,matchedRole:h.role.name};return{allowed:!1,reason:`No role grants the "${x}" permission`}}async getPermissions(z,j,k){let q=new Date,x=k.filter((h)=>h.targetType==="user"&&h.targetId===z),D=j?k.filter((h)=>h.targetType==="organization"&&h.targetId===j):[],G=[...x,...D].filter((h)=>!h.expiresAt||h.expiresAt>q),H=new Set,F=[];for(let h of G){F.push(h.role);for(let L of h.role.permissions)H.add(L)}return{permissions:H,roles:F}}async hasAnyPermission(z,j,k,q){let{permissions:x}=await this.getPermissions(z,j,q);return k.some((D)=>x.has(D))}async hasAllPermissions(z,j,k,q){let{permissions:x}=await this.getPermissions(z,j,q);return k.every((D)=>x.has(D))}}function N(){return new K}export{N as createRBACEngine,M as StandardRole,K as RBACPolicyEngine,f as Permission};
@@ -1,154 +1 @@
1
- // src/policies/engine.ts
2
- var Permission = {
3
- USER_CREATE: "user.create",
4
- USER_READ: "user.read",
5
- USER_UPDATE: "user.update",
6
- USER_DELETE: "user.delete",
7
- USER_LIST: "user.list",
8
- USER_MANAGE: "user.manage",
9
- ORG_CREATE: "org.create",
10
- ORG_READ: "org.read",
11
- ORG_UPDATE: "org.update",
12
- ORG_DELETE: "org.delete",
13
- ORG_LIST: "org.list",
14
- MEMBER_INVITE: "member.invite",
15
- MEMBER_REMOVE: "member.remove",
16
- MEMBER_UPDATE_ROLE: "member.update_role",
17
- MEMBER_LIST: "member.list",
18
- MANAGE_MEMBERS: "org.manage_members",
19
- TEAM_CREATE: "team.create",
20
- TEAM_UPDATE: "team.update",
21
- TEAM_DELETE: "team.delete",
22
- TEAM_MANAGE: "team.manage",
23
- ROLE_CREATE: "role.create",
24
- ROLE_UPDATE: "role.update",
25
- ROLE_DELETE: "role.delete",
26
- ROLE_ASSIGN: "role.assign",
27
- ROLE_REVOKE: "role.revoke",
28
- BILLING_VIEW: "billing.view",
29
- BILLING_MANAGE: "billing.manage",
30
- PROJECT_CREATE: "project.create",
31
- PROJECT_READ: "project.read",
32
- PROJECT_UPDATE: "project.update",
33
- PROJECT_DELETE: "project.delete",
34
- PROJECT_MANAGE: "project.manage",
35
- ADMIN_ACCESS: "admin.access",
36
- ADMIN_IMPERSONATE: "admin.impersonate"
37
- };
38
- var StandardRole = {
39
- OWNER: {
40
- name: "owner",
41
- description: "Organization owner with full access",
42
- permissions: Object.values(Permission)
43
- },
44
- ADMIN: {
45
- name: "admin",
46
- description: "Administrator with most permissions",
47
- permissions: [
48
- Permission.USER_READ,
49
- Permission.USER_LIST,
50
- Permission.ORG_READ,
51
- Permission.ORG_UPDATE,
52
- Permission.MEMBER_INVITE,
53
- Permission.MEMBER_REMOVE,
54
- Permission.MEMBER_UPDATE_ROLE,
55
- Permission.MEMBER_LIST,
56
- Permission.MANAGE_MEMBERS,
57
- Permission.TEAM_CREATE,
58
- Permission.TEAM_UPDATE,
59
- Permission.TEAM_DELETE,
60
- Permission.TEAM_MANAGE,
61
- Permission.PROJECT_CREATE,
62
- Permission.PROJECT_READ,
63
- Permission.PROJECT_UPDATE,
64
- Permission.PROJECT_DELETE,
65
- Permission.PROJECT_MANAGE,
66
- Permission.BILLING_VIEW
67
- ]
68
- },
69
- MEMBER: {
70
- name: "member",
71
- description: "Regular organization member",
72
- permissions: [
73
- Permission.USER_READ,
74
- Permission.ORG_READ,
75
- Permission.MEMBER_LIST,
76
- Permission.PROJECT_READ,
77
- Permission.PROJECT_CREATE
78
- ]
79
- },
80
- VIEWER: {
81
- name: "viewer",
82
- description: "Read-only access",
83
- permissions: [
84
- Permission.USER_READ,
85
- Permission.ORG_READ,
86
- Permission.MEMBER_LIST,
87
- Permission.PROJECT_READ
88
- ]
89
- }
90
- };
91
-
92
- class RBACPolicyEngine {
93
- roleCache = new Map;
94
- bindingCache = new Map;
95
- async checkPermission(input, bindings) {
96
- const { userId, orgId, permission } = input;
97
- const now = new Date;
98
- const userBindings = bindings.filter((b) => b.targetType === "user" && b.targetId === userId);
99
- const orgBindings = orgId ? bindings.filter((b) => b.targetType === "organization" && b.targetId === orgId) : [];
100
- const allBindings = [...userBindings, ...orgBindings];
101
- const activeBindings = allBindings.filter((b) => !b.expiresAt || b.expiresAt > now);
102
- if (activeBindings.length === 0) {
103
- return {
104
- allowed: false,
105
- reason: "No active role bindings found"
106
- };
107
- }
108
- for (const binding of activeBindings) {
109
- if (binding.role.permissions.includes(permission)) {
110
- return {
111
- allowed: true,
112
- matchedRole: binding.role.name
113
- };
114
- }
115
- }
116
- return {
117
- allowed: false,
118
- reason: `No role grants the "${permission}" permission`
119
- };
120
- }
121
- async getPermissions(userId, orgId, bindings) {
122
- const now = new Date;
123
- const userBindings = bindings.filter((b) => b.targetType === "user" && b.targetId === userId);
124
- const orgBindings = orgId ? bindings.filter((b) => b.targetType === "organization" && b.targetId === orgId) : [];
125
- const allBindings = [...userBindings, ...orgBindings];
126
- const activeBindings = allBindings.filter((b) => !b.expiresAt || b.expiresAt > now);
127
- const permissions = new Set;
128
- const roles = [];
129
- for (const binding of activeBindings) {
130
- roles.push(binding.role);
131
- for (const perm of binding.role.permissions) {
132
- permissions.add(perm);
133
- }
134
- }
135
- return { permissions, roles };
136
- }
137
- async hasAnyPermission(userId, orgId, permissions, bindings) {
138
- const { permissions: userPerms } = await this.getPermissions(userId, orgId, bindings);
139
- return permissions.some((p) => userPerms.has(p));
140
- }
141
- async hasAllPermissions(userId, orgId, permissions, bindings) {
142
- const { permissions: userPerms } = await this.getPermissions(userId, orgId, bindings);
143
- return permissions.every((p) => userPerms.has(p));
144
- }
145
- }
146
- function createRBACEngine() {
147
- return new RBACPolicyEngine;
148
- }
149
- export {
150
- createRBACEngine,
151
- StandardRole,
152
- RBACPolicyEngine,
153
- Permission
154
- };
1
+ var y={USER_CREATE:"user.create",USER_READ:"user.read",USER_UPDATE:"user.update",USER_DELETE:"user.delete",USER_LIST:"user.list",USER_MANAGE:"user.manage",ORG_CREATE:"org.create",ORG_READ:"org.read",ORG_UPDATE:"org.update",ORG_DELETE:"org.delete",ORG_LIST:"org.list",MEMBER_INVITE:"member.invite",MEMBER_REMOVE:"member.remove",MEMBER_UPDATE_ROLE:"member.update_role",MEMBER_LIST:"member.list",MANAGE_MEMBERS:"org.manage_members",TEAM_CREATE:"team.create",TEAM_UPDATE:"team.update",TEAM_DELETE:"team.delete",TEAM_MANAGE:"team.manage",ROLE_CREATE:"role.create",ROLE_UPDATE:"role.update",ROLE_DELETE:"role.delete",ROLE_ASSIGN:"role.assign",ROLE_REVOKE:"role.revoke",BILLING_VIEW:"billing.view",BILLING_MANAGE:"billing.manage",PROJECT_CREATE:"project.create",PROJECT_READ:"project.read",PROJECT_UPDATE:"project.update",PROJECT_DELETE:"project.delete",PROJECT_MANAGE:"project.manage",ADMIN_ACCESS:"admin.access",ADMIN_IMPERSONATE:"admin.impersonate"},q={OWNER:{name:"owner",description:"Organization owner with full access",permissions:Object.values(y)},ADMIN:{name:"admin",description:"Administrator with most permissions",permissions:[y.USER_READ,y.USER_LIST,y.ORG_READ,y.ORG_UPDATE,y.MEMBER_INVITE,y.MEMBER_REMOVE,y.MEMBER_UPDATE_ROLE,y.MEMBER_LIST,y.MANAGE_MEMBERS,y.TEAM_CREATE,y.TEAM_UPDATE,y.TEAM_DELETE,y.TEAM_MANAGE,y.PROJECT_CREATE,y.PROJECT_READ,y.PROJECT_UPDATE,y.PROJECT_DELETE,y.PROJECT_MANAGE,y.BILLING_VIEW]},MEMBER:{name:"member",description:"Regular organization member",permissions:[y.USER_READ,y.ORG_READ,y.MEMBER_LIST,y.PROJECT_READ,y.PROJECT_CREATE]},VIEWER:{name:"viewer",description:"Read-only access",permissions:[y.USER_READ,y.ORG_READ,y.MEMBER_LIST,y.PROJECT_READ]}};class S{roleCache=new Map;bindingCache=new Map;async checkPermission(l,h){let{userId:k,orgId:R,permission:f}=l,x=new Date,W=h.filter((t)=>t.targetType==="user"&&t.targetId===k),F=R?h.filter((t)=>t.targetType==="organization"&&t.targetId===R):[],E=[...W,...F].filter((t)=>!t.expiresAt||t.expiresAt>x);if(E.length===0)return{allowed:!1,reason:"No active role bindings found"};for(let t of E)if(t.role.permissions.includes(f))return{allowed:!0,matchedRole:t.role.name};return{allowed:!1,reason:`No role grants the "${f}" permission`}}async getPermissions(l,h,k){let R=new Date,f=k.filter((t)=>t.targetType==="user"&&t.targetId===l),x=h?k.filter((t)=>t.targetType==="organization"&&t.targetId===h):[],F=[...f,...x].filter((t)=>!t.expiresAt||t.expiresAt>R),K=new Set,E=[];for(let t of F){E.push(t.role);for(let j of t.role.permissions)K.add(j)}return{permissions:K,roles:E}}async hasAnyPermission(l,h,k,R){let{permissions:f}=await this.getPermissions(l,h,R);return k.some((x)=>f.has(x))}async hasAllPermissions(l,h,k,R){let{permissions:f}=await this.getPermissions(l,h,R);return k.every((x)=>f.has(x))}}function z(){return new S}export{z as createRBACEngine,q as StandardRole,S as RBACPolicyEngine,y as Permission};