@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.
- package/README.md +76 -0
- package/dist/context.d.ts +53 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/repositories/vehicleConfigOptions.d.ts +165 -0
- package/dist/repositories/vehicleConfigOptions.d.ts.map +1 -0
- package/dist/routers/index.d.ts +793 -0
- package/dist/routers/index.d.ts.map +1 -0
- package/dist/schemas/comparison.schema.d.ts +37 -0
- package/dist/schemas/comparison.schema.d.ts.map +1 -0
- package/dist/schemas/externalApi.schema.d.ts +1532 -0
- package/dist/schemas/externalApi.schema.d.ts.map +1 -0
- package/dist/schemas/filters.schema.d.ts +276 -0
- package/dist/schemas/filters.schema.d.ts.map +1 -0
- package/dist/schemas/vehicle.schema.d.ts +1204 -0
- package/dist/schemas/vehicle.schema.d.ts.map +1 -0
- package/dist/services/lenderdesk.d.ts +139 -0
- package/dist/services/lenderdesk.d.ts.map +1 -0
- package/dist/services/mmt.d.ts +52 -0
- package/dist/services/mmt.d.ts.map +1 -0
- package/dist/types/comparison.d.ts +157 -0
- package/dist/types/comparison.d.ts.map +1 -0
- package/dist/types/filters.d.ts +95 -0
- package/dist/types/filters.d.ts.map +1 -0
- package/dist/types/guards.d.ts +32 -0
- package/dist/types/guards.d.ts.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/jdp.d.ts +210 -0
- package/dist/types/jdp.d.ts.map +1 -0
- package/dist/types/search.d.ts +475 -0
- package/dist/types/search.d.ts.map +1 -0
- package/dist/types/sync.d.ts +102 -0
- package/dist/types/sync.d.ts.map +1 -0
- package/dist/types/vehicle.d.ts +75 -0
- package/dist/types/vehicle.d.ts.map +1 -0
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4213 -0
- package/dist/utilities/error.d.ts +49 -0
- package/dist/utilities/error.d.ts.map +1 -0
- 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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"}
|