grm-shared-library 1.1.220 → 1.1.222

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/README.md +17 -0
  2. package/dist/cjs/index.js +1 -0
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/kafka/topics.js +10 -1
  5. package/dist/cjs/kafka/topics.js.map +1 -1
  6. package/dist/cjs/modules/alert-dispatch/dtos/guardian-audience.dto.js +41 -0
  7. package/dist/cjs/modules/alert-dispatch/dtos/guardian-audience.dto.js.map +1 -0
  8. package/dist/cjs/modules/alert-dispatch/index.js +4 -0
  9. package/dist/cjs/modules/alert-dispatch/index.js.map +1 -1
  10. package/dist/cjs/modules/alert-dispatch/interfaces/guardian-audience.js +3 -0
  11. package/dist/cjs/modules/alert-dispatch/interfaces/guardian-audience.js.map +1 -0
  12. package/dist/cjs/modules/alert-dispatch/utils/guardian-audience.util.js +63 -0
  13. package/dist/cjs/modules/alert-dispatch/utils/guardian-audience.util.js.map +1 -0
  14. package/dist/cjs/modules/common/constants/service.const.js +1 -0
  15. package/dist/cjs/modules/common/constants/service.const.js.map +1 -1
  16. package/dist/cjs/modules/gis/dtos/private-trip.dto.js +180 -0
  17. package/dist/cjs/modules/gis/dtos/private-trip.dto.js.map +1 -0
  18. package/dist/cjs/modules/gis/enums/trip-privacy.enum.js +28 -0
  19. package/dist/cjs/modules/gis/enums/trip-privacy.enum.js.map +1 -0
  20. package/dist/cjs/modules/gis/index.js +3 -0
  21. package/dist/cjs/modules/gis/index.js.map +1 -1
  22. package/dist/cjs/modules/gis/interfaces/trip-summary.js +3 -0
  23. package/dist/cjs/modules/gis/interfaces/trip-summary.js.map +1 -0
  24. package/dist/cjs/modules/incident/dtos/incident/incident.dto.js +22 -0
  25. package/dist/cjs/modules/incident/dtos/incident/incident.dto.js.map +1 -1
  26. package/dist/cjs/modules/incident/enums/incident-origin-type.enum.js +17 -0
  27. package/dist/cjs/modules/incident/enums/incident-origin-type.enum.js.map +1 -0
  28. package/dist/cjs/modules/incident/index.js +1 -0
  29. package/dist/cjs/modules/incident/index.js.map +1 -1
  30. package/dist/cjs/modules/organization/index.js +1 -0
  31. package/dist/cjs/modules/organization/index.js.map +1 -1
  32. package/dist/cjs/modules/organization/interfaces/organization-created-event.js +3 -0
  33. package/dist/cjs/modules/organization/interfaces/organization-created-event.js.map +1 -0
  34. package/dist/cjs/modules/permission/data/permissions.data.js +12 -1
  35. package/dist/cjs/modules/permission/data/permissions.data.js.map +1 -1
  36. package/dist/cjs/modules/permission/enums/permission-actions.enum.js +28 -1
  37. package/dist/cjs/modules/permission/enums/permission-actions.enum.js.map +1 -1
  38. package/dist/cjs/modules/permission/enums/permissions-module.enum.js +1 -0
  39. package/dist/cjs/modules/permission/enums/permissions-module.enum.js.map +1 -1
  40. package/dist/cjs/modules/role/constants/newsfeed-roles.js +28 -0
  41. package/dist/cjs/modules/role/constants/newsfeed-roles.js.map +1 -0
  42. package/dist/cjs/modules/role/constants/safety-roles.js +25 -0
  43. package/dist/cjs/modules/role/constants/safety-roles.js.map +1 -0
  44. package/dist/cjs/modules/role/data/roles.data.js +99 -7
  45. package/dist/cjs/modules/role/data/roles.data.js.map +1 -1
  46. package/dist/cjs/modules/role/index.js +2 -0
  47. package/dist/cjs/modules/role/index.js.map +1 -1
  48. package/dist/cjs/modules/safety/constants/safety-check-limits.const.js +51 -0
  49. package/dist/cjs/modules/safety/constants/safety-check-limits.const.js.map +1 -0
  50. package/dist/cjs/modules/safety/constants/safety-integration.const.js +71 -0
  51. package/dist/cjs/modules/safety/constants/safety-integration.const.js.map +1 -0
  52. package/dist/cjs/modules/safety/constants/safety-taxonomy.const.js +50 -0
  53. package/dist/cjs/modules/safety/constants/safety-taxonomy.const.js.map +1 -0
  54. package/dist/cjs/modules/safety/dtos/safety-admin.dto.js +232 -0
  55. package/dist/cjs/modules/safety/dtos/safety-admin.dto.js.map +1 -0
  56. package/dist/cjs/modules/safety/dtos/safety-check.dto.js +170 -0
  57. package/dist/cjs/modules/safety/dtos/safety-check.dto.js.map +1 -0
  58. package/dist/cjs/modules/safety/dtos/safety-internal.dto.js +162 -0
  59. package/dist/cjs/modules/safety/dtos/safety-internal.dto.js.map +1 -0
  60. package/dist/cjs/modules/safety/enums/safety-check-status.enum.js +45 -0
  61. package/dist/cjs/modules/safety/enums/safety-check-status.enum.js.map +1 -0
  62. package/dist/cjs/modules/safety/enums/safety-enums.js +93 -0
  63. package/dist/cjs/modules/safety/enums/safety-enums.js.map +1 -0
  64. package/dist/cjs/modules/safety/enums/safety-error-code.enum.js +27 -0
  65. package/dist/cjs/modules/safety/enums/safety-error-code.enum.js.map +1 -0
  66. package/dist/cjs/modules/safety/index.js +35 -0
  67. package/dist/cjs/modules/safety/index.js.map +1 -0
  68. package/dist/cjs/modules/safety/interfaces/safety-check-event.js +3 -0
  69. package/dist/cjs/modules/safety/interfaces/safety-check-event.js.map +1 -0
  70. package/dist/cjs/modules/safety/interfaces/safety-check.js +3 -0
  71. package/dist/cjs/modules/safety/interfaces/safety-check.js.map +1 -0
  72. package/dist/cjs/modules/safety/utils/safety-check-state-machine.js +75 -0
  73. package/dist/cjs/modules/safety/utils/safety-check-state-machine.js.map +1 -0
  74. package/dist/cjs/modules/safety/utils/safety-check-timing.util.js +68 -0
  75. package/dist/cjs/modules/safety/utils/safety-check-timing.util.js.map +1 -0
  76. package/dist/cjs/modules/sms/constants/sms-templates.config.js +12 -0
  77. package/dist/cjs/modules/sms/constants/sms-templates.config.js.map +1 -1
  78. package/dist/cjs/modules/sms/enums/sms-template.enum.js +2 -0
  79. package/dist/cjs/modules/sms/enums/sms-template.enum.js.map +1 -1
  80. package/dist/esm/index.js +1 -0
  81. package/dist/esm/index.js.map +1 -1
  82. package/dist/esm/kafka/topics.js +10 -1
  83. package/dist/esm/kafka/topics.js.map +1 -1
  84. package/dist/esm/modules/alert-dispatch/dtos/guardian-audience.dto.js +37 -0
  85. package/dist/esm/modules/alert-dispatch/dtos/guardian-audience.dto.js.map +1 -0
  86. package/dist/esm/modules/alert-dispatch/index.js +4 -0
  87. package/dist/esm/modules/alert-dispatch/index.js.map +1 -1
  88. package/dist/esm/modules/alert-dispatch/interfaces/guardian-audience.js +2 -0
  89. package/dist/esm/modules/alert-dispatch/interfaces/guardian-audience.js.map +1 -0
  90. package/dist/esm/modules/alert-dispatch/utils/guardian-audience.util.js +56 -0
  91. package/dist/esm/modules/alert-dispatch/utils/guardian-audience.util.js.map +1 -0
  92. package/dist/esm/modules/common/constants/service.const.js +1 -0
  93. package/dist/esm/modules/common/constants/service.const.js.map +1 -1
  94. package/dist/esm/modules/gis/dtos/private-trip.dto.js +171 -0
  95. package/dist/esm/modules/gis/dtos/private-trip.dto.js.map +1 -0
  96. package/dist/esm/modules/gis/enums/trip-privacy.enum.js +25 -0
  97. package/dist/esm/modules/gis/enums/trip-privacy.enum.js.map +1 -0
  98. package/dist/esm/modules/gis/index.js +3 -0
  99. package/dist/esm/modules/gis/index.js.map +1 -1
  100. package/dist/esm/modules/gis/interfaces/trip-summary.js +2 -0
  101. package/dist/esm/modules/gis/interfaces/trip-summary.js.map +1 -0
  102. package/dist/esm/modules/incident/dtos/incident/incident.dto.js +23 -1
  103. package/dist/esm/modules/incident/dtos/incident/incident.dto.js.map +1 -1
  104. package/dist/esm/modules/incident/enums/incident-origin-type.enum.js +14 -0
  105. package/dist/esm/modules/incident/enums/incident-origin-type.enum.js.map +1 -0
  106. package/dist/esm/modules/incident/index.js +1 -0
  107. package/dist/esm/modules/incident/index.js.map +1 -1
  108. package/dist/esm/modules/organization/index.js +1 -0
  109. package/dist/esm/modules/organization/index.js.map +1 -1
  110. package/dist/esm/modules/organization/interfaces/organization-created-event.js +2 -0
  111. package/dist/esm/modules/organization/interfaces/organization-created-event.js.map +1 -0
  112. package/dist/esm/modules/permission/data/permissions.data.js +12 -1
  113. package/dist/esm/modules/permission/data/permissions.data.js.map +1 -1
  114. package/dist/esm/modules/permission/enums/permission-actions.enum.js +28 -1
  115. package/dist/esm/modules/permission/enums/permission-actions.enum.js.map +1 -1
  116. package/dist/esm/modules/permission/enums/permissions-module.enum.js +1 -0
  117. package/dist/esm/modules/permission/enums/permissions-module.enum.js.map +1 -1
  118. package/dist/esm/modules/role/constants/newsfeed-roles.js +25 -0
  119. package/dist/esm/modules/role/constants/newsfeed-roles.js.map +1 -0
  120. package/dist/esm/modules/role/constants/safety-roles.js +22 -0
  121. package/dist/esm/modules/role/constants/safety-roles.js.map +1 -0
  122. package/dist/esm/modules/role/data/roles.data.js +99 -7
  123. package/dist/esm/modules/role/data/roles.data.js.map +1 -1
  124. package/dist/esm/modules/role/index.js +2 -0
  125. package/dist/esm/modules/role/index.js.map +1 -1
  126. package/dist/esm/modules/safety/constants/safety-check-limits.const.js +48 -0
  127. package/dist/esm/modules/safety/constants/safety-check-limits.const.js.map +1 -0
  128. package/dist/esm/modules/safety/constants/safety-integration.const.js +67 -0
  129. package/dist/esm/modules/safety/constants/safety-integration.const.js.map +1 -0
  130. package/dist/esm/modules/safety/constants/safety-taxonomy.const.js +45 -0
  131. package/dist/esm/modules/safety/constants/safety-taxonomy.const.js.map +1 -0
  132. package/dist/esm/modules/safety/dtos/safety-admin.dto.js +225 -0
  133. package/dist/esm/modules/safety/dtos/safety-admin.dto.js.map +1 -0
  134. package/dist/esm/modules/safety/dtos/safety-check.dto.js +161 -0
  135. package/dist/esm/modules/safety/dtos/safety-check.dto.js.map +1 -0
  136. package/dist/esm/modules/safety/dtos/safety-internal.dto.js +155 -0
  137. package/dist/esm/modules/safety/dtos/safety-internal.dto.js.map +1 -0
  138. package/dist/esm/modules/safety/enums/safety-check-status.enum.js +42 -0
  139. package/dist/esm/modules/safety/enums/safety-check-status.enum.js.map +1 -0
  140. package/dist/esm/modules/safety/enums/safety-enums.js +90 -0
  141. package/dist/esm/modules/safety/enums/safety-enums.js.map +1 -0
  142. package/dist/esm/modules/safety/enums/safety-error-code.enum.js +24 -0
  143. package/dist/esm/modules/safety/enums/safety-error-code.enum.js.map +1 -0
  144. package/dist/esm/modules/safety/index.js +19 -0
  145. package/dist/esm/modules/safety/index.js.map +1 -0
  146. package/dist/esm/modules/safety/interfaces/safety-check-event.js +2 -0
  147. package/dist/esm/modules/safety/interfaces/safety-check-event.js.map +1 -0
  148. package/dist/esm/modules/safety/interfaces/safety-check.js +2 -0
  149. package/dist/esm/modules/safety/interfaces/safety-check.js.map +1 -0
  150. package/dist/esm/modules/safety/utils/safety-check-state-machine.js +67 -0
  151. package/dist/esm/modules/safety/utils/safety-check-state-machine.js.map +1 -0
  152. package/dist/esm/modules/safety/utils/safety-check-timing.util.js +59 -0
  153. package/dist/esm/modules/safety/utils/safety-check-timing.util.js.map +1 -0
  154. package/dist/esm/modules/sms/constants/sms-templates.config.js +12 -0
  155. package/dist/esm/modules/sms/constants/sms-templates.config.js.map +1 -1
  156. package/dist/esm/modules/sms/enums/sms-template.enum.js +2 -0
  157. package/dist/esm/modules/sms/enums/sms-template.enum.js.map +1 -1
  158. package/dist/types/index.d.ts +1 -0
  159. package/dist/types/kafka/topics.d.ts +4 -0
  160. package/dist/types/modules/alert-dispatch/dtos/guardian-audience.dto.d.ts +6 -0
  161. package/dist/types/modules/alert-dispatch/index.d.ts +3 -0
  162. package/dist/types/modules/alert-dispatch/interfaces/guardian-audience.d.ts +23 -0
  163. package/dist/types/modules/alert-dispatch/utils/guardian-audience.util.d.ts +18 -0
  164. package/dist/types/modules/common/constants/service.const.d.ts +4 -0
  165. package/dist/types/modules/gis/dtos/private-trip.dto.d.ts +42 -0
  166. package/dist/types/modules/gis/enums/trip-privacy.enum.d.ts +22 -0
  167. package/dist/types/modules/gis/index.d.ts +3 -0
  168. package/dist/types/modules/gis/interfaces/client-safe-trip.d.ts +8 -0
  169. package/dist/types/modules/gis/interfaces/trip-summary.d.ts +26 -0
  170. package/dist/types/modules/incident/dtos/incident/incident.dto.d.ts +14 -0
  171. package/dist/types/modules/incident/enums/incident-origin-type.enum.d.ts +12 -0
  172. package/dist/types/modules/incident/index.d.ts +1 -0
  173. package/dist/types/modules/incident/intefaces/incident-category.d.ts +10 -0
  174. package/dist/types/modules/incident/intefaces/incident-type.d.ts +10 -0
  175. package/dist/types/modules/incident/intefaces/incident.d.ts +14 -0
  176. package/dist/types/modules/organization/index.d.ts +1 -0
  177. package/dist/types/modules/organization/interfaces/organization-created-event.d.ts +18 -0
  178. package/dist/types/modules/permission/enums/permission-actions.enum.d.ts +6 -0
  179. package/dist/types/modules/permission/enums/permissions-module.enum.d.ts +2 -1
  180. package/dist/types/modules/role/constants/newsfeed-roles.d.ts +16 -0
  181. package/dist/types/modules/role/constants/safety-roles.d.ts +14 -0
  182. package/dist/types/modules/role/index.d.ts +2 -0
  183. package/dist/types/modules/safety/constants/safety-check-limits.const.d.ts +47 -0
  184. package/dist/types/modules/safety/constants/safety-integration.const.d.ts +64 -0
  185. package/dist/types/modules/safety/constants/safety-taxonomy.const.d.ts +31 -0
  186. package/dist/types/modules/safety/dtos/safety-admin.dto.d.ts +39 -0
  187. package/dist/types/modules/safety/dtos/safety-check.dto.d.ts +38 -0
  188. package/dist/types/modules/safety/dtos/safety-internal.dto.d.ts +51 -0
  189. package/dist/types/modules/safety/enums/safety-check-status.enum.d.ts +40 -0
  190. package/dist/types/modules/safety/enums/safety-enums.d.ts +81 -0
  191. package/dist/types/modules/safety/enums/safety-error-code.enum.d.ts +22 -0
  192. package/dist/types/modules/safety/index.d.ts +13 -0
  193. package/dist/types/modules/safety/interfaces/safety-check-event.d.ts +36 -0
  194. package/dist/types/modules/safety/interfaces/safety-check.d.ts +180 -0
  195. package/dist/types/modules/safety/utils/safety-check-state-machine.d.ts +30 -0
  196. package/dist/types/modules/safety/utils/safety-check-timing.util.d.ts +37 -0
  197. package/dist/types/modules/sms/enums/sms-template.enum.d.ts +2 -0
  198. package/package.json +1 -1
@@ -0,0 +1,180 @@
1
+ import { GuardianAudience } from '../../alert-dispatch/interfaces/guardian-audience';
2
+ import { SafetyCheckStatus } from '../enums/safety-check-status.enum';
3
+ import { SafetyCheckActorType, SafetyCheckAuditEventType, SafetyCheckSosTrigger } from '../enums/safety-enums';
4
+ /** A reason as the app's dropdown shows it. */
5
+ export interface SafetyCheckReasonView {
6
+ id: string;
7
+ code: string;
8
+ label: string;
9
+ description: string | null;
10
+ /** The "Write my own" entry: the user types the reason. */
11
+ isCustom: boolean;
12
+ displayOrder: number;
13
+ }
14
+ /** A reason as the admin manages it. */
15
+ export interface SafetyCheckReasonAdminView extends SafetyCheckReasonView {
16
+ /** Null for a platform-wide reason. */
17
+ organizationId: number | null;
18
+ /** Null for every country. */
19
+ countryCode: string | null;
20
+ active: boolean;
21
+ createdAt: string;
22
+ updatedAt: string;
23
+ }
24
+ /**
25
+ * One Safety Check as its owner sees it.
26
+ *
27
+ * Timestamps are ISO 8601 from the SERVER clock. `serverTime` lets the app work
28
+ * out its own clock skew: remaining = scheduledCheckInAt - serverTime, counted
29
+ * down from when the response arrived.
30
+ */
31
+ export interface SafetyCheckView {
32
+ id: string;
33
+ status: SafetyCheckStatus;
34
+ reasonId: string | null;
35
+ reasonCode: string | null;
36
+ /** What to show: the typed reason for "Write my own", else the reason's label at start. */
37
+ reasonLabel: string;
38
+ customReason: string | null;
39
+ /** Total minutes from start to the (possibly extended) check-in time. */
40
+ durationMinutes: number;
41
+ extensionCount: number;
42
+ startedAt: string;
43
+ scheduledCheckInAt: string;
44
+ promptCountdownSeconds: number;
45
+ promptStartedAt: string | null;
46
+ /** When the visible countdown ends. */
47
+ promptDeadlineAt: string | null;
48
+ checkedInAt: string | null;
49
+ endedAt: string | null;
50
+ guardians: GuardianAudience;
51
+ notifyGuardiansOnStartEnd: boolean;
52
+ /** What the user asked for. */
53
+ notifyServiceProviderRequested: boolean;
54
+ /** Whether the provider option was available to them at start (billing). */
55
+ notifyServiceProviderAllowed: boolean;
56
+ sosTrigger: SafetyCheckSosTrigger | null;
57
+ sosTriggeredAt: string | null;
58
+ /** Null until clarion-incident has created the SOS. */
59
+ incidentId: number | null;
60
+ tripId: string | null;
61
+ serverTime: string;
62
+ }
63
+ export interface SafetyCheckCurrentResponse {
64
+ /** The user's open check, or the one that most recently raised an SOS still awaiting its incident. */
65
+ check: SafetyCheckView | null;
66
+ serverTime: string;
67
+ }
68
+ /** What the setup screens need from the server, so client and server agree. */
69
+ export interface SafetyCheckStartOptions {
70
+ limits: {
71
+ minDurationMinutes: number;
72
+ maxDurationMinutes: number;
73
+ presetDurationsMinutes: number[];
74
+ minPromptCountdownSeconds: number;
75
+ maxPromptCountdownSeconds: number;
76
+ customReasonMaxLength: number;
77
+ };
78
+ defaults: {
79
+ durationMinutes: number;
80
+ promptCountdownSeconds: number;
81
+ notifyServiceProvider: boolean;
82
+ notifyGuardiansOnStartEnd: boolean;
83
+ };
84
+ serviceProvider: {
85
+ /** Offer the "notify the service provider" option at all. */
86
+ available: boolean;
87
+ /** Billing tier (PREMIUM/TRIAL/FREE), null when billing could not be asked. */
88
+ tier: string | null;
89
+ /** Billing could not be asked; the option is offered and the SOS decides. */
90
+ degraded: boolean;
91
+ };
92
+ serverTime: string;
93
+ }
94
+ /** The recorded trip, WITHOUT coordinates - location is never shown before an SOS. */
95
+ export interface SafetyCheckTripSummary {
96
+ id: string;
97
+ status: string;
98
+ visibility: string;
99
+ purpose: string;
100
+ incidentId: number | null;
101
+ startedAt: string;
102
+ endedAt: string | null;
103
+ sharedAt: string | null;
104
+ distanceMeters: number | null;
105
+ trackPointCount: number;
106
+ }
107
+ export interface SafetyCheckAuditEntry {
108
+ id: string;
109
+ eventType: SafetyCheckAuditEventType;
110
+ fromStatus: SafetyCheckStatus | null;
111
+ toStatus: SafetyCheckStatus | null;
112
+ actorType: SafetyCheckActorType;
113
+ actorUserId: number | null;
114
+ /** Identifiers and timings only - never a location or a message body. */
115
+ metadata: Record<string, unknown> | null;
116
+ createdAt: string;
117
+ }
118
+ /** A row of the admin list. */
119
+ export interface SafetyCheckAdminListItem {
120
+ id: string;
121
+ status: SafetyCheckStatus;
122
+ userId: number;
123
+ userName: string | null;
124
+ organizationId: number;
125
+ controlCentreId: number | null;
126
+ reasonLabel: string;
127
+ durationMinutes: number;
128
+ startedAt: string;
129
+ scheduledCheckInAt: string;
130
+ checkedInAt: string | null;
131
+ endedAt: string | null;
132
+ sosTrigger: SafetyCheckSosTrigger | null;
133
+ incidentId: number | null;
134
+ createdAt: string;
135
+ }
136
+ /** The admin detail view. */
137
+ export interface SafetyCheckAdminDetail {
138
+ check: SafetyCheckView & {
139
+ userId: number;
140
+ userName: string | null;
141
+ userPhoneNumber: string | null;
142
+ organizationId: number;
143
+ controlCentreId: number | null;
144
+ appId: string | null;
145
+ countryCode: string | null;
146
+ entitlementTierAtStart: string | null;
147
+ workflowId: string | null;
148
+ workflowStartedAt: string | null;
149
+ trackPointCount: number;
150
+ lastLocationAt: string | null;
151
+ sosAttempts: number;
152
+ sosFailureReason: string | null;
153
+ createdAt: string;
154
+ updatedAt: string;
155
+ };
156
+ events: SafetyCheckAuditEntry[];
157
+ trip: SafetyCheckTripSummary | null;
158
+ }
159
+ /** What the durable timer gets back from every advance. */
160
+ export interface SafetyCheckAdvanceResult {
161
+ status: SafetyCheckStatus;
162
+ /** Nothing more for the timer to do. */
163
+ done: boolean;
164
+ /** When to call advance again (server clock). Null when done. */
165
+ nextWakeAt: string | null;
166
+ }
167
+ /** clarion-incident's answer to CreateSafetyAlertIncidentDto. */
168
+ export interface SafetyAlertIncidentResult {
169
+ incidentId: number;
170
+ /** False when an earlier call already created it (idempotent replay). */
171
+ created: boolean;
172
+ conversationId: string | null;
173
+ notifyServiceProvider: boolean;
174
+ notifyGuardians: boolean;
175
+ entitlementTier: string | null;
176
+ }
177
+ /** clarion-incident's answer to "which of these type ids are system types". */
178
+ export interface IncidentTypeClassification {
179
+ systemTypeIds: number[];
180
+ }
@@ -0,0 +1,30 @@
1
+ import { SafetyCheckStatus } from '../enums/safety-check-status.enum';
2
+ /**
3
+ * Every legal Safety Check transition. clarion-safety refuses anything else, and
4
+ * applies each allowed one as `UPDATE ... WHERE status IN (<allowed sources>)`, so
5
+ * the database - not the caller - decides a race.
6
+ *
7
+ * Re-applying a transition to a check already in the target state is NOT listed
8
+ * here: it is an idempotent no-op, answered with the current check
9
+ * (see isIdempotentRepeat).
10
+ */
11
+ export declare const SAFETY_CHECK_TRANSITIONS: Readonly<Record<SafetyCheckStatus, readonly SafetyCheckStatus[]>>;
12
+ /** States in which the user is "in a Safety Check": at most one per user. */
13
+ export declare const OPEN_SAFETY_CHECK_STATUSES: readonly SafetyCheckStatus[];
14
+ /** States from which the check will never move again. */
15
+ export declare const TERMINAL_SAFETY_CHECK_STATUSES: readonly SafetyCheckStatus[];
16
+ /**
17
+ * States in which location is still being recorded for the check. SOS_TRIGGERED
18
+ * is included: the recorded trip becomes the incident's trip and keeps growing.
19
+ */
20
+ export declare const TRACKING_SAFETY_CHECK_STATUSES: readonly SafetyCheckStatus[];
21
+ export declare function isOpenSafetyCheckStatus(status: SafetyCheckStatus | string | null | undefined): boolean;
22
+ export declare function isTerminalSafetyCheckStatus(status: SafetyCheckStatus | string | null | undefined): boolean;
23
+ export declare function canTransitionSafetyCheck(from: SafetyCheckStatus, to: SafetyCheckStatus): boolean;
24
+ /** The states a check may be in for a transition to `to` to be applied. */
25
+ export declare function allowedSourcesFor(to: SafetyCheckStatus): SafetyCheckStatus[];
26
+ /**
27
+ * A repeated request for the state the check is already in - a retried "I'm OK",
28
+ * a second stop. Answered with the current check, never an error.
29
+ */
30
+ export declare function isIdempotentRepeat(current: SafetyCheckStatus, requested: SafetyCheckStatus): boolean;
@@ -0,0 +1,37 @@
1
+ export interface SafetyCheckDurationValidation {
2
+ valid: boolean;
3
+ reason?: 'NOT_AN_INTEGER' | 'TOO_SHORT' | 'TOO_LONG';
4
+ }
5
+ /** Validates a requested duration against the platform limits. */
6
+ export declare function validateSafetyCheckDuration(minutes: unknown): SafetyCheckDurationValidation;
7
+ /** Whether a prompt countdown (seconds) is within the configurable range. */
8
+ export declare function isValidPromptCountdownSeconds(seconds: unknown): boolean;
9
+ /** The latest moment a check started at `startedAt` may be scheduled to check in. */
10
+ export declare function latestAllowedCheckInAt(startedAt: Date): Date;
11
+ export interface SafetyCheckExtensionPlan {
12
+ allowed: boolean;
13
+ /** New check-in time when allowed. */
14
+ scheduledCheckInAt?: Date;
15
+ /** Total minutes from start to the new check-in time. */
16
+ totalDurationMinutes?: number;
17
+ /** Most minutes that could still be added right now (0 when at the cap). */
18
+ maxAdditionalMinutes: number;
19
+ }
20
+ /**
21
+ * Plans an extension. While the check-in time is still ahead the extension is
22
+ * added to it; once it has passed (the user is being prompted) it counts from
23
+ * now. Either way the result may not end more than maxDurationMinutes after the
24
+ * check started - an extension never lets a check outlive the 24 hour cap.
25
+ */
26
+ export declare function planSafetyCheckExtension(input: {
27
+ startedAt: Date;
28
+ scheduledCheckInAt: Date;
29
+ now: Date;
30
+ additionalMinutes: number;
31
+ }): SafetyCheckExtensionPlan;
32
+ /** When the prompt shown at `promptStartedAt` runs out (what the user sees). */
33
+ export declare function promptDeadlineFrom(promptStartedAt: Date, promptCountdownSeconds: number): Date;
34
+ /** When the server actually raises the SOS: the visible deadline plus the grace. */
35
+ export declare function sosDueAt(promptDeadlineAt: Date): Date;
36
+ /** Whether an SOS that fell due at `dueAt` is too stale to raise at `now`. */
37
+ export declare function isSosTooStale(dueAt: Date, now: Date): boolean;
@@ -6,6 +6,8 @@ export declare enum SmsTemplateType {
6
6
  SECURITY_ALERT = "security_alert",
7
7
  INCIDENT_NOTIFICATION = "incident_notification",
8
8
  INCIDENT_GUARDIAN_NOTIFICATION = "incident_guardian_notification",
9
+ SAFETY_CHECK_GUARDIAN_STARTED = "safety_check_guardian_started",
10
+ SAFETY_CHECK_GUARDIAN_ENDED = "safety_check_guardian_ended",
9
11
  APPOINTMENT_REMINDER = "appointment_reminder",
10
12
  GENERAL_NOTIFICATION = "general_notification"
11
13
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "grm-shared-library",
3
- "version": "1.1.220",
3
+ "version": "1.1.222",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "types": "dist/types/index.d.ts",