@sudobility/entity_service 1.0.1
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/CLAUDE.md +124 -0
- package/dist/helpers/EntityHelper.cjs +234 -0
- package/dist/helpers/EntityHelper.d.ts +60 -0
- package/dist/helpers/EntityHelper.d.ts.map +1 -0
- package/dist/helpers/EntityHelper.js +234 -0
- package/dist/helpers/EntityHelper.js.map +1 -0
- package/dist/helpers/EntityMemberHelper.cjs +215 -0
- package/dist/helpers/EntityMemberHelper.d.ts +45 -0
- package/dist/helpers/EntityMemberHelper.d.ts.map +1 -0
- package/dist/helpers/EntityMemberHelper.js +215 -0
- package/dist/helpers/EntityMemberHelper.js.map +1 -0
- package/dist/helpers/InvitationHelper.cjs +251 -0
- package/dist/helpers/InvitationHelper.d.ts +59 -0
- package/dist/helpers/InvitationHelper.d.ts.map +1 -0
- package/dist/helpers/InvitationHelper.js +251 -0
- package/dist/helpers/InvitationHelper.js.map +1 -0
- package/dist/helpers/PermissionHelper.cjs +197 -0
- package/dist/helpers/PermissionHelper.d.ts +86 -0
- package/dist/helpers/PermissionHelper.d.ts.map +1 -0
- package/dist/helpers/PermissionHelper.js +197 -0
- package/dist/helpers/PermissionHelper.js.map +1 -0
- package/dist/helpers/index.cjs +15 -0
- package/dist/helpers/index.d.ts +8 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +15 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/index.cjs +76 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/hono.cjs +148 -0
- package/dist/middleware/hono.d.ts +102 -0
- package/dist/middleware/hono.d.ts.map +1 -0
- package/dist/middleware/hono.js +148 -0
- package/dist/middleware/hono.js.map +1 -0
- package/dist/middleware/index.cjs +12 -0
- package/dist/middleware/index.d.ts +5 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +12 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/migrations/001_add_entities.cjs +269 -0
- package/dist/migrations/001_add_entities.d.ts +29 -0
- package/dist/migrations/001_add_entities.d.ts.map +1 -0
- package/dist/migrations/001_add_entities.js +269 -0
- package/dist/migrations/001_add_entities.js.map +1 -0
- package/dist/migrations/index.cjs +10 -0
- package/dist/migrations/index.d.ts +5 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +10 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/schema/entities.cjs +304 -0
- package/dist/schema/entities.d.ts +1047 -0
- package/dist/schema/entities.d.ts.map +1 -0
- package/dist/schema/entities.js +304 -0
- package/dist/schema/entities.js.map +1 -0
- package/dist/types/index.cjs +14 -0
- package/dist/types/index.d.ts +71 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +14 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.cjs +21 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/slug-generator.cjs +92 -0
- package/dist/utils/slug-generator.d.ts +41 -0
- package/dist/utils/slug-generator.d.ts.map +1 -0
- package/dist/utils/slug-generator.js +92 -0
- package/dist/utils/slug-generator.js.map +1 -0
- package/package.json +78 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Entity Service Library
|
|
4
|
+
* @description Shared backend library for multi-tenant entity/organization management
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import {
|
|
9
|
+
* createEntityHelpers,
|
|
10
|
+
* createEntityContextMiddleware,
|
|
11
|
+
* entities,
|
|
12
|
+
* entityMembers,
|
|
13
|
+
* entityInvitations,
|
|
14
|
+
* } from '@shapeshyft/entity-service';
|
|
15
|
+
*
|
|
16
|
+
* // Create helpers with your database config
|
|
17
|
+
* const helpers = createEntityHelpers({
|
|
18
|
+
* db: drizzleDb,
|
|
19
|
+
* entitiesTable: mySchema.entities,
|
|
20
|
+
* membersTable: mySchema.entityMembers,
|
|
21
|
+
* invitationsTable: mySchema.entityInvitations,
|
|
22
|
+
* usersTable: mySchema.users,
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Use in your routes
|
|
26
|
+
* const entity = await helpers.entity.getOrCreatePersonalEntity(userId, email);
|
|
27
|
+
* const members = await helpers.members.getMembers(entityId);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.ROLE_PERMISSIONS = exports.InvitationStatus = exports.EntityRole = exports.EntityType = exports.rollbackEntityMigration = exports.runEntityMigration = exports.calculateInvitationExpiry = exports.validateSlug = exports.normalizeSlug = exports.generateInvitationToken = exports.generateEntitySlug = exports.createEntityHelpers = exports.createRequireRoleMiddleware = exports.createRequirePermissionMiddleware = exports.createEntityContextMiddleware = exports.PermissionHelper = exports.InvitationHelper = exports.EntityMemberHelper = exports.EntityHelper = exports.initEntityTables = exports.entityInvitations = exports.entityMembers = exports.entities = exports.createEntityInvitationsTablePublic = exports.createEntityInvitationsTable = exports.createEntityMembersTablePublic = exports.createEntityMembersTable = exports.createEntitiesTablePublic = exports.createEntitiesTable = void 0;
|
|
32
|
+
// Schema exports
|
|
33
|
+
var entities_1 = require("./schema/entities");
|
|
34
|
+
// Table factory functions
|
|
35
|
+
Object.defineProperty(exports, "createEntitiesTable", { enumerable: true, get: function () { return entities_1.createEntitiesTable; } });
|
|
36
|
+
Object.defineProperty(exports, "createEntitiesTablePublic", { enumerable: true, get: function () { return entities_1.createEntitiesTablePublic; } });
|
|
37
|
+
Object.defineProperty(exports, "createEntityMembersTable", { enumerable: true, get: function () { return entities_1.createEntityMembersTable; } });
|
|
38
|
+
Object.defineProperty(exports, "createEntityMembersTablePublic", { enumerable: true, get: function () { return entities_1.createEntityMembersTablePublic; } });
|
|
39
|
+
Object.defineProperty(exports, "createEntityInvitationsTable", { enumerable: true, get: function () { return entities_1.createEntityInvitationsTable; } });
|
|
40
|
+
Object.defineProperty(exports, "createEntityInvitationsTablePublic", { enumerable: true, get: function () { return entities_1.createEntityInvitationsTablePublic; } });
|
|
41
|
+
// Default tables (public schema)
|
|
42
|
+
Object.defineProperty(exports, "entities", { enumerable: true, get: function () { return entities_1.entities; } });
|
|
43
|
+
Object.defineProperty(exports, "entityMembers", { enumerable: true, get: function () { return entities_1.entityMembers; } });
|
|
44
|
+
Object.defineProperty(exports, "entityInvitations", { enumerable: true, get: function () { return entities_1.entityInvitations; } });
|
|
45
|
+
// Initialization
|
|
46
|
+
Object.defineProperty(exports, "initEntityTables", { enumerable: true, get: function () { return entities_1.initEntityTables; } });
|
|
47
|
+
// Helper exports
|
|
48
|
+
var helpers_1 = require("./helpers");
|
|
49
|
+
Object.defineProperty(exports, "EntityHelper", { enumerable: true, get: function () { return helpers_1.EntityHelper; } });
|
|
50
|
+
Object.defineProperty(exports, "EntityMemberHelper", { enumerable: true, get: function () { return helpers_1.EntityMemberHelper; } });
|
|
51
|
+
Object.defineProperty(exports, "InvitationHelper", { enumerable: true, get: function () { return helpers_1.InvitationHelper; } });
|
|
52
|
+
Object.defineProperty(exports, "PermissionHelper", { enumerable: true, get: function () { return helpers_1.PermissionHelper; } });
|
|
53
|
+
// Middleware exports
|
|
54
|
+
var middleware_1 = require("./middleware");
|
|
55
|
+
Object.defineProperty(exports, "createEntityContextMiddleware", { enumerable: true, get: function () { return middleware_1.createEntityContextMiddleware; } });
|
|
56
|
+
Object.defineProperty(exports, "createRequirePermissionMiddleware", { enumerable: true, get: function () { return middleware_1.createRequirePermissionMiddleware; } });
|
|
57
|
+
Object.defineProperty(exports, "createRequireRoleMiddleware", { enumerable: true, get: function () { return middleware_1.createRequireRoleMiddleware; } });
|
|
58
|
+
Object.defineProperty(exports, "createEntityHelpers", { enumerable: true, get: function () { return middleware_1.createEntityHelpers; } });
|
|
59
|
+
// Utility exports
|
|
60
|
+
var utils_1 = require("./utils");
|
|
61
|
+
Object.defineProperty(exports, "generateEntitySlug", { enumerable: true, get: function () { return utils_1.generateEntitySlug; } });
|
|
62
|
+
Object.defineProperty(exports, "generateInvitationToken", { enumerable: true, get: function () { return utils_1.generateInvitationToken; } });
|
|
63
|
+
Object.defineProperty(exports, "normalizeSlug", { enumerable: true, get: function () { return utils_1.normalizeSlug; } });
|
|
64
|
+
Object.defineProperty(exports, "validateSlug", { enumerable: true, get: function () { return utils_1.validateSlug; } });
|
|
65
|
+
Object.defineProperty(exports, "calculateInvitationExpiry", { enumerable: true, get: function () { return utils_1.calculateInvitationExpiry; } });
|
|
66
|
+
// Migration exports
|
|
67
|
+
var migrations_1 = require("./migrations");
|
|
68
|
+
Object.defineProperty(exports, "runEntityMigration", { enumerable: true, get: function () { return migrations_1.runEntityMigration; } });
|
|
69
|
+
Object.defineProperty(exports, "rollbackEntityMigration", { enumerable: true, get: function () { return migrations_1.rollbackEntityMigration; } });
|
|
70
|
+
// Type exports (re-exported from @sudobility/types)
|
|
71
|
+
var types_1 = require("./types");
|
|
72
|
+
Object.defineProperty(exports, "EntityType", { enumerable: true, get: function () { return types_1.EntityType; } });
|
|
73
|
+
Object.defineProperty(exports, "EntityRole", { enumerable: true, get: function () { return types_1.EntityRole; } });
|
|
74
|
+
Object.defineProperty(exports, "InvitationStatus", { enumerable: true, get: function () { return types_1.InvitationStatus; } });
|
|
75
|
+
Object.defineProperty(exports, "ROLE_PERMISSIONS", { enumerable: true, get: function () { return types_1.ROLE_PERMISSIONS; } });
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;AAEH,iBAAiB;AACjB,8CAqB2B;AApBzB,0BAA0B;AAC1B,+GAAA,mBAAmB,OAAA;AACnB,qHAAA,yBAAyB,OAAA;AACzB,oHAAA,wBAAwB,OAAA;AACxB,0HAAA,8BAA8B,OAAA;AAC9B,wHAAA,4BAA4B,OAAA;AAC5B,8HAAA,kCAAkC,OAAA;AAClC,iCAAiC;AACjC,oGAAA,QAAQ,OAAA;AACR,yGAAA,aAAa,OAAA;AACb,6GAAA,iBAAiB,OAAA;AAQjB,iBAAiB;AACjB,4GAAA,gBAAgB,OAAA;AAGlB,iBAAiB;AACjB,qCAKmB;AAJjB,uGAAA,YAAY,OAAA;AACZ,6GAAA,kBAAkB,OAAA;AAClB,2GAAA,gBAAgB,OAAA;AAChB,2GAAA,gBAAgB,OAAA;AAGlB,qBAAqB;AACrB,2CAOsB;AANpB,2HAAA,6BAA6B,OAAA;AAC7B,+HAAA,iCAAiC,OAAA;AACjC,yHAAA,2BAA2B,OAAA;AAC3B,iHAAA,mBAAmB,OAAA;AAKrB,kBAAkB;AAClB,iCAMiB;AALf,2GAAA,kBAAkB,OAAA;AAClB,gHAAA,uBAAuB,OAAA;AACvB,sGAAA,aAAa,OAAA;AACb,qGAAA,YAAY,OAAA;AACZ,kHAAA,yBAAyB,OAAA;AAG3B,oBAAoB;AACpB,2CAIsB;AAHpB,gHAAA,kBAAkB,OAAA;AAClB,qHAAA,uBAAuB,OAAA;AAIzB,oDAAoD;AACpD,iCAeiB;AAdf,mGAAA,UAAU,OAAA;AACV,mGAAA,UAAU,OAAA;AACV,yGAAA,gBAAgB,OAAA;AAChB,yGAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Hono Middleware for Entity Context
|
|
4
|
+
* @description Middleware to inject entity context into Hono request handlers
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createEntityContextMiddleware = createEntityContextMiddleware;
|
|
8
|
+
exports.createRequirePermissionMiddleware = createRequirePermissionMiddleware;
|
|
9
|
+
exports.createRequireRoleMiddleware = createRequireRoleMiddleware;
|
|
10
|
+
exports.createEntityHelpers = createEntityHelpers;
|
|
11
|
+
const EntityHelper_1 = require("../helpers/EntityHelper");
|
|
12
|
+
const EntityMemberHelper_1 = require("../helpers/EntityMemberHelper");
|
|
13
|
+
const InvitationHelper_1 = require("../helpers/InvitationHelper");
|
|
14
|
+
const PermissionHelper_1 = require("../helpers/PermissionHelper");
|
|
15
|
+
const types_1 = require("../types");
|
|
16
|
+
/**
|
|
17
|
+
* Create middleware that injects entity context into the request.
|
|
18
|
+
*
|
|
19
|
+
* Usage:
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const entityContext = createEntityContextMiddleware(config, {
|
|
22
|
+
* getUserId: (c) => c.get('userId'),
|
|
23
|
+
* entitySlugParam: 'entitySlug',
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* app.use('/api/v1/entities/:entitySlug/*', entityContext);
|
|
27
|
+
*
|
|
28
|
+
* app.get('/api/v1/entities/:entitySlug/projects', (c) => {
|
|
29
|
+
* const { entity, userRole, permissions } = c.get('entityContext');
|
|
30
|
+
* // ...
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
function createEntityContextMiddleware(config, options) {
|
|
35
|
+
const entityHelper = new EntityHelper_1.EntityHelper(config);
|
|
36
|
+
const permissionHelper = new PermissionHelper_1.PermissionHelper(config);
|
|
37
|
+
const slugParam = options.entitySlugParam ?? 'entitySlug';
|
|
38
|
+
return async (c, next) => {
|
|
39
|
+
const entitySlug = c.req.param(slugParam);
|
|
40
|
+
if (!entitySlug) {
|
|
41
|
+
return c.json({ error: 'Entity slug is required' }, 400);
|
|
42
|
+
}
|
|
43
|
+
const userId = options.getUserId(c);
|
|
44
|
+
if (!userId && !options.allowUnauthenticated) {
|
|
45
|
+
return c.json({ error: 'Authentication required' }, 401);
|
|
46
|
+
}
|
|
47
|
+
// Get entity by slug
|
|
48
|
+
const entity = await entityHelper.getEntityBySlug(entitySlug);
|
|
49
|
+
if (!entity) {
|
|
50
|
+
return c.json({ error: 'Entity not found' }, 404);
|
|
51
|
+
}
|
|
52
|
+
// If unauthenticated access is allowed and no user, continue without role
|
|
53
|
+
if (!userId && options.allowUnauthenticated) {
|
|
54
|
+
c.set('entity', entity);
|
|
55
|
+
await next();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Get user's role and permissions
|
|
59
|
+
const userRole = await permissionHelper.getUserRole(entity.id, userId);
|
|
60
|
+
if (!userRole) {
|
|
61
|
+
return c.json({ error: 'Access denied' }, 403);
|
|
62
|
+
}
|
|
63
|
+
const permissions = permissionHelper.getPermissionsForRole(userRole);
|
|
64
|
+
// Set entity context
|
|
65
|
+
const entityContext = {
|
|
66
|
+
entity,
|
|
67
|
+
userRole,
|
|
68
|
+
permissions,
|
|
69
|
+
};
|
|
70
|
+
c.set('entityContext', entityContext);
|
|
71
|
+
c.set('entity', entity);
|
|
72
|
+
c.set('userRole', userRole);
|
|
73
|
+
c.set('permissions', permissions);
|
|
74
|
+
await next();
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create middleware that requires a specific permission.
|
|
79
|
+
*
|
|
80
|
+
* Usage:
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const requireAdmin = createRequirePermissionMiddleware('canManageMembers');
|
|
83
|
+
*
|
|
84
|
+
* app.post('/api/v1/entities/:entitySlug/members', requireAdmin, (c) => {
|
|
85
|
+
* // Only admins can reach here
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
function createRequirePermissionMiddleware(permission) {
|
|
90
|
+
return async (c, next) => {
|
|
91
|
+
const permissions = c.get('permissions');
|
|
92
|
+
if (!permissions) {
|
|
93
|
+
return c.json({ error: 'Entity context not found' }, 500);
|
|
94
|
+
}
|
|
95
|
+
if (!permissions[permission]) {
|
|
96
|
+
return c.json({ error: 'Insufficient permissions' }, 403);
|
|
97
|
+
}
|
|
98
|
+
await next();
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Create middleware that requires a minimum role.
|
|
103
|
+
*
|
|
104
|
+
* Usage:
|
|
105
|
+
* ```typescript
|
|
106
|
+
* const requireManager = createRequireRoleMiddleware(EntityRole.MANAGER);
|
|
107
|
+
*
|
|
108
|
+
* app.post('/api/v1/entities/:entitySlug/projects', requireManager, (c) => {
|
|
109
|
+
* // Only managers and admins can reach here
|
|
110
|
+
* });
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
function createRequireRoleMiddleware(minimumRole) {
|
|
114
|
+
const roleHierarchy = {
|
|
115
|
+
[types_1.EntityRole.VIEWER]: 0,
|
|
116
|
+
[types_1.EntityRole.MANAGER]: 1,
|
|
117
|
+
[types_1.EntityRole.ADMIN]: 2,
|
|
118
|
+
};
|
|
119
|
+
return async (c, next) => {
|
|
120
|
+
const userRole = c.get('userRole');
|
|
121
|
+
if (!userRole) {
|
|
122
|
+
return c.json({ error: 'Entity context not found' }, 500);
|
|
123
|
+
}
|
|
124
|
+
if (roleHierarchy[userRole] < roleHierarchy[minimumRole]) {
|
|
125
|
+
return c.json({ error: 'Insufficient role' }, 403);
|
|
126
|
+
}
|
|
127
|
+
await next();
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create all entity helpers with shared config.
|
|
132
|
+
*
|
|
133
|
+
* Usage:
|
|
134
|
+
* ```typescript
|
|
135
|
+
* const helpers = createEntityHelpers(config);
|
|
136
|
+
* const entity = await helpers.entity.getEntity(entityId);
|
|
137
|
+
* const members = await helpers.members.getMembers(entityId);
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
function createEntityHelpers(config) {
|
|
141
|
+
return {
|
|
142
|
+
entity: new EntityHelper_1.EntityHelper(config),
|
|
143
|
+
members: new EntityMemberHelper_1.EntityMemberHelper(config),
|
|
144
|
+
invitations: new InvitationHelper_1.InvitationHelper(config),
|
|
145
|
+
permissions: new PermissionHelper_1.PermissionHelper(config),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=hono.js.map
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Hono Middleware for Entity Context
|
|
3
|
+
* @description Middleware to inject entity context into Hono request handlers
|
|
4
|
+
*/
|
|
5
|
+
import type { Context, MiddlewareHandler } from 'hono';
|
|
6
|
+
import { EntityHelper } from '../helpers/EntityHelper';
|
|
7
|
+
import { EntityMemberHelper } from '../helpers/EntityMemberHelper';
|
|
8
|
+
import { InvitationHelper } from '../helpers/InvitationHelper';
|
|
9
|
+
import { PermissionHelper } from '../helpers/PermissionHelper';
|
|
10
|
+
import { EntityRole, type Entity, type EntityPermissions, type InvitationHelperConfig } from '../types';
|
|
11
|
+
/**
|
|
12
|
+
* Entity context available in Hono handlers.
|
|
13
|
+
*/
|
|
14
|
+
export interface EntityContext {
|
|
15
|
+
entity: Entity;
|
|
16
|
+
userRole: EntityRole;
|
|
17
|
+
permissions: EntityPermissions;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Options for entity context middleware.
|
|
21
|
+
*/
|
|
22
|
+
export interface EntityContextMiddlewareOptions {
|
|
23
|
+
/** Function to get the user ID from the request context */
|
|
24
|
+
getUserId: (c: Context) => string | null;
|
|
25
|
+
/** Parameter name for entity slug in URL (default: 'entitySlug') */
|
|
26
|
+
entitySlugParam?: string;
|
|
27
|
+
/** Whether to allow unauthenticated access (default: false) */
|
|
28
|
+
allowUnauthenticated?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create middleware that injects entity context into the request.
|
|
32
|
+
*
|
|
33
|
+
* Usage:
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const entityContext = createEntityContextMiddleware(config, {
|
|
36
|
+
* getUserId: (c) => c.get('userId'),
|
|
37
|
+
* entitySlugParam: 'entitySlug',
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* app.use('/api/v1/entities/:entitySlug/*', entityContext);
|
|
41
|
+
*
|
|
42
|
+
* app.get('/api/v1/entities/:entitySlug/projects', (c) => {
|
|
43
|
+
* const { entity, userRole, permissions } = c.get('entityContext');
|
|
44
|
+
* // ...
|
|
45
|
+
* });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function createEntityContextMiddleware(config: InvitationHelperConfig, options: EntityContextMiddlewareOptions): MiddlewareHandler;
|
|
49
|
+
/**
|
|
50
|
+
* Create middleware that requires a specific permission.
|
|
51
|
+
*
|
|
52
|
+
* Usage:
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const requireAdmin = createRequirePermissionMiddleware('canManageMembers');
|
|
55
|
+
*
|
|
56
|
+
* app.post('/api/v1/entities/:entitySlug/members', requireAdmin, (c) => {
|
|
57
|
+
* // Only admins can reach here
|
|
58
|
+
* });
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function createRequirePermissionMiddleware(permission: keyof EntityPermissions): MiddlewareHandler;
|
|
62
|
+
/**
|
|
63
|
+
* Create middleware that requires a minimum role.
|
|
64
|
+
*
|
|
65
|
+
* Usage:
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const requireManager = createRequireRoleMiddleware(EntityRole.MANAGER);
|
|
68
|
+
*
|
|
69
|
+
* app.post('/api/v1/entities/:entitySlug/projects', requireManager, (c) => {
|
|
70
|
+
* // Only managers and admins can reach here
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function createRequireRoleMiddleware(minimumRole: EntityRole): MiddlewareHandler;
|
|
75
|
+
/**
|
|
76
|
+
* Create all entity helpers with shared config.
|
|
77
|
+
*
|
|
78
|
+
* Usage:
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const helpers = createEntityHelpers(config);
|
|
81
|
+
* const entity = await helpers.entity.getEntity(entityId);
|
|
82
|
+
* const members = await helpers.members.getMembers(entityId);
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function createEntityHelpers(config: InvitationHelperConfig): {
|
|
86
|
+
entity: EntityHelper;
|
|
87
|
+
members: EntityMemberHelper;
|
|
88
|
+
invitations: InvitationHelper;
|
|
89
|
+
permissions: PermissionHelper;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Type augmentation for Hono context.
|
|
93
|
+
*/
|
|
94
|
+
declare module 'hono' {
|
|
95
|
+
interface ContextVariableMap {
|
|
96
|
+
entityContext: EntityContext;
|
|
97
|
+
entity: Entity;
|
|
98
|
+
userRole: EntityRole;
|
|
99
|
+
permissions: EntityPermissions;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=hono.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../src/middleware/hono.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EACL,UAAU,EACV,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,CAAC;IACrB,WAAW,EAAE,iBAAiB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,2DAA2D;IAC3D,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;IACzC,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,8BAA8B,GACtC,iBAAiB,CAuDnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,MAAM,iBAAiB,GAClC,iBAAiB,CAcnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,UAAU,GACtB,iBAAiB,CAoBnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,sBAAsB;;;;;EAOjE;AAED;;GAEG;AACH,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAU,kBAAkB;QAC1B,aAAa,EAAE,aAAa,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,UAAU,CAAC;QACrB,WAAW,EAAE,iBAAiB,CAAC;KAChC;CACF"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Hono Middleware for Entity Context
|
|
4
|
+
* @description Middleware to inject entity context into Hono request handlers
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createEntityContextMiddleware = createEntityContextMiddleware;
|
|
8
|
+
exports.createRequirePermissionMiddleware = createRequirePermissionMiddleware;
|
|
9
|
+
exports.createRequireRoleMiddleware = createRequireRoleMiddleware;
|
|
10
|
+
exports.createEntityHelpers = createEntityHelpers;
|
|
11
|
+
const EntityHelper_1 = require("../helpers/EntityHelper");
|
|
12
|
+
const EntityMemberHelper_1 = require("../helpers/EntityMemberHelper");
|
|
13
|
+
const InvitationHelper_1 = require("../helpers/InvitationHelper");
|
|
14
|
+
const PermissionHelper_1 = require("../helpers/PermissionHelper");
|
|
15
|
+
const types_1 = require("../types");
|
|
16
|
+
/**
|
|
17
|
+
* Create middleware that injects entity context into the request.
|
|
18
|
+
*
|
|
19
|
+
* Usage:
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const entityContext = createEntityContextMiddleware(config, {
|
|
22
|
+
* getUserId: (c) => c.get('userId'),
|
|
23
|
+
* entitySlugParam: 'entitySlug',
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* app.use('/api/v1/entities/:entitySlug/*', entityContext);
|
|
27
|
+
*
|
|
28
|
+
* app.get('/api/v1/entities/:entitySlug/projects', (c) => {
|
|
29
|
+
* const { entity, userRole, permissions } = c.get('entityContext');
|
|
30
|
+
* // ...
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
function createEntityContextMiddleware(config, options) {
|
|
35
|
+
const entityHelper = new EntityHelper_1.EntityHelper(config);
|
|
36
|
+
const permissionHelper = new PermissionHelper_1.PermissionHelper(config);
|
|
37
|
+
const slugParam = options.entitySlugParam ?? 'entitySlug';
|
|
38
|
+
return async (c, next) => {
|
|
39
|
+
const entitySlug = c.req.param(slugParam);
|
|
40
|
+
if (!entitySlug) {
|
|
41
|
+
return c.json({ error: 'Entity slug is required' }, 400);
|
|
42
|
+
}
|
|
43
|
+
const userId = options.getUserId(c);
|
|
44
|
+
if (!userId && !options.allowUnauthenticated) {
|
|
45
|
+
return c.json({ error: 'Authentication required' }, 401);
|
|
46
|
+
}
|
|
47
|
+
// Get entity by slug
|
|
48
|
+
const entity = await entityHelper.getEntityBySlug(entitySlug);
|
|
49
|
+
if (!entity) {
|
|
50
|
+
return c.json({ error: 'Entity not found' }, 404);
|
|
51
|
+
}
|
|
52
|
+
// If unauthenticated access is allowed and no user, continue without role
|
|
53
|
+
if (!userId && options.allowUnauthenticated) {
|
|
54
|
+
c.set('entity', entity);
|
|
55
|
+
await next();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Get user's role and permissions
|
|
59
|
+
const userRole = await permissionHelper.getUserRole(entity.id, userId);
|
|
60
|
+
if (!userRole) {
|
|
61
|
+
return c.json({ error: 'Access denied' }, 403);
|
|
62
|
+
}
|
|
63
|
+
const permissions = permissionHelper.getPermissionsForRole(userRole);
|
|
64
|
+
// Set entity context
|
|
65
|
+
const entityContext = {
|
|
66
|
+
entity,
|
|
67
|
+
userRole,
|
|
68
|
+
permissions,
|
|
69
|
+
};
|
|
70
|
+
c.set('entityContext', entityContext);
|
|
71
|
+
c.set('entity', entity);
|
|
72
|
+
c.set('userRole', userRole);
|
|
73
|
+
c.set('permissions', permissions);
|
|
74
|
+
await next();
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create middleware that requires a specific permission.
|
|
79
|
+
*
|
|
80
|
+
* Usage:
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const requireAdmin = createRequirePermissionMiddleware('canManageMembers');
|
|
83
|
+
*
|
|
84
|
+
* app.post('/api/v1/entities/:entitySlug/members', requireAdmin, (c) => {
|
|
85
|
+
* // Only admins can reach here
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
function createRequirePermissionMiddleware(permission) {
|
|
90
|
+
return async (c, next) => {
|
|
91
|
+
const permissions = c.get('permissions');
|
|
92
|
+
if (!permissions) {
|
|
93
|
+
return c.json({ error: 'Entity context not found' }, 500);
|
|
94
|
+
}
|
|
95
|
+
if (!permissions[permission]) {
|
|
96
|
+
return c.json({ error: 'Insufficient permissions' }, 403);
|
|
97
|
+
}
|
|
98
|
+
await next();
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Create middleware that requires a minimum role.
|
|
103
|
+
*
|
|
104
|
+
* Usage:
|
|
105
|
+
* ```typescript
|
|
106
|
+
* const requireManager = createRequireRoleMiddleware(EntityRole.MANAGER);
|
|
107
|
+
*
|
|
108
|
+
* app.post('/api/v1/entities/:entitySlug/projects', requireManager, (c) => {
|
|
109
|
+
* // Only managers and admins can reach here
|
|
110
|
+
* });
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
function createRequireRoleMiddleware(minimumRole) {
|
|
114
|
+
const roleHierarchy = {
|
|
115
|
+
[types_1.EntityRole.VIEWER]: 0,
|
|
116
|
+
[types_1.EntityRole.MANAGER]: 1,
|
|
117
|
+
[types_1.EntityRole.ADMIN]: 2,
|
|
118
|
+
};
|
|
119
|
+
return async (c, next) => {
|
|
120
|
+
const userRole = c.get('userRole');
|
|
121
|
+
if (!userRole) {
|
|
122
|
+
return c.json({ error: 'Entity context not found' }, 500);
|
|
123
|
+
}
|
|
124
|
+
if (roleHierarchy[userRole] < roleHierarchy[minimumRole]) {
|
|
125
|
+
return c.json({ error: 'Insufficient role' }, 403);
|
|
126
|
+
}
|
|
127
|
+
await next();
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create all entity helpers with shared config.
|
|
132
|
+
*
|
|
133
|
+
* Usage:
|
|
134
|
+
* ```typescript
|
|
135
|
+
* const helpers = createEntityHelpers(config);
|
|
136
|
+
* const entity = await helpers.entity.getEntity(entityId);
|
|
137
|
+
* const members = await helpers.members.getMembers(entityId);
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
function createEntityHelpers(config) {
|
|
141
|
+
return {
|
|
142
|
+
entity: new EntityHelper_1.EntityHelper(config),
|
|
143
|
+
members: new EntityMemberHelper_1.EntityMemberHelper(config),
|
|
144
|
+
invitations: new InvitationHelper_1.InvitationHelper(config),
|
|
145
|
+
permissions: new PermissionHelper_1.PermissionHelper(config),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=hono.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hono.js","sourceRoot":"","sources":["../../src/middleware/hono.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Middleware Exports
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createEntityHelpers = exports.createRequireRoleMiddleware = exports.createRequirePermissionMiddleware = exports.createEntityContextMiddleware = void 0;
|
|
7
|
+
var hono_1 = require("./hono");
|
|
8
|
+
Object.defineProperty(exports, "createEntityContextMiddleware", { enumerable: true, get: function () { return hono_1.createEntityContextMiddleware; } });
|
|
9
|
+
Object.defineProperty(exports, "createRequirePermissionMiddleware", { enumerable: true, get: function () { return hono_1.createRequirePermissionMiddleware; } });
|
|
10
|
+
Object.defineProperty(exports, "createRequireRoleMiddleware", { enumerable: true, get: function () { return hono_1.createRequireRoleMiddleware; } });
|
|
11
|
+
Object.defineProperty(exports, "createEntityHelpers", { enumerable: true, get: function () { return hono_1.createEntityHelpers; } });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Middleware Exports
|
|
3
|
+
*/
|
|
4
|
+
export { createEntityContextMiddleware, createRequirePermissionMiddleware, createRequireRoleMiddleware, createEntityHelpers, type EntityContext, type EntityContextMiddlewareOptions, } from './hono';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,EACjC,2BAA2B,EAC3B,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,8BAA8B,GACpC,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Middleware Exports
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createEntityHelpers = exports.createRequireRoleMiddleware = exports.createRequirePermissionMiddleware = exports.createEntityContextMiddleware = void 0;
|
|
7
|
+
var hono_1 = require("./hono");
|
|
8
|
+
Object.defineProperty(exports, "createEntityContextMiddleware", { enumerable: true, get: function () { return hono_1.createEntityContextMiddleware; } });
|
|
9
|
+
Object.defineProperty(exports, "createRequirePermissionMiddleware", { enumerable: true, get: function () { return hono_1.createRequirePermissionMiddleware; } });
|
|
10
|
+
Object.defineProperty(exports, "createRequireRoleMiddleware", { enumerable: true, get: function () { return hono_1.createRequireRoleMiddleware; } });
|
|
11
|
+
Object.defineProperty(exports, "createEntityHelpers", { enumerable: true, get: function () { return hono_1.createEntityHelpers; } });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+BAOgB;AANd,qHAAA,6BAA6B,OAAA;AAC7B,yHAAA,iCAAiC,OAAA;AACjC,mHAAA,2BAA2B,OAAA;AAC3B,2GAAA,mBAAmB,OAAA"}
|