@layer-drone/protocol 0.3.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.
package/dist/index.mjs CHANGED
@@ -723,6 +723,14 @@ var contractsControllerGetAllContractsResponseTransformer = /* @__PURE__ */ __na
723
723
  data = getContractsResponseDtoSchemaResponseTransformer(data);
724
724
  return data;
725
725
  }, "contractsControllerGetAllContractsResponseTransformer");
726
+ var flightDtoSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
727
+ data.payout.createdAt = new Date(data.payout.createdAt);
728
+ return data;
729
+ }, "flightDtoSchemaResponseTransformer");
730
+ var flightsControllerGetFlightResponseTransformer = /* @__PURE__ */ __name(async (data) => {
731
+ data = flightDtoSchemaResponseTransformer(data);
732
+ return data;
733
+ }, "flightsControllerGetFlightResponseTransformer");
726
734
  var validateFlightResponseDtoSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
727
735
  data.flightId = BigInt(data.flightId.toString());
728
736
  return data;
@@ -761,6 +769,58 @@ var flightPlansControllerGetResponseTransformer = /* @__PURE__ */ __name(async (
761
769
  data = getFlightPlanResponseSchemaResponseTransformer(data);
762
770
  return data;
763
771
  }, "flightPlansControllerGetResponseTransformer");
772
+ var getFlightReviewResponseDtoSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
773
+ data.createdAt = new Date(data.createdAt);
774
+ data.updatedAt = new Date(data.updatedAt);
775
+ return data;
776
+ }, "getFlightReviewResponseDtoSchemaResponseTransformer");
777
+ var flightReviewsControllerGetFlightReviewResponseTransformer = /* @__PURE__ */ __name(async (data) => {
778
+ data = getFlightReviewResponseDtoSchemaResponseTransformer(data);
779
+ return data;
780
+ }, "flightReviewsControllerGetFlightReviewResponseTransformer");
781
+ var getFlightReviewsResponseDtoSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
782
+ data.flightReviews = data.flightReviews.map((item) => {
783
+ item.createdAt = new Date(item.createdAt);
784
+ item.updatedAt = new Date(item.updatedAt);
785
+ return item;
786
+ });
787
+ return data;
788
+ }, "getFlightReviewsResponseDtoSchemaResponseTransformer");
789
+ var flightReviewsControllerGetFlightReviewsResponseTransformer = /* @__PURE__ */ __name(async (data) => {
790
+ data = getFlightReviewsResponseDtoSchemaResponseTransformer(data);
791
+ return data;
792
+ }, "flightReviewsControllerGetFlightReviewsResponseTransformer");
793
+ var getMissionResponseDtoSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
794
+ data.captureStartTime = new Date(data.captureStartTime);
795
+ data.captureEndTime = new Date(data.captureEndTime);
796
+ data.createdAt = new Date(data.createdAt);
797
+ data.updatedAt = new Date(data.updatedAt);
798
+ data.payout.createdAt = new Date(data.payout.createdAt);
799
+ data.vault.createdAt = new Date(data.vault.createdAt);
800
+ data.vault.updatedAt = new Date(data.vault.updatedAt);
801
+ return data;
802
+ }, "getMissionResponseDtoSchemaResponseTransformer");
803
+ var missionsControllerGetMissionResponseTransformer = /* @__PURE__ */ __name(async (data) => {
804
+ data = getMissionResponseDtoSchemaResponseTransformer(data);
805
+ return data;
806
+ }, "missionsControllerGetMissionResponseTransformer");
807
+ var getMissionsResponseDtoSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
808
+ data.missions = data.missions.map((item) => {
809
+ item.captureStartTime = new Date(item.captureStartTime);
810
+ item.captureEndTime = new Date(item.captureEndTime);
811
+ item.createdAt = new Date(item.createdAt);
812
+ item.updatedAt = new Date(item.updatedAt);
813
+ item.payout.createdAt = new Date(item.payout.createdAt);
814
+ item.vault.createdAt = new Date(item.vault.createdAt);
815
+ item.vault.updatedAt = new Date(item.vault.updatedAt);
816
+ return item;
817
+ });
818
+ return data;
819
+ }, "getMissionsResponseDtoSchemaResponseTransformer");
820
+ var missionsControllerGetMissionsResponseTransformer = /* @__PURE__ */ __name(async (data) => {
821
+ data = getMissionsResponseDtoSchemaResponseTransformer(data);
822
+ return data;
823
+ }, "missionsControllerGetMissionsResponseTransformer");
764
824
  var createMissionResponseDtoSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
765
825
  data.data.missions = data.data.missions.map((item) => {
766
826
  item.captureStartTime = new Date(item.captureStartTime);
@@ -773,6 +833,54 @@ var missionsControllerCreateMissionsResponseTransformer = /* @__PURE__ */ __name
773
833
  data = createMissionResponseDtoSchemaResponseTransformer(data);
774
834
  return data;
775
835
  }, "missionsControllerCreateMissionsResponseTransformer");
836
+ var getWebhooksResponseSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
837
+ data = data.map((item) => {
838
+ item.previous_secret_expires_at = new Date(item.previous_secret_expires_at);
839
+ return item;
840
+ });
841
+ return data;
842
+ }, "getWebhooksResponseSchemaResponseTransformer");
843
+ var webhooksControllerGetManyResponseTransformer = /* @__PURE__ */ __name(async (data) => {
844
+ data = getWebhooksResponseSchemaResponseTransformer(data);
845
+ return data;
846
+ }, "webhooksControllerGetManyResponseTransformer");
847
+ var getWebhookResponseSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
848
+ data.previous_secret_expires_at = new Date(data.previous_secret_expires_at);
849
+ return data;
850
+ }, "getWebhookResponseSchemaResponseTransformer");
851
+ var webhooksControllerGetResponseTransformer = /* @__PURE__ */ __name(async (data) => {
852
+ data = getWebhookResponseSchemaResponseTransformer(data);
853
+ return data;
854
+ }, "webhooksControllerGetResponseTransformer");
855
+ var updateWebhookResponseSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
856
+ data.previous_secret_expires_at = new Date(data.previous_secret_expires_at);
857
+ return data;
858
+ }, "updateWebhookResponseSchemaResponseTransformer");
859
+ var webhooksControllerUpdateResponseTransformer = /* @__PURE__ */ __name(async (data) => {
860
+ data = updateWebhookResponseSchemaResponseTransformer(data);
861
+ return data;
862
+ }, "webhooksControllerUpdateResponseTransformer");
863
+ var regenerateWebhookSecretResponseDtoSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
864
+ data.previous_secret_expires_at = new Date(data.previous_secret_expires_at);
865
+ return data;
866
+ }, "regenerateWebhookSecretResponseDtoSchemaResponseTransformer");
867
+ var webhooksControllerRegenerateSecretResponseTransformer = /* @__PURE__ */ __name(async (data) => {
868
+ data = regenerateWebhookSecretResponseDtoSchemaResponseTransformer(data);
869
+ return data;
870
+ }, "webhooksControllerRegenerateSecretResponseTransformer");
871
+ var zoneResponseDtoSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
872
+ data.created_at = new Date(data.created_at);
873
+ data.updated_at = new Date(data.updated_at);
874
+ return data;
875
+ }, "zoneResponseDtoSchemaResponseTransformer");
876
+ var zonesControllerCreateZoneResponseTransformer = /* @__PURE__ */ __name(async (data) => {
877
+ data = zoneResponseDtoSchemaResponseTransformer(data);
878
+ return data;
879
+ }, "zonesControllerCreateZoneResponseTransformer");
880
+ var zonesControllerUpdateZoneResponseTransformer = /* @__PURE__ */ __name(async (data) => {
881
+ data = zoneResponseDtoSchemaResponseTransformer(data);
882
+ return data;
883
+ }, "zonesControllerUpdateZoneResponseTransformer");
776
884
  var getInboundWebhookConfigsResponseSchemaResponseTransformer = /* @__PURE__ */ __name((data) => {
777
885
  data = data.map((item) => {
778
886
  item.created_at = new Date(item.created_at);
@@ -995,6 +1103,7 @@ var flightsControllerGetFlight = /* @__PURE__ */ __name((options) => {
995
1103
  type: "apiKey"
996
1104
  }
997
1105
  ],
1106
+ responseTransformer: flightsControllerGetFlightResponseTransformer,
998
1107
  url: "/flights/{flightId}",
999
1108
  ...options
1000
1109
  });
@@ -1075,12 +1184,64 @@ var flightPlansControllerGet = /* @__PURE__ */ __name((options) => {
1075
1184
  ...options
1076
1185
  });
1077
1186
  }, "flightPlansControllerGet");
1187
+ var flightReviewsControllerGetFlightReview = /* @__PURE__ */ __name((options) => {
1188
+ return (options.client ?? client).get({
1189
+ security: [
1190
+ {
1191
+ name: "x-api-token",
1192
+ type: "apiKey"
1193
+ }
1194
+ ],
1195
+ responseTransformer: flightReviewsControllerGetFlightReviewResponseTransformer,
1196
+ url: "/flight-reviews/{id}",
1197
+ ...options
1198
+ });
1199
+ }, "flightReviewsControllerGetFlightReview");
1200
+ var flightReviewsControllerGetFlightReviews = /* @__PURE__ */ __name((options) => {
1201
+ return (options.client ?? client).get({
1202
+ security: [
1203
+ {
1204
+ name: "x-api-token",
1205
+ type: "apiKey"
1206
+ }
1207
+ ],
1208
+ responseTransformer: flightReviewsControllerGetFlightReviewsResponseTransformer,
1209
+ url: "/flight-reviews",
1210
+ ...options
1211
+ });
1212
+ }, "flightReviewsControllerGetFlightReviews");
1078
1213
  var keysControllerGetProvenanceCryptoKey = /* @__PURE__ */ __name((options) => {
1079
1214
  return (options?.client ?? client).get({
1080
1215
  url: "/keys",
1081
1216
  ...options
1082
1217
  });
1083
1218
  }, "keysControllerGetProvenanceCryptoKey");
1219
+ var missionsControllerGetMission = /* @__PURE__ */ __name((options) => {
1220
+ return (options.client ?? client).get({
1221
+ security: [
1222
+ {
1223
+ name: "x-api-token",
1224
+ type: "apiKey"
1225
+ }
1226
+ ],
1227
+ responseTransformer: missionsControllerGetMissionResponseTransformer,
1228
+ url: "/missions/{id}",
1229
+ ...options
1230
+ });
1231
+ }, "missionsControllerGetMission");
1232
+ var missionsControllerGetMissions = /* @__PURE__ */ __name((options) => {
1233
+ return (options?.client ?? client).get({
1234
+ security: [
1235
+ {
1236
+ name: "x-api-token",
1237
+ type: "apiKey"
1238
+ }
1239
+ ],
1240
+ responseTransformer: missionsControllerGetMissionsResponseTransformer,
1241
+ url: "/missions",
1242
+ ...options
1243
+ });
1244
+ }, "missionsControllerGetMissions");
1084
1245
  var missionsControllerCreateMissions = /* @__PURE__ */ __name((options) => {
1085
1246
  return (options.client ?? client).post({
1086
1247
  security: [
@@ -1180,12 +1341,6 @@ var schemaControllerGetEventSchema = /* @__PURE__ */ __name((options) => {
1180
1341
  ...options
1181
1342
  });
1182
1343
  }, "schemaControllerGetEventSchema");
1183
- var schemaControllerGetFlightPlanSchema = /* @__PURE__ */ __name((options) => {
1184
- return (options?.client ?? client).get({
1185
- url: "/schema/flight-plan",
1186
- ...options
1187
- });
1188
- }, "schemaControllerGetFlightPlanSchema");
1189
1344
  var vaultsControllerCreateVaults = /* @__PURE__ */ __name((options) => {
1190
1345
  return (options.client ?? client).post({
1191
1346
  security: [
@@ -1214,6 +1369,7 @@ var webhooksControllerGetMany = /* @__PURE__ */ __name((options) => {
1214
1369
  type: "apiKey"
1215
1370
  }
1216
1371
  ],
1372
+ responseTransformer: webhooksControllerGetManyResponseTransformer,
1217
1373
  url: "/org/{org_id}/webhooks",
1218
1374
  ...options
1219
1375
  });
@@ -1254,6 +1410,7 @@ var webhooksControllerGet = /* @__PURE__ */ __name((options) => {
1254
1410
  type: "apiKey"
1255
1411
  }
1256
1412
  ],
1413
+ responseTransformer: webhooksControllerGetResponseTransformer,
1257
1414
  url: "/org/{org_id}/webhooks/{id}",
1258
1415
  ...options
1259
1416
  });
@@ -1266,6 +1423,7 @@ var webhooksControllerUpdate = /* @__PURE__ */ __name((options) => {
1266
1423
  type: "apiKey"
1267
1424
  }
1268
1425
  ],
1426
+ responseTransformer: webhooksControllerUpdateResponseTransformer,
1269
1427
  url: "/org/{org_id}/webhooks/{id}",
1270
1428
  ...options,
1271
1429
  headers: {
@@ -1282,8 +1440,13 @@ var webhooksControllerRegenerateSecret = /* @__PURE__ */ __name((options) => {
1282
1440
  type: "apiKey"
1283
1441
  }
1284
1442
  ],
1443
+ responseTransformer: webhooksControllerRegenerateSecretResponseTransformer,
1285
1444
  url: "/org/{org_id}/webhooks/{id}/regenerate-secret",
1286
- ...options
1445
+ ...options,
1446
+ headers: {
1447
+ "Content-Type": "application/json",
1448
+ ...options.headers
1449
+ }
1287
1450
  });
1288
1451
  }, "webhooksControllerRegenerateSecret");
1289
1452
  var webhooksControllerTest = /* @__PURE__ */ __name((options) => {
@@ -1310,6 +1473,84 @@ var webhooksControllerGetStatus = /* @__PURE__ */ __name((options) => {
1310
1473
  ...options
1311
1474
  });
1312
1475
  }, "webhooksControllerGetStatus");
1476
+ var zonesControllerCreateZone = /* @__PURE__ */ __name((options) => {
1477
+ return (options.client ?? client).post({
1478
+ security: [
1479
+ {
1480
+ name: "x-api-token",
1481
+ type: "apiKey"
1482
+ }
1483
+ ],
1484
+ responseTransformer: zonesControllerCreateZoneResponseTransformer,
1485
+ url: "/zones",
1486
+ ...options,
1487
+ headers: {
1488
+ "Content-Type": "application/json",
1489
+ ...options.headers
1490
+ }
1491
+ });
1492
+ }, "zonesControllerCreateZone");
1493
+ var zonesControllerDeleteZone = /* @__PURE__ */ __name((options) => {
1494
+ return (options.client ?? client).delete({
1495
+ security: [
1496
+ {
1497
+ name: "x-api-token",
1498
+ type: "apiKey"
1499
+ }
1500
+ ],
1501
+ url: "/zones/{id}",
1502
+ ...options
1503
+ });
1504
+ }, "zonesControllerDeleteZone");
1505
+ var zonesControllerUpdateZone = /* @__PURE__ */ __name((options) => {
1506
+ return (options.client ?? client).put({
1507
+ security: [
1508
+ {
1509
+ name: "x-api-token",
1510
+ type: "apiKey"
1511
+ }
1512
+ ],
1513
+ responseTransformer: zonesControllerUpdateZoneResponseTransformer,
1514
+ url: "/zones/{id}",
1515
+ ...options,
1516
+ headers: {
1517
+ "Content-Type": "application/json",
1518
+ ...options.headers
1519
+ }
1520
+ });
1521
+ }, "zonesControllerUpdateZone");
1522
+ var eventProcessorMissionsSyncControllerResyncMissions = /* @__PURE__ */ __name((options) => {
1523
+ return (options.client ?? client).put({
1524
+ security: [
1525
+ {
1526
+ name: "x-api-token",
1527
+ type: "apiKey"
1528
+ }
1529
+ ],
1530
+ url: "/event-processor/missions/sync",
1531
+ ...options,
1532
+ headers: {
1533
+ "Content-Type": "application/json",
1534
+ ...options.headers
1535
+ }
1536
+ });
1537
+ }, "eventProcessorMissionsSyncControllerResyncMissions");
1538
+ var eventProcessorFlightReviewsSyncControllerResyncFlightReviews = /* @__PURE__ */ __name((options) => {
1539
+ return (options.client ?? client).put({
1540
+ security: [
1541
+ {
1542
+ name: "x-api-token",
1543
+ type: "apiKey"
1544
+ }
1545
+ ],
1546
+ url: "/event-processor/flightreviews",
1547
+ ...options,
1548
+ headers: {
1549
+ "Content-Type": "application/json",
1550
+ ...options.headers
1551
+ }
1552
+ });
1553
+ }, "eventProcessorFlightReviewsSyncControllerResyncFlightReviews");
1313
1554
  var alchemyControllerHandleWebhook = /* @__PURE__ */ __name((options) => {
1314
1555
  return (options.client ?? client).post({
1315
1556
  url: "/webhooks/inbound/alchemy",
@@ -1523,30 +1764,51 @@ var Event = z.union([
1523
1764
 
1524
1765
  // src/event/parser.ts
1525
1766
  var WEBHOOK_SECRET_HEADER = "X-Webhook-Secret";
1767
+ var WEBHOOK_PREVIOUS_SECRET_HEADER = "X-Webhook-Previous-Secret";
1768
+ var WEBHOOK_PREVIOUS_SECRET_EXPIRES_AT_HEADER = "X-Webhook-Previous-Secret-Expires-At";
1526
1769
  function parseWebhookEvent(req, webhookSecret) {
1527
- const secret = getSecretHeader(req.headers);
1528
- if (typeof secret !== "string") {
1770
+ const incoming = getFirstHeader(req.headers, WEBHOOK_SECRET_HEADER);
1771
+ if (typeof incoming !== "string") {
1529
1772
  throw new Error("Webhook request signature is not a string");
1530
1773
  }
1531
1774
  if (!Buffer.isBuffer(req.body)) {
1532
1775
  throw new Error("Webhook request body is not a Buffer");
1533
1776
  }
1534
- if (secret !== webhookSecret) {
1777
+ if (incoming === webhookSecret) {
1778
+ return Event.parse(JSON.parse(req.body.toString("utf-8")));
1779
+ }
1780
+ const announcedPrevious = getFirstHeader(req.headers, WEBHOOK_PREVIOUS_SECRET_HEADER);
1781
+ const expiresRaw = getFirstHeader(req.headers, WEBHOOK_PREVIOUS_SECRET_EXPIRES_AT_HEADER);
1782
+ if (announcedPrevious === void 0 || expiresRaw === void 0) {
1535
1783
  throw new Error("Invalid webhook secret");
1536
1784
  }
1537
- return Event.parse(JSON.parse(req.body.toString("utf-8")));
1785
+ const expiresAt = new Date(expiresRaw);
1786
+ if (Number.isNaN(expiresAt.getTime())) {
1787
+ throw new Error("Invalid webhook secret");
1788
+ }
1789
+ if (Date.now() >= expiresAt.getTime()) {
1790
+ throw new Error("Invalid webhook secret");
1791
+ }
1792
+ if (webhookSecret === announcedPrevious) {
1793
+ return Event.parse(JSON.parse(req.body.toString("utf-8")));
1794
+ }
1795
+ throw new Error("Invalid webhook secret");
1538
1796
  }
1539
1797
  __name(parseWebhookEvent, "parseWebhookEvent");
1540
- function getSecretHeader(headers) {
1541
- let value = headers[WEBHOOK_SECRET_HEADER] ?? headers[WEBHOOK_SECRET_HEADER.toLowerCase()];
1798
+ function getFirstHeader(headers, canonicalName) {
1799
+ const lower = canonicalName.toLowerCase();
1800
+ let value = headers[canonicalName] ?? headers[lower];
1542
1801
  if (Array.isArray(value)) {
1543
1802
  value = value[0];
1544
1803
  }
1545
- return value;
1804
+ return typeof value === "string" ? value : void 0;
1546
1805
  }
1547
- __name(getSecretHeader, "getSecretHeader");
1806
+ __name(getFirstHeader, "getFirstHeader");
1548
1807
  export {
1549
1808
  Event,
1809
+ WEBHOOK_PREVIOUS_SECRET_EXPIRES_AT_HEADER,
1810
+ WEBHOOK_PREVIOUS_SECRET_HEADER,
1811
+ WEBHOOK_SECRET_HEADER,
1550
1812
  alchemyControllerHandleWebhook,
1551
1813
  apiControllerGetError,
1552
1814
  apiControllerGetHello,
@@ -1564,9 +1826,13 @@ export {
1564
1826
  createClient,
1565
1827
  createConfig,
1566
1828
  dlqRedriverControllerRedriveDlq,
1829
+ eventProcessorFlightReviewsSyncControllerResyncFlightReviews,
1830
+ eventProcessorMissionsSyncControllerResyncMissions,
1567
1831
  flightPlansControllerCreate,
1568
1832
  flightPlansControllerGet,
1569
1833
  flightPlansControllerGetMany,
1834
+ flightReviewsControllerGetFlightReview,
1835
+ flightReviewsControllerGetFlightReviews,
1570
1836
  flightsControllerCreatePresignedUrls,
1571
1837
  flightsControllerGenerateStorageKey,
1572
1838
  flightsControllerGetFlight,
@@ -1582,13 +1848,14 @@ export {
1582
1848
  mergeHeaders,
1583
1849
  missionsControllerCloseMission,
1584
1850
  missionsControllerCreateMissions,
1851
+ missionsControllerGetMission,
1852
+ missionsControllerGetMissions,
1585
1853
  missionsControllerRepriceMissions,
1586
1854
  missionsControllerUpdateMissions,
1587
1855
  parseWebhookEvent,
1588
1856
  quotesControllerCreateQuote,
1589
1857
  quotesControllerGetQuote,
1590
1858
  schemaControllerGetEventSchema,
1591
- schemaControllerGetFlightPlanSchema,
1592
1859
  urlSearchParamsBodySerializer,
1593
1860
  vaultsControllerCreateVaults,
1594
1861
  webhooksControllerCreate,
@@ -1598,5 +1865,8 @@ export {
1598
1865
  webhooksControllerGetStatus,
1599
1866
  webhooksControllerRegenerateSecret,
1600
1867
  webhooksControllerTest,
1601
- webhooksControllerUpdate
1868
+ webhooksControllerUpdate,
1869
+ zonesControllerCreateZone,
1870
+ zonesControllerDeleteZone,
1871
+ zonesControllerUpdateZone
1602
1872
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@layer-drone/protocol",
3
3
  "description": "Layer Drone protocol SDK with typed API client and event parsing",
4
- "version": "0.3.0",
4
+ "version": "0.6.0",
5
5
  "license": "MIT",
6
6
  "files": [
7
7
  "dist",
@@ -8,8 +8,7 @@ import type { Middleware } from "./utils.js";
8
8
  export type ResponseStyle = "data" | "fields";
9
9
 
10
10
  export interface Config<T extends ClientOptions = ClientOptions>
11
- extends Omit<RequestInit, "body" | "headers" | "method">,
12
- CoreConfig {
11
+ extends Omit<RequestInit, "body" | "headers" | "method">, CoreConfig {
13
12
  /**
14
13
  * Base URL for all requests made by this client.
15
14
  */
@@ -56,9 +55,9 @@ export interface RequestOptions<
56
55
  ThrowOnError extends boolean = boolean,
57
56
  Url extends string = string,
58
57
  > extends Config<{
59
- responseStyle: TResponseStyle;
60
- throwOnError: ThrowOnError;
61
- }> {
58
+ responseStyle: TResponseStyle;
59
+ throwOnError: ThrowOnError;
60
+ }> {
62
61
  /**
63
62
  * Any body that you want to add to your request.
64
63
  *
@@ -1,6 +1,5 @@
1
1
  interface SerializeOptions<T>
2
- extends SerializePrimitiveOptions,
3
- SerializerOptions<T> {}
2
+ extends SerializePrimitiveOptions, SerializerOptions<T> {}
4
3
 
5
4
  interface SerializePrimitiveOptions {
6
5
  allowReserved?: boolean;