@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
package/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # @honestdigital/vehicle-service-types
2
+
3
+ TypeScript type definitions for the HonestCMS Vehicle Service API.
4
+
5
+ ## Overview
6
+
7
+ This package provides type-safe TypeScript definitions for building clients that interact with the HonestCMS Vehicle Service. The service manages vehicle inventory operations for multi-tenant automotive dealerships.
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npm install @honestdigital/vehicle-service-types
13
+ # or
14
+ bun add @honestdigital/vehicle-service-types
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ### Type-Safe tRPC Client
20
+
21
+ ```typescript
22
+ import type { AppRouter } from '@honestdigital/vehicle-service-types/types'
23
+ import { createTRPCClient, httpBatchLink } from '@trpc/client'
24
+
25
+ const client = createTRPCClient<AppRouter>({
26
+ links: [
27
+ httpBatchLink({
28
+ url: 'https://your-api.com/trpc',
29
+ headers: {
30
+ 'x-tenant-id': '1',
31
+ },
32
+ }),
33
+ ],
34
+ })
35
+
36
+ // Fully type-safe calls with autocomplete
37
+ const vehicles = await client.inventory.getInventory.query({
38
+ filters: {},
39
+ limit: 20,
40
+ })
41
+ ```
42
+
43
+ ### Type Imports
44
+
45
+ ```typescript
46
+ import type {
47
+ Vehicle,
48
+ FilterState,
49
+ SyncResult,
50
+ } from '@honestdigital/vehicle-service-types/types'
51
+ ```
52
+
53
+ ## What's Included
54
+
55
+ This package contains only TypeScript type definitions (`.d.ts` files) for:
56
+
57
+ - **AppRouter** - tRPC router type for client inference
58
+ - **Vehicle Types** - Vehicle data structures and pricing information
59
+ - **Filter Types** - Inventory filtering and sorting options
60
+ - **Sync Types** - Data synchronization operations
61
+
62
+ ## Requirements
63
+
64
+ - TypeScript 5.0+
65
+ - tRPC 11.0+ (if using tRPC client)
66
+
67
+ ## Features
68
+
69
+ - ✅ Full type safety for API calls
70
+ - ✅ IntelliSense autocomplete support
71
+ - ✅ Zero runtime dependencies
72
+ - ✅ Compatible with any tRPC client setup
73
+
74
+ ## Support
75
+
76
+ For API documentation and integration guides, contact HonestDigital support.
@@ -0,0 +1,53 @@
1
+ /**
2
+ * tRPC context factory for Hono + Cloudflare Workers
3
+ * Creates context with tenant info and environment bindings
4
+ */
5
+ import type { Context } from 'hono';
6
+ /**
7
+ * Cloudflare Workers Rate Limiter binding type
8
+ */
9
+ type RateLimiter = {
10
+ limit: (options: {
11
+ key: string;
12
+ }) => Promise<{
13
+ success: boolean;
14
+ }>;
15
+ };
16
+ /**
17
+ * Cloudflare Workers environment bindings
18
+ * Includes secrets and environment variables defined in wrangler.toml
19
+ */
20
+ export type Bindings = {
21
+ POSTGRES_URL: string;
22
+ NODE_ENV?: string;
23
+ CRON_API_KEY?: string;
24
+ SENTRY_DSN?: string;
25
+ CF_VERSION_METADATA?: {
26
+ id: string;
27
+ };
28
+ RATE_LIMITER?: RateLimiter;
29
+ DISABLE_RATE_LIMIT?: string;
30
+ BUILD_API_KEY?: string;
31
+ CHROME_IMAGE_PROXY_URL?: string;
32
+ ADMIN_USERNAME?: string;
33
+ ADMIN_PASSWORD?: string;
34
+ };
35
+ /**
36
+ * Context shape passed to all tRPC procedures
37
+ * Includes tenant isolation and environment access
38
+ */
39
+ export type TRPCContext = {
40
+ tenantId: number | null;
41
+ tenantSlug: string | null;
42
+ env: Bindings;
43
+ req: Context['req'];
44
+ };
45
+ /**
46
+ * Creates tRPC context from Hono context
47
+ * Extracts tenant from headers for multi-tenant isolation
48
+ */
49
+ export declare function createContext(c: Context<{
50
+ Bindings: Bindings;
51
+ }>): TRPCContext;
52
+ export {};
53
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC;;GAEG;AACH,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CACnE,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mBAAmB,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,GAAG,EAAE,QAAQ,CAAA;IACb,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,GAAG,WAAW,CA+B7E"}
@@ -0,0 +1,165 @@
1
+ import type { Vehicle } from '@/types';
2
+ import type { EnvBindings } from '@/types/index';
3
+ import type { ImageParams } from '@/types/vehicle';
4
+ import { BaseRepository } from './baseRepository';
5
+ export interface ColorOption {
6
+ code: string;
7
+ name: string;
8
+ hex?: string;
9
+ }
10
+ export interface VehicleConfiguration {
11
+ brand: string;
12
+ model: string;
13
+ year: number;
14
+ currentTrim: string | null;
15
+ currentExteriorColor: string | null;
16
+ currentInteriorColor: string | null;
17
+ availableTrims: Array<{
18
+ trim: string;
19
+ count: number;
20
+ }>;
21
+ availableExteriorColors: ColorOption[];
22
+ availableInteriorColors: ColorOption[];
23
+ }
24
+ export interface TrimColors {
25
+ exteriorColors: string[];
26
+ interiorColors: string[];
27
+ }
28
+ export declare class VehicleConfigOptionsRepository extends BaseRepository {
29
+ protected readonly repositoryName = "VehicleConfigOptionsRepository";
30
+ static getInstance: () => VehicleConfigOptionsRepository;
31
+ private constructor();
32
+ /**
33
+ * Determine color type from color name
34
+ */
35
+ private getColorType;
36
+ /**
37
+ * Get fallback hex color from color name
38
+ */
39
+ private getFallbackHex;
40
+ /**
41
+ * Build color options from raw database results
42
+ */
43
+ private buildColorOptions;
44
+ /**
45
+ * Build trim options from raw database results
46
+ */
47
+ private buildTrimOptions;
48
+ /**
49
+ * Build changes object showing what was different from the request
50
+ */
51
+ private buildChangesObject;
52
+ /**
53
+ * Get available colors for a specific trim
54
+ * @param brand Vehicle brand
55
+ * @param model Vehicle model
56
+ * @param trimId Trim identifier
57
+ * @param tenantId Tenant ID for isolation
58
+ */
59
+ getAvailableColorsForTrim(brand: string, model: string, trimId: string, tenantId: number | null, env?: EnvBindings): Promise<TrimColors>;
60
+ /**
61
+ * Build parameterized SQL status filter, expanding USED to include CERTIFIED when toggle is on.
62
+ * Returns the SQL fragment and the updated paramIndex.
63
+ */
64
+ private buildStatusFilter;
65
+ /**
66
+ * Find vehicle by configuration parameters
67
+ * Uses optimized single CTE query to eliminate N+1 queries
68
+ * @param brand Vehicle brand
69
+ * @param model Vehicle model
70
+ * @param trim Vehicle trim
71
+ * @param exteriorColor Exterior color name
72
+ * @param interiorColor Interior color name
73
+ * @param priorityField Field to prioritize in matching
74
+ * @param tenantId Tenant ID for isolation
75
+ * @param env Optional environment bindings
76
+ * @param imageParams Optional image params to include sized images
77
+ */
78
+ getVehicleByConfiguration(brand: string, model: string, trim: string | null, exteriorColor: string | null, interiorColor: string | null, priorityField?: string, tenantId?: number | null, env?: EnvBindings, imageParams?: ImageParams | null, status?: string): Promise<{
79
+ vehicle: Vehicle;
80
+ matchType: 'exact' | 'partial';
81
+ changes: {
82
+ trim?: {
83
+ requested: string;
84
+ returned: string;
85
+ };
86
+ exteriorColor?: {
87
+ requested: string;
88
+ returned: string;
89
+ };
90
+ interiorColor?: {
91
+ requested: string;
92
+ returned: string;
93
+ };
94
+ };
95
+ colorOptions: {
96
+ exterior: Array<{
97
+ id: string;
98
+ name: string;
99
+ hex: string;
100
+ type: 'standard' | 'metallic' | 'premium';
101
+ available: boolean;
102
+ }>;
103
+ interior: Array<{
104
+ id: string;
105
+ name: string;
106
+ hex: string;
107
+ type: 'standard' | 'metallic' | 'premium';
108
+ available: boolean;
109
+ }>;
110
+ };
111
+ matchingCount: number;
112
+ trimOptions: Array<{
113
+ id: string;
114
+ name: string;
115
+ description: string;
116
+ available: boolean;
117
+ }>;
118
+ }>;
119
+ /**
120
+ * Get vehicle by slug with configuration options in a single query
121
+ * Combines getVehicleBySlug and getVehicleByConfiguration into one CTE query
122
+ * @param brand Vehicle brand
123
+ * @param modelTrimSlug Model-trim slug (e.g., "xc40-b4-fwd-core")
124
+ * @param status Optional status filter (NEW, USED, CERTIFIED)
125
+ * @param tenantId Tenant ID for isolation
126
+ * @param env Optional environment bindings
127
+ * @param imageParams Optional image params to include sized images
128
+ */
129
+ getVehicleBySlugWithConfig(brand: string, modelTrimSlug: string, status: string | null, tenantId: number | null, env?: EnvBindings, imageParams?: ImageParams | null): Promise<{
130
+ vehicle: Vehicle;
131
+ matchType: 'exact' | 'partial';
132
+ colorOptions: {
133
+ exterior: Array<{
134
+ id: string;
135
+ name: string;
136
+ hex: string;
137
+ type: 'standard' | 'metallic' | 'premium';
138
+ available: boolean;
139
+ }>;
140
+ interior: Array<{
141
+ id: string;
142
+ name: string;
143
+ hex: string;
144
+ type: 'standard' | 'metallic' | 'premium';
145
+ available: boolean;
146
+ }>;
147
+ };
148
+ matchingCount: number;
149
+ trimOptions: Array<{
150
+ id: string;
151
+ name: string;
152
+ description: string;
153
+ available: boolean;
154
+ }>;
155
+ } | null>;
156
+ /**
157
+ * Get vehicle configuration by VIN with available options
158
+ * @param vin Vehicle identification number
159
+ * @param tenantId Tenant ID for isolation
160
+ * @param env Optional environment bindings
161
+ * @returns Vehicle configuration with available trims and colors
162
+ */
163
+ getVehicleConfigurationByVin(vin: string, tenantId: number | null, env?: EnvBindings): Promise<VehicleConfiguration>;
164
+ }
165
+ //# sourceMappingURL=vehicleConfigOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vehicleConfigOptions.d.ts","sourceRoot":"","sources":["../../src/repositories/vehicleConfigOptions.ts"],"names":[],"mappings":"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"}