@updraft-solutions/mcrit-sdk 0.5.0 → 0.6.0

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
@@ -525,7 +550,7 @@ var feeSchema = BaseModel.extend({
525
550
  is_derived: z4.boolean().optional(),
526
551
  relation: z4.array(z4.enum(["booking", "flightLog", "invoice", "instructor"])).nullable().optional(),
527
552
  payment_per: z4.string().nullable().optional(),
528
- can: z4.record(z4.string(), zNullableBool).optional(),
553
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional(),
529
554
  course_count: z4.number().optional(),
530
555
  // feeables-pivot fields, present when the fee is serialized through an
531
556
  // attachment (course/enrollment listings).
@@ -608,14 +633,43 @@ var airplaneSchema = BaseModel.extend({
608
633
  defaultFlightType: z4.string().optional(),
609
634
  defaultFlightRule: z4.string().optional(),
610
635
  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
- })
636
+ // Physical/capability facts — serialized by BaseAirplaneResource on EVERY
637
+ // airplane payload (not just the extended show shape).
638
+ minimumCrewCount: z4.number().optional(),
639
+ classRating: z4.string().nullable().optional(),
640
+ typeRating: z4.string().nullable().optional(),
641
+ VFR: z4.boolean().optional(),
642
+ VFRNight: z4.boolean().optional(),
643
+ IFR: z4.boolean().optional(),
644
+ IFRKnownIcing: z4.boolean().optional(),
645
+ power: z4.string().optional(),
646
+ fuel_type: z4.string().optional(),
647
+ oil_min: z4.string().optional(),
648
+ oil_max: z4.string().optional(),
649
+ oil_type_winter: z4.string().optional(),
650
+ oil_type_summer: z4.string().optional(),
651
+ empty_weight: z4.string().optional(),
652
+ max_takeoff_mass: z4.string().optional(),
653
+ max_speed: z4.string().optional(),
654
+ max_range: z4.string().optional(),
655
+ equipment: z4.array(equipmentSchema).optional(),
656
+ has_pre_paid_package: z4.boolean().optional(),
657
+ logging_required_from: z4.string().optional(),
658
+ fee_id: z4.number().nullable().optional(),
659
+ booking_fee_id: z4.number().nullable().optional(),
660
+ homebase: z4.object({
661
+ id: z4.number(),
662
+ ident: z4.string().optional(),
663
+ name: z4.string().optional()
664
+ }).nullable().optional(),
665
+ // Loose record on purpose: gates are policy-reflected server-side and
666
+ // grow over time — same convention as companySchema.
667
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
668
+ });
669
+ var aircraftPositionSchema = z4.object({
670
+ lat: z4.number().nullable().optional(),
671
+ lon: z4.number().nullable().optional(),
672
+ timestamp: z4.union([z4.string(), z4.number()]).nullable().optional()
619
673
  });
620
674
  var airplaneShareInviteSchema = z4.object({
621
675
  id: z4.number(),
@@ -739,53 +793,22 @@ var maintenanceStatusSchema = z4.object({
739
793
  nextMaintenanceEventEstimation: maintenanceEventEstimationSchema.nullable().optional()
740
794
  });
741
795
  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
796
  contact: contactAttributeSchema.optional(),
768
797
  hints: z4.object({
769
798
  booking: z4.object({
770
799
  ifr: z4.string().optional()
771
800
  }).optional()
772
801
  }).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
802
  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()
803
+ company: companySchema.optional(),
804
+ latestPosition: aircraftPositionSchema.nullable().optional(),
805
+ total_flight_time_minutes: z4.number().nullable().optional(),
806
+ elapsed_time: z4.number().nullable().optional(),
807
+ remaining_time: z4.number().nullable().optional(),
808
+ completed_at: z4.string().nullable().optional(),
809
+ flight_log_enabled: z4.boolean().optional(),
810
+ latest_maintenance_event: maintenanceEventSchema.nullable().optional(),
811
+ master_media: mediaCollection.optional()
789
812
  });
790
813
  var availSchema = z4.object({
791
814
  type: z4.literal("avail"),
@@ -811,6 +834,21 @@ var bookingWaypointSchema = z4.object({
811
834
  longitude_deg: z4.number().nullable().optional()
812
835
  }).nullable().optional()
813
836
  });
837
+ var activitySchema = z4.object({
838
+ id: z4.number(),
839
+ log_name: z4.string().nullable().optional(),
840
+ description: z4.string().optional(),
841
+ event: z4.string().nullable().optional(),
842
+ subject_type: z4.string().nullable().optional(),
843
+ subject_id: z4.number().nullable().optional(),
844
+ causer_type: z4.string().nullable().optional(),
845
+ causer_id: z4.number().nullable().optional(),
846
+ causer: userSchema.nullable().optional(),
847
+ properties: z4.record(z4.string(), z4.unknown()).optional(),
848
+ batch_uuid: z4.string().nullable().optional(),
849
+ created_at: z4.string().optional(),
850
+ updated_at: z4.string().optional()
851
+ });
814
852
  var bookingSchema = BaseModel.extend({
815
853
  type: z4.literal("booking"),
816
854
  ifr: z4.boolean().default(false),
@@ -855,9 +893,17 @@ var bookingSchema = BaseModel.extend({
855
893
  ).optional(),
856
894
  contact: zContactDTO.optional(),
857
895
  remarks: z4.string().optional(),
858
- can: z4.object({
859
- update: zNullableBool
860
- }).optional()
896
+ ac_call: z4.string().nullable().optional(),
897
+ ac_type: z4.string().nullable().optional(),
898
+ // Audit trail (BookingResource `activities`, present when eager-loaded).
899
+ activities: z4.array(activitySchema).optional(),
900
+ // Present when eager-loaded (BookingResource conditional appends). Lazy:
901
+ // both schemas are declared later in this file; there is no true cycle.
902
+ flight_logs: z4.array(z4.lazy(() => flightLogSchema)).optional(),
903
+ expense_items: z4.array(z4.lazy(() => expenseItemSchema)).optional(),
904
+ // Loose record on purpose: gates are policy-reflected server-side and
905
+ // grow over time — same convention as companySchema.
906
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
861
907
  });
862
908
  var alertSchema = z4.object({
863
909
  id: z4.number(),
@@ -1034,6 +1080,9 @@ var flightLogSchema = z4.object({
1034
1080
  id: z4.number(),
1035
1081
  airplane_id: z4.number(),
1036
1082
  airplane: airplaneSchema.optional(),
1083
+ // Present when eager-loaded (FlightLogResource, camelCase key). Lazy:
1084
+ // expenseItemSchema is declared later in this file; there is no true cycle.
1085
+ expenseItems: z4.array(z4.lazy(() => expenseItemSchema)).optional(),
1037
1086
  ac_type: z4.string().nullable().optional(),
1038
1087
  ac_reg: z4.string().nullable().optional(),
1039
1088
  ac_call: z4.string().nullable().optional(),
@@ -1117,14 +1166,28 @@ var invoiceSchema = z4.object({
1117
1166
  issuer_city: z4.string().nullable().optional(),
1118
1167
  issuer_zip: z4.string().nullable().optional(),
1119
1168
  issuer_state: z4.string().nullable().optional(),
1169
+ issuer_bank_name: z4.string().nullable().optional(),
1170
+ issuer_bic: z4.string().nullable().optional(),
1171
+ issuer_iban: z4.string().nullable().optional(),
1172
+ issuer_email: z4.string().nullable().optional(),
1173
+ issuer_phone: z4.string().nullable().optional(),
1174
+ issuer_vat_id: z4.string().nullable().optional(),
1175
+ issuer_register_court: z4.string().nullable().optional(),
1176
+ issuer_register_number: z4.string().nullable().optional(),
1177
+ gross_total: zPhpMoneyObject.nullable().optional(),
1178
+ net_total: zPhpMoneyObject.nullable().optional(),
1179
+ // InvoiceResource media envelope: only the generated PDF.
1180
+ media: z4.object({
1181
+ pdf: mediaSchema.nullable().optional()
1182
+ }).optional(),
1183
+ pdf: z4.string().nullable().optional(),
1184
+ // Audit trail (InvoiceResource `activities`, present when eager-loaded).
1185
+ activities: z4.array(activitySchema).optional(),
1120
1186
  created_at: z4.string(),
1121
1187
  updated_at: z4.string(),
1122
- can: z4.object({
1123
- update: zNullableBool,
1124
- delete: zNullableBool,
1125
- release: zNullableBool,
1126
- view: zNullableBool
1127
- }).optional()
1188
+ // Loose record on purpose: gates are policy-reflected server-side and
1189
+ // grow over time — same convention as companySchema.
1190
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
1128
1191
  });
1129
1192
  var scheduledFlightSchema = z4.object({
1130
1193
  type: z4.literal("scheduledFlight"),
@@ -1207,11 +1270,19 @@ var courseSchema = z4.object({
1207
1270
  // Present only when the backend eager-loaded `checkSyllabi`.
1208
1271
  check_syllabi: z4.array(courseCheckSyllabusSchema).optional(),
1209
1272
  tags: z4.array(tagSchema).optional(),
1273
+ // Attached fees (feeables pivot) + fees derived from them, when loaded.
1274
+ fees: z4.array(courseFeeSchema).optional(),
1275
+ derived_fees: z4.array(feeSchema).optional(),
1276
+ fees_count: z4.number().optional(),
1277
+ is_public: z4.boolean().optional(),
1278
+ kind: z4.string().optional(),
1279
+ version: z4.number().optional(),
1280
+ media: mediaCollection,
1210
1281
  created_at: z4.string(),
1211
1282
  updated_at: z4.string(),
1212
1283
  // Loose record on purpose: gates are policy-reflected server-side and
1213
1284
  // grow over time (useAssistant, …) — same convention as companySchema.
1214
- can: z4.record(z4.string(), zNullableBool).optional()
1285
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
1215
1286
  });
1216
1287
  var courseEnrollmentMetricsSchema = z4.object({
1217
1288
  last_flight_at: z4.string().nullable(),
@@ -1245,9 +1316,29 @@ var courseEnrollmentSchema = z4.object({
1245
1316
  course: courseSchema.optional(),
1246
1317
  membership: membershipSchema.optional(),
1247
1318
  mentor: userSchema.optional(),
1319
+ // Present when eager-loaded (BaseCourseEnrollmentResource). Lazy: both
1320
+ // schemas are declared later in this file; there is no true cycle.
1321
+ expense_items: z4.array(z4.lazy(() => expenseItemSchema)).optional(),
1322
+ bookings: z4.array(bookingSchema).optional(),
1248
1323
  // Loose record on purpose: gates are policy-reflected server-side and
1249
1324
  // grow over time (updateTraining, manageInitialPayment, …).
1250
- can: z4.record(z4.string(), zNullableBool).optional()
1325
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
1326
+ });
1327
+ var membershipSignupSchema = z4.object({
1328
+ id: z4.number(),
1329
+ membership_id: z4.number(),
1330
+ created_at: z4.string().optional(),
1331
+ membership: z4.object({
1332
+ id: z4.number(),
1333
+ user_id: z4.number().nullable().optional(),
1334
+ name: z4.string(),
1335
+ user: z4.object({
1336
+ name: z4.string(),
1337
+ firstname: z4.string().nullable().optional(),
1338
+ lastname: z4.string().nullable().optional(),
1339
+ email: z4.string().nullable().optional()
1340
+ }).nullable().optional()
1341
+ }).nullable().optional()
1251
1342
  });
1252
1343
  var eventSchema = z4.object({
1253
1344
  type: z4.literal("event"),
@@ -1256,20 +1347,18 @@ var eventSchema = z4.object({
1256
1347
  company: companySchema.optional(),
1257
1348
  title: z4.string(),
1258
1349
  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()
1350
+ media: mediaCollection,
1351
+ signups: z4.array(membershipSignupSchema).optional(),
1352
+ signups_count: z4.number().optional(),
1353
+ is_public: z4.boolean(),
1354
+ contact: zContactDTO.nullable().optional(),
1355
+ start: z4.string(),
1356
+ end: z4.string().nullable().optional(),
1357
+ registrationDeadline: z4.string().nullable().optional(),
1358
+ registrationIsBinding: z4.boolean(),
1359
+ // Loose record on purpose: gates are policy-reflected server-side and
1360
+ // grow over time — same convention as companySchema.
1361
+ can: z4.record(z4.string(), z4.boolean().nullable()).optional()
1273
1362
  });
1274
1363
  var addressSchema = z4.object({
1275
1364
  type: z4.literal("address"),
@@ -1820,6 +1909,9 @@ var SignatureSchema = z7.object({
1820
1909
  status: z7.enum(["pending", "signed", "revoked"]),
1821
1910
  required_signer_membership_id: z7.number().nullable(),
1822
1911
  required_signer_name: z7.string().nullable().optional(),
1912
+ // Group designation: any member holding this permission at the template's
1913
+ // company may sign (e.g. "formSubmission.signAsCompany").
1914
+ required_signer_permission: z7.string().nullable().optional(),
1823
1915
  signed_by_user_id: z7.number().nullable(),
1824
1916
  signed_by_membership_id: z7.number().nullable(),
1825
1917
  signed_by_name: z7.string().nullable().optional(),
@@ -2397,6 +2489,7 @@ export {
2397
2489
  feeCategoryOptionsSchema,
2398
2490
  courseFeeSchema,
2399
2491
  airplaneSchema,
2492
+ aircraftPositionSchema,
2400
2493
  airplaneShareInviteSchema,
2401
2494
  airplanePermissionSchema,
2402
2495
  landingFeeSchema,
@@ -2411,6 +2504,7 @@ export {
2411
2504
  extendedAirplaneSchema,
2412
2505
  availSchema,
2413
2506
  bookingWaypointSchema,
2507
+ activitySchema,
2414
2508
  bookingSchema,
2415
2509
  alertSchema,
2416
2510
  documentSchema,
@@ -2429,6 +2523,7 @@ export {
2429
2523
  courseSchema,
2430
2524
  courseEnrollmentMetricsSchema,
2431
2525
  courseEnrollmentSchema,
2526
+ membershipSignupSchema,
2432
2527
  eventSchema,
2433
2528
  addressSchema,
2434
2529
  roleSchema,