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,74 @@
1
+ -- RLS for the contracts tables.
2
+ --
3
+ -- Affected tables: contract_template, contract, contract_counter,
4
+ -- contract_signature, item_contract_requirement, settings_contract.
5
+ --
6
+ -- contract_template, contract, item_contract_requirement, settings_contract:
7
+ -- the standard house policy — any authenticated staff member of the owning
8
+ -- company can CRUD. End customers never touch these tables directly; the
9
+ -- public signing page and the booking form go through service-role API
10
+ -- routes, so there are deliberately NO anon policies or grants here.
11
+ --
12
+ -- contract_counter: staff CRUD like job_counter, because the numbering
13
+ -- triggers on contract run with the invoking staff member's privileges and
14
+ -- must be able to upsert the company's counter row.
15
+ --
16
+ -- contract_signature: staff can READ the audit record but never write it —
17
+ -- rows are inserted only by the service-role sign_contract() function, so
18
+ -- the signing audit trail is immutable even to the company that owns it.
19
+
20
+ alter table "public"."contract_template" enable row level security;
21
+ alter table "public"."contract" enable row level security;
22
+ alter table "public"."contract_counter" enable row level security;
23
+ alter table "public"."contract_signature" enable row level security;
24
+ alter table "public"."item_contract_requirement" enable row level security;
25
+ alter table "public"."settings_contract" enable row level security;
26
+
27
+ grant all on table "public"."contract_template" to "authenticated";
28
+ grant all on table "public"."contract_template" to "service_role";
29
+ grant all on table "public"."contract" to "authenticated";
30
+ grant all on table "public"."contract" to "service_role";
31
+ grant all on table "public"."contract_counter" to "authenticated";
32
+ grant all on table "public"."contract_counter" to "service_role";
33
+ grant select on table "public"."contract_signature" to "authenticated";
34
+ grant all on table "public"."contract_signature" to "service_role";
35
+ grant all on table "public"."item_contract_requirement" to "authenticated";
36
+ grant all on table "public"."item_contract_requirement" to "service_role";
37
+ grant all on table "public"."settings_contract" to "authenticated";
38
+ grant all on table "public"."settings_contract" to "service_role";
39
+
40
+ create policy "Anyone with matching company_id can CRUD"
41
+ on "public"."contract_template"
42
+ to "authenticated"
43
+ using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
44
+ with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
45
+
46
+ create policy "Anyone with matching company_id can CRUD"
47
+ on "public"."contract"
48
+ to "authenticated"
49
+ using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
50
+ with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
51
+
52
+ create policy "Anyone with matching company_id can CRUD"
53
+ on "public"."contract_counter"
54
+ to "authenticated"
55
+ using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
56
+ with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
57
+
58
+ create policy "Anyone with matching company_id can read"
59
+ on "public"."contract_signature"
60
+ for select
61
+ to "authenticated"
62
+ using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
63
+
64
+ create policy "Anyone with matching company_id can CRUD"
65
+ on "public"."item_contract_requirement"
66
+ to "authenticated"
67
+ using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
68
+ with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
69
+
70
+ create policy "Anyone with matching company_id can CRUD"
71
+ on "public"."settings_contract"
72
+ to "authenticated"
73
+ using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
74
+ with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
@@ -0,0 +1,92 @@
1
+ -- Transactional contract signing.
2
+ --
3
+ -- Signing must atomically (1) verify the contract is still signable,
4
+ -- (2) write the immutable contract_signature audit row — including a hash
5
+ -- of the body text as it stands inside this transaction — and (3) flip the
6
+ -- contract to Signed. Done as separate PostgREST calls, a failure between
7
+ -- steps could leave a Signed contract with no audit row (or vice versa), so
8
+ -- it is one function, one transaction.
9
+ --
10
+ -- The row lock plus the status precondition resolves the double-submit
11
+ -- race: a second concurrent sign call blocks on the lock, then fails the
12
+ -- precondition because the first call already moved the row to Signed.
13
+ --
14
+ -- security definer + service_role-only: the sole caller is
15
+ -- /api/customer-sign-contract, which authenticates the customer by the
16
+ -- contract's hashed link token before calling (the public signing page has
17
+ -- no authenticated user). The caller uploads the signature PNG first and
18
+ -- passes its storage path; a failed function call leaves an orphaned PNG at
19
+ -- worst, never a signed contract without its audit row.
20
+
21
+ create or replace function "public"."sign_contract"(
22
+ "p_contract_id" uuid,
23
+ "p_signer_name" text,
24
+ "p_signer_ip" text,
25
+ "p_signer_user_agent" text,
26
+ "p_signature_storage_path" text
27
+ ) returns void
28
+ language plpgsql
29
+ security definer
30
+ set search_path = public
31
+ as $$
32
+ declare
33
+ v_contract "public"."contract"%rowtype;
34
+ begin
35
+ select * into v_contract
36
+ from "public"."contract"
37
+ where "id" = p_contract_id
38
+ for update;
39
+
40
+ if not found then
41
+ raise exception 'contract not found'
42
+ using errcode = 'P0002';
43
+ end if;
44
+
45
+ if v_contract."status" not in ('Sent', 'Opened') then
46
+ raise exception 'contract is not in a signable status: %',
47
+ v_contract."status"
48
+ using errcode = 'P0003';
49
+ end if;
50
+
51
+ if p_signer_name is null or btrim(p_signer_name) = '' then
52
+ raise exception 'signer name is required'
53
+ using errcode = 'P0004';
54
+ end if;
55
+
56
+ insert into "public"."contract_signature" (
57
+ "company_id", "contract_id", "signer_name", "signer_ip",
58
+ "signer_user_agent", "body_sha256", "signature_storage_path"
59
+ ) values (
60
+ v_contract."company_id",
61
+ v_contract."id",
62
+ btrim(p_signer_name),
63
+ p_signer_ip,
64
+ p_signer_user_agent,
65
+ encode(sha256(convert_to(v_contract."body", 'UTF8')), 'hex'),
66
+ p_signature_storage_path
67
+ );
68
+
69
+ update "public"."contract"
70
+ set "status" = 'Signed',
71
+ "signed_at" = now()
72
+ where "id" = v_contract."id";
73
+ end;
74
+ $$;
75
+
76
+ alter function "public"."sign_contract"(uuid, text, text, text, text)
77
+ owner to "postgres";
78
+
79
+ -- security definer + service_role-only: the public signing route is the
80
+ -- sole caller; no authenticated/anon path exists.
81
+ revoke all on function "public"."sign_contract"(
82
+ uuid, text, text, text, text
83
+ ) from public;
84
+ revoke all on function "public"."sign_contract"(
85
+ uuid, text, text, text, text
86
+ ) from "anon";
87
+ revoke all on function "public"."sign_contract"(
88
+ uuid, text, text, text, text
89
+ ) from "authenticated";
90
+ grant execute on function "public"."sign_contract"(
91
+ uuid, text, text, text, text
92
+ ) to "service_role";
@@ -0,0 +1,34 @@
1
+ -- Company-level rentals/assets settings. One row per company, created
2
+ -- lazily. Unlike settings_contract (default-on opt-out), this is
3
+ -- DEFAULT-OFF OPT-IN: an absent row means rentals disabled, owner modal
4
+ -- unanswered, no industry chosen. The one-time owner modal (C2) is the
5
+ -- activation moment that first writes the row. The dumpster_asset_tracking
6
+ -- entitlement gates the feature; rentals_enabled additionally hides the
7
+ -- schedule-card Type dropdown and the rest of the rentals UI when off.
8
+ --
9
+ -- The online-booking availability-enforcement toggle from the spec is
10
+ -- deliberately NOT here — its column lands on the anon-readable
11
+ -- settings_booking (the public booking page reads that table directly)
12
+ -- when online booking for rentals is built.
13
+
14
+ create table if not exists "public"."settings_rental" (
15
+ "company_id" "uuid" not null,
16
+ "created_at" timestamp with time zone default "now"() not null,
17
+ "updated_at" timestamp with time zone,
18
+ "rentals_enabled" boolean default false not null,
19
+ -- Null until the company picks one. Selects which preset task list the
20
+ -- settings task manager offers. Mirrored by RENTAL_INDUSTRIES in
21
+ -- src/server-safe/rentals.ts — the two lists must stay in sync.
22
+ "industry_preset" "text",
23
+ "owner_modal_answered" boolean default false not null,
24
+ constraint "settings_rental_pkey" primary key ("company_id"),
25
+ constraint "settings_rental_industry_preset_check" check (
26
+ "industry_preset" in ('dumpster', 'equipment', 'portable_toilet', 'other')
27
+ )
28
+ );
29
+
30
+ alter table "public"."settings_rental" owner to "postgres";
31
+
32
+ alter table only "public"."settings_rental"
33
+ add constraint "settings_rental_company_id_fkey"
34
+ foreign key ("company_id") references "public"."company"("id") on delete cascade;
@@ -0,0 +1,56 @@
1
+ -- Company-defined named places (lots, dumps, other) shown on maps and in
2
+ -- the task-completion dropdowns. Deliberately NOT the existing "address"
3
+ -- table: that table is client-owned and every consumer assumes its rows
4
+ -- are customer addresses. Lots and landfills aren't always postal
5
+ -- addresses and nothing ever bills or mails to them, so the address here
6
+ -- is ONE freeform display string plus coordinates — never postal-split.
7
+ --
8
+ -- icon is a curated semantic key each platform maps to its own icon
9
+ -- system (web FontAwesome, mobile ThemeIcon); mirrored by
10
+ -- SAVED_LOCATION_ICONS in src/server-safe/rentals.ts. icon_color is a
11
+ -- free-text hex color.
12
+ --
13
+ -- location_type determines which completion-flow dropdowns offer the
14
+ -- location (lots, dumps/landfills, other); mirrored by
15
+ -- SAVED_LOCATION_TYPES in src/server-safe/rentals.ts.
16
+ --
17
+ -- is_archived removes a location from pickers/maps without breaking
18
+ -- assets currently located there; hard delete is additionally blocked by
19
+ -- asset's ON DELETE RESTRICT while any asset points at the row.
20
+
21
+ create table if not exists "public"."saved_location" (
22
+ "id" "uuid" default "gen_random_uuid"() not null,
23
+ "created_at" timestamp with time zone default "now"() not null,
24
+ "updated_at" timestamp with time zone,
25
+ "company_id" "uuid" not null,
26
+ "label" "text" not null,
27
+ "address" "text" not null,
28
+ -- Nullable: geocoding may not have resolved; map pins skip null
29
+ -- coords (same shape as the address table's nullable latitude).
30
+ "latitude" numeric,
31
+ "longitude" numeric,
32
+ "icon" "text" not null,
33
+ "icon_color" "text" not null,
34
+ "location_type" "text" not null,
35
+ "is_archived" boolean default false not null,
36
+ constraint "saved_location_pkey" primary key ("id"),
37
+ -- Backing key for asset's composite tenant-consistent FK, same
38
+ -- rationale as contract's (id, company_id) unique keys.
39
+ constraint "saved_location_id_company_id_key" unique ("id", "company_id"),
40
+ constraint "saved_location_icon_check" check ("icon" in (
41
+ 'park', 'wrench', 'gear', 'house', 'factory',
42
+ 'warehouse', 'truck', 'flag'
43
+ )),
44
+ constraint "saved_location_location_type_check" check (
45
+ "location_type" in ('lot', 'dump', 'other')
46
+ )
47
+ );
48
+
49
+ alter table "public"."saved_location" owner to "postgres";
50
+
51
+ alter table only "public"."saved_location"
52
+ add constraint "saved_location_company_id_fkey"
53
+ foreign key ("company_id") references "public"."company"("id") on delete cascade;
54
+
55
+ create index "saved_location_company_id_idx"
56
+ on "public"."saved_location" ("company_id");
@@ -0,0 +1,52 @@
1
+ -- The company's schedule-card Type-dropdown vocabulary: one row per
2
+ -- SELECTED preset task plus one row per custom task. Exactly one of
3
+ -- preset_key / label is set — preset rows carry a fixed machine key whose
4
+ -- display label lives in PRESET_TASK_LABELS in core; custom rows carry
5
+ -- only their user-typed label ("just a label", no behavior).
6
+ --
7
+ -- job_schedule.task_type (existing dead text column; stays text, no FK)
8
+ -- will store the machine key for preset tasks and this row's uuid AS TEXT
9
+ -- for custom tasks. Consequences:
10
+ -- * preset rows may be hard-deleted on deselect — history resolves
11
+ -- preset labels from the const map, never from these rows;
12
+ -- * custom rows are ARCHIVED, never deleted, or historical schedules
13
+ -- could no longer display their label.
14
+
15
+ create table if not exists "public"."rental_task_option" (
16
+ "id" "uuid" default "gen_random_uuid"() not null,
17
+ "created_at" timestamp with time zone default "now"() not null,
18
+ "updated_at" timestamp with time zone,
19
+ "company_id" "uuid" not null,
20
+ -- Mirrored by PRESET_TASK_KEYS in src/server-safe/rentals.ts — the
21
+ -- two lists must stay in sync.
22
+ "preset_key" "text",
23
+ "label" "text",
24
+ "sort_order" integer default 0 not null,
25
+ -- Custom rows only; preset rows are deleted on deselect.
26
+ "is_archived" boolean default false not null,
27
+ constraint "rental_task_option_pkey" primary key ("id"),
28
+ constraint "rental_task_option_exactly_one_kind_check" check (
29
+ num_nonnulls("preset_key", "label") = 1
30
+ ),
31
+ constraint "rental_task_option_preset_key_check" check (
32
+ "preset_key" is null or "preset_key" in (
33
+ 'drop_off', 'pick_up', 'swap', 'live_load', 'relocate',
34
+ 'dump_and_return', 'take_to_dump', 'take_to_lot',
35
+ 'take_to_other', 'repair', 'service'
36
+ )
37
+ )
38
+ );
39
+
40
+ alter table "public"."rental_task_option" owner to "postgres";
41
+
42
+ alter table only "public"."rental_task_option"
43
+ add constraint "rental_task_option_company_id_fkey"
44
+ foreign key ("company_id") references "public"."company"("id") on delete cascade;
45
+
46
+ -- A preset can be selected at most once per company.
47
+ create unique index "rental_task_option_company_id_preset_key_key"
48
+ on "public"."rental_task_option" ("company_id", "preset_key")
49
+ where "preset_key" is not null;
50
+
51
+ create index "rental_task_option_company_id_idx"
52
+ on "public"."rental_task_option" ("company_id");
@@ -0,0 +1,90 @@
1
+ -- Rental assets (dumpsters first; generic rental/assets naming
2
+ -- elsewhere). Identity is a mandatory user-specified label. TS types call
3
+ -- this RentalAsset — core already exports an unrelated image-picker type
4
+ -- named Asset.
5
+ --
6
+ -- Polymorphic current location, ENFORCED by asset_location_shape_check:
7
+ -- 'unknown' -> all location columns null (never placed / unknown)
8
+ -- 'saved' -> saved_location_id set, freeform columns null
9
+ -- 'freeform' -> freeform address set (e.g. a customer address after a
10
+ -- drop-off), saved_location_id null
11
+ -- 'temporary' -> same columns as freeform, but a one-off ephemeral spot
12
+ -- (take-to-dump/other flows); deliberately NO row
13
+ -- anywhere else, overwritten on the asset's next move
14
+ -- Exactly one reader (getAssetLocation) and one writer (moveAsset via
15
+ -- buildAssetLocationColumns) exist in core; no call site on web or mobile
16
+ -- ever touches the raw location columns.
17
+ --
18
+ -- size is nullable: entered as a number of yards for dumpsters, but
19
+ -- generic assets (equipment, toilets) may have no meaningful numeric
20
+ -- size; per-industry requiredness is a UI concern.
21
+ --
22
+ -- fullness transitions are the completion flows' job (C3); every asset
23
+ -- stays 'unknown' until those ship. Mirrored by ASSET_FULLNESSES in
24
+ -- src/server-safe/rentals.ts.
25
+ --
26
+ -- is_archived, not delete: schedule history (job_schedule.asset_id) will
27
+ -- reference assets once tasks ship. The job_schedule FK's ON DELETE SET
28
+ -- NULL is only a backstop for out-of-band hard deletes.
29
+
30
+ create table if not exists "public"."asset" (
31
+ "id" "uuid" default "gen_random_uuid"() not null,
32
+ "created_at" timestamp with time zone default "now"() not null,
33
+ "updated_at" timestamp with time zone,
34
+ "company_id" "uuid" not null,
35
+ "label" "text" not null,
36
+ "size" numeric,
37
+ "fullness" "text" default 'unknown' not null,
38
+ -- Mirrored by ASSET_LOCATION_KINDS in src/server-safe/rentals.ts.
39
+ "location_kind" "text" default 'unknown' not null,
40
+ "saved_location_id" "uuid",
41
+ "location_address" "text",
42
+ "location_latitude" numeric,
43
+ "location_longitude" numeric,
44
+ "is_archived" boolean default false not null,
45
+ constraint "asset_pkey" primary key ("id"),
46
+ -- Backing key for job_schedule's composite asset FKs.
47
+ constraint "asset_id_company_id_key" unique ("id", "company_id"),
48
+ constraint "asset_fullness_check" check (
49
+ "fullness" in ('unknown', 'empty', 'full')
50
+ ),
51
+ constraint "asset_location_kind_check" check (
52
+ "location_kind" in ('unknown', 'saved', 'freeform', 'temporary')
53
+ ),
54
+ constraint "asset_location_shape_check" check (
55
+ ("location_kind" = 'unknown'
56
+ and "saved_location_id" is null
57
+ and "location_address" is null
58
+ and "location_latitude" is null
59
+ and "location_longitude" is null)
60
+ or ("location_kind" = 'saved'
61
+ and "saved_location_id" is not null
62
+ and "location_address" is null
63
+ and "location_latitude" is null
64
+ and "location_longitude" is null)
65
+ or ("location_kind" in ('freeform', 'temporary')
66
+ and "saved_location_id" is null
67
+ and "location_address" is not null)
68
+ )
69
+ );
70
+
71
+ alter table "public"."asset" owner to "postgres";
72
+
73
+ alter table only "public"."asset"
74
+ add constraint "asset_company_id_fkey"
75
+ foreign key ("company_id") references "public"."company"("id") on delete cascade;
76
+
77
+ -- Composite tenant-consistent FK. RESTRICT, not SET NULL: nulling
78
+ -- saved_location_id would both silently strand the asset's location and
79
+ -- violate asset_location_shape_check (kind 'saved' with a null id), so
80
+ -- deleting an occupied location fails loudly instead — the UI flow is to
81
+ -- archive the location, or move the assets first.
82
+ alter table only "public"."asset"
83
+ add constraint "asset_saved_location_id_fkey"
84
+ foreign key ("saved_location_id", "company_id")
85
+ references "public"."saved_location"("id", "company_id")
86
+ on delete restrict;
87
+
88
+ create index "asset_company_id_idx" on "public"."asset" ("company_id");
89
+ create index "asset_saved_location_id_idx"
90
+ on "public"."asset" ("saved_location_id");
@@ -0,0 +1,39 @@
1
+ -- Wire job_schedule's baseline-era asset columns to the new asset table.
2
+ --
3
+ -- asset_id / secondary_asset_id are dead columns from the pre-migration
4
+ -- baseline dump: written as null by all five web call sites, never read,
5
+ -- no FK, no target table until now. Defensive null-out first so any
6
+ -- conceivable baseline-era garbage can't fail FK validation; expected to
7
+ -- update 0 rows in production.
8
+
9
+ update "public"."job_schedule"
10
+ set "asset_id" = null where "asset_id" is not null;
11
+ update "public"."job_schedule"
12
+ set "secondary_asset_id" = null where "secondary_asset_id" is not null;
13
+
14
+ -- Semantics frozen in the rentals data-model contract: for a Swap task,
15
+ -- asset_id is the DROP-OFF (swapped-in) asset and secondary_asset_id is
16
+ -- the PICK-UP (swapped-out) asset; every single-asset task uses asset_id
17
+ -- only and leaves secondary_asset_id null.
18
+ --
19
+ -- Composite (fk, company_id) FKs so a schedule can never point at another
20
+ -- tenant's asset, with the PG15 column-list ON DELETE SET NULL form so a
21
+ -- hard-deleted asset nulls only the pointer, never company_id. Archival
22
+ -- is the product path for assets; this is a backstop.
23
+
24
+ alter table only "public"."job_schedule"
25
+ add constraint "job_schedule_asset_id_fkey"
26
+ foreign key ("asset_id", "company_id")
27
+ references "public"."asset"("id", "company_id")
28
+ on delete set null ("asset_id");
29
+
30
+ alter table only "public"."job_schedule"
31
+ add constraint "job_schedule_secondary_asset_id_fkey"
32
+ foreign key ("secondary_asset_id", "company_id")
33
+ references "public"."asset"("id", "company_id")
34
+ on delete set null ("secondary_asset_id");
35
+
36
+ create index "job_schedule_asset_id_idx"
37
+ on "public"."job_schedule" ("asset_id");
38
+ create index "job_schedule_secondary_asset_id_idx"
39
+ on "public"."job_schedule" ("secondary_asset_id");
@@ -0,0 +1,48 @@
1
+ -- RLS for the rentals foundation tables.
2
+ --
3
+ -- Affected tables: settings_rental, saved_location, rental_task_option,
4
+ -- asset.
5
+ --
6
+ -- All four use the standard house policy (contracts template): any
7
+ -- authenticated staff member of the owning company can CRUD. End
8
+ -- customers never touch these tables directly — online booking's
9
+ -- availability counts will go through a service-role web API route — so
10
+ -- there are deliberately NO anon policies or grants here.
11
+
12
+ alter table "public"."settings_rental" enable row level security;
13
+ alter table "public"."saved_location" enable row level security;
14
+ alter table "public"."rental_task_option" enable row level security;
15
+ alter table "public"."asset" enable row level security;
16
+
17
+ grant all on table "public"."settings_rental" to "authenticated";
18
+ grant all on table "public"."settings_rental" to "service_role";
19
+ grant all on table "public"."saved_location" to "authenticated";
20
+ grant all on table "public"."saved_location" to "service_role";
21
+ grant all on table "public"."rental_task_option" to "authenticated";
22
+ grant all on table "public"."rental_task_option" to "service_role";
23
+ grant all on table "public"."asset" to "authenticated";
24
+ grant all on table "public"."asset" to "service_role";
25
+
26
+ create policy "Anyone with matching company_id can CRUD"
27
+ on "public"."settings_rental"
28
+ to "authenticated"
29
+ using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
30
+ with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
31
+
32
+ create policy "Anyone with matching company_id can CRUD"
33
+ on "public"."saved_location"
34
+ to "authenticated"
35
+ using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
36
+ with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
37
+
38
+ create policy "Anyone with matching company_id can CRUD"
39
+ on "public"."rental_task_option"
40
+ to "authenticated"
41
+ using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
42
+ with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
43
+
44
+ create policy "Anyone with matching company_id can CRUD"
45
+ on "public"."asset"
46
+ to "authenticated"
47
+ using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
48
+ with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
@@ -0,0 +1,7 @@
1
+ -- C2 (task creation & display): any-time flag for task-typed schedules.
2
+ -- start_time/end_time stay NOT NULL — when any_time is true the client still
3
+ -- writes a real all-day range (00:00–23:59 of the selected date) so lagging
4
+ -- mobile clients render sanely. Default false keeps every existing row and
5
+ -- every normal-job write unchanged.
6
+ alter table job_schedule
7
+ add column any_time boolean not null default false;
@@ -0,0 +1,48 @@
1
+ -- C3 (task completion): destination for the take-to task family
2
+ -- (take_to_dump / take_to_lot / take_to_other). Two shapes, mutually
3
+ -- exclusive, both-null allowed (destination not chosen yet — the completion
4
+ -- flow asks for it at latest before completing):
5
+ -- saved -> target_saved_location_id set, freeform columns all null
6
+ -- freeform -> target_address set (one-off spot); lat/lng nullable because
7
+ -- geocoding is best-effort (saved_location precedent)
8
+ -- Exactly one reader (getTaskTarget) and one writer (buildTaskTargetColumns)
9
+ -- exist in src/server-safe/rentals.ts — no call site touches the raw columns,
10
+ -- same rule as the asset location columns.
11
+
12
+ alter table "public"."job_schedule"
13
+ add column "target_saved_location_id" "uuid",
14
+ add column "target_address" "text",
15
+ add column "target_latitude" numeric,
16
+ add column "target_longitude" numeric;
17
+
18
+ alter table "public"."job_schedule"
19
+ add constraint "job_schedule_target_location_shape_check" check (
20
+ (
21
+ "target_saved_location_id" is null
22
+ and "target_address" is null
23
+ and "target_latitude" is null
24
+ and "target_longitude" is null
25
+ )
26
+ or (
27
+ "target_saved_location_id" is not null
28
+ and "target_address" is null
29
+ and "target_latitude" is null
30
+ and "target_longitude" is null
31
+ )
32
+ or (
33
+ "target_saved_location_id" is null
34
+ and "target_address" is not null
35
+ )
36
+ );
37
+
38
+ -- Composite tenant-consistent FK, ON DELETE RESTRICT like
39
+ -- asset_saved_location_id_fkey: SET NULL would silently strand a task's
40
+ -- destination. Product-flow deletes are archive-first anyway (C1 semantics).
41
+ alter table only "public"."job_schedule"
42
+ add constraint "job_schedule_target_saved_location_id_fkey"
43
+ foreign key ("target_saved_location_id", "company_id")
44
+ references "public"."saved_location"("id", "company_id")
45
+ on delete restrict;
46
+
47
+ create index "job_schedule_target_saved_location_id_idx"
48
+ on "public"."job_schedule" ("target_saved_location_id");
@@ -0,0 +1,53 @@
1
+ -- C3 (task completion): old-client guard. A task-typed schedule must have its
2
+ -- asset selected before it can be completed — the completion flow writes the
3
+ -- asset's fullness/location, and a null asset would silently skip the state
4
+ -- machine. Fires ONLY on the transition INTO 'Completed':
5
+ -- * re-saving an already-Completed row -> old.status = 'Completed', skip
6
+ -- * un-completing (Completed -> anything) -> new.status <> 'Completed', skip
7
+ -- * Canceled -> new.status <> 'Completed', skip
8
+ -- * normal jobs (task_type null) -> skip
9
+ -- Triggers fire for service_role too (unlike RLS), so this also covers the
10
+ -- API v1 routes and bulk import. Recurring this_and_future fan-out never hits
11
+ -- task rows (tasks cannot recur), so the guard cannot abort those batches.
12
+ -- The raise text surfaces RAW in lagging C2-era clients' error toasts, so it
13
+ -- is worded as an instruction.
14
+
15
+ create or replace function "public"."prevent_task_completion_without_asset"()
16
+ returns trigger
17
+ language plpgsql
18
+ security definer
19
+ set search_path = ''
20
+ as $$
21
+ begin
22
+ if new."status" <> 'Completed' or new."task_type" is null then
23
+ return new;
24
+ end if;
25
+ if TG_OP = 'UPDATE' and old."status" = 'Completed' then
26
+ return new;
27
+ end if;
28
+
29
+ if new."asset_id" is null then
30
+ raise exception 'Select the asset before completing this task.'
31
+ using errcode = '23514',
32
+ constraint = 'job_schedule_completion_requires_asset';
33
+ end if;
34
+
35
+ if new."task_type" = 'swap' and new."secondary_asset_id" is null then
36
+ raise exception 'Select both assets before completing this swap task.'
37
+ using errcode = '23514',
38
+ constraint = 'job_schedule_completion_requires_asset';
39
+ end if;
40
+
41
+ return new;
42
+ end;
43
+ $$;
44
+
45
+ alter function "public"."prevent_task_completion_without_asset"() owner to "postgres";
46
+
47
+ -- Column list applies to UPDATE only (INSERT always fires): a row cannot
48
+ -- transition into Completed without status in the SET list, and the existing
49
+ -- outbound-event triggers on job_schedule are AFTER, so ordering is clean.
50
+ create or replace trigger "job_schedule_completion_guard"
51
+ before insert or update of "status" on "public"."job_schedule"
52
+ for each row
53
+ execute function "public"."prevent_task_completion_without_asset"();
@@ -0,0 +1,7 @@
1
+ -- C4 (schedule views): manual ordering key for the schedule List View.
2
+ -- Meaningful only for any-time tasks (task_type non-null and any_time true);
3
+ -- null means the default position 0 (top of day). Timed rows order by
4
+ -- start_time and ignore this. The key is day-relative, so date moves never
5
+ -- rewrite it. Reordering writes only this column — never start_time/end_time.
6
+ alter table job_schedule
7
+ add column list_sort_key numeric null;
@@ -0,0 +1,11 @@
1
+ -- C5 (online booking for rentals): rental duration on pricebook/booking items.
2
+ -- Non-null duration is THE rental marker — an item with a duration IS a
3
+ -- rental; null keeps it a normal service. Value is the rental length in
4
+ -- whole days: pick-up date = drop-off date + duration (duration 1 => pick-up
5
+ -- the next day). The CHECK forbids 0/negatives — no same-day rentals.
6
+ -- No RLS change needed: item's "If is_booking, public can read" policy makes
7
+ -- the column anon-readable on booking items, which is exactly what the public
8
+ -- booking page needs.
9
+ alter table item
10
+ add column duration integer null
11
+ constraint item_duration_check check (duration > 0);
@@ -0,0 +1,9 @@
1
+ -- C5 (online booking for rentals): availability-enforcement toggle.
2
+ -- Lives on the anon-readable settings_booking (NOT settings_rental) because
3
+ -- the public booking page reads this table directly — reserved by the
4
+ -- comment in 20260807014710_create_settings_rental.sql. Default false =
5
+ -- spec's "infinite availability": rental days never block. When true, the
6
+ -- booking form (and customer-create-job's server re-check) limit rental
7
+ -- bookings by the company's real non-archived asset count.
8
+ alter table settings_booking
9
+ add column enforce_rental_availability boolean not null default false;
@@ -0,0 +1,10 @@
1
+ -- C5 (online booking for rentals): "Rental agreement not signed" warning
2
+ -- flag, mirroring unpaid_upfront's boolean|null shape (null/false = no
3
+ -- warning). Denormalized on the job because mobile cannot cheaply resolve
4
+ -- item_contract_requirement per render. Set when a rental (duration) item
5
+ -- with contract requirements lands on a job with no Signed contract —
6
+ -- server-side for booking-created jobs, at item-add for manual jobs.
7
+ -- Cleared automatically by /api/customer-sign-contract when the job's last
8
+ -- outstanding contract is signed, or manually dismissed like unpaid_upfront.
9
+ alter table job
10
+ add column unsigned_rental_agreement boolean null;