@honestdigital/vehicle-service-types 1.0.13

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.
Files changed (41) hide show
  1. package/README.md +76 -0
  2. package/dist/context.d.ts +53 -0
  3. package/dist/context.d.ts.map +1 -0
  4. package/dist/repositories/vehicleConfigOptions.d.ts +165 -0
  5. package/dist/repositories/vehicleConfigOptions.d.ts.map +1 -0
  6. package/dist/routers/index.d.ts +793 -0
  7. package/dist/routers/index.d.ts.map +1 -0
  8. package/dist/schemas/comparison.schema.d.ts +37 -0
  9. package/dist/schemas/comparison.schema.d.ts.map +1 -0
  10. package/dist/schemas/externalApi.schema.d.ts +1532 -0
  11. package/dist/schemas/externalApi.schema.d.ts.map +1 -0
  12. package/dist/schemas/filters.schema.d.ts +276 -0
  13. package/dist/schemas/filters.schema.d.ts.map +1 -0
  14. package/dist/schemas/vehicle.schema.d.ts +1204 -0
  15. package/dist/schemas/vehicle.schema.d.ts.map +1 -0
  16. package/dist/services/lenderdesk.d.ts +139 -0
  17. package/dist/services/lenderdesk.d.ts.map +1 -0
  18. package/dist/services/mmt.d.ts +52 -0
  19. package/dist/services/mmt.d.ts.map +1 -0
  20. package/dist/types/comparison.d.ts +157 -0
  21. package/dist/types/comparison.d.ts.map +1 -0
  22. package/dist/types/filters.d.ts +95 -0
  23. package/dist/types/filters.d.ts.map +1 -0
  24. package/dist/types/guards.d.ts +32 -0
  25. package/dist/types/guards.d.ts.map +1 -0
  26. package/dist/types/index.d.ts +18 -0
  27. package/dist/types/index.d.ts.map +1 -0
  28. package/dist/types/jdp.d.ts +210 -0
  29. package/dist/types/jdp.d.ts.map +1 -0
  30. package/dist/types/search.d.ts +475 -0
  31. package/dist/types/search.d.ts.map +1 -0
  32. package/dist/types/sync.d.ts +102 -0
  33. package/dist/types/sync.d.ts.map +1 -0
  34. package/dist/types/vehicle.d.ts +75 -0
  35. package/dist/types/vehicle.d.ts.map +1 -0
  36. package/dist/types.d.ts +17 -0
  37. package/dist/types.d.ts.map +1 -0
  38. package/dist/types.js +4213 -0
  39. package/dist/utilities/error.d.ts +49 -0
  40. package/dist/utilities/error.d.ts.map +1 -0
  41. package/package.json +112 -0
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Type definitions for vehicle sync operations
3
+ */
4
+ export interface SyncError {
5
+ vin: string;
6
+ operation: 'create' | 'update' | 'delete' | 'image_fetch';
7
+ error: string;
8
+ context?: Record<string, unknown>;
9
+ }
10
+ export interface SyncStats {
11
+ created: number;
12
+ updated: number;
13
+ deleted: number;
14
+ failed: number;
15
+ total: number;
16
+ }
17
+ export interface SyncResult {
18
+ success: boolean;
19
+ syncHistoryId?: number;
20
+ stats: SyncStats;
21
+ errors: SyncError[];
22
+ duration?: number;
23
+ }
24
+ export type SyncTrigger = 'manual' | 'cron' | 'api';
25
+ export interface SyncHistoryRecord {
26
+ id: number;
27
+ tenantId: number;
28
+ startedAt: Date;
29
+ completedAt?: Date;
30
+ status: 'running' | 'completed' | 'failed';
31
+ stats: SyncStats;
32
+ errorMessage?: string;
33
+ triggeredBy: SyncTrigger;
34
+ }
35
+ export interface SyncErrorRecord {
36
+ id: number;
37
+ syncHistoryId?: number;
38
+ tenantId: number;
39
+ vin: string;
40
+ operation: 'create' | 'update' | 'delete' | 'image_fetch';
41
+ errorMessage: string;
42
+ errorContext?: Record<string, unknown>;
43
+ createdAt: Date;
44
+ }
45
+ /**
46
+ * Transformed vehicle data ready for database insertion
47
+ * Uses snake_case to match database column names
48
+ * MATCHES NEW DATABASE SCHEMA with JSONB fields
49
+ */
50
+ export interface TransformedVehicleData {
51
+ tenant_id: number;
52
+ brand: string;
53
+ model: string;
54
+ trim: string | null;
55
+ year: number;
56
+ price: number;
57
+ msrp: number | null;
58
+ payment_offers: string | null;
59
+ rebates: string;
60
+ mileage: number;
61
+ status: string;
62
+ stock_number: string | null;
63
+ vin: string;
64
+ fuel_type: string | null;
65
+ body_style: string | null;
66
+ exterior_color: string | null;
67
+ exterior_color_generic: string | null;
68
+ exterior_color_code: string | null;
69
+ interior_color: string | null;
70
+ interior_color_generic: string | null;
71
+ interior_color_code: string | null;
72
+ drivetrain: string | null;
73
+ doors: string | null;
74
+ engine: string | null;
75
+ transmission: string | null;
76
+ city_mpg: number | null;
77
+ highway_mpg: number | null;
78
+ fuel_efficiency: string | null;
79
+ location: string | null;
80
+ image_url: string | null;
81
+ chrome_id: string | null;
82
+ features: string[];
83
+ vehicle_options: string | null;
84
+ date_in_stock: string | null;
85
+ certified_pre_owned: boolean;
86
+ description: string | null;
87
+ dealership_name: string | null;
88
+ additional_image_link: string | null;
89
+ vehicle_link: string | null;
90
+ combined_mpg: number | null;
91
+ passenger_capacity: number | null;
92
+ transmission_speed: number | null;
93
+ is_hot_deal: boolean;
94
+ model_code: string | null;
95
+ engine_specs: string | null;
96
+ transmission_specs: string | null;
97
+ dimensions_specs: string | null;
98
+ exterior_specs: string | null;
99
+ entertainment_specs: string | null;
100
+ safety_specs: string | null;
101
+ }
102
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/types/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Type definitions for vehicle entities
3
+ * Types are inferred from Zod schemas for single source of truth
4
+ * Re-exports schema-inferred types and adds API response extensions
5
+ */
6
+ import { z } from 'zod';
7
+ import type { InventoryFieldName } from '../config/fieldMappings';
8
+ import type { Vehicle as DbVehicle } from '../db/schema';
9
+ import type { CashOfferSchema, ChromeImageSchema, FinanceOfferSchema, ImageParamsSchema, ImageRequestOptionsSchema, LeaseOfferSchema, PaymentOfferSchema, VehicleImageSchema, VehicleRebateSchema } from '../schemas/vehicle.schema';
10
+ export type VehicleRebate = z.infer<typeof VehicleRebateSchema>;
11
+ export type LeaseOffer = z.infer<typeof LeaseOfferSchema>;
12
+ export type FinanceOffer = z.infer<typeof FinanceOfferSchema>;
13
+ export type CashOffer = z.infer<typeof CashOfferSchema>;
14
+ export type PaymentOffer = z.infer<typeof PaymentOfferSchema>;
15
+ /** @deprecated Use VehicleImage instead */
16
+ export type ChromeImage = z.infer<typeof ChromeImageSchema>;
17
+ export type VehicleImage = z.infer<typeof VehicleImageSchema>;
18
+ export type ImageParams = z.infer<typeof ImageParamsSchema>;
19
+ export type ImageRequestOptions = z.infer<typeof ImageRequestOptionsSchema>;
20
+ export type { VehicleStatus } from '../config/vehicleStatus';
21
+ export type Vehicle = Omit<DbVehicle, 'searchVector' | 'modelTrimSlug'> & {
22
+ searchVector?: string | null;
23
+ modelTrimSlug?: string | null;
24
+ images?: VehicleImage[];
25
+ };
26
+ /**
27
+ * Lightweight vehicle type for inventory list responses.
28
+ * Derived from INVENTORY_FIELDS in config/fieldMappings.ts (single source of truth).
29
+ * Use full Vehicle type for VDP (single vehicle) pages.
30
+ */
31
+ export type InventoryVehicle = Pick<Vehicle, InventoryFieldName> & {
32
+ images?: VehicleImage[];
33
+ };
34
+ export declare const GetTrimsInputSchema: z.ZodObject<{
35
+ make: z.ZodString;
36
+ model: z.ZodString;
37
+ }, "strip", z.ZodTypeAny, {
38
+ model: string;
39
+ make: string;
40
+ }, {
41
+ model: string;
42
+ make: string;
43
+ }>;
44
+ export declare const GetTrimsOutputSchema: z.ZodObject<{
45
+ trims: z.ZodArray<z.ZodString, "many">;
46
+ }, "strip", z.ZodTypeAny, {
47
+ trims: string[];
48
+ }, {
49
+ trims: string[];
50
+ }>;
51
+ export type GetTrimsInput = z.infer<typeof GetTrimsInputSchema>;
52
+ export type GetTrimsOutput = z.infer<typeof GetTrimsOutputSchema>;
53
+ export declare const CheapestByTrimInputSchema: z.ZodObject<{
54
+ make: z.ZodString;
55
+ model: z.ZodString;
56
+ trim: z.ZodString;
57
+ }, "strip", z.ZodTypeAny, {
58
+ trim: string;
59
+ model: string;
60
+ make: string;
61
+ }, {
62
+ trim: string;
63
+ model: string;
64
+ make: string;
65
+ }>;
66
+ export declare const CheapestByTrimOutputSchema: z.ZodObject<{
67
+ vehicle: z.ZodNullable<z.ZodAny>;
68
+ }, "strip", z.ZodTypeAny, {
69
+ vehicle?: any;
70
+ }, {
71
+ vehicle?: any;
72
+ }>;
73
+ export type CheapestByTrimInput = z.infer<typeof CheapestByTrimInputSchema>;
74
+ export type CheapestByTrimOutput = z.infer<typeof CheapestByTrimOutputSchema>;
75
+ //# sourceMappingURL=vehicle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vehicle.d.ts","sourceRoot":"","sources":["../../src/types/vehicle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,KAAK,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAGlC,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AACzD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AACvD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,2CAA2C;AAC3C,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAG3E,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAK5D,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,eAAe,CAAC,GAAG;IACxE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAE7B,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;CACxB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,GAAG;IACjE,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;CACxB,CAAA;AAGD,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAGjE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAIpC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;EAErC,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Vehicle Service Type Exports
3
+ * Central export point for all tRPC type definitions
4
+ * This file is referenced in package.json exports field
5
+ *
6
+ * IMPORTANT: This file must be self-contained and not import implementation code
7
+ * that uses path aliases like @/. It should only re-export type definitions.
8
+ */
9
+ export type { AppRouter } from './routers/index';
10
+ export { modelComparisonInput } from './schemas/comparison.schema';
11
+ export { imageParamsInput } from './schemas/vehicle.schema';
12
+ export type { ConsolidatedMMT } from './services/mmt';
13
+ export type { FeatureAvailability, ModelAggregation, ModelColor, ModelRepresentativeImage, NumericRange, PaymentAvailability, } from './types/comparison';
14
+ export type { FilterCategory, FilterOption, FilterOptionValue, FilterState, HierarchicalFilters, MakeModels, MMTTransformedFilters, ModelTrims, OptionsFilter, RangeFilter, RangeValue, SortOption, TransformedFilters, } from './types/filters';
15
+ export type { SyncError, SyncErrorRecord, SyncHistoryRecord, SyncResult, SyncStats, SyncTrigger, TransformedVehicleData, } from './types/sync';
16
+ export type { CashOffer, CheapestByTrimInput, CheapestByTrimOutput, ChromeImage, FinanceOffer, GetTrimsInput, GetTrimsOutput, LeaseOffer, PaymentOffer, Vehicle, VehicleImage, VehicleRebate, VehicleStatus, } from './types/vehicle';
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,wBAAwB,EACxB,YAAY,EACZ,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,cAAc,EACd,YAAY,EACZ,iBAAiB,EAEjB,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,aAAa,EACb,WAAW,EACX,UAAU,EAEV,UAAU,EACV,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,SAAS,EACT,eAAe,EACf,iBAAiB,EAEjB,UAAU,EACV,SAAS,EACT,WAAW,EACX,sBAAsB,GACvB,MAAM,cAAc,CAAA;AAGrB,YAAY,EACV,SAAS,EAET,mBAAmB,EACnB,oBAAoB,EAEpB,WAAW,EACX,YAAY,EAEZ,aAAa,EACb,cAAc,EACd,UAAU,EAEV,YAAY,EAEZ,OAAO,EACP,YAAY,EACZ,aAAa,EACb,aAAa,GACd,MAAM,iBAAiB,CAAA"}