@updraft-solutions/mcrit-sdk 0.5.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,9 +3,11 @@ import { z } from "zod";
3
3
  var zNullableBool = z.boolean().nullable().optional();
4
4
  var zNetGross = z.enum(["net", "gross"]).optional();
5
5
  var zContactDTO = z.object({
6
- name: z.string().optional(),
7
- email: z.string().email().optional(),
8
- phone: z.string().optional()
6
+ name: z.string().nullable().optional(),
7
+ email: z.string().nullable().optional(),
8
+ phone: z.string().nullable().optional(),
9
+ company: z.string().nullable().optional(),
10
+ fax: z.string().nullable().optional()
9
11
  });
10
12
  var zPhpMoneyObject = z.object({
11
13
  amount: z.number(),
@@ -60,8 +62,17 @@ var userSchema = z.object({
60
62
  type: z.literal("user"),
61
63
  id: z.number(),
62
64
  name: z.string(),
63
- email: z.string().optional(),
64
- mobile: z.string().optional(),
65
+ firstname: z.string().nullable().optional(),
66
+ lastname: z.string().nullable().optional(),
67
+ // email/mobile are gate-guarded server-side (viewMail/viewMobile) and come
68
+ // back null when denied.
69
+ email: z.string().nullable().optional(),
70
+ mobile: z.string().nullable().optional(),
71
+ // UserResource media envelope (avatar/header, present when loaded).
72
+ media: z.object({
73
+ avatar: mediaSchema.nullable().optional(),
74
+ header: mediaSchema.nullable().optional()
75
+ }).optional(),
65
76
  // Present only on the authenticated-user payload while an admin
66
77
  // impersonation session is active.
67
78
  impersonation: impersonationStateSchema.optional()
@@ -81,7 +92,21 @@ var companySchema = z.object({
81
92
  // Active AI-feature entitlement keys (per-company subscription gating,
82
93
  // e.g. "ai.logbook_import"). Serialized by CompanyResource alongside
83
94
  // `permissions[]`; slim payloads may omit it.
84
- entitlements: z.array(z.string()).optional()
95
+ entitlements: z.array(z.string()).optional(),
96
+ // BaseCompanyResource extras: cached-minified home airport + the
97
+ // distance computed on radius-filtered public listings.
98
+ airport_id: z.number().nullable().optional(),
99
+ airport: z.object({
100
+ id: z.number(),
101
+ ident: z.string(),
102
+ name: z.string(),
103
+ municipality: z.string().nullable().optional(),
104
+ iso_country: z.string().nullable().optional(),
105
+ latitude_deg: z.number().nullable().optional(),
106
+ longitude_deg: z.number().nullable().optional()
107
+ }).nullable().optional(),
108
+ icao: z.string().nullable().optional(),
109
+ distance_in_km: z.number().optional()
85
110
  });
86
111
 
87
112
  // src/schemas/models.ts
@@ -309,7 +334,8 @@ var SignOffTrainingElementFormSchema = z3.object({
309
334
  var TrainingRecordStatusEnum = z3.enum([
310
335
  "draft",
311
336
  "awaiting_signatures",
312
- "signed"
337
+ "signed",
338
+ "invalidated"
313
339
  ]);
314
340
  var TrainingRecordResultEnum = z3.enum(["passed", "failed"]);
315
341
  var trainingRecordEntrySchema = z3.object({
@@ -396,6 +422,18 @@ var trainingRecordSchema = z3.object({
396
422
  repeat_next_flight: z3.string().nullable().optional(),
397
423
  entries: z3.array(trainingRecordEntrySchema),
398
424
  signatures: z3.array(trainingSignatureSchema),
425
+ sequence: z3.number().default(1),
426
+ supersedes_id: z3.number().nullable().optional(),
427
+ invalidated_at: z3.string().nullable().optional(),
428
+ invalidated_by: z3.object({ id: z3.number(), name: z3.string().nullable() }).nullable().optional(),
429
+ invalidation_reason: z3.string().nullable().optional(),
430
+ has_archived_pdf: z3.boolean().optional(),
431
+ booking: z3.object({
432
+ id: z3.number(),
433
+ etdZ: z3.string().nullable(),
434
+ airplane_registration: z3.string().nullable()
435
+ }).nullable().optional(),
436
+ instructor: z3.object({ id: z3.number(), name: z3.string().nullable() }).nullable().optional(),
399
437
  created_at: z3.string().optional(),
400
438
  updated_at: z3.string().optional()
401
439
  });
@@ -413,6 +451,10 @@ var UpsertTrainingRecordFormSchema = z3.object({
413
451
  instructor_membership_id: z3.number().nullable().optional(),
414
452
  entries: z3.array(trainingRecordEntryInputSchema)
415
453
  });
454
+ var invalidateTrainingRecordResponseSchema = z3.object({
455
+ record: trainingRecordSchema,
456
+ replacement: trainingRecordSchema.nullable()
457
+ });
416
458
  var trainingTemplatePackSchema = z3.object({
417
459
  key: z3.string(),
418
460
  name: z3.string(),
@@ -525,7 +567,7 @@ var feeSchema = BaseModel.extend({
525
567
  is_derived: z4.boolean().optional(),
526
568
  relation: z4.array(z4.enum(["booking", "flightLog", "invoice", "instructor"])).nullable().optional(),
527
569
  payment_per: z4.string().nullable().optional(),
528
- can: z4.record(z4.string(), zNullableBool).optional(),
570
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional(),
529
571
  course_count: z4.number().optional(),
530
572
  // feeables-pivot fields, present when the fee is serialized through an
531
573
  // attachment (course/enrollment listings).
@@ -608,14 +650,43 @@ var airplaneSchema = BaseModel.extend({
608
650
  defaultFlightType: z4.string().optional(),
609
651
  defaultFlightRule: z4.string().optional(),
610
652
  status: z4.string().optional(),
611
- can: z4.object({
612
- view: zNullableBool,
613
- update: zNullableBool,
614
- viewMaintenanceEvents: zNullableBool,
615
- createMaintenanceEvents: zNullableBool,
616
- createBooking: zNullableBool,
617
- createAirplanePermissions: zNullableBool
618
- })
653
+ // Physical/capability facts — serialized by BaseAirplaneResource on EVERY
654
+ // airplane payload (not just the extended show shape).
655
+ minimumCrewCount: z4.number().optional(),
656
+ classRating: z4.string().nullable().optional(),
657
+ typeRating: z4.string().nullable().optional(),
658
+ VFR: z4.boolean().optional(),
659
+ VFRNight: z4.boolean().optional(),
660
+ IFR: z4.boolean().optional(),
661
+ IFRKnownIcing: z4.boolean().optional(),
662
+ power: z4.string().optional(),
663
+ fuel_type: z4.string().optional(),
664
+ oil_min: z4.string().optional(),
665
+ oil_max: z4.string().optional(),
666
+ oil_type_winter: z4.string().optional(),
667
+ oil_type_summer: z4.string().optional(),
668
+ empty_weight: z4.string().optional(),
669
+ max_takeoff_mass: z4.string().optional(),
670
+ max_speed: z4.string().optional(),
671
+ max_range: z4.string().optional(),
672
+ equipment: z4.array(equipmentSchema).optional(),
673
+ has_pre_paid_package: z4.boolean().optional(),
674
+ logging_required_from: z4.string().optional(),
675
+ fee_id: z4.number().nullable().optional(),
676
+ booking_fee_id: z4.number().nullable().optional(),
677
+ homebase: z4.object({
678
+ id: z4.number(),
679
+ ident: z4.string().optional(),
680
+ name: z4.string().optional()
681
+ }).nullable().optional(),
682
+ // Loose record on purpose: gates are policy-reflected server-side and
683
+ // grow over time — same convention as companySchema.
684
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
685
+ });
686
+ var aircraftPositionSchema = z4.object({
687
+ lat: z4.number().nullable().optional(),
688
+ lon: z4.number().nullable().optional(),
689
+ timestamp: z4.union([z4.string(), z4.number()]).nullable().optional()
619
690
  });
620
691
  var airplaneShareInviteSchema = z4.object({
621
692
  id: z4.number(),
@@ -739,53 +810,22 @@ var maintenanceStatusSchema = z4.object({
739
810
  nextMaintenanceEventEstimation: maintenanceEventEstimationSchema.nullable().optional()
740
811
  });
741
812
  var extendedAirplaneSchema = airplaneSchema.extend({
742
- manufacturer: z4.string().optional(),
743
- capacity: z4.number().optional(),
744
- description: z4.string().optional(),
745
- homebase_id: z4.number().optional(),
746
- ato: z4.boolean().optional(),
747
- year_of_construction: z4.string().optional(),
748
- span: z4.string().optional(),
749
- height: z4.string().optional(),
750
- length: z4.string().optional(),
751
- empty_weight: z4.string().optional(),
752
- max_takeoff_mass: z4.string().optional(),
753
- max_speed: z4.string().optional(),
754
- max_range: z4.string().optional(),
755
- power: z4.string().optional(),
756
- fuel_type: z4.string().optional(),
757
- oil_min: z4.string().optional(),
758
- oil_max: z4.string().optional(),
759
- oil_type_winter: z4.string().optional(),
760
- oil_type_summer: z4.string().optional(),
761
- minimumCrewCount: z4.number().optional(),
762
- VFR: z4.boolean().optional(),
763
- VFRNight: z4.boolean().optional(),
764
- IFR: z4.boolean().optional(),
765
- IFRKnownIcing: z4.boolean().optional(),
766
- equipment: z4.array(equipmentSchema).optional(),
767
813
  contact: contactAttributeSchema.optional(),
768
814
  hints: z4.object({
769
815
  booking: z4.object({
770
816
  ifr: z4.string().optional()
771
817
  }).optional()
772
818
  }).optional(),
773
- has_pre_paid_package: z4.boolean().optional(),
774
- fee_id: z4.number().optional(),
775
- booking_fee_id: z4.number().optional(),
776
- logging_required_from: z4.string().optional(),
777
819
  foreflight_profile_url: z4.string().optional(),
778
- media: z4.object({
779
- avatar: z4.any().optional(),
780
- header: z4.any().optional(),
781
- images: z4.array(z4.any()).optional(),
782
- documents: z4.array(z4.any()).optional()
783
- }).optional(),
784
- master_media: mediaCollection.optional(),
785
- can: z4.object({
786
- update: zNullableBool,
787
- viewMaintenanceEvents: zNullableBool
788
- }).optional()
820
+ company: companySchema.optional(),
821
+ latestPosition: aircraftPositionSchema.nullable().optional(),
822
+ total_flight_time_minutes: z4.number().nullable().optional(),
823
+ elapsed_time: z4.number().nullable().optional(),
824
+ remaining_time: z4.number().nullable().optional(),
825
+ completed_at: z4.string().nullable().optional(),
826
+ flight_log_enabled: z4.boolean().optional(),
827
+ latest_maintenance_event: maintenanceEventSchema.nullable().optional(),
828
+ master_media: mediaCollection.optional()
789
829
  });
790
830
  var availSchema = z4.object({
791
831
  type: z4.literal("avail"),
@@ -811,6 +851,21 @@ var bookingWaypointSchema = z4.object({
811
851
  longitude_deg: z4.number().nullable().optional()
812
852
  }).nullable().optional()
813
853
  });
854
+ var activitySchema = z4.object({
855
+ id: z4.number(),
856
+ log_name: z4.string().nullable().optional(),
857
+ description: z4.string().optional(),
858
+ event: z4.string().nullable().optional(),
859
+ subject_type: z4.string().nullable().optional(),
860
+ subject_id: z4.number().nullable().optional(),
861
+ causer_type: z4.string().nullable().optional(),
862
+ causer_id: z4.number().nullable().optional(),
863
+ causer: userSchema.nullable().optional(),
864
+ properties: z4.record(z4.string(), z4.unknown()).optional(),
865
+ batch_uuid: z4.string().nullable().optional(),
866
+ created_at: z4.string().optional(),
867
+ updated_at: z4.string().optional()
868
+ });
814
869
  var bookingSchema = BaseModel.extend({
815
870
  type: z4.literal("booking"),
816
871
  ifr: z4.boolean().default(false),
@@ -855,9 +910,17 @@ var bookingSchema = BaseModel.extend({
855
910
  ).optional(),
856
911
  contact: zContactDTO.optional(),
857
912
  remarks: z4.string().optional(),
858
- can: z4.object({
859
- update: zNullableBool
860
- }).optional()
913
+ ac_call: z4.string().nullable().optional(),
914
+ ac_type: z4.string().nullable().optional(),
915
+ // Audit trail (BookingResource `activities`, present when eager-loaded).
916
+ activities: z4.array(activitySchema).optional(),
917
+ // Present when eager-loaded (BookingResource conditional appends). Lazy:
918
+ // both schemas are declared later in this file; there is no true cycle.
919
+ flight_logs: z4.array(z4.lazy(() => flightLogSchema)).optional(),
920
+ expense_items: z4.array(z4.lazy(() => expenseItemSchema)).optional(),
921
+ // Loose record on purpose: gates are policy-reflected server-side and
922
+ // grow over time — same convention as companySchema.
923
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
861
924
  });
862
925
  var alertSchema = z4.object({
863
926
  id: z4.number(),
@@ -1034,6 +1097,9 @@ var flightLogSchema = z4.object({
1034
1097
  id: z4.number(),
1035
1098
  airplane_id: z4.number(),
1036
1099
  airplane: airplaneSchema.optional(),
1100
+ // Present when eager-loaded (FlightLogResource, camelCase key). Lazy:
1101
+ // expenseItemSchema is declared later in this file; there is no true cycle.
1102
+ expenseItems: z4.array(z4.lazy(() => expenseItemSchema)).optional(),
1037
1103
  ac_type: z4.string().nullable().optional(),
1038
1104
  ac_reg: z4.string().nullable().optional(),
1039
1105
  ac_call: z4.string().nullable().optional(),
@@ -1117,14 +1183,28 @@ var invoiceSchema = z4.object({
1117
1183
  issuer_city: z4.string().nullable().optional(),
1118
1184
  issuer_zip: z4.string().nullable().optional(),
1119
1185
  issuer_state: z4.string().nullable().optional(),
1186
+ issuer_bank_name: z4.string().nullable().optional(),
1187
+ issuer_bic: z4.string().nullable().optional(),
1188
+ issuer_iban: z4.string().nullable().optional(),
1189
+ issuer_email: z4.string().nullable().optional(),
1190
+ issuer_phone: z4.string().nullable().optional(),
1191
+ issuer_vat_id: z4.string().nullable().optional(),
1192
+ issuer_register_court: z4.string().nullable().optional(),
1193
+ issuer_register_number: z4.string().nullable().optional(),
1194
+ gross_total: zPhpMoneyObject.nullable().optional(),
1195
+ net_total: zPhpMoneyObject.nullable().optional(),
1196
+ // InvoiceResource media envelope: only the generated PDF.
1197
+ media: z4.object({
1198
+ pdf: mediaSchema.nullable().optional()
1199
+ }).optional(),
1200
+ pdf: z4.string().nullable().optional(),
1201
+ // Audit trail (InvoiceResource `activities`, present when eager-loaded).
1202
+ activities: z4.array(activitySchema).optional(),
1120
1203
  created_at: z4.string(),
1121
1204
  updated_at: z4.string(),
1122
- can: z4.object({
1123
- update: zNullableBool,
1124
- delete: zNullableBool,
1125
- release: zNullableBool,
1126
- view: zNullableBool
1127
- }).optional()
1205
+ // Loose record on purpose: gates are policy-reflected server-side and
1206
+ // grow over time — same convention as companySchema.
1207
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
1128
1208
  });
1129
1209
  var scheduledFlightSchema = z4.object({
1130
1210
  type: z4.literal("scheduledFlight"),
@@ -1207,11 +1287,19 @@ var courseSchema = z4.object({
1207
1287
  // Present only when the backend eager-loaded `checkSyllabi`.
1208
1288
  check_syllabi: z4.array(courseCheckSyllabusSchema).optional(),
1209
1289
  tags: z4.array(tagSchema).optional(),
1290
+ // Attached fees (feeables pivot) + fees derived from them, when loaded.
1291
+ fees: z4.array(courseFeeSchema).optional(),
1292
+ derived_fees: z4.array(feeSchema).optional(),
1293
+ fees_count: z4.number().optional(),
1294
+ is_public: z4.boolean().optional(),
1295
+ kind: z4.string().optional(),
1296
+ version: z4.number().optional(),
1297
+ media: mediaCollection,
1210
1298
  created_at: z4.string(),
1211
1299
  updated_at: z4.string(),
1212
1300
  // Loose record on purpose: gates are policy-reflected server-side and
1213
1301
  // grow over time (useAssistant, …) — same convention as companySchema.
1214
- can: z4.record(z4.string(), zNullableBool).optional()
1302
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
1215
1303
  });
1216
1304
  var courseEnrollmentMetricsSchema = z4.object({
1217
1305
  last_flight_at: z4.string().nullable(),
@@ -1245,9 +1333,29 @@ var courseEnrollmentSchema = z4.object({
1245
1333
  course: courseSchema.optional(),
1246
1334
  membership: membershipSchema.optional(),
1247
1335
  mentor: userSchema.optional(),
1336
+ // Present when eager-loaded (BaseCourseEnrollmentResource). Lazy: both
1337
+ // schemas are declared later in this file; there is no true cycle.
1338
+ expense_items: z4.array(z4.lazy(() => expenseItemSchema)).optional(),
1339
+ bookings: z4.array(bookingSchema).optional(),
1248
1340
  // Loose record on purpose: gates are policy-reflected server-side and
1249
1341
  // grow over time (updateTraining, manageInitialPayment, …).
1250
- can: z4.record(z4.string(), zNullableBool).optional()
1342
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
1343
+ });
1344
+ var membershipSignupSchema = z4.object({
1345
+ id: z4.number(),
1346
+ membership_id: z4.number(),
1347
+ created_at: z4.string().optional(),
1348
+ membership: z4.object({
1349
+ id: z4.number(),
1350
+ user_id: z4.number().nullable().optional(),
1351
+ name: z4.string(),
1352
+ user: z4.object({
1353
+ name: z4.string(),
1354
+ firstname: z4.string().nullable().optional(),
1355
+ lastname: z4.string().nullable().optional(),
1356
+ email: z4.string().nullable().optional()
1357
+ }).nullable().optional()
1358
+ }).nullable().optional()
1251
1359
  });
1252
1360
  var eventSchema = z4.object({
1253
1361
  type: z4.literal("event"),
@@ -1256,20 +1364,18 @@ var eventSchema = z4.object({
1256
1364
  company: companySchema.optional(),
1257
1365
  title: z4.string(),
1258
1366
  description: z4.string().nullable().optional(),
1259
- start_date: z4.string(),
1260
- end_date: z4.string().nullable().optional(),
1261
- all_day: z4.boolean().default(false),
1262
- location: z4.string().nullable().optional(),
1263
- category: z4.string().nullable().optional(),
1264
- created_by: z4.number(),
1265
- creator: userSchema.optional(),
1266
- created_at: z4.string(),
1267
- updated_at: z4.string(),
1268
- can: z4.object({
1269
- update: zNullableBool,
1270
- delete: zNullableBool,
1271
- attend: zNullableBool
1272
- }).optional()
1367
+ media: mediaCollection,
1368
+ signups: z4.array(membershipSignupSchema).optional(),
1369
+ signups_count: z4.number().optional(),
1370
+ is_public: z4.boolean(),
1371
+ contact: zContactDTO.nullable().optional(),
1372
+ start: z4.string(),
1373
+ end: z4.string().nullable().optional(),
1374
+ registrationDeadline: z4.string().nullable().optional(),
1375
+ registrationIsBinding: z4.boolean(),
1376
+ // Loose record on purpose: gates are policy-reflected server-side and
1377
+ // grow over time — same convention as companySchema.
1378
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
1273
1379
  });
1274
1380
  var addressSchema = z4.object({
1275
1381
  type: z4.literal("address"),
@@ -1820,6 +1926,9 @@ var SignatureSchema = z7.object({
1820
1926
  status: z7.enum(["pending", "signed", "revoked"]),
1821
1927
  required_signer_membership_id: z7.number().nullable(),
1822
1928
  required_signer_name: z7.string().nullable().optional(),
1929
+ // Group designation: any member holding this permission at the template's
1930
+ // company may sign (e.g. "formSubmission.signAsCompany").
1931
+ required_signer_permission: z7.string().nullable().optional(),
1823
1932
  signed_by_user_id: z7.number().nullable(),
1824
1933
  signed_by_membership_id: z7.number().nullable(),
1825
1934
  signed_by_name: z7.string().nullable().optional(),
@@ -2386,6 +2495,7 @@ export {
2386
2495
  trainingSignatureSchema,
2387
2496
  trainingRecordSchema,
2388
2497
  UpsertTrainingRecordFormSchema,
2498
+ invalidateTrainingRecordResponseSchema,
2389
2499
  trainingTemplatePackSchema,
2390
2500
  CreateSyllabusFromTemplateFormSchema,
2391
2501
  createSyllabusFromTemplateResultSchema,
@@ -2397,6 +2507,7 @@ export {
2397
2507
  feeCategoryOptionsSchema,
2398
2508
  courseFeeSchema,
2399
2509
  airplaneSchema,
2510
+ aircraftPositionSchema,
2400
2511
  airplaneShareInviteSchema,
2401
2512
  airplanePermissionSchema,
2402
2513
  landingFeeSchema,
@@ -2411,6 +2522,7 @@ export {
2411
2522
  extendedAirplaneSchema,
2412
2523
  availSchema,
2413
2524
  bookingWaypointSchema,
2525
+ activitySchema,
2414
2526
  bookingSchema,
2415
2527
  alertSchema,
2416
2528
  documentSchema,
@@ -2429,6 +2541,7 @@ export {
2429
2541
  courseSchema,
2430
2542
  courseEnrollmentMetricsSchema,
2431
2543
  courseEnrollmentSchema,
2544
+ membershipSignupSchema,
2432
2545
  eventSchema,
2433
2546
  addressSchema,
2434
2547
  roleSchema,