tesla-fleet-api 0.3.0 → 0.5.0

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 (342) hide show
  1. package/README.md +284 -1
  2. package/dist/_virtual/_rolldown/runtime.cjs +32 -0
  3. package/dist/_virtual/_rolldown/runtime.mjs +12 -0
  4. package/dist/bluetooth/adapters/shared.cjs +38 -0
  5. package/dist/bluetooth/adapters/shared.mjs +36 -0
  6. package/dist/bluetooth/async.cjs +121 -0
  7. package/dist/bluetooth/async.d.cts +10 -0
  8. package/dist/bluetooth/async.d.mts +10 -0
  9. package/dist/bluetooth/async.mjs +116 -0
  10. package/dist/bluetooth/broadcast.cjs +153 -0
  11. package/dist/bluetooth/broadcast.d.cts +59 -0
  12. package/dist/bluetooth/broadcast.d.mts +59 -0
  13. package/dist/bluetooth/broadcast.mjs +151 -0
  14. package/dist/bluetooth/constants.cjs +99 -0
  15. package/dist/bluetooth/constants.d.cts +70 -0
  16. package/dist/bluetooth/constants.d.mts +70 -0
  17. package/dist/bluetooth/constants.mjs +72 -0
  18. package/dist/bluetooth/esphome.cjs +292 -0
  19. package/dist/bluetooth/esphome.d.cts +83 -0
  20. package/dist/bluetooth/esphome.d.mts +83 -0
  21. package/dist/bluetooth/esphome.mjs +291 -0
  22. package/dist/bluetooth/framing.cjs +125 -0
  23. package/dist/bluetooth/framing.d.cts +45 -0
  24. package/dist/bluetooth/framing.d.mts +45 -0
  25. package/dist/bluetooth/framing.mjs +122 -0
  26. package/dist/bluetooth/homey.cjs +155 -0
  27. package/dist/bluetooth/homey.d.cts +75 -0
  28. package/dist/bluetooth/homey.d.mts +75 -0
  29. package/dist/bluetooth/homey.mjs +150 -0
  30. package/dist/bluetooth/names.cjs +24 -0
  31. package/dist/bluetooth/names.d.cts +10 -0
  32. package/dist/bluetooth/names.d.mts +10 -0
  33. package/dist/bluetooth/names.mjs +20 -0
  34. package/dist/bluetooth/noble.cjs +178 -0
  35. package/dist/bluetooth/noble.d.cts +58 -0
  36. package/dist/bluetooth/noble.d.mts +58 -0
  37. package/dist/bluetooth/noble.mjs +177 -0
  38. package/dist/bluetooth/streamglue.cjs +157 -0
  39. package/dist/bluetooth/streamglue.d.cts +37 -0
  40. package/dist/bluetooth/streamglue.d.mts +37 -0
  41. package/dist/bluetooth/streamglue.mjs +154 -0
  42. package/dist/bluetooth/teslabluetooth.cjs +67 -0
  43. package/dist/bluetooth/teslabluetooth.d.cts +41 -0
  44. package/dist/bluetooth/teslabluetooth.d.mts +41 -0
  45. package/dist/bluetooth/teslabluetooth.mjs +66 -0
  46. package/dist/bluetooth/transport.cjs +10 -0
  47. package/dist/bluetooth/transport.d.cts +95 -0
  48. package/dist/bluetooth/transport.d.mts +95 -0
  49. package/dist/bluetooth/transport.mjs +10 -0
  50. package/dist/bluetooth/vehiclebluetooth.cjs +1272 -0
  51. package/dist/bluetooth/vehiclebluetooth.d.cts +495 -0
  52. package/dist/bluetooth/vehiclebluetooth.d.mts +495 -0
  53. package/dist/bluetooth/vehiclebluetooth.mjs +1270 -0
  54. package/dist/bluetooth/verify.cjs +93 -0
  55. package/dist/bluetooth/verify.d.cts +35 -0
  56. package/dist/bluetooth/verify.d.mts +35 -0
  57. package/dist/bluetooth/verify.mjs +91 -0
  58. package/dist/bluetooth.cjs +53 -0
  59. package/dist/bluetooth.d.cts +10 -0
  60. package/dist/bluetooth.d.mts +10 -0
  61. package/dist/bluetooth.mjs +9 -0
  62. package/dist/charging.cjs +53 -0
  63. package/dist/charging.d.cts +31 -0
  64. package/dist/charging.d.mts +30 -0
  65. package/dist/charging.mjs +53 -0
  66. package/dist/commands.cjs +1797 -0
  67. package/dist/commands.d.cts +881 -0
  68. package/dist/commands.d.mts +881 -0
  69. package/dist/commands.mjs +1791 -0
  70. package/dist/const.cjs +322 -0
  71. package/dist/const.d.cts +308 -0
  72. package/dist/const.d.mts +308 -0
  73. package/dist/const.mjs +282 -0
  74. package/dist/energy.cjs +142 -0
  75. package/dist/energy.d.cts +101 -0
  76. package/dist/energy.d.mts +100 -0
  77. package/dist/energy.mjs +142 -0
  78. package/dist/energyisland.cjs +38 -0
  79. package/dist/energyisland.mjs +37 -0
  80. package/dist/energyparsers.cjs +118 -0
  81. package/dist/energyparsers.d.cts +39 -0
  82. package/dist/energyparsers.d.mts +39 -0
  83. package/dist/energyparsers.mjs +116 -0
  84. package/dist/energyspecific.cjs +457 -0
  85. package/dist/energyspecific.d.cts +258 -0
  86. package/dist/energyspecific.d.mts +258 -0
  87. package/dist/energyspecific.mjs +451 -0
  88. package/dist/exceptions.cjs +1488 -0
  89. package/dist/exceptions.d.cts +1143 -0
  90. package/dist/exceptions.d.mts +1143 -0
  91. package/dist/exceptions.mjs +1325 -0
  92. package/dist/funnel.cjs +297 -0
  93. package/dist/funnel.d.cts +118 -0
  94. package/dist/funnel.d.mts +118 -0
  95. package/dist/funnel.mjs +292 -0
  96. package/dist/index.cjs +287 -0
  97. package/dist/index.d.cts +28 -0
  98. package/dist/index.d.mts +28 -0
  99. package/dist/index.mjs +27 -0
  100. package/dist/log.cjs +75 -0
  101. package/dist/log.d.cts +4 -0
  102. package/dist/log.d.mts +4 -0
  103. package/dist/log.mjs +71 -0
  104. package/dist/oauth.cjs +143 -0
  105. package/dist/oauth.d.cts +69 -0
  106. package/dist/oauth.d.mts +69 -0
  107. package/dist/oauth.mjs +143 -0
  108. package/dist/partner.cjs +32 -0
  109. package/dist/partner.d.cts +24 -0
  110. package/dist/partner.d.mts +23 -0
  111. package/dist/partner.mjs +32 -0
  112. package/dist/powerwall/client.cjs +818 -0
  113. package/dist/powerwall/client.d.cts +297 -0
  114. package/dist/powerwall/client.d.mts +297 -0
  115. package/dist/powerwall/client.mjs +807 -0
  116. package/dist/powerwall/components.cjs +188 -0
  117. package/dist/powerwall/components.d.cts +45 -0
  118. package/dist/powerwall/components.d.mts +45 -0
  119. package/dist/powerwall/components.mjs +182 -0
  120. package/dist/powerwall/energysite.cjs +216 -0
  121. package/dist/powerwall/energysite.d.cts +104 -0
  122. package/dist/powerwall/energysite.d.mts +104 -0
  123. package/dist/powerwall/energysite.mjs +214 -0
  124. package/dist/powerwall/exceptions.cjs +59 -0
  125. package/dist/powerwall/exceptions.d.cts +38 -0
  126. package/dist/powerwall/exceptions.d.mts +38 -0
  127. package/dist/powerwall/exceptions.mjs +51 -0
  128. package/dist/powerwall/gateway.cjs +102 -0
  129. package/dist/powerwall/gateway.d.cts +57 -0
  130. package/dist/powerwall/gateway.d.mts +57 -0
  131. package/dist/powerwall/gateway.mjs +101 -0
  132. package/dist/powerwall/merge.cjs +163 -0
  133. package/dist/powerwall/merge.d.cts +63 -0
  134. package/dist/powerwall/merge.d.mts +63 -0
  135. package/dist/powerwall/merge.mjs +159 -0
  136. package/dist/powerwall/models.d.cts +95 -0
  137. package/dist/powerwall/models.d.mts +95 -0
  138. package/dist/powerwall/queries.cjs +17 -0
  139. package/dist/powerwall/queries.mjs +10 -0
  140. package/dist/powerwall/transport.cjs +232 -0
  141. package/dist/powerwall/transport.mjs +227 -0
  142. package/dist/powerwall.cjs +47 -0
  143. package/dist/powerwall.d.cts +9 -0
  144. package/dist/powerwall.d.mts +9 -0
  145. package/dist/powerwall.mjs +8 -0
  146. package/dist/router/base.cjs +203 -0
  147. package/dist/router/base.d.cts +112 -0
  148. package/dist/router/base.d.mts +112 -0
  149. package/dist/router/base.mjs +200 -0
  150. package/dist/router/energysite.cjs +65 -0
  151. package/dist/router/energysite.d.cts +47 -0
  152. package/dist/router/energysite.d.mts +47 -0
  153. package/dist/router/energysite.mjs +60 -0
  154. package/dist/router.cjs +13 -0
  155. package/dist/router.d.cts +3 -0
  156. package/dist/router.d.mts +3 -0
  157. package/dist/router.mjs +3 -0
  158. package/dist/signing/crypto.cjs +59 -0
  159. package/dist/signing/crypto.mjs +52 -0
  160. package/dist/signing/energy.cjs +123 -0
  161. package/dist/signing/energy.d.cts +45 -0
  162. package/dist/signing/energy.d.mts +45 -0
  163. package/dist/signing/energy.mjs +120 -0
  164. package/dist/signing/jws.cjs +229 -0
  165. package/dist/signing/jws.d.cts +45 -0
  166. package/dist/signing/jws.d.mts +45 -0
  167. package/dist/signing/jws.mjs +211 -0
  168. package/dist/signing/keys.cjs +191 -0
  169. package/dist/signing/keys.d.cts +21 -0
  170. package/dist/signing/keys.d.mts +21 -0
  171. package/dist/signing/keys.mjs +182 -0
  172. package/dist/signing/session.cjs +186 -0
  173. package/dist/signing/session.d.cts +106 -0
  174. package/dist/signing/session.d.mts +106 -0
  175. package/dist/signing/session.mjs +184 -0
  176. package/dist/tariff.cjs +319 -0
  177. package/dist/tariff.d.cts +40 -0
  178. package/dist/tariff.d.mts +40 -0
  179. package/dist/tariff.mjs +317 -0
  180. package/dist/teslafleetapi.cjs +326 -0
  181. package/dist/teslafleetapi.d.cts +160 -0
  182. package/dist/teslafleetapi.d.mts +160 -0
  183. package/dist/teslafleetapi.mjs +326 -0
  184. package/dist/teslemetry.cjs +183 -0
  185. package/dist/teslemetry.d.cts +113 -0
  186. package/dist/teslemetry.d.mts +113 -0
  187. package/dist/teslemetry.mjs +181 -0
  188. package/dist/teslemetryenergy.cjs +287 -0
  189. package/dist/teslemetryenergy.d.cts +154 -0
  190. package/dist/teslemetryenergy.d.mts +154 -0
  191. package/dist/teslemetryenergy.mjs +282 -0
  192. package/dist/teslemetryvehicle.cjs +407 -0
  193. package/dist/teslemetryvehicle.d.cts +238 -0
  194. package/dist/teslemetryvehicle.d.mts +238 -0
  195. package/dist/teslemetryvehicle.mjs +405 -0
  196. package/dist/tessie.cjs +71 -0
  197. package/dist/tessie.d.cts +69 -0
  198. package/dist/tessie.d.mts +69 -0
  199. package/dist/tessie.mjs +71 -0
  200. package/dist/tessievehicle.cjs +514 -0
  201. package/dist/tessievehicle.d.cts +333 -0
  202. package/dist/tessievehicle.d.mts +333 -0
  203. package/dist/tessievehicle.mjs +513 -0
  204. package/dist/types/commands.d.cts +28 -0
  205. package/dist/types/commands.d.mts +28 -0
  206. package/dist/types/live_status.d.cts +30 -0
  207. package/dist/types/live_status.d.mts +30 -0
  208. package/dist/types/products.d.cts +58 -0
  209. package/dist/types/products.d.mts +58 -0
  210. package/dist/types/responses.d.cts +13 -0
  211. package/dist/types/responses.d.mts +13 -0
  212. package/dist/types/site_info.d.cts +154 -0
  213. package/dist/types/site_info.d.mts +154 -0
  214. package/dist/types/vehicle.d.cts +33 -0
  215. package/dist/types/vehicle.d.mts +33 -0
  216. package/dist/types/vehicle_data.d.cts +278 -0
  217. package/dist/types/vehicle_data.d.mts +278 -0
  218. package/dist/types.cjs +0 -0
  219. package/dist/types.d.cts +9 -0
  220. package/dist/types.d.mts +9 -0
  221. package/dist/types.mjs +1 -0
  222. package/dist/user.cjs +28 -0
  223. package/dist/user.d.cts +17 -0
  224. package/dist/user.d.mts +16 -0
  225. package/dist/user.mjs +28 -0
  226. package/dist/util.cjs +41 -0
  227. package/dist/util.d.cts +18 -0
  228. package/dist/util.d.mts +18 -0
  229. package/dist/util.mjs +40 -0
  230. package/dist/vehicle.cjs +847 -0
  231. package/dist/vehicle.d.cts +566 -0
  232. package/dist/vehicle.d.mts +565 -0
  233. package/dist/vehicle.mjs +847 -0
  234. package/dist/vehiclesigned.cjs +35 -0
  235. package/dist/vehiclesigned.d.cts +23 -0
  236. package/dist/vehiclesigned.d.mts +22 -0
  237. package/dist/vehiclesigned.mjs +35 -0
  238. package/dist/vehiclespecific.cjs +715 -0
  239. package/dist/vehiclespecific.d.cts +497 -0
  240. package/dist/vehiclespecific.d.mts +496 -0
  241. package/dist/vehiclespecific.mjs +715 -0
  242. package/package.json +178 -38
  243. package/dist/charging.d.ts +0 -30
  244. package/dist/charging.js +0 -51
  245. package/dist/charging.js.map +0 -1
  246. package/dist/commands.d.ts +0 -352
  247. package/dist/commands.js +0 -875
  248. package/dist/commands.js.map +0 -1
  249. package/dist/energy.d.ts +0 -94
  250. package/dist/energy.js +0 -125
  251. package/dist/energy.js.map +0 -1
  252. package/dist/energyspecific.d.ts +0 -77
  253. package/dist/energyspecific.js +0 -97
  254. package/dist/energyspecific.js.map +0 -1
  255. package/dist/helpers.d.ts +0 -2
  256. package/dist/helpers.js +0 -10
  257. package/dist/helpers.js.map +0 -1
  258. package/dist/index.d.ts +0 -15
  259. package/dist/index.js +0 -15
  260. package/dist/index.js.map +0 -1
  261. package/dist/partner.d.ts +0 -23
  262. package/dist/partner.js +0 -31
  263. package/dist/partner.js.map +0 -1
  264. package/dist/signing/crypto.d.ts +0 -10
  265. package/dist/signing/crypto.js +0 -26
  266. package/dist/signing/crypto.js.map +0 -1
  267. package/dist/signing/errors.d.ts +0 -29
  268. package/dist/signing/errors.js +0 -40
  269. package/dist/signing/errors.js.map +0 -1
  270. package/dist/signing/session.d.ts +0 -69
  271. package/dist/signing/session.js +0 -102
  272. package/dist/signing/session.js.map +0 -1
  273. package/dist/tariff.d.ts +0 -29
  274. package/dist/tariff.js +0 -302
  275. package/dist/tariff.js.map +0 -1
  276. package/dist/teslafleetapi.d.ts +0 -58
  277. package/dist/teslafleetapi.js +0 -120
  278. package/dist/teslafleetapi.js.map +0 -1
  279. package/dist/teslemetry.d.ts +0 -29
  280. package/dist/teslemetry.js +0 -39
  281. package/dist/teslemetry.js.map +0 -1
  282. package/dist/tessie.d.ts +0 -23
  283. package/dist/tessie.js +0 -28
  284. package/dist/tessie.js.map +0 -1
  285. package/dist/types/commands.d.ts +0 -44
  286. package/dist/types/commands.js +0 -11
  287. package/dist/types/commands.js.map +0 -1
  288. package/dist/types/live_status.d.ts +0 -26
  289. package/dist/types/live_status.js +0 -2
  290. package/dist/types/live_status.js.map +0 -1
  291. package/dist/types/products.d.ts +0 -54
  292. package/dist/types/products.js +0 -2
  293. package/dist/types/products.js.map +0 -1
  294. package/dist/types/responses.d.ts +0 -5
  295. package/dist/types/responses.js +0 -2
  296. package/dist/types/responses.js.map +0 -1
  297. package/dist/types/site_info.d.ts +0 -150
  298. package/dist/types/site_info.js +0 -2
  299. package/dist/types/site_info.js.map +0 -1
  300. package/dist/types/vehicle.d.ts +0 -23
  301. package/dist/types/vehicle.js +0 -10
  302. package/dist/types/vehicle.js.map +0 -1
  303. package/dist/types/vehicle_data.d.ts +0 -274
  304. package/dist/types/vehicle_data.js +0 -2
  305. package/dist/types/vehicle_data.js.map +0 -1
  306. package/dist/user.d.ts +0 -16
  307. package/dist/user.js +0 -26
  308. package/dist/user.js.map +0 -1
  309. package/dist/vehicle.d.ts +0 -548
  310. package/dist/vehicle.js +0 -774
  311. package/dist/vehicle.js.map +0 -1
  312. package/dist/vehiclesigned.d.ts +0 -13
  313. package/dist/vehiclesigned.js +0 -19
  314. package/dist/vehiclesigned.js.map +0 -1
  315. package/dist/vehiclespecific.d.ts +0 -432
  316. package/dist/vehiclespecific.js +0 -601
  317. package/dist/vehiclespecific.js.map +0 -1
  318. package/src/charging.ts +0 -66
  319. package/src/commands.ts +0 -1134
  320. package/src/energy.ts +0 -217
  321. package/src/energyspecific.ts +0 -116
  322. package/src/helpers.ts +0 -11
  323. package/src/index.ts +0 -21
  324. package/src/partner.ts +0 -37
  325. package/src/signing/crypto.ts +0 -29
  326. package/src/signing/errors.ts +0 -50
  327. package/src/signing/session.ts +0 -132
  328. package/src/tariff.ts +0 -375
  329. package/src/teslafleetapi.ts +0 -182
  330. package/src/teslemetry.ts +0 -54
  331. package/src/tessie.ts +0 -42
  332. package/src/types/commands.ts +0 -62
  333. package/src/types/live_status.ts +0 -27
  334. package/src/types/products.ts +0 -61
  335. package/src/types/responses.ts +0 -1
  336. package/src/types/site_info.ts +0 -159
  337. package/src/types/vehicle.ts +0 -33
  338. package/src/types/vehicle_data.ts +0 -286
  339. package/src/user.ts +0 -35
  340. package/src/vehicle.ts +0 -886
  341. package/src/vehiclesigned.ts +0 -20
  342. package/src/vehiclespecific.ts +0 -818
@@ -0,0 +1,93 @@
1
+ let _teslemetry_tesla_protocol_command_vcsec = require("@teslemetry/tesla-protocol/command/vcsec");
2
+ // src/bluetooth/verify.ts
3
+ /**
4
+ * These are float32 on the wire, so a double set by the caller only equals the
5
+ * value the car reports back once it is narrowed the same way: 21.7 would
6
+ * otherwise compare unequal and prove a command that ran did not.
7
+ */
8
+ function sameFloat(sent, reported) {
9
+ return reported === void 0 ? void 0 : Math.fround(sent) === Math.fround(reported);
10
+ }
11
+ function same(sent, reported) {
12
+ return reported === void 0 ? void 0 : sent === reported;
13
+ }
14
+ /**
15
+ * Whether a charge cable is plugged in, from positive evidence only. An absent or
16
+ * `SNA` cable field is not an unplugged cable, so `null` means unknown, and that
17
+ * includes a known cable reported as `Disconnected`. A `null` here must stop a
18
+ * charge-port opening: the two answers have different proofs of success.
19
+ */
20
+ function chargePortConnected(state) {
21
+ const cable = state.connChargeCable;
22
+ const disconnected = state.chargingState?.Disconnected !== void 0;
23
+ if (cable?.IEC ?? cable?.SAE ?? cable?.gbAc ?? cable?.gbDc) return disconnected ? null : true;
24
+ return disconnected ? false : null;
25
+ }
26
+ /**
27
+ * The plan for a VCSEC actuation. Only lock and unlock have one.
28
+ *
29
+ * `UNLOCKED` is the proto3 zero value, so it is never on the wire: a status that
30
+ * says nothing about the lock decodes to it, as a sleep-only broadcast does. It
31
+ * proves nothing either way, which Python's comparison misses. So a status can
32
+ * never confirm an unlock, which needs its ack, and it can only rule one out.
33
+ */
34
+ function vcsecVerifyPlan(command) {
35
+ const { VEHICLELOCKSTATE_INTERNAL_LOCKED, VEHICLELOCKSTATE_LOCKED, VEHICLELOCKSTATE_UNLOCKED } = _teslemetry_tesla_protocol_command_vcsec.VehicleLockStateE;
36
+ if (command.RKEAction === _teslemetry_tesla_protocol_command_vcsec.RKEActionE.RKE_ACTION_LOCK) return {
37
+ reader: "vehicle_state",
38
+ executed: ({ vehicleLockState: state }) => state === VEHICLELOCKSTATE_UNLOCKED ? void 0 : state === VEHICLELOCKSTATE_LOCKED
39
+ };
40
+ if (command.RKEAction === _teslemetry_tesla_protocol_command_vcsec.RKEActionE.RKE_ACTION_UNLOCK) return {
41
+ reader: "vehicle_state",
42
+ executed: ({ vehicleLockState: state }) => state === VEHICLELOCKSTATE_LOCKED || state === VEHICLELOCKSTATE_INTERNAL_LOCKED ? false : void 0
43
+ };
44
+ return null;
45
+ }
46
+ /**
47
+ * The plan for an infotainment command. Only clearly derivable absolute
48
+ * commands have one. Never add a toggle, a relative step or an ack-only action:
49
+ * nothing about their outcome can be read back.
50
+ */
51
+ function infotainmentVerifyPlan(action) {
52
+ if (action?.chargingSetLimitAction) {
53
+ const { percent } = action.chargingSetLimitAction;
54
+ return {
55
+ reader: "charge_state",
56
+ executed: (state) => same(percent, state.chargeLimitSoc)
57
+ };
58
+ }
59
+ if (action?.setChargingAmpsAction) {
60
+ const { chargingAmps } = action.setChargingAmpsAction;
61
+ return {
62
+ reader: "charge_state",
63
+ executed: (state) => same(chargingAmps, state.chargingAmps)
64
+ };
65
+ }
66
+ const target = action?.mediaUpdateVolume?.volumeAbsoluteFloat;
67
+ if (target !== void 0) return {
68
+ reader: "media_state",
69
+ executed: (state) => sameFloat(target, state.audioVolume)
70
+ };
71
+ if (action?.hvacTemperatureAdjustmentAction) {
72
+ const { driverTempCelsius, passengerTempCelsius } = action.hvacTemperatureAdjustmentAction;
73
+ return {
74
+ reader: "climate_state",
75
+ executed: (state) => {
76
+ const driver = sameFloat(driverTempCelsius, state.driverTempSetting);
77
+ const passenger = sameFloat(passengerTempCelsius, state.passengerTempSetting);
78
+ return driver === void 0 || passenger === void 0 ? void 0 : driver && passenger;
79
+ }
80
+ };
81
+ }
82
+ if (action?.hvacAutoAction) {
83
+ const { powerOn } = action.hvacAutoAction;
84
+ return {
85
+ reader: "climate_state",
86
+ executed: (state) => same(powerOn, state.isClimateOn)
87
+ };
88
+ }
89
+ return null;
90
+ }
91
+ exports.chargePortConnected = chargePortConnected;
92
+ exports.infotainmentVerifyPlan = infotainmentVerifyPlan;
93
+ exports.vcsecVerifyPlan = vcsecVerifyPlan;
@@ -0,0 +1,35 @@
1
+ import { UnsignedMessage, VehicleStatus } from "@teslemetry/tesla-protocol/command/vcsec";
2
+ import { VehicleAction } from "@teslemetry/tesla-protocol/command/car_server";
3
+ import { ChargeState, ClimateState, MediaState } from "@teslemetry/tesla-protocol/command/vehicle";
4
+ /**
5
+ * How hard a mutating command tries to confirm itself before returning.
6
+ *
7
+ * - `"optimistic"`: success once the write completes.
8
+ * - `"ack"`: wait for the addressed ack. Lock and unlock also race a matching
9
+ * status broadcast, because the car keeps broadcasting when an ack is lost.
10
+ * - `"verify"`: as `"ack"`, then read state back after a timeout.
11
+ */
12
+ export type BluetoothConfirmation = "optimistic" | "ack" | "verify";
13
+ /**
14
+ * Whether state shows a command ran. `undefined` means the reply left the field
15
+ * out: that proves nothing, so it is treated as a read that could not complete,
16
+ * and never as proof the command did not run.
17
+ */
18
+ type Executed<State> = (state: State) => boolean | undefined;
19
+ /** A lock or unlock's check, which a status broadcast can also answer. */
20
+ export interface VcsecVerifyPlan {
21
+ reader: "vehicle_state";
22
+ executed: Executed<VehicleStatus>;
23
+ }
24
+ /** Which reader proves a timed-out command, and how. */
25
+ export type VerifyPlan = VcsecVerifyPlan | {
26
+ reader: "charge_state";
27
+ executed: Executed<ChargeState>;
28
+ } | {
29
+ reader: "media_state";
30
+ executed: Executed<MediaState>;
31
+ } | {
32
+ reader: "climate_state";
33
+ executed: Executed<ClimateState>;
34
+ };
35
+ export {};
@@ -0,0 +1,35 @@
1
+ import { UnsignedMessage, VehicleStatus } from "@teslemetry/tesla-protocol/command/vcsec";
2
+ import { VehicleAction } from "@teslemetry/tesla-protocol/command/car_server";
3
+ import { ChargeState, ClimateState, MediaState } from "@teslemetry/tesla-protocol/command/vehicle";
4
+ /**
5
+ * How hard a mutating command tries to confirm itself before returning.
6
+ *
7
+ * - `"optimistic"`: success once the write completes.
8
+ * - `"ack"`: wait for the addressed ack. Lock and unlock also race a matching
9
+ * status broadcast, because the car keeps broadcasting when an ack is lost.
10
+ * - `"verify"`: as `"ack"`, then read state back after a timeout.
11
+ */
12
+ export type BluetoothConfirmation = "optimistic" | "ack" | "verify";
13
+ /**
14
+ * Whether state shows a command ran. `undefined` means the reply left the field
15
+ * out: that proves nothing, so it is treated as a read that could not complete,
16
+ * and never as proof the command did not run.
17
+ */
18
+ type Executed<State> = (state: State) => boolean | undefined;
19
+ /** A lock or unlock's check, which a status broadcast can also answer. */
20
+ export interface VcsecVerifyPlan {
21
+ reader: "vehicle_state";
22
+ executed: Executed<VehicleStatus>;
23
+ }
24
+ /** Which reader proves a timed-out command, and how. */
25
+ export type VerifyPlan = VcsecVerifyPlan | {
26
+ reader: "charge_state";
27
+ executed: Executed<ChargeState>;
28
+ } | {
29
+ reader: "media_state";
30
+ executed: Executed<MediaState>;
31
+ } | {
32
+ reader: "climate_state";
33
+ executed: Executed<ClimateState>;
34
+ };
35
+ export {};
@@ -0,0 +1,91 @@
1
+ import { RKEActionE, VehicleLockStateE } from "@teslemetry/tesla-protocol/command/vcsec";
2
+ // src/bluetooth/verify.ts
3
+ /**
4
+ * These are float32 on the wire, so a double set by the caller only equals the
5
+ * value the car reports back once it is narrowed the same way: 21.7 would
6
+ * otherwise compare unequal and prove a command that ran did not.
7
+ */
8
+ function sameFloat(sent, reported) {
9
+ return reported === void 0 ? void 0 : Math.fround(sent) === Math.fround(reported);
10
+ }
11
+ function same(sent, reported) {
12
+ return reported === void 0 ? void 0 : sent === reported;
13
+ }
14
+ /**
15
+ * Whether a charge cable is plugged in, from positive evidence only. An absent or
16
+ * `SNA` cable field is not an unplugged cable, so `null` means unknown, and that
17
+ * includes a known cable reported as `Disconnected`. A `null` here must stop a
18
+ * charge-port opening: the two answers have different proofs of success.
19
+ */
20
+ function chargePortConnected(state) {
21
+ const cable = state.connChargeCable;
22
+ const disconnected = state.chargingState?.Disconnected !== void 0;
23
+ if (cable?.IEC ?? cable?.SAE ?? cable?.gbAc ?? cable?.gbDc) return disconnected ? null : true;
24
+ return disconnected ? false : null;
25
+ }
26
+ /**
27
+ * The plan for a VCSEC actuation. Only lock and unlock have one.
28
+ *
29
+ * `UNLOCKED` is the proto3 zero value, so it is never on the wire: a status that
30
+ * says nothing about the lock decodes to it, as a sleep-only broadcast does. It
31
+ * proves nothing either way, which Python's comparison misses. So a status can
32
+ * never confirm an unlock, which needs its ack, and it can only rule one out.
33
+ */
34
+ function vcsecVerifyPlan(command) {
35
+ const { VEHICLELOCKSTATE_INTERNAL_LOCKED, VEHICLELOCKSTATE_LOCKED, VEHICLELOCKSTATE_UNLOCKED } = VehicleLockStateE;
36
+ if (command.RKEAction === RKEActionE.RKE_ACTION_LOCK) return {
37
+ reader: "vehicle_state",
38
+ executed: ({ vehicleLockState: state }) => state === VEHICLELOCKSTATE_UNLOCKED ? void 0 : state === VEHICLELOCKSTATE_LOCKED
39
+ };
40
+ if (command.RKEAction === RKEActionE.RKE_ACTION_UNLOCK) return {
41
+ reader: "vehicle_state",
42
+ executed: ({ vehicleLockState: state }) => state === VEHICLELOCKSTATE_LOCKED || state === VEHICLELOCKSTATE_INTERNAL_LOCKED ? false : void 0
43
+ };
44
+ return null;
45
+ }
46
+ /**
47
+ * The plan for an infotainment command. Only clearly derivable absolute
48
+ * commands have one. Never add a toggle, a relative step or an ack-only action:
49
+ * nothing about their outcome can be read back.
50
+ */
51
+ function infotainmentVerifyPlan(action) {
52
+ if (action?.chargingSetLimitAction) {
53
+ const { percent } = action.chargingSetLimitAction;
54
+ return {
55
+ reader: "charge_state",
56
+ executed: (state) => same(percent, state.chargeLimitSoc)
57
+ };
58
+ }
59
+ if (action?.setChargingAmpsAction) {
60
+ const { chargingAmps } = action.setChargingAmpsAction;
61
+ return {
62
+ reader: "charge_state",
63
+ executed: (state) => same(chargingAmps, state.chargingAmps)
64
+ };
65
+ }
66
+ const target = action?.mediaUpdateVolume?.volumeAbsoluteFloat;
67
+ if (target !== void 0) return {
68
+ reader: "media_state",
69
+ executed: (state) => sameFloat(target, state.audioVolume)
70
+ };
71
+ if (action?.hvacTemperatureAdjustmentAction) {
72
+ const { driverTempCelsius, passengerTempCelsius } = action.hvacTemperatureAdjustmentAction;
73
+ return {
74
+ reader: "climate_state",
75
+ executed: (state) => {
76
+ const driver = sameFloat(driverTempCelsius, state.driverTempSetting);
77
+ const passenger = sameFloat(passengerTempCelsius, state.passengerTempSetting);
78
+ return driver === void 0 || passenger === void 0 ? void 0 : driver && passenger;
79
+ }
80
+ };
81
+ }
82
+ if (action?.hvacAutoAction) {
83
+ const { powerOn } = action.hvacAutoAction;
84
+ return {
85
+ reader: "climate_state",
86
+ executed: (state) => same(powerOn, state.isClimateOn)
87
+ };
88
+ }
89
+ return null;
90
+ }
91
+ export { chargePortConnected, infotainmentVerifyPlan, vcsecVerifyPlan };
@@ -0,0 +1,53 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_broadcast = require("./bluetooth/broadcast.cjs");
3
+ const require_constants = require("./bluetooth/constants.cjs");
4
+ const require_framing = require("./bluetooth/framing.cjs");
5
+ const require_names = require("./bluetooth/names.cjs");
6
+ const require_teslabluetooth = require("./bluetooth/teslabluetooth.cjs");
7
+ const require_streamglue = require("./bluetooth/streamglue.cjs");
8
+ const require_transport = require("./bluetooth/transport.cjs");
9
+ const require_vehiclebluetooth = require("./bluetooth/vehiclebluetooth.cjs");
10
+ exports.APPEARANCE_UUID = require_constants.APPEARANCE_UUID;
11
+ exports.BleBroadcastPublisher = require_streamglue.BleBroadcastPublisher;
12
+ exports.BleBroadcastStreamGlue = require_streamglue.BleBroadcastStreamGlue;
13
+ exports.BleNotSubmittedError = require_transport.BleNotSubmittedError;
14
+ exports.BroadcastListeners = require_broadcast.BroadcastListeners;
15
+ exports.CCCD_UUID = require_constants.CCCD_UUID;
16
+ exports.CHARGE_PORT_VERIFY_INTERVAL_MS = require_constants.CHARGE_PORT_VERIFY_INTERVAL_MS;
17
+ exports.CHARGE_PORT_VERIFY_TIMEOUT_MS = require_constants.CHARGE_PORT_VERIFY_TIMEOUT_MS;
18
+ exports.DEFAULT_CONNECT_ATTEMPTS = require_constants.DEFAULT_CONNECT_ATTEMPTS;
19
+ exports.DEFAULT_CONNECT_TIMEOUT_MS = require_constants.DEFAULT_CONNECT_TIMEOUT_MS;
20
+ exports.DEFAULT_KEEPALIVE_INTERVAL_MS = require_constants.DEFAULT_KEEPALIVE_INTERVAL_MS;
21
+ exports.DEFAULT_MAX_WRITE_SIZE = require_constants.DEFAULT_MAX_WRITE_SIZE;
22
+ exports.DEFAULT_PAIR_POLL_INTERVAL_MS = require_constants.DEFAULT_PAIR_POLL_INTERVAL_MS;
23
+ exports.DEFAULT_PAIR_TIMEOUT_MS = require_constants.DEFAULT_PAIR_TIMEOUT_MS;
24
+ exports.DEFAULT_SCAN_TIMEOUT_MS = require_constants.DEFAULT_SCAN_TIMEOUT_MS;
25
+ exports.DEFAULT_WAKE_PROBE_TIMEOUT_MS = require_constants.DEFAULT_WAKE_PROBE_TIMEOUT_MS;
26
+ exports.DEFAULT_WAKE_TIMEOUT_MS = require_constants.DEFAULT_WAKE_TIMEOUT_MS;
27
+ exports.GATT_READ_TIMEOUT_MS = require_constants.GATT_READ_TIMEOUT_MS;
28
+ exports.GATT_WRITE_TIMEOUT_MS = require_constants.GATT_WRITE_TIMEOUT_MS;
29
+ exports.GEAR_STATES = require_streamglue.GEAR_STATES;
30
+ exports.GENERIC_ACCESS_UUID = require_constants.GENERIC_ACCESS_UUID;
31
+ exports.INFOTAINMENT_BOOT_TIMEOUT_MS = require_constants.INFOTAINMENT_BOOT_TIMEOUT_MS;
32
+ exports.LINK_TEARDOWN_TIMEOUT_MS = require_constants.LINK_TEARDOWN_TIMEOUT_MS;
33
+ exports.MAX_FRAME_SIZE = require_constants.MAX_FRAME_SIZE;
34
+ exports.NAME_UUID = require_constants.NAME_UUID;
35
+ exports.READ_UUID = require_constants.READ_UUID;
36
+ exports.ReassemblingBuffer = require_framing.ReassemblingBuffer;
37
+ exports.SERVICE_UUID = require_constants.SERVICE_UUID;
38
+ exports.STALE_CHUNK_TIMEOUT_MS = require_constants.STALE_CHUNK_TIMEOUT_MS;
39
+ exports.TONNEAU_POSITION_STATES = require_streamglue.TONNEAU_POSITION_STATES;
40
+ exports.TeslaBluetooth = require_teslabluetooth.default;
41
+ exports.VEHICLE_NOTIFY_UUID = require_constants.VEHICLE_NOTIFY_UUID;
42
+ exports.VEHICLE_WRITE_UUID = require_constants.VEHICLE_WRITE_UUID;
43
+ exports.VERSION_UUID = require_constants.VERSION_UUID;
44
+ exports.VehicleBluetooth = require_vehiclebluetooth.default;
45
+ exports.VehiclesBluetooth = require_teslabluetooth.VehiclesBluetooth;
46
+ exports.WAKE_RESEND_INTERVAL_MS = require_constants.WAKE_RESEND_INTERVAL_MS;
47
+ exports.WRITE_UUID = require_constants.WRITE_UUID;
48
+ exports.get_name = require_names.get_name;
49
+ exports.name_matches_vin = require_names.name_matches_vin;
50
+ exports.parseFrame = require_framing.parseFrame;
51
+ exports.prependLength = require_framing.prependLength;
52
+ exports.splitFrame = require_framing.splitFrame;
53
+ exports.valid_name = require_names.valid_name;
@@ -0,0 +1,10 @@
1
+ import { BroadcastListeners, Unsubscribe } from "./bluetooth/broadcast.cjs";
2
+ import { APPEARANCE_UUID, CCCD_UUID, CHARGE_PORT_VERIFY_INTERVAL_MS, CHARGE_PORT_VERIFY_TIMEOUT_MS, DEFAULT_CONNECT_ATTEMPTS, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_KEEPALIVE_INTERVAL_MS, DEFAULT_MAX_WRITE_SIZE, DEFAULT_PAIR_POLL_INTERVAL_MS, DEFAULT_PAIR_TIMEOUT_MS, DEFAULT_SCAN_TIMEOUT_MS, DEFAULT_WAKE_PROBE_TIMEOUT_MS, DEFAULT_WAKE_TIMEOUT_MS, GATT_READ_TIMEOUT_MS, GATT_WRITE_TIMEOUT_MS, GENERIC_ACCESS_UUID, INFOTAINMENT_BOOT_TIMEOUT_MS, LINK_TEARDOWN_TIMEOUT_MS, MAX_FRAME_SIZE, NAME_UUID, READ_UUID, SERVICE_UUID, STALE_CHUNK_TIMEOUT_MS, VEHICLE_NOTIFY_UUID, VEHICLE_WRITE_UUID, VERSION_UUID, WAKE_RESEND_INTERVAL_MS, WRITE_UUID } from "./bluetooth/constants.cjs";
3
+ import { ReassemblingBuffer, parseFrame, prependLength, splitFrame } from "./bluetooth/framing.cjs";
4
+ import { get_name, name_matches_vin, valid_name } from "./bluetooth/names.cjs";
5
+ import TeslaBluetooth, { VehiclesBluetooth } from "./bluetooth/teslabluetooth.cjs";
6
+ import { BleBroadcastPublisher, BleBroadcastStreamGlue, GEAR_STATES, StreamSink, TONNEAU_POSITION_STATES } from "./bluetooth/streamglue.cjs";
7
+ import { BleCharacteristic, BleConnection, BleDeviceRef, BleLinkHandlers, BleNotSubmittedError, BleScanOptions, BleTransport } from "./bluetooth/transport.cjs";
8
+ import { BluetoothConfirmation, VerifyPlan } from "./bluetooth/verify.cjs";
9
+ import VehicleBluetooth, { FindVehicleOptions, PairOptions, VehicleBluetoothOptions } from "./bluetooth/vehiclebluetooth.cjs";
10
+ export { APPEARANCE_UUID, BleBroadcastPublisher, BleBroadcastStreamGlue, type BleCharacteristic, type BleConnection, type BleDeviceRef, type BleLinkHandlers, BleNotSubmittedError, type BleScanOptions, type BleTransport, type BluetoothConfirmation, BroadcastListeners, CCCD_UUID, CHARGE_PORT_VERIFY_INTERVAL_MS, CHARGE_PORT_VERIFY_TIMEOUT_MS, DEFAULT_CONNECT_ATTEMPTS, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_KEEPALIVE_INTERVAL_MS, DEFAULT_MAX_WRITE_SIZE, DEFAULT_PAIR_POLL_INTERVAL_MS, DEFAULT_PAIR_TIMEOUT_MS, DEFAULT_SCAN_TIMEOUT_MS, DEFAULT_WAKE_PROBE_TIMEOUT_MS, DEFAULT_WAKE_TIMEOUT_MS, type FindVehicleOptions, GATT_READ_TIMEOUT_MS, GATT_WRITE_TIMEOUT_MS, GEAR_STATES, GENERIC_ACCESS_UUID, INFOTAINMENT_BOOT_TIMEOUT_MS, LINK_TEARDOWN_TIMEOUT_MS, MAX_FRAME_SIZE, NAME_UUID, type PairOptions, READ_UUID, ReassemblingBuffer, SERVICE_UUID, STALE_CHUNK_TIMEOUT_MS, type StreamSink, TONNEAU_POSITION_STATES, TeslaBluetooth, type Unsubscribe, VEHICLE_NOTIFY_UUID, VEHICLE_WRITE_UUID, VERSION_UUID, VehicleBluetooth, type VehicleBluetoothOptions, VehiclesBluetooth, type VerifyPlan, WAKE_RESEND_INTERVAL_MS, WRITE_UUID, get_name, name_matches_vin, parseFrame, prependLength, splitFrame, valid_name };
@@ -0,0 +1,10 @@
1
+ import { BroadcastListeners, Unsubscribe } from "./bluetooth/broadcast.mjs";
2
+ import { APPEARANCE_UUID, CCCD_UUID, CHARGE_PORT_VERIFY_INTERVAL_MS, CHARGE_PORT_VERIFY_TIMEOUT_MS, DEFAULT_CONNECT_ATTEMPTS, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_KEEPALIVE_INTERVAL_MS, DEFAULT_MAX_WRITE_SIZE, DEFAULT_PAIR_POLL_INTERVAL_MS, DEFAULT_PAIR_TIMEOUT_MS, DEFAULT_SCAN_TIMEOUT_MS, DEFAULT_WAKE_PROBE_TIMEOUT_MS, DEFAULT_WAKE_TIMEOUT_MS, GATT_READ_TIMEOUT_MS, GATT_WRITE_TIMEOUT_MS, GENERIC_ACCESS_UUID, INFOTAINMENT_BOOT_TIMEOUT_MS, LINK_TEARDOWN_TIMEOUT_MS, MAX_FRAME_SIZE, NAME_UUID, READ_UUID, SERVICE_UUID, STALE_CHUNK_TIMEOUT_MS, VEHICLE_NOTIFY_UUID, VEHICLE_WRITE_UUID, VERSION_UUID, WAKE_RESEND_INTERVAL_MS, WRITE_UUID } from "./bluetooth/constants.mjs";
3
+ import { ReassemblingBuffer, parseFrame, prependLength, splitFrame } from "./bluetooth/framing.mjs";
4
+ import { get_name, name_matches_vin, valid_name } from "./bluetooth/names.mjs";
5
+ import TeslaBluetooth, { VehiclesBluetooth } from "./bluetooth/teslabluetooth.mjs";
6
+ import { BleBroadcastPublisher, BleBroadcastStreamGlue, GEAR_STATES, StreamSink, TONNEAU_POSITION_STATES } from "./bluetooth/streamglue.mjs";
7
+ import { BleCharacteristic, BleConnection, BleDeviceRef, BleLinkHandlers, BleNotSubmittedError, BleScanOptions, BleTransport } from "./bluetooth/transport.mjs";
8
+ import { BluetoothConfirmation, VerifyPlan } from "./bluetooth/verify.mjs";
9
+ import VehicleBluetooth, { FindVehicleOptions, PairOptions, VehicleBluetoothOptions } from "./bluetooth/vehiclebluetooth.mjs";
10
+ export { APPEARANCE_UUID, BleBroadcastPublisher, BleBroadcastStreamGlue, type BleCharacteristic, type BleConnection, type BleDeviceRef, type BleLinkHandlers, BleNotSubmittedError, type BleScanOptions, type BleTransport, type BluetoothConfirmation, BroadcastListeners, CCCD_UUID, CHARGE_PORT_VERIFY_INTERVAL_MS, CHARGE_PORT_VERIFY_TIMEOUT_MS, DEFAULT_CONNECT_ATTEMPTS, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_KEEPALIVE_INTERVAL_MS, DEFAULT_MAX_WRITE_SIZE, DEFAULT_PAIR_POLL_INTERVAL_MS, DEFAULT_PAIR_TIMEOUT_MS, DEFAULT_SCAN_TIMEOUT_MS, DEFAULT_WAKE_PROBE_TIMEOUT_MS, DEFAULT_WAKE_TIMEOUT_MS, type FindVehicleOptions, GATT_READ_TIMEOUT_MS, GATT_WRITE_TIMEOUT_MS, GEAR_STATES, GENERIC_ACCESS_UUID, INFOTAINMENT_BOOT_TIMEOUT_MS, LINK_TEARDOWN_TIMEOUT_MS, MAX_FRAME_SIZE, NAME_UUID, type PairOptions, READ_UUID, ReassemblingBuffer, SERVICE_UUID, STALE_CHUNK_TIMEOUT_MS, type StreamSink, TONNEAU_POSITION_STATES, TeslaBluetooth, type Unsubscribe, VEHICLE_NOTIFY_UUID, VEHICLE_WRITE_UUID, VERSION_UUID, VehicleBluetooth, type VehicleBluetoothOptions, VehiclesBluetooth, type VerifyPlan, WAKE_RESEND_INTERVAL_MS, WRITE_UUID, get_name, name_matches_vin, parseFrame, prependLength, splitFrame, valid_name };
@@ -0,0 +1,9 @@
1
+ import { BroadcastListeners } from "./bluetooth/broadcast.mjs";
2
+ import { APPEARANCE_UUID, CCCD_UUID, CHARGE_PORT_VERIFY_INTERVAL_MS, CHARGE_PORT_VERIFY_TIMEOUT_MS, DEFAULT_CONNECT_ATTEMPTS, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_KEEPALIVE_INTERVAL_MS, DEFAULT_MAX_WRITE_SIZE, DEFAULT_PAIR_POLL_INTERVAL_MS, DEFAULT_PAIR_TIMEOUT_MS, DEFAULT_SCAN_TIMEOUT_MS, DEFAULT_WAKE_PROBE_TIMEOUT_MS, DEFAULT_WAKE_TIMEOUT_MS, GATT_READ_TIMEOUT_MS, GATT_WRITE_TIMEOUT_MS, GENERIC_ACCESS_UUID, INFOTAINMENT_BOOT_TIMEOUT_MS, LINK_TEARDOWN_TIMEOUT_MS, MAX_FRAME_SIZE, NAME_UUID, READ_UUID, SERVICE_UUID, STALE_CHUNK_TIMEOUT_MS, VEHICLE_NOTIFY_UUID, VEHICLE_WRITE_UUID, VERSION_UUID, WAKE_RESEND_INTERVAL_MS, WRITE_UUID } from "./bluetooth/constants.mjs";
3
+ import { ReassemblingBuffer, parseFrame, prependLength, splitFrame } from "./bluetooth/framing.mjs";
4
+ import { get_name, name_matches_vin, valid_name } from "./bluetooth/names.mjs";
5
+ import TeslaBluetooth, { VehiclesBluetooth } from "./bluetooth/teslabluetooth.mjs";
6
+ import { BleBroadcastPublisher, BleBroadcastStreamGlue, GEAR_STATES, TONNEAU_POSITION_STATES } from "./bluetooth/streamglue.mjs";
7
+ import { BleNotSubmittedError } from "./bluetooth/transport.mjs";
8
+ import VehicleBluetooth from "./bluetooth/vehiclebluetooth.mjs";
9
+ export { APPEARANCE_UUID, BleBroadcastPublisher, BleBroadcastStreamGlue, BleNotSubmittedError, BroadcastListeners, CCCD_UUID, CHARGE_PORT_VERIFY_INTERVAL_MS, CHARGE_PORT_VERIFY_TIMEOUT_MS, DEFAULT_CONNECT_ATTEMPTS, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_KEEPALIVE_INTERVAL_MS, DEFAULT_MAX_WRITE_SIZE, DEFAULT_PAIR_POLL_INTERVAL_MS, DEFAULT_PAIR_TIMEOUT_MS, DEFAULT_SCAN_TIMEOUT_MS, DEFAULT_WAKE_PROBE_TIMEOUT_MS, DEFAULT_WAKE_TIMEOUT_MS, GATT_READ_TIMEOUT_MS, GATT_WRITE_TIMEOUT_MS, GEAR_STATES, GENERIC_ACCESS_UUID, INFOTAINMENT_BOOT_TIMEOUT_MS, LINK_TEARDOWN_TIMEOUT_MS, MAX_FRAME_SIZE, NAME_UUID, READ_UUID, ReassemblingBuffer, SERVICE_UUID, STALE_CHUNK_TIMEOUT_MS, TONNEAU_POSITION_STATES, TeslaBluetooth, VEHICLE_NOTIFY_UUID, VEHICLE_WRITE_UUID, VERSION_UUID, VehicleBluetooth, VehiclesBluetooth, WAKE_RESEND_INTERVAL_MS, WRITE_UUID, get_name, name_matches_vin, parseFrame, prependLength, splitFrame, valid_name };
@@ -0,0 +1,53 @@
1
+ // src/charging.ts
2
+ var Charging = class {
3
+ parent;
4
+ constructor(parent) {
5
+ this.parent = parent;
6
+ }
7
+ /**
8
+ * Returns the paginated charging history.
9
+ * @param vin Vehicle Identification Number (VIN) of the selected vehicle.
10
+ * @param startTime Start time of the windows to download charging history for (i,e "2023-07-27T11:43:45-07:00").
11
+ * @param endTime End time of the windows to download charging history for (i,e "2023-07-28T11:43:45-07:00").
12
+ * @param pageNo Current page number.
13
+ * @param pageSize Number of records per page.
14
+ * @param sortBy Field to sort by.
15
+ * @param sortOrder Sort order (ASC or DESC).
16
+ */
17
+ async history(vin, startTime, endTime, pageNo, pageSize, sortBy, sortOrder) {
18
+ return await this.parent._request("GET", "api/1/dx/charging/history", {
19
+ vin,
20
+ startTime,
21
+ endTime,
22
+ pageNo,
23
+ pageSize,
24
+ sortBy,
25
+ sortOrder
26
+ });
27
+ }
28
+ /**
29
+ * Returns a charging invoice pdf for an event from charging history.
30
+ * @param id Content ID. This can be obtained from the invoices.contentId of a charging history event.
31
+ */
32
+ async invoice(id) {
33
+ return await this.parent._request("GET", `api/1/dx/charging/invoices/${id}`);
34
+ }
35
+ /**
36
+ * Returns the charging session information including pricing and energy data. This endpoint is only available for business accounts that own a fleet of vehicles.
37
+ * @param vin Vehicle Identification Number (VIN) of the selected vehicle.
38
+ * @param date_from Start date of the windows to download charging sessions.
39
+ * @param date_to End date of the windows to download charging sessions.
40
+ * @param limit Number of entities to be returned.
41
+ * @param offset Number of entities to be skipped.
42
+ */
43
+ async sessions(vin, date_from, date_to, limit, offset) {
44
+ return await this.parent._request("GET", "api/1/dx/charging/sessions", {
45
+ vin,
46
+ date_from,
47
+ date_to,
48
+ limit,
49
+ offset
50
+ });
51
+ }
52
+ };
53
+ exports.default = Charging;
@@ -0,0 +1,31 @@
1
+ import TeslaFleetApi from "./teslafleetapi.cjs";
2
+ declare class Charging {
3
+ parent: TeslaFleetApi;
4
+ constructor(parent: TeslaFleetApi);
5
+ /**
6
+ * Returns the paginated charging history.
7
+ * @param vin Vehicle Identification Number (VIN) of the selected vehicle.
8
+ * @param startTime Start time of the windows to download charging history for (i,e "2023-07-27T11:43:45-07:00").
9
+ * @param endTime End time of the windows to download charging history for (i,e "2023-07-28T11:43:45-07:00").
10
+ * @param pageNo Current page number.
11
+ * @param pageSize Number of records per page.
12
+ * @param sortBy Field to sort by.
13
+ * @param sortOrder Sort order (ASC or DESC).
14
+ */
15
+ history(vin?: string, startTime?: string, endTime?: string, pageNo?: number, pageSize?: number, sortBy?: string, sortOrder?: string): Promise<Record<string, any>>;
16
+ /**
17
+ * Returns a charging invoice pdf for an event from charging history.
18
+ * @param id Content ID. This can be obtained from the invoices.contentId of a charging history event.
19
+ */
20
+ invoice(id: string): Promise<Record<string, any>>;
21
+ /**
22
+ * Returns the charging session information including pricing and energy data. This endpoint is only available for business accounts that own a fleet of vehicles.
23
+ * @param vin Vehicle Identification Number (VIN) of the selected vehicle.
24
+ * @param date_from Start date of the windows to download charging sessions.
25
+ * @param date_to End date of the windows to download charging sessions.
26
+ * @param limit Number of entities to be returned.
27
+ * @param offset Number of entities to be skipped.
28
+ */
29
+ sessions(vin?: string, date_from?: string, date_to?: string, limit?: number, offset?: number): Promise<Record<string, any>>;
30
+ }
31
+ export = Charging;
@@ -0,0 +1,30 @@
1
+ import TeslaFleetApi from "./teslafleetapi.mjs";
2
+ export default class Charging {
3
+ parent: TeslaFleetApi;
4
+ constructor(parent: TeslaFleetApi);
5
+ /**
6
+ * Returns the paginated charging history.
7
+ * @param vin Vehicle Identification Number (VIN) of the selected vehicle.
8
+ * @param startTime Start time of the windows to download charging history for (i,e "2023-07-27T11:43:45-07:00").
9
+ * @param endTime End time of the windows to download charging history for (i,e "2023-07-28T11:43:45-07:00").
10
+ * @param pageNo Current page number.
11
+ * @param pageSize Number of records per page.
12
+ * @param sortBy Field to sort by.
13
+ * @param sortOrder Sort order (ASC or DESC).
14
+ */
15
+ history(vin?: string, startTime?: string, endTime?: string, pageNo?: number, pageSize?: number, sortBy?: string, sortOrder?: string): Promise<Record<string, any>>;
16
+ /**
17
+ * Returns a charging invoice pdf for an event from charging history.
18
+ * @param id Content ID. This can be obtained from the invoices.contentId of a charging history event.
19
+ */
20
+ invoice(id: string): Promise<Record<string, any>>;
21
+ /**
22
+ * Returns the charging session information including pricing and energy data. This endpoint is only available for business accounts that own a fleet of vehicles.
23
+ * @param vin Vehicle Identification Number (VIN) of the selected vehicle.
24
+ * @param date_from Start date of the windows to download charging sessions.
25
+ * @param date_to End date of the windows to download charging sessions.
26
+ * @param limit Number of entities to be returned.
27
+ * @param offset Number of entities to be skipped.
28
+ */
29
+ sessions(vin?: string, date_from?: string, date_to?: string, limit?: number, offset?: number): Promise<Record<string, any>>;
30
+ }
@@ -0,0 +1,53 @@
1
+ // src/charging.ts
2
+ var Charging = class {
3
+ parent;
4
+ constructor(parent) {
5
+ this.parent = parent;
6
+ }
7
+ /**
8
+ * Returns the paginated charging history.
9
+ * @param vin Vehicle Identification Number (VIN) of the selected vehicle.
10
+ * @param startTime Start time of the windows to download charging history for (i,e "2023-07-27T11:43:45-07:00").
11
+ * @param endTime End time of the windows to download charging history for (i,e "2023-07-28T11:43:45-07:00").
12
+ * @param pageNo Current page number.
13
+ * @param pageSize Number of records per page.
14
+ * @param sortBy Field to sort by.
15
+ * @param sortOrder Sort order (ASC or DESC).
16
+ */
17
+ async history(vin, startTime, endTime, pageNo, pageSize, sortBy, sortOrder) {
18
+ return await this.parent._request("GET", "api/1/dx/charging/history", {
19
+ vin,
20
+ startTime,
21
+ endTime,
22
+ pageNo,
23
+ pageSize,
24
+ sortBy,
25
+ sortOrder
26
+ });
27
+ }
28
+ /**
29
+ * Returns a charging invoice pdf for an event from charging history.
30
+ * @param id Content ID. This can be obtained from the invoices.contentId of a charging history event.
31
+ */
32
+ async invoice(id) {
33
+ return await this.parent._request("GET", `api/1/dx/charging/invoices/${id}`);
34
+ }
35
+ /**
36
+ * Returns the charging session information including pricing and energy data. This endpoint is only available for business accounts that own a fleet of vehicles.
37
+ * @param vin Vehicle Identification Number (VIN) of the selected vehicle.
38
+ * @param date_from Start date of the windows to download charging sessions.
39
+ * @param date_to End date of the windows to download charging sessions.
40
+ * @param limit Number of entities to be returned.
41
+ * @param offset Number of entities to be skipped.
42
+ */
43
+ async sessions(vin, date_from, date_to, limit, offset) {
44
+ return await this.parent._request("GET", "api/1/dx/charging/sessions", {
45
+ vin,
46
+ date_from,
47
+ date_to,
48
+ limit,
49
+ offset
50
+ });
51
+ }
52
+ };
53
+ export { Charging as default };