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

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, 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';
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, ConfirmEmailChangeInput, ConfirmEmailChangeInputSchema, 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, RequestEmailChangeInput, RequestEmailChangeInputSchema, 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, confirmEmailChangeContract, 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, requestEmailChangeContract, 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, 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';
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, ConfirmEmailChangeInput, ConfirmEmailChangeInputSchema, 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, RequestEmailChangeInput, RequestEmailChangeInputSchema, 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, confirmEmailChangeContract, 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, requestEmailChangeContract, 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
@@ -13,6 +13,7 @@ import {
13
13
  calendarListTermsContract,
14
14
  cancelContract,
15
15
  changePasswordContract,
16
+ confirmEmailChangeContract,
16
17
  createBankAccountContract,
17
18
  createCategoryContract,
18
19
  createDepartmentContract,
@@ -63,6 +64,7 @@ import {
63
64
  notificationsContract,
64
65
  refreshTokenContract,
65
66
  rejectContract,
67
+ requestEmailChangeContract,
66
68
  requestLiftContract,
67
69
  requestPasswordResetContract,
68
70
  resetPasswordContract,
@@ -82,7 +84,7 @@ import {
82
84
  updateProfileContract,
83
85
  updateStaffStatusContract,
84
86
  verifyPasswordContract
85
- } from "./chunk-KTEC74C2.js";
87
+ } from "./chunk-C4UISE2G.js";
86
88
  import {
87
89
  AcademicTermSchema,
88
90
  AcademicYearSchema,
@@ -100,6 +102,7 @@ import {
100
102
  ChangePasswordInputSchema,
101
103
  ClassAttendanceRowSchema,
102
104
  ClassSummarySchema,
105
+ ConfirmEmailChangeInputSchema,
103
106
  CreateBankAccountInputSchema,
104
107
  CreateDepartmentInputSchema,
105
108
  CreateDiaryCategoryInputSchema,
@@ -161,6 +164,7 @@ import {
161
164
  RefreshTokenInputSchema,
162
165
  RefreshTokenOutputSchema,
163
166
  RejectNotificationInputSchema,
167
+ RequestEmailChangeInputSchema,
164
168
  RequestPasswordResetInputSchema,
165
169
  ResetPasswordInputSchema,
166
170
  RespondToBlockInputSchema,
@@ -190,7 +194,7 @@ import {
190
194
  VerifyPasswordInputSchema,
191
195
  VerifyPasswordOutputSchema,
192
196
  paginatedOutputSchema
193
- } from "./chunk-VNZGHQ6T.js";
197
+ } from "./chunk-FFST2NEY.js";
194
198
 
195
199
  // src/roles/helpers.ts
196
200
  var ORG_SCOPED_ROLES = /* @__PURE__ */ new Set([
@@ -466,6 +470,7 @@ export {
466
470
  ChangePasswordInputSchema,
467
471
  ClassAttendanceRowSchema,
468
472
  ClassSummarySchema,
473
+ ConfirmEmailChangeInputSchema,
469
474
  CreateBankAccountInputSchema,
470
475
  CreateDepartmentInputSchema,
471
476
  CreateDiaryCategoryInputSchema,
@@ -527,6 +532,7 @@ export {
527
532
  RefreshTokenInputSchema,
528
533
  RefreshTokenOutputSchema,
529
534
  RejectNotificationInputSchema,
535
+ RequestEmailChangeInputSchema,
530
536
  RequestPasswordResetInputSchema,
531
537
  ResetPasswordInputSchema,
532
538
  RespondToBlockInputSchema,
@@ -605,6 +611,7 @@ export {
605
611
  canViewTransport,
606
612
  cancelContract,
607
613
  changePasswordContract,
614
+ confirmEmailChangeContract,
608
615
  createBankAccountContract,
609
616
  createCategoryContract,
610
617
  createDepartmentContract,
@@ -686,6 +693,7 @@ export {
686
693
  paginatedOutputSchema,
687
694
  refreshTokenContract,
688
695
  rejectContract,
696
+ requestEmailChangeContract,
689
697
  requestLiftContract,
690
698
  requestPasswordResetContract,
691
699
  resetPasswordContract,
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":[]}
@@ -46,6 +46,7 @@ __export(schemas_exports, {
46
46
  ChangePasswordInputSchema: () => ChangePasswordInputSchema,
47
47
  ClassAttendanceRowSchema: () => ClassAttendanceRowSchema,
48
48
  ClassSummarySchema: () => ClassSummarySchema,
49
+ ConfirmEmailChangeInputSchema: () => ConfirmEmailChangeInputSchema,
49
50
  CreateBankAccountInputSchema: () => CreateBankAccountInputSchema,
50
51
  CreateDepartmentInputSchema: () => CreateDepartmentInputSchema,
51
52
  CreateDiaryCategoryInputSchema: () => CreateDiaryCategoryInputSchema,
@@ -107,6 +108,7 @@ __export(schemas_exports, {
107
108
  RefreshTokenInputSchema: () => RefreshTokenInputSchema,
108
109
  RefreshTokenOutputSchema: () => RefreshTokenOutputSchema,
109
110
  RejectNotificationInputSchema: () => RejectNotificationInputSchema,
111
+ RequestEmailChangeInputSchema: () => RequestEmailChangeInputSchema,
110
112
  RequestPasswordResetInputSchema: () => RequestPasswordResetInputSchema,
111
113
  ResetPasswordInputSchema: () => ResetPasswordInputSchema,
112
114
  RespondToBlockInputSchema: () => RespondToBlockInputSchema,
@@ -264,6 +266,13 @@ var UpdateProfileInputSchema = z2.object({
264
266
  lastName: z2.string().min(1),
265
267
  phone: z2.string().regex(/^\+[1-9]\d{1,14}$/, { error: "Phone must be in E.164 format, e.g. +254712345678" })
266
268
  });
269
+ var RequestEmailChangeInputSchema = z2.object({
270
+ newEmail: z2.email().meta({ description: "The email address to change to" }),
271
+ password: z2.string().min(1).meta({ description: "Current password \u2014 required to authorize the change" })
272
+ });
273
+ var ConfirmEmailChangeInputSchema = z2.object({
274
+ token: z2.string().min(1).meta({ description: "One-time token from the confirmation email link" })
275
+ });
267
276
 
268
277
  // src/schemas/hr.ts
269
278
  var z3 = __toESM(require("zod"), 1);
@@ -1020,6 +1029,7 @@ var CreateGradeInputSchema = z10.object({
1020
1029
  ChangePasswordInputSchema,
1021
1030
  ClassAttendanceRowSchema,
1022
1031
  ClassSummarySchema,
1032
+ ConfirmEmailChangeInputSchema,
1023
1033
  CreateBankAccountInputSchema,
1024
1034
  CreateDepartmentInputSchema,
1025
1035
  CreateDiaryCategoryInputSchema,
@@ -1081,6 +1091,7 @@ var CreateGradeInputSchema = z10.object({
1081
1091
  RefreshTokenInputSchema,
1082
1092
  RefreshTokenOutputSchema,
1083
1093
  RejectNotificationInputSchema,
1094
+ RequestEmailChangeInputSchema,
1084
1095
  RequestPasswordResetInputSchema,
1085
1096
  ResetPasswordInputSchema,
1086
1097
  RespondToBlockInputSchema,