@simple-auth-kit/cli 1.4.3 → 1.5.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.
Files changed (134) hide show
  1. package/lib/copy.ts +1 -1
  2. package/package.json +1 -1
  3. package/registry/combos/express-drizzle/shared/src/{auth-core-error.middleware.ts → middleware/auth-core-error.middleware.ts} +17 -4
  4. package/registry/combos/express-drizzle/shared/src/{auth.middleware.ts → middleware/auth.middleware.ts} +23 -7
  5. package/registry/combos/{express-prisma/shared/src → express-drizzle/shared/src/middleware}/response-envelope.middleware.ts +15 -3
  6. package/registry/combos/express-drizzle/shared/src/{oauth.repository.ts → repositories/oauth.repository.ts} +32 -9
  7. package/registry/combos/express-drizzle/shared/src/repositories/password-reset.repository.ts +59 -0
  8. package/registry/combos/express-drizzle/shared/src/{session.repository.ts → repositories/session.repository.ts} +52 -14
  9. package/registry/combos/express-drizzle/shared/src/{two-factor.repository.ts → repositories/two-factor.repository.ts} +20 -6
  10. package/registry/combos/express-drizzle/shared/src/request-context.ts +1 -1
  11. package/registry/combos/express-drizzle/shared/src/routers/auth.router.ts +395 -0
  12. package/registry/combos/express-drizzle/variants/base/src/create-auth-app.ts +52 -19
  13. package/registry/combos/express-drizzle/variants/base/src/{authz.middleware.ts → middleware/authz.middleware.ts} +15 -7
  14. package/registry/combos/express-drizzle/variants/base/src/{audit-log.repository.ts → repositories/audit-log.repository.ts} +28 -10
  15. package/registry/combos/express-drizzle/variants/base/src/{rbac.repository.ts → repositories/rbac.repository.ts} +239 -48
  16. package/registry/combos/express-drizzle/variants/base/src/routers/admin.router.ts +497 -0
  17. package/registry/combos/express-drizzle/variants/base/src/{auth.service.ts → services/auth.service.ts} +480 -109
  18. package/registry/combos/express-drizzle/variants/workspaces/src/create-auth-app.ts +69 -23
  19. package/registry/combos/express-drizzle/variants/workspaces/src/{authz.middleware.ts → middleware/authz.middleware.ts} +32 -12
  20. package/registry/combos/express-drizzle/variants/workspaces/src/openapi-workspace.ts +147 -28
  21. package/registry/combos/express-drizzle/variants/workspaces/src/{audit-log.repository.ts → repositories/audit-log.repository.ts} +30 -11
  22. package/registry/combos/express-drizzle/variants/workspaces/src/{rbac.repository.ts → repositories/rbac.repository.ts} +319 -70
  23. package/registry/combos/express-drizzle/variants/workspaces/src/{workspace.repository.ts → repositories/workspace.repository.ts} +127 -30
  24. package/registry/combos/express-drizzle/variants/workspaces/src/routers/admin.router.ts +534 -0
  25. package/registry/combos/express-drizzle/variants/workspaces/src/routers/workspace.router.ts +194 -0
  26. package/registry/combos/express-drizzle/variants/workspaces/src/{auth.service.ts → services/auth.service.ts} +544 -122
  27. package/registry/combos/express-prisma/shared/src/{auth-core-error.middleware.ts → middleware/auth-core-error.middleware.ts} +17 -4
  28. package/registry/combos/express-prisma/shared/src/{auth.middleware.ts → middleware/auth.middleware.ts} +19 -6
  29. package/registry/combos/{express-drizzle/shared/src → express-prisma/shared/src/middleware}/response-envelope.middleware.ts +15 -3
  30. package/registry/combos/express-prisma/shared/src/{oauth.repository.ts → repositories/oauth.repository.ts} +27 -9
  31. package/registry/combos/express-prisma/shared/src/repositories/password-reset.repository.ts +55 -0
  32. package/registry/combos/express-prisma/shared/src/{session.repository.ts → repositories/session.repository.ts} +30 -9
  33. package/registry/combos/express-prisma/shared/src/{two-factor.repository.ts → repositories/two-factor.repository.ts} +11 -4
  34. package/registry/combos/express-prisma/shared/src/request-context.ts +1 -1
  35. package/registry/combos/express-prisma/shared/src/routers/auth.router.ts +398 -0
  36. package/registry/combos/express-prisma/variants/base/src/create-auth-app.ts +56 -21
  37. package/registry/combos/express-prisma/variants/base/src/{authz.middleware.ts → middleware/authz.middleware.ts} +15 -7
  38. package/registry/combos/express-prisma/variants/base/src/rbac.defaults.ts +66 -18
  39. package/registry/combos/express-prisma/variants/base/src/{audit-log.repository.ts → repositories/audit-log.repository.ts} +16 -5
  40. package/registry/combos/express-prisma/variants/base/src/{rbac.repository.ts → repositories/rbac.repository.ts} +199 -48
  41. package/registry/combos/express-prisma/variants/base/src/routers/admin.router.ts +508 -0
  42. package/registry/combos/express-prisma/variants/base/src/seed.ts +77 -19
  43. package/registry/combos/express-prisma/variants/base/src/{auth.service.ts → services/auth.service.ts} +454 -105
  44. package/registry/combos/express-prisma/variants/workspaces/src/create-auth-app.ts +80 -25
  45. package/registry/combos/express-prisma/variants/workspaces/src/{authz.middleware.ts → middleware/authz.middleware.ts} +32 -12
  46. package/registry/combos/express-prisma/variants/workspaces/src/openapi-workspace.ts +147 -28
  47. package/registry/combos/express-prisma/variants/workspaces/src/rbac.defaults.ts +72 -20
  48. package/registry/combos/express-prisma/variants/workspaces/src/{audit-log.repository.ts → repositories/audit-log.repository.ts} +16 -5
  49. package/registry/combos/express-prisma/variants/workspaces/src/{rbac.repository.ts → repositories/rbac.repository.ts} +272 -64
  50. package/registry/combos/express-prisma/variants/workspaces/src/{workspace.repository.ts → repositories/workspace.repository.ts} +86 -23
  51. package/registry/combos/express-prisma/variants/workspaces/src/routers/admin.router.ts +545 -0
  52. package/registry/combos/express-prisma/variants/workspaces/src/routers/workspace.router.ts +194 -0
  53. package/registry/combos/express-prisma/variants/workspaces/src/seed.ts +108 -28
  54. package/registry/combos/express-prisma/variants/workspaces/src/{auth.service.ts → services/auth.service.ts} +518 -119
  55. package/registry/combos/nestjs-drizzle/shared/src/{auth.controller.ts → controllers/auth.controller.ts} +6 -6
  56. package/registry/combos/nestjs-drizzle/shared/src/{auth-core-error.filter.ts → filters/auth-core-error.filter.ts} +29 -5
  57. package/registry/combos/nestjs-drizzle/shared/src/{ability.guard.ts → guards/ability.guard.ts} +20 -7
  58. package/registry/combos/nestjs-drizzle/shared/src/{auth.guard.ts → guards/auth.guard.ts} +19 -7
  59. package/registry/combos/{nestjs-prisma/shared/src → nestjs-drizzle/shared/src/interceptors}/response.interceptor.ts +10 -2
  60. package/registry/combos/nestjs-drizzle/shared/src/repositories/oauth.repository.ts +63 -0
  61. package/registry/combos/nestjs-drizzle/shared/src/repositories/password-reset.repository.ts +59 -0
  62. package/registry/combos/nestjs-drizzle/shared/src/{session.repository.ts → repositories/session.repository.ts} +52 -14
  63. package/registry/combos/nestjs-drizzle/shared/src/{two-factor.repository.ts → repositories/two-factor.repository.ts} +21 -7
  64. package/registry/combos/nestjs-drizzle/shared/src/request-context.ts +1 -1
  65. package/registry/combos/nestjs-drizzle/test/prove-cycle.ts +1097 -307
  66. package/registry/combos/nestjs-drizzle/variants/base/src/auth.module.ts +44 -20
  67. package/registry/combos/nestjs-drizzle/variants/base/src/{admin.controller.ts → controllers/admin.controller.ts} +228 -62
  68. package/registry/combos/nestjs-drizzle/variants/base/src/{authz.guard.ts → guards/authz.guard.ts} +12 -5
  69. package/registry/combos/nestjs-drizzle/variants/base/src/{audit-log.repository.ts → repositories/audit-log.repository.ts} +27 -10
  70. package/registry/combos/nestjs-drizzle/variants/base/src/{rbac.repository.ts → repositories/rbac.repository.ts} +249 -51
  71. package/registry/combos/nestjs-drizzle/variants/base/src/{auth.service.ts → services/auth.service.ts} +499 -116
  72. package/registry/combos/nestjs-drizzle/variants/workspaces/src/auth.module.ts +48 -22
  73. package/registry/combos/nestjs-drizzle/variants/workspaces/src/{admin.controller.ts → controllers/admin.controller.ts} +269 -70
  74. package/registry/combos/nestjs-drizzle/variants/workspaces/src/{workspace.controller.ts → controllers/workspace.controller.ts} +93 -26
  75. package/registry/combos/nestjs-drizzle/variants/workspaces/src/{authz.guard.ts → guards/authz.guard.ts} +26 -8
  76. package/registry/combos/nestjs-drizzle/variants/workspaces/src/{audit-log.repository.ts → repositories/audit-log.repository.ts} +29 -11
  77. package/registry/combos/nestjs-drizzle/variants/workspaces/src/{rbac.repository.ts → repositories/rbac.repository.ts} +323 -71
  78. package/registry/combos/nestjs-drizzle/variants/workspaces/src/{workspace.repository.ts → repositories/workspace.repository.ts} +131 -30
  79. package/registry/combos/nestjs-drizzle/variants/workspaces/src/services/auth.service.ts +988 -0
  80. package/registry/combos/nestjs-prisma/shared/src/{auth.controller.ts → controllers/auth.controller.ts} +6 -6
  81. package/registry/combos/nestjs-prisma/shared/src/{auth-core-error.filter.ts → filters/auth-core-error.filter.ts} +29 -5
  82. package/registry/combos/nestjs-prisma/shared/src/{ability.guard.ts → guards/ability.guard.ts} +20 -7
  83. package/registry/combos/nestjs-prisma/shared/src/{auth.guard.ts → guards/auth.guard.ts} +19 -7
  84. package/registry/combos/{nestjs-drizzle/shared/src → nestjs-prisma/shared/src/interceptors}/response.interceptor.ts +10 -2
  85. package/registry/combos/nestjs-prisma/shared/src/{oauth.repository.ts → repositories/oauth.repository.ts} +25 -8
  86. package/registry/combos/nestjs-prisma/shared/src/repositories/password-reset.repository.ts +55 -0
  87. package/registry/combos/nestjs-prisma/shared/src/{session.repository.ts → repositories/session.repository.ts} +30 -9
  88. package/registry/combos/nestjs-prisma/shared/src/{two-factor.repository.ts → repositories/two-factor.repository.ts} +11 -4
  89. package/registry/combos/nestjs-prisma/shared/src/request-context.ts +1 -1
  90. package/registry/combos/nestjs-prisma/test/prove-cycle.ts +1097 -307
  91. package/registry/combos/nestjs-prisma/variants/base/src/auth.module.ts +58 -27
  92. package/registry/combos/nestjs-prisma/variants/base/src/{admin.controller.ts → controllers/admin.controller.ts} +469 -110
  93. package/registry/combos/nestjs-prisma/variants/base/src/{audit-log.gateway.ts → gateways/audit-log.gateway.ts} +22 -6
  94. package/registry/combos/nestjs-prisma/variants/base/src/{authz.guard.ts → guards/authz.guard.ts} +12 -5
  95. package/registry/combos/nestjs-prisma/variants/base/src/rbac.defaults.ts +97 -26
  96. package/registry/combos/nestjs-prisma/variants/base/src/{audit-log.repository.ts → repositories/audit-log.repository.ts} +16 -5
  97. package/registry/combos/nestjs-prisma/variants/base/src/{country.repository.ts → repositories/country.repository.ts} +98 -25
  98. package/registry/combos/nestjs-prisma/variants/base/src/{customer.repository.ts → repositories/customer.repository.ts} +106 -27
  99. package/registry/combos/nestjs-prisma/variants/base/src/{language.repository.ts → repositories/language.repository.ts} +93 -25
  100. package/registry/combos/nestjs-prisma/variants/base/src/{rbac.repository.ts → repositories/rbac.repository.ts} +229 -55
  101. package/registry/combos/nestjs-prisma/variants/base/src/seed.ts +77 -19
  102. package/registry/combos/nestjs-prisma/variants/base/src/services/auth.service.ts +1064 -0
  103. package/registry/combos/nestjs-prisma/variants/workspaces/src/auth.module.ts +54 -26
  104. package/registry/combos/nestjs-prisma/variants/workspaces/src/{admin.controller.ts → controllers/admin.controller.ts} +544 -128
  105. package/registry/combos/nestjs-prisma/variants/workspaces/src/{workspace.controller.ts → controllers/workspace.controller.ts} +93 -26
  106. package/registry/combos/nestjs-prisma/variants/workspaces/src/{authz.guard.ts → guards/authz.guard.ts} +26 -8
  107. package/registry/combos/nestjs-prisma/variants/workspaces/src/rbac.defaults.ts +103 -28
  108. package/registry/combos/nestjs-prisma/variants/workspaces/src/{audit-log.repository.ts → repositories/audit-log.repository.ts} +16 -5
  109. package/registry/combos/nestjs-prisma/variants/workspaces/src/{country.repository.ts → repositories/country.repository.ts} +127 -26
  110. package/registry/combos/nestjs-prisma/variants/workspaces/src/{customer.repository.ts → repositories/customer.repository.ts} +137 -28
  111. package/registry/combos/nestjs-prisma/variants/workspaces/src/repositories/language.repository.ts +243 -0
  112. package/registry/combos/nestjs-prisma/variants/workspaces/src/{rbac.repository.ts → repositories/rbac.repository.ts} +314 -74
  113. package/registry/combos/nestjs-prisma/variants/workspaces/src/{workspace.repository.ts → repositories/workspace.repository.ts} +94 -24
  114. package/registry/combos/nestjs-prisma/variants/workspaces/src/seed.ts +108 -28
  115. package/registry/combos/nestjs-prisma/variants/workspaces/src/services/auth.service.ts +961 -0
  116. package/registry.json +4 -4
  117. package/simple-auth-kit.ts +42 -11
  118. package/registry/combos/express-drizzle/shared/src/auth.router.ts +0 -266
  119. package/registry/combos/express-drizzle/shared/src/password-reset.repository.ts +0 -35
  120. package/registry/combos/express-drizzle/variants/base/src/admin.router.ts +0 -307
  121. package/registry/combos/express-drizzle/variants/workspaces/src/admin.router.ts +0 -323
  122. package/registry/combos/express-drizzle/variants/workspaces/src/workspace.router.ts +0 -123
  123. package/registry/combos/express-prisma/shared/src/auth.router.ts +0 -269
  124. package/registry/combos/express-prisma/shared/src/password-reset.repository.ts +0 -29
  125. package/registry/combos/express-prisma/variants/base/src/admin.router.ts +0 -314
  126. package/registry/combos/express-prisma/variants/workspaces/src/admin.router.ts +0 -330
  127. package/registry/combos/express-prisma/variants/workspaces/src/workspace.router.ts +0 -123
  128. package/registry/combos/nestjs-drizzle/shared/src/oauth.repository.ts +0 -36
  129. package/registry/combos/nestjs-drizzle/shared/src/password-reset.repository.ts +0 -29
  130. package/registry/combos/nestjs-drizzle/variants/workspaces/src/auth.service.ts +0 -553
  131. package/registry/combos/nestjs-prisma/shared/src/password-reset.repository.ts +0 -29
  132. package/registry/combos/nestjs-prisma/variants/base/src/auth.service.ts +0 -618
  133. package/registry/combos/nestjs-prisma/variants/workspaces/src/auth.service.ts +0 -509
  134. package/registry/combos/nestjs-prisma/variants/workspaces/src/language.repository.ts +0 -143
@@ -53,11 +53,22 @@ export interface PermissionSeed {
53
53
  * evaluate.
54
54
  */
55
55
  export const PERMISSION_CATALOG = {
56
- "users:read": { displayName: "List members", description: "GET /auth/admin/users, GET /auth/admin/users/:userId", group: "Users", order: 1 },
57
- "users:block": { displayName: "Block and unblock members", description: "POST /auth/admin/users/:userId/block, .../unblock", group: "Users", order: 2 },
56
+ "users:read": {
57
+ displayName: "List members",
58
+ description: "GET /auth/admin/users, GET /auth/admin/users/:userId",
59
+ group: "Users",
60
+ order: 1,
61
+ },
62
+ "users:block": {
63
+ displayName: "Block and unblock members",
64
+ description: "POST /auth/admin/users/:userId/block, .../unblock",
65
+ group: "Users",
66
+ order: 2,
67
+ },
58
68
  "users:manage": {
59
69
  displayName: "Edit and delete members",
60
- description: "Edit a member's profile or delete their account — PATCH /auth/admin/users/:userId, DELETE /auth/admin/users/:userId",
70
+ description:
71
+ "Edit a member's profile or delete their account — PATCH /auth/admin/users/:userId, DELETE /auth/admin/users/:userId",
61
72
  group: "Users",
62
73
  order: 3,
63
74
  },
@@ -70,30 +81,44 @@ export const PERMISSION_CATALOG = {
70
81
  },
71
82
  "roles:assign": {
72
83
  displayName: "Assign roles",
73
- description: "Assign and revoke a member's roles — POST /auth/admin/users/:userId/roles, .../roles/:roleSlug/revoke, PUT /workspaces/members/:memberId/roles",
84
+ description:
85
+ "Assign and revoke a member's roles — POST /auth/admin/users/:userId/roles, .../roles/:roleSlug/revoke, PUT /workspaces/members/:memberId/roles",
74
86
  group: "Roles",
75
87
  order: 2,
76
88
  },
77
- "permissions:read": { displayName: "Read the permission catalog", description: "GET /auth/admin/permissions", group: "Permissions", order: 1 },
89
+ "permissions:read": {
90
+ displayName: "Read the permission catalog",
91
+ description: "GET /auth/admin/permissions",
92
+ group: "Permissions",
93
+ order: 1,
94
+ },
78
95
  "permissions:define": {
79
96
  displayName: "Define permissions",
80
- description: "Create a permission, rename it, or deactivate it — POST /auth/admin/permissions. The authority that defines all the others.",
97
+ description:
98
+ "Create a permission, rename it, or deactivate it — POST /auth/admin/permissions. The authority that defines all the others.",
81
99
  group: "Permissions",
82
100
  order: 2,
83
101
  },
84
102
  "permissions:grant": {
85
103
  displayName: "Grant permissions directly",
86
- description: "Grant and revoke a permission straight to a member, bypassing roles — POST /auth/admin/users/:userId/permissions, .../permissions/:slug/revoke",
104
+ description:
105
+ "Grant and revoke a permission straight to a member, bypassing roles — POST /auth/admin/users/:userId/permissions, .../permissions/:slug/revoke",
87
106
  group: "Permissions",
88
107
  order: 3,
89
108
  },
90
109
  "members:manage": {
91
110
  displayName: "Add and remove members",
92
- description: "POST /workspaces/members, DELETE /workspaces/members/:memberId",
111
+ description:
112
+ "POST /workspaces/members, DELETE /workspaces/members/:memberId",
93
113
  group: "Members",
94
114
  order: 1,
95
115
  },
96
- "audit-log:read": { displayName: "Read the audit log", description: "GET /auth/admin/audit-log", group: "Audit", order: 1 },
116
+ "audit-log:read": {
117
+ displayName: "Read the audit log",
118
+ description: "GET /auth/admin/audit-log",
119
+ group: "Audit",
120
+ order: 1,
121
+ },
97
122
  } as const satisfies Record<string, PermissionSeed>;
98
123
 
99
124
  /**
@@ -105,10 +130,14 @@ export const PERMISSION_CATALOG = {
105
130
  */
106
131
  export type PermissionSlug = keyof typeof PERMISSION_CATALOG;
107
132
 
108
- export const PERMISSION_SLUGS = Object.keys(PERMISSION_CATALOG) as PermissionSlug[];
133
+ export const PERMISSION_SLUGS = Object.keys(
134
+ PERMISSION_CATALOG,
135
+ ) as PermissionSlug[];
109
136
 
110
137
  /** Groups, in the order an admin console should render them. Derived from the catalog so it cannot drift from it. */
111
- export const PERMISSION_GROUP_ORDER: string[] = [...new Set(PERMISSION_SLUGS.map((slug) => PERMISSION_CATALOG[slug].group))];
138
+ export const PERMISSION_GROUP_ORDER: string[] = [
139
+ ...new Set(PERMISSION_SLUGS.map((slug) => PERMISSION_CATALOG[slug].group)),
140
+ ];
112
141
 
113
142
  /** The display metadata a seeded role carries, plus what it starts out granting. */
114
143
  export interface RoleSeed {
@@ -144,7 +173,8 @@ export const DEFAULT_ROLES: readonly RoleSeed[] = [
144
173
  {
145
174
  slug: "superadmin",
146
175
  displayName: "Super Admin",
147
- description: "Carries every permission in the catalog — same authority as admin, held by the seeded super_admin account's membership (see SEED_SUPERADMIN_* in seed.ts).",
176
+ description:
177
+ "Carries every permission in the catalog — same authority as admin, held by the seeded super_admin account's membership (see SEED_SUPERADMIN_* in seed.ts).",
148
178
  isDefault: false,
149
179
  order: 1,
150
180
  permissions: PERMISSION_SLUGS,
@@ -152,7 +182,8 @@ export const DEFAULT_ROLES: readonly RoleSeed[] = [
152
182
  {
153
183
  slug: "member",
154
184
  displayName: "Member",
155
- description: "The default for a new membership. Carries no administrative permission.",
185
+ description:
186
+ "The default for a new membership. Carries no administrative permission.",
156
187
  isDefault: true,
157
188
  order: 2,
158
189
  permissions: [],
@@ -170,7 +201,10 @@ export const WORKSPACE_CREATOR_ROLES: string[] = ["admin", "member"];
170
201
  export const SEED_SUPERADMIN_ROLES: string[] = ["superadmin", "member"];
171
202
 
172
203
  /** Anything that can write the catalog tables: the PrismaClient, or a `$transaction` client. */
173
- export type RbacWriter = Pick<PrismaClient, "permission" | "role" | "permissionRole">;
204
+ export type RbacWriter = Pick<
205
+ PrismaClient,
206
+ "permission" | "role" | "permissionRole"
207
+ >;
174
208
 
175
209
  /**
176
210
  * Writes the starting catalog, and one workspace's roles, into `db` — which may be a transaction
@@ -184,7 +218,10 @@ export type RbacWriter = Pick<PrismaClient, "permission" | "role" | "permissionR
184
218
  */
185
219
  // Takes bigint directly: both callers (`WorkspaceRepository.create`, `seed.ts`) already have the
186
220
  // workspace row's id in hand from their own Prisma call.
187
- export async function provisionDefaultRoles(db: RbacWriter, workspaceId: bigint): Promise<void> {
221
+ export async function provisionDefaultRoles(
222
+ db: RbacWriter,
223
+ workspaceId: bigint,
224
+ ): Promise<void> {
188
225
  await db.permission.createMany({
189
226
  data: PERMISSION_SLUGS.map((slug) => ({
190
227
  slug,
@@ -192,12 +229,17 @@ export async function provisionDefaultRoles(db: RbacWriter, workspaceId: bigint)
192
229
  displayName: PERMISSION_CATALOG[slug].displayName,
193
230
  description: PERMISSION_CATALOG[slug].description,
194
231
  group: PERMISSION_CATALOG[slug].group,
195
- groupOrder: PERMISSION_GROUP_ORDER.indexOf(PERMISSION_CATALOG[slug].group),
232
+ groupOrder: PERMISSION_GROUP_ORDER.indexOf(
233
+ PERMISSION_CATALOG[slug].group,
234
+ ),
196
235
  order: PERMISSION_CATALOG[slug].order,
197
236
  })),
198
237
  skipDuplicates: true,
199
238
  });
200
- const permissions = await db.permission.findMany({ where: { slug: { in: PERMISSION_SLUGS } }, select: { id: true, slug: true } });
239
+ const permissions = await db.permission.findMany({
240
+ where: { slug: { in: PERMISSION_SLUGS } },
241
+ select: { id: true, slug: true },
242
+ });
201
243
  const permissionId = new Map(permissions.map((p) => [p.slug, p.id]));
202
244
 
203
245
  await db.role.createMany({
@@ -212,11 +254,21 @@ export async function provisionDefaultRoles(db: RbacWriter, workspaceId: bigint)
212
254
  })),
213
255
  skipDuplicates: true,
214
256
  });
215
- const roles = await db.role.findMany({ where: { workspaceId, slug: { in: DEFAULT_ROLES.map((r) => r.slug) } }, select: { id: true, slug: true } });
257
+ const roles = await db.role.findMany({
258
+ where: { workspaceId, slug: { in: DEFAULT_ROLES.map((r) => r.slug) } },
259
+ select: { id: true, slug: true },
260
+ });
216
261
  const seedBySlug = new Map(DEFAULT_ROLES.map((role) => [role.slug, role]));
217
262
 
218
263
  const rolePermissions = roles.flatMap((role) =>
219
- (seedBySlug.get(role.slug)?.permissions ?? []).map((slug) => ({ roleId: role.id, permissionId: permissionId.get(slug)! })),
264
+ (seedBySlug.get(role.slug)?.permissions ?? []).map((slug) => ({
265
+ roleId: role.id,
266
+ permissionId: permissionId.get(slug)!,
267
+ })),
220
268
  );
221
- if (rolePermissions.length) await db.permissionRole.createMany({ data: rolePermissions, skipDuplicates: true });
269
+ if (rolePermissions.length)
270
+ await db.permissionRole.createMany({
271
+ data: rolePermissions,
272
+ skipDuplicates: true,
273
+ });
222
274
  }
@@ -1,7 +1,12 @@
1
1
  import type { AuditEvent } from "@/lib/auth/core/types.js";
2
- import { Prisma, PrismaClient } from "../generated/prisma/client.js";
3
- import { buildPageMeta, normalizeLimit, normalizePage, type Paginated } from "./pagination.js";
4
- import { toIdOrNull, toIdOrUndefined } from "./id.helper.js";
2
+ import { Prisma, PrismaClient } from "../../generated/prisma/client.js";
3
+ import {
4
+ buildPageMeta,
5
+ normalizeLimit,
6
+ normalizePage,
7
+ type Paginated,
8
+ } from "../pagination.js";
9
+ import { toIdOrNull, toIdOrUndefined } from "../id.helper.js";
5
10
 
6
11
  export interface AuditLogEntry {
7
12
  id: string;
@@ -47,7 +52,10 @@ export function toAuditLogEntry(row: AuditLogRow): AuditLogEntry {
47
52
  /** "role_assigned" -> "Role assigned". Derived rather than passed in, so core never has to carry display text. */
48
53
  export function humanizeAction(action: string): string {
49
54
  const words = action.split("_");
50
- return [words[0].charAt(0).toUpperCase() + words[0].slice(1), ...words.slice(1)].join(" ");
55
+ return [
56
+ words[0].charAt(0).toUpperCase() + words[0].slice(1),
57
+ ...words.slice(1),
58
+ ].join(" ");
51
59
  }
52
60
 
53
61
  // Plain class, no DI container — constructed directly with a PrismaClient in
@@ -60,7 +68,10 @@ export class AuditLogRepository {
60
68
  * those happen to a user, not inside a workspace. Callers that *are* acting in a workspace
61
69
  * pass it, which is what scopes the admin audit-log read below.
62
70
  */
63
- async append(event: AuditEvent, opts: { workspaceId?: string; remarks?: string } = {}): Promise<void> {
71
+ async append(
72
+ event: AuditEvent,
73
+ opts: { workspaceId?: string; remarks?: string } = {},
74
+ ): Promise<void> {
64
75
  await this.prisma.auditLog.create({
65
76
  data: {
66
77
  action: event.type,