@quantabit/rbac-sdk 1.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 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/services/rbacApi.js","../src/types/index.js","../src/i18n/index.js","../src/hooks/useRbac.js","../src/components/Rbac.jsx","../src/index.js"],"sourcesContent":["/**\n * RBAC SDK - API 客户端\n * 基于角色的访问控制系统后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * RBAC API 客户端\n */\nexport class RbacApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/rbac', config);\n }\n\n // ============ 权限检查 ============\n\n /**\n * 检查权限\n * @param {string} permission - 权限标识\n * @param {Object} context - 上下文\n */\n async checkPermission(permission, context = {}) {\n return this.post('/check', { permission, ...context });\n }\n\n /**\n * 批量检查权限\n * @param {string[]} permissions - 权限标识列表\n * @param {Object} context - 上下文\n */\n async batchCheckPermissions(permissions, context = {}) {\n return this.post('/check/batch', { permissions, ...context });\n }\n\n /**\n * 获取我的权限\n */\n async getMyPermissions() {\n return this.get('/my/permissions');\n }\n\n /**\n * 获取我的角色\n */\n async getMyRoles() {\n return this.get('/my/roles');\n }\n\n // ============ 角色管理 ============\n\n /**\n * 获取角色列表\n * @param {Object} params - 查询参数\n */\n async getRoles(params = {}) {\n return this.get('/roles', params);\n }\n\n /**\n * 获取角色详情\n * @param {string} roleId - 角色 ID\n */\n async getRole(roleId) {\n return this.get(`/roles/${roleId}`);\n }\n\n /**\n * 创建角色\n * @param {Object} role - 角色数据\n */\n async createRole(role) {\n return this.post('/roles', role);\n }\n\n /**\n * 更新角色\n * @param {string} roleId - 角色 ID\n * @param {Object} updates - 更新数据\n */\n async updateRole(roleId, updates) {\n return this.put(`/roles/${roleId}`, updates);\n }\n\n /**\n * 删除角色\n * @param {string} roleId - 角色 ID\n */\n async deleteRole(roleId) {\n return this.delete(`/roles/${roleId}`);\n }\n\n /**\n * 获取角色权限\n * @param {string} roleId - 角色 ID\n */\n async getRolePermissions(roleId) {\n return this.get(`/roles/${roleId}/permissions`);\n }\n\n /**\n * 设置角色权限\n * @param {string} roleId - 角色 ID\n * @param {string[]} permissions - 权限列表\n */\n async setRolePermissions(roleId, permissions) {\n return this.put(`/roles/${roleId}/permissions`, { permissions });\n }\n\n // ============ 用户角色 ============\n\n /**\n * 获取用户角色\n * @param {string} userId - 用户 ID\n */\n async getUserRoles(userId) {\n return this.get(`/users/${userId}/roles`);\n }\n\n /**\n * 分配用户角色\n * @param {string} userId - 用户 ID\n * @param {string[]} roleIds - 角色 ID 列表\n */\n async assignRoles(userId, roleIds) {\n return this.post(`/users/${userId}/roles`, { role_ids: roleIds });\n }\n\n /**\n * 分配单个用户角色(兼容快捷导出命名)\n * @param {string} userId - 用户 ID\n * @param {string} roleId - 角色 ID\n */\n async assignRole(userId, roleId) {\n return this.assignRoles(userId, [roleId]);\n }\n\n /**\n * 移除用户角色\n * @param {string} userId - 用户 ID\n * @param {string[]} roleIds - 角色 ID 列表\n */\n async removeRoles(userId, roleIds) {\n return this.delete(`/users/${userId}/roles`, { role_ids: roleIds });\n }\n\n /**\n * 获取角色用户\n * @param {string} roleId - 角色 ID\n * @param {Object} params - 查询参数\n */\n async getRoleUsers(roleId, params = {}) {\n return this.get(`/roles/${roleId}/users`, params);\n }\n\n // ============ 权限管理 ============\n\n /**\n * 获取权限列表\n * @param {Object} params - 查询参数\n */\n async getPermissions(params = {}) {\n return this.get('/permissions', params);\n }\n\n /**\n * 获取权限详情\n * @param {string} permissionId - 权限 ID\n */\n async getPermission(permissionId) {\n return this.get(`/permissions/${permissionId}`);\n }\n\n /**\n * 创建权限\n * @param {Object} permission - 权限数据\n */\n async createPermission(permission) {\n return this.post('/permissions', permission);\n }\n\n /**\n * 更新权限\n * @param {string} permissionId - 权限 ID\n * @param {Object} updates - 更新数据\n */\n async updatePermission(permissionId, updates) {\n return this.put(`/permissions/${permissionId}`, updates);\n }\n\n /**\n * 删除权限\n * @param {string} permissionId - 权限 ID\n */\n async deletePermission(permissionId) {\n return this.delete(`/permissions/${permissionId}`);\n }\n\n // ============ 资源控制 ============\n\n /**\n * 获取资源列表\n */\n async getResources() {\n return this.get('/resources');\n }\n\n /**\n * 获取资源权限\n * @param {string} resourceType - 资源类型\n * @param {string} resourceId - 资源 ID\n */\n async getResourcePermissions(resourceType, resourceId) {\n return this.get(`/resources/${resourceType}/${resourceId}/permissions`);\n }\n\n /**\n * 设置资源权限\n * @param {string} resourceType - 资源类型\n * @param {string} resourceId - 资源 ID\n * @param {Object} permissions - 权限配置\n */\n async setResourcePermissions(resourceType, resourceId, permissions) {\n return this.put(`/resources/${resourceType}/${resourceId}/permissions`, permissions);\n }\n}\n\n// 创建默认实例\nexport const rbacApi = new RbacApiClient();\n\n\n\nexport default rbacApi;\n","/**\n * RBAC SDK - 类型定义\n */\n\n// 权限类型\nexport const PermissionType = {\n READ: 'read',\n WRITE: 'write',\n DELETE: 'delete',\n ADMIN: 'admin',\n EXECUTE: 'execute',\n};\n\n// 资源类型\nexport const ResourceType = {\n API: 'api',\n PAGE: 'page',\n MENU: 'menu',\n BUTTON: 'button',\n DATA: 'data',\n FILE: 'file',\n};\n\n// 角色类型\nexport const RoleType = {\n SYSTEM: 'system',\n CUSTOM: 'custom',\n TEMPORARY: 'temporary',\n};\n\n// 条件操作符(ABAC)\nexport const ConditionOperator = {\n EQUALS: 'eq',\n NOT_EQUALS: 'neq',\n GREATER_THAN: 'gt',\n LESS_THAN: 'lt',\n IN: 'in',\n NOT_IN: 'not_in',\n CONTAINS: 'contains',\n STARTS_WITH: 'starts_with',\n};\n\nexport default { PermissionType, ResourceType, RoleType, ConditionOperator };\n\nexport const PermissionEffect = {};\n\nexport const ActionType = {};\n","/**\n * RBAC SDK - 多语言支持\n */\n\nconst messages = {\n en: {\n rbac: 'Access Control', roles: 'Roles', role: 'Role', permissions: 'Permissions', permission: 'Permission',\n users: 'Users', createRole: 'Create Role', editRole: 'Edit Role', deleteRole: 'Delete Role',\n roleName: 'Role Name', roleDescription: 'Description', assignRole: 'Assign Role', revokeRole: 'Revoke',\n resource: 'Resource', action: 'Action', effect: 'Effect', allow: 'Allow', deny: 'Deny',\n read: 'Read', write: 'Write', delete: 'Delete', admin: 'Admin', create: 'Create', update: 'Update',\n assignedUsers: 'Assigned Users', permissionCount: 'Permissions',\n loading: 'Loading...', noData: 'No data', save: 'Save', cancel: 'Cancel',\n },\n zh: {\n rbac: '访问控制', roles: '角色', role: '角色', permissions: '权限', permission: '权限',\n users: '用户', createRole: '创建角色', editRole: '编辑角色', deleteRole: '删除角色',\n roleName: '角色名称', roleDescription: '描述', assignRole: '分配角色', revokeRole: '撤销',\n resource: '资源', action: '操作', effect: '效果', allow: '允许', deny: '拒绝',\n read: '读取', write: '写入', delete: '删除', admin: '管理', create: '创建', update: '更新',\n assignedUsers: '已分配用户', permissionCount: '权限数',\n loading: '加载中...', noData: '暂无数据', save: '保存', cancel: '取消',\n },\n ja: {\n rbac: 'アクセス制御', roles: 'ロール', role: 'ロール', permissions: '権限', permission: '権限',\n users: 'ユーザー', createRole: 'ロールの作成', editRole: 'ロールの編集', deleteRole: 'ロールの削除',\n roleName: 'ロール名', roleDescription: '説明', assignRole: 'ロールの割り当て', revokeRole: '取り消し',\n resource: 'リソース', action: 'アクション', effect: '効果', allow: '許可', deny: '拒否',\n read: '読み取り', write: '書き込み', delete: '削除', admin: '管理', create: '作成', update: '更新',\n assignedUsers: '割り当て済みユーザー', permissionCount: '権限数',\n loading: '読み込み中...', noData: 'データなし', save: '保存', cancel: 'キャンセル',\n },\n ko: {\n rbac: '접근 제어', roles: '역할', role: '역할', permissions: '권한', permission: '권한',\n users: '사용자', createRole: '역할 생성', editRole: '역할 편집', deleteRole: '역할 삭제',\n roleName: '역할 이름', roleDescription: '설명', assignRole: '역할 할당', revokeRole: '철회',\n resource: '리소스', action: '작업', effect: '효과', allow: '허용', deny: '거부',\n read: '읽기', write: '쓰기', delete: '삭제', admin: '관리', create: '생성', update: '업데이트',\n assignedUsers: '할당된 사용자', permissionCount: '권한 수',\n loading: '로딩 중...', noData: '데이터 없음', save: '저장', cancel: '취소',\n },\n};\n\nconst SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\nlet currentLanguage = 'zh';\n\nexport function setLanguage(lang) { if (SUPPORTED_LANGUAGES.includes(lang)) currentLanguage = lang; }\nexport function getLanguage() { return currentLanguage; }\nexport function t(key) { return (messages[currentLanguage] || messages.en)[key] || key; }\nexport { messages, SUPPORTED_LANGUAGES };\n","/**\n * RBAC SDK - React Hooks\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { rbacApi } from '../services/rbacApi';\n\nexport function useRoles(options = {}) {\n const [roles, setRoles] = useState([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n const fetch = useCallback(async () => {\n setLoading(true);\n try {\n const result = await rbacApi.getRoles(options);\n setRoles(result.items || result);\n setError(null);\n } catch (err) { setError(err); }\n finally { setLoading(false); }\n }, [JSON.stringify(options)]);\n\n useEffect(() => { fetch(); }, [fetch]);\n return { roles, loading, error, refresh: fetch };\n}\n\nexport function usePermissions(options = {}) {\n const [permissions, setPermissions] = useState([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n const fetch = useCallback(async () => {\n setLoading(true);\n try {\n const result = await rbacApi.getPermissions(options);\n setPermissions(result.items || result);\n setError(null);\n } catch (err) { setError(err); }\n finally { setLoading(false); }\n }, [JSON.stringify(options)]);\n\n useEffect(() => { fetch(); }, [fetch]);\n return { permissions, loading, error, refresh: fetch };\n}\n\nexport function useUserRoles(userId) {\n const [roles, setRoles] = useState([]);\n const [loading, setLoading] = useState(true);\n\n const fetch = useCallback(async () => {\n if (!userId) return;\n setLoading(true);\n try {\n const result = await rbacApi.getUserRoles(userId);\n setRoles(result.items || result);\n } catch (err) { console.error(err); }\n finally { setLoading(false); }\n }, [userId]);\n\n useEffect(() => { fetch(); }, [fetch]);\n return { roles, loading, refresh: fetch };\n}\n\nexport function useRbacActions() {\n const [loading, setLoading] = useState(false);\n\n const assignRole = useCallback(async (userId, roleId) => {\n setLoading(true);\n try { return await rbacApi.assignRole(userId, roleId); }\n finally { setLoading(false); }\n }, []);\n\n const revokeRole = useCallback(async (userId, roleId) => {\n setLoading(true);\n try { await rbacApi.revokeRole(userId, roleId); }\n finally { setLoading(false); }\n }, []);\n\n const checkPermission = useCallback(async (userId, resource, action) => {\n try { return await rbacApi.checkPermission(userId, resource, action); }\n catch { return { allowed: false }; }\n }, []);\n\n return { assignRole, revokeRole, checkPermission, loading };\n}\n\n","/**\n * RBAC SDK - 权限组件\n */\n\nimport React from 'react';\nimport { t } from '../i18n';\n\nconst roleIcons = { admin: '👑', moderator: '🛡️', user: '👤', guest: '🚪' };\n\nexport function PermissionTag({ permission, effect = 'allow' }) {\n return (\n <span className={`rbac-permission-tag ${effect}`}>\n {effect === 'allow' ? '✓' : '✗'} {permission}\n </span>\n );\n}\n\nexport function RoleCard({ role, onClick, onEdit, onDelete }) {\n const icon = roleIcons[role.name?.toLowerCase()] || '🔐';\n \n return (\n <div className=\"rbac-role-card\" onClick={() => onClick?.(role)} style={{ cursor: onClick ? 'pointer' : 'default' }}>\n <div className=\"rbac-role-name\">{icon} {role.name}</div>\n <div className=\"rbac-role-desc\">{role.description || '-'}</div>\n <div className=\"rbac-role-meta\">\n <span>{role.permission_count || role.permissions?.length || 0} {t('permissionCount')}</span>\n <span>{role.user_count || 0} {t('users')}</span>\n </div>\n {(onEdit || onDelete) && (\n <div style={{ display: 'flex', gap: '8px', marginTop: '12px' }}>\n {onEdit && <button className=\"rbac-btn rbac-btn-outline\" style={{ padding: '4px 10px', fontSize: '12px' }} onClick={(e) => { e.stopPropagation(); onEdit(role); }}>{t('editRole')}</button>}\n {onDelete && <button className=\"rbac-btn rbac-btn-outline\" style={{ padding: '4px 10px', fontSize: '12px', color: '#ef4444' }} onClick={(e) => { e.stopPropagation(); onDelete(role.id); }}>{t('deleteRole')}</button>}\n </div>\n )}\n </div>\n );\n}\n\nexport function RoleGrid({ roles = [], loading = false, onClick, onEdit, onDelete, onCreate, className = '' }) {\n if (loading) return <div className={`rbac-card ${className}`}><div className=\"rbac-loading\"><div className=\"rbac-spinner\" /></div></div>;\n if (roles.length === 0) return (\n <div className={`rbac-card ${className}`}>\n <div className=\"rbac-empty\">\n <div style={{ fontSize: '48px', marginBottom: '16px' }}>🔐</div>\n <div>{t('noData')}</div>\n {onCreate && <button className=\"rbac-btn rbac-btn-primary\" onClick={onCreate} style={{ marginTop: '16px' }}>{t('createRole')}</button>}\n </div>\n </div>\n );\n \n return (\n <div className={`rbac-card ${className}`} style={{ padding: 0 }}>\n <div className=\"rbac-role-grid\">\n {roles.map(role => <RoleCard key={role.id} role={role} onClick={onClick} onEdit={onEdit} onDelete={onDelete} />)}\n </div>\n </div>\n );\n}\n\nexport function PermissionList({ permissions = [], className = '' }) {\n if (permissions.length === 0) return null;\n \n return (\n <div className={`rbac-permission-list ${className}`}>\n {permissions.map((p, i) => (\n <PermissionTag key={i} permission={`${p.resource}:${p.action}`} effect={p.effect} />\n ))}\n </div>\n );\n}\n\nexport default RoleGrid;\n","/**\n * @quantabit/rbac-sdk\n * RBAC SDK - Full Version\n */\n\nexport { rbacApi, RbacApiClient } from './services/rbacApi';\nexport { PermissionEffect, ResourceType, ActionType } from './types';\nexport { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t } from './i18n';\nexport { useRoles, usePermissions, useUserRoles, useRbacActions } from './hooks/useRbac';\nexport { RoleGrid, RoleCard, PermissionList, PermissionTag } from './components/Rbac';\n\nimport { rbacApi } from './services/rbacApi';\n\nexport const getRoles = (...args) => rbacApi.getRoles(...args);\nexport const getPermissions = (...args) => rbacApi.getPermissions(...args);\nexport const assignRole = (userId, roleId) => rbacApi.assignRoles(userId, Array.isArray(roleId) ? roleId : [roleId]);\nexport const checkPermission = (...args) => rbacApi.checkPermission(...args);\n\nimport './styles/main.css';\n"],"names":["RbacApiClient","BaseApiClient","constructor","config","checkPermission","permission","context","post","batchCheckPermissions","permissions","getMyPermissions","get","getMyRoles","getRoles","params","getRole","roleId","createRole","role","updateRole","updates","put","deleteRole","delete","getRolePermissions","setRolePermissions","getUserRoles","userId","assignRoles","roleIds","role_ids","assignRole","removeRoles","getRoleUsers","getPermissions","getPermission","permissionId","createPermission","updatePermission","deletePermission","getResources","getResourcePermissions","resourceType","resourceId","setResourcePermissions","rbacApi","ResourceType","API","PAGE","MENU","BUTTON","DATA","FILE","PermissionEffect","ActionType","messages","en","rbac","roles","users","editRole","roleName","roleDescription","revokeRole","resource","action","effect","allow","deny","read","write","admin","create","update","assignedUsers","permissionCount","loading","noData","save","cancel","zh","ja","ko","SUPPORTED_LANGUAGES","currentLanguage","setLanguage","lang","includes","getLanguage","t","key","useRoles","options","setRoles","useState","setLoading","error","setError","fetch","useCallback","result","items","err","JSON","stringify","useEffect","refresh","usePermissions","setPermissions","useUserRoles","console","useRbacActions","allowed","roleIcons","moderator","user","guest","PermissionTag","React","createElement","className","RoleCard","onClick","onEdit","onDelete","icon","name","toLowerCase","style","cursor","description","permission_count","length","user_count","display","gap","marginTop","padding","fontSize","e","stopPropagation","color","id","RoleGrid","onCreate","marginBottom","map","PermissionList","p","i","args","Array","isArray"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ :root{--rbac-primary:#0ea5e9;--rbac-success:#22c55e;--rbac-danger:#ef4444;--rbac-gray-100:#f3f4f6;--rbac-gray-200:#e5e7eb;--rbac-gray-500:#6b7280;--rbac-gray-700:#374151;--rbac-gray-900:#111827;--rbac-radius:8px}.rbac-card{background:#fff;border-radius:var(--rbac-radius);box-shadow:0 1px 3px rgba(0,0,0,.1)}.rbac-header{align-items:center;border-bottom:1px solid var(--rbac-gray-200);display:flex;justify-content:space-between;padding:16px 20px}.rbac-title{color:var(--rbac-gray-900);font-size:16px;font-weight:600}.rbac-role-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));padding:16px}.rbac-role-card{background:var(--rbac-gray-100);border-radius:var(--rbac-radius);padding:16px;transition:all .2s}.rbac-role-card:hover{background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.1)}.rbac-role-name{align-items:center;color:var(--rbac-gray-900);display:flex;font-size:15px;font-weight:600;gap:8px}.rbac-role-desc{color:var(--rbac-gray-500);font-size:13px;margin-top:8px}.rbac-role-meta{color:var(--rbac-gray-500);display:flex;font-size:12px;gap:16px;margin-top:12px}.rbac-permission-list{display:flex;flex-wrap:wrap;gap:8px;padding:16px}.rbac-permission-tag{align-items:center;background:var(--rbac-gray-100);border-radius:16px;display:inline-flex;font-size:12px;font-weight:500;gap:4px;padding:4px 10px}.rbac-permission-tag.allow{background:#dcfce7;color:#166534}.rbac-permission-tag.deny{background:#fee2e2;color:#991b1b}.rbac-btn{align-items:center;border:none;border-radius:var(--rbac-radius);cursor:pointer;display:inline-flex;font-size:14px;font-weight:500;gap:6px;padding:8px 16px}.rbac-btn-primary{background:var(--rbac-primary);color:#fff}.rbac-btn-outline{background:transparent;border:1px solid var(--rbac-gray-200);color:var(--rbac-gray-700)}.rbac-empty{color:var(--rbac-gray-500);padding:48px 20px;text-align:center}.rbac-loading{display:flex;justify-content:center;padding:40px}.rbac-spinner{animation:rbac-spin .8s linear infinite;border:3px solid var(--rbac-gray-200);border-radius:50%;border-top-color:var(--rbac-primary);height:32px;width:32px}@keyframes rbac-spin{to{transform:rotate(1turn)}}
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@quantabit/rbac-sdk",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "QuantaBit RBAC SDK - Role-based/attribute-based access control and fine-grained API resource management",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.esm.js",
8
+ "files": [
9
+ "dist",
10
+ "README.md",
11
+ "LICENSE",
12
+ "types"
13
+ ],
14
+ "exports": {
15
+ ".": {
16
+ "types": "./types/index.d.ts",
17
+ "import": "./dist/index.esm.js",
18
+ "require": "./dist/index.cjs"
19
+ },
20
+ "./styles": "./dist/styles.css",
21
+ "./styles.css": "./dist/styles.css"
22
+ },
23
+ "scripts": {
24
+ "build": "rollup -c",
25
+ "dev": "rollup -c -w",
26
+ "clean": "rm -rf dist",
27
+ "prepublishOnly": "npm run build",
28
+ "test": "jest --passWithNoTests"
29
+ },
30
+ "devDependencies": {
31
+ "@rollup/plugin-commonjs": "^25.0.0",
32
+ "@rollup/plugin-node-resolve": "^15.0.0",
33
+ "rollup": "^4.0.0",
34
+ "@babel/core": "^7.23.0",
35
+ "@babel/preset-env": "^7.23.0",
36
+ "@babel/preset-react": "^7.23.0",
37
+ "@rollup/plugin-babel": "^6.0.0",
38
+ "babel-jest": "^29.7.0",
39
+ "identity-obj-proxy": "^3.0.0",
40
+ "jest": "^29.7.0",
41
+ "jest-environment-jsdom": "^29.7.0",
42
+ "react": "^18.2.0",
43
+ "react-dom": "^18.2.0",
44
+ "rollup-plugin-postcss": "^4.0.0"
45
+ },
46
+ "keywords": [
47
+ "rbac",
48
+ "abac",
49
+ "permission",
50
+ "access-control",
51
+ "quantabit"
52
+ ],
53
+ "author": "QuantaBit Team",
54
+ "license": "MIT",
55
+ "publishConfig": {
56
+ "access": "public",
57
+ "registry": "https://registry.npmjs.org"
58
+ },
59
+ "dependencies": {
60
+ "@quantabit/sdk-config": "^1.0.6"
61
+ },
62
+ "peerDependencies": {
63
+ "react": ">=17.0.0",
64
+ "react-dom": ">=17.0.0"
65
+ },
66
+ "repository": {
67
+ "type": "git",
68
+ "url": "https://github.com/quantabit-chain/qbit-sdk.git",
69
+ "directory": "packages/rbac-sdk"
70
+ },
71
+ "homepage": "https://github.com/quantabit-chain/qbit-sdk/tree/main/packages/rbac-sdk#readme",
72
+ "bugs": {
73
+ "url": "https://github.com/quantabit-chain/qbit-sdk/issues"
74
+ },
75
+ "types": "types/index.d.ts",
76
+ "engines": {
77
+ "node": ">=18.0.0"
78
+ },
79
+ "sideEffects": [
80
+ "*.css"
81
+ ],
82
+ "qbit": {
83
+ "privacy": {
84
+ "level": "functional",
85
+ "dataCollection": "Feature-related data for personalization. Requires user consent.",
86
+ "gdprCompliant": true,
87
+ "ccpaCompliant": true
88
+ }
89
+ }
90
+ }
@@ -0,0 +1,109 @@
1
+ /**
2
+ * @quantabit/rbac-sdk TypeScript Type Definitions
3
+ *
4
+ * Auto-generated type stubs. Enhance with specific types as the SDK matures.
5
+ */
6
+
7
+ import { FC, ReactNode } from 'react';
8
+
9
+ // ============ Components ============
10
+
11
+ export interface RoleGridProps {
12
+ className?: string;
13
+ style?: React.CSSProperties;
14
+ [key: string]: any;
15
+ }
16
+
17
+ export declare const RoleGrid: FC<RoleGridProps>;
18
+
19
+ export interface RoleCardProps {
20
+ className?: string;
21
+ style?: React.CSSProperties;
22
+ [key: string]: any;
23
+ }
24
+
25
+ export declare const RoleCard: FC<RoleCardProps>;
26
+
27
+ export interface PermissionListProps {
28
+ className?: string;
29
+ style?: React.CSSProperties;
30
+ [key: string]: any;
31
+ }
32
+
33
+ export declare const PermissionList: FC<PermissionListProps>;
34
+
35
+ export interface PermissionTagProps {
36
+ className?: string;
37
+ style?: React.CSSProperties;
38
+ [key: string]: any;
39
+ }
40
+
41
+ export declare const PermissionTag: FC<PermissionTagProps>;
42
+
43
+ // ============ Hooks ============
44
+
45
+ export interface UseRolesReturn {
46
+ data: any;
47
+ loading: boolean;
48
+ error: string | null;
49
+ [key: string]: any;
50
+ }
51
+
52
+ export declare function useRoles(...args: any[]): UseRolesReturn;
53
+
54
+ export interface UsePermissionsReturn {
55
+ data: any;
56
+ loading: boolean;
57
+ error: string | null;
58
+ [key: string]: any;
59
+ }
60
+
61
+ export declare function usePermissions(...args: any[]): UsePermissionsReturn;
62
+
63
+ export interface UseUserRolesReturn {
64
+ data: any;
65
+ loading: boolean;
66
+ error: string | null;
67
+ [key: string]: any;
68
+ }
69
+
70
+ export declare function useUserRoles(...args: any[]): UseUserRolesReturn;
71
+
72
+ export interface UseRbacActionsReturn {
73
+ data: any;
74
+ loading: boolean;
75
+ error: string | null;
76
+ [key: string]: any;
77
+ }
78
+
79
+ export declare function useRbacActions(...args: any[]): UseRbacActionsReturn;
80
+
81
+ // ============ Services ============
82
+
83
+ export declare const rbacApi: any;
84
+
85
+ export declare class RbacApiClient {
86
+ constructor(config?: Record<string, any>);
87
+ setToken(token: string): void;
88
+ setBaseUrl(url: string): void;
89
+ destroy(): void;
90
+ }
91
+
92
+ // ============ Types & Enums ============
93
+
94
+ export declare const PermissionEffect: any;
95
+ export declare const ResourceType: Record<string, string>;
96
+ export declare const ActionType: Record<string, string>;
97
+
98
+ // ============ Functions & Utilities ============
99
+
100
+ export declare const messages: Record<string, Record<string, string>>;
101
+ export declare const SUPPORTED_LANGUAGES: string[];
102
+ export declare function setLanguage(lang: string): void;
103
+ export declare function getLanguage(): string;
104
+ export declare function t(key: string, params?: Record<string, any>): string;
105
+ export declare function getRoles(...args: any[]): any;
106
+ export declare function getPermissions(...args: any[]): any;
107
+ export declare function assignRole(...args: any[]): any;
108
+ export declare function checkPermission(...args: any[]): any;
109
+