tesla-fleet-api 0.0.10 → 0.0.12

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 (64) hide show
  1. package/dist/energy.d.ts +4 -2
  2. package/dist/energy.js +2 -2
  3. package/dist/energy.js.map +1 -1
  4. package/dist/energyspecific.d.ts +4 -2
  5. package/dist/energyspecific.js.map +1 -1
  6. package/dist/helpers.d.ts +1 -1
  7. package/dist/teslafleetapi.d.ts +5 -3
  8. package/dist/teslafleetapi.js +1 -1
  9. package/dist/teslafleetapi.js.map +1 -1
  10. package/dist/teslemetry.d.ts +12 -2
  11. package/dist/teslemetry.js +3 -3
  12. package/dist/teslemetry.js.map +1 -1
  13. package/dist/tessie.d.ts +1 -1
  14. package/dist/types/commands.d.ts +44 -0
  15. package/dist/types/commands.js +11 -0
  16. package/dist/types/commands.js.map +1 -0
  17. package/dist/types/index.d.ts +44 -0
  18. package/dist/types/index.js +11 -0
  19. package/dist/types/index.js.map +1 -0
  20. package/dist/types/live_status.d.ts +26 -0
  21. package/dist/types/live_status.js +2 -0
  22. package/dist/types/live_status.js.map +1 -0
  23. package/dist/types/products.d.ts +53 -0
  24. package/dist/types/products.js +2 -0
  25. package/dist/types/products.js.map +1 -0
  26. package/dist/types/responses.d.ts +5 -0
  27. package/dist/types/responses.js +2 -0
  28. package/dist/types/responses.js.map +1 -0
  29. package/dist/types/site_info.d.ts +121 -0
  30. package/dist/types/site_info.js +2 -0
  31. package/dist/types/site_info.js.map +1 -0
  32. package/dist/types/types.d.ts +48 -0
  33. package/dist/types/types.js +11 -0
  34. package/dist/types/types.js.map +1 -0
  35. package/dist/types/vehicle.d.ts +22 -0
  36. package/dist/types/vehicle.js +2 -0
  37. package/dist/types/vehicle.js.map +1 -0
  38. package/dist/types/vehicle_data.d.ts +274 -0
  39. package/dist/types/vehicle_data.js +2 -0
  40. package/dist/types/vehicle_data.js.map +1 -0
  41. package/dist/types.js.map +1 -1
  42. package/dist/user.d.ts +1 -1
  43. package/dist/vehicle.d.ts +8 -5
  44. package/dist/vehicle.js +5 -5
  45. package/dist/vehicle.js.map +1 -1
  46. package/dist/vehiclespecific.d.ts +7 -4
  47. package/dist/vehiclespecific.js.map +1 -1
  48. package/package.json +1 -1
  49. package/src/energy.ts +6 -4
  50. package/src/energyspecific.ts +4 -2
  51. package/src/helpers.ts +1 -1
  52. package/src/teslafleetapi.ts +5 -4
  53. package/src/teslemetry.ts +15 -5
  54. package/src/tessie.ts +1 -1
  55. package/src/{types.ts → types/commands.ts} +1 -6
  56. package/src/types/live_status.ts +27 -0
  57. package/src/types/products.ts +59 -0
  58. package/src/types/responses.ts +1 -0
  59. package/src/types/site_info.ts +129 -0
  60. package/src/types/vehicle.ts +23 -0
  61. package/src/types/vehicle_data.ts +286 -0
  62. package/src/user.ts +1 -1
  63. package/src/vehicle.ts +12 -9
  64. package/src/vehiclespecific.ts +7 -4
@@ -4,9 +4,10 @@ import Partner from "./partner.js";
4
4
  import User from "./user.js";
5
5
  import Vehicle from "./vehicle.js";
6
6
 
7
- import { Method } from "./types.js";
7
+ import { ProductsResponse } from "./types/products.js";
8
8
 
9
- export type Region = "na" | "eu" | "cn";
9
+ type Region = "na" | "eu" | "cn";
10
+ type Method = "GET" | "POST" | "PUT" | "DELETE";
10
11
 
11
12
  const servers: Record<Region, string> = {
12
13
  na: "https://fleet-api.prd.na.vn.cloud.tesla.com",
@@ -116,7 +117,7 @@ export default class TeslaFleetApi {
116
117
  });
117
118
  }
118
119
 
119
- async products(): Promise<Record<string, any>> {
120
- return this._request("GET", "api/1/products");
120
+ async products(): Promise<ProductsResponse> {
121
+ return this._request("GET", "api/1/products").then(({ data }) => data.response);
121
122
  }
122
123
  }
package/src/teslemetry.ts CHANGED
@@ -1,7 +1,17 @@
1
1
  import TeslaFleetApi from "./teslafleetapi.js";
2
+ import { Scope } from "./types/commands.js";
2
3
 
3
4
  type Region = "na" | "eu" | "api";
4
5
 
6
+ type Test = { response: boolean };
7
+
8
+ type Metadata = {
9
+ uid: string;
10
+ region: "NA" | "EU";
11
+ scopes: Scope[];
12
+ vins: string[];
13
+ };
14
+
5
15
  export default class Telemetry extends TeslaFleetApi {
6
16
  constructor(accessToken: string, region: Region = "api") {
7
17
  super({ accessToken, server: `https://${region}.teslemetry.com`, partnerScope: false, userScope: false });
@@ -10,18 +20,18 @@ export default class Telemetry extends TeslaFleetApi {
10
20
  /**
11
21
  * Test the connection to Teslemetry
12
22
  */
13
- async test() {
14
- return this._request("GET", "/api/test");
23
+ async test(): Promise<Test> {
24
+ return this._request("GET", "/api/test").then(({ response }) => response);
15
25
  }
16
26
 
17
27
  /**
18
28
  * Get details about your Teslemetry account
19
29
  * @param update_region Update the server URL based on the region in the metadata
20
30
  */
21
- async metadata(update_region = true) {
22
- this._request("GET", "/api/metadata").then((metadata) => {
31
+ async metadata(update_region = true): Promise<Metadata> {
32
+ return this._request("GET", "/api/metadata").then((metadata) => {
23
33
  if (update_region) {
24
- this.server = `https://${metadata.region}.teslemetry.com`;
34
+ this.server = `https://${metadata.region.toLowerCase()}.teslemetry.com`;
25
35
  }
26
36
  return metadata;
27
37
  });
package/src/tessie.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import TeslaFleetApi from "./teslafleetapi.js";
2
- import { Scope } from "./types.js";
2
+ import { Scope } from "./types/commands.js";
3
3
 
4
4
  export default class Telemetry extends TeslaFleetApi {
5
5
  constructor(accessToken: string) {
@@ -3,7 +3,7 @@ export interface CommandResponse {
3
3
  result: boolean;
4
4
  reason: string;
5
5
  };
6
- error: string;
6
+ error?: string;
7
7
  }
8
8
 
9
9
  export type Scope =
@@ -15,11 +15,6 @@ export type Scope =
15
15
  | "energy_cmds"
16
16
  | "offline_access"
17
17
  | "openid";
18
- export type Method = "GET" | "POST" | "PUT" | "DELETE";
19
-
20
- export interface RequestFunction {
21
- (method: Method, endpoint: string, data?: Record<string, any>): Promise<Record<string, any>>;
22
- }
23
18
 
24
19
  // Vehicles
25
20
 
@@ -0,0 +1,27 @@
1
+ export type LiveStatusResponse = {
2
+ solar_power?: number;
3
+ energy_left?: number;
4
+ total_pack_energy?: number;
5
+ percentage_charged?: number;
6
+ backup_capable?: boolean;
7
+ battery_power?: number;
8
+ load_power?: number;
9
+ grid_status?: string;
10
+ grid_services_active?: boolean;
11
+ grid_power?: number;
12
+ grid_services_power?: number;
13
+ generator_power?: number;
14
+ island_status?: string;
15
+ storm_mode_active?: boolean;
16
+ timestamp: Date;
17
+ wall_connectors?: WallConnector[];
18
+ };
19
+
20
+ export type WallConnector = {
21
+ din: string;
22
+ vin?: string;
23
+ wall_connector_state: number;
24
+ wall_connector_fault_state: number;
25
+ wall_connector_power: number;
26
+ ocpp_status: number;
27
+ };
@@ -0,0 +1,59 @@
1
+ import { VehicleResponse } from "./vehicle.js";
2
+ import { VehicleConfig } from "./vehicle_data.js";
3
+
4
+ export type ProductsResponse = {
5
+ response: (VehicleProduct | EnergyProduct)[];
6
+ count: number;
7
+ };
8
+
9
+ export type VehicleProduct = VehicleResponse & {
10
+ vehicle_config: VehicleConfig;
11
+ command_signing: string;
12
+ release_notes_supported: boolean;
13
+ };
14
+
15
+ export type EnergyProduct = {
16
+ energy_site_id: number;
17
+ resource_type: string;
18
+ site_name: string;
19
+ id: string;
20
+ gateway_id: string;
21
+ asset_site_id: string;
22
+ warp_site_number: string;
23
+ energy_left: number;
24
+ total_pack_energy: number;
25
+ percentage_charged: number;
26
+ battery_type: string;
27
+ backup_capable: boolean;
28
+ battery_power: number;
29
+ go_off_grid_test_banner_enabled: null | boolean;
30
+ storm_mode_enabled: boolean;
31
+ powerwall_onboarding_settings_set: boolean;
32
+ powerwall_tesla_electric_interested_in: null | boolean;
33
+ vpp_tour_enabled: null | boolean;
34
+ sync_grid_alert_enabled: boolean;
35
+ breaker_alert_enabled: boolean;
36
+ components: Components;
37
+ features: Features;
38
+ };
39
+
40
+ export type Components = {
41
+ battery: boolean;
42
+ battery_type: string;
43
+ solar: boolean;
44
+ solar_type: string;
45
+ grid: boolean;
46
+ load_meter: boolean;
47
+ market_type: string;
48
+ wall_connectors: WallConnector[];
49
+ };
50
+
51
+ export type WallConnector = {
52
+ device_id: string;
53
+ din: string;
54
+ is_active: boolean;
55
+ };
56
+
57
+ export type Features = {
58
+ rate_plan_manager_no_pricing_constraint: boolean;
59
+ };
@@ -0,0 +1 @@
1
+ export type OptionsResponse = { code: string; displayName: string; isActive: boolean }[];
@@ -0,0 +1,129 @@
1
+ export type SiteInfoResponse = {
2
+ id: string;
3
+ site_name: string;
4
+ backup_reserve_percent: number;
5
+ default_real_mode: string;
6
+ installation_date: Date;
7
+ user_settings: UserSettings;
8
+ components: Components;
9
+ version?: string;
10
+ battery_count?: number;
11
+ tou_settings?: TouSettings;
12
+ nameplate_power?: number;
13
+ nameplate_energy?: number;
14
+ installation_time_zone: string;
15
+ max_site_meter_power_ac?: number;
16
+ min_site_meter_power_ac?: number;
17
+ vpp_backup_reserve_percent?: number;
18
+ tariff_content_v2?: TariffContentV2;
19
+ };
20
+
21
+ export type Components = {
22
+ solar: boolean;
23
+ solar_type?: string;
24
+ battery: boolean;
25
+ grid: boolean;
26
+ backup: boolean;
27
+ gateway: string;
28
+ load_meter: boolean;
29
+ tou_capable: boolean;
30
+ storm_mode_capable: boolean;
31
+ flex_energy_request_capable: boolean;
32
+ car_charging_data_supported: boolean;
33
+ off_grid_vehicle_charging_reserve_supported: boolean;
34
+ vehicle_charging_performance_view_enabled: boolean;
35
+ vehicle_charging_solar_offset_view_enabled: boolean;
36
+ battery_solar_offset_view_enabled: boolean;
37
+ solar_value_enabled?: boolean;
38
+ energy_value_header?: string;
39
+ energy_value_subheader?: string;
40
+ energy_service_self_scheduling_enabled: boolean;
41
+ show_grid_import_battery_source_cards?: boolean;
42
+ set_islanding_mode_enabled?: boolean;
43
+ wifi_commissioning_enabled?: boolean;
44
+ backup_time_remaining_enabled?: boolean;
45
+ battery_type?: string;
46
+ configurable?: boolean;
47
+ grid_services_enabled?: boolean;
48
+ gateways?: Gateway[];
49
+ batteries?: Battery[];
50
+ wall_connectors?: WallConnector[];
51
+ disallow_charge_from_grid_with_solar_installed?: boolean;
52
+ customer_preferred_export_rule?: string;
53
+ net_meter_mode?: string;
54
+ system_alerts_enabled?: boolean;
55
+ nbt_supported?: boolean;
56
+ };
57
+
58
+ export type Battery = {
59
+ device_id: string;
60
+ din: string;
61
+ serial_number: string;
62
+ part_number: string;
63
+ part_type: number;
64
+ part_name: string;
65
+ nameplate_max_charge_power: number;
66
+ nameplate_max_discharge_power: number;
67
+ nameplate_energy: number;
68
+ };
69
+
70
+ export type Gateway = {
71
+ device_id: string;
72
+ din: string;
73
+ serial_number: string;
74
+ part_number: string;
75
+ part_type: number;
76
+ part_name: string;
77
+ is_active: boolean;
78
+ site_id: string;
79
+ firmware_version: string;
80
+ updated_datetime: Date;
81
+ };
82
+
83
+ export type WallConnector = {
84
+ device_id: string;
85
+ din: string;
86
+ part_name: string;
87
+ is_active: boolean;
88
+ };
89
+
90
+ export type TouSettings = {
91
+ optimization_strategy: string;
92
+ schedule: Schedule[];
93
+ };
94
+
95
+ export type Schedule = {
96
+ target: string;
97
+ week_days: number[];
98
+ start_seconds: number;
99
+ end_seconds: number;
100
+ };
101
+
102
+ export type UserSettings = {
103
+ go_off_grid_test_banner_enabled: boolean;
104
+ storm_mode_enabled: boolean;
105
+ powerwall_onboarding_settings_set: boolean;
106
+ powerwall_tesla_electric_interested_in: boolean;
107
+ vpp_tour_enabled: boolean;
108
+ sync_grid_alert_enabled: boolean;
109
+ breaker_alert_enabled: boolean;
110
+ off_grid_vehicle_charging_enabled: boolean;
111
+ };
112
+
113
+ export type TariffContentV2 = {
114
+ version: number;
115
+ monthly_minimum_bill: number;
116
+ min_applicable_demand: number;
117
+ max_applicable_demand: number;
118
+ monthly_charges: number;
119
+ utility: string;
120
+ code: string;
121
+ name: string;
122
+ currency: string;
123
+ daily_charges: Record<string, any>[];
124
+ daily_demand_charges: Record<string, any>;
125
+ demand_charges: Record<string, any>;
126
+ energy_charges: Record<string, any>;
127
+ seasons: Record<string, any>[];
128
+ sell_tariff: Record<string, any>;
129
+ };
@@ -0,0 +1,23 @@
1
+ export type VehicleResponse = {
2
+ id: number;
3
+ vehicle_id: number;
4
+ vin: string;
5
+ color: null;
6
+ access_type: string;
7
+ display_name: string;
8
+ option_codes: null;
9
+ granular_access: GranularAccess;
10
+ tokens: string[];
11
+ state: string;
12
+ in_service: boolean;
13
+ id_s: string;
14
+ calendar_enabled: boolean;
15
+ api_version: number;
16
+ backseat_token: null;
17
+ backseat_token_updated_at: null;
18
+ ble_autopair_enrolled: boolean;
19
+ };
20
+
21
+ export type GranularAccess = {
22
+ hide_private: boolean;
23
+ };
@@ -0,0 +1,286 @@
1
+ import { VehicleResponse } from "./vehicle.js";
2
+
3
+ export type VehicleDataResponse = VehicleResponse & {
4
+ charge_state: ChargeState;
5
+ climate_state: ClimateState;
6
+ drive_state: DriveState;
7
+ gui_settings: GUISettings;
8
+ vehicle_config: VehicleConfig;
9
+ vehicle_state: VehicleState;
10
+ };
11
+
12
+ export type ChargeState = {
13
+ battery_heater_on: boolean;
14
+ battery_level: number;
15
+ battery_range: number;
16
+ charge_amps: number;
17
+ charge_current_request: number;
18
+ charge_current_request_max: number;
19
+ charge_enable_request: boolean;
20
+ charge_energy_added: number;
21
+ charge_limit_soc: number;
22
+ charge_limit_soc_max: number;
23
+ charge_limit_soc_min: number;
24
+ charge_limit_soc_std: number;
25
+ charge_miles_added_ideal: number;
26
+ charge_miles_added_rated: number;
27
+ charge_port_cold_weather_mode: boolean;
28
+ charge_port_color: string;
29
+ charge_port_door_open: boolean;
30
+ charge_port_latch: string;
31
+ charge_rate: number;
32
+ charger_actual_current: number;
33
+ charger_phases: null;
34
+ charger_pilot_current: number;
35
+ charger_power: number;
36
+ charger_voltage: number;
37
+ charging_state: string;
38
+ conn_charge_cable: string;
39
+ est_battery_range: number;
40
+ fast_charger_brand: string;
41
+ fast_charger_present: boolean;
42
+ fast_charger_type: string;
43
+ ideal_battery_range: number;
44
+ max_range_charge_counter: number;
45
+ minutes_to_full_charge: number;
46
+ not_enough_power_to_heat: null;
47
+ off_peak_charging_enabled: boolean;
48
+ off_peak_charging_times: string;
49
+ off_peak_hours_end_time: number;
50
+ preconditioning_enabled: boolean;
51
+ preconditioning_times: string;
52
+ scheduled_charging_mode: string;
53
+ scheduled_charging_pending: boolean;
54
+ scheduled_charging_start_time: null;
55
+ scheduled_charging_start_time_app: number;
56
+ scheduled_departure_time: number;
57
+ scheduled_departure_time_minutes: number;
58
+ supercharger_session_trip_planner: boolean;
59
+ time_to_full_charge: number;
60
+ timestamp: number;
61
+ trip_charging: boolean;
62
+ usable_battery_level: number;
63
+ user_charge_enable_request: null;
64
+ };
65
+
66
+ export type ClimateState = {
67
+ allow_cabin_overheat_protection: boolean;
68
+ auto_seat_climate_left: boolean;
69
+ auto_seat_climate_right: boolean;
70
+ auto_steering_wheel_heat: boolean;
71
+ battery_heater: boolean;
72
+ battery_heater_no_power: null;
73
+ cabin_overheat_protection: string;
74
+ cabin_overheat_protection_actively_cooling: boolean;
75
+ climate_keeper_mode: string;
76
+ cop_activation_temperature: string;
77
+ defrost_mode: number;
78
+ driver_temp_setting: number;
79
+ fan_status: number;
80
+ hvac_auto_request: string;
81
+ inside_temp: number;
82
+ is_auto_conditioning_on: boolean;
83
+ is_climate_on: boolean;
84
+ is_front_defroster_on: boolean;
85
+ is_preconditioning: boolean;
86
+ is_rear_defroster_on: boolean;
87
+ left_temp_direction: number;
88
+ max_avail_temp: number;
89
+ min_avail_temp: number;
90
+ outside_temp: number;
91
+ passenger_temp_setting: number;
92
+ remote_heater_control_enabled: boolean;
93
+ right_temp_direction: number;
94
+ seat_heater_left: number;
95
+ seat_heater_rear_center: number;
96
+ seat_heater_rear_left: number;
97
+ seat_heater_rear_right: number;
98
+ seat_heater_right: number;
99
+ side_mirror_heaters: boolean;
100
+ steering_wheel_heat_level: number;
101
+ steering_wheel_heater: boolean;
102
+ supports_fan_only_cabin_overheat_protection: boolean;
103
+ timestamp: number;
104
+ wiper_blade_heater: boolean;
105
+ };
106
+
107
+ export type DriveState = {
108
+ active_route_latitude: number;
109
+ active_route_longitude: number;
110
+ active_route_miles_to_arrival: number;
111
+ active_route_minutes_to_arrival: number;
112
+ active_route_traffic_minutes_delay: number;
113
+ gps_as_of: number;
114
+ heading: number;
115
+ latitude: number;
116
+ longitude: number;
117
+ native_latitude: number;
118
+ native_location_supported: number;
119
+ native_longitude: number;
120
+ native_type: string;
121
+ power: number;
122
+ shift_state: null;
123
+ speed: null;
124
+ timestamp: number;
125
+ };
126
+
127
+ export type GranularAccess = {
128
+ hide_private: boolean;
129
+ };
130
+
131
+ export type GUISettings = {
132
+ gui_24_hour_time: boolean;
133
+ gui_charge_rate_units: string;
134
+ gui_distance_units: string;
135
+ gui_range_display: string;
136
+ gui_temperature_units: string;
137
+ gui_tirepressure_units: string;
138
+ show_range_units: boolean;
139
+ timestamp: number;
140
+ };
141
+
142
+ export type VehicleConfig = {
143
+ aux_park_lamps: string;
144
+ badge_version: number;
145
+ can_accept_navigation_requests: boolean;
146
+ can_actuate_trunks: boolean;
147
+ car_special_type: string;
148
+ car_type: string;
149
+ charge_port_type: string;
150
+ cop_user_set_temp_supported: boolean;
151
+ dashcam_clip_save_supported: boolean;
152
+ default_charge_to_max: boolean;
153
+ driver_assist: string;
154
+ ece_restrictions: boolean;
155
+ efficiency_package: string;
156
+ eu_vehicle: boolean;
157
+ exterior_color: string;
158
+ exterior_trim: string;
159
+ exterior_trim_override: string;
160
+ has_air_suspension: boolean;
161
+ has_ludicrous_mode: boolean;
162
+ has_seat_cooling: boolean;
163
+ headlamp_type: string;
164
+ interior_trim_type: string;
165
+ key_version: number;
166
+ motorized_charge_port: boolean;
167
+ paint_color_override: string;
168
+ performance_package: string;
169
+ plg: boolean;
170
+ pws: boolean;
171
+ rear_drive_unit: string;
172
+ rear_seat_heaters: number;
173
+ rear_seat_type: number;
174
+ rhd: boolean;
175
+ roof_color: string;
176
+ seat_type: null;
177
+ spoiler_type: string;
178
+ sun_roof_installed: null;
179
+ supports_qr_pairing: boolean;
180
+ third_row_seats: string;
181
+ timestamp: number;
182
+ trim_badging: string;
183
+ use_range_badging: boolean;
184
+ utc_offset: number;
185
+ webcam_selfie_supported: boolean;
186
+ webcam_supported: boolean;
187
+ wheel_type: string;
188
+ };
189
+
190
+ export type VehicleState = {
191
+ api_version: number;
192
+ autopark_state_v2: string;
193
+ calendar_supported: boolean;
194
+ car_version: string;
195
+ center_display_state: number;
196
+ dashcam_clip_save_available: boolean;
197
+ dashcam_state: string;
198
+ df: number;
199
+ dr: number;
200
+ fd_window: number;
201
+ feature_bitmask: string;
202
+ fp_window: number;
203
+ ft: number;
204
+ is_user_present: boolean;
205
+ locked: boolean;
206
+ media_info: MediaInfo;
207
+ media_state: MediaState;
208
+ notifications_supported: boolean;
209
+ odometer: number;
210
+ parsed_calendar_supported: boolean;
211
+ pf: number;
212
+ pr: number;
213
+ rd_window: number;
214
+ remote_start: boolean;
215
+ remote_start_enabled: boolean;
216
+ remote_start_supported: boolean;
217
+ rp_window: number;
218
+ rt: number;
219
+ santa_mode: number;
220
+ sentry_mode: boolean;
221
+ sentry_mode_available: boolean;
222
+ service_mode: boolean;
223
+ service_mode_plus: boolean;
224
+ software_update: SoftwareUpdate;
225
+ speed_limit_mode: SpeedLimitMode;
226
+ timestamp: number;
227
+ tpms_hard_warning_fl: boolean;
228
+ tpms_hard_warning_fr: boolean;
229
+ tpms_hard_warning_rl: boolean;
230
+ tpms_hard_warning_rr: boolean;
231
+ tpms_last_seen_pressure_time_fl: number;
232
+ tpms_last_seen_pressure_time_fr: number;
233
+ tpms_last_seen_pressure_time_rl: number;
234
+ tpms_last_seen_pressure_time_rr: number;
235
+ tpms_pressure_fl: number;
236
+ tpms_pressure_fr: number;
237
+ tpms_pressure_rl: number;
238
+ tpms_pressure_rr: number;
239
+ tpms_rcp_front_value: number;
240
+ tpms_rcp_rear_value: number;
241
+ tpms_soft_warning_fl: boolean;
242
+ tpms_soft_warning_fr: boolean;
243
+ tpms_soft_warning_rl: boolean;
244
+ tpms_soft_warning_rr: boolean;
245
+ valet_mode: boolean;
246
+ valet_pin_needed: boolean;
247
+ vehicle_name: string;
248
+ vehicle_self_test_progress: number;
249
+ vehicle_self_test_requested: boolean;
250
+ webcam_available: boolean;
251
+ };
252
+
253
+ export type MediaInfo = {
254
+ a2dp_source_name: string;
255
+ audio_volume: number;
256
+ audio_volume_increment: number;
257
+ audio_volume_max: number;
258
+ media_playback_status: string;
259
+ now_playing_album: string;
260
+ now_playing_artist: string;
261
+ now_playing_duration: number;
262
+ now_playing_elapsed: number;
263
+ now_playing_source: string;
264
+ now_playing_station: string;
265
+ now_playing_title: string;
266
+ };
267
+
268
+ export type MediaState = {
269
+ remote_control_enabled: boolean;
270
+ };
271
+
272
+ export type SoftwareUpdate = {
273
+ download_perc: number;
274
+ expected_duration_sec: number;
275
+ install_perc: number;
276
+ status: string;
277
+ version: string;
278
+ };
279
+
280
+ export type SpeedLimitMode = {
281
+ active: boolean;
282
+ current_limit_mph: number;
283
+ max_limit_mph: number;
284
+ min_limit_mph: number;
285
+ pin_code_set: boolean;
286
+ };
package/src/user.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import TeslaFleetApi from "./teslafleetapi.js";
2
- import { CommandResponse } from "./types.js";
2
+ import { CommandResponse } from "./types/commands.js";
3
3
 
4
4
  export default class User {
5
5
  parent: TeslaFleetApi;
package/src/vehicle.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import TeslaFleetApi from "./teslafleetapi.js";
2
- import { ClimateMode, ClimateModes, CommandResponse, FleetTelemetryConfig, Level, Seat, Seats, Trunk, VehicleDataEndpoint } from "./types.js";
2
+ import { ClimateMode, ClimateModes, CommandResponse, FleetTelemetryConfig, Level, Seat, Seats, Trunk, VehicleDataEndpoint } from "./types/commands.js";
3
+ import { OptionsResponse } from "./types/responses.js";
4
+ import { VehicleResponse } from "./types/vehicle.js";
5
+ import { VehicleDataResponse } from "./types/vehicle_data.js";
3
6
  import VehicleSpecific from "./vehiclespecific.js";
4
7
 
5
8
  const Models: Record<string, string> = {
@@ -671,8 +674,8 @@ export default class Vehicle {
671
674
  * Returns all allowed drivers for a vehicle. This endpoint is only available for the vehicle owner.
672
675
  * @param vehicle_tag VIN or id field of a vehicle
673
676
  */
674
- async drivers(vehicle_tag: string | number): Promise<Record<string, any>> {
675
- return this.parent._request("GET", `api/1/vehicles/${vehicle_tag}/drivers`);
677
+ async drivers(vehicle_tag: string | number): Promise<Record<string, any>[]> {
678
+ return this.parent._request("GET", `api/1/vehicles/${vehicle_tag}/drivers`).then(({ response }) => response);
676
679
  }
677
680
 
678
681
  /**
@@ -768,8 +771,8 @@ export default class Vehicle {
768
771
  * Returns vehicle option details.
769
772
  * @param vin Vehicle Identification Number
770
773
  */
771
- async options(vin: string): Promise<Record<string, any>> {
772
- return this.parent._request("GET", "api/1/dx/vehicles/options", { vin });
774
+ async options(vin: string): Promise<OptionsResponse> {
775
+ return this.parent._request("GET", "api/1/dx/vehicles/options", { vin }).then(({ codes }) => codes);
773
776
  }
774
777
 
775
778
  /**
@@ -845,8 +848,8 @@ export default class Vehicle {
845
848
  * Returns information about a vehicle.
846
849
  * @param vehicle_tag VIN or id field of a vehicle
847
850
  */
848
- async vehicle(vehicle_tag: string | number): Promise<Record<string, any>> {
849
- return this.parent._request("GET", `api/1/vehicles/${vehicle_tag}`);
851
+ async vehicle(vehicle_tag: string | number): Promise<VehicleResponse> {
852
+ return this.parent._request("GET", `api/1/vehicles/${vehicle_tag}`).then(({ data }) => data.response);
850
853
  }
851
854
 
852
855
  /**
@@ -854,9 +857,9 @@ export default class Vehicle {
854
857
  * @param vehicle_tag VIN or id field of a vehicle
855
858
  * @param endpoints
856
859
  */
857
- async vehicle_data(vehicle_tag: string | number, endpoints?: VehicleDataEndpoint[] | string): Promise<Record<string, any>> {
860
+ async vehicle_data(vehicle_tag: string | number, endpoints?: VehicleDataEndpoint[] | string): Promise<VehicleDataResponse> {
858
861
  if (typeof endpoints === "object") endpoints = endpoints.join(";");
859
- return this.parent._request("GET", `api/1/vehicles/${vehicle_tag}/vehicle_data`, { endpoints });
862
+ return this.parent._request("GET", `api/1/vehicles/${vehicle_tag}/vehicle_data`, { endpoints }).then(({ data }) => data.response);
860
863
  }
861
864
 
862
865
  /**