@gscdump/contracts 5.9.1 → 7.0.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.
@@ -589,7 +589,9 @@ export declare const partnerEndpoints: {
589
589
  syncStatus: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodEnum<{
590
590
  error: "error";
591
591
  syncing: "syncing";
592
+ idle: "idle";
592
593
  pending: "pending";
594
+ partial: "partial";
593
595
  synced: "synced";
594
596
  }>>>;
595
597
  syncProgress: import("zod").ZodOptional<import("zod").ZodObject<{
@@ -807,9 +809,9 @@ export declare const partnerEndpoints: {
807
809
  syncStatus: import("zod").ZodEnum<{
808
810
  error: "error";
809
811
  syncing: "syncing";
812
+ idle: "idle";
810
813
  pending: "pending";
811
814
  synced: "synced";
812
- idle: "idle";
813
815
  }>;
814
816
  lastSyncAt: import("zod").ZodNullable<import("zod").ZodNumber>;
815
817
  newestDateSynced: import("zod").ZodNullable<import("zod").ZodString>;
@@ -831,7 +833,9 @@ export declare const partnerEndpoints: {
831
833
  syncStatus: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodEnum<{
832
834
  error: "error";
833
835
  syncing: "syncing";
836
+ idle: "idle";
834
837
  pending: "pending";
838
+ partial: "partial";
835
839
  synced: "synced";
836
840
  }>>>;
837
841
  syncProgress: import("zod").ZodOptional<import("zod").ZodObject<{
@@ -885,9 +889,10 @@ export declare const partnerEndpoints: {
885
889
  status: import("zod").ZodEnum<{
886
890
  error: "error";
887
891
  syncing: "syncing";
892
+ idle: "idle";
888
893
  pending: "pending";
894
+ partial: "partial";
889
895
  synced: "synced";
890
- idle: "idle";
891
896
  }>;
892
897
  message: import("zod").ZodOptional<import("zod").ZodString>;
893
898
  existing: import("zod").ZodOptional<import("zod").ZodBoolean>;
@@ -1176,7 +1176,9 @@ export declare const gscdumpAvailableSiteSchema: z.ZodObject<{
1176
1176
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
1177
1177
  error: "error";
1178
1178
  syncing: "syncing";
1179
+ idle: "idle";
1179
1180
  pending: "pending";
1181
+ partial: "partial";
1180
1182
  synced: "synced";
1181
1183
  }>>>;
1182
1184
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -1195,9 +1197,9 @@ export declare const gscdumpUserSiteSchema: z.ZodObject<{
1195
1197
  syncStatus: z.ZodEnum<{
1196
1198
  error: "error";
1197
1199
  syncing: "syncing";
1200
+ idle: "idle";
1198
1201
  pending: "pending";
1199
1202
  synced: "synced";
1200
- idle: "idle";
1201
1203
  }>;
1202
1204
  lastSyncAt: z.ZodNullable<z.ZodNumber>;
1203
1205
  newestDateSynced: z.ZodNullable<z.ZodString>;
@@ -1210,9 +1212,10 @@ export declare const gscdumpSiteRegistrationSchema: z.ZodObject<{
1210
1212
  status: z.ZodEnum<{
1211
1213
  error: "error";
1212
1214
  syncing: "syncing";
1215
+ idle: "idle";
1213
1216
  pending: "pending";
1217
+ partial: "partial";
1214
1218
  synced: "synced";
1215
- idle: "idle";
1216
1219
  }>;
1217
1220
  message: z.ZodOptional<z.ZodString>;
1218
1221
  existing: z.ZodOptional<z.ZodBoolean>;
@@ -2153,8 +2156,8 @@ export declare const gscdumpSyncProgressResponseSchema: z.ZodObject<{
2153
2156
  authFailureCount: z.ZodNumber;
2154
2157
  currentPhase: z.ZodEnum<{
2155
2158
  complete: "complete";
2156
- initial: "initial";
2157
2159
  backfill: "backfill";
2160
+ initial: "initial";
2158
2161
  }>;
2159
2162
  isStalled: z.ZodBoolean;
2160
2163
  stallDays: z.ZodNumber;
@@ -3680,8 +3683,8 @@ export declare const partnerControlEndpointSchemas: {
3680
3683
  authFailureCount: z.ZodNumber;
3681
3684
  currentPhase: z.ZodEnum<{
3682
3685
  complete: "complete";
3683
- initial: "initial";
3684
3686
  backfill: "backfill";
3687
+ initial: "initial";
3685
3688
  }>;
3686
3689
  isStalled: z.ZodBoolean;
3687
3690
  stallDays: z.ZodNumber;
@@ -3822,7 +3825,9 @@ export declare const partnerControlEndpointSchemas: {
3822
3825
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
3823
3826
  error: "error";
3824
3827
  syncing: "syncing";
3828
+ idle: "idle";
3825
3829
  pending: "pending";
3830
+ partial: "partial";
3826
3831
  synced: "synced";
3827
3832
  }>>>;
3828
3833
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -4027,9 +4032,9 @@ export declare const partnerControlEndpointSchemas: {
4027
4032
  syncStatus: z.ZodEnum<{
4028
4033
  error: "error";
4029
4034
  syncing: "syncing";
4035
+ idle: "idle";
4030
4036
  pending: "pending";
4031
4037
  synced: "synced";
4032
- idle: "idle";
4033
4038
  }>;
4034
4039
  lastSyncAt: z.ZodNullable<z.ZodNumber>;
4035
4040
  newestDateSynced: z.ZodNullable<z.ZodString>;
@@ -4048,7 +4053,9 @@ export declare const partnerControlEndpointSchemas: {
4048
4053
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
4049
4054
  error: "error";
4050
4055
  syncing: "syncing";
4056
+ idle: "idle";
4051
4057
  pending: "pending";
4058
+ partial: "partial";
4052
4059
  synced: "synced";
4053
4060
  }>>>;
4054
4061
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -4099,9 +4106,10 @@ export declare const partnerControlEndpointSchemas: {
4099
4106
  status: z.ZodEnum<{
4100
4107
  error: "error";
4101
4108
  syncing: "syncing";
4109
+ idle: "idle";
4102
4110
  pending: "pending";
4111
+ partial: "partial";
4103
4112
  synced: "synced";
4104
- idle: "idle";
4105
4113
  }>;
4106
4114
  message: z.ZodOptional<z.ZodString>;
4107
4115
  existing: z.ZodOptional<z.ZodBoolean>;
@@ -5501,8 +5509,8 @@ export declare const partnerEndpointSchemas: {
5501
5509
  authFailureCount: z.ZodNumber;
5502
5510
  currentPhase: z.ZodEnum<{
5503
5511
  complete: "complete";
5504
- initial: "initial";
5505
5512
  backfill: "backfill";
5513
+ initial: "initial";
5506
5514
  }>;
5507
5515
  isStalled: z.ZodBoolean;
5508
5516
  stallDays: z.ZodNumber;
@@ -5643,7 +5651,9 @@ export declare const partnerEndpointSchemas: {
5643
5651
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
5644
5652
  error: "error";
5645
5653
  syncing: "syncing";
5654
+ idle: "idle";
5646
5655
  pending: "pending";
5656
+ partial: "partial";
5647
5657
  synced: "synced";
5648
5658
  }>>>;
5649
5659
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -5848,9 +5858,9 @@ export declare const partnerEndpointSchemas: {
5848
5858
  syncStatus: z.ZodEnum<{
5849
5859
  error: "error";
5850
5860
  syncing: "syncing";
5861
+ idle: "idle";
5851
5862
  pending: "pending";
5852
5863
  synced: "synced";
5853
- idle: "idle";
5854
5864
  }>;
5855
5865
  lastSyncAt: z.ZodNullable<z.ZodNumber>;
5856
5866
  newestDateSynced: z.ZodNullable<z.ZodString>;
@@ -5869,7 +5879,9 @@ export declare const partnerEndpointSchemas: {
5869
5879
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
5870
5880
  error: "error";
5871
5881
  syncing: "syncing";
5882
+ idle: "idle";
5872
5883
  pending: "pending";
5884
+ partial: "partial";
5873
5885
  synced: "synced";
5874
5886
  }>>>;
5875
5887
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -5920,9 +5932,10 @@ export declare const partnerEndpointSchemas: {
5920
5932
  status: z.ZodEnum<{
5921
5933
  error: "error";
5922
5934
  syncing: "syncing";
5935
+ idle: "idle";
5923
5936
  pending: "pending";
5937
+ partial: "partial";
5924
5938
  synced: "synced";
5925
- idle: "idle";
5926
5939
  }>;
5927
5940
  message: z.ZodOptional<z.ZodString>;
5928
5941
  existing: z.ZodOptional<z.ZodBoolean>;
package/dist/schemas.mjs CHANGED
@@ -494,8 +494,10 @@ const gscdumpAvailableSiteSchema = z.object({
494
494
  siteId: z.string().optional(),
495
495
  intId: z.number().nullable().optional(),
496
496
  syncStatus: z.enum([
497
+ "idle",
497
498
  "pending",
498
499
  "syncing",
500
+ "partial",
499
501
  "synced",
500
502
  "error"
501
503
  ]).nullable().optional(),
@@ -531,6 +533,7 @@ const gscdumpSiteRegistrationSchema = z.object({
531
533
  "idle",
532
534
  "pending",
533
535
  "syncing",
536
+ "partial",
534
537
  "synced",
535
538
  "error"
536
539
  ]),
package/dist/types.d.mts CHANGED
@@ -448,7 +448,7 @@ export interface GscdumpAvailableSite {
448
448
  siteId?: string;
449
449
  /** Integer alias (`user_sites.int_id`) — the int JOIN key partners denormalize into their own catalog namespaces. Present on registered sites. */
450
450
  intId?: number | null;
451
- syncStatus?: 'pending' | 'syncing' | 'synced' | 'error' | null;
451
+ syncStatus?: 'idle' | 'pending' | 'syncing' | 'partial' | 'synced' | 'error' | null;
452
452
  syncProgress?: {
453
453
  completed: number;
454
454
  failed?: number;
@@ -474,7 +474,7 @@ export interface GscdumpSiteRegistration {
474
474
  intId?: number | null;
475
475
  /** Team-scoped catalog identifier (`user_sites.catalog_site_id`). Echoes caller input or defaults to `intId`. */
476
476
  catalogSiteId?: number | null;
477
- status: 'idle' | 'pending' | 'syncing' | 'synced' | 'error';
477
+ status: 'idle' | 'pending' | 'syncing' | 'partial' | 'synced' | 'error';
478
478
  message?: string;
479
479
  existing?: boolean;
480
480
  indexingEligible?: boolean;
@@ -17,12 +17,12 @@ export declare const GSCDUMP_V1_ANALYTICS_DIMENSIONS: readonly ["page", "query",
17
17
  export declare function createGscdumpV1BrowserSchemas(realtimeSchemas?: RealtimeV1Schemas): {
18
18
  analyticsRowsRequest: z.ZodObject<{
19
19
  dimensions: z.ZodArray<z.ZodEnum<{
20
+ date: "date";
20
21
  page: "page";
21
22
  query: "query";
22
23
  queryCanonical: "queryCanonical";
23
24
  country: "country";
24
25
  device: "device";
25
- date: "date";
26
26
  searchAppearance: "searchAppearance";
27
27
  hour: "hour";
28
28
  }>>;
@@ -744,12 +744,12 @@ export declare function createGscdumpV1Protocol(): {
744
744
  readonly GOOGLE_NEWS: "googleNews";
745
745
  }>>;
746
746
  dimensions: z.ZodArray<z.ZodEnum<{
747
+ date: "date";
747
748
  page: "page";
748
749
  query: "query";
749
750
  queryCanonical: "queryCanonical";
750
751
  country: "country";
751
752
  device: "device";
752
- date: "date";
753
753
  searchAppearance: "searchAppearance";
754
754
  hour: "hour";
755
755
  }>>;
@@ -764,12 +764,12 @@ export declare function createGscdumpV1Protocol(): {
764
764
  readonly GOOGLE_NEWS: "googleNews";
765
765
  }>>;
766
766
  dimensions: z.ZodArray<z.ZodEnum<{
767
+ date: "date";
767
768
  page: "page";
768
769
  query: "query";
769
770
  queryCanonical: "queryCanonical";
770
771
  country: "country";
771
772
  device: "device";
772
- date: "date";
773
773
  searchAppearance: "searchAppearance";
774
774
  hour: "hour";
775
775
  }>>;
@@ -901,12 +901,12 @@ export declare function createGscdumpV1Protocol(): {
901
901
  readonly GOOGLE_NEWS: "googleNews";
902
902
  }>>;
903
903
  dimensions: z.ZodArray<z.ZodEnum<{
904
+ date: "date";
904
905
  page: "page";
905
906
  query: "query";
906
907
  queryCanonical: "queryCanonical";
907
908
  country: "country";
908
909
  device: "device";
909
- date: "date";
910
910
  searchAppearance: "searchAppearance";
911
911
  hour: "hour";
912
912
  }>>;
@@ -921,12 +921,12 @@ export declare function createGscdumpV1Protocol(): {
921
921
  readonly GOOGLE_NEWS: "googleNews";
922
922
  }>>;
923
923
  dimensions: z.ZodArray<z.ZodEnum<{
924
+ date: "date";
924
925
  page: "page";
925
926
  query: "query";
926
927
  queryCanonical: "queryCanonical";
927
928
  country: "country";
928
929
  device: "device";
929
- date: "date";
930
930
  searchAppearance: "searchAppearance";
931
931
  hour: "hour";
932
932
  }>>;
@@ -1038,12 +1038,12 @@ export declare function createGscdumpV1Protocol(): {
1038
1038
  }, z.core.$strip>>;
1039
1039
  analyticsRowsRequest: z.ZodObject<{
1040
1040
  dimensions: z.ZodArray<z.ZodEnum<{
1041
+ date: "date";
1041
1042
  page: "page";
1042
1043
  query: "query";
1043
1044
  queryCanonical: "queryCanonical";
1044
1045
  country: "country";
1045
1046
  device: "device";
1046
- date: "date";
1047
1047
  searchAppearance: "searchAppearance";
1048
1048
  hour: "hour";
1049
1049
  }>>;
@@ -1315,7 +1315,9 @@ export declare function createGscdumpV1Protocol(): {
1315
1315
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
1316
1316
  error: "error";
1317
1317
  syncing: "syncing";
1318
+ idle: "idle";
1318
1319
  pending: "pending";
1320
+ partial: "partial";
1319
1321
  synced: "synced";
1320
1322
  }>>>;
1321
1323
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -1345,7 +1347,9 @@ export declare function createGscdumpV1Protocol(): {
1345
1347
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
1346
1348
  error: "error";
1347
1349
  syncing: "syncing";
1350
+ idle: "idle";
1348
1351
  pending: "pending";
1352
+ partial: "partial";
1349
1353
  synced: "synced";
1350
1354
  }>>>;
1351
1355
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -4449,9 +4453,10 @@ export declare function createGscdumpV1Protocol(): {
4449
4453
  status: z.ZodEnum<{
4450
4454
  error: "error";
4451
4455
  syncing: "syncing";
4456
+ idle: "idle";
4452
4457
  pending: "pending";
4458
+ partial: "partial";
4453
4459
  synced: "synced";
4454
- idle: "idle";
4455
4460
  }>;
4456
4461
  message: z.ZodOptional<z.ZodString>;
4457
4462
  existing: z.ZodOptional<z.ZodBoolean>;
@@ -4612,9 +4617,10 @@ export declare function createGscdumpV1Protocol(): {
4612
4617
  status: z.ZodEnum<{
4613
4618
  error: "error";
4614
4619
  syncing: "syncing";
4620
+ idle: "idle";
4615
4621
  pending: "pending";
4622
+ partial: "partial";
4616
4623
  synced: "synced";
4617
- idle: "idle";
4618
4624
  }>;
4619
4625
  message: z.ZodOptional<z.ZodString>;
4620
4626
  existing: z.ZodOptional<z.ZodBoolean>;
@@ -4877,7 +4883,9 @@ export declare function createGscdumpV1Protocol(): {
4877
4883
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
4878
4884
  error: "error";
4879
4885
  syncing: "syncing";
4886
+ idle: "idle";
4880
4887
  pending: "pending";
4888
+ partial: "partial";
4881
4889
  synced: "synced";
4882
4890
  }>>>;
4883
4891
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -4909,7 +4917,9 @@ export declare function createGscdumpV1Protocol(): {
4909
4917
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
4910
4918
  error: "error";
4911
4919
  syncing: "syncing";
4920
+ idle: "idle";
4912
4921
  pending: "pending";
4922
+ partial: "partial";
4913
4923
  synced: "synced";
4914
4924
  }>>>;
4915
4925
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -5622,7 +5632,9 @@ export declare function createGscdumpV1Protocol(): {
5622
5632
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
5623
5633
  error: "error";
5624
5634
  syncing: "syncing";
5635
+ idle: "idle";
5625
5636
  pending: "pending";
5637
+ partial: "partial";
5626
5638
  synced: "synced";
5627
5639
  }>>>;
5628
5640
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -5652,7 +5664,9 @@ export declare function createGscdumpV1Protocol(): {
5652
5664
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
5653
5665
  error: "error";
5654
5666
  syncing: "syncing";
5667
+ idle: "idle";
5655
5668
  pending: "pending";
5669
+ partial: "partial";
5656
5670
  synced: "synced";
5657
5671
  }>>>;
5658
5672
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -5811,9 +5825,10 @@ export declare function createGscdumpV1Protocol(): {
5811
5825
  status: z.ZodEnum<{
5812
5826
  error: "error";
5813
5827
  syncing: "syncing";
5828
+ idle: "idle";
5814
5829
  pending: "pending";
5830
+ partial: "partial";
5815
5831
  synced: "synced";
5816
- idle: "idle";
5817
5832
  }>;
5818
5833
  message: z.ZodOptional<z.ZodString>;
5819
5834
  existing: z.ZodOptional<z.ZodBoolean>;
@@ -5974,9 +5989,10 @@ export declare function createGscdumpV1Protocol(): {
5974
5989
  status: z.ZodEnum<{
5975
5990
  error: "error";
5976
5991
  syncing: "syncing";
5992
+ idle: "idle";
5977
5993
  pending: "pending";
5994
+ partial: "partial";
5978
5995
  synced: "synced";
5979
- idle: "idle";
5980
5996
  }>;
5981
5997
  message: z.ZodOptional<z.ZodString>;
5982
5998
  existing: z.ZodOptional<z.ZodBoolean>;
@@ -6392,7 +6408,9 @@ export declare function createGscdumpV1Protocol(): {
6392
6408
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
6393
6409
  error: "error";
6394
6410
  syncing: "syncing";
6411
+ idle: "idle";
6395
6412
  pending: "pending";
6413
+ partial: "partial";
6396
6414
  synced: "synced";
6397
6415
  }>>>;
6398
6416
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -6424,7 +6442,9 @@ export declare function createGscdumpV1Protocol(): {
6424
6442
  syncStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
6425
6443
  error: "error";
6426
6444
  syncing: "syncing";
6445
+ idle: "idle";
6427
6446
  pending: "pending";
6447
+ partial: "partial";
6428
6448
  synced: "synced";
6429
6449
  }>>>;
6430
6450
  syncProgress: z.ZodOptional<z.ZodObject<{
@@ -22696,12 +22716,12 @@ export declare function createGscdumpV1Protocol(): {
22696
22716
  }, z.core.$strict>;
22697
22717
  readonly body: z.ZodObject<{
22698
22718
  dimensions: z.ZodArray<z.ZodEnum<{
22719
+ date: "date";
22699
22720
  page: "page";
22700
22721
  query: "query";
22701
22722
  queryCanonical: "queryCanonical";
22702
22723
  country: "country";
22703
22724
  device: "device";
22704
- date: "date";
22705
22725
  searchAppearance: "searchAppearance";
22706
22726
  hour: "hour";
22707
22727
  }>>;
@@ -22899,12 +22919,12 @@ export declare function createGscdumpV1Protocol(): {
22899
22919
  readonly GOOGLE_NEWS: "googleNews";
22900
22920
  }>>;
22901
22921
  dimensions: z.ZodArray<z.ZodEnum<{
22922
+ date: "date";
22902
22923
  page: "page";
22903
22924
  query: "query";
22904
22925
  queryCanonical: "queryCanonical";
22905
22926
  country: "country";
22906
22927
  device: "device";
22907
- date: "date";
22908
22928
  searchAppearance: "searchAppearance";
22909
22929
  hour: "hour";
22910
22930
  }>>;
@@ -22919,12 +22939,12 @@ export declare function createGscdumpV1Protocol(): {
22919
22939
  readonly GOOGLE_NEWS: "googleNews";
22920
22940
  }>>;
22921
22941
  dimensions: z.ZodArray<z.ZodEnum<{
22942
+ date: "date";
22922
22943
  page: "page";
22923
22944
  query: "query";
22924
22945
  queryCanonical: "queryCanonical";
22925
22946
  country: "country";
22926
22947
  device: "device";
22927
- date: "date";
22928
22948
  searchAppearance: "searchAppearance";
22929
22949
  hour: "hour";
22930
22950
  }>>;
@@ -23169,12 +23189,12 @@ export declare function createGscdumpV1Protocol(): {
23169
23189
  readonly GOOGLE_NEWS: "googleNews";
23170
23190
  }>>;
23171
23191
  dimensions: z.ZodArray<z.ZodEnum<{
23192
+ date: "date";
23172
23193
  page: "page";
23173
23194
  query: "query";
23174
23195
  queryCanonical: "queryCanonical";
23175
23196
  country: "country";
23176
23197
  device: "device";
23177
- date: "date";
23178
23198
  searchAppearance: "searchAppearance";
23179
23199
  hour: "hour";
23180
23200
  }>>;
@@ -23189,12 +23209,12 @@ export declare function createGscdumpV1Protocol(): {
23189
23209
  readonly GOOGLE_NEWS: "googleNews";
23190
23210
  }>>;
23191
23211
  dimensions: z.ZodArray<z.ZodEnum<{
23212
+ date: "date";
23192
23213
  page: "page";
23193
23214
  query: "query";
23194
23215
  queryCanonical: "queryCanonical";
23195
23216
  country: "country";
23196
23217
  device: "device";
23197
- date: "date";
23198
23218
  searchAppearance: "searchAppearance";
23199
23219
  hour: "hour";
23200
23220
  }>>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gscdump/contracts",
3
3
  "type": "module",
4
- "version": "5.9.1",
4
+ "version": "7.0.0",
5
5
  "description": "Shared gscdump.com API, webhook, realtime, and lifecycle contracts.",
6
6
  "author": {
7
7
  "name": "Harlan Wilton",