@contractspec/lib.identity-rbac 0.0.0-canary-20260113162409
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/LICENSE +21 -0
- package/README.md +102 -0
- package/dist/contracts/index.d.ts +4 -0
- package/dist/contracts/index.js +5 -0
- package/dist/contracts/organization.d.ts +896 -0
- package/dist/contracts/organization.d.ts.map +1 -0
- package/dist/contracts/organization.js +605 -0
- package/dist/contracts/organization.js.map +1 -0
- package/dist/contracts/rbac.d.ts +612 -0
- package/dist/contracts/rbac.d.ts.map +1 -0
- package/dist/contracts/rbac.js +484 -0
- package/dist/contracts/rbac.js.map +1 -0
- package/dist/contracts/user.d.ts +611 -0
- package/dist/contracts/user.d.ts.map +1 -0
- package/dist/contracts/user.js +333 -0
- package/dist/contracts/user.js.map +1 -0
- package/dist/entities/index.d.ts +177 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +36 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/entities/organization.d.ts +87 -0
- package/dist/entities/organization.d.ts.map +1 -0
- package/dist/entities/organization.js +151 -0
- package/dist/entities/organization.js.map +1 -0
- package/dist/entities/rbac.d.ts +88 -0
- package/dist/entities/rbac.d.ts.map +1 -0
- package/dist/entities/rbac.js +138 -0
- package/dist/entities/rbac.js.map +1 -0
- package/dist/entities/user.d.ts +88 -0
- package/dist/entities/user.d.ts.map +1 -0
- package/dist/entities/user.js +194 -0
- package/dist/entities/user.js.map +1 -0
- package/dist/events.d.ts +690 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +683 -0
- package/dist/events.js.map +1 -0
- package/dist/identity-rbac.capability.d.ts +8 -0
- package/dist/identity-rbac.capability.d.ts.map +1 -0
- package/dist/identity-rbac.capability.js +29 -0
- package/dist/identity-rbac.capability.js.map +1 -0
- package/dist/identity-rbac.feature.d.ts +12 -0
- package/dist/identity-rbac.feature.d.ts.map +1 -0
- package/dist/identity-rbac.feature.js +195 -0
- package/dist/identity-rbac.feature.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +14 -0
- package/dist/policies/engine.d.ts +133 -0
- package/dist/policies/engine.d.ts.map +1 -0
- package/dist/policies/engine.js +168 -0
- package/dist/policies/engine.js.map +1 -0
- package/dist/policies/index.d.ts +2 -0
- package/dist/policies/index.js +3 -0
- package/package.json +85 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
//#region src/policies/engine.ts
|
|
2
|
+
/**
|
|
3
|
+
* Standard permissions for identity-rbac module.
|
|
4
|
+
*/
|
|
5
|
+
const Permission = {
|
|
6
|
+
USER_CREATE: "user.create",
|
|
7
|
+
USER_READ: "user.read",
|
|
8
|
+
USER_UPDATE: "user.update",
|
|
9
|
+
USER_DELETE: "user.delete",
|
|
10
|
+
USER_LIST: "user.list",
|
|
11
|
+
USER_MANAGE: "user.manage",
|
|
12
|
+
ORG_CREATE: "org.create",
|
|
13
|
+
ORG_READ: "org.read",
|
|
14
|
+
ORG_UPDATE: "org.update",
|
|
15
|
+
ORG_DELETE: "org.delete",
|
|
16
|
+
ORG_LIST: "org.list",
|
|
17
|
+
MEMBER_INVITE: "member.invite",
|
|
18
|
+
MEMBER_REMOVE: "member.remove",
|
|
19
|
+
MEMBER_UPDATE_ROLE: "member.update_role",
|
|
20
|
+
MEMBER_LIST: "member.list",
|
|
21
|
+
MANAGE_MEMBERS: "org.manage_members",
|
|
22
|
+
TEAM_CREATE: "team.create",
|
|
23
|
+
TEAM_UPDATE: "team.update",
|
|
24
|
+
TEAM_DELETE: "team.delete",
|
|
25
|
+
TEAM_MANAGE: "team.manage",
|
|
26
|
+
ROLE_CREATE: "role.create",
|
|
27
|
+
ROLE_UPDATE: "role.update",
|
|
28
|
+
ROLE_DELETE: "role.delete",
|
|
29
|
+
ROLE_ASSIGN: "role.assign",
|
|
30
|
+
ROLE_REVOKE: "role.revoke",
|
|
31
|
+
BILLING_VIEW: "billing.view",
|
|
32
|
+
BILLING_MANAGE: "billing.manage",
|
|
33
|
+
PROJECT_CREATE: "project.create",
|
|
34
|
+
PROJECT_READ: "project.read",
|
|
35
|
+
PROJECT_UPDATE: "project.update",
|
|
36
|
+
PROJECT_DELETE: "project.delete",
|
|
37
|
+
PROJECT_MANAGE: "project.manage",
|
|
38
|
+
ADMIN_ACCESS: "admin.access",
|
|
39
|
+
ADMIN_IMPERSONATE: "admin.impersonate"
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Standard role definitions.
|
|
43
|
+
*/
|
|
44
|
+
const StandardRole = {
|
|
45
|
+
OWNER: {
|
|
46
|
+
name: "owner",
|
|
47
|
+
description: "Organization owner with full access",
|
|
48
|
+
permissions: Object.values(Permission)
|
|
49
|
+
},
|
|
50
|
+
ADMIN: {
|
|
51
|
+
name: "admin",
|
|
52
|
+
description: "Administrator with most permissions",
|
|
53
|
+
permissions: [
|
|
54
|
+
Permission.USER_READ,
|
|
55
|
+
Permission.USER_LIST,
|
|
56
|
+
Permission.ORG_READ,
|
|
57
|
+
Permission.ORG_UPDATE,
|
|
58
|
+
Permission.MEMBER_INVITE,
|
|
59
|
+
Permission.MEMBER_REMOVE,
|
|
60
|
+
Permission.MEMBER_UPDATE_ROLE,
|
|
61
|
+
Permission.MEMBER_LIST,
|
|
62
|
+
Permission.MANAGE_MEMBERS,
|
|
63
|
+
Permission.TEAM_CREATE,
|
|
64
|
+
Permission.TEAM_UPDATE,
|
|
65
|
+
Permission.TEAM_DELETE,
|
|
66
|
+
Permission.TEAM_MANAGE,
|
|
67
|
+
Permission.PROJECT_CREATE,
|
|
68
|
+
Permission.PROJECT_READ,
|
|
69
|
+
Permission.PROJECT_UPDATE,
|
|
70
|
+
Permission.PROJECT_DELETE,
|
|
71
|
+
Permission.PROJECT_MANAGE,
|
|
72
|
+
Permission.BILLING_VIEW
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
MEMBER: {
|
|
76
|
+
name: "member",
|
|
77
|
+
description: "Regular organization member",
|
|
78
|
+
permissions: [
|
|
79
|
+
Permission.USER_READ,
|
|
80
|
+
Permission.ORG_READ,
|
|
81
|
+
Permission.MEMBER_LIST,
|
|
82
|
+
Permission.PROJECT_READ,
|
|
83
|
+
Permission.PROJECT_CREATE
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
VIEWER: {
|
|
87
|
+
name: "viewer",
|
|
88
|
+
description: "Read-only access",
|
|
89
|
+
permissions: [
|
|
90
|
+
Permission.USER_READ,
|
|
91
|
+
Permission.ORG_READ,
|
|
92
|
+
Permission.MEMBER_LIST,
|
|
93
|
+
Permission.PROJECT_READ
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* RBAC Policy Engine for permission checks.
|
|
99
|
+
*/
|
|
100
|
+
var RBACPolicyEngine = class {
|
|
101
|
+
roleCache = /* @__PURE__ */ new Map();
|
|
102
|
+
bindingCache = /* @__PURE__ */ new Map();
|
|
103
|
+
/**
|
|
104
|
+
* Check if a user has a specific permission.
|
|
105
|
+
*/
|
|
106
|
+
async checkPermission(input, bindings) {
|
|
107
|
+
const { userId, orgId, permission } = input;
|
|
108
|
+
const now = /* @__PURE__ */ new Date();
|
|
109
|
+
const userBindings = bindings.filter((b) => b.targetType === "user" && b.targetId === userId);
|
|
110
|
+
const orgBindings = orgId ? bindings.filter((b) => b.targetType === "organization" && b.targetId === orgId) : [];
|
|
111
|
+
const activeBindings = [...userBindings, ...orgBindings].filter((b) => !b.expiresAt || b.expiresAt > now);
|
|
112
|
+
if (activeBindings.length === 0) return {
|
|
113
|
+
allowed: false,
|
|
114
|
+
reason: "No active role bindings found"
|
|
115
|
+
};
|
|
116
|
+
for (const binding of activeBindings) if (binding.role.permissions.includes(permission)) return {
|
|
117
|
+
allowed: true,
|
|
118
|
+
matchedRole: binding.role.name
|
|
119
|
+
};
|
|
120
|
+
return {
|
|
121
|
+
allowed: false,
|
|
122
|
+
reason: `No role grants the "${permission}" permission`
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get all permissions for a user in a context.
|
|
127
|
+
*/
|
|
128
|
+
async getPermissions(userId, orgId, bindings) {
|
|
129
|
+
const now = /* @__PURE__ */ new Date();
|
|
130
|
+
const userBindings = bindings.filter((b) => b.targetType === "user" && b.targetId === userId);
|
|
131
|
+
const orgBindings = orgId ? bindings.filter((b) => b.targetType === "organization" && b.targetId === orgId) : [];
|
|
132
|
+
const activeBindings = [...userBindings, ...orgBindings].filter((b) => !b.expiresAt || b.expiresAt > now);
|
|
133
|
+
const permissions = /* @__PURE__ */ new Set();
|
|
134
|
+
const roles = [];
|
|
135
|
+
for (const binding of activeBindings) {
|
|
136
|
+
roles.push(binding.role);
|
|
137
|
+
for (const perm of binding.role.permissions) permissions.add(perm);
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
permissions,
|
|
141
|
+
roles
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Check if user has any of the specified permissions.
|
|
146
|
+
*/
|
|
147
|
+
async hasAnyPermission(userId, orgId, permissions, bindings) {
|
|
148
|
+
const { permissions: userPerms } = await this.getPermissions(userId, orgId, bindings);
|
|
149
|
+
return permissions.some((p) => userPerms.has(p));
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Check if user has all of the specified permissions.
|
|
153
|
+
*/
|
|
154
|
+
async hasAllPermissions(userId, orgId, permissions, bindings) {
|
|
155
|
+
const { permissions: userPerms } = await this.getPermissions(userId, orgId, bindings);
|
|
156
|
+
return permissions.every((p) => userPerms.has(p));
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Create a new RBAC policy engine instance.
|
|
161
|
+
*/
|
|
162
|
+
function createRBACEngine() {
|
|
163
|
+
return new RBACPolicyEngine();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
//#endregion
|
|
167
|
+
export { Permission, RBACPolicyEngine, StandardRole, createRBACEngine };
|
|
168
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","names":[],"sources":["../../src/policies/engine.ts"],"sourcesContent":["/**\n * Standard permissions for identity-rbac module.\n */\nexport const Permission = {\n // User permissions\n USER_CREATE: 'user.create',\n USER_READ: 'user.read',\n USER_UPDATE: 'user.update',\n USER_DELETE: 'user.delete',\n USER_LIST: 'user.list',\n USER_MANAGE: 'user.manage',\n\n // Organization permissions\n ORG_CREATE: 'org.create',\n ORG_READ: 'org.read',\n ORG_UPDATE: 'org.update',\n ORG_DELETE: 'org.delete',\n ORG_LIST: 'org.list',\n\n // Member permissions\n MEMBER_INVITE: 'member.invite',\n MEMBER_REMOVE: 'member.remove',\n MEMBER_UPDATE_ROLE: 'member.update_role',\n MEMBER_LIST: 'member.list',\n MANAGE_MEMBERS: 'org.manage_members',\n\n // Team permissions\n TEAM_CREATE: 'team.create',\n TEAM_UPDATE: 'team.update',\n TEAM_DELETE: 'team.delete',\n TEAM_MANAGE: 'team.manage',\n\n // Role permissions\n ROLE_CREATE: 'role.create',\n ROLE_UPDATE: 'role.update',\n ROLE_DELETE: 'role.delete',\n ROLE_ASSIGN: 'role.assign',\n ROLE_REVOKE: 'role.revoke',\n\n // Billing permissions\n BILLING_VIEW: 'billing.view',\n BILLING_MANAGE: 'billing.manage',\n\n // Project permissions\n PROJECT_CREATE: 'project.create',\n PROJECT_READ: 'project.read',\n PROJECT_UPDATE: 'project.update',\n PROJECT_DELETE: 'project.delete',\n PROJECT_MANAGE: 'project.manage',\n\n // Admin permissions\n ADMIN_ACCESS: 'admin.access',\n ADMIN_IMPERSONATE: 'admin.impersonate',\n} as const;\n\nexport type PermissionKey = (typeof Permission)[keyof typeof Permission];\n\n/**\n * Standard role definitions.\n */\nexport const StandardRole = {\n OWNER: {\n name: 'owner',\n description: 'Organization owner with full access',\n permissions: Object.values(Permission),\n },\n ADMIN: {\n name: 'admin',\n description: 'Administrator with most permissions',\n permissions: [\n Permission.USER_READ,\n Permission.USER_LIST,\n Permission.ORG_READ,\n Permission.ORG_UPDATE,\n Permission.MEMBER_INVITE,\n Permission.MEMBER_REMOVE,\n Permission.MEMBER_UPDATE_ROLE,\n Permission.MEMBER_LIST,\n Permission.MANAGE_MEMBERS,\n Permission.TEAM_CREATE,\n Permission.TEAM_UPDATE,\n Permission.TEAM_DELETE,\n Permission.TEAM_MANAGE,\n Permission.PROJECT_CREATE,\n Permission.PROJECT_READ,\n Permission.PROJECT_UPDATE,\n Permission.PROJECT_DELETE,\n Permission.PROJECT_MANAGE,\n Permission.BILLING_VIEW,\n ],\n },\n MEMBER: {\n name: 'member',\n description: 'Regular organization member',\n permissions: [\n Permission.USER_READ,\n Permission.ORG_READ,\n Permission.MEMBER_LIST,\n Permission.PROJECT_READ,\n Permission.PROJECT_CREATE,\n ],\n },\n VIEWER: {\n name: 'viewer',\n description: 'Read-only access',\n permissions: [\n Permission.USER_READ,\n Permission.ORG_READ,\n Permission.MEMBER_LIST,\n Permission.PROJECT_READ,\n ],\n },\n} as const;\n\n/**\n * Permission check input.\n */\nexport interface PermissionCheckInput {\n userId: string;\n orgId?: string;\n permission: PermissionKey | string;\n}\n\n/**\n * Permission check result.\n */\nexport interface PermissionCheckResult {\n allowed: boolean;\n reason?: string;\n matchedRole?: string;\n}\n\n/**\n * Role with permissions.\n */\nexport interface RoleWithPermissions {\n id: string;\n name: string;\n permissions: string[];\n}\n\n/**\n * Policy binding for permission evaluation.\n */\nexport interface PolicyBindingForEval {\n roleId: string;\n role: RoleWithPermissions;\n targetType: 'user' | 'organization';\n targetId: string;\n expiresAt?: Date | null;\n}\n\n/**\n * RBAC Policy Engine for permission checks.\n */\nexport class RBACPolicyEngine {\n private roleCache = new Map<string, RoleWithPermissions>();\n private bindingCache = new Map<string, PolicyBindingForEval[]>();\n\n /**\n * Check if a user has a specific permission.\n */\n async checkPermission(\n input: PermissionCheckInput,\n bindings: PolicyBindingForEval[]\n ): Promise<PermissionCheckResult> {\n const { userId, orgId, permission } = input;\n const now = new Date();\n\n // Get all applicable bindings\n const userBindings = bindings.filter(\n (b) => b.targetType === 'user' && b.targetId === userId\n );\n\n const orgBindings = orgId\n ? bindings.filter(\n (b) => b.targetType === 'organization' && b.targetId === orgId\n )\n : [];\n\n const allBindings = [...userBindings, ...orgBindings];\n\n // Filter out expired bindings\n const activeBindings = allBindings.filter(\n (b) => !b.expiresAt || b.expiresAt > now\n );\n\n if (activeBindings.length === 0) {\n return {\n allowed: false,\n reason: 'No active role bindings found',\n };\n }\n\n // Check if any role grants the permission\n for (const binding of activeBindings) {\n if (binding.role.permissions.includes(permission)) {\n return {\n allowed: true,\n matchedRole: binding.role.name,\n };\n }\n }\n\n return {\n allowed: false,\n reason: `No role grants the \"${permission}\" permission`,\n };\n }\n\n /**\n * Get all permissions for a user in a context.\n */\n async getPermissions(\n userId: string,\n orgId: string | undefined,\n bindings: PolicyBindingForEval[]\n ): Promise<{\n permissions: Set<string>;\n roles: RoleWithPermissions[];\n }> {\n const now = new Date();\n\n // Get all applicable bindings\n const userBindings = bindings.filter(\n (b) => b.targetType === 'user' && b.targetId === userId\n );\n\n const orgBindings = orgId\n ? bindings.filter(\n (b) => b.targetType === 'organization' && b.targetId === orgId\n )\n : [];\n\n const allBindings = [...userBindings, ...orgBindings];\n\n // Filter out expired bindings\n const activeBindings = allBindings.filter(\n (b) => !b.expiresAt || b.expiresAt > now\n );\n\n const permissions = new Set<string>();\n const roles: RoleWithPermissions[] = [];\n\n for (const binding of activeBindings) {\n roles.push(binding.role);\n for (const perm of binding.role.permissions) {\n permissions.add(perm);\n }\n }\n\n return { permissions, roles };\n }\n\n /**\n * Check if user has any of the specified permissions.\n */\n async hasAnyPermission(\n userId: string,\n orgId: string | undefined,\n permissions: string[],\n bindings: PolicyBindingForEval[]\n ): Promise<boolean> {\n const { permissions: userPerms } = await this.getPermissions(\n userId,\n orgId,\n bindings\n );\n\n return permissions.some((p) => userPerms.has(p));\n }\n\n /**\n * Check if user has all of the specified permissions.\n */\n async hasAllPermissions(\n userId: string,\n orgId: string | undefined,\n permissions: string[],\n bindings: PolicyBindingForEval[]\n ): Promise<boolean> {\n const { permissions: userPerms } = await this.getPermissions(\n userId,\n orgId,\n bindings\n );\n\n return permissions.every((p) => userPerms.has(p));\n }\n}\n\n/**\n * Create a new RBAC policy engine instance.\n */\nexport function createRBACEngine(): RBACPolicyEngine {\n return new RBACPolicyEngine();\n}\n"],"mappings":";;;;AAGA,MAAa,aAAa;CAExB,aAAa;CACb,WAAW;CACX,aAAa;CACb,aAAa;CACb,WAAW;CACX,aAAa;CAGb,YAAY;CACZ,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,UAAU;CAGV,eAAe;CACf,eAAe;CACf,oBAAoB;CACpB,aAAa;CACb,gBAAgB;CAGhB,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CAGb,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CAGb,cAAc;CACd,gBAAgB;CAGhB,gBAAgB;CAChB,cAAc;CACd,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAGhB,cAAc;CACd,mBAAmB;CACpB;;;;AAOD,MAAa,eAAe;CAC1B,OAAO;EACL,MAAM;EACN,aAAa;EACb,aAAa,OAAO,OAAO,WAAW;EACvC;CACD,OAAO;EACL,MAAM;EACN,aAAa;EACb,aAAa;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACZ;EACF;CACD,QAAQ;EACN,MAAM;EACN,aAAa;EACb,aAAa;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACZ;EACF;CACD,QAAQ;EACN,MAAM;EACN,aAAa;EACb,aAAa;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACZ;EACF;CACF;;;;AA2CD,IAAa,mBAAb,MAA8B;CAC5B,AAAQ,4BAAY,IAAI,KAAkC;CAC1D,AAAQ,+BAAe,IAAI,KAAqC;;;;CAKhE,MAAM,gBACJ,OACA,UACgC;EAChC,MAAM,EAAE,QAAQ,OAAO,eAAe;EACtC,MAAM,sBAAM,IAAI,MAAM;EAGtB,MAAM,eAAe,SAAS,QAC3B,MAAM,EAAE,eAAe,UAAU,EAAE,aAAa,OAClD;EAED,MAAM,cAAc,QAChB,SAAS,QACN,MAAM,EAAE,eAAe,kBAAkB,EAAE,aAAa,MAC1D,GACD,EAAE;EAKN,MAAM,iBAHc,CAAC,GAAG,cAAc,GAAG,YAAY,CAGlB,QAChC,MAAM,CAAC,EAAE,aAAa,EAAE,YAAY,IACtC;AAED,MAAI,eAAe,WAAW,EAC5B,QAAO;GACL,SAAS;GACT,QAAQ;GACT;AAIH,OAAK,MAAM,WAAW,eACpB,KAAI,QAAQ,KAAK,YAAY,SAAS,WAAW,CAC/C,QAAO;GACL,SAAS;GACT,aAAa,QAAQ,KAAK;GAC3B;AAIL,SAAO;GACL,SAAS;GACT,QAAQ,uBAAuB,WAAW;GAC3C;;;;;CAMH,MAAM,eACJ,QACA,OACA,UAIC;EACD,MAAM,sBAAM,IAAI,MAAM;EAGtB,MAAM,eAAe,SAAS,QAC3B,MAAM,EAAE,eAAe,UAAU,EAAE,aAAa,OAClD;EAED,MAAM,cAAc,QAChB,SAAS,QACN,MAAM,EAAE,eAAe,kBAAkB,EAAE,aAAa,MAC1D,GACD,EAAE;EAKN,MAAM,iBAHc,CAAC,GAAG,cAAc,GAAG,YAAY,CAGlB,QAChC,MAAM,CAAC,EAAE,aAAa,EAAE,YAAY,IACtC;EAED,MAAM,8BAAc,IAAI,KAAa;EACrC,MAAM,QAA+B,EAAE;AAEvC,OAAK,MAAM,WAAW,gBAAgB;AACpC,SAAM,KAAK,QAAQ,KAAK;AACxB,QAAK,MAAM,QAAQ,QAAQ,KAAK,YAC9B,aAAY,IAAI,KAAK;;AAIzB,SAAO;GAAE;GAAa;GAAO;;;;;CAM/B,MAAM,iBACJ,QACA,OACA,aACA,UACkB;EAClB,MAAM,EAAE,aAAa,cAAc,MAAM,KAAK,eAC5C,QACA,OACA,SACD;AAED,SAAO,YAAY,MAAM,MAAM,UAAU,IAAI,EAAE,CAAC;;;;;CAMlD,MAAM,kBACJ,QACA,OACA,aACA,UACkB;EAClB,MAAM,EAAE,aAAa,cAAc,MAAM,KAAK,eAC5C,QACA,OACA,SACD;AAED,SAAO,YAAY,OAAO,MAAM,UAAU,IAAI,EAAE,CAAC;;;;;;AAOrD,SAAgB,mBAAqC;AACnD,QAAO,IAAI,kBAAkB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { Permission, PermissionCheckInput, PermissionCheckResult, PermissionKey, PolicyBindingForEval, RBACPolicyEngine, RoleWithPermissions, StandardRole, createRBACEngine } from "./engine.js";
|
|
2
|
+
export { Permission, type PermissionCheckInput, type PermissionCheckResult, type PermissionKey, type PolicyBindingForEval, RBACPolicyEngine, type RoleWithPermissions, StandardRole, createRBACEngine };
|
package/package.json
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@contractspec/lib.identity-rbac",
|
|
3
|
+
"version": "0.0.0-canary-20260113162409",
|
|
4
|
+
"description": "Identity, Organizations, and RBAC module for ContractSpec applications",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"contractspec",
|
|
7
|
+
"identity",
|
|
8
|
+
"rbac",
|
|
9
|
+
"authorization",
|
|
10
|
+
"organizations",
|
|
11
|
+
"typescript"
|
|
12
|
+
],
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"type": "module",
|
|
15
|
+
"scripts": {
|
|
16
|
+
"publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
|
|
17
|
+
"publish:pkg:canary": "bun publish:pkg --tag canary",
|
|
18
|
+
"build": "bun build:types && bun build:bundle",
|
|
19
|
+
"build:bundle": "tsdown",
|
|
20
|
+
"build:types": "tsc --noEmit",
|
|
21
|
+
"dev": "bun build:bundle --watch",
|
|
22
|
+
"clean": "rimraf dist .turbo",
|
|
23
|
+
"lint": "bun lint:fix",
|
|
24
|
+
"lint:fix": "eslint src --fix",
|
|
25
|
+
"lint:check": "eslint src"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@contractspec/lib.schema": "0.0.0-canary-20260113162409",
|
|
29
|
+
"@contractspec/lib.contracts": "0.0.0-canary-20260113162409",
|
|
30
|
+
"zod": "^4.3.5"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@contractspec/tool.typescript": "0.0.0-canary-20260113162409",
|
|
34
|
+
"@contractspec/tool.tsdown": "0.0.0-canary-20260113162409",
|
|
35
|
+
"typescript": "^5.9.3"
|
|
36
|
+
},
|
|
37
|
+
"exports": {
|
|
38
|
+
".": "./dist/index.js",
|
|
39
|
+
"./contracts": "./dist/contracts/index.js",
|
|
40
|
+
"./contracts/organization": "./dist/contracts/organization.js",
|
|
41
|
+
"./contracts/rbac": "./dist/contracts/rbac.js",
|
|
42
|
+
"./contracts/user": "./dist/contracts/user.js",
|
|
43
|
+
"./entities": "./dist/entities/index.js",
|
|
44
|
+
"./entities/organization": "./dist/entities/organization.js",
|
|
45
|
+
"./entities/rbac": "./dist/entities/rbac.js",
|
|
46
|
+
"./entities/user": "./dist/entities/user.js",
|
|
47
|
+
"./events": "./dist/events.js",
|
|
48
|
+
"./identity-rbac.capability": "./dist/identity-rbac.capability.js",
|
|
49
|
+
"./identity-rbac.feature": "./dist/identity-rbac.feature.js",
|
|
50
|
+
"./policies": "./dist/policies/index.js",
|
|
51
|
+
"./policies/engine": "./dist/policies/engine.js",
|
|
52
|
+
"./*": "./*"
|
|
53
|
+
},
|
|
54
|
+
"files": [
|
|
55
|
+
"dist",
|
|
56
|
+
"README.md"
|
|
57
|
+
],
|
|
58
|
+
"publishConfig": {
|
|
59
|
+
"access": "public",
|
|
60
|
+
"exports": {
|
|
61
|
+
".": "./dist/index.js",
|
|
62
|
+
"./contracts": "./dist/contracts/index.js",
|
|
63
|
+
"./contracts/organization": "./dist/contracts/organization.js",
|
|
64
|
+
"./contracts/rbac": "./dist/contracts/rbac.js",
|
|
65
|
+
"./contracts/user": "./dist/contracts/user.js",
|
|
66
|
+
"./entities": "./dist/entities/index.js",
|
|
67
|
+
"./entities/organization": "./dist/entities/organization.js",
|
|
68
|
+
"./entities/rbac": "./dist/entities/rbac.js",
|
|
69
|
+
"./entities/user": "./dist/entities/user.js",
|
|
70
|
+
"./events": "./dist/events.js",
|
|
71
|
+
"./identity-rbac.feature": "./dist/identity-rbac.feature.js",
|
|
72
|
+
"./policies": "./dist/policies/index.js",
|
|
73
|
+
"./policies/engine": "./dist/policies/engine.js",
|
|
74
|
+
"./*": "./*"
|
|
75
|
+
},
|
|
76
|
+
"registry": "https://registry.npmjs.org/"
|
|
77
|
+
},
|
|
78
|
+
"license": "MIT",
|
|
79
|
+
"repository": {
|
|
80
|
+
"type": "git",
|
|
81
|
+
"url": "https://github.com/lssm-tech/contractspec.git",
|
|
82
|
+
"directory": "packages/libs/identity-rbac"
|
|
83
|
+
},
|
|
84
|
+
"homepage": "https://contractspec.io"
|
|
85
|
+
}
|