@land-catalyst/batch-data-sdk 1.2.8 → 1.2.10

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.
@@ -16,7 +16,7 @@
16
16
  * .build();
17
17
  * ```
18
18
  */
19
- import { StringFilter, NumericRangeFilter, DateRangeFilter, GeoLocationDistance, GeoLocationBoundingBox, GeoLocationPolygon, AddressSearchCriteria, AssessmentSearchCriteria, BuildingSearchCriteria, CompAddressSearchCriteria, DemographicsSearchCriteria, ForeclosureSearchCriteria, GeneralSearchCriteria, IdsSearchCriteria, IntelSearchCriteria, InvoluntaryLienSearchCriteria, LegalSearchCriteria, ListingSearchCriteria, LotSearchCriteria, OpenLienSearchCriteria, OwnerSearchCriteria, PermitSearchCriteria, PropertyOwnerProfileSearchCriteria, SaleSearchCriteria, TaxSearchCriteria, ValuationSearchCriteria, OrSearchCriteria, SearchCriteria, DeliveryConfig, EventHubConfig, PropertySubscriptionRequest, QuickListValueWithNot, PropertyLookupRequest, PropertyLookupRequestItem, PropertyLookupRequestAddress, PropertyLookupOptions, PropertyPermitRequest, PropertyCountRequest, PropertySearchRequest, PropertySearchAsyncRequest, PropertyLookupAsyncRequest, GeoPoint } from "../core/types";
19
+ import { StringFilter, NumericRangeFilter, DateRangeFilter, GeoLocationDistance, GeoLocationBoundingBox, GeoLocationPolygon, AddressSearchCriteria, AssessmentSearchCriteria, BuildingSearchCriteria, CompAddressSearchCriteria, DemographicsSearchCriteria, ForeclosureSearchCriteria, GeneralSearchCriteria, IdsSearchCriteria, IntelSearchCriteria, InvoluntaryLienSearchCriteria, LegalSearchCriteria, ListingSearchCriteria, LotSearchCriteria, OpenLienSearchCriteria, OwnerSearchCriteria, PermitSearchCriteria, PropertyOwnerProfileSearchCriteria, SaleSearchCriteria, TaxSearchCriteria, ValuationSearchCriteria, OrSearchCriteria, SearchCriteria, DeliveryConfig, EventHubConfig, PropertySubscriptionRequest, QuickListValueWithNot, PropertyLookupRequest, PropertyLookupRequestItem, PropertyLookupRequestAddress, PropertyLookupOptions, PropertyPermitRequest, PropertyCountRequest, PropertySearchRequest, PropertySearchAsyncRequest, PropertyLookupAsyncRequest, GeoPoint, AirConditioningSource, BasementType, BuildingClass, BuildingCondition, BuildingQuality, ConstructionType, Driveway, ExteriorWalls, FloorCover, Garage, HeatSource, HeatingFuelType, InteriorWalls, Patio, Pool, Porch, RoofCover, RoofType, Sewer, Style, WaterService, Features, HomeownerRenter, BusinessOwner, Gender, Investments, DemographicsValue, ReligiousAffiliation, ForeclosureStatus, PropertyTypeCategory, PropertyTypeDetail, LienType, LienTypeCode, LoanType, OwnerStatusType, LastSaleDocumentType, ZoningCode } from "../core/types";
20
20
  import type { PropertyFieldMetadata } from "../property-field/metadata";
21
21
  /**
22
22
  * Base interface for all builders
@@ -147,18 +147,19 @@ declare abstract class BaseBuilder<T> implements Builder<T> {
147
147
  }
148
148
  /**
149
149
  * Base builder for string filters
150
+ * @template T - Optional union type of allowed string values. Defaults to `string` for backward compatibility.
150
151
  */
151
- export declare class StringFilterBuilder implements Builder<StringFilter> {
152
+ export declare class StringFilterBuilder<T extends string = string> implements Builder<StringFilter<T>> {
152
153
  private filter;
153
- static from(filter: StringFilter): StringFilterBuilder;
154
- equals(value: string): this;
154
+ static from<T extends string = string>(filter: StringFilter<T>): StringFilterBuilder<T>;
155
+ equals(value: T): this;
155
156
  contains(value: string): this;
156
157
  startsWith(value: string): this;
157
158
  endsWith(value: string): this;
158
- inList(values: string[]): this;
159
- notInList(values: string[]): this;
160
- matches(patterns: string[]): this;
161
- build(): StringFilter;
159
+ inList(values: T[]): this;
160
+ notInList(values: T[]): this;
161
+ matches(patterns: T[]): this;
162
+ build(): StringFilter<T>;
162
163
  }
163
164
  /**
164
165
  * Base builder for numeric range filters
@@ -286,36 +287,36 @@ export declare class AssessmentSearchCriteriaBuilder extends BaseBuilder<Assessm
286
287
  export declare class BuildingSearchCriteriaBuilder extends BaseBuilder<BuildingSearchCriteria> {
287
288
  protected criteria: BuildingSearchCriteria;
288
289
  static from(criteria: BuildingSearchCriteria): BuildingSearchCriteriaBuilder;
289
- airConditioningSource(filter: StringFilter): this;
290
- airConditioningSource(configurator: (builder: StringFilterBuilder) => void): this;
291
- basementType(filter: StringFilter): this;
292
- basementType(configurator: (builder: StringFilterBuilder) => void): this;
290
+ airConditioningSource(filter: StringFilter<AirConditioningSource>): this;
291
+ airConditioningSource(configurator: (builder: StringFilterBuilder<AirConditioningSource>) => void): this;
292
+ basementType(filter: StringFilter<BasementType>): this;
293
+ basementType(configurator: (builder: StringFilterBuilder<BasementType>) => void): this;
293
294
  totalBuildingAreaSquareFeet(filter: NumericRangeFilter): this;
294
295
  totalBuildingAreaSquareFeet(configurator: (builder: NumericRangeFilterBuilder) => void): this;
295
- buildingClass(filter: StringFilter): this;
296
- buildingClass(configurator: (builder: StringFilterBuilder) => void): this;
297
- buildingCondition(filter: StringFilter): this;
298
- buildingCondition(configurator: (builder: StringFilterBuilder) => void): this;
299
- buildingQuality(filter: StringFilter): this;
300
- buildingQuality(configurator: (builder: StringFilterBuilder) => void): this;
296
+ buildingClass(filter: StringFilter<BuildingClass>): this;
297
+ buildingClass(configurator: (builder: StringFilterBuilder<BuildingClass>) => void): this;
298
+ buildingCondition(filter: StringFilter<BuildingCondition>): this;
299
+ buildingCondition(configurator: (builder: StringFilterBuilder<BuildingCondition>) => void): this;
300
+ buildingQuality(filter: StringFilter<BuildingQuality>): this;
301
+ buildingQuality(configurator: (builder: StringFilterBuilder<BuildingQuality>) => void): this;
301
302
  buildingType(filter: StringFilter): this;
302
303
  buildingType(configurator: (builder: StringFilterBuilder) => void): this;
303
- driveway(filter: StringFilter): this;
304
- driveway(configurator: (builder: StringFilterBuilder) => void): this;
305
- exteriorWalls(filter: StringFilter): this;
306
- exteriorWalls(configurator: (builder: StringFilterBuilder) => void): this;
307
- floorCover(filter: StringFilter): this;
308
- floorCover(configurator: (builder: StringFilterBuilder) => void): this;
304
+ driveway(filter: StringFilter<Driveway>): this;
305
+ driveway(configurator: (builder: StringFilterBuilder<Driveway>) => void): this;
306
+ exteriorWalls(filter: StringFilter<ExteriorWalls>): this;
307
+ exteriorWalls(configurator: (builder: StringFilterBuilder<ExteriorWalls>) => void): this;
308
+ floorCover(filter: StringFilter<FloorCover>): this;
309
+ floorCover(configurator: (builder: StringFilterBuilder<FloorCover>) => void): this;
309
310
  garageParkingSpaceCount(filter: NumericRangeFilter): this;
310
311
  garageParkingSpaceCount(configurator: (builder: NumericRangeFilterBuilder) => void): this;
311
- garage(filter: StringFilter): this;
312
- garage(configurator: (builder: StringFilterBuilder) => void): this;
313
- heatSource(filter: StringFilter): this;
314
- heatSource(configurator: (builder: StringFilterBuilder) => void): this;
315
- heatingFuelType(filter: StringFilter): this;
316
- heatingFuelType(configurator: (builder: StringFilterBuilder) => void): this;
317
- interiorWalls(filter: StringFilter): this;
318
- interiorWalls(configurator: (builder: StringFilterBuilder) => void): this;
312
+ garage(filter: StringFilter<Garage>): this;
313
+ garage(configurator: (builder: StringFilterBuilder<Garage>) => void): this;
314
+ heatSource(filter: StringFilter<HeatSource>): this;
315
+ heatSource(configurator: (builder: StringFilterBuilder<HeatSource>) => void): this;
316
+ heatingFuelType(filter: StringFilter<HeatingFuelType>): this;
317
+ heatingFuelType(configurator: (builder: StringFilterBuilder<HeatingFuelType>) => void): this;
318
+ interiorWalls(filter: StringFilter<InteriorWalls>): this;
319
+ interiorWalls(configurator: (builder: StringFilterBuilder<InteriorWalls>) => void): this;
319
320
  buildingCount(filter: NumericRangeFilter): this;
320
321
  buildingCount(configurator: (builder: NumericRangeFilterBuilder) => void): this;
321
322
  bathroomCount(filter: NumericRangeFilter): this;
@@ -324,34 +325,34 @@ export declare class BuildingSearchCriteriaBuilder extends BaseBuilder<BuildingS
324
325
  calculatedBathroomCount(configurator: (builder: NumericRangeFilterBuilder) => void): this;
325
326
  bedroomCount(filter: NumericRangeFilter): this;
326
327
  bedroomCount(configurator: (builder: NumericRangeFilterBuilder) => void): this;
327
- patio(filter: StringFilter): this;
328
- patio(configurator: (builder: StringFilterBuilder) => void): this;
328
+ patio(filter: StringFilter<Patio>): this;
329
+ patio(configurator: (builder: StringFilterBuilder<Patio>) => void): this;
329
330
  storyCount(filter: NumericRangeFilter): this;
330
331
  storyCount(configurator: (builder: NumericRangeFilterBuilder) => void): this;
331
- features(filter: StringFilter): this;
332
- features(configurator: (builder: StringFilterBuilder) => void): this;
332
+ features(filter: StringFilter<Features>): this;
333
+ features(configurator: (builder: StringFilterBuilder<Features>) => void): this;
333
334
  residentialUnitCount(filter: NumericRangeFilter): this;
334
335
  residentialUnitCount(configurator: (builder: NumericRangeFilterBuilder) => void): this;
335
- pool(filter: StringFilter): this;
336
- pool(configurator: (builder: StringFilterBuilder) => void): this;
337
- porch(filter: StringFilter): this;
338
- porch(configurator: (builder: StringFilterBuilder) => void): this;
339
- roofCover(filter: StringFilter): this;
340
- roofCover(configurator: (builder: StringFilterBuilder) => void): this;
341
- roofType(filter: StringFilter): this;
342
- roofType(configurator: (builder: StringFilterBuilder) => void): this;
343
- sewer(filter: StringFilter): this;
344
- sewer(configurator: (builder: StringFilterBuilder) => void): this;
345
- style(filter: StringFilter): this;
346
- style(configurator: (builder: StringFilterBuilder) => void): this;
336
+ pool(filter: StringFilter<Pool>): this;
337
+ pool(configurator: (builder: StringFilterBuilder<Pool>) => void): this;
338
+ porch(filter: StringFilter<Porch>): this;
339
+ porch(configurator: (builder: StringFilterBuilder<Porch>) => void): this;
340
+ roofCover(filter: StringFilter<RoofCover>): this;
341
+ roofCover(configurator: (builder: StringFilterBuilder<RoofCover>) => void): this;
342
+ roofType(filter: StringFilter<RoofType>): this;
343
+ roofType(configurator: (builder: StringFilterBuilder<RoofType>) => void): this;
344
+ sewer(filter: StringFilter<Sewer>): this;
345
+ sewer(configurator: (builder: StringFilterBuilder<Sewer>) => void): this;
346
+ style(filter: StringFilter<Style>): this;
347
+ style(configurator: (builder: StringFilterBuilder<Style>) => void): this;
347
348
  roomCount(filter: NumericRangeFilter): this;
348
349
  roomCount(configurator: (builder: NumericRangeFilterBuilder) => void): this;
349
350
  unitCount(filter: NumericRangeFilter): this;
350
351
  unitCount(configurator: (builder: NumericRangeFilterBuilder) => void): this;
351
- constructionType(filter: StringFilter): this;
352
- constructionType(configurator: (builder: StringFilterBuilder) => void): this;
353
- waterService(filter: StringFilter): this;
354
- waterService(configurator: (builder: StringFilterBuilder) => void): this;
352
+ constructionType(filter: StringFilter<ConstructionType>): this;
353
+ constructionType(configurator: (builder: StringFilterBuilder<ConstructionType>) => void): this;
354
+ waterService(filter: StringFilter<WaterService>): this;
355
+ waterService(configurator: (builder: StringFilterBuilder<WaterService>) => void): this;
355
356
  yearBuilt(filter: NumericRangeFilter): this;
356
357
  yearBuilt(configurator: (builder: NumericRangeFilterBuilder) => void): this;
357
358
  build(): BuildingSearchCriteria;
@@ -385,18 +386,18 @@ export declare class DemographicsSearchCriteriaBuilder extends BaseBuilder<Demog
385
386
  netWorth(configurator: (builder: NumericRangeFilterBuilder) => void): this;
386
387
  discretionaryIncome(filter: NumericRangeFilter): this;
387
388
  discretionaryIncome(configurator: (builder: NumericRangeFilterBuilder) => void): this;
388
- homeownerRenter(filter: StringFilter): this;
389
- homeownerRenter(configurator: (builder: StringFilterBuilder) => void): this;
390
- businessOwner(filter: StringFilter): this;
391
- businessOwner(configurator: (builder: StringFilterBuilder) => void): this;
392
- gender(filter: StringFilter): this;
393
- gender(configurator: (builder: StringFilterBuilder) => void): this;
389
+ homeownerRenter(filter: StringFilter<HomeownerRenter>): this;
390
+ homeownerRenter(configurator: (builder: StringFilterBuilder<HomeownerRenter>) => void): this;
391
+ businessOwner(filter: StringFilter<BusinessOwner>): this;
392
+ businessOwner(configurator: (builder: StringFilterBuilder<BusinessOwner>) => void): this;
393
+ gender(filter: StringFilter<Gender>): this;
394
+ gender(configurator: (builder: StringFilterBuilder<Gender>) => void): this;
394
395
  hasChildren(value: boolean): this;
395
- investments(filter: StringFilter): this;
396
- investments(configurator: (builder: StringFilterBuilder) => void): this;
397
- demographics(filter: StringFilter): this;
398
- demographics(configurator: (builder: StringFilterBuilder) => void): this;
399
- religiousAffiliation(filter: StringFilter): this;
396
+ investments(filter: StringFilter<Investments>): this;
397
+ investments(configurator: (builder: StringFilterBuilder<Investments>) => void): this;
398
+ demographics(filter: StringFilter<DemographicsValue>): this;
399
+ demographics(configurator: (builder: StringFilterBuilder<DemographicsValue>) => void): this;
400
+ religiousAffiliation(filter: StringFilter<ReligiousAffiliation>): this;
400
401
  religiousAffiliation(configurator: (builder: StringFilterBuilder) => void): this;
401
402
  }
402
403
  /**
@@ -405,8 +406,8 @@ export declare class DemographicsSearchCriteriaBuilder extends BaseBuilder<Demog
405
406
  export declare class ForeclosureSearchCriteriaBuilder {
406
407
  private criteria;
407
408
  static from(criteria: ForeclosureSearchCriteria): ForeclosureSearchCriteriaBuilder;
408
- status(filter: StringFilter): this;
409
- status(configurator: (builder: StringFilterBuilder) => void): this;
409
+ status(filter: StringFilter<ForeclosureStatus>): this;
410
+ status(configurator: (builder: StringFilterBuilder<ForeclosureStatus>) => void): this;
410
411
  recordingDate(filter: DateRangeFilter): this;
411
412
  recordingDate(configurator: (builder: DateRangeFilterBuilder) => void): this;
412
413
  auctionDate(filter: DateRangeFilter): this;
@@ -425,9 +426,9 @@ export declare class ForeclosureSearchCriteriaBuilder {
425
426
  export declare class GeneralSearchCriteriaBuilder {
426
427
  private criteria;
427
428
  static from(criteria: GeneralSearchCriteria): GeneralSearchCriteriaBuilder;
428
- propertyTypeCategory(filter: StringFilter): this;
429
+ propertyTypeCategory(filter: StringFilter<PropertyTypeCategory>): this;
429
430
  propertyTypeCategory(configurator: (builder: StringFilterBuilder) => void): this;
430
- propertyTypeDetail(filter: StringFilter): this;
431
+ propertyTypeDetail(filter: StringFilter<PropertyTypeDetail>): this;
431
432
  propertyTypeDetail(configurator: (builder: StringFilterBuilder) => void): this;
432
433
  build(): GeneralSearchCriteria;
433
434
  }
@@ -469,10 +470,10 @@ export declare class IntelSearchCriteriaBuilder {
469
470
  export declare class InvoluntaryLienSearchCriteriaBuilder {
470
471
  private criteria;
471
472
  static from(criteria: InvoluntaryLienSearchCriteria): InvoluntaryLienSearchCriteriaBuilder;
472
- lienType(filter: StringFilter): this;
473
- lienType(configurator: (builder: StringFilterBuilder) => void): this;
474
- lienTypeCode(filter: StringFilter): this;
475
- lienTypeCode(configurator: (builder: StringFilterBuilder) => void): this;
473
+ lienType(filter: StringFilter<LienType>): this;
474
+ lienType(configurator: (builder: StringFilterBuilder<LienType>) => void): this;
475
+ lienTypeCode(filter: StringFilter<LienTypeCode>): this;
476
+ lienTypeCode(configurator: (builder: StringFilterBuilder<LienTypeCode>) => void): this;
476
477
  documentType(filter: StringFilter): this;
477
478
  documentType(configurator: (builder: StringFilterBuilder) => void): this;
478
479
  documentTypeCode(filter: StringFilter): this;
@@ -531,8 +532,8 @@ export declare class LotSearchCriteriaBuilder {
531
532
  lotFrontageFeet(configurator: (builder: NumericRangeFilterBuilder) => void): this;
532
533
  lotSizeSquareFeet(filter: NumericRangeFilter): this;
533
534
  lotSizeSquareFeet(configurator: (builder: NumericRangeFilterBuilder) => void): this;
534
- zoningCode(filter: StringFilter): this;
535
- zoningCode(configurator: (builder: StringFilterBuilder) => void): this;
535
+ zoningCode(filter: StringFilter<ZoningCode>): this;
536
+ zoningCode(configurator: (builder: StringFilterBuilder<ZoningCode>) => void): this;
536
537
  build(): LotSearchCriteria;
537
538
  }
538
539
  /**
@@ -541,8 +542,8 @@ export declare class LotSearchCriteriaBuilder {
541
542
  export declare class OpenLienSearchCriteriaBuilder {
542
543
  private criteria;
543
544
  static from(criteria: OpenLienSearchCriteria): OpenLienSearchCriteriaBuilder;
544
- allLoanTypes(filter: StringFilter): this;
545
- juniorLoanTypes(filter: StringFilter): this;
545
+ allLoanTypes(filter: StringFilter<LoanType>): this;
546
+ juniorLoanTypes(filter: StringFilter<LoanType>): this;
546
547
  totalOpenLienCount(filter: NumericRangeFilter): this;
547
548
  totalOpenLienBalance(filter: NumericRangeFilter): this;
548
549
  firstLoanLtv(filter: NumericRangeFilter): this;
@@ -550,10 +551,10 @@ export declare class OpenLienSearchCriteriaBuilder {
550
551
  secondLoanInterestRate(filter: NumericRangeFilter): this;
551
552
  thirdLoanInterestRate(filter: NumericRangeFilter): this;
552
553
  fourthLoanInterestRate(filter: NumericRangeFilter): this;
553
- firstLoanType(filter: StringFilter): this;
554
- secondLoanType(filter: StringFilter): this;
555
- thirdLoanType(filter: StringFilter): this;
556
- fourthLoanType(filter: StringFilter): this;
554
+ firstLoanType(filter: StringFilter<LoanType>): this;
555
+ secondLoanType(filter: StringFilter<LoanType>): this;
556
+ thirdLoanType(filter: StringFilter<LoanType>): this;
557
+ fourthLoanType(filter: StringFilter<LoanType>): this;
557
558
  firstLoanRecordingDate(filter: DateRangeFilter): this;
558
559
  lastLoanRecordingDate(filter: DateRangeFilter): this;
559
560
  build(): OpenLienSearchCriteria;
@@ -571,7 +572,7 @@ export declare class OwnerSearchCriteriaBuilder {
571
572
  mailingCity(filter: StringFilter): this;
572
573
  mailingState(filter: StringFilter): this;
573
574
  mailingZip(filter: StringFilter): this;
574
- ownerStatusType(filter: StringFilter): this;
575
+ ownerStatusType(filter: StringFilter<OwnerStatusType>): this;
575
576
  lengthOfResidenceMonths(filter: NumericRangeFilter): this;
576
577
  lengthOfResidenceYears(filter: NumericRangeFilter): this;
577
578
  ownershipStartDate(filter: DateRangeFilter): this;
@@ -613,7 +614,8 @@ export declare class SaleSearchCriteriaBuilder {
613
614
  static from(criteria: SaleSearchCriteria): SaleSearchCriteriaBuilder;
614
615
  lastSalePrice(filter: NumericRangeFilter): this;
615
616
  lastSaleDate(filter: DateRangeFilter): this;
616
- lastSaleDocumentType(filter: StringFilter): this;
617
+ lastSaleDocumentType(filter: StringFilter<LastSaleDocumentType>): this;
618
+ lastSaleDocumentType(configurator: (builder: StringFilterBuilder) => void): this;
617
619
  lastSalePricePerSquareFoot(filter: NumericRangeFilter): this;
618
620
  flipLength(filter: NumericRangeFilter): this;
619
621
  flipLengthCategory(filter: NumericRangeFilter): this;
@@ -20,6 +20,7 @@
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
21
  exports.PropertyPermitRequestBuilder = exports.PropertyLookupAsyncRequestBuilder = exports.PropertySearchAsyncRequestBuilder = exports.PropertySearchRequestBuilder = exports.PropertyCountRequestBuilder = exports.PropertyLookupRequestBuilder = exports.AsyncPropertyLookupOptionsBuilder = exports.PropertyLookupOptionsBuilder = exports.PropertyLookupRequestItemBuilder = exports.PropertySubscriptionBuilder = exports.DeliveryConfigBuilder = exports.SearchCriteriaBuilder = exports.OrSearchCriteriaBuilder = exports.ValuationSearchCriteriaBuilder = exports.TaxSearchCriteriaBuilder = exports.SaleSearchCriteriaBuilder = exports.PropertyOwnerProfileSearchCriteriaBuilder = exports.PermitSearchCriteriaBuilder = exports.OwnerSearchCriteriaBuilder = exports.OpenLienSearchCriteriaBuilder = exports.LotSearchCriteriaBuilder = exports.ListingSearchCriteriaBuilder = exports.LegalSearchCriteriaBuilder = exports.InvoluntaryLienSearchCriteriaBuilder = exports.IntelSearchCriteriaBuilder = exports.IdsSearchCriteriaBuilder = exports.GeneralSearchCriteriaBuilder = exports.ForeclosureSearchCriteriaBuilder = exports.DemographicsSearchCriteriaBuilder = exports.CompAddressSearchCriteriaBuilder = exports.BuildingSearchCriteriaBuilder = exports.AssessmentSearchCriteriaBuilder = exports.AddressSearchCriteriaBuilder = exports.GeoLocationFactory = exports.DateRangeFilterBuilder = exports.NumericRangeFilterBuilder = exports.StringFilterBuilder = void 0;
22
22
  const metadata_1 = require("../property-field/metadata");
23
+ const utils_1 = require("../property-field/utils");
23
24
  /**
24
25
  * Abstract base class for builders that store nested builders
25
26
  * Handles the common pattern of storing builder instances and building them all at once
@@ -88,9 +89,7 @@ class BaseBuilder {
88
89
  * ```
89
90
  */
90
91
  getSearchCriteriaFieldMetadata(searchCriteriaPath) {
91
- // Dynamic import to avoid circular dependency
92
- const { getSearchCriteriaFieldMetadata, } = require("../property-field/utils");
93
- return getSearchCriteriaFieldMetadata(searchCriteriaPath);
92
+ return (0, utils_1.getSearchCriteriaFieldMetadata)(searchCriteriaPath);
94
93
  }
95
94
  /**
96
95
  * Get SearchCriteria field metadata inferred from Property field metadata
@@ -167,6 +166,7 @@ class BaseBuilder {
167
166
  }
168
167
  /**
169
168
  * Base builder for string filters
169
+ * @template T - Optional union type of allowed string values. Defaults to `string` for backward compatibility.
170
170
  */
171
171
  class StringFilterBuilder {
172
172
  constructor() {
@@ -439,10 +439,26 @@ class BuildingSearchCriteriaBuilder extends BaseBuilder {
439
439
  return builder;
440
440
  }
441
441
  airConditioningSource(filterOrConfigurator) {
442
- return this.setPropertyWithBuilderClass("airConditioningSource", filterOrConfigurator, StringFilterBuilder);
442
+ if (typeof filterOrConfigurator === "function") {
443
+ const builder = new StringFilterBuilder();
444
+ filterOrConfigurator(builder);
445
+ this.criteria.airConditioningSource = builder.build();
446
+ }
447
+ else {
448
+ this.criteria.airConditioningSource = filterOrConfigurator;
449
+ }
450
+ return this;
443
451
  }
444
452
  basementType(filterOrConfigurator) {
445
- return this.setPropertyWithBuilderClass("basementType", filterOrConfigurator, StringFilterBuilder);
453
+ if (typeof filterOrConfigurator === "function") {
454
+ const builder = new StringFilterBuilder();
455
+ filterOrConfigurator(builder);
456
+ this.criteria.basementType = builder.build();
457
+ }
458
+ else {
459
+ this.criteria.basementType = filterOrConfigurator;
460
+ }
461
+ return this;
446
462
  }
447
463
  totalBuildingAreaSquareFeet(filterOrConfigurator) {
448
464
  return this.setPropertyWithBuilderClass("totalBuildingAreaSquareFeet", filterOrConfigurator, NumericRangeFilterBuilder);
@@ -886,26 +902,74 @@ class DemographicsSearchCriteriaBuilder extends BaseBuilder {
886
902
  return this.setPropertyWithBuilderClass("discretionaryIncome", filterOrConfigurator, NumericRangeFilterBuilder);
887
903
  }
888
904
  homeownerRenter(filterOrConfigurator) {
889
- return this.setPropertyWithBuilderClass("homeownerRenter", filterOrConfigurator, StringFilterBuilder);
905
+ if (typeof filterOrConfigurator === "function") {
906
+ const builder = new StringFilterBuilder();
907
+ filterOrConfigurator(builder);
908
+ this.criteria.homeownerRenter = builder.build();
909
+ }
910
+ else {
911
+ this.criteria.homeownerRenter = filterOrConfigurator;
912
+ }
913
+ return this;
890
914
  }
891
915
  businessOwner(filterOrConfigurator) {
892
- return this.setPropertyWithBuilderClass("businessOwner", filterOrConfigurator, StringFilterBuilder);
916
+ if (typeof filterOrConfigurator === "function") {
917
+ const builder = new StringFilterBuilder();
918
+ filterOrConfigurator(builder);
919
+ this.criteria.businessOwner = builder.build();
920
+ }
921
+ else {
922
+ this.criteria.businessOwner = filterOrConfigurator;
923
+ }
924
+ return this;
893
925
  }
894
926
  gender(filterOrConfigurator) {
895
- return this.setPropertyWithBuilderClass("gender", filterOrConfigurator, StringFilterBuilder);
927
+ if (typeof filterOrConfigurator === "function") {
928
+ const builder = new StringFilterBuilder();
929
+ filterOrConfigurator(builder);
930
+ this.criteria.gender = builder.build();
931
+ }
932
+ else {
933
+ this.criteria.gender = filterOrConfigurator;
934
+ }
935
+ return this;
896
936
  }
897
937
  hasChildren(value) {
898
938
  this.criteria.hasChildren = { equals: value };
899
939
  return this;
900
940
  }
901
941
  investments(filterOrConfigurator) {
902
- return this.setPropertyWithBuilderClass("investments", filterOrConfigurator, StringFilterBuilder);
942
+ if (typeof filterOrConfigurator === "function") {
943
+ const builder = new StringFilterBuilder();
944
+ filterOrConfigurator(builder);
945
+ this.criteria.investments = builder.build();
946
+ }
947
+ else {
948
+ this.criteria.investments = filterOrConfigurator;
949
+ }
950
+ return this;
903
951
  }
904
952
  demographics(filterOrConfigurator) {
905
- return this.setPropertyWithBuilderClass("demographics", filterOrConfigurator, StringFilterBuilder);
953
+ if (typeof filterOrConfigurator === "function") {
954
+ const builder = new StringFilterBuilder();
955
+ filterOrConfigurator(builder);
956
+ this.criteria.demographics = builder.build();
957
+ }
958
+ else {
959
+ this.criteria.demographics = filterOrConfigurator;
960
+ }
961
+ return this;
906
962
  }
907
963
  religiousAffiliation(filterOrConfigurator) {
908
- return this.setPropertyWithBuilderClass("religiousAffiliation", filterOrConfigurator, StringFilterBuilder);
964
+ if (typeof filterOrConfigurator === "function") {
965
+ const builder = new StringFilterBuilder();
966
+ filterOrConfigurator(builder);
967
+ this.criteria.religiousAffiliation = builder.build();
968
+ }
969
+ else {
970
+ this.criteria.religiousAffiliation = filterOrConfigurator;
971
+ }
972
+ return this;
909
973
  }
910
974
  }
911
975
  exports.DemographicsSearchCriteriaBuilder = DemographicsSearchCriteriaBuilder;
@@ -1681,8 +1745,19 @@ class SaleSearchCriteriaBuilder {
1681
1745
  this.criteria.lastSaleDate = filter;
1682
1746
  return this;
1683
1747
  }
1684
- lastSaleDocumentType(filter) {
1685
- this.criteria.lastSaleDocumentType = filter;
1748
+ lastSaleDocumentType(filterOrConfigurator) {
1749
+ if (typeof filterOrConfigurator === "function") {
1750
+ const builder = new StringFilterBuilder();
1751
+ filterOrConfigurator(builder);
1752
+ // Type assertion needed because StringFilterBuilder returns StringFilter<string>
1753
+ // but criteria expects StringFilter<LastSaleDocumentType>
1754
+ this.criteria.lastSaleDocumentType = builder.build();
1755
+ }
1756
+ else {
1757
+ // Type assertion needed because StringFilter<string> is not assignable to StringFilter<LastSaleDocumentType>
1758
+ // but at runtime they're compatible
1759
+ this.criteria.lastSaleDocumentType = filterOrConfigurator;
1760
+ }
1686
1761
  return this;
1687
1762
  }
1688
1763
  lastSalePricePerSquareFoot(filter) {
@@ -144,6 +144,16 @@ export declare class BatchDataClient implements IBatchDataClient {
144
144
  protected readonly logger: ILogger;
145
145
  private readonly webhooks?;
146
146
  constructor(options: BatchDataClientOptions);
147
+ /**
148
+ * Obfuscate sensitive headers (like Authorization) for logging
149
+ * @param headers Headers object to obfuscate
150
+ * @returns Headers with sensitive values obfuscated
151
+ */
152
+ private obfuscateHeaders;
153
+ /**
154
+ * Set up debug logging interceptors for request/response logging
155
+ */
156
+ private setupDebugLogging;
147
157
  /**
148
158
  * Set up axios interceptors from middleware configuration
149
159
  * @param middleware The middleware configuration
@@ -254,6 +264,13 @@ export declare class BatchDataClient implements IBatchDataClient {
254
264
  * @param options.take Number of properties to return (0 for count-only)
255
265
  * @param options.skip Number of properties to skip for pagination
256
266
  * @returns Property search API response
267
+ *
268
+ * @remarks
269
+ * The returned PropertySearchResponse includes all possible fields that may be returned
270
+ * by the API. The actual fields present in the response depend on your subscription level
271
+ * and the data available for each property. Fields are optional and may be empty objects
272
+ * (e.g., foreclosure: {}) or undefined if not available. The type system ensures type
273
+ * safety while allowing for varying response structures based on subscription tier.
257
274
  */
258
275
  searchProperties(request: PropertySearchRequest): Promise<PropertySearchResponse>;
259
276
  /**
@@ -32,11 +32,100 @@ class BatchDataClient {
32
32
  Authorization: `Bearer ${options.apiKey}`,
33
33
  },
34
34
  });
35
+ // Set up debug logging interceptors
36
+ this.setupDebugLogging();
35
37
  // Set up middleware/interceptors if provided
36
38
  if (options.middleware) {
37
39
  this.setupMiddleware(options.middleware);
38
40
  }
39
41
  }
42
+ /**
43
+ * Obfuscate sensitive headers (like Authorization) for logging
44
+ * @param headers Headers object to obfuscate
45
+ * @returns Headers with sensitive values obfuscated
46
+ */
47
+ obfuscateHeaders(headers) {
48
+ if (!headers)
49
+ return headers;
50
+ const obfuscated = { ...headers };
51
+ // Obfuscate Authorization header
52
+ if (obfuscated.Authorization || obfuscated.authorization) {
53
+ const authHeader = (obfuscated.Authorization ||
54
+ obfuscated.authorization);
55
+ if (typeof authHeader === "string" && authHeader.startsWith("Bearer ")) {
56
+ const token = authHeader.substring(7);
57
+ if (token.length > 8) {
58
+ // Show first 4 and last 4 characters, obfuscate the middle
59
+ const obfuscatedToken = `${token.substring(0, 4)}${"*".repeat(Math.min(token.length - 8, 20))}${token.substring(token.length - 4)}`;
60
+ obfuscated.Authorization = `Bearer ${obfuscatedToken}`;
61
+ if (obfuscated.authorization) {
62
+ obfuscated.authorization = obfuscated.Authorization;
63
+ }
64
+ }
65
+ else {
66
+ obfuscated.Authorization = "Bearer ***";
67
+ if (obfuscated.authorization) {
68
+ obfuscated.authorization = "Bearer ***";
69
+ }
70
+ }
71
+ }
72
+ }
73
+ return obfuscated;
74
+ }
75
+ /**
76
+ * Set up debug logging interceptors for request/response logging
77
+ */
78
+ setupDebugLogging() {
79
+ // Request interceptor - log full request details
80
+ this.axiosInstance.interceptors.request.use((config) => {
81
+ const obfuscatedHeaders = this.obfuscateHeaders(config.headers);
82
+ this.logger.debug("HTTP Request", {
83
+ method: config.method?.toUpperCase(),
84
+ url: config.url,
85
+ baseURL: config.baseURL,
86
+ headers: obfuscatedHeaders,
87
+ params: config.params,
88
+ data: config.data,
89
+ });
90
+ return config;
91
+ }, (error) => {
92
+ this.logger.error("Request interceptor error", error);
93
+ return Promise.reject(error);
94
+ });
95
+ // Response interceptor - log full response details
96
+ this.axiosInstance.interceptors.response.use((response) => {
97
+ const obfuscatedHeaders = this.obfuscateHeaders(response.headers);
98
+ this.logger.debug("HTTP Response", {
99
+ status: response.status,
100
+ statusText: response.statusText,
101
+ headers: obfuscatedHeaders,
102
+ data: response.data,
103
+ config: {
104
+ method: response.config.method?.toUpperCase(),
105
+ url: response.config.url,
106
+ baseURL: response.config.baseURL,
107
+ },
108
+ });
109
+ return response;
110
+ }, (error) => {
111
+ // Log error response if available
112
+ if (error.response) {
113
+ const obfuscatedHeaders = this.obfuscateHeaders(error.response.headers);
114
+ this.logger.debug("HTTP Error Response", {
115
+ status: error.response.status,
116
+ statusText: error.response.statusText,
117
+ headers: obfuscatedHeaders,
118
+ data: error.response.data,
119
+ config: {
120
+ method: error.config?.method?.toUpperCase(),
121
+ url: error.config?.url,
122
+ baseURL: error.config?.baseURL,
123
+ },
124
+ });
125
+ }
126
+ return Promise.reject(error);
127
+ });
128
+ }
40
129
  /**
41
130
  * Set up axios interceptors from middleware configuration
42
131
  * @param middleware The middleware configuration
@@ -304,6 +393,13 @@ class BatchDataClient {
304
393
  * @param options.take Number of properties to return (0 for count-only)
305
394
  * @param options.skip Number of properties to skip for pagination
306
395
  * @returns Property search API response
396
+ *
397
+ * @remarks
398
+ * The returned PropertySearchResponse includes all possible fields that may be returned
399
+ * by the API. The actual fields present in the response depend on your subscription level
400
+ * and the data available for each property. Fields are optional and may be empty objects
401
+ * (e.g., foreclosure: {}) or undefined if not available. The type system ensures type
402
+ * safety while allowing for varying response structures based on subscription tier.
307
403
  */
308
404
  async searchProperties(request) {
309
405
  const url = `${this.v1BaseUrl}/property/search`;