@sudobility/entity_service 1.0.7 → 1.0.8

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/helpers/EntityHelper.js +25 -29
  2. package/dist/helpers/EntityHelper.js.map +1 -1
  3. package/dist/helpers/EntityMemberHelper.js +26 -30
  4. package/dist/helpers/EntityMemberHelper.js.map +1 -1
  5. package/dist/helpers/InvitationHelper.js +28 -32
  6. package/dist/helpers/InvitationHelper.js.map +1 -1
  7. package/dist/helpers/PermissionHelper.js +13 -17
  8. package/dist/helpers/PermissionHelper.js.map +1 -1
  9. package/dist/helpers/index.js +4 -11
  10. package/dist/helpers/index.js.map +1 -1
  11. package/dist/index.js +9 -38
  12. package/dist/index.js.map +1 -1
  13. package/dist/middleware/hono.js +18 -24
  14. package/dist/middleware/hono.js.map +1 -1
  15. package/dist/middleware/index.js +1 -8
  16. package/dist/middleware/index.js.map +1 -1
  17. package/dist/migrations/001_add_entities.js +2 -6
  18. package/dist/migrations/001_add_entities.js.map +1 -1
  19. package/dist/migrations/index.js +1 -6
  20. package/dist/migrations/index.js.map +1 -1
  21. package/dist/schema/entities.js +125 -135
  22. package/dist/schema/entities.js.map +1 -1
  23. package/dist/types/index.js +1 -8
  24. package/dist/types/index.js.map +1 -1
  25. package/dist/utils/index.js +1 -17
  26. package/dist/utils/index.js.map +1 -1
  27. package/dist/utils/slug-generator.js +6 -14
  28. package/dist/utils/slug-generator.js.map +1 -1
  29. package/package.json +9 -16
  30. package/dist/helpers/EntityHelper.cjs +0 -253
  31. package/dist/helpers/EntityMemberHelper.cjs +0 -254
  32. package/dist/helpers/InvitationHelper.cjs +0 -256
  33. package/dist/helpers/PermissionHelper.cjs +0 -193
  34. package/dist/helpers/index.cjs +0 -15
  35. package/dist/index.cjs +0 -76
  36. package/dist/middleware/hono.cjs +0 -148
  37. package/dist/middleware/index.cjs +0 -12
  38. package/dist/migrations/001_add_entities.cjs +0 -330
  39. package/dist/migrations/index.cjs +0 -10
  40. package/dist/schema/entities.cjs +0 -311
  41. package/dist/types/index.cjs +0 -14
  42. package/dist/utils/index.cjs +0 -21
  43. package/dist/utils/slug-generator.cjs +0 -92
@@ -1,256 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Entity Invitation Helper Class
4
- * @description Operations for managing entity invitations
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.InvitationHelper = void 0;
8
- const drizzle_orm_1 = require("drizzle-orm");
9
- const types_1 = require("../types");
10
- const utils_1 = require("../utils");
11
- /**
12
- * Helper class for entity invitation operations.
13
- */
14
- class InvitationHelper {
15
- constructor(config) {
16
- this.config = config;
17
- }
18
- /**
19
- * Create an invitation to join an entity.
20
- */
21
- async createInvitation(entityId, invitedByUserId, request) {
22
- // Check if user is already an active member
23
- // Note: We only check active members so previously removed users can be re-invited
24
- const existingMember = await this.config.db
25
- .select()
26
- .from(this.config.membersTable)
27
- .innerJoin(this.config.usersTable, (0, drizzle_orm_1.eq)(this.config.membersTable.user_id, this.config.usersTable.firebase_uid))
28
- .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(this.config.membersTable.entity_id, entityId), (0, drizzle_orm_1.eq)(this.config.usersTable.email, request.email), (0, drizzle_orm_1.eq)(this.config.membersTable.is_active, true)))
29
- .limit(1);
30
- if (existingMember.length > 0) {
31
- throw new Error('User is already an active member of this entity');
32
- }
33
- // Check for existing pending invitation
34
- const existingInvite = await this.config.db
35
- .select()
36
- .from(this.config.invitationsTable)
37
- .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(this.config.invitationsTable.entity_id, entityId), (0, drizzle_orm_1.eq)(this.config.invitationsTable.email, request.email), (0, drizzle_orm_1.eq)(this.config.invitationsTable.status, types_1.InvitationStatus.PENDING)))
38
- .limit(1);
39
- if (existingInvite.length > 0) {
40
- throw new Error('An invitation is already pending for this email');
41
- }
42
- const token = (0, utils_1.generateInvitationToken)();
43
- const expiresAt = (0, utils_1.calculateInvitationExpiry)();
44
- const [invitation] = await this.config.db
45
- .insert(this.config.invitationsTable)
46
- .values({
47
- entity_id: entityId,
48
- email: request.email,
49
- role: request.role,
50
- status: types_1.InvitationStatus.PENDING,
51
- invited_by_user_id: invitedByUserId,
52
- token,
53
- expires_at: new Date(expiresAt),
54
- })
55
- .returning();
56
- return this.mapRecordToInvitation(invitation);
57
- }
58
- /**
59
- * Get an invitation by token.
60
- */
61
- async getInvitationByToken(token) {
62
- const results = await this.config.db
63
- .select()
64
- .from(this.config.invitationsTable)
65
- .where((0, drizzle_orm_1.eq)(this.config.invitationsTable.token, token))
66
- .limit(1);
67
- if (results.length === 0) {
68
- return null;
69
- }
70
- return this.mapRecordToInvitation(results[0]);
71
- }
72
- /**
73
- * Get an invitation by ID.
74
- */
75
- async getInvitation(invitationId) {
76
- const results = await this.config.db
77
- .select()
78
- .from(this.config.invitationsTable)
79
- .where((0, drizzle_orm_1.eq)(this.config.invitationsTable.id, invitationId))
80
- .limit(1);
81
- if (results.length === 0) {
82
- return null;
83
- }
84
- return this.mapRecordToInvitation(results[0]);
85
- }
86
- /**
87
- * Get all invitations for an entity.
88
- */
89
- async getEntityInvitations(entityId, options) {
90
- // Build conditions
91
- const conditions = [(0, drizzle_orm_1.eq)(this.config.invitationsTable.entity_id, entityId)];
92
- if (options?.status) {
93
- conditions.push((0, drizzle_orm_1.eq)(this.config.invitationsTable.status, options.status));
94
- }
95
- let query = this.config.db
96
- .select()
97
- .from(this.config.invitationsTable)
98
- .where((0, drizzle_orm_1.and)(...conditions))
99
- .$dynamic();
100
- if (options?.limit) {
101
- query = query.limit(options.limit);
102
- }
103
- if (options?.offset) {
104
- query = query.offset(options.offset);
105
- }
106
- const results = await query;
107
- return results.map((r) => this.mapRecordToInvitation(r));
108
- }
109
- /**
110
- * Get all pending invitations for a user email.
111
- */
112
- async getUserPendingInvitations(email) {
113
- const results = await this.config.db
114
- .select({
115
- invitation: this.config.invitationsTable,
116
- entity: this.config.entitiesTable,
117
- })
118
- .from(this.config.invitationsTable)
119
- .innerJoin(this.config.entitiesTable, (0, drizzle_orm_1.eq)(this.config.invitationsTable.entity_id, this.config.entitiesTable.id))
120
- .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(this.config.invitationsTable.email, email), (0, drizzle_orm_1.eq)(this.config.invitationsTable.status, types_1.InvitationStatus.PENDING)));
121
- return results.map(({ invitation, entity }) => ({
122
- ...this.mapRecordToInvitation(invitation),
123
- entity: {
124
- id: entity.id,
125
- entitySlug: entity.entity_slug,
126
- entityType: entity.entity_type,
127
- displayName: entity.display_name,
128
- description: entity.description,
129
- avatarUrl: entity.avatar_url,
130
- createdAt: entity.created_at?.toISOString() ?? new Date().toISOString(),
131
- updatedAt: entity.updated_at?.toISOString() ?? new Date().toISOString(),
132
- },
133
- }));
134
- }
135
- /**
136
- * Accept an invitation.
137
- * @param token - The invitation token
138
- * @param firebaseUid - The Firebase UID of the user accepting
139
- */
140
- async acceptInvitation(token, firebaseUid) {
141
- const invitation = await this.getInvitationByToken(token);
142
- if (!invitation) {
143
- throw new Error('Invitation not found');
144
- }
145
- if (invitation.status !== types_1.InvitationStatus.PENDING) {
146
- throw new Error('Invitation is no longer pending');
147
- }
148
- if (new Date(invitation.expiresAt) < new Date()) {
149
- // Mark as expired
150
- await this.config.db
151
- .update(this.config.invitationsTable)
152
- .set({
153
- status: types_1.InvitationStatus.EXPIRED,
154
- updated_at: new Date(),
155
- })
156
- .where((0, drizzle_orm_1.eq)(this.config.invitationsTable.id, invitation.id));
157
- throw new Error('Invitation has expired');
158
- }
159
- // Add user as member with active status
160
- await this.config.db.insert(this.config.membersTable).values({
161
- entity_id: invitation.entityId,
162
- user_id: firebaseUid,
163
- role: invitation.role,
164
- is_active: true,
165
- });
166
- // Mark invitation as accepted
167
- await this.config.db
168
- .update(this.config.invitationsTable)
169
- .set({
170
- status: types_1.InvitationStatus.ACCEPTED,
171
- accepted_at: new Date(),
172
- updated_at: new Date(),
173
- })
174
- .where((0, drizzle_orm_1.eq)(this.config.invitationsTable.id, invitation.id));
175
- }
176
- /**
177
- * Decline an invitation.
178
- */
179
- async declineInvitation(token) {
180
- const invitation = await this.getInvitationByToken(token);
181
- if (!invitation) {
182
- throw new Error('Invitation not found');
183
- }
184
- if (invitation.status !== types_1.InvitationStatus.PENDING) {
185
- throw new Error('Invitation is no longer pending');
186
- }
187
- await this.config.db
188
- .update(this.config.invitationsTable)
189
- .set({
190
- status: types_1.InvitationStatus.DECLINED,
191
- updated_at: new Date(),
192
- })
193
- .where((0, drizzle_orm_1.eq)(this.config.invitationsTable.id, invitation.id));
194
- }
195
- /**
196
- * Cancel an invitation (by entity admin).
197
- */
198
- async cancelInvitation(invitationId) {
199
- await this.config.db
200
- .delete(this.config.invitationsTable)
201
- .where((0, drizzle_orm_1.eq)(this.config.invitationsTable.id, invitationId));
202
- }
203
- /**
204
- * Process pending invitations for a new user.
205
- * Called when a user signs up to auto-accept any pending invitations.
206
- * @param firebaseUid - The Firebase UID of the new user
207
- * @param email - The user's email to match invitations
208
- */
209
- async processNewUserInvitations(firebaseUid, email) {
210
- const pendingInvitations = await this.getUserPendingInvitations(email);
211
- for (const invitation of pendingInvitations) {
212
- try {
213
- await this.acceptInvitation(invitation.token, firebaseUid);
214
- }
215
- catch (error) {
216
- // Log but don't fail - user account creation is more important
217
- console.error(`Failed to auto-accept invitation ${invitation.id}:`, error);
218
- }
219
- }
220
- }
221
- /**
222
- * Expire old invitations.
223
- * Should be called periodically (e.g., by a cron job).
224
- */
225
- async expireOldInvitations() {
226
- const result = await this.config.db
227
- .update(this.config.invitationsTable)
228
- .set({
229
- status: types_1.InvitationStatus.EXPIRED,
230
- updated_at: new Date(),
231
- })
232
- .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(this.config.invitationsTable.status, types_1.InvitationStatus.PENDING), (0, drizzle_orm_1.lt)(this.config.invitationsTable.expires_at, new Date())))
233
- .returning();
234
- return result.length;
235
- }
236
- /**
237
- * Map database record to EntityInvitation type.
238
- */
239
- mapRecordToInvitation(record) {
240
- return {
241
- id: record.id,
242
- entityId: record.entity_id,
243
- email: record.email,
244
- role: record.role,
245
- status: record.status,
246
- invitedByUserId: record.invited_by_user_id,
247
- token: record.token,
248
- expiresAt: record.expires_at?.toISOString() ?? new Date().toISOString(),
249
- acceptedAt: record.accepted_at?.toISOString() ?? null,
250
- createdAt: record.created_at?.toISOString() ?? new Date().toISOString(),
251
- updatedAt: record.updated_at?.toISOString() ?? new Date().toISOString(),
252
- };
253
- }
254
- }
255
- exports.InvitationHelper = InvitationHelper;
256
- //# sourceMappingURL=InvitationHelper.js.map
@@ -1,193 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Entity Permission Helper Class
4
- * @description Permission checking for entity operations
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.PermissionHelper = void 0;
8
- const drizzle_orm_1 = require("drizzle-orm");
9
- const types_1 = require("../types");
10
- /**
11
- * Helper class for entity permission checks.
12
- */
13
- class PermissionHelper {
14
- constructor(config) {
15
- this.config = config;
16
- }
17
- /**
18
- * Get a user's role in an entity.
19
- * Only returns role for active members.
20
- */
21
- async getUserRole(entityId, userId) {
22
- const results = await this.config.db
23
- .select({ role: this.config.membersTable.role })
24
- .from(this.config.membersTable)
25
- .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(this.config.membersTable.entity_id, entityId), (0, drizzle_orm_1.eq)(this.config.membersTable.user_id, userId), (0, drizzle_orm_1.eq)(this.config.membersTable.is_active, true)))
26
- .limit(1);
27
- if (results.length === 0) {
28
- return null;
29
- }
30
- return results[0].role;
31
- }
32
- /**
33
- * Get permissions for a role.
34
- */
35
- getPermissionsForRole(role) {
36
- return types_1.ROLE_PERMISSIONS[role];
37
- }
38
- /**
39
- * Get a user's permissions for an entity.
40
- */
41
- async getUserPermissions(entityId, userId) {
42
- const role = await this.getUserRole(entityId, userId);
43
- if (!role) {
44
- return null;
45
- }
46
- return this.getPermissionsForRole(role);
47
- }
48
- /**
49
- * Check if user is a member of an entity.
50
- */
51
- async isMember(entityId, userId) {
52
- const role = await this.getUserRole(entityId, userId);
53
- return role !== null;
54
- }
55
- /**
56
- * Check if user is an admin of an entity.
57
- * Owner also has admin privileges.
58
- */
59
- async isAdmin(entityId, userId) {
60
- const role = await this.getUserRole(entityId, userId);
61
- return role === types_1.EntityRole.ADMIN || role === types_1.EntityRole.OWNER;
62
- }
63
- /**
64
- * Check if user is the owner of an entity.
65
- * Determined by role = 'owner' in entity_members.
66
- */
67
- async isOwner(entityId, userId) {
68
- const role = await this.getUserRole(entityId, userId);
69
- return role === types_1.EntityRole.OWNER;
70
- }
71
- /**
72
- * Check if user can view an entity.
73
- */
74
- async canViewEntity(entityId, userId) {
75
- const permissions = await this.getUserPermissions(entityId, userId);
76
- return permissions?.canViewEntity ?? false;
77
- }
78
- /**
79
- * Check if user can edit an entity.
80
- */
81
- async canEditEntity(entityId, userId) {
82
- const permissions = await this.getUserPermissions(entityId, userId);
83
- return permissions?.canEditEntity ?? false;
84
- }
85
- /**
86
- * Check if user can delete an entity.
87
- */
88
- async canDeleteEntity(entityId, userId) {
89
- // First check if it's a personal entity (cannot be deleted)
90
- const entity = await this.config.db
91
- .select({ entityType: this.config.entitiesTable.entity_type })
92
- .from(this.config.entitiesTable)
93
- .where((0, drizzle_orm_1.eq)(this.config.entitiesTable.id, entityId))
94
- .limit(1);
95
- if (entity.length === 0) {
96
- return false;
97
- }
98
- if (entity[0].entityType === types_1.EntityType.PERSONAL) {
99
- return false;
100
- }
101
- const permissions = await this.getUserPermissions(entityId, userId);
102
- return permissions?.canDeleteEntity ?? false;
103
- }
104
- /**
105
- * Check if user can manage members.
106
- */
107
- async canManageMembers(entityId, userId) {
108
- const permissions = await this.getUserPermissions(entityId, userId);
109
- return permissions?.canManageMembers ?? false;
110
- }
111
- /**
112
- * Check if user can invite members.
113
- */
114
- async canInviteMembers(entityId, userId) {
115
- // Check if it's a personal entity (no invitations allowed)
116
- const entity = await this.config.db
117
- .select({ entityType: this.config.entitiesTable.entity_type })
118
- .from(this.config.entitiesTable)
119
- .where((0, drizzle_orm_1.eq)(this.config.entitiesTable.id, entityId))
120
- .limit(1);
121
- if (entity.length === 0) {
122
- return false;
123
- }
124
- if (entity[0].entityType === types_1.EntityType.PERSONAL) {
125
- return false;
126
- }
127
- const permissions = await this.getUserPermissions(entityId, userId);
128
- return permissions?.canInviteMembers ?? false;
129
- }
130
- /**
131
- * Check if user can create projects.
132
- */
133
- async canCreateProjects(entityId, userId) {
134
- const permissions = await this.getUserPermissions(entityId, userId);
135
- return permissions?.canCreateProjects ?? false;
136
- }
137
- /**
138
- * Check if user can manage projects.
139
- */
140
- async canManageProjects(entityId, userId) {
141
- const permissions = await this.getUserPermissions(entityId, userId);
142
- return permissions?.canManageProjects ?? false;
143
- }
144
- /**
145
- * Check if user can view projects.
146
- */
147
- async canViewProjects(entityId, userId) {
148
- const permissions = await this.getUserPermissions(entityId, userId);
149
- return permissions?.canViewProjects ?? false;
150
- }
151
- /**
152
- * Check if user can manage API keys.
153
- */
154
- async canManageApiKeys(entityId, userId) {
155
- const permissions = await this.getUserPermissions(entityId, userId);
156
- return permissions?.canManageApiKeys ?? false;
157
- }
158
- /**
159
- * Check if user can view API keys.
160
- */
161
- async canViewApiKeys(entityId, userId) {
162
- const permissions = await this.getUserPermissions(entityId, userId);
163
- return permissions?.canViewApiKeys ?? false;
164
- }
165
- /**
166
- * Assert that a user has a specific permission.
167
- * Throws an error if the user lacks the permission.
168
- */
169
- async assertPermission(entityId, userId, permission, errorMessage) {
170
- const permissions = await this.getUserPermissions(entityId, userId);
171
- if (!permissions) {
172
- throw new Error(errorMessage ?? 'User is not a member of this entity');
173
- }
174
- if (!permissions[permission]) {
175
- throw new Error(errorMessage ?? `User lacks permission: ${String(permission)}`);
176
- }
177
- }
178
- /**
179
- * Get the minimum role required for a permission.
180
- */
181
- getMinimumRoleForPermission(permission) {
182
- // Check from lowest to highest privilege
183
- const roles = [types_1.EntityRole.MEMBER, types_1.EntityRole.ADMIN, types_1.EntityRole.OWNER];
184
- for (const role of roles) {
185
- if (types_1.ROLE_PERMISSIONS[role][permission]) {
186
- return role;
187
- }
188
- }
189
- return null;
190
- }
191
- }
192
- exports.PermissionHelper = PermissionHelper;
193
- //# sourceMappingURL=PermissionHelper.js.map
@@ -1,15 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Helper Exports
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PermissionHelper = exports.InvitationHelper = exports.EntityMemberHelper = exports.EntityHelper = void 0;
7
- var EntityHelper_1 = require("./EntityHelper");
8
- Object.defineProperty(exports, "EntityHelper", { enumerable: true, get: function () { return EntityHelper_1.EntityHelper; } });
9
- var EntityMemberHelper_1 = require("./EntityMemberHelper");
10
- Object.defineProperty(exports, "EntityMemberHelper", { enumerable: true, get: function () { return EntityMemberHelper_1.EntityMemberHelper; } });
11
- var InvitationHelper_1 = require("./InvitationHelper");
12
- Object.defineProperty(exports, "InvitationHelper", { enumerable: true, get: function () { return InvitationHelper_1.InvitationHelper; } });
13
- var PermissionHelper_1 = require("./PermissionHelper");
14
- Object.defineProperty(exports, "PermissionHelper", { enumerable: true, get: function () { return PermissionHelper_1.PermissionHelper; } });
15
- //# sourceMappingURL=index.js.map
package/dist/index.cjs DELETED
@@ -1,76 +0,0 @@
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