@brite-future-schools-contracts/contracts 2.0.38 → 2.0.40

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/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- export { AcademicTerm, AcademicTermSchema, AcademicYear, AcademicYearSchema, AcknowledgeDeliveryInputSchema, AcknowledgeDiaryEntryInputSchema, AttendanceRecordInputSchema, AttendanceStatusEnum, AttendanceStatusSchema, BankAccountTypeSchema, BlockResolutionMethodSchema, BranchBankAccountSchema, BranchRefSchema, BulkUploadStudentRow, BulkUploadStudentRowSchema, BulkUploadStudentsInput, BulkUploadStudentsInputSchema, BulkUploadStudentsOutput, BulkUploadStudentsOutputSchema, ChangePasswordInput, ChangePasswordInputSchema, ClassAttendanceRow, ClassAttendanceRowSchema, ClassSummary, ClassSummarySchema, CreateBankAccountInput, CreateBankAccountInputSchema, CreateDepartmentInput, CreateDepartmentInputSchema, CreateDiaryCategoryInputSchema, CreateDiaryEntryInputSchema, CreateGradeInput, CreateGradeInputSchema, CreateNotificationInput, CreateNotificationInputSchema, CreateStaffInput, CreateStaffInputSchema, CreateStaffOutput, CreateStaffOutputSchema, CreateStudentInput, CreateStudentInputSchema, CreateStudentOutput, CreateStudentOutputSchema, CreateTermInput, CreateTermInputSchema, CreateYearInput, CreateYearInputSchema, CuidSchema, Department, DepartmentSchema, DiaryAcknowledgementSchema, DiaryBlockIdInputSchema, DiaryBlockSchema, DiaryCategorySchema, DiaryEntryDetailSchema, DiaryEntryForGuardianSchema, DiaryEntrySchema, DiaryEntryStatusSchema, DiarySeveritySchema, EmploymentTypeSchema, GRADE_LEVELS, GenderSchema, GetByClassInput, GetByClassInputSchema, GetByStudentInput, GetByStudentInputSchema, Grade, GradeLevel, GradeLevelSchema, GradeSchema, KenyanBankSchema, LinkGuardianInput, LinkGuardianInputSchema, ListBankAccountsInputSchema, ListDeliveriesInputSchema, ListDiaryAcknowledgementsInputSchema, ListDiaryEntriesInputSchema, ListNotificationTemplatesInputSchema, ListStaffInput, ListStaffInputSchema, ListStudentsInput, ListStudentsInputSchema, ListTermsInputSchema, LoginInput, LoginInputSchema, LoginOutput, LoginOutputSchema, LogoutInputSchema, MarkAttendanceInput, MarkAttendanceInputSchema, MarkAttendanceOutput, MarkAttendanceOutputSchema, MyAcknowledgementSchema, NotificationAudienceItemSchema, NotificationAudienceTypeSchema, NotificationChannelSchema, NotificationDeliverySchema, NotificationResponseItemSchema, NotificationTemplateSchema, NotificationTemplateStatusSchema, NotificationUrgencySchema, PaginationInput, PaginationInputSchema, PortalBlockSchema, PortalBlockTypeSchema, RefreshTokenInput, RefreshTokenInputSchema, RefreshTokenOutput, RefreshTokenOutputSchema, RejectNotificationInputSchema, RequestPasswordResetInputSchema, ResetPasswordInputSchema, RespondToBlockInputSchema, RespondToBlockOutputSchema, RespondToDeliveryInputSchema, RespondToDiaryEntryInputSchema, ResponseSummarySchema, SessionUserOutput, SessionUserOutputSchema, SessionUserRoleSchema, SessionUserSubRoleSchema, SetCurrentTermInputSchema, SetCurrentYearInputSchema, SoftDelete, SoftDeleteSchema, StaffListItem, StaffListItemSchema, StaffProfile, StaffProfileSchema, StudentAttendanceRow, StudentAttendanceRowSchema, StudentListItem, StudentListItemSchema, StudentProfile, StudentProfileSchema, StudentStatusSchema, SwitchBranchInput, SwitchBranchInputSchema, Term, TermSchema, Timestamps, TimestampsSchema, UpdateBankAccountInput, UpdateBankAccountInputSchema, UpdateDiaryCategoryInputSchema, UuidSchema, paginatedOutputSchema } from './schemas/index.cjs';
2
- export { acknowledgeContract, acknowledgeDiaryEntryContract, approveContract, approveLiftContract, attendanceContract, authContract, bankingContract, blocksContract, bulkUploadStudentsContract, calendarContract, calendarListTermsContract, cancelContract, changePasswordContract, createBankAccountContract, createCategoryContract, createDepartmentContract, createEntryContract, createGradeContract, createNotificationContract, createStaffContract, createStudentContract, createTermContract, createYearContract, deactivateContract, diaryContract, getByClassContract, getByIdContract, getByStudentContract, getEntryContract, getMeContract, getResponseSummaryContract, getStaffByIdContract, getStudentByIdContract, getTemplateContract, gradesContract, hrContract, linkGuardianContract, listAccountsContract, listAcknowledgementsContract, listActiveBlocksContract, listBanksContract, listCategoriesContract, listClassesContract, listDeliveriesContract, listDepartmentsContract, listEntriesContract, listForGuardianContract, listGradesContract, listResponsesContract, listStaffContract, listStudentsContract, listTemplatesContract, listTermsContract, listYearsContract, loginContract, logoutContract, markAttendanceContract, markReadContract, markUnreadContract, notificationsContract, refreshTokenContract, rejectContract, requestLiftContract, requestPasswordResetContract, resetPasswordContract, resolveBlockAltContract, resolveBlockContract, respondContract, respondToBlockContract, respondToDiaryEntryContract, setCurrentTermContract, setCurrentYearContract, setDefaultContract, studentsContract, submitContract, switchBranchContract, updateBankAccountContract, updateCategoryContract, updateStaffStatusContract } from './contracts/index.cjs';
1
+ export { AcademicTerm, AcademicTermSchema, AcademicYear, AcademicYearSchema, AcknowledgeDeliveryInputSchema, AcknowledgeDiaryEntryInputSchema, AttendanceRecordInputSchema, AttendanceStatusEnum, AttendanceStatusSchema, BankAccountTypeSchema, BlockResolutionMethodSchema, BranchBankAccountSchema, BranchRefSchema, BulkUploadStudentRow, BulkUploadStudentRowSchema, BulkUploadStudentsInput, BulkUploadStudentsInputSchema, BulkUploadStudentsOutput, BulkUploadStudentsOutputSchema, ChangePasswordInput, ChangePasswordInputSchema, ClassAttendanceRow, ClassAttendanceRowSchema, ClassSummary, ClassSummarySchema, CreateBankAccountInput, CreateBankAccountInputSchema, CreateDepartmentInput, CreateDepartmentInputSchema, CreateDiaryCategoryInputSchema, CreateDiaryEntryInputSchema, CreateGradeInput, CreateGradeInputSchema, CreateNotificationInput, CreateNotificationInputSchema, CreateStaffInput, CreateStaffInputSchema, CreateStaffOutput, CreateStaffOutputSchema, CreateStudentInput, CreateStudentInputSchema, CreateStudentOutput, CreateStudentOutputSchema, CreateTermInput, CreateTermInputSchema, CreateYearInput, CreateYearInputSchema, CuidSchema, Department, DepartmentSchema, DiaryAcknowledgementSchema, DiaryBlockIdInputSchema, DiaryBlockSchema, DiaryCategorySchema, DiaryEntryDetailSchema, DiaryEntryForGuardianSchema, DiaryEntrySchema, DiaryEntryStatusSchema, DiarySeveritySchema, EmploymentTypeSchema, GRADE_LEVELS, GenderSchema, GetByClassInput, GetByClassInputSchema, GetByStudentInput, GetByStudentInputSchema, Grade, GradeLevel, GradeLevelSchema, GradeSchema, KenyanBankSchema, LinkGuardianInput, LinkGuardianInputSchema, ListBankAccountsInputSchema, ListDeliveriesInputSchema, ListDiaryAcknowledgementsInputSchema, ListDiaryEntriesInputSchema, ListNotificationTemplatesInputSchema, ListStaffInput, ListStaffInputSchema, ListStudentsInput, ListStudentsInputSchema, ListTermsInputSchema, LoginInput, LoginInputSchema, LoginOutput, LoginOutputSchema, LogoutInputSchema, MarkAttendanceInput, MarkAttendanceInputSchema, MarkAttendanceOutput, MarkAttendanceOutputSchema, MyAcknowledgementSchema, NotificationAudienceItemSchema, NotificationAudienceTypeSchema, NotificationChannelSchema, NotificationDeliverySchema, NotificationResponseItemSchema, NotificationTemplateSchema, NotificationTemplateStatusSchema, NotificationUrgencySchema, PaginationInput, PaginationInputSchema, PortalBlockSchema, PortalBlockTypeSchema, ProfileOutput, ProfileOutputSchema, RefreshTokenInput, RefreshTokenInputSchema, RefreshTokenOutput, RefreshTokenOutputSchema, RejectNotificationInputSchema, RequestPasswordResetInputSchema, ResetPasswordInputSchema, RespondToBlockInputSchema, RespondToBlockOutputSchema, RespondToDeliveryInputSchema, RespondToDiaryEntryInputSchema, ResponseSummarySchema, SessionUserOutput, SessionUserOutputSchema, SessionUserRoleSchema, SessionUserSubRoleSchema, SetCurrentTermInputSchema, SetCurrentYearInputSchema, SoftDelete, SoftDeleteSchema, StaffListItem, StaffListItemSchema, StaffProfile, StaffProfileSchema, StudentAttendanceRow, StudentAttendanceRowSchema, StudentListItem, StudentListItemSchema, StudentProfile, StudentProfileSchema, StudentStatusSchema, SwitchBranchInput, SwitchBranchInputSchema, Term, TermSchema, Timestamps, TimestampsSchema, UpdateBankAccountInput, UpdateBankAccountInputSchema, UpdateDiaryCategoryInputSchema, UpdateProfileInput, UpdateProfileInputSchema, UuidSchema, VerifyPasswordInput, VerifyPasswordInputSchema, VerifyPasswordOutput, VerifyPasswordOutputSchema, paginatedOutputSchema } from './schemas/index.cjs';
2
+ export { acknowledgeContract, acknowledgeDiaryEntryContract, approveContract, approveLiftContract, attendanceContract, authContract, bankingContract, blocksContract, bulkUploadStudentsContract, calendarContract, calendarListTermsContract, cancelContract, changePasswordContract, createBankAccountContract, createCategoryContract, createDepartmentContract, createEntryContract, createGradeContract, createNotificationContract, createStaffContract, createStudentContract, createTermContract, createYearContract, deactivateContract, diaryContract, getByClassContract, getByIdContract, getByStudentContract, getEntryContract, getMeContract, getProfileContract, getResponseSummaryContract, getStaffByIdContract, getStudentByIdContract, getTemplateContract, gradesContract, hrContract, linkGuardianContract, listAccountsContract, listAcknowledgementsContract, listActiveBlocksContract, listBanksContract, listCategoriesContract, listClassesContract, listDeliveriesContract, listDepartmentsContract, listEntriesContract, listForGuardianContract, listGradesContract, listResponsesContract, listStaffContract, listStudentsContract, listTemplatesContract, listTermsContract, listYearsContract, loginContract, logoutContract, markAttendanceContract, markReadContract, markUnreadContract, notificationsContract, refreshTokenContract, rejectContract, requestLiftContract, requestPasswordResetContract, resetPasswordContract, resolveBlockAltContract, resolveBlockContract, respondContract, respondToBlockContract, respondToDiaryEntryContract, setCurrentTermContract, setCurrentYearContract, setDefaultContract, studentsContract, submitContract, switchBranchContract, updateBankAccountContract, updateCategoryContract, updateProfileContract, updateStaffStatusContract, verifyPasswordContract } from './contracts/index.cjs';
3
3
  import 'zod';
4
4
  import '@orpc/contract';
5
5
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { AcademicTerm, AcademicTermSchema, AcademicYear, AcademicYearSchema, AcknowledgeDeliveryInputSchema, AcknowledgeDiaryEntryInputSchema, AttendanceRecordInputSchema, AttendanceStatusEnum, AttendanceStatusSchema, BankAccountTypeSchema, BlockResolutionMethodSchema, BranchBankAccountSchema, BranchRefSchema, BulkUploadStudentRow, BulkUploadStudentRowSchema, BulkUploadStudentsInput, BulkUploadStudentsInputSchema, BulkUploadStudentsOutput, BulkUploadStudentsOutputSchema, ChangePasswordInput, ChangePasswordInputSchema, ClassAttendanceRow, ClassAttendanceRowSchema, ClassSummary, ClassSummarySchema, CreateBankAccountInput, CreateBankAccountInputSchema, CreateDepartmentInput, CreateDepartmentInputSchema, CreateDiaryCategoryInputSchema, CreateDiaryEntryInputSchema, CreateGradeInput, CreateGradeInputSchema, CreateNotificationInput, CreateNotificationInputSchema, CreateStaffInput, CreateStaffInputSchema, CreateStaffOutput, CreateStaffOutputSchema, CreateStudentInput, CreateStudentInputSchema, CreateStudentOutput, CreateStudentOutputSchema, CreateTermInput, CreateTermInputSchema, CreateYearInput, CreateYearInputSchema, CuidSchema, Department, DepartmentSchema, DiaryAcknowledgementSchema, DiaryBlockIdInputSchema, DiaryBlockSchema, DiaryCategorySchema, DiaryEntryDetailSchema, DiaryEntryForGuardianSchema, DiaryEntrySchema, DiaryEntryStatusSchema, DiarySeveritySchema, EmploymentTypeSchema, GRADE_LEVELS, GenderSchema, GetByClassInput, GetByClassInputSchema, GetByStudentInput, GetByStudentInputSchema, Grade, GradeLevel, GradeLevelSchema, GradeSchema, KenyanBankSchema, LinkGuardianInput, LinkGuardianInputSchema, ListBankAccountsInputSchema, ListDeliveriesInputSchema, ListDiaryAcknowledgementsInputSchema, ListDiaryEntriesInputSchema, ListNotificationTemplatesInputSchema, ListStaffInput, ListStaffInputSchema, ListStudentsInput, ListStudentsInputSchema, ListTermsInputSchema, LoginInput, LoginInputSchema, LoginOutput, LoginOutputSchema, LogoutInputSchema, MarkAttendanceInput, MarkAttendanceInputSchema, MarkAttendanceOutput, MarkAttendanceOutputSchema, MyAcknowledgementSchema, NotificationAudienceItemSchema, NotificationAudienceTypeSchema, NotificationChannelSchema, NotificationDeliverySchema, NotificationResponseItemSchema, NotificationTemplateSchema, NotificationTemplateStatusSchema, NotificationUrgencySchema, PaginationInput, PaginationInputSchema, PortalBlockSchema, PortalBlockTypeSchema, RefreshTokenInput, RefreshTokenInputSchema, RefreshTokenOutput, RefreshTokenOutputSchema, RejectNotificationInputSchema, RequestPasswordResetInputSchema, ResetPasswordInputSchema, RespondToBlockInputSchema, RespondToBlockOutputSchema, RespondToDeliveryInputSchema, RespondToDiaryEntryInputSchema, ResponseSummarySchema, SessionUserOutput, SessionUserOutputSchema, SessionUserRoleSchema, SessionUserSubRoleSchema, SetCurrentTermInputSchema, SetCurrentYearInputSchema, SoftDelete, SoftDeleteSchema, StaffListItem, StaffListItemSchema, StaffProfile, StaffProfileSchema, StudentAttendanceRow, StudentAttendanceRowSchema, StudentListItem, StudentListItemSchema, StudentProfile, StudentProfileSchema, StudentStatusSchema, SwitchBranchInput, SwitchBranchInputSchema, Term, TermSchema, Timestamps, TimestampsSchema, UpdateBankAccountInput, UpdateBankAccountInputSchema, UpdateDiaryCategoryInputSchema, UuidSchema, paginatedOutputSchema } from './schemas/index.js';
2
- export { acknowledgeContract, acknowledgeDiaryEntryContract, approveContract, approveLiftContract, attendanceContract, authContract, bankingContract, blocksContract, bulkUploadStudentsContract, calendarContract, calendarListTermsContract, cancelContract, changePasswordContract, createBankAccountContract, createCategoryContract, createDepartmentContract, createEntryContract, createGradeContract, createNotificationContract, createStaffContract, createStudentContract, createTermContract, createYearContract, deactivateContract, diaryContract, getByClassContract, getByIdContract, getByStudentContract, getEntryContract, getMeContract, getResponseSummaryContract, getStaffByIdContract, getStudentByIdContract, getTemplateContract, gradesContract, hrContract, linkGuardianContract, listAccountsContract, listAcknowledgementsContract, listActiveBlocksContract, listBanksContract, listCategoriesContract, listClassesContract, listDeliveriesContract, listDepartmentsContract, listEntriesContract, listForGuardianContract, listGradesContract, listResponsesContract, listStaffContract, listStudentsContract, listTemplatesContract, listTermsContract, listYearsContract, loginContract, logoutContract, markAttendanceContract, markReadContract, markUnreadContract, notificationsContract, refreshTokenContract, rejectContract, requestLiftContract, requestPasswordResetContract, resetPasswordContract, resolveBlockAltContract, resolveBlockContract, respondContract, respondToBlockContract, respondToDiaryEntryContract, setCurrentTermContract, setCurrentYearContract, setDefaultContract, studentsContract, submitContract, switchBranchContract, updateBankAccountContract, updateCategoryContract, updateStaffStatusContract } from './contracts/index.js';
1
+ export { AcademicTerm, AcademicTermSchema, AcademicYear, AcademicYearSchema, AcknowledgeDeliveryInputSchema, AcknowledgeDiaryEntryInputSchema, AttendanceRecordInputSchema, AttendanceStatusEnum, AttendanceStatusSchema, BankAccountTypeSchema, BlockResolutionMethodSchema, BranchBankAccountSchema, BranchRefSchema, BulkUploadStudentRow, BulkUploadStudentRowSchema, BulkUploadStudentsInput, BulkUploadStudentsInputSchema, BulkUploadStudentsOutput, BulkUploadStudentsOutputSchema, ChangePasswordInput, ChangePasswordInputSchema, ClassAttendanceRow, ClassAttendanceRowSchema, ClassSummary, ClassSummarySchema, CreateBankAccountInput, CreateBankAccountInputSchema, CreateDepartmentInput, CreateDepartmentInputSchema, CreateDiaryCategoryInputSchema, CreateDiaryEntryInputSchema, CreateGradeInput, CreateGradeInputSchema, CreateNotificationInput, CreateNotificationInputSchema, CreateStaffInput, CreateStaffInputSchema, CreateStaffOutput, CreateStaffOutputSchema, CreateStudentInput, CreateStudentInputSchema, CreateStudentOutput, CreateStudentOutputSchema, CreateTermInput, CreateTermInputSchema, CreateYearInput, CreateYearInputSchema, CuidSchema, Department, DepartmentSchema, DiaryAcknowledgementSchema, DiaryBlockIdInputSchema, DiaryBlockSchema, DiaryCategorySchema, DiaryEntryDetailSchema, DiaryEntryForGuardianSchema, DiaryEntrySchema, DiaryEntryStatusSchema, DiarySeveritySchema, EmploymentTypeSchema, GRADE_LEVELS, GenderSchema, GetByClassInput, GetByClassInputSchema, GetByStudentInput, GetByStudentInputSchema, Grade, GradeLevel, GradeLevelSchema, GradeSchema, KenyanBankSchema, LinkGuardianInput, LinkGuardianInputSchema, ListBankAccountsInputSchema, ListDeliveriesInputSchema, ListDiaryAcknowledgementsInputSchema, ListDiaryEntriesInputSchema, ListNotificationTemplatesInputSchema, ListStaffInput, ListStaffInputSchema, ListStudentsInput, ListStudentsInputSchema, ListTermsInputSchema, LoginInput, LoginInputSchema, LoginOutput, LoginOutputSchema, LogoutInputSchema, MarkAttendanceInput, MarkAttendanceInputSchema, MarkAttendanceOutput, MarkAttendanceOutputSchema, MyAcknowledgementSchema, NotificationAudienceItemSchema, NotificationAudienceTypeSchema, NotificationChannelSchema, NotificationDeliverySchema, NotificationResponseItemSchema, NotificationTemplateSchema, NotificationTemplateStatusSchema, NotificationUrgencySchema, PaginationInput, PaginationInputSchema, PortalBlockSchema, PortalBlockTypeSchema, ProfileOutput, ProfileOutputSchema, RefreshTokenInput, RefreshTokenInputSchema, RefreshTokenOutput, RefreshTokenOutputSchema, RejectNotificationInputSchema, RequestPasswordResetInputSchema, ResetPasswordInputSchema, RespondToBlockInputSchema, RespondToBlockOutputSchema, RespondToDeliveryInputSchema, RespondToDiaryEntryInputSchema, ResponseSummarySchema, SessionUserOutput, SessionUserOutputSchema, SessionUserRoleSchema, SessionUserSubRoleSchema, SetCurrentTermInputSchema, SetCurrentYearInputSchema, SoftDelete, SoftDeleteSchema, StaffListItem, StaffListItemSchema, StaffProfile, StaffProfileSchema, StudentAttendanceRow, StudentAttendanceRowSchema, StudentListItem, StudentListItemSchema, StudentProfile, StudentProfileSchema, StudentStatusSchema, SwitchBranchInput, SwitchBranchInputSchema, Term, TermSchema, Timestamps, TimestampsSchema, UpdateBankAccountInput, UpdateBankAccountInputSchema, UpdateDiaryCategoryInputSchema, UpdateProfileInput, UpdateProfileInputSchema, UuidSchema, VerifyPasswordInput, VerifyPasswordInputSchema, VerifyPasswordOutput, VerifyPasswordOutputSchema, paginatedOutputSchema } from './schemas/index.js';
2
+ export { acknowledgeContract, acknowledgeDiaryEntryContract, approveContract, approveLiftContract, attendanceContract, authContract, bankingContract, blocksContract, bulkUploadStudentsContract, calendarContract, calendarListTermsContract, cancelContract, changePasswordContract, createBankAccountContract, createCategoryContract, createDepartmentContract, createEntryContract, createGradeContract, createNotificationContract, createStaffContract, createStudentContract, createTermContract, createYearContract, deactivateContract, diaryContract, getByClassContract, getByIdContract, getByStudentContract, getEntryContract, getMeContract, getProfileContract, getResponseSummaryContract, getStaffByIdContract, getStudentByIdContract, getTemplateContract, gradesContract, hrContract, linkGuardianContract, listAccountsContract, listAcknowledgementsContract, listActiveBlocksContract, listBanksContract, listCategoriesContract, listClassesContract, listDeliveriesContract, listDepartmentsContract, listEntriesContract, listForGuardianContract, listGradesContract, listResponsesContract, listStaffContract, listStudentsContract, listTemplatesContract, listTermsContract, listYearsContract, loginContract, logoutContract, markAttendanceContract, markReadContract, markUnreadContract, notificationsContract, refreshTokenContract, rejectContract, requestLiftContract, requestPasswordResetContract, resetPasswordContract, resolveBlockAltContract, resolveBlockContract, respondContract, respondToBlockContract, respondToDiaryEntryContract, setCurrentTermContract, setCurrentYearContract, setDefaultContract, studentsContract, submitContract, switchBranchContract, updateBankAccountContract, updateCategoryContract, updateProfileContract, updateStaffStatusContract, verifyPasswordContract } from './contracts/index.js';
3
3
  import 'zod';
4
4
  import '@orpc/contract';
5
5
 
package/dist/index.js CHANGED
@@ -30,6 +30,7 @@ import {
30
30
  getByStudentContract,
31
31
  getEntryContract,
32
32
  getMeContract,
33
+ getProfileContract,
33
34
  getResponseSummaryContract,
34
35
  getStaffByIdContract,
35
36
  getStudentByIdContract,
@@ -78,8 +79,10 @@ import {
78
79
  switchBranchContract,
79
80
  updateBankAccountContract,
80
81
  updateCategoryContract,
81
- updateStaffStatusContract
82
- } from "./chunk-SJF5H2NM.js";
82
+ updateProfileContract,
83
+ updateStaffStatusContract,
84
+ verifyPasswordContract
85
+ } from "./chunk-KTEC74C2.js";
83
86
  import {
84
87
  AcademicTermSchema,
85
88
  AcademicYearSchema,
@@ -154,6 +157,7 @@ import {
154
157
  PaginationInputSchema,
155
158
  PortalBlockSchema,
156
159
  PortalBlockTypeSchema,
160
+ ProfileOutputSchema,
157
161
  RefreshTokenInputSchema,
158
162
  RefreshTokenOutputSchema,
159
163
  RejectNotificationInputSchema,
@@ -181,9 +185,12 @@ import {
181
185
  TimestampsSchema,
182
186
  UpdateBankAccountInputSchema,
183
187
  UpdateDiaryCategoryInputSchema,
188
+ UpdateProfileInputSchema,
184
189
  UuidSchema,
190
+ VerifyPasswordInputSchema,
191
+ VerifyPasswordOutputSchema,
185
192
  paginatedOutputSchema
186
- } from "./chunk-2Q7S637J.js";
193
+ } from "./chunk-VNZGHQ6T.js";
187
194
 
188
195
  // src/roles/helpers.ts
189
196
  var ORG_SCOPED_ROLES = /* @__PURE__ */ new Set([
@@ -516,6 +523,7 @@ export {
516
523
  PaginationInputSchema,
517
524
  PortalBlockSchema,
518
525
  PortalBlockTypeSchema,
526
+ ProfileOutputSchema,
519
527
  RefreshTokenInputSchema,
520
528
  RefreshTokenOutputSchema,
521
529
  RejectNotificationInputSchema,
@@ -543,7 +551,10 @@ export {
543
551
  TimestampsSchema,
544
552
  UpdateBankAccountInputSchema,
545
553
  UpdateDiaryCategoryInputSchema,
554
+ UpdateProfileInputSchema,
546
555
  UuidSchema,
556
+ VerifyPasswordInputSchema,
557
+ VerifyPasswordOutputSchema,
547
558
  acknowledgeContract,
548
559
  acknowledgeDiaryEntryContract,
549
560
  approveContract,
@@ -611,6 +622,7 @@ export {
611
622
  getByStudentContract,
612
623
  getEntryContract,
613
624
  getMeContract,
625
+ getProfileContract,
614
626
  getResponseSummaryContract,
615
627
  getStaffByIdContract,
616
628
  getStudentByIdContract,
@@ -690,6 +702,8 @@ export {
690
702
  switchBranchContract,
691
703
  updateBankAccountContract,
692
704
  updateCategoryContract,
693
- updateStaffStatusContract
705
+ updateProfileContract,
706
+ updateStaffStatusContract,
707
+ verifyPasswordContract
694
708
  };
695
709
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/roles/helpers.ts","../src/permissions/index.ts"],"sourcesContent":["/**\n * Brite Future Schools — bfs-contracts\n * Role helper functions.\n *\n * Every helper takes a SessionUser and returns a boolean.\n * Use these instead of hardcoded role string comparisons everywhere.\n *\n * Usage:\n * import { isProprietor, isHeadTeacher } from '@brite-future-schools-contracts/contracts'\n * if (isProprietor(user)) { ... }\n *\n * Phase History:\n * Phase 0.1 (2026-06-05): Initial creation\n * Phase 0.2 (2026-06-06): Roles reconciled against schema — added\n * SCHOOL_NURSE, LAB_TECHNICIAN, SPORTS_COACH,\n * CARETAKER, SECURITY, KITCHEN_STAFF, IT_ADMIN,\n * ORG_SPONSOR, INDIVIDUAL_SPONSOR, KITCHEN_MANAGER,\n * BOARDING_MASTER, PREFECT\n * Phase 6 (2026-07-10): hasRole and hasSubRole unified — helpers that can\n * appear as either a primary role or a subRole now\n * check both. Fixes CLASS_TEACHER, HOD, and others\n * assigned via the subRole system. isStaff fixed\n * to use null-safe branch check.\n *\n * @module src/roles/helpers\n * @since Phase 0.1\n */\n\nimport type { RoleName, SessionUser } from './types.js'\n\n// ── Organisation-scoped roles ─────────────────────────────────────────────────\n// These roles operate across the entire organisation, not a single branch.\n// A user's assignment row still records the branchId it was created against\n// (every role assignment needs one), but that value must never be used to\n// gate whether the role \"counts\" in a different branch context — a\n// Proprietor, Director, or System Admin is one everywhere, regardless of\n// which branch they're currently viewing.\nconst ORG_SCOPED_ROLES: ReadonlySet<string> = new Set([\n 'PROPRIETOR',\n 'DIRECTOR',\n 'SYSTEM_ADMIN',\n])\n\n// ── Private helpers ────────────────────────────────────────────────────────────\n\n/** Check primary roles — branch-scoped, null-safe, except for org-scoped roles. */\nfunction hasRole(user: SessionUser, role: RoleName): boolean {\n if (ORG_SCOPED_ROLES.has(role)) {\n return user.roles.some((r) => r.name === role)\n }\n return user.roles.some(\n (r) =>\n r.name === role &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n}\n\n/** Check subRoles — branch-scoped, null-safe. */\nfunction hasSubRole(user: SessionUser, code: string): boolean {\n return (user.subRoles ?? []).some(\n (r) =>\n r.code === code &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n}\n\n/** Check either primary role OR subRole — use for roles that can be assigned either way. */\nfunction hasRoleOrSubRole(user: SessionUser, code: string): boolean {\n return hasRole(user, code as RoleName) || hasSubRole(user, code)\n}\n\n// ── Senior leadership ──────────────────────────────────────────────────────────\n\nexport function isProprietor(user: SessionUser): boolean {\n return hasRole(user, 'PROPRIETOR')\n}\n\nexport function isDirector(user: SessionUser): boolean {\n return hasRole(user, 'DIRECTOR')\n}\n\nexport function isSystemAdmin(user: SessionUser): boolean {\n return hasRole(user, 'SYSTEM_ADMIN')\n}\n\nexport function isHeadTeacher(user: SessionUser): boolean {\n return hasRole(user, 'HEAD_TEACHER')\n}\n\nexport function isDeputyHeadTeacher(user: SessionUser): boolean {\n return hasRole(user, 'DEPUTY_HEAD_TEACHER')\n}\n\nexport function isSeniorLeadership(user: SessionUser): boolean {\n return (\n isProprietor(user) ||\n isDirector(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user)\n )\n}\n\n// ── Academic staff ─────────────────────────────────────────────────────────────\n\nexport function isHOD(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'HOD')\n}\n\nexport function isClassTeacher(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'CLASS_TEACHER')\n}\n\nexport function isSubjectTeacher(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SUBJECT_TEACHER')\n}\n\n// ── Support staff ──────────────────────────────────────────────────────────────\n\nexport function isSchoolNurse(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SCHOOL_NURSE')\n}\n\nexport function isLibrarian(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'LIBRARIAN')\n}\n\nexport function isLabTechnician(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'LAB_TECHNICIAN')\n}\n\nexport function isSportsCoach(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SPORTS_COACH')\n}\n\nexport function isCounsellor(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'COUNSELLOR')\n}\n\nexport function isCaretaker(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'CARETAKER')\n}\n\nexport function isSecurity(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SECURITY')\n}\n\nexport function isBoardingMaster(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'BOARDING_MASTER')\n}\n\n// ── Operations ─────────────────────────────────────────────────────────────────\n\nexport function isBursar(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'BURSAR')\n}\n\nexport function isHrAdmin(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'HR_ADMIN')\n}\n\nexport function isDriver(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'DRIVER')\n}\n\nexport function isKitchenStaff(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'KITCHEN_STAFF')\n}\n\nexport function isKitchenManager(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'KITCHEN_MANAGER')\n}\n\nexport function isItAdmin(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'IT_ADMIN')\n}\n\n// ── Students and parents ───────────────────────────────────────────────────────\n\nexport function isPrefect(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'PREFECT')\n}\n\nexport function isStudent(user: SessionUser): boolean {\n return hasRole(user, 'STUDENT')\n}\n\nexport function isParent(user: SessionUser): boolean {\n return hasRole(user, 'PARENT')\n}\n\n// ── Sponsors ───────────────────────────────────────────────────────────────────\n\nexport function isOrgSponsor(user: SessionUser): boolean {\n return hasRole(user, 'ORG_SPONSOR')\n}\n\nexport function isIndividualSponsor(user: SessionUser): boolean {\n return hasRole(user, 'INDIVIDUAL_SPONSOR')\n}\n\n// ── Broad groupings ────────────────────────────────────────────────────────────\n\nexport function isStaff(user: SessionUser): boolean {\n const staffRoles: RoleName[] = [\n 'PROPRIETOR', 'DIRECTOR', 'SYSTEM_ADMIN', 'HEAD_TEACHER', 'DEPUTY_HEAD_TEACHER',\n 'HOD', 'CLASS_TEACHER', 'SUBJECT_TEACHER', 'BURSAR', 'HR_ADMIN',\n 'SCHOOL_NURSE', 'LIBRARIAN', 'LAB_TECHNICIAN', 'SPORTS_COACH',\n 'COUNSELLOR', 'CARETAKER', 'SECURITY', 'KITCHEN_STAFF', 'KITCHEN_MANAGER',\n 'DRIVER', 'IT_ADMIN', 'BOARDING_MASTER', 'PREFECT',\n ]\n return (\n user.roles.some(\n (r) =>\n staffRoles.includes(r.name) &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n ) ||\n (user.subRoles ?? []).some(\n (r) =>\n staffRoles.includes(r.code as RoleName) &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n )\n}","/**\n * Brite Future Schools — bfs-contracts\n * Permission helper functions.\n *\n * Answer \"can this user do X?\" — not \"is this user role Y?\".\n * Every UI gate and API guard must use these instead of raw role checks.\n *\n * Phase History:\n * Phase 2 (2026-06-08): Initial creation — attendance, staff, students,\n * dashboard permissions\n * Phase 3 (2026-06-10): Added canAssignClassTeacher, canViewClasses\n * Phase 5 (2026-06-21): Added HR, payroll, leave, qualification,\n * tax config, and salary permissions\n * Phase 6 (2026-06-22): Added transport permissions\n *\n * @module src/permissions/index\n * @since Phase 2\n */\n\nimport type { SessionUser } from '../roles/types.js'\nimport {\n isProprietor,\n isDirector,\n isSystemAdmin,\n isHeadTeacher,\n isDeputyHeadTeacher,\n isHOD,\n isClassTeacher,\n isHrAdmin,\n isStudent,\n isParent,\n isOrgSponsor,\n isIndividualSponsor,\n isPrefect,\n isBursar,\n isDriver,\n} from '../roles/helpers.js'\n\n// ── Attendance ─────────────────────────────────────────────────────────────────\n\n/** Class teacher marks roll for their own class; senior staff can mark any. */\nexport function canMarkClassAttendance(user: SessionUser): boolean {\n const hasClassTeacherSubRole = user.subRoles?.some(\n (s) => s.code === 'CLASS_TEACHER',\n ) ?? false\n return (\n hasClassTeacherSubRole ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canViewClassAttendance(user: SessionUser): boolean {\n return canMarkClassAttendance(user)\n}\n\nexport function canMarkStaffAttendance(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user)\n )\n}\n\nexport function canViewStaffAttendance(user: SessionUser): boolean {\n return (\n canMarkStaffAttendance(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Staff ──────────────────────────────────────────────────────────────────────\n\nexport function canViewStaffList(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canManageStaff(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Students ───────────────────────────────────────────────────────────────────\n\nexport function canViewStudentList(user: SessionUser): boolean {\n return (\n isClassTeacher(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canManageStudents(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Classes ────────────────────────────────────────────────────────────────────\n\nexport function canViewClasses(user: SessionUser): boolean {\n return (\n isClassTeacher(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canAssignClassTeacher(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Dashboard ──────────────────────────────────────────────────────────────────\n\nexport function canAccessAdminDashboard(user: SessionUser): boolean {\n return (\n !isStudent(user) &&\n !isParent(user) &&\n !isPrefect(user) &&\n !isOrgSponsor(user) &&\n !isIndividualSponsor(user)\n )\n}\n\n// ── Leave ──────────────────────────────────────────────────────────────────────\n\n/** Who can create and manage leave types. */\nexport function canManageLeaveTypes(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** HOD can approve leave for their department (first step). */\nexport function canHodApproveLeave(user: SessionUser): boolean {\n return (\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Final leave approval — Head Teacher and above only. */\nexport function canFinalApproveLeave(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view all leave requests (not just their own). */\nexport function canViewAllLeaveRequests(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Qualifications ─────────────────────────────────────────────────────────────\n\n/** Who can add or edit staff qualification records. */\nexport function canManageQualifications(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can mark a qualification as verified (triggers payroll effect). */\nexport function canVerifyQualification(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Remuneration ───────────────────────────────────────────────────────────────\n\n/** Who can manage salary grades and remuneration items. */\nexport function canManageSalaryStructure(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can assign a salary grade to a staff member. */\nexport function canAssignSalaryGrade(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a staff salary record (moves DRAFT → ACTIVE). */\nexport function canApproveSalary(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Payroll ────────────────────────────────────────────────────────────────────\n\n/** Who can initiate a payroll run. */\nexport function canInitiatePayroll(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a payroll run (moves draft → approved). */\nexport function canApprovePayroll(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can export the payroll run (Equity CSV). */\nexport function canExportPayroll(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view all staff payslips (not just their own). */\nexport function canViewAllPayslips(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view payroll summary across all branches. */\nexport function canViewCrossBranchPayroll(user: SessionUser): boolean {\n return isDirector(user) || isProprietor(user)\n}\n\n// ── Tax configuration ──────────────────────────────────────────────────────────\n\n/** Only SYSTEM_ADMIN can edit statutory tax rates. */\nexport function canEditTaxConfig(user: SessionUser): boolean {\n return isSystemAdmin(user)\n}\n\n// ── Transport ──────────────────────────────────────────────────────────────────\n\n/** Who can create, edit, and delete vehicles. */\nexport function canManageFleet(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can view the full fleet list. */\nexport function canViewFleet(user: SessionUser): boolean {\n return (\n canManageFleet(user) ||\n isHrAdmin(user)\n )\n}\n\n/** Who can manage routes and stops. */\nexport function canManageRoutes(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can view the transport module at all. */\nexport function canViewTransport(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isBursar(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can create and manage trip logs. */\nexport function canManageTrips(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Driver marks boardings on their own trip. */\nexport function canMarkBoardings(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can submit a fuel log entry. */\nexport function canSubmitFuelLog(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a fuel log entry. */\nexport function canApproveFuelLog(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can submit a vehicle maintenance request. */\nexport function canSubmitMaintenanceRequest(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can review and resolve maintenance requests. */\nexport function canReviewMaintenance(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can review transport applications (route enrolment). */\nexport function canReviewTransportApplication(user: SessionUser): boolean {\n return (\n isBursar(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/**\n * Drivers see only their own vehicle and trips.\n * Returns true if the user is purely a driver with no senior role.\n */\nexport function isScopedToOwnVehicle(user: SessionUser): boolean {\n return (\n isDriver(user) &&\n !isHeadTeacher(user) &&\n !isDeputyHeadTeacher(user) &&\n !isDirector(user) &&\n !isProprietor(user) &&\n !isSystemAdmin(user)\n )\n}"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/roles/helpers.ts","../src/permissions/index.ts"],"sourcesContent":["/**\n * Brite Future Schools — bfs-contracts\n * Role helper functions.\n *\n * Every helper takes a SessionUser and returns a boolean.\n * Use these instead of hardcoded role string comparisons everywhere.\n *\n * Usage:\n * import { isProprietor, isHeadTeacher } from '@brite-future-schools-contracts/contracts'\n * if (isProprietor(user)) { ... }\n *\n * Phase History:\n * Phase 0.1 (2026-06-05): Initial creation\n * Phase 0.2 (2026-06-06): Roles reconciled against schema — added\n * SCHOOL_NURSE, LAB_TECHNICIAN, SPORTS_COACH,\n * CARETAKER, SECURITY, KITCHEN_STAFF, IT_ADMIN,\n * ORG_SPONSOR, INDIVIDUAL_SPONSOR, KITCHEN_MANAGER,\n * BOARDING_MASTER, PREFECT\n * Phase 6 (2026-07-10): hasRole and hasSubRole unified — helpers that can\n * appear as either a primary role or a subRole now\n * check both. Fixes CLASS_TEACHER, HOD, and others\n * assigned via the subRole system. isStaff fixed\n * to use null-safe branch check.\n *\n * @module src/roles/helpers\n * @since Phase 0.1\n */\n\nimport type { RoleName, SessionUser } from './types.js'\n\n// ── Organisation-scoped roles ─────────────────────────────────────────────────\n// These roles operate across the entire organisation, not a single branch.\n// A user's assignment row still records the branchId it was created against\n// (every role assignment needs one), but that value must never be used to\n// gate whether the role \"counts\" in a different branch context — a\n// Proprietor, Director, or System Admin is one everywhere, regardless of\n// which branch they're currently viewing.\nconst ORG_SCOPED_ROLES: ReadonlySet<string> = new Set([\n 'PROPRIETOR',\n 'DIRECTOR',\n 'SYSTEM_ADMIN',\n])\n\n// ── Private helpers ────────────────────────────────────────────────────────────\n\n/** Check primary roles — branch-scoped, null-safe, except for org-scoped roles. */\nfunction hasRole(user: SessionUser, role: RoleName): boolean {\n if (ORG_SCOPED_ROLES.has(role)) {\n return user.roles.some((r) => r.name === role)\n }\n return user.roles.some(\n (r) =>\n r.name === role &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n}\n\n/** Check subRoles — branch-scoped, null-safe. */\nfunction hasSubRole(user: SessionUser, code: string): boolean {\n return (user.subRoles ?? []).some(\n (r) =>\n r.code === code &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n}\n\n/** Check either primary role OR subRole — use for roles that can be assigned either way. */\nfunction hasRoleOrSubRole(user: SessionUser, code: string): boolean {\n return hasRole(user, code as RoleName) || hasSubRole(user, code)\n}\n\n// ── Senior leadership ──────────────────────────────────────────────────────────\n\nexport function isProprietor(user: SessionUser): boolean {\n return hasRole(user, 'PROPRIETOR')\n}\n\nexport function isDirector(user: SessionUser): boolean {\n return hasRole(user, 'DIRECTOR')\n}\n\nexport function isSystemAdmin(user: SessionUser): boolean {\n return hasRole(user, 'SYSTEM_ADMIN')\n}\n\nexport function isHeadTeacher(user: SessionUser): boolean {\n return hasRole(user, 'HEAD_TEACHER')\n}\n\nexport function isDeputyHeadTeacher(user: SessionUser): boolean {\n return hasRole(user, 'DEPUTY_HEAD_TEACHER')\n}\n\nexport function isSeniorLeadership(user: SessionUser): boolean {\n return (\n isProprietor(user) ||\n isDirector(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user)\n )\n}\n\n// ── Academic staff ─────────────────────────────────────────────────────────────\n\nexport function isHOD(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'HOD')\n}\n\nexport function isClassTeacher(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'CLASS_TEACHER')\n}\n\nexport function isSubjectTeacher(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SUBJECT_TEACHER')\n}\n\n// ── Support staff ──────────────────────────────────────────────────────────────\n\nexport function isSchoolNurse(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SCHOOL_NURSE')\n}\n\nexport function isLibrarian(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'LIBRARIAN')\n}\n\nexport function isLabTechnician(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'LAB_TECHNICIAN')\n}\n\nexport function isSportsCoach(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SPORTS_COACH')\n}\n\nexport function isCounsellor(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'COUNSELLOR')\n}\n\nexport function isCaretaker(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'CARETAKER')\n}\n\nexport function isSecurity(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SECURITY')\n}\n\nexport function isBoardingMaster(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'BOARDING_MASTER')\n}\n\n// ── Operations ─────────────────────────────────────────────────────────────────\n\nexport function isBursar(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'BURSAR')\n}\n\nexport function isHrAdmin(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'HR_ADMIN')\n}\n\nexport function isDriver(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'DRIVER')\n}\n\nexport function isKitchenStaff(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'KITCHEN_STAFF')\n}\n\nexport function isKitchenManager(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'KITCHEN_MANAGER')\n}\n\nexport function isItAdmin(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'IT_ADMIN')\n}\n\n// ── Students and parents ───────────────────────────────────────────────────────\n\nexport function isPrefect(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'PREFECT')\n}\n\nexport function isStudent(user: SessionUser): boolean {\n return hasRole(user, 'STUDENT')\n}\n\nexport function isParent(user: SessionUser): boolean {\n return hasRole(user, 'PARENT')\n}\n\n// ── Sponsors ───────────────────────────────────────────────────────────────────\n\nexport function isOrgSponsor(user: SessionUser): boolean {\n return hasRole(user, 'ORG_SPONSOR')\n}\n\nexport function isIndividualSponsor(user: SessionUser): boolean {\n return hasRole(user, 'INDIVIDUAL_SPONSOR')\n}\n\n// ── Broad groupings ────────────────────────────────────────────────────────────\n\nexport function isStaff(user: SessionUser): boolean {\n const staffRoles: RoleName[] = [\n 'PROPRIETOR', 'DIRECTOR', 'SYSTEM_ADMIN', 'HEAD_TEACHER', 'DEPUTY_HEAD_TEACHER',\n 'HOD', 'CLASS_TEACHER', 'SUBJECT_TEACHER', 'BURSAR', 'HR_ADMIN',\n 'SCHOOL_NURSE', 'LIBRARIAN', 'LAB_TECHNICIAN', 'SPORTS_COACH',\n 'COUNSELLOR', 'CARETAKER', 'SECURITY', 'KITCHEN_STAFF', 'KITCHEN_MANAGER',\n 'DRIVER', 'IT_ADMIN', 'BOARDING_MASTER', 'PREFECT',\n ]\n return (\n user.roles.some(\n (r) =>\n staffRoles.includes(r.name) &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n ) ||\n (user.subRoles ?? []).some(\n (r) =>\n staffRoles.includes(r.code as RoleName) &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n )\n}","/**\n * Brite Future Schools — bfs-contracts\n * Permission helper functions.\n *\n * Answer \"can this user do X?\" — not \"is this user role Y?\".\n * Every UI gate and API guard must use these instead of raw role checks.\n *\n * Phase History:\n * Phase 2 (2026-06-08): Initial creation — attendance, staff, students,\n * dashboard permissions\n * Phase 3 (2026-06-10): Added canAssignClassTeacher, canViewClasses\n * Phase 5 (2026-06-21): Added HR, payroll, leave, qualification,\n * tax config, and salary permissions\n * Phase 6 (2026-06-22): Added transport permissions\n *\n * @module src/permissions/index\n * @since Phase 2\n */\n\nimport type { SessionUser } from '../roles/types.js'\nimport {\n isProprietor,\n isDirector,\n isSystemAdmin,\n isHeadTeacher,\n isDeputyHeadTeacher,\n isHOD,\n isClassTeacher,\n isHrAdmin,\n isStudent,\n isParent,\n isOrgSponsor,\n isIndividualSponsor,\n isPrefect,\n isBursar,\n isDriver,\n} from '../roles/helpers.js'\n\n// ── Attendance ─────────────────────────────────────────────────────────────────\n\n/** Class teacher marks roll for their own class; senior staff can mark any. */\nexport function canMarkClassAttendance(user: SessionUser): boolean {\n const hasClassTeacherSubRole = user.subRoles?.some(\n (s) => s.code === 'CLASS_TEACHER',\n ) ?? false\n return (\n hasClassTeacherSubRole ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canViewClassAttendance(user: SessionUser): boolean {\n return canMarkClassAttendance(user)\n}\n\nexport function canMarkStaffAttendance(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user)\n )\n}\n\nexport function canViewStaffAttendance(user: SessionUser): boolean {\n return (\n canMarkStaffAttendance(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Staff ──────────────────────────────────────────────────────────────────────\n\nexport function canViewStaffList(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canManageStaff(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Students ───────────────────────────────────────────────────────────────────\n\nexport function canViewStudentList(user: SessionUser): boolean {\n return (\n isClassTeacher(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canManageStudents(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Classes ────────────────────────────────────────────────────────────────────\n\nexport function canViewClasses(user: SessionUser): boolean {\n return (\n isClassTeacher(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canAssignClassTeacher(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Dashboard ──────────────────────────────────────────────────────────────────\n\nexport function canAccessAdminDashboard(user: SessionUser): boolean {\n return (\n !isStudent(user) &&\n !isParent(user) &&\n !isPrefect(user) &&\n !isOrgSponsor(user) &&\n !isIndividualSponsor(user)\n )\n}\n\n// ── Leave ──────────────────────────────────────────────────────────────────────\n\n/** Who can create and manage leave types. */\nexport function canManageLeaveTypes(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** HOD can approve leave for their department (first step). */\nexport function canHodApproveLeave(user: SessionUser): boolean {\n return (\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Final leave approval — Head Teacher and above only. */\nexport function canFinalApproveLeave(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view all leave requests (not just their own). */\nexport function canViewAllLeaveRequests(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Qualifications ─────────────────────────────────────────────────────────────\n\n/** Who can add or edit staff qualification records. */\nexport function canManageQualifications(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can mark a qualification as verified (triggers payroll effect). */\nexport function canVerifyQualification(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Remuneration ───────────────────────────────────────────────────────────────\n\n/** Who can manage salary grades and remuneration items. */\nexport function canManageSalaryStructure(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can assign a salary grade to a staff member. */\nexport function canAssignSalaryGrade(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a staff salary record (moves DRAFT → ACTIVE). */\nexport function canApproveSalary(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Payroll ────────────────────────────────────────────────────────────────────\n\n/** Who can initiate a payroll run. */\nexport function canInitiatePayroll(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a payroll run (moves draft → approved). */\nexport function canApprovePayroll(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can export the payroll run (Equity CSV). */\nexport function canExportPayroll(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view all staff payslips (not just their own). */\nexport function canViewAllPayslips(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view payroll summary across all branches. */\nexport function canViewCrossBranchPayroll(user: SessionUser): boolean {\n return isDirector(user) || isProprietor(user)\n}\n\n// ── Tax configuration ──────────────────────────────────────────────────────────\n\n/** Only SYSTEM_ADMIN can edit statutory tax rates. */\nexport function canEditTaxConfig(user: SessionUser): boolean {\n return isSystemAdmin(user)\n}\n\n// ── Transport ──────────────────────────────────────────────────────────────────\n\n/** Who can create, edit, and delete vehicles. */\nexport function canManageFleet(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can view the full fleet list. */\nexport function canViewFleet(user: SessionUser): boolean {\n return (\n canManageFleet(user) ||\n isHrAdmin(user)\n )\n}\n\n/** Who can manage routes and stops. */\nexport function canManageRoutes(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can view the transport module at all. */\nexport function canViewTransport(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isBursar(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can create and manage trip logs. */\nexport function canManageTrips(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Driver marks boardings on their own trip. */\nexport function canMarkBoardings(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can submit a fuel log entry. */\nexport function canSubmitFuelLog(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a fuel log entry. */\nexport function canApproveFuelLog(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can submit a vehicle maintenance request. */\nexport function canSubmitMaintenanceRequest(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can review and resolve maintenance requests. */\nexport function canReviewMaintenance(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can review transport applications (route enrolment). */\nexport function canReviewTransportApplication(user: SessionUser): boolean {\n return (\n isBursar(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/**\n * Drivers see only their own vehicle and trips.\n * Returns true if the user is purely a driver with no senior role.\n */\nexport function isScopedToOwnVehicle(user: SessionUser): boolean {\n return (\n isDriver(user) &&\n !isHeadTeacher(user) &&\n !isDeputyHeadTeacher(user) &&\n !isDirector(user) &&\n !isProprietor(user) &&\n !isSystemAdmin(user)\n )\n}"],"mappings":"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","names":[]}
@@ -103,6 +103,7 @@ __export(schemas_exports, {
103
103
  PaginationInputSchema: () => PaginationInputSchema,
104
104
  PortalBlockSchema: () => PortalBlockSchema,
105
105
  PortalBlockTypeSchema: () => PortalBlockTypeSchema,
106
+ ProfileOutputSchema: () => ProfileOutputSchema,
106
107
  RefreshTokenInputSchema: () => RefreshTokenInputSchema,
107
108
  RefreshTokenOutputSchema: () => RefreshTokenOutputSchema,
108
109
  RejectNotificationInputSchema: () => RejectNotificationInputSchema,
@@ -130,7 +131,10 @@ __export(schemas_exports, {
130
131
  TimestampsSchema: () => TimestampsSchema,
131
132
  UpdateBankAccountInputSchema: () => UpdateBankAccountInputSchema,
132
133
  UpdateDiaryCategoryInputSchema: () => UpdateDiaryCategoryInputSchema,
134
+ UpdateProfileInputSchema: () => UpdateProfileInputSchema,
133
135
  UuidSchema: () => UuidSchema,
136
+ VerifyPasswordInputSchema: () => VerifyPasswordInputSchema,
137
+ VerifyPasswordOutputSchema: () => VerifyPasswordOutputSchema,
134
138
  paginatedOutputSchema: () => paginatedOutputSchema
135
139
  });
136
140
  module.exports = __toCommonJS(schemas_exports);
@@ -239,6 +243,27 @@ var ResetPasswordInputSchema = z2.object({
239
243
  var SwitchBranchInputSchema = z2.object({
240
244
  branchId: z2.string().uuid().meta({ description: "Branch to switch the active session to" })
241
245
  });
246
+ var VerifyPasswordInputSchema = z2.object({
247
+ password: z2.string().min(1).meta({ description: "User's current password, for step-up confirmation" })
248
+ });
249
+ var VerifyPasswordOutputSchema = z2.object({
250
+ valid: z2.boolean()
251
+ });
252
+ var ProfileOutputSchema = z2.object({
253
+ id: z2.string().uuid(),
254
+ email: z2.email(),
255
+ firstName: z2.string(),
256
+ middleName: z2.string().nullable(),
257
+ lastName: z2.string(),
258
+ phone: z2.string().nullable(),
259
+ avatarUrl: z2.string().nullable()
260
+ });
261
+ var UpdateProfileInputSchema = z2.object({
262
+ firstName: z2.string().min(1),
263
+ middleName: z2.string().optional(),
264
+ lastName: z2.string().min(1),
265
+ phone: z2.string().regex(/^\+[1-9]\d{1,14}$/, { error: "Phone must be in E.164 format, e.g. +254712345678" })
266
+ });
242
267
 
243
268
  // src/schemas/hr.ts
244
269
  var z3 = __toESM(require("zod"), 1);
@@ -1052,6 +1077,7 @@ var CreateGradeInputSchema = z10.object({
1052
1077
  PaginationInputSchema,
1053
1078
  PortalBlockSchema,
1054
1079
  PortalBlockTypeSchema,
1080
+ ProfileOutputSchema,
1055
1081
  RefreshTokenInputSchema,
1056
1082
  RefreshTokenOutputSchema,
1057
1083
  RejectNotificationInputSchema,
@@ -1079,7 +1105,10 @@ var CreateGradeInputSchema = z10.object({
1079
1105
  TimestampsSchema,
1080
1106
  UpdateBankAccountInputSchema,
1081
1107
  UpdateDiaryCategoryInputSchema,
1108
+ UpdateProfileInputSchema,
1082
1109
  UuidSchema,
1110
+ VerifyPasswordInputSchema,
1111
+ VerifyPasswordOutputSchema,
1083
1112
  paginatedOutputSchema
1084
1113
  });
1085
1114
  //# sourceMappingURL=index.cjs.map