autopilot-core-sandbox 0.0.1

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 (822) hide show
  1. package/README.md +53 -0
  2. package/dist/Provider.d.ts +21 -0
  3. package/dist/Provider.d.ts.map +1 -0
  4. package/dist/Provider.js +61 -0
  5. package/dist/Provider.js.map +1 -0
  6. package/dist/dist/Provider.d.ts +21 -0
  7. package/dist/dist/Provider.d.ts.map +1 -0
  8. package/dist/dist/Provider.js +61 -0
  9. package/dist/dist/Provider.js.map +1 -0
  10. package/dist/dist/index.d.ts +45 -0
  11. package/dist/dist/index.d.ts.map +1 -0
  12. package/dist/dist/index.js +61 -0
  13. package/dist/dist/index.js.map +1 -0
  14. package/dist/dist/interfaces/index.d.ts +1238 -0
  15. package/dist/dist/interfaces/index.d.ts.map +1 -0
  16. package/dist/dist/interfaces/index.js +3 -0
  17. package/dist/dist/interfaces/index.js.map +1 -0
  18. package/dist/dist/migrations/20260608222757_remote_schema.sql +5666 -0
  19. package/dist/dist/migrations/20260611174826_add_job_item_recurring_id_to_job_item.sql +7 -0
  20. package/dist/dist/migrations/20260625224612_add_dashboard_guided_tour_dismissed_to_settings_user.sql +5 -0
  21. package/dist/dist/migrations/20260627031433_support_chat_tables.sql +115 -0
  22. package/dist/dist/migrations/20260627031434_support_chat_rls.sql +37 -0
  23. package/dist/dist/migrations/20260704170209_add_estimate_scheduling.sql +121 -0
  24. package/dist/dist/migrations/20260704170210_add_estimate_scheduling_rls.sql +42 -0
  25. package/dist/dist/migrations/20260704235034_add_estimate_reminder_settings.sql +11 -0
  26. package/dist/dist/migrations/20260707003825_blocked_number_table.sql +32 -0
  27. package/dist/dist/migrations/20260707003826_blocked_number_rls.sql +22 -0
  28. package/dist/dist/migrations/20260709191055_sms_opt_out_table.sql +38 -0
  29. package/dist/dist/migrations/20260709191056_sms_opt_out_rls.sql +21 -0
  30. package/dist/dist/migrations/20260709214507_job_time_entry_table.sql +70 -0
  31. package/dist/dist/migrations/20260709214508_job_time_entry_rls.sql +21 -0
  32. package/dist/dist/migrations/20260711185956_phone_call_table.sql +99 -0
  33. package/dist/dist/migrations/20260711185957_phone_call_rls.sql +25 -0
  34. package/dist/dist/migrations/20260712014705_ai_voice_assistant_settings.sql +71 -0
  35. package/dist/dist/migrations/20260712014706_ai_voice_assistant_settings_rls.sql +14 -0
  36. package/dist/dist/migrations/20260712014707_ai_prompt_templates.sql +28 -0
  37. package/dist/dist/migrations/20260712014708_ai_prompt_templates_rls.sql +5 -0
  38. package/dist/dist/migrations/20260712014709_ai_prompt_templates_seed.sql +77 -0
  39. package/dist/dist/migrations/20260715011550_reminder_dispatch_table.sql +47 -0
  40. package/dist/dist/migrations/20260715011551_reminder_dispatch_rls.sql +22 -0
  41. package/dist/dist/migrations/20260715192923_dedup_sequence_contact_add_unique_constraint.sql +27 -0
  42. package/dist/dist/migrations/20260716194420_add_employee_location_tracking.sql +146 -0
  43. package/dist/dist/migrations/20260716194421_add_employee_location_tracking_rls.sql +154 -0
  44. package/dist/dist/migrations/20260716194422_get_client_map_last_completed_jobs.sql +28 -0
  45. package/dist/dist/migrations/20260717144535_add_blast_email_invalid_skipped_count.sql +2 -0
  46. package/dist/dist/migrations/20260717162900_create_blast_email_chunk.sql +36 -0
  47. package/dist/dist/migrations/20260717162901_add_blast_email_chunk_rls.sql +5 -0
  48. package/dist/dist/migrations/20260717162902_add_blast_email_chunk_progress_columns.sql +3 -0
  49. package/dist/dist/migrations/20260717162903_add_blast_email_bounce_tracking_columns.sql +4 -0
  50. package/dist/dist/migrations/20260717162904_create_email_hard_bounced.sql +23 -0
  51. package/dist/dist/migrations/20260717162905_add_email_hard_bounced_rls.sql +5 -0
  52. package/dist/dist/migrations/20260717164837_add_sequence_contact_sent_at.sql +19 -0
  53. package/dist/dist/migrations/20260717170920_add_sequence_contact_claim_index.sql +12 -0
  54. package/dist/dist/migrations/20260719215139_create_outbound_event.sql +59 -0
  55. package/dist/dist/migrations/20260719215140_create_outbound_event_rls.sql +16 -0
  56. package/dist/dist/migrations/20260719215141_create_webhook_delivery.sql +99 -0
  57. package/dist/dist/migrations/20260719215142_create_webhook_delivery_rls.sql +11 -0
  58. package/dist/dist/migrations/20260719215143_outbound_event_triggers.sql +219 -0
  59. package/dist/dist/migrations/20260719215144_create_api_key.sql +34 -0
  60. package/dist/dist/migrations/20260719215146_create_api_key_rls.sql +12 -0
  61. package/dist/dist/migrations/20260719215147_webhook_subscription_add_secret_active.sql +28 -0
  62. package/dist/dist/migrations/20260719215148_api_aggregate_create_functions.sql +479 -0
  63. package/dist/dist/migrations/20260721174837_webhook_subscription_generic_endpoints.sql +41 -0
  64. package/dist/dist/migrations/20260721185631_webhook_outbox_retention.sql +87 -0
  65. package/dist/dist/migrations/20260721190304_create_qb_sync_task.sql +120 -0
  66. package/dist/dist/migrations/20260721190306_qb_sync_task_rls.sql +8 -0
  67. package/dist/dist/migrations/20260721190307_qb_mapping_orphan_fks.sql +29 -0
  68. package/dist/dist/migrations/20260721190308_qb_task_retention.sql +90 -0
  69. package/dist/dist/migrations/20260721234401_create_permission_role.sql +83 -0
  70. package/dist/dist/migrations/20260721234402_permission_role_rls.sql +22 -0
  71. package/dist/dist/migrations/20260721234403_user_role_add_permission_role_id.sql +12 -0
  72. package/dist/dist/migrations/20260721234404_seed_permission_roles.sql +100 -0
  73. package/dist/dist/migrations/20260721234405_backfill_user_role_permission_role_id.sql +20 -0
  74. package/dist/dist/migrations/20260722193800_permission_role_add_manage_employees.sql +56 -0
  75. package/dist/dist/migrations/20260723025606_staging_new_employee_company_read_rls.sql +10 -0
  76. package/dist/dist/migrations/20260723134328_create_google_lsa_integration.sql +1016 -0
  77. package/dist/dist/migrations/20260723134329_google_lsa_integration_rls.sql +205 -0
  78. package/dist/dist/migrations/20260723150640_google_lsa_hardening.sql +169 -0
  79. package/dist/dist/migrations/20260723150641_google_lsa_hardening_rls.sql +12 -0
  80. package/dist/dist/migrations/20260724230721_google_lsa_facebook_exclusivity_attach.sql +104 -0
  81. package/dist/dist/migrations/20260724230722_google_lsa_facebook_exclusivity_attach_rls.sql +20 -0
  82. package/dist/dist/migrations/20260725172630_add_message_pagination_and_search.sql +265 -0
  83. package/dist/dist/migrations/20260725172631_add_message_pagination_and_search_rls.sql +72 -0
  84. package/dist/dist/migrations/20260725172632_optimize_message_thread_pagination_search.sql +245 -0
  85. package/dist/dist/migrations/20260725172633_harden_message_search_and_photo_pagination.sql +256 -0
  86. package/dist/dist/migrations/20260725172634_fix_message_thread_line_filter.sql +250 -0
  87. package/dist/dist/migrations/20260725174948_google_lsa_attach_bing_exclusivity_guard.sql +23 -0
  88. package/dist/dist/migrations/20260725200430_client_portal_settings.sql +41 -0
  89. package/dist/dist/migrations/20260725200431_client_portal_settings_rls.sql +21 -0
  90. package/dist/dist/migrations/20260725200433_client_portal_auth_tables.sql +81 -0
  91. package/dist/dist/migrations/20260725200434_client_portal_auth_rls.sql +18 -0
  92. package/dist/dist/migrations/20260725200435_portal_claim_login_attempt.sql +36 -0
  93. package/dist/dist/migrations/20260725200436_portal_appointment_request.sql +39 -0
  94. package/dist/dist/migrations/20260725200437_portal_appointment_request_rls.sql +10 -0
  95. package/dist/dist/migrations/20260725210000_google_reserve_integration.sql +85 -0
  96. package/dist/dist/migrations/20260725210001_google_reserve_integration_rls.sql +10 -0
  97. package/dist/dist/migrations/20260725220000_add_analytics_query_indexes.sql +47 -0
  98. package/dist/dist/migrations/20260725230000_onboarding_preload_data.sql +1074 -0
  99. package/dist/dist/migrations/20260725230001_onboarding_preload_data_rls.sql +40 -0
  100. package/dist/dist/migrations/20260725230002_add_pricebook_query_indexes.sql +13 -0
  101. package/dist/dist/migrations/20260726000000_facebook_ads_integration.sql +1538 -0
  102. package/dist/dist/migrations/20260726000001_facebook_ads_integration_rls.sql +356 -0
  103. package/dist/dist/migrations/20260726000002_facebook_ads_attach_lsa_exclusivity_guard.sql +25 -0
  104. package/dist/dist/migrations/20260726000003_facebook_ads_attach_bing_exclusivity_guard.sql +22 -0
  105. package/dist/dist/migrations/20260726010000_create_bing_ads_integration.sql +1112 -0
  106. package/dist/dist/migrations/20260726010001_bing_ads_integration_rls.sql +227 -0
  107. package/dist/dist/migrations/20260726220000_add_document_theme_settings.sql +11 -0
  108. package/dist/dist/migrations/20260726220001_update_document_theme_comments.sql +7 -0
  109. package/dist/dist/migrations/20260727210319_evolve_tier_for_pricing.sql +68 -0
  110. package/dist/dist/migrations/20260727210320_create_billing_addon.sql +85 -0
  111. package/dist/dist/migrations/20260727210321_create_billing_addon_rls.sql +21 -0
  112. package/dist/dist/migrations/20260728213930_create_usage_metering.sql +189 -0
  113. package/dist/dist/migrations/20260728213931_create_usage_metering_rls.sql +32 -0
  114. package/dist/dist/migrations/20260729004305_marketing_charge_txn_functions.sql +242 -0
  115. package/dist/dist/migrations/20260729004306_marketing_charge_txn_functions_rls.sql +37 -0
  116. package/dist/dist/migrations/20260729005524_update_deduct_from_balance_errcode.sql +42 -0
  117. package/dist/dist/migrations/20260730193601_fix_deduct_from_balance_lost_update.sql +46 -0
  118. package/dist/dist/migrations/20260730193602_add_blast_sms_chunk_reaper_columns.sql +27 -0
  119. package/dist/dist/migrations/20260731011415_create_google_calendar_connection.sql +84 -0
  120. package/dist/dist/migrations/20260731011416_google_calendar_connection_rls.sql +23 -0
  121. package/dist/dist/migrations/20260731011417_create_google_calendar_sync.sql +157 -0
  122. package/dist/dist/migrations/20260731011418_google_calendar_sync_rls.sql +26 -0
  123. package/dist/dist/migrations/20260731011419_event_outbound_triggers.sql +28 -0
  124. package/dist/dist/migrations/20260731011420_add_google_calendar_addon_key.sql +24 -0
  125. package/dist/dist/migrations/20260731011421_gcal_task_retention.sql +109 -0
  126. package/dist/dist/migrations/20260731234245_create_estimate_proposal.sql +157 -0
  127. package/dist/dist/migrations/20260731234247_estimate_proposal_rls.sql +46 -0
  128. package/dist/dist/migrations/20260731234248_add_proposal_estimate_settings.sql +17 -0
  129. package/dist/dist/migrations/20260731234249_add_estimate_proposals_addon_key.sql +25 -0
  130. package/dist/dist/migrations/20260731234250_approve_estimate_proposal_function.sql +133 -0
  131. package/dist/dist/migrations/20260801010609_save_estimate_proposal_function.sql +154 -0
  132. package/dist/dist/migrations/20260801173554_add_hide_autopilot_branding_setting.sql +6 -0
  133. package/dist/dist/migrations/20260806230917_add_client_billing_address_columns.sql +9 -0
  134. package/dist/dist/migrations/20260806230944_api_create_client_billing_address.sql +93 -0
  135. package/dist/dist/migrations/20260807014702_create_parent_id_company_id_keys.sql +20 -0
  136. package/dist/dist/migrations/20260807014703_create_contract_template.sql +30 -0
  137. package/dist/dist/migrations/20260807014704_create_contract.sql +233 -0
  138. package/dist/dist/migrations/20260807014705_create_contract_signature.sql +39 -0
  139. package/dist/dist/migrations/20260807014706_create_item_contract_requirement.sql +38 -0
  140. package/dist/dist/migrations/20260807014707_create_settings_contract.sql +23 -0
  141. package/dist/dist/migrations/20260807014708_contract_rls.sql +74 -0
  142. package/dist/dist/migrations/20260807014709_sign_contract_function.sql +92 -0
  143. package/dist/dist/migrations/20260807014710_create_settings_rental.sql +34 -0
  144. package/dist/dist/migrations/20260807014711_create_saved_location.sql +56 -0
  145. package/dist/dist/migrations/20260807014712_create_rental_task_option.sql +52 -0
  146. package/dist/dist/migrations/20260807014713_create_asset.sql +90 -0
  147. package/dist/dist/migrations/20260807014714_add_job_schedule_asset_fkeys.sql +39 -0
  148. package/dist/dist/migrations/20260807014715_rental_rls.sql +48 -0
  149. package/dist/dist/migrations/20260807014716_add_job_schedule_any_time.sql +7 -0
  150. package/dist/dist/migrations/20260807014717_add_job_schedule_target_location.sql +48 -0
  151. package/dist/dist/migrations/20260807014718_job_schedule_completion_guard.sql +53 -0
  152. package/dist/dist/migrations/20260807014719_add_job_schedule_list_sort_key.sql +7 -0
  153. package/dist/dist/migrations/20260807014720_add_item_duration.sql +11 -0
  154. package/dist/dist/migrations/20260807014721_add_settings_booking_enforce_rental_availability.sql +9 -0
  155. package/dist/dist/migrations/20260807014722_add_job_unsigned_rental_agreement.sql +10 -0
  156. package/dist/dist/migrations/20260807014723_add_item_size.sql +12 -0
  157. package/dist/dist/migrations/20260809193533_add_booking_path_button_labels.sql +11 -0
  158. package/dist/dist/migrations/20260809231721_add_route_distance_cache.sql +37 -0
  159. package/dist/dist/migrations/20260809231722_route_distance_cache_rls.sql +15 -0
  160. package/dist/dist/migrations/20260809231723_apply_rental_route_plan_function.sql +275 -0
  161. package/dist/dist/migrations/20260810171550_add_settings_job_default_job_types.sql +9 -0
  162. package/dist/dist/migrations/20260810212430_backfill_rental_task_option_sort_order.sql +61 -0
  163. package/dist/dist/migrations/20260811224317_add_settings_user_dnd_hint_dismissed.sql +9 -0
  164. package/dist/dist/migrations/20260813174503_repair_user_role_email_drift.sql +59 -0
  165. package/dist/dist/migrations/20260813174504_sync_user_role_email_trigger.sql +30 -0
  166. package/dist/dist/migrations/20260813175210_add_event_list_sort_key.sql +5 -0
  167. package/dist/dist/migrations/20260814172222_add_client_auto_bill_on_completion.sql +6 -0
  168. package/dist/dist/migrations/20260816160252_create_automation_rule.sql +99 -0
  169. package/dist/dist/migrations/20260816160253_automation_rule_rls.sql +19 -0
  170. package/dist/dist/migrations/20260816160254_create_settings_automation.sql +36 -0
  171. package/dist/dist/migrations/20260816160255_settings_automation_rls.sql +18 -0
  172. package/dist/dist/migrations/20260816160256_create_automation_event.sql +71 -0
  173. package/dist/dist/migrations/20260816160257_automation_event_rls.sql +12 -0
  174. package/dist/dist/migrations/20260816160258_create_automation_run.sql +129 -0
  175. package/dist/dist/migrations/20260816160259_automation_run_rls.sql +19 -0
  176. package/dist/dist/migrations/20260816160300_add_client_created_via.sql +25 -0
  177. package/dist/dist/migrations/20260816160301_add_estimate_sent_at.sql +39 -0
  178. package/dist/dist/migrations/20260816160302_add_message_automation_ref.sql +10 -0
  179. package/dist/dist/migrations/20260816160303_automation_event_triggers.sql +236 -0
  180. package/dist/dist/migrations/20260816160304_automation_retention.sql +142 -0
  181. package/dist/dist/migrations/20260816202404_add_automation_center_addon_key.sql +26 -0
  182. package/dist/dist/migrations/20260816225501_widen_automation_rule_trigger_action_checks.sql +25 -0
  183. package/dist/dist/migrations/20260816225502_widen_automation_event_type_check.sql +18 -0
  184. package/dist/dist/migrations/20260816225503_add_invoice_id_to_automation_tables.sql +18 -0
  185. package/dist/dist/migrations/20260816225504_add_job_rescheduled_capture_trigger.sql +51 -0
  186. package/dist/dist/migrations/20260816225505_add_lead_converted_capture_trigger.sql +26 -0
  187. package/dist/dist/migrations/20260816225506_fix_booking_request_import_guard.sql +27 -0
  188. package/dist/dist/migrations/20260816225507_widen_outbound_event_for_automation.sql +38 -0
  189. package/dist/dist/migrations/20260817002626_add_user_last_login_platform_columns.sql +14 -0
  190. package/dist/dist/migrations/20260817221703_create_deletion.sql +34 -0
  191. package/dist/dist/migrations/20260817221707_deletion_rls.sql +21 -0
  192. package/dist/dist/migrations/20260817221708_add_soft_delete_columns.sql +82 -0
  193. package/dist/dist/migrations/20260817221709_trash_functions.sql +434 -0
  194. package/dist/dist/migrations/20260817221710_outbound_event_soft_delete.sql +55 -0
  195. package/dist/dist/migrations/20260817221711_automation_soft_delete_events.sql +77 -0
  196. package/dist/dist/migrations/20260817221712_fix_estimate_address_cascade.sql +14 -0
  197. package/dist/dist/migrations/20260817232630_trash_batch_function.sql +67 -0
  198. package/dist/dist/migrations/20260819170204_create_email_spam_complaint.sql +23 -0
  199. package/dist/dist/migrations/20260819170205_add_email_spam_complaint_rls.sql +5 -0
  200. package/dist/dist/migrations/20260819170206_email_unsubscribed_upsert_constraints.sql +14 -0
  201. package/dist/dist/migrations/20260819180151_get_suppressed_emails_function.sql +23 -0
  202. package/dist/dist/migrations/20260819191143_is_deleted_backfill_guard.sql +29 -0
  203. package/dist/dist/migrations/20260819191144_trash_functions_no_dual_write.sql +319 -0
  204. package/dist/dist/migrations/20260819191145_client_map_jobs_deleted_at.sql +33 -0
  205. package/dist/dist/migrations/20260819191147_booking_declined_deleted_at.sql +28 -0
  206. package/dist/dist/migrations/20260819191148_onboarding_preload_no_address_is_deleted.sql +1019 -0
  207. package/dist/dist/migrations/20260820222756_add_settings_job_hide_task_timer.sql +2 -0
  208. package/dist/dist/migrations/20260824234151_add_blast_chunk_recipients.sql +13 -0
  209. package/dist/dist/migrations/20260824234152_add_blast_pause_cancel_columns.sql +10 -0
  210. package/dist/dist/migrations/20260825014725_get_job_ids_in_range.sql +42 -0
  211. package/dist/dist/migrations/20260825194452_add_failed_job_status.sql +15 -0
  212. package/dist/dist/migrations/20260825194457_remove_take_to_rental_task_options.sql +24 -0
  213. package/dist/dist/migrations/20260825194458_remove_take_to_job_schedules.sql +12 -0
  214. package/dist/dist/migrations/20260825194459_rework_apply_rental_route_plan_no_take_to.sql +168 -0
  215. package/dist/dist/migrations/20260825194500_drop_job_schedule_target_location.sql +24 -0
  216. package/dist/dist/migrations/20260825194501_add_job_schedule_size.sql +17 -0
  217. package/dist/dist/migrations/20260825233001_add_job_schedule_id_company_id_key.sql +11 -0
  218. package/dist/dist/migrations/20260825233002_create_route_plan.sql +52 -0
  219. package/dist/dist/migrations/20260825233003_create_route_plan_stop.sql +159 -0
  220. package/dist/dist/migrations/20260825233004_route_plan_rls.sql +32 -0
  221. package/dist/dist/migrations/20260825233005_apply_rental_route_plan_v2.sql +351 -0
  222. package/dist/dist/migrations/20260826150934_facebook_ads_lead_ingestion.sql +1711 -0
  223. package/dist/dist/migrations/20260826151141_facebook_ads_lead_ingestion_rls_v2.sql +43 -0
  224. package/dist/dist/migrations/20260826234722_facebook_messenger_ingestion.sql +703 -0
  225. package/dist/dist/migrations/20260826234723_facebook_messenger_ingestion_rls.sql +80 -0
  226. package/dist/dist/migrations/20260826234724_widen_automations_messenger.sql +46 -0
  227. package/dist/dist/migrations/20260827100001_add_route_plan_minutes.sql +10 -0
  228. package/dist/dist/migrations/20260827100002_add_route_plan_stop_leg_minutes.sql +9 -0
  229. package/dist/dist/migrations/20260827100003_apply_rental_route_plan_v3.sql +341 -0
  230. package/dist/dist/migrations/20260827230346_apply_rental_route_plan_v4.sql +366 -0
  231. package/dist/dist/migrations/20260829090911_create_fleet_schema.sql +3698 -0
  232. package/dist/dist/migrations/20260829090912_fleet_rls.sql +1011 -0
  233. package/dist/dist/migrations/20260831102212_add_online_booking_address_display.sql +8 -0
  234. package/dist/dist/providers/AddressProvider.d.ts +9 -0
  235. package/dist/dist/providers/AddressProvider.d.ts.map +1 -0
  236. package/dist/dist/providers/AddressProvider.js +207 -0
  237. package/dist/dist/providers/AddressProvider.js.map +1 -0
  238. package/dist/dist/providers/AutomationsProvider.d.ts +11 -0
  239. package/dist/dist/providers/AutomationsProvider.d.ts.map +1 -0
  240. package/dist/dist/providers/AutomationsProvider.js +170 -0
  241. package/dist/dist/providers/AutomationsProvider.js.map +1 -0
  242. package/dist/dist/providers/BlockedNumbersProvider.d.ts +13 -0
  243. package/dist/dist/providers/BlockedNumbersProvider.d.ts.map +1 -0
  244. package/dist/dist/providers/BlockedNumbersProvider.js +71 -0
  245. package/dist/dist/providers/BlockedNumbersProvider.js.map +1 -0
  246. package/dist/dist/providers/CategoryProvider.d.ts +8 -0
  247. package/dist/dist/providers/CategoryProvider.d.ts.map +1 -0
  248. package/dist/dist/providers/CategoryProvider.js +95 -0
  249. package/dist/dist/providers/CategoryProvider.js.map +1 -0
  250. package/dist/dist/providers/ClientProvider.d.ts +39 -0
  251. package/dist/dist/providers/ClientProvider.d.ts.map +1 -0
  252. package/dist/dist/providers/ClientProvider.js +253 -0
  253. package/dist/dist/providers/ClientProvider.js.map +1 -0
  254. package/dist/dist/providers/CompanyProvider.d.ts +7 -0
  255. package/dist/dist/providers/CompanyProvider.d.ts.map +1 -0
  256. package/dist/dist/providers/CompanyProvider.js +114 -0
  257. package/dist/dist/providers/CompanyProvider.js.map +1 -0
  258. package/dist/dist/providers/DashboardProvider.d.ts +78 -0
  259. package/dist/dist/providers/DashboardProvider.d.ts.map +1 -0
  260. package/dist/dist/providers/DashboardProvider.js +568 -0
  261. package/dist/dist/providers/DashboardProvider.js.map +1 -0
  262. package/dist/dist/providers/DiscountProvider.d.ts +8 -0
  263. package/dist/dist/providers/DiscountProvider.d.ts.map +1 -0
  264. package/dist/dist/providers/DiscountProvider.js +92 -0
  265. package/dist/dist/providers/DiscountProvider.js.map +1 -0
  266. package/dist/dist/providers/EmployeesProvider.d.ts +6 -0
  267. package/dist/dist/providers/EmployeesProvider.d.ts.map +1 -0
  268. package/dist/dist/providers/EmployeesProvider.js +185 -0
  269. package/dist/dist/providers/EmployeesProvider.js.map +1 -0
  270. package/dist/dist/providers/EstimatesProvider.d.ts +16 -0
  271. package/dist/dist/providers/EstimatesProvider.d.ts.map +1 -0
  272. package/dist/dist/providers/EstimatesProvider.js +251 -0
  273. package/dist/dist/providers/EstimatesProvider.js.map +1 -0
  274. package/dist/dist/providers/EventsProvider.d.ts +4 -0
  275. package/dist/dist/providers/EventsProvider.d.ts.map +1 -0
  276. package/dist/dist/providers/EventsProvider.js +24 -0
  277. package/dist/dist/providers/EventsProvider.js.map +1 -0
  278. package/dist/dist/providers/FilesProvider.d.ts +17 -0
  279. package/dist/dist/providers/FilesProvider.d.ts.map +1 -0
  280. package/dist/dist/providers/FilesProvider.js +201 -0
  281. package/dist/dist/providers/FilesProvider.js.map +1 -0
  282. package/dist/dist/providers/InvoicesProvider.d.ts +13 -0
  283. package/dist/dist/providers/InvoicesProvider.d.ts.map +1 -0
  284. package/dist/dist/providers/InvoicesProvider.js +207 -0
  285. package/dist/dist/providers/InvoicesProvider.js.map +1 -0
  286. package/dist/dist/providers/ItemProvider.d.ts +9 -0
  287. package/dist/dist/providers/ItemProvider.d.ts.map +1 -0
  288. package/dist/dist/providers/ItemProvider.js +201 -0
  289. package/dist/dist/providers/ItemProvider.js.map +1 -0
  290. package/dist/dist/providers/JobSourceProvider.d.ts +8 -0
  291. package/dist/dist/providers/JobSourceProvider.d.ts.map +1 -0
  292. package/dist/dist/providers/JobSourceProvider.js +75 -0
  293. package/dist/dist/providers/JobSourceProvider.js.map +1 -0
  294. package/dist/dist/providers/JobTypeProvider.d.ts +8 -0
  295. package/dist/dist/providers/JobTypeProvider.d.ts.map +1 -0
  296. package/dist/dist/providers/JobTypeProvider.js +75 -0
  297. package/dist/dist/providers/JobTypeProvider.js.map +1 -0
  298. package/dist/dist/providers/JobsProvider.d.ts +35 -0
  299. package/dist/dist/providers/JobsProvider.d.ts.map +1 -0
  300. package/dist/dist/providers/JobsProvider.js +863 -0
  301. package/dist/dist/providers/JobsProvider.js.map +1 -0
  302. package/dist/dist/providers/MessagesProvider.d.ts +33 -0
  303. package/dist/dist/providers/MessagesProvider.d.ts.map +1 -0
  304. package/dist/dist/providers/MessagesProvider.js +415 -0
  305. package/dist/dist/providers/MessagesProvider.js.map +1 -0
  306. package/dist/dist/providers/PaymentProvider.d.ts +9 -0
  307. package/dist/dist/providers/PaymentProvider.d.ts.map +1 -0
  308. package/dist/dist/providers/PaymentProvider.js +48 -0
  309. package/dist/dist/providers/PaymentProvider.js.map +1 -0
  310. package/dist/dist/providers/PermissionRolesProvider.d.ts +5 -0
  311. package/dist/dist/providers/PermissionRolesProvider.d.ts.map +1 -0
  312. package/dist/dist/providers/PermissionRolesProvider.js +30 -0
  313. package/dist/dist/providers/PermissionRolesProvider.js.map +1 -0
  314. package/dist/dist/providers/PhoneNumberProvider.d.ts +12 -0
  315. package/dist/dist/providers/PhoneNumberProvider.d.ts.map +1 -0
  316. package/dist/dist/providers/PhoneNumberProvider.js +184 -0
  317. package/dist/dist/providers/PhoneNumberProvider.js.map +1 -0
  318. package/dist/dist/providers/ProfileProvider.d.ts +6 -0
  319. package/dist/dist/providers/ProfileProvider.d.ts.map +1 -0
  320. package/dist/dist/providers/ProfileProvider.js +71 -0
  321. package/dist/dist/providers/ProfileProvider.js.map +1 -0
  322. package/dist/dist/providers/RentalsProvider.d.ts +28 -0
  323. package/dist/dist/providers/RentalsProvider.d.ts.map +1 -0
  324. package/dist/dist/providers/RentalsProvider.js +438 -0
  325. package/dist/dist/providers/RentalsProvider.js.map +1 -0
  326. package/dist/dist/providers/SettingsBookingProvider.d.ts +9 -0
  327. package/dist/dist/providers/SettingsBookingProvider.d.ts.map +1 -0
  328. package/dist/dist/providers/SettingsBookingProvider.js +163 -0
  329. package/dist/dist/providers/SettingsBookingProvider.js.map +1 -0
  330. package/dist/dist/providers/SettingsProvider.d.ts +8 -0
  331. package/dist/dist/providers/SettingsProvider.d.ts.map +1 -0
  332. package/dist/dist/providers/SettingsProvider.js +86 -0
  333. package/dist/dist/providers/SettingsProvider.js.map +1 -0
  334. package/dist/dist/providers/TagsProvider.d.ts +12 -0
  335. package/dist/dist/providers/TagsProvider.d.ts.map +1 -0
  336. package/dist/dist/providers/TagsProvider.js +210 -0
  337. package/dist/dist/providers/TagsProvider.js.map +1 -0
  338. package/dist/dist/providers/TimeCardProvider.d.ts +8 -0
  339. package/dist/dist/providers/TimeCardProvider.d.ts.map +1 -0
  340. package/dist/dist/providers/TimeCardProvider.js +93 -0
  341. package/dist/dist/providers/TimeCardProvider.js.map +1 -0
  342. package/dist/dist/providers/TrashProvider.d.ts +13 -0
  343. package/dist/dist/providers/TrashProvider.d.ts.map +1 -0
  344. package/dist/dist/providers/TrashProvider.js +98 -0
  345. package/dist/dist/providers/TrashProvider.js.map +1 -0
  346. package/dist/dist/providers/dashboardAnalytics.d.ts +9 -0
  347. package/dist/dist/providers/dashboardAnalytics.d.ts.map +1 -0
  348. package/dist/dist/providers/dashboardAnalytics.js +41 -0
  349. package/dist/dist/providers/dashboardAnalytics.js.map +1 -0
  350. package/dist/dist/providers/dashboardAnalytics.test.d.ts +2 -0
  351. package/dist/dist/providers/dashboardAnalytics.test.d.ts.map +1 -0
  352. package/dist/dist/providers/dashboardAnalytics.test.js +111 -0
  353. package/dist/dist/providers/dashboardAnalytics.test.js.map +1 -0
  354. package/dist/dist/server-safe/BlockedNumberFunctions.d.ts +11 -0
  355. package/dist/dist/server-safe/BlockedNumberFunctions.d.ts.map +1 -0
  356. package/dist/dist/server-safe/BlockedNumberFunctions.js +16 -0
  357. package/dist/dist/server-safe/BlockedNumberFunctions.js.map +1 -0
  358. package/dist/dist/server-safe/EmployeeFunctions.d.ts +14 -0
  359. package/dist/dist/server-safe/EmployeeFunctions.d.ts.map +1 -0
  360. package/dist/dist/server-safe/EmployeeFunctions.js +70 -0
  361. package/dist/dist/server-safe/EmployeeFunctions.js.map +1 -0
  362. package/dist/dist/server-safe/EmployeeLocationFunctions.d.ts +7 -0
  363. package/dist/dist/server-safe/EmployeeLocationFunctions.d.ts.map +1 -0
  364. package/dist/dist/server-safe/EmployeeLocationFunctions.js +47 -0
  365. package/dist/dist/server-safe/EmployeeLocationFunctions.js.map +1 -0
  366. package/dist/dist/server-safe/EstimateFunctions.d.ts +15 -0
  367. package/dist/dist/server-safe/EstimateFunctions.d.ts.map +1 -0
  368. package/dist/dist/server-safe/EstimateFunctions.js +34 -0
  369. package/dist/dist/server-safe/EstimateFunctions.js.map +1 -0
  370. package/dist/dist/server-safe/InvoiceFunctions.d.ts +21 -0
  371. package/dist/dist/server-safe/InvoiceFunctions.d.ts.map +1 -0
  372. package/dist/dist/server-safe/InvoiceFunctions.js +124 -0
  373. package/dist/dist/server-safe/InvoiceFunctions.js.map +1 -0
  374. package/dist/dist/server-safe/JobFunctions.d.ts +15 -0
  375. package/dist/dist/server-safe/JobFunctions.d.ts.map +1 -0
  376. package/dist/dist/server-safe/JobFunctions.js +56 -0
  377. package/dist/dist/server-safe/JobFunctions.js.map +1 -0
  378. package/dist/dist/server-safe/PaymentFunctions.d.ts +16 -0
  379. package/dist/dist/server-safe/PaymentFunctions.d.ts.map +1 -0
  380. package/dist/dist/server-safe/PaymentFunctions.js +80 -0
  381. package/dist/dist/server-safe/PaymentFunctions.js.map +1 -0
  382. package/dist/dist/server-safe/PermissionFunctions.d.ts +7 -0
  383. package/dist/dist/server-safe/PermissionFunctions.d.ts.map +1 -0
  384. package/dist/dist/server-safe/PermissionFunctions.js +39 -0
  385. package/dist/dist/server-safe/PermissionFunctions.js.map +1 -0
  386. package/dist/dist/server-safe/TagFunctions.d.ts +18 -0
  387. package/dist/dist/server-safe/TagFunctions.d.ts.map +1 -0
  388. package/dist/dist/server-safe/TagFunctions.js +52 -0
  389. package/dist/dist/server-safe/TagFunctions.js.map +1 -0
  390. package/dist/dist/server-safe/autoJobType.d.ts +16 -0
  391. package/dist/dist/server-safe/autoJobType.d.ts.map +1 -0
  392. package/dist/dist/server-safe/autoJobType.js +39 -0
  393. package/dist/dist/server-safe/autoJobType.js.map +1 -0
  394. package/dist/dist/server-safe/autoJobType.test.d.ts +2 -0
  395. package/dist/dist/server-safe/autoJobType.test.d.ts.map +1 -0
  396. package/dist/dist/server-safe/autoJobType.test.js +83 -0
  397. package/dist/dist/server-safe/autoJobType.test.js.map +1 -0
  398. package/dist/dist/server-safe/automations.d.ts +197 -0
  399. package/dist/dist/server-safe/automations.d.ts.map +1 -0
  400. package/dist/dist/server-safe/automations.js +757 -0
  401. package/dist/dist/server-safe/automations.js.map +1 -0
  402. package/dist/dist/server-safe/automations.test.d.ts +2 -0
  403. package/dist/dist/server-safe/automations.test.d.ts.map +1 -0
  404. package/dist/dist/server-safe/automations.test.js +441 -0
  405. package/dist/dist/server-safe/automations.test.js.map +1 -0
  406. package/dist/dist/server-safe/constants.d.ts +156 -0
  407. package/dist/dist/server-safe/constants.d.ts.map +1 -0
  408. package/dist/dist/server-safe/constants.js +186 -0
  409. package/dist/dist/server-safe/constants.js.map +1 -0
  410. package/dist/dist/server-safe/contracts.d.ts +3 -0
  411. package/dist/dist/server-safe/contracts.d.ts.map +1 -0
  412. package/dist/dist/server-safe/contracts.js +15 -0
  413. package/dist/dist/server-safe/contracts.js.map +1 -0
  414. package/dist/dist/server-safe/database.types.d.ts +9510 -0
  415. package/dist/dist/server-safe/database.types.d.ts.map +1 -0
  416. package/dist/dist/server-safe/database.types.js +40 -0
  417. package/dist/dist/server-safe/database.types.js.map +1 -0
  418. package/dist/dist/server-safe/entitlements.d.ts +99 -0
  419. package/dist/dist/server-safe/entitlements.d.ts.map +1 -0
  420. package/dist/dist/server-safe/entitlements.js +487 -0
  421. package/dist/dist/server-safe/entitlements.js.map +1 -0
  422. package/dist/dist/server-safe/facebookAdsLeads.d.ts +225 -0
  423. package/dist/dist/server-safe/facebookAdsLeads.d.ts.map +1 -0
  424. package/dist/dist/server-safe/facebookAdsLeads.js +376 -0
  425. package/dist/dist/server-safe/facebookAdsLeads.js.map +1 -0
  426. package/dist/dist/server-safe/facebookAdsLeads.test.d.ts +2 -0
  427. package/dist/dist/server-safe/facebookAdsLeads.test.d.ts.map +1 -0
  428. package/dist/dist/server-safe/facebookAdsLeads.test.js +189 -0
  429. package/dist/dist/server-safe/facebookAdsLeads.test.js.map +1 -0
  430. package/dist/dist/server-safe/facebookAdsLeadsSql.test.d.ts +2 -0
  431. package/dist/dist/server-safe/facebookAdsLeadsSql.test.d.ts.map +1 -0
  432. package/dist/dist/server-safe/facebookAdsLeadsSql.test.js +32 -0
  433. package/dist/dist/server-safe/facebookAdsLeadsSql.test.js.map +1 -0
  434. package/dist/dist/server-safe/facebookMessenger.d.ts +20 -0
  435. package/dist/dist/server-safe/facebookMessenger.d.ts.map +1 -0
  436. package/dist/dist/server-safe/facebookMessenger.js +63 -0
  437. package/dist/dist/server-safe/facebookMessenger.js.map +1 -0
  438. package/dist/dist/server-safe/facebookMessenger.test.d.ts +2 -0
  439. package/dist/dist/server-safe/facebookMessenger.test.d.ts.map +1 -0
  440. package/dist/dist/server-safe/facebookMessenger.test.js +51 -0
  441. package/dist/dist/server-safe/facebookMessenger.test.js.map +1 -0
  442. package/dist/dist/server-safe/helpers.d.ts +78 -0
  443. package/dist/dist/server-safe/helpers.d.ts.map +1 -0
  444. package/dist/dist/server-safe/helpers.js +569 -0
  445. package/dist/dist/server-safe/helpers.js.map +1 -0
  446. package/dist/dist/server-safe/index.d.ts +30 -0
  447. package/dist/dist/server-safe/index.d.ts.map +1 -0
  448. package/dist/dist/server-safe/index.js +46 -0
  449. package/dist/dist/server-safe/index.js.map +1 -0
  450. package/dist/dist/server-safe/permissions.d.ts +29 -0
  451. package/dist/dist/server-safe/permissions.d.ts.map +1 -0
  452. package/dist/dist/server-safe/permissions.js +180 -0
  453. package/dist/dist/server-safe/permissions.js.map +1 -0
  454. package/dist/dist/server-safe/proposals.d.ts +6 -0
  455. package/dist/dist/server-safe/proposals.d.ts.map +1 -0
  456. package/dist/dist/server-safe/proposals.js +58 -0
  457. package/dist/dist/server-safe/proposals.js.map +1 -0
  458. package/dist/dist/server-safe/rentalAvailability.d.ts +56 -0
  459. package/dist/dist/server-safe/rentalAvailability.d.ts.map +1 -0
  460. package/dist/dist/server-safe/rentalAvailability.js +124 -0
  461. package/dist/dist/server-safe/rentalAvailability.js.map +1 -0
  462. package/dist/dist/server-safe/rentalAvailability.test.d.ts +2 -0
  463. package/dist/dist/server-safe/rentalAvailability.test.d.ts.map +1 -0
  464. package/dist/dist/server-safe/rentalAvailability.test.js +290 -0
  465. package/dist/dist/server-safe/rentalAvailability.test.js.map +1 -0
  466. package/dist/dist/server-safe/rentals.d.ts +95 -0
  467. package/dist/dist/server-safe/rentals.d.ts.map +1 -0
  468. package/dist/dist/server-safe/rentals.js +432 -0
  469. package/dist/dist/server-safe/rentals.js.map +1 -0
  470. package/dist/dist/server-safe/rentals.test.d.ts +2 -0
  471. package/dist/dist/server-safe/rentals.test.d.ts.map +1 -0
  472. package/dist/dist/server-safe/rentals.test.js +1034 -0
  473. package/dist/dist/server-safe/rentals.test.js.map +1 -0
  474. package/dist/dist/server-safe/routeOptimization.d.ts +155 -0
  475. package/dist/dist/server-safe/routeOptimization.d.ts.map +1 -0
  476. package/dist/dist/server-safe/routeOptimization.js +120 -0
  477. package/dist/dist/server-safe/routeOptimization.js.map +1 -0
  478. package/dist/dist/server-safe/routeOptimization.test.d.ts +2 -0
  479. package/dist/dist/server-safe/routeOptimization.test.d.ts.map +1 -0
  480. package/dist/dist/server-safe/routeOptimization.test.js +234 -0
  481. package/dist/dist/server-safe/routeOptimization.test.js.map +1 -0
  482. package/dist/dist/server-safe/routePlanFingerprint.d.ts +13 -0
  483. package/dist/dist/server-safe/routePlanFingerprint.d.ts.map +1 -0
  484. package/dist/dist/server-safe/routePlanFingerprint.js +49 -0
  485. package/dist/dist/server-safe/routePlanFingerprint.js.map +1 -0
  486. package/dist/dist/server-safe/routePlanFingerprint.test.d.ts +2 -0
  487. package/dist/dist/server-safe/routePlanFingerprint.test.d.ts.map +1 -0
  488. package/dist/dist/server-safe/routePlanFingerprint.test.js +68 -0
  489. package/dist/dist/server-safe/routePlanFingerprint.test.js.map +1 -0
  490. package/dist/dist/server-safe/scheduleListOrder.d.ts +18 -0
  491. package/dist/dist/server-safe/scheduleListOrder.d.ts.map +1 -0
  492. package/dist/dist/server-safe/scheduleListOrder.js +92 -0
  493. package/dist/dist/server-safe/scheduleListOrder.js.map +1 -0
  494. package/dist/dist/server-safe/scheduleListOrder.test.d.ts +2 -0
  495. package/dist/dist/server-safe/scheduleListOrder.test.d.ts.map +1 -0
  496. package/dist/dist/server-safe/scheduleListOrder.test.js +260 -0
  497. package/dist/dist/server-safe/scheduleListOrder.test.js.map +1 -0
  498. package/dist/dist/server-safe/serviceMinutes.d.ts +13 -0
  499. package/dist/dist/server-safe/serviceMinutes.d.ts.map +1 -0
  500. package/dist/dist/server-safe/serviceMinutes.js +38 -0
  501. package/dist/dist/server-safe/serviceMinutes.js.map +1 -0
  502. package/dist/dist/server-safe/serviceMinutes.test.d.ts +2 -0
  503. package/dist/dist/server-safe/serviceMinutes.test.d.ts.map +1 -0
  504. package/dist/dist/server-safe/serviceMinutes.test.js +86 -0
  505. package/dist/dist/server-safe/serviceMinutes.test.js.map +1 -0
  506. package/dist/dist/server-safe/settingsSearch.d.ts +24 -0
  507. package/dist/dist/server-safe/settingsSearch.d.ts.map +1 -0
  508. package/dist/dist/server-safe/settingsSearch.js +8 -0
  509. package/dist/dist/server-safe/settingsSearch.js.map +1 -0
  510. package/dist/dist/server-safe/supportChat.d.ts +59 -0
  511. package/dist/dist/server-safe/supportChat.d.ts.map +1 -0
  512. package/dist/dist/server-safe/supportChat.js +56 -0
  513. package/dist/dist/server-safe/supportChat.js.map +1 -0
  514. package/dist/dist/server-safe/templates.d.ts +15 -0
  515. package/dist/dist/server-safe/templates.d.ts.map +1 -0
  516. package/dist/dist/server-safe/templates.js +91 -0
  517. package/dist/dist/server-safe/templates.js.map +1 -0
  518. package/dist/dist/server-safe/templates.test.d.ts +2 -0
  519. package/dist/dist/server-safe/templates.test.d.ts.map +1 -0
  520. package/dist/dist/server-safe/templates.test.js +62 -0
  521. package/dist/dist/server-safe/templates.test.js.map +1 -0
  522. package/dist/dist/server-safe/trash.d.ts +50 -0
  523. package/dist/dist/server-safe/trash.d.ts.map +1 -0
  524. package/dist/dist/server-safe/trash.js +100 -0
  525. package/dist/dist/server-safe/trash.js.map +1 -0
  526. package/dist/dist/utils/LogHandler.d.ts +3 -0
  527. package/dist/dist/utils/LogHandler.d.ts.map +1 -0
  528. package/dist/dist/utils/LogHandler.js +16 -0
  529. package/dist/dist/utils/LogHandler.js.map +1 -0
  530. package/dist/dist/utils/convertSupabaseImagesToAssets.d.ts +28 -0
  531. package/dist/dist/utils/convertSupabaseImagesToAssets.d.ts.map +1 -0
  532. package/dist/dist/utils/convertSupabaseImagesToAssets.js +14 -0
  533. package/dist/dist/utils/convertSupabaseImagesToAssets.js.map +1 -0
  534. package/dist/index.d.ts +45 -0
  535. package/dist/index.d.ts.map +1 -0
  536. package/dist/index.js +61 -0
  537. package/dist/index.js.map +1 -0
  538. package/dist/interfaces/index.d.ts +1238 -0
  539. package/dist/interfaces/index.d.ts.map +1 -0
  540. package/dist/interfaces/index.js +3 -0
  541. package/dist/interfaces/index.js.map +1 -0
  542. package/dist/providers/AddressProvider.d.ts +9 -0
  543. package/dist/providers/AddressProvider.d.ts.map +1 -0
  544. package/dist/providers/AddressProvider.js +207 -0
  545. package/dist/providers/AddressProvider.js.map +1 -0
  546. package/dist/providers/AutomationsProvider.d.ts +11 -0
  547. package/dist/providers/AutomationsProvider.d.ts.map +1 -0
  548. package/dist/providers/AutomationsProvider.js +170 -0
  549. package/dist/providers/AutomationsProvider.js.map +1 -0
  550. package/dist/providers/BlockedNumbersProvider.d.ts +7 -0
  551. package/dist/providers/BlockedNumbersProvider.d.ts.map +1 -0
  552. package/dist/providers/BlockedNumbersProvider.js +71 -0
  553. package/dist/providers/BlockedNumbersProvider.js.map +1 -0
  554. package/dist/providers/CategoryProvider.d.ts +8 -0
  555. package/dist/providers/CategoryProvider.d.ts.map +1 -0
  556. package/dist/providers/CategoryProvider.js +95 -0
  557. package/dist/providers/CategoryProvider.js.map +1 -0
  558. package/dist/providers/ClientProvider.d.ts +39 -0
  559. package/dist/providers/ClientProvider.d.ts.map +1 -0
  560. package/dist/providers/ClientProvider.js +253 -0
  561. package/dist/providers/ClientProvider.js.map +1 -0
  562. package/dist/providers/CompanyProvider.d.ts +7 -0
  563. package/dist/providers/CompanyProvider.d.ts.map +1 -0
  564. package/dist/providers/CompanyProvider.js +114 -0
  565. package/dist/providers/CompanyProvider.js.map +1 -0
  566. package/dist/providers/DashboardProvider.d.ts +78 -0
  567. package/dist/providers/DashboardProvider.d.ts.map +1 -0
  568. package/dist/providers/DashboardProvider.js +568 -0
  569. package/dist/providers/DashboardProvider.js.map +1 -0
  570. package/dist/providers/DiscountProvider.d.ts +8 -0
  571. package/dist/providers/DiscountProvider.d.ts.map +1 -0
  572. package/dist/providers/DiscountProvider.js +92 -0
  573. package/dist/providers/DiscountProvider.js.map +1 -0
  574. package/dist/providers/EmployeesProvider.d.ts +6 -0
  575. package/dist/providers/EmployeesProvider.d.ts.map +1 -0
  576. package/dist/providers/EmployeesProvider.js +185 -0
  577. package/dist/providers/EmployeesProvider.js.map +1 -0
  578. package/dist/providers/EstimatesProvider.d.ts +16 -0
  579. package/dist/providers/EstimatesProvider.d.ts.map +1 -0
  580. package/dist/providers/EstimatesProvider.js +251 -0
  581. package/dist/providers/EstimatesProvider.js.map +1 -0
  582. package/dist/providers/EventsProvider.d.ts +4 -0
  583. package/dist/providers/EventsProvider.d.ts.map +1 -0
  584. package/dist/providers/EventsProvider.js +24 -0
  585. package/dist/providers/EventsProvider.js.map +1 -0
  586. package/dist/providers/FilesProvider.d.ts +17 -0
  587. package/dist/providers/FilesProvider.d.ts.map +1 -0
  588. package/dist/providers/FilesProvider.js +201 -0
  589. package/dist/providers/FilesProvider.js.map +1 -0
  590. package/dist/providers/InvoicesProvider.d.ts +13 -0
  591. package/dist/providers/InvoicesProvider.d.ts.map +1 -0
  592. package/dist/providers/InvoicesProvider.js +207 -0
  593. package/dist/providers/InvoicesProvider.js.map +1 -0
  594. package/dist/providers/ItemProvider.d.ts +9 -0
  595. package/dist/providers/ItemProvider.d.ts.map +1 -0
  596. package/dist/providers/ItemProvider.js +201 -0
  597. package/dist/providers/ItemProvider.js.map +1 -0
  598. package/dist/providers/JobSourceProvider.d.ts +8 -0
  599. package/dist/providers/JobSourceProvider.d.ts.map +1 -0
  600. package/dist/providers/JobSourceProvider.js +75 -0
  601. package/dist/providers/JobSourceProvider.js.map +1 -0
  602. package/dist/providers/JobTypeProvider.d.ts +8 -0
  603. package/dist/providers/JobTypeProvider.d.ts.map +1 -0
  604. package/dist/providers/JobTypeProvider.js +75 -0
  605. package/dist/providers/JobTypeProvider.js.map +1 -0
  606. package/dist/providers/JobsProvider.d.ts +20 -0
  607. package/dist/providers/JobsProvider.d.ts.map +1 -0
  608. package/dist/providers/JobsProvider.js +863 -0
  609. package/dist/providers/JobsProvider.js.map +1 -0
  610. package/dist/providers/MessagesProvider.d.ts +14 -0
  611. package/dist/providers/MessagesProvider.d.ts.map +1 -0
  612. package/dist/providers/MessagesProvider.js +415 -0
  613. package/dist/providers/MessagesProvider.js.map +1 -0
  614. package/dist/providers/PaymentProvider.d.ts +9 -0
  615. package/dist/providers/PaymentProvider.d.ts.map +1 -0
  616. package/dist/providers/PaymentProvider.js +48 -0
  617. package/dist/providers/PaymentProvider.js.map +1 -0
  618. package/dist/providers/PermissionRolesProvider.d.ts +5 -0
  619. package/dist/providers/PermissionRolesProvider.d.ts.map +1 -0
  620. package/dist/providers/PermissionRolesProvider.js +30 -0
  621. package/dist/providers/PermissionRolesProvider.js.map +1 -0
  622. package/dist/providers/PhoneNumberProvider.d.ts +12 -0
  623. package/dist/providers/PhoneNumberProvider.d.ts.map +1 -0
  624. package/dist/providers/PhoneNumberProvider.js +184 -0
  625. package/dist/providers/PhoneNumberProvider.js.map +1 -0
  626. package/dist/providers/ProfileProvider.d.ts +6 -0
  627. package/dist/providers/ProfileProvider.d.ts.map +1 -0
  628. package/dist/providers/ProfileProvider.js +71 -0
  629. package/dist/providers/ProfileProvider.js.map +1 -0
  630. package/dist/providers/RentalsProvider.d.ts +28 -0
  631. package/dist/providers/RentalsProvider.d.ts.map +1 -0
  632. package/dist/providers/RentalsProvider.js +438 -0
  633. package/dist/providers/RentalsProvider.js.map +1 -0
  634. package/dist/providers/SettingsBookingProvider.d.ts +9 -0
  635. package/dist/providers/SettingsBookingProvider.d.ts.map +1 -0
  636. package/dist/providers/SettingsBookingProvider.js +163 -0
  637. package/dist/providers/SettingsBookingProvider.js.map +1 -0
  638. package/dist/providers/SettingsProvider.d.ts +8 -0
  639. package/dist/providers/SettingsProvider.d.ts.map +1 -0
  640. package/dist/providers/SettingsProvider.js +86 -0
  641. package/dist/providers/SettingsProvider.js.map +1 -0
  642. package/dist/providers/TagsProvider.d.ts +12 -0
  643. package/dist/providers/TagsProvider.d.ts.map +1 -0
  644. package/dist/providers/TagsProvider.js +210 -0
  645. package/dist/providers/TagsProvider.js.map +1 -0
  646. package/dist/providers/TimeCardProvider.d.ts +8 -0
  647. package/dist/providers/TimeCardProvider.d.ts.map +1 -0
  648. package/dist/providers/TimeCardProvider.js +93 -0
  649. package/dist/providers/TimeCardProvider.js.map +1 -0
  650. package/dist/providers/TrashProvider.d.ts +13 -0
  651. package/dist/providers/TrashProvider.d.ts.map +1 -0
  652. package/dist/providers/TrashProvider.js +98 -0
  653. package/dist/providers/TrashProvider.js.map +1 -0
  654. package/dist/providers/dashboardAnalytics.d.ts +9 -0
  655. package/dist/providers/dashboardAnalytics.d.ts.map +1 -0
  656. package/dist/providers/dashboardAnalytics.js +41 -0
  657. package/dist/providers/dashboardAnalytics.js.map +1 -0
  658. package/dist/providers/dashboardAnalytics.test.d.ts +2 -0
  659. package/dist/providers/dashboardAnalytics.test.d.ts.map +1 -0
  660. package/dist/providers/dashboardAnalytics.test.js +111 -0
  661. package/dist/providers/dashboardAnalytics.test.js.map +1 -0
  662. package/dist/server-safe/BlockedNumberFunctions.d.ts +11 -0
  663. package/dist/server-safe/BlockedNumberFunctions.d.ts.map +1 -0
  664. package/dist/server-safe/BlockedNumberFunctions.js +16 -0
  665. package/dist/server-safe/BlockedNumberFunctions.js.map +1 -0
  666. package/dist/server-safe/EmployeeFunctions.d.ts +14 -0
  667. package/dist/server-safe/EmployeeFunctions.d.ts.map +1 -0
  668. package/dist/server-safe/EmployeeFunctions.js +70 -0
  669. package/dist/server-safe/EmployeeFunctions.js.map +1 -0
  670. package/dist/server-safe/EmployeeLocationFunctions.d.ts +7 -0
  671. package/dist/server-safe/EmployeeLocationFunctions.d.ts.map +1 -0
  672. package/dist/server-safe/EmployeeLocationFunctions.js +47 -0
  673. package/dist/server-safe/EmployeeLocationFunctions.js.map +1 -0
  674. package/dist/server-safe/EstimateFunctions.d.ts +15 -0
  675. package/dist/server-safe/EstimateFunctions.d.ts.map +1 -0
  676. package/dist/server-safe/EstimateFunctions.js +34 -0
  677. package/dist/server-safe/EstimateFunctions.js.map +1 -0
  678. package/dist/server-safe/InvoiceFunctions.d.ts +21 -0
  679. package/dist/server-safe/InvoiceFunctions.d.ts.map +1 -0
  680. package/dist/server-safe/InvoiceFunctions.js +124 -0
  681. package/dist/server-safe/InvoiceFunctions.js.map +1 -0
  682. package/dist/server-safe/JobFunctions.d.ts +15 -0
  683. package/dist/server-safe/JobFunctions.d.ts.map +1 -0
  684. package/dist/server-safe/JobFunctions.js +56 -0
  685. package/dist/server-safe/JobFunctions.js.map +1 -0
  686. package/dist/server-safe/PaymentFunctions.d.ts +16 -0
  687. package/dist/server-safe/PaymentFunctions.d.ts.map +1 -0
  688. package/dist/server-safe/PaymentFunctions.js +80 -0
  689. package/dist/server-safe/PaymentFunctions.js.map +1 -0
  690. package/dist/server-safe/PermissionFunctions.d.ts +7 -0
  691. package/dist/server-safe/PermissionFunctions.d.ts.map +1 -0
  692. package/dist/server-safe/PermissionFunctions.js +39 -0
  693. package/dist/server-safe/PermissionFunctions.js.map +1 -0
  694. package/dist/server-safe/TagFunctions.d.ts +18 -0
  695. package/dist/server-safe/TagFunctions.d.ts.map +1 -0
  696. package/dist/server-safe/TagFunctions.js +52 -0
  697. package/dist/server-safe/TagFunctions.js.map +1 -0
  698. package/dist/server-safe/autoJobType.d.ts +16 -0
  699. package/dist/server-safe/autoJobType.d.ts.map +1 -0
  700. package/dist/server-safe/autoJobType.js +39 -0
  701. package/dist/server-safe/autoJobType.js.map +1 -0
  702. package/dist/server-safe/autoJobType.test.d.ts +2 -0
  703. package/dist/server-safe/autoJobType.test.d.ts.map +1 -0
  704. package/dist/server-safe/autoJobType.test.js +83 -0
  705. package/dist/server-safe/autoJobType.test.js.map +1 -0
  706. package/dist/server-safe/automations.d.ts +197 -0
  707. package/dist/server-safe/automations.d.ts.map +1 -0
  708. package/dist/server-safe/automations.js +757 -0
  709. package/dist/server-safe/automations.js.map +1 -0
  710. package/dist/server-safe/automations.test.d.ts +2 -0
  711. package/dist/server-safe/automations.test.d.ts.map +1 -0
  712. package/dist/server-safe/automations.test.js +441 -0
  713. package/dist/server-safe/automations.test.js.map +1 -0
  714. package/dist/server-safe/constants.d.ts +156 -0
  715. package/dist/server-safe/constants.d.ts.map +1 -0
  716. package/dist/server-safe/constants.js +186 -0
  717. package/dist/server-safe/constants.js.map +1 -0
  718. package/dist/server-safe/contracts.d.ts +3 -0
  719. package/dist/server-safe/contracts.d.ts.map +1 -0
  720. package/dist/server-safe/contracts.js +15 -0
  721. package/dist/server-safe/contracts.js.map +1 -0
  722. package/dist/server-safe/database.types.d.ts +9510 -0
  723. package/dist/server-safe/database.types.d.ts.map +1 -0
  724. package/dist/server-safe/database.types.js +40 -0
  725. package/dist/server-safe/database.types.js.map +1 -0
  726. package/dist/server-safe/entitlements.d.ts +99 -0
  727. package/dist/server-safe/entitlements.d.ts.map +1 -0
  728. package/dist/server-safe/entitlements.js +487 -0
  729. package/dist/server-safe/entitlements.js.map +1 -0
  730. package/dist/server-safe/helpers.d.ts +78 -0
  731. package/dist/server-safe/helpers.d.ts.map +1 -0
  732. package/dist/server-safe/helpers.js +569 -0
  733. package/dist/server-safe/helpers.js.map +1 -0
  734. package/dist/server-safe/index.d.ts +30 -0
  735. package/dist/server-safe/index.d.ts.map +1 -0
  736. package/dist/server-safe/index.js +46 -0
  737. package/dist/server-safe/index.js.map +1 -0
  738. package/dist/server-safe/permissions.d.ts +29 -0
  739. package/dist/server-safe/permissions.d.ts.map +1 -0
  740. package/dist/server-safe/permissions.js +180 -0
  741. package/dist/server-safe/permissions.js.map +1 -0
  742. package/dist/server-safe/proposals.d.ts +6 -0
  743. package/dist/server-safe/proposals.d.ts.map +1 -0
  744. package/dist/server-safe/proposals.js +58 -0
  745. package/dist/server-safe/proposals.js.map +1 -0
  746. package/dist/server-safe/rentalAvailability.d.ts +56 -0
  747. package/dist/server-safe/rentalAvailability.d.ts.map +1 -0
  748. package/dist/server-safe/rentalAvailability.js +124 -0
  749. package/dist/server-safe/rentalAvailability.js.map +1 -0
  750. package/dist/server-safe/rentalAvailability.test.d.ts +2 -0
  751. package/dist/server-safe/rentalAvailability.test.d.ts.map +1 -0
  752. package/dist/server-safe/rentalAvailability.test.js +290 -0
  753. package/dist/server-safe/rentalAvailability.test.js.map +1 -0
  754. package/dist/server-safe/rentals.d.ts +95 -0
  755. package/dist/server-safe/rentals.d.ts.map +1 -0
  756. package/dist/server-safe/rentals.js +432 -0
  757. package/dist/server-safe/rentals.js.map +1 -0
  758. package/dist/server-safe/rentals.test.d.ts +2 -0
  759. package/dist/server-safe/rentals.test.d.ts.map +1 -0
  760. package/dist/server-safe/rentals.test.js +1034 -0
  761. package/dist/server-safe/rentals.test.js.map +1 -0
  762. package/dist/server-safe/routeOptimization.d.ts +155 -0
  763. package/dist/server-safe/routeOptimization.d.ts.map +1 -0
  764. package/dist/server-safe/routeOptimization.js +120 -0
  765. package/dist/server-safe/routeOptimization.js.map +1 -0
  766. package/dist/server-safe/routeOptimization.test.d.ts +2 -0
  767. package/dist/server-safe/routeOptimization.test.d.ts.map +1 -0
  768. package/dist/server-safe/routeOptimization.test.js +234 -0
  769. package/dist/server-safe/routeOptimization.test.js.map +1 -0
  770. package/dist/server-safe/routePlanFingerprint.d.ts +13 -0
  771. package/dist/server-safe/routePlanFingerprint.d.ts.map +1 -0
  772. package/dist/server-safe/routePlanFingerprint.js +49 -0
  773. package/dist/server-safe/routePlanFingerprint.js.map +1 -0
  774. package/dist/server-safe/routePlanFingerprint.test.d.ts +2 -0
  775. package/dist/server-safe/routePlanFingerprint.test.d.ts.map +1 -0
  776. package/dist/server-safe/routePlanFingerprint.test.js +68 -0
  777. package/dist/server-safe/routePlanFingerprint.test.js.map +1 -0
  778. package/dist/server-safe/scheduleListOrder.d.ts +18 -0
  779. package/dist/server-safe/scheduleListOrder.d.ts.map +1 -0
  780. package/dist/server-safe/scheduleListOrder.js +92 -0
  781. package/dist/server-safe/scheduleListOrder.js.map +1 -0
  782. package/dist/server-safe/scheduleListOrder.test.d.ts +2 -0
  783. package/dist/server-safe/scheduleListOrder.test.d.ts.map +1 -0
  784. package/dist/server-safe/scheduleListOrder.test.js +260 -0
  785. package/dist/server-safe/scheduleListOrder.test.js.map +1 -0
  786. package/dist/server-safe/serviceMinutes.d.ts +13 -0
  787. package/dist/server-safe/serviceMinutes.d.ts.map +1 -0
  788. package/dist/server-safe/serviceMinutes.js +38 -0
  789. package/dist/server-safe/serviceMinutes.js.map +1 -0
  790. package/dist/server-safe/serviceMinutes.test.d.ts +2 -0
  791. package/dist/server-safe/serviceMinutes.test.d.ts.map +1 -0
  792. package/dist/server-safe/serviceMinutes.test.js +86 -0
  793. package/dist/server-safe/serviceMinutes.test.js.map +1 -0
  794. package/dist/server-safe/settingsSearch.d.ts +24 -0
  795. package/dist/server-safe/settingsSearch.d.ts.map +1 -0
  796. package/dist/server-safe/settingsSearch.js +8 -0
  797. package/dist/server-safe/settingsSearch.js.map +1 -0
  798. package/dist/server-safe/supportChat.d.ts +59 -0
  799. package/dist/server-safe/supportChat.d.ts.map +1 -0
  800. package/dist/server-safe/supportChat.js +56 -0
  801. package/dist/server-safe/supportChat.js.map +1 -0
  802. package/dist/server-safe/templates.d.ts +15 -0
  803. package/dist/server-safe/templates.d.ts.map +1 -0
  804. package/dist/server-safe/templates.js +91 -0
  805. package/dist/server-safe/templates.js.map +1 -0
  806. package/dist/server-safe/templates.test.d.ts +2 -0
  807. package/dist/server-safe/templates.test.d.ts.map +1 -0
  808. package/dist/server-safe/templates.test.js +62 -0
  809. package/dist/server-safe/templates.test.js.map +1 -0
  810. package/dist/server-safe/trash.d.ts +50 -0
  811. package/dist/server-safe/trash.d.ts.map +1 -0
  812. package/dist/server-safe/trash.js +100 -0
  813. package/dist/server-safe/trash.js.map +1 -0
  814. package/dist/utils/LogHandler.d.ts +3 -0
  815. package/dist/utils/LogHandler.d.ts.map +1 -0
  816. package/dist/utils/LogHandler.js +16 -0
  817. package/dist/utils/LogHandler.js.map +1 -0
  818. package/dist/utils/convertSupabaseImagesToAssets.d.ts +28 -0
  819. package/dist/utils/convertSupabaseImagesToAssets.d.ts.map +1 -0
  820. package/dist/utils/convertSupabaseImagesToAssets.js +14 -0
  821. package/dist/utils/convertSupabaseImagesToAssets.js.map +1 -0
  822. package/package.json +37 -0
@@ -0,0 +1,1034 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const rentals_1 = require("./rentals");
5
+ const makeAsset = (overrides) => ({
6
+ company_id: 'company-1',
7
+ created_at: '2026-08-07T00:00:00.000Z',
8
+ updated_at: null,
9
+ label: `Asset ${overrides.id}`,
10
+ size: 20,
11
+ fullness: 'unknown',
12
+ location_kind: 'unknown',
13
+ saved_location_id: null,
14
+ location_address: null,
15
+ location_latitude: null,
16
+ location_longitude: null,
17
+ is_archived: false,
18
+ ...overrides,
19
+ });
20
+ (0, globals_1.describe)('getAssetLocation', () => {
21
+ (0, globals_1.it)('maps a saved row to the saved union member', () => {
22
+ (0, globals_1.expect)((0, rentals_1.getAssetLocation)({
23
+ location_kind: 'saved',
24
+ saved_location_id: 'loc-1',
25
+ location_address: null,
26
+ location_latitude: null,
27
+ location_longitude: null,
28
+ })).toEqual({ kind: 'saved', savedLocationId: 'loc-1' });
29
+ });
30
+ (0, globals_1.it)('maps freeform and temporary rows, preserving the kind', () => {
31
+ for (const kind of ['freeform', 'temporary']) {
32
+ (0, globals_1.expect)((0, rentals_1.getAssetLocation)({
33
+ location_kind: kind,
34
+ saved_location_id: null,
35
+ location_address: '123 Main St',
36
+ location_latitude: 40.1,
37
+ location_longitude: -75.2,
38
+ })).toEqual({
39
+ kind,
40
+ address: '123 Main St',
41
+ latitude: 40.1,
42
+ longitude: -75.2,
43
+ });
44
+ }
45
+ });
46
+ (0, globals_1.it)('passes null lat/lng through on freeform rows', () => {
47
+ (0, globals_1.expect)((0, rentals_1.getAssetLocation)({
48
+ location_kind: 'freeform',
49
+ saved_location_id: null,
50
+ location_address: '123 Main St',
51
+ location_latitude: null,
52
+ location_longitude: null,
53
+ })).toEqual({
54
+ kind: 'freeform',
55
+ address: '123 Main St',
56
+ latitude: null,
57
+ longitude: null,
58
+ });
59
+ });
60
+ (0, globals_1.it)('maps an all-null row to unknown', () => {
61
+ (0, globals_1.expect)((0, rentals_1.getAssetLocation)({
62
+ location_kind: 'unknown',
63
+ saved_location_id: null,
64
+ location_address: null,
65
+ location_latitude: null,
66
+ location_longitude: null,
67
+ })).toEqual({ kind: 'unknown' });
68
+ });
69
+ });
70
+ (0, globals_1.describe)('buildAssetLocationColumns', () => {
71
+ const cases = [
72
+ { kind: 'unknown' },
73
+ { kind: 'saved', savedLocationId: 'loc-1' },
74
+ { kind: 'freeform', address: '123 Main St', latitude: 40.1, longitude: -75.2 },
75
+ { kind: 'temporary', address: 'Shell station, Route 9', latitude: null, longitude: null },
76
+ ];
77
+ (0, globals_1.it)('always emits all five columns with the unused side explicitly null', () => {
78
+ for (const location of cases) {
79
+ const columns = (0, rentals_1.buildAssetLocationColumns)(location);
80
+ (0, globals_1.expect)(Object.keys(columns).sort()).toEqual([
81
+ 'location_address',
82
+ 'location_kind',
83
+ 'location_latitude',
84
+ 'location_longitude',
85
+ 'saved_location_id',
86
+ ]);
87
+ if (location.kind === 'saved') {
88
+ (0, globals_1.expect)(columns.location_address).toBeNull();
89
+ (0, globals_1.expect)(columns.location_latitude).toBeNull();
90
+ (0, globals_1.expect)(columns.location_longitude).toBeNull();
91
+ }
92
+ else {
93
+ (0, globals_1.expect)(columns.saved_location_id).toBeNull();
94
+ }
95
+ }
96
+ });
97
+ (0, globals_1.it)('round-trips through getAssetLocation for every kind', () => {
98
+ for (const location of cases) {
99
+ (0, globals_1.expect)((0, rentals_1.getAssetLocation)((0, rentals_1.buildAssetLocationColumns)(location))).toEqual(location);
100
+ }
101
+ });
102
+ });
103
+ (0, globals_1.describe)('groupAssetsByLocation', () => {
104
+ (0, globals_1.it)('groups saved assets by saved_location_id', () => {
105
+ const groups = (0, rentals_1.groupAssetsByLocation)([
106
+ makeAsset({ id: 'a1', location_kind: 'saved', saved_location_id: 'loc-1' }),
107
+ makeAsset({ id: 'a2', location_kind: 'saved', saved_location_id: 'loc-1' }),
108
+ makeAsset({ id: 'a3', location_kind: 'saved', saved_location_id: 'loc-2' }),
109
+ ]);
110
+ (0, globals_1.expect)(groups).toHaveLength(2);
111
+ const loc1 = groups.find((g) => g.kind === 'saved' && g.savedLocationId === 'loc-1');
112
+ (0, globals_1.expect)(loc1?.assets.map((a) => a.id)).toEqual(['a1', 'a2']);
113
+ });
114
+ (0, globals_1.it)('groups freeform assets by trimmed address', () => {
115
+ const groups = (0, rentals_1.groupAssetsByLocation)([
116
+ makeAsset({
117
+ id: 'a1',
118
+ location_kind: 'freeform',
119
+ location_address: '123 Main St',
120
+ }),
121
+ makeAsset({
122
+ id: 'a2',
123
+ location_kind: 'freeform',
124
+ location_address: ' 123 Main St ',
125
+ }),
126
+ ]);
127
+ (0, globals_1.expect)(groups).toHaveLength(1);
128
+ (0, globals_1.expect)(groups[0]).toMatchObject({ kind: 'freeform', address: '123 Main St' });
129
+ (0, globals_1.expect)(groups[0]?.assets).toHaveLength(2);
130
+ });
131
+ (0, globals_1.it)('keeps freeform and temporary at the same address in separate groups', () => {
132
+ const groups = (0, rentals_1.groupAssetsByLocation)([
133
+ makeAsset({
134
+ id: 'a1',
135
+ location_kind: 'freeform',
136
+ location_address: '123 Main St',
137
+ }),
138
+ makeAsset({
139
+ id: 'a2',
140
+ location_kind: 'temporary',
141
+ location_address: '123 Main St',
142
+ }),
143
+ ]);
144
+ (0, globals_1.expect)(groups).toHaveLength(2);
145
+ (0, globals_1.expect)(groups.map((g) => g.kind).sort()).toEqual(['freeform', 'temporary']);
146
+ });
147
+ (0, globals_1.it)('buckets unplaced assets under unknown and excludes archived assets', () => {
148
+ const groups = (0, rentals_1.groupAssetsByLocation)([
149
+ makeAsset({ id: 'a1' }),
150
+ makeAsset({ id: 'a2' }),
151
+ makeAsset({
152
+ id: 'a3',
153
+ location_kind: 'saved',
154
+ saved_location_id: 'loc-1',
155
+ is_archived: true,
156
+ }),
157
+ ]);
158
+ (0, globals_1.expect)(groups).toHaveLength(1);
159
+ (0, globals_1.expect)(groups[0]).toMatchObject({ kind: 'unknown' });
160
+ (0, globals_1.expect)(groups[0]?.assets.map((a) => a.id)).toEqual(['a1', 'a2']);
161
+ });
162
+ (0, globals_1.it)('returns an empty array for empty input', () => {
163
+ (0, globals_1.expect)((0, rentals_1.groupAssetsByLocation)([])).toEqual([]);
164
+ });
165
+ });
166
+ (0, globals_1.describe)('resolveTaskLabel', () => {
167
+ const options = [
168
+ { id: 'custom-1', label: 'Winterize' },
169
+ { id: 'custom-archived', label: 'Old Task' },
170
+ ];
171
+ (0, globals_1.it)('returns null for Normal Job (null/undefined/empty)', () => {
172
+ (0, globals_1.expect)((0, rentals_1.resolveTaskLabel)(null)).toBeNull();
173
+ (0, globals_1.expect)((0, rentals_1.resolveTaskLabel)(undefined)).toBeNull();
174
+ (0, globals_1.expect)((0, rentals_1.resolveTaskLabel)('')).toBeNull();
175
+ });
176
+ (0, globals_1.it)('resolves every preset key from PRESET_TASK_LABELS', () => {
177
+ for (const key of rentals_1.PRESET_TASK_KEYS) {
178
+ (0, globals_1.expect)((0, rentals_1.resolveTaskLabel)(key)).toBe(rentals_1.PRESET_TASK_LABELS[key]);
179
+ }
180
+ });
181
+ (0, globals_1.it)('resolves custom uuids from the provided rows, including archived', () => {
182
+ (0, globals_1.expect)((0, rentals_1.resolveTaskLabel)('custom-1', options)).toBe('Winterize');
183
+ (0, globals_1.expect)((0, rentals_1.resolveTaskLabel)('custom-archived', options)).toBe('Old Task');
184
+ });
185
+ (0, globals_1.it)('falls back for an unknown uuid instead of crashing', () => {
186
+ (0, globals_1.expect)((0, rentals_1.resolveTaskLabel)('deleted-row-id', options)).toBe(rentals_1.UNRESOLVED_TASK_LABEL);
187
+ });
188
+ (0, globals_1.it)('falls back for a custom uuid when options are not loaded', () => {
189
+ (0, globals_1.expect)((0, rentals_1.resolveTaskLabel)('custom-1')).toBe(rentals_1.UNRESOLVED_TASK_LABEL);
190
+ (0, globals_1.expect)((0, rentals_1.resolveTaskLabel)('custom-1', null)).toBe(rentals_1.UNRESOLVED_TASK_LABEL);
191
+ });
192
+ });
193
+ (0, globals_1.describe)('inferPrefillAssetId', () => {
194
+ (0, globals_1.it)('returns null when there are no prior tasks', () => {
195
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([])).toBeNull();
196
+ });
197
+ (0, globals_1.it)('prefills the asset of a single prior drop-off', () => {
198
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([{ task_type: 'drop_off', asset_id: 'asset-1' }])).toBe('asset-1');
199
+ });
200
+ (0, globals_1.it)('ignores drop-offs with no asset selected', () => {
201
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([{ task_type: 'drop_off', asset_id: null }])).toBeNull();
202
+ });
203
+ (0, globals_1.it)('returns null when prior drop-offs name different assets', () => {
204
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([
205
+ { task_type: 'drop_off', asset_id: 'asset-1' },
206
+ { task_type: 'drop_off', asset_id: 'asset-2' },
207
+ ])).toBeNull();
208
+ });
209
+ (0, globals_1.it)('still prefills when two drop-offs name the same asset', () => {
210
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([
211
+ { task_type: 'drop_off', asset_id: 'asset-1' },
212
+ { task_type: 'drop_off', asset_id: 'asset-1' },
213
+ ])).toBe('asset-1');
214
+ });
215
+ (0, globals_1.it)('ignores non-drop-off tasks, including swap and normal jobs', () => {
216
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([
217
+ { task_type: 'swap', asset_id: 'asset-1' },
218
+ { task_type: 'pick_up', asset_id: 'asset-2' },
219
+ { task_type: null, asset_id: null },
220
+ ])).toBeNull();
221
+ });
222
+ });
223
+ (0, globals_1.describe)('inferNextTaskType', () => {
224
+ (0, globals_1.it)('returns null with no tasks', () => {
225
+ (0, globals_1.expect)((0, rentals_1.inferNextTaskType)([])).toBeNull();
226
+ });
227
+ (0, globals_1.it)('biases to pick_up after a lone drop_off', () => {
228
+ (0, globals_1.expect)((0, rentals_1.inferNextTaskType)([{ task_type: 'drop_off' }])).toBe('pick_up');
229
+ });
230
+ (0, globals_1.it)('fires past a non-drop_off previous row', () => {
231
+ (0, globals_1.expect)((0, rentals_1.inferNextTaskType)([{ task_type: 'drop_off' }, { task_type: 'service' }])).toBe('pick_up');
232
+ });
233
+ (0, globals_1.it)('is suppressed once a pick_up exists', () => {
234
+ (0, globals_1.expect)((0, rentals_1.inferNextTaskType)([{ task_type: 'drop_off' }, { task_type: 'pick_up' }])).toBeNull();
235
+ });
236
+ (0, globals_1.it)('is order-independent: pick_up before drop_off still suppresses', () => {
237
+ (0, globals_1.expect)((0, rentals_1.inferNextTaskType)([{ task_type: 'pick_up' }, { task_type: 'drop_off' }])).toBeNull();
238
+ });
239
+ (0, globals_1.it)('returns null for a lone pick_up', () => {
240
+ (0, globals_1.expect)((0, rentals_1.inferNextTaskType)([{ task_type: 'pick_up' }])).toBeNull();
241
+ });
242
+ (0, globals_1.it)('returns null for Normal-only rows', () => {
243
+ (0, globals_1.expect)((0, rentals_1.inferNextTaskType)([{ task_type: null }, { task_type: null }])).toBeNull();
244
+ });
245
+ (0, globals_1.it)('treats custom-uuid tasks as neutral', () => {
246
+ (0, globals_1.expect)((0, rentals_1.inferNextTaskType)([
247
+ { task_type: 'drop_off' },
248
+ { task_type: '5b6f2c1e-0000-4000-8000-000000000000' },
249
+ ])).toBe('pick_up');
250
+ });
251
+ (0, globals_1.it)('treats swap as neutral on both sides', () => {
252
+ (0, globals_1.expect)((0, rentals_1.inferNextTaskType)([{ task_type: 'drop_off' }, { task_type: 'swap' }])).toBe('pick_up');
253
+ (0, globals_1.expect)((0, rentals_1.inferNextTaskType)([{ task_type: 'swap' }])).toBeNull();
254
+ });
255
+ (0, globals_1.it)('still fires with multiple unmatched drop_offs', () => {
256
+ (0, globals_1.expect)((0, rentals_1.inferNextTaskType)([{ task_type: 'drop_off' }, { task_type: 'drop_off' }])).toBe('pick_up');
257
+ });
258
+ });
259
+ (0, globals_1.describe)('formatJobAddress', () => {
260
+ (0, globals_1.it)('formats a full address as "addr1, addr2, city, ST zip"', () => {
261
+ (0, globals_1.expect)((0, rentals_1.formatJobAddress)({
262
+ address: '123 Main St',
263
+ address2: 'Unit B',
264
+ city: 'Springfield',
265
+ state: 'PA',
266
+ zip_code: '19064',
267
+ })).toBe('123 Main St, Unit B, Springfield, PA 19064');
268
+ });
269
+ (0, globals_1.it)('omits the address2 segment when empty or whitespace', () => {
270
+ for (const address2 of [null, undefined, '', ' ']) {
271
+ (0, globals_1.expect)((0, rentals_1.formatJobAddress)({
272
+ address: '123 Main St',
273
+ address2,
274
+ city: 'Springfield',
275
+ state: 'PA',
276
+ zip_code: '19064',
277
+ })).toBe('123 Main St, Springfield, PA 19064');
278
+ }
279
+ });
280
+ (0, globals_1.it)('trims every part', () => {
281
+ (0, globals_1.expect)((0, rentals_1.formatJobAddress)({
282
+ address: ' 123 Main St ',
283
+ address2: ' Unit B ',
284
+ city: ' Springfield ',
285
+ state: ' PA ',
286
+ zip_code: ' 19064 ',
287
+ })).toBe('123 Main St, Unit B, Springfield, PA 19064');
288
+ });
289
+ (0, globals_1.it)('returns null when any required part is missing or blank', () => {
290
+ const base = {
291
+ address: '123 Main St',
292
+ address2: null,
293
+ city: 'Springfield',
294
+ state: 'PA',
295
+ zip_code: '19064',
296
+ };
297
+ (0, globals_1.expect)((0, rentals_1.formatJobAddress)(null)).toBeNull();
298
+ (0, globals_1.expect)((0, rentals_1.formatJobAddress)(undefined)).toBeNull();
299
+ (0, globals_1.expect)((0, rentals_1.formatJobAddress)({ ...base, address: '' })).toBeNull();
300
+ (0, globals_1.expect)((0, rentals_1.formatJobAddress)({ ...base, city: ' ' })).toBeNull();
301
+ (0, globals_1.expect)((0, rentals_1.formatJobAddress)({ ...base, state: '' })).toBeNull();
302
+ (0, globals_1.expect)((0, rentals_1.formatJobAddress)({ ...base, zip_code: '' })).toBeNull();
303
+ });
304
+ });
305
+ (0, globals_1.describe)('planRentalCompletionAssetWrites', () => {
306
+ const jobAddress = {
307
+ address: '12 Main St, Springfield, IL 62701',
308
+ latitude: 39.8,
309
+ longitude: -89.6,
310
+ };
311
+ const jobLocation = {
312
+ kind: 'freeform',
313
+ address: jobAddress.address,
314
+ latitude: jobAddress.latitude,
315
+ longitude: jobAddress.longitude,
316
+ };
317
+ const plan = (taskType, overrides = {}) => (0, rentals_1.planRentalCompletionAssetWrites)({
318
+ taskType,
319
+ assetId: 'asset-1',
320
+ secondaryAssetId: null,
321
+ jobAddress,
322
+ ...overrides,
323
+ });
324
+ (0, globals_1.it)('returns no writes for normal jobs, missing assets, and no-op tasks', () => {
325
+ (0, globals_1.expect)(plan(null)).toEqual([]);
326
+ (0, globals_1.expect)(plan('drop_off', { assetId: null })).toEqual([]);
327
+ (0, globals_1.expect)(plan('repair')).toEqual([]);
328
+ (0, globals_1.expect)(plan('service')).toEqual([]);
329
+ (0, globals_1.expect)(plan('5b6f2c1e-0000-4000-8000-000000000000')).toEqual([]);
330
+ });
331
+ (0, globals_1.it)('drop_off: fullness unknown at the job address', () => {
332
+ (0, globals_1.expect)(plan('drop_off')).toEqual([
333
+ {
334
+ assetId: 'asset-1',
335
+ patch: { fullness: 'unknown' },
336
+ location: jobLocation,
337
+ },
338
+ ]);
339
+ });
340
+ (0, globals_1.it)('skips the location write but keeps the fullness write with no job address', () => {
341
+ (0, globals_1.expect)(plan('drop_off', { jobAddress: null })).toEqual([
342
+ { assetId: 'asset-1', patch: { fullness: 'unknown' } },
343
+ ]);
344
+ (0, globals_1.expect)(plan('live_load', { jobAddress: null })).toEqual([
345
+ { assetId: 'asset-1', patch: { fullness: 'full' } },
346
+ ]);
347
+ (0, globals_1.expect)(plan('dump_and_return', { jobAddress: null })).toEqual([
348
+ { assetId: 'asset-1', patch: { fullness: 'unknown' } },
349
+ ]);
350
+ (0, globals_1.expect)(plan('swap', { jobAddress: null, secondaryAssetId: 'asset-2' })).toEqual([
351
+ { assetId: 'asset-1', patch: { fullness: 'unknown' } },
352
+ { assetId: 'asset-2', patch: { fullness: 'full' } },
353
+ ]);
354
+ });
355
+ (0, globals_1.it)('pick_up: fullness full, no location write (the asset is on the truck)', () => {
356
+ (0, globals_1.expect)(plan('pick_up')).toEqual([
357
+ { assetId: 'asset-1', patch: { fullness: 'full' } },
358
+ ]);
359
+ });
360
+ (0, globals_1.it)('swap: swapped-in asset dropped off first, swapped-out marked full second', () => {
361
+ (0, globals_1.expect)(plan('swap', { secondaryAssetId: 'asset-2' })).toEqual([
362
+ {
363
+ assetId: 'asset-1',
364
+ patch: { fullness: 'unknown' },
365
+ location: jobLocation,
366
+ },
367
+ { assetId: 'asset-2', patch: { fullness: 'full' } },
368
+ ]);
369
+ });
370
+ (0, globals_1.it)('swap with no secondary asset still drops off the swapped-in asset', () => {
371
+ (0, globals_1.expect)(plan('swap')).toEqual([
372
+ {
373
+ assetId: 'asset-1',
374
+ patch: { fullness: 'unknown' },
375
+ location: jobLocation,
376
+ },
377
+ ]);
378
+ });
379
+ (0, globals_1.it)('live_load: full at the job address', () => {
380
+ (0, globals_1.expect)(plan('live_load')).toEqual([
381
+ {
382
+ assetId: 'asset-1',
383
+ patch: { fullness: 'full' },
384
+ location: jobLocation,
385
+ },
386
+ ]);
387
+ });
388
+ (0, globals_1.it)('relocate: moves without touching fullness, and no-ops with no address', () => {
389
+ (0, globals_1.expect)(plan('relocate')).toEqual([
390
+ { assetId: 'asset-1', patch: {}, location: jobLocation },
391
+ ]);
392
+ (0, globals_1.expect)(plan('relocate', { jobAddress: null })).toEqual([]);
393
+ });
394
+ (0, globals_1.it)('dump_and_return: back at the job address with fullness unknown', () => {
395
+ (0, globals_1.expect)(plan('dump_and_return')).toEqual([
396
+ {
397
+ assetId: 'asset-1',
398
+ patch: { fullness: 'unknown' },
399
+ location: jobLocation,
400
+ },
401
+ ]);
402
+ });
403
+ (0, globals_1.it)("never writes 'empty' by default — that needs an answered prompt or a route-plan leg", () => {
404
+ for (const taskType of rentals_1.RENTAL_TASK_KEYS) {
405
+ for (const write of plan(taskType, { secondaryAssetId: 'asset-2' })) {
406
+ (0, globals_1.expect)(write.patch.fullness).not.toBe('empty');
407
+ }
408
+ }
409
+ });
410
+ (0, globals_1.describe)('whereabouts answers', () => {
411
+ (0, globals_1.it)('pick_up: the answer replaces the default write', () => {
412
+ (0, globals_1.expect)(plan('pick_up', {
413
+ whereabouts: {
414
+ fullness: 'empty',
415
+ location: { kind: 'saved', savedLocationId: 'loc-1' },
416
+ },
417
+ })).toEqual([
418
+ {
419
+ assetId: 'asset-1',
420
+ patch: { fullness: 'empty' },
421
+ location: { kind: 'saved', savedLocationId: 'loc-1' },
422
+ },
423
+ ]);
424
+ });
425
+ (0, globals_1.it)('pick_up answered "still at the job address" writes freeform at the job address', () => {
426
+ (0, globals_1.expect)(plan('pick_up', {
427
+ whereabouts: {
428
+ fullness: 'full',
429
+ location: { kind: 'job_address' },
430
+ },
431
+ })).toEqual([
432
+ { assetId: 'asset-1', patch: { fullness: 'full' }, location: jobLocation },
433
+ ]);
434
+ });
435
+ (0, globals_1.it)('a job_address answer on an address-less job keeps the fullness write and skips the location', () => {
436
+ (0, globals_1.expect)(plan('pick_up', {
437
+ jobAddress: null,
438
+ whereabouts: {
439
+ fullness: 'empty',
440
+ location: { kind: 'job_address' },
441
+ },
442
+ })).toEqual([{ assetId: 'asset-1', patch: { fullness: 'empty' } }]);
443
+ });
444
+ (0, globals_1.it)('swap: the answer applies to the swapped-out asset only', () => {
445
+ (0, globals_1.expect)(plan('swap', {
446
+ secondaryAssetId: 'asset-2',
447
+ whereabouts: {
448
+ fullness: 'empty',
449
+ location: { kind: 'saved', savedLocationId: 'loc-1' },
450
+ },
451
+ })).toEqual([
452
+ {
453
+ assetId: 'asset-1',
454
+ patch: { fullness: 'unknown' },
455
+ location: jobLocation,
456
+ },
457
+ {
458
+ assetId: 'asset-2',
459
+ patch: { fullness: 'empty' },
460
+ location: { kind: 'saved', savedLocationId: 'loc-1' },
461
+ },
462
+ ]);
463
+ });
464
+ (0, globals_1.it)('swap with no swapped-out asset ignores the answer', () => {
465
+ (0, globals_1.expect)(plan('swap', {
466
+ whereabouts: {
467
+ fullness: 'empty',
468
+ location: { kind: 'saved', savedLocationId: 'loc-1' },
469
+ },
470
+ })).toEqual([
471
+ {
472
+ assetId: 'asset-1',
473
+ patch: { fullness: 'unknown' },
474
+ location: jobLocation,
475
+ },
476
+ ]);
477
+ });
478
+ (0, globals_1.it)('live_load: a one-off answer writes a temporary location', () => {
479
+ (0, globals_1.expect)(plan('live_load', {
480
+ whereabouts: {
481
+ fullness: 'full',
482
+ location: {
483
+ kind: 'one_off',
484
+ address: '400 Depot Rd, Springfield, IL 62701',
485
+ latitude: 39.75,
486
+ longitude: -89.7,
487
+ },
488
+ },
489
+ })).toEqual([
490
+ {
491
+ assetId: 'asset-1',
492
+ patch: { fullness: 'full' },
493
+ location: {
494
+ kind: 'temporary',
495
+ address: '400 Depot Rd, Springfield, IL 62701',
496
+ latitude: 39.75,
497
+ longitude: -89.7,
498
+ },
499
+ },
500
+ ]);
501
+ });
502
+ (0, globals_1.it)('task types that never ask ignore a stray answer', () => {
503
+ const whereabouts = {
504
+ fullness: 'empty',
505
+ location: { kind: 'saved', savedLocationId: 'loc-1' },
506
+ };
507
+ (0, globals_1.expect)(plan('drop_off', { whereabouts })).toEqual([
508
+ {
509
+ assetId: 'asset-1',
510
+ patch: { fullness: 'unknown' },
511
+ location: jobLocation,
512
+ },
513
+ ]);
514
+ (0, globals_1.expect)(plan('dump_and_return', { whereabouts })).toEqual([
515
+ {
516
+ assetId: 'asset-1',
517
+ patch: { fullness: 'unknown' },
518
+ location: jobLocation,
519
+ },
520
+ ]);
521
+ (0, globals_1.expect)(plan('relocate', { whereabouts })).toEqual([
522
+ { assetId: 'asset-1', patch: {}, location: jobLocation },
523
+ ]);
524
+ (0, globals_1.expect)(plan('repair', { whereabouts })).toEqual([]);
525
+ });
526
+ });
527
+ });
528
+ (0, globals_1.describe)('taskCompletionAsksWhereabouts / whereaboutsAssetIdFor', () => {
529
+ (0, globals_1.it)('asks exactly for the truck-departing task keys', () => {
530
+ for (const key of rentals_1.WHEREABOUTS_TASK_KEYS) {
531
+ (0, globals_1.expect)((0, rentals_1.taskCompletionAsksWhereabouts)(key)).toBe(true);
532
+ }
533
+ (0, globals_1.expect)((0, rentals_1.taskCompletionAsksWhereabouts)('drop_off')).toBe(false);
534
+ (0, globals_1.expect)((0, rentals_1.taskCompletionAsksWhereabouts)('dump_and_return')).toBe(false);
535
+ (0, globals_1.expect)((0, rentals_1.taskCompletionAsksWhereabouts)('relocate')).toBe(false);
536
+ (0, globals_1.expect)((0, rentals_1.taskCompletionAsksWhereabouts)('repair')).toBe(false);
537
+ (0, globals_1.expect)((0, rentals_1.taskCompletionAsksWhereabouts)('5b6f2c1e-0000-4000-8000-000000000000')).toBe(false);
538
+ (0, globals_1.expect)((0, rentals_1.taskCompletionAsksWhereabouts)(null)).toBe(false);
539
+ (0, globals_1.expect)((0, rentals_1.taskCompletionAsksWhereabouts)(undefined)).toBe(false);
540
+ (0, globals_1.expect)((0, rentals_1.taskCompletionAsksWhereabouts)('')).toBe(false);
541
+ });
542
+ (0, globals_1.it)('the prompt is about asset_id for pick_up/live_load and the swapped-out asset for swap', () => {
543
+ const ids = { assetId: 'a', secondaryAssetId: 'b' };
544
+ (0, globals_1.expect)((0, rentals_1.whereaboutsAssetIdFor)({ taskType: 'pick_up', ...ids })).toBe('a');
545
+ (0, globals_1.expect)((0, rentals_1.whereaboutsAssetIdFor)({ taskType: 'live_load', ...ids })).toBe('a');
546
+ (0, globals_1.expect)((0, rentals_1.whereaboutsAssetIdFor)({ taskType: 'swap', ...ids })).toBe('b');
547
+ (0, globals_1.expect)((0, rentals_1.whereaboutsAssetIdFor)({
548
+ taskType: 'swap',
549
+ assetId: 'a',
550
+ secondaryAssetId: null,
551
+ })).toBe(null);
552
+ (0, globals_1.expect)((0, rentals_1.whereaboutsAssetIdFor)({ taskType: 'drop_off', ...ids })).toBe(null);
553
+ (0, globals_1.expect)((0, rentals_1.whereaboutsAssetIdFor)({ taskType: null, ...ids })).toBe(null);
554
+ });
555
+ });
556
+ (0, globals_1.describe)('resolveWhereaboutsLocation', () => {
557
+ const jobAddress = {
558
+ address: '12 Main St, Springfield, IL 62701',
559
+ latitude: 39.8,
560
+ longitude: -89.6,
561
+ };
562
+ (0, globals_1.it)('resolves each choice kind', () => {
563
+ (0, globals_1.expect)((0, rentals_1.resolveWhereaboutsLocation)({ kind: 'saved', savedLocationId: 'loc-1' }, jobAddress)).toEqual({ kind: 'saved', savedLocationId: 'loc-1' });
564
+ (0, globals_1.expect)((0, rentals_1.resolveWhereaboutsLocation)({ kind: 'job_address' }, jobAddress))
565
+ .toEqual({
566
+ kind: 'freeform',
567
+ address: jobAddress.address,
568
+ latitude: jobAddress.latitude,
569
+ longitude: jobAddress.longitude,
570
+ });
571
+ (0, globals_1.expect)((0, rentals_1.resolveWhereaboutsLocation)({ kind: 'job_address' }, null)).toBe(null);
572
+ (0, globals_1.expect)((0, rentals_1.resolveWhereaboutsLocation)({
573
+ kind: 'one_off',
574
+ address: '400 Depot Rd, Springfield, IL 62701',
575
+ latitude: null,
576
+ longitude: null,
577
+ }, jobAddress)).toEqual({
578
+ kind: 'temporary',
579
+ address: '400 Depot Rd, Springfield, IL 62701',
580
+ latitude: null,
581
+ longitude: null,
582
+ });
583
+ });
584
+ (0, globals_1.it)('trims one-off addresses and resolves blank ones to null (no location write)', () => {
585
+ (0, globals_1.expect)((0, rentals_1.resolveWhereaboutsLocation)({
586
+ kind: 'one_off',
587
+ address: ' 400 Depot Rd, Springfield, IL 62701 ',
588
+ latitude: 39.75,
589
+ longitude: -89.7,
590
+ }, jobAddress)).toEqual({
591
+ kind: 'temporary',
592
+ address: '400 Depot Rd, Springfield, IL 62701',
593
+ latitude: 39.75,
594
+ longitude: -89.7,
595
+ });
596
+ (0, globals_1.expect)((0, rentals_1.resolveWhereaboutsLocation)({ kind: 'one_off', address: ' ', latitude: null, longitude: null }, jobAddress)).toBe(null);
597
+ });
598
+ });
599
+ (0, globals_1.describe)('planFailedRentalTaskAssetWrite', () => {
600
+ const jobAddress = {
601
+ address: '12 Main St, Springfield, IL 62701',
602
+ latitude: 39.8,
603
+ longitude: -89.6,
604
+ };
605
+ (0, globals_1.it)('writes location only, never fullness', () => {
606
+ (0, globals_1.expect)((0, rentals_1.planFailedRentalTaskAssetWrite)({
607
+ assetId: 'asset-1',
608
+ choice: { kind: 'saved', savedLocationId: 'loc-1' },
609
+ jobAddress,
610
+ })).toEqual({
611
+ assetId: 'asset-1',
612
+ patch: {},
613
+ location: { kind: 'saved', savedLocationId: 'loc-1' },
614
+ });
615
+ (0, globals_1.expect)((0, rentals_1.planFailedRentalTaskAssetWrite)({
616
+ assetId: 'asset-1',
617
+ choice: {
618
+ kind: 'one_off',
619
+ address: '400 Depot Rd, Springfield, IL 62701',
620
+ latitude: 39.75,
621
+ longitude: -89.7,
622
+ },
623
+ jobAddress: null,
624
+ })).toEqual({
625
+ assetId: 'asset-1',
626
+ patch: {},
627
+ location: {
628
+ kind: 'temporary',
629
+ address: '400 Depot Rd, Springfield, IL 62701',
630
+ latitude: 39.75,
631
+ longitude: -89.7,
632
+ },
633
+ });
634
+ });
635
+ (0, globals_1.it)("no write for 'it didn't move', a missing asset, or an unresolvable job address", () => {
636
+ (0, globals_1.expect)((0, rentals_1.planFailedRentalTaskAssetWrite)({
637
+ assetId: 'asset-1',
638
+ choice: null,
639
+ jobAddress,
640
+ })).toBe(null);
641
+ (0, globals_1.expect)((0, rentals_1.planFailedRentalTaskAssetWrite)({
642
+ assetId: null,
643
+ choice: { kind: 'saved', savedLocationId: 'loc-1' },
644
+ jobAddress,
645
+ })).toBe(null);
646
+ (0, globals_1.expect)((0, rentals_1.planFailedRentalTaskAssetWrite)({
647
+ assetId: 'asset-1',
648
+ choice: { kind: 'job_address' },
649
+ jobAddress: null,
650
+ })).toBe(null);
651
+ (0, globals_1.expect)((0, rentals_1.planFailedRentalTaskAssetWrite)({
652
+ assetId: 'asset-1',
653
+ choice: { kind: 'one_off', address: ' ', latitude: null, longitude: null },
654
+ jobAddress,
655
+ })).toBe(null);
656
+ });
657
+ });
658
+ (0, globals_1.describe)('rentalSizeOptions', () => {
659
+ (0, globals_1.it)('unions non-archived asset sizes with rental item sizes, ascending', () => {
660
+ (0, globals_1.expect)((0, rentals_1.rentalSizeOptions)([
661
+ makeAsset({ id: 'a1', size: 20 }),
662
+ makeAsset({ id: 'a2', size: 30 }),
663
+ makeAsset({ id: 'a3', size: 30 }),
664
+ ], [
665
+ { duration: 3, size: 10 },
666
+ { duration: 5, size: 20 },
667
+ ])).toEqual([10, 20, 30]);
668
+ });
669
+ (0, globals_1.it)('excludes archived and sizeless assets', () => {
670
+ (0, globals_1.expect)((0, rentals_1.rentalSizeOptions)([
671
+ makeAsset({ id: 'a1', size: 40, is_archived: true }),
672
+ makeAsset({ id: 'a2', size: null }),
673
+ makeAsset({ id: 'a3', size: 15 }),
674
+ ], [])).toEqual([15]);
675
+ });
676
+ (0, globals_1.it)('excludes non-rental and sizeless catalog items', () => {
677
+ (0, globals_1.expect)((0, rentals_1.rentalSizeOptions)([], [
678
+ { duration: null, size: 10 },
679
+ { duration: 0, size: 12 },
680
+ { duration: -1, size: 14 },
681
+ { duration: 7, size: null },
682
+ { duration: 7, size: 20 },
683
+ ])).toEqual([20]);
684
+ });
685
+ (0, globals_1.it)('is empty for empty inputs', () => {
686
+ (0, globals_1.expect)((0, rentals_1.rentalSizeOptions)([], [])).toEqual([]);
687
+ });
688
+ });
689
+ (0, globals_1.describe)('isRentalTaskType', () => {
690
+ (0, globals_1.it)('is true exactly for the six rental task keys', () => {
691
+ for (const key of rentals_1.RENTAL_TASK_KEYS) {
692
+ (0, globals_1.expect)((0, rentals_1.isRentalTaskType)(key)).toBe(true);
693
+ }
694
+ (0, globals_1.expect)((0, rentals_1.isRentalTaskType)('repair')).toBe(false);
695
+ (0, globals_1.expect)((0, rentals_1.isRentalTaskType)('service')).toBe(false);
696
+ (0, globals_1.expect)((0, rentals_1.isRentalTaskType)('5b6f2c1e-0000-4000-8000-000000000000')).toBe(false);
697
+ (0, globals_1.expect)((0, rentals_1.isRentalTaskType)(null)).toBe(false);
698
+ (0, globals_1.expect)((0, rentals_1.isRentalTaskType)(undefined)).toBe(false);
699
+ (0, globals_1.expect)((0, rentals_1.isRentalTaskType)('')).toBe(false);
700
+ });
701
+ });
702
+ (0, globals_1.describe)('taskCompletionWritesJobAddress', () => {
703
+ (0, globals_1.it)('is true exactly for the five job-address-writing keys', () => {
704
+ for (const key of rentals_1.JOB_ADDRESS_WRITING_TASK_KEYS) {
705
+ (0, globals_1.expect)((0, rentals_1.taskCompletionWritesJobAddress)(key)).toBe(true);
706
+ }
707
+ (0, globals_1.expect)((0, rentals_1.taskCompletionWritesJobAddress)('pick_up')).toBe(false);
708
+ (0, globals_1.expect)((0, rentals_1.taskCompletionWritesJobAddress)('repair')).toBe(false);
709
+ (0, globals_1.expect)((0, rentals_1.taskCompletionWritesJobAddress)('service')).toBe(false);
710
+ (0, globals_1.expect)((0, rentals_1.taskCompletionWritesJobAddress)('5b6f2c1e-0000-4000-8000-000000000000')).toBe(false);
711
+ (0, globals_1.expect)((0, rentals_1.taskCompletionWritesJobAddress)(null)).toBe(false);
712
+ (0, globals_1.expect)((0, rentals_1.taskCompletionWritesJobAddress)(undefined)).toBe(false);
713
+ (0, globals_1.expect)((0, rentals_1.taskCompletionWritesJobAddress)('')).toBe(false);
714
+ });
715
+ (0, globals_1.it)('mirrors planRentalCompletionAssetWrites: a key is listed iff completing it with an address emits a location write', () => {
716
+ const jobAddress = {
717
+ address: '123 Main St, Springfield, PA 19064',
718
+ latitude: null,
719
+ longitude: null,
720
+ };
721
+ for (const key of rentals_1.PRESET_TASK_KEYS) {
722
+ const writes = (0, rentals_1.planRentalCompletionAssetWrites)({
723
+ taskType: key,
724
+ assetId: 'a1',
725
+ secondaryAssetId: 'a2',
726
+ jobAddress,
727
+ });
728
+ (0, globals_1.expect)(writes.some((write) => write.location != null)).toBe((0, rentals_1.taskCompletionWritesJobAddress)(key));
729
+ }
730
+ });
731
+ });
732
+ (0, globals_1.describe)('inferPrefillAssetId location extension', () => {
733
+ const jobAddress = '123 Main St, Springfield, PA 19064';
734
+ const atJob = (id, kind = 'freeform') => makeAsset({ id, location_kind: kind, location_address: jobAddress });
735
+ (0, globals_1.it)('the within-job rule wins over the location rule', () => {
736
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([{ task_type: 'drop_off', asset_id: 'asset-1' }], {
737
+ assets: [atJob('asset-2')],
738
+ jobAddress,
739
+ })).toBe('asset-1');
740
+ });
741
+ (0, globals_1.it)('falls back to the single asset at the job address', () => {
742
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], {
743
+ assets: [atJob('asset-2'), makeAsset({ id: 'asset-3' })],
744
+ jobAddress,
745
+ })).toBe('asset-2');
746
+ });
747
+ (0, globals_1.it)('counts temporary and freeform assets at the address together', () => {
748
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], {
749
+ assets: [atJob('asset-2', 'freeform'), atJob('asset-3', 'temporary')],
750
+ jobAddress,
751
+ })).toBeNull();
752
+ });
753
+ (0, globals_1.it)('returns null with multiple assets at the address', () => {
754
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], {
755
+ assets: [atJob('asset-2'), atJob('asset-3')],
756
+ jobAddress,
757
+ })).toBeNull();
758
+ });
759
+ (0, globals_1.it)('ambiguous within-job drop-offs fall through to the location rule', () => {
760
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([
761
+ { task_type: 'drop_off', asset_id: 'asset-1' },
762
+ { task_type: 'drop_off', asset_id: 'asset-2' },
763
+ ], { assets: [atJob('asset-3')], jobAddress })).toBe('asset-3');
764
+ });
765
+ (0, globals_1.it)('is disabled with no context, a null address, or a blank address', () => {
766
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], undefined)).toBeNull();
767
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], { assets: [atJob('asset-2')], jobAddress: null })).toBeNull();
768
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], { assets: [atJob('asset-2')], jobAddress: ' ' })).toBeNull();
769
+ });
770
+ (0, globals_1.it)('excludes archived assets via the shared grouping', () => {
771
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], {
772
+ assets: [atJob('asset-2'), { ...atJob('asset-3'), is_archived: true }],
773
+ jobAddress,
774
+ })).toBe('asset-2');
775
+ });
776
+ });
777
+ (0, globals_1.describe)('inferPrefillAssetId size rule', () => {
778
+ const jobAddress = '123 Main St, Springfield, PA 19064';
779
+ const atJob = (id, size) => makeAsset({
780
+ id,
781
+ size,
782
+ location_kind: 'freeform',
783
+ location_address: jobAddress,
784
+ });
785
+ (0, globals_1.it)('tiebreaks multiple assets at the address to the single size match', () => {
786
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], {
787
+ assets: [atJob('asset-15', 15), atJob('asset-20', 20)],
788
+ jobAddress,
789
+ size: 15,
790
+ })).toBe('asset-15');
791
+ });
792
+ (0, globals_1.it)('stays null when several assets at the address match the size', () => {
793
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], {
794
+ assets: [atJob('a', 15), atJob('b', 15), atJob('c', 20)],
795
+ jobAddress,
796
+ size: 15,
797
+ })).toBeNull();
798
+ });
799
+ (0, globals_1.it)('never prefills a lone asset whose size mismatches', () => {
800
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], {
801
+ assets: [atJob('asset-20', 20)],
802
+ jobAddress,
803
+ size: 15,
804
+ })).toBeNull();
805
+ });
806
+ (0, globals_1.it)('a lone matching or sizeless asset still prefills', () => {
807
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], {
808
+ assets: [atJob('a', 15)],
809
+ jobAddress,
810
+ size: 15,
811
+ })).toBe('a');
812
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], {
813
+ assets: [atJob('a', null)],
814
+ jobAddress,
815
+ size: 15,
816
+ })).toBe('a');
817
+ });
818
+ (0, globals_1.it)('a sizeless asset stays a candidate, keeping the address ambiguous', () => {
819
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], {
820
+ assets: [atJob('a', 15), atJob('b', null)],
821
+ jobAddress,
822
+ size: 15,
823
+ })).toBeNull();
824
+ });
825
+ (0, globals_1.it)('a null task size keeps the count-only rule', () => {
826
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([], {
827
+ assets: [atJob('a', 20)],
828
+ jobAddress,
829
+ size: null,
830
+ })).toBe('a');
831
+ });
832
+ (0, globals_1.it)('vetoes a within-job drop-off candidate whose size mismatches', () => {
833
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([{ task_type: 'drop_off', asset_id: 'dropped' }], {
834
+ assets: [makeAsset({ id: 'dropped', size: 20 }), atJob('at-site', 15)],
835
+ jobAddress,
836
+ size: 15,
837
+ })).toBe('at-site');
838
+ });
839
+ (0, globals_1.it)('a within-job candidate missing from the asset list is not vetoed', () => {
840
+ (0, globals_1.expect)((0, rentals_1.inferPrefillAssetId)([{ task_type: 'drop_off', asset_id: 'ghost' }], {
841
+ assets: [],
842
+ jobAddress,
843
+ size: 15,
844
+ })).toBe('ghost');
845
+ });
846
+ });
847
+ (0, globals_1.describe)('getAcceptedRentalSizes', () => {
848
+ const catalog = [
849
+ { item_name: '20 Yard Dumpster', duration: 7, size: 20 },
850
+ { item_name: '10 Yard Dumpster', duration: 3, size: 10 },
851
+ { item_name: 'Porta Potty Rental', duration: 7, size: null },
852
+ { item_name: 'Junk Removal', duration: null, size: 15 },
853
+ { item_name: 'Bad Duration', duration: 0, size: 30 },
854
+ ];
855
+ (0, globals_1.it)('resolves sizes by exact item name from the job line items', () => {
856
+ (0, globals_1.expect)((0, rentals_1.getAcceptedRentalSizes)([{ item_name: '20 Yard Dumpster' }, { item_name: '10 Yard Dumpster' }], catalog)).toEqual([10, 20]);
857
+ });
858
+ (0, globals_1.it)('excludes non-rental items even when they have a size', () => {
859
+ (0, globals_1.expect)((0, rentals_1.getAcceptedRentalSizes)([{ item_name: 'Junk Removal' }, { item_name: 'Bad Duration' }], catalog)).toEqual([]);
860
+ });
861
+ (0, globals_1.it)('ignores null item sizes (never wildcards)', () => {
862
+ (0, globals_1.expect)((0, rentals_1.getAcceptedRentalSizes)([{ item_name: 'Porta Potty Rental' }, { item_name: '20 Yard Dumpster' }], catalog)).toEqual([20]);
863
+ });
864
+ (0, globals_1.it)('ignores job items that resolve to no catalog entry', () => {
865
+ (0, globals_1.expect)((0, rentals_1.getAcceptedRentalSizes)([{ item_name: 'Renamed Item' }], catalog)).toEqual([]);
866
+ });
867
+ (0, globals_1.it)('unions duplicate catalog names, independent of row order', () => {
868
+ const rows = [
869
+ { item_name: 'Dup', duration: 7, size: 20 },
870
+ { item_name: 'Dup', duration: 7, size: null },
871
+ { item_name: 'Dup', duration: 5, size: 10 },
872
+ ];
873
+ const jobItems = [{ item_name: 'Dup' }];
874
+ (0, globals_1.expect)((0, rentals_1.getAcceptedRentalSizes)(jobItems, rows)).toEqual([10, 20]);
875
+ (0, globals_1.expect)((0, rentals_1.getAcceptedRentalSizes)(jobItems, [...rows].reverse())).toEqual([
876
+ 10, 20,
877
+ ]);
878
+ });
879
+ (0, globals_1.it)('dedupes sizes across items and returns them ascending', () => {
880
+ (0, globals_1.expect)((0, rentals_1.getAcceptedRentalSizes)([{ item_name: '20 Yard Dumpster' }, { item_name: 'Also Twenty' }], [...catalog, { item_name: 'Also Twenty', duration: 2, size: 20 }])).toEqual([20]);
881
+ });
882
+ (0, globals_1.it)('is empty for empty inputs', () => {
883
+ (0, globals_1.expect)((0, rentals_1.getAcceptedRentalSizes)([], catalog)).toEqual([]);
884
+ (0, globals_1.expect)((0, rentals_1.getAcceptedRentalSizes)([{ item_name: '20 Yard Dumpster' }], [])).toEqual([]);
885
+ });
886
+ });
887
+ (0, globals_1.describe)('toRentalAsset', () => {
888
+ (0, globals_1.it)('narrows the generated string columns and passes the rest through', () => {
889
+ const row = {
890
+ id: 'asset-1',
891
+ company_id: 'company-1',
892
+ created_at: '2026-08-07T00:00:00.000Z',
893
+ updated_at: null,
894
+ label: 'Big Green',
895
+ size: 20,
896
+ fullness: 'full',
897
+ location_kind: 'unknown',
898
+ saved_location_id: null,
899
+ location_address: null,
900
+ location_latitude: null,
901
+ location_longitude: null,
902
+ is_archived: false,
903
+ };
904
+ (0, globals_1.expect)((0, rentals_1.toRentalAsset)(row)).toEqual({ ...row, fullness: 'full' });
905
+ });
906
+ });
907
+ (0, globals_1.describe)('isAssetSizeMismatch', () => {
908
+ (0, globals_1.it)('never warns for a sizeless asset (unknown is not a mismatch)', () => {
909
+ (0, globals_1.expect)((0, rentals_1.isAssetSizeMismatch)(null, [20])).toBe(false);
910
+ (0, globals_1.expect)((0, rentals_1.isAssetSizeMismatch)(undefined, [20])).toBe(false);
911
+ });
912
+ (0, globals_1.it)('never warns when there is nothing to compare against', () => {
913
+ (0, globals_1.expect)((0, rentals_1.isAssetSizeMismatch)(10, [])).toBe(false);
914
+ });
915
+ (0, globals_1.it)('does not warn on an exact size match', () => {
916
+ (0, globals_1.expect)((0, rentals_1.isAssetSizeMismatch)(20, [10, 20])).toBe(false);
917
+ });
918
+ (0, globals_1.it)('warns when the size matches none of the accepted sizes', () => {
919
+ (0, globals_1.expect)((0, rentals_1.isAssetSizeMismatch)(30, [10, 20])).toBe(true);
920
+ });
921
+ (0, globals_1.it)('compares decimal sizes exactly', () => {
922
+ (0, globals_1.expect)((0, rentals_1.isAssetSizeMismatch)(1.5, [1.5])).toBe(false);
923
+ (0, globals_1.expect)((0, rentals_1.isAssetSizeMismatch)(1.5, [15])).toBe(true);
924
+ });
925
+ });
926
+ (0, globals_1.describe)('preset task consts', () => {
927
+ (0, globals_1.it)('covers every preset key with a label, and nothing else', () => {
928
+ (0, globals_1.expect)(Object.keys(rentals_1.PRESET_TASK_LABELS).sort()).toEqual([...rentals_1.PRESET_TASK_KEYS].sort());
929
+ });
930
+ (0, globals_1.it)('only lists known preset keys per industry', () => {
931
+ for (const keys of Object.values(rentals_1.INDUSTRY_PRESET_TASKS)) {
932
+ for (const key of keys) {
933
+ (0, globals_1.expect)(rentals_1.PRESET_TASK_KEYS).toContain(key);
934
+ }
935
+ }
936
+ });
937
+ (0, globals_1.it)('matches the spec order for the canonical vocabulary', () => {
938
+ (0, globals_1.expect)(rentals_1.PRESET_TASK_KEYS).toEqual([
939
+ 'drop_off',
940
+ 'pick_up',
941
+ 'swap',
942
+ 'live_load',
943
+ 'relocate',
944
+ 'dump_and_return',
945
+ 'repair',
946
+ 'service',
947
+ ]);
948
+ });
949
+ (0, globals_1.it)('lists the six rental task keys, all of them presets', () => {
950
+ (0, globals_1.expect)(rentals_1.RENTAL_TASK_KEYS).toEqual([
951
+ 'drop_off',
952
+ 'pick_up',
953
+ 'swap',
954
+ 'live_load',
955
+ 'relocate',
956
+ 'dump_and_return',
957
+ ]);
958
+ for (const key of rentals_1.RENTAL_TASK_KEYS) {
959
+ (0, globals_1.expect)(rentals_1.PRESET_TASK_KEYS).toContain(key);
960
+ }
961
+ });
962
+ (0, globals_1.it)('matches the spec order and contents for dumpster', () => {
963
+ (0, globals_1.expect)(rentals_1.INDUSTRY_PRESET_TASKS.dumpster).toEqual([
964
+ 'drop_off',
965
+ 'pick_up',
966
+ 'swap',
967
+ 'live_load',
968
+ 'relocate',
969
+ 'dump_and_return',
970
+ ]);
971
+ });
972
+ (0, globals_1.it)('matches the spec order and contents for equipment', () => {
973
+ (0, globals_1.expect)(rentals_1.INDUSTRY_PRESET_TASKS.equipment).toEqual([
974
+ 'drop_off',
975
+ 'pick_up',
976
+ 'repair',
977
+ 'swap',
978
+ ]);
979
+ });
980
+ (0, globals_1.it)('matches the spec order and contents for portable_toilet', () => {
981
+ (0, globals_1.expect)(rentals_1.INDUSTRY_PRESET_TASKS.portable_toilet).toEqual([
982
+ 'drop_off',
983
+ 'pick_up',
984
+ 'service',
985
+ 'relocate',
986
+ ]);
987
+ });
988
+ (0, globals_1.it)('seeds named industries with their full offered list', () => {
989
+ (0, globals_1.expect)(rentals_1.INDUSTRY_DEFAULT_TASKS.dumpster).toEqual(rentals_1.INDUSTRY_PRESET_TASKS.dumpster);
990
+ (0, globals_1.expect)(rentals_1.INDUSTRY_DEFAULT_TASKS.equipment).toEqual(rentals_1.INDUSTRY_PRESET_TASKS.equipment);
991
+ (0, globals_1.expect)(rentals_1.INDUSTRY_DEFAULT_TASKS.portable_toilet).toEqual(rentals_1.INDUSTRY_PRESET_TASKS.portable_toilet);
992
+ });
993
+ (0, globals_1.it)('seeds other with the basic drop-off/pick-up pair', () => {
994
+ (0, globals_1.expect)(rentals_1.INDUSTRY_DEFAULT_TASKS.other).toEqual(['drop_off', 'pick_up']);
995
+ });
996
+ (0, globals_1.it)('only seeds known preset keys per industry', () => {
997
+ for (const keys of Object.values(rentals_1.INDUSTRY_DEFAULT_TASKS)) {
998
+ for (const key of keys) {
999
+ (0, globals_1.expect)(rentals_1.PRESET_TASK_KEYS).toContain(key);
1000
+ }
1001
+ }
1002
+ });
1003
+ });
1004
+ (0, globals_1.describe)('orderedPresetKeysForIndustry', () => {
1005
+ (0, globals_1.it)('returns the industry offered list for named industries', () => {
1006
+ (0, globals_1.expect)((0, rentals_1.orderedPresetKeysForIndustry)('dumpster')).toEqual(rentals_1.INDUSTRY_PRESET_TASKS.dumpster);
1007
+ (0, globals_1.expect)((0, rentals_1.orderedPresetKeysForIndustry)('equipment')).toEqual(rentals_1.INDUSTRY_PRESET_TASKS.equipment);
1008
+ (0, globals_1.expect)((0, rentals_1.orderedPresetKeysForIndustry)('portable_toilet')).toEqual(rentals_1.INDUSTRY_PRESET_TASKS.portable_toilet);
1009
+ });
1010
+ (0, globals_1.it)('falls back to the full canonical vocabulary for other/unset', () => {
1011
+ (0, globals_1.expect)((0, rentals_1.orderedPresetKeysForIndustry)('other')).toEqual(rentals_1.PRESET_TASK_KEYS);
1012
+ (0, globals_1.expect)((0, rentals_1.orderedPresetKeysForIndustry)(null)).toEqual(rentals_1.PRESET_TASK_KEYS);
1013
+ (0, globals_1.expect)((0, rentals_1.orderedPresetKeysForIndustry)(undefined)).toEqual(rentals_1.PRESET_TASK_KEYS);
1014
+ });
1015
+ });
1016
+ (0, globals_1.describe)('presetSortOrder', () => {
1017
+ (0, globals_1.it)('ranks presets by their index in the industry order', () => {
1018
+ (0, globals_1.expect)((0, rentals_1.presetSortOrder)('portable_toilet', 'service')).toBe(2);
1019
+ (0, globals_1.expect)((0, rentals_1.presetSortOrder)('portable_toilet', 'relocate')).toBe(3);
1020
+ (0, globals_1.expect)((0, rentals_1.presetSortOrder)('equipment', 'repair')).toBe(2);
1021
+ (0, globals_1.expect)((0, rentals_1.presetSortOrder)('equipment', 'swap')).toBe(3);
1022
+ (0, globals_1.expect)((0, rentals_1.presetSortOrder)('other', 'repair')).toBe(6);
1023
+ (0, globals_1.expect)((0, rentals_1.presetSortOrder)(null, 'service')).toBe(7);
1024
+ });
1025
+ (0, globals_1.it)('ranks presets outside the industry list as stranded', () => {
1026
+ (0, globals_1.expect)((0, rentals_1.presetSortOrder)('portable_toilet', 'swap')).toBe(rentals_1.STRANDED_PRESET_SORT_ORDER);
1027
+ (0, globals_1.expect)((0, rentals_1.presetSortOrder)('equipment', 'live_load')).toBe(rentals_1.STRANDED_PRESET_SORT_ORDER);
1028
+ });
1029
+ (0, globals_1.it)('keeps every preset rank below stranded, and stranded below customs', () => {
1030
+ (0, globals_1.expect)(rentals_1.STRANDED_PRESET_SORT_ORDER).toBeGreaterThan(rentals_1.PRESET_TASK_KEYS.length - 1);
1031
+ (0, globals_1.expect)(rentals_1.CUSTOM_TASK_SORT_ORDER).toBeGreaterThan(rentals_1.STRANDED_PRESET_SORT_ORDER);
1032
+ });
1033
+ });
1034
+ //# sourceMappingURL=rentals.test.js.map