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.
- package/README.md +53 -0
- package/dist/Provider.d.ts +21 -0
- package/dist/Provider.d.ts.map +1 -0
- package/dist/Provider.js +61 -0
- package/dist/Provider.js.map +1 -0
- package/dist/dist/Provider.d.ts +21 -0
- package/dist/dist/Provider.d.ts.map +1 -0
- package/dist/dist/Provider.js +61 -0
- package/dist/dist/Provider.js.map +1 -0
- package/dist/dist/index.d.ts +45 -0
- package/dist/dist/index.d.ts.map +1 -0
- package/dist/dist/index.js +61 -0
- package/dist/dist/index.js.map +1 -0
- package/dist/dist/interfaces/index.d.ts +1238 -0
- package/dist/dist/interfaces/index.d.ts.map +1 -0
- package/dist/dist/interfaces/index.js +3 -0
- package/dist/dist/interfaces/index.js.map +1 -0
- package/dist/dist/migrations/20260608222757_remote_schema.sql +5666 -0
- package/dist/dist/migrations/20260611174826_add_job_item_recurring_id_to_job_item.sql +7 -0
- package/dist/dist/migrations/20260625224612_add_dashboard_guided_tour_dismissed_to_settings_user.sql +5 -0
- package/dist/dist/migrations/20260627031433_support_chat_tables.sql +115 -0
- package/dist/dist/migrations/20260627031434_support_chat_rls.sql +37 -0
- package/dist/dist/migrations/20260704170209_add_estimate_scheduling.sql +121 -0
- package/dist/dist/migrations/20260704170210_add_estimate_scheduling_rls.sql +42 -0
- package/dist/dist/migrations/20260704235034_add_estimate_reminder_settings.sql +11 -0
- package/dist/dist/migrations/20260707003825_blocked_number_table.sql +32 -0
- package/dist/dist/migrations/20260707003826_blocked_number_rls.sql +22 -0
- package/dist/dist/migrations/20260709191055_sms_opt_out_table.sql +38 -0
- package/dist/dist/migrations/20260709191056_sms_opt_out_rls.sql +21 -0
- package/dist/dist/migrations/20260709214507_job_time_entry_table.sql +70 -0
- package/dist/dist/migrations/20260709214508_job_time_entry_rls.sql +21 -0
- package/dist/dist/migrations/20260711185956_phone_call_table.sql +99 -0
- package/dist/dist/migrations/20260711185957_phone_call_rls.sql +25 -0
- package/dist/dist/migrations/20260712014705_ai_voice_assistant_settings.sql +71 -0
- package/dist/dist/migrations/20260712014706_ai_voice_assistant_settings_rls.sql +14 -0
- package/dist/dist/migrations/20260712014707_ai_prompt_templates.sql +28 -0
- package/dist/dist/migrations/20260712014708_ai_prompt_templates_rls.sql +5 -0
- package/dist/dist/migrations/20260712014709_ai_prompt_templates_seed.sql +77 -0
- package/dist/dist/migrations/20260715011550_reminder_dispatch_table.sql +47 -0
- package/dist/dist/migrations/20260715011551_reminder_dispatch_rls.sql +22 -0
- package/dist/dist/migrations/20260715192923_dedup_sequence_contact_add_unique_constraint.sql +27 -0
- package/dist/dist/migrations/20260716194420_add_employee_location_tracking.sql +146 -0
- package/dist/dist/migrations/20260716194421_add_employee_location_tracking_rls.sql +154 -0
- package/dist/dist/migrations/20260716194422_get_client_map_last_completed_jobs.sql +28 -0
- package/dist/dist/migrations/20260717144535_add_blast_email_invalid_skipped_count.sql +2 -0
- package/dist/dist/migrations/20260717162900_create_blast_email_chunk.sql +36 -0
- package/dist/dist/migrations/20260717162901_add_blast_email_chunk_rls.sql +5 -0
- package/dist/dist/migrations/20260717162902_add_blast_email_chunk_progress_columns.sql +3 -0
- package/dist/dist/migrations/20260717162903_add_blast_email_bounce_tracking_columns.sql +4 -0
- package/dist/dist/migrations/20260717162904_create_email_hard_bounced.sql +23 -0
- package/dist/dist/migrations/20260717162905_add_email_hard_bounced_rls.sql +5 -0
- package/dist/dist/migrations/20260717164837_add_sequence_contact_sent_at.sql +19 -0
- package/dist/dist/migrations/20260717170920_add_sequence_contact_claim_index.sql +12 -0
- package/dist/dist/migrations/20260719215139_create_outbound_event.sql +59 -0
- package/dist/dist/migrations/20260719215140_create_outbound_event_rls.sql +16 -0
- package/dist/dist/migrations/20260719215141_create_webhook_delivery.sql +99 -0
- package/dist/dist/migrations/20260719215142_create_webhook_delivery_rls.sql +11 -0
- package/dist/dist/migrations/20260719215143_outbound_event_triggers.sql +219 -0
- package/dist/dist/migrations/20260719215144_create_api_key.sql +34 -0
- package/dist/dist/migrations/20260719215146_create_api_key_rls.sql +12 -0
- package/dist/dist/migrations/20260719215147_webhook_subscription_add_secret_active.sql +28 -0
- package/dist/dist/migrations/20260719215148_api_aggregate_create_functions.sql +479 -0
- package/dist/dist/migrations/20260721174837_webhook_subscription_generic_endpoints.sql +41 -0
- package/dist/dist/migrations/20260721185631_webhook_outbox_retention.sql +87 -0
- package/dist/dist/migrations/20260721190304_create_qb_sync_task.sql +120 -0
- package/dist/dist/migrations/20260721190306_qb_sync_task_rls.sql +8 -0
- package/dist/dist/migrations/20260721190307_qb_mapping_orphan_fks.sql +29 -0
- package/dist/dist/migrations/20260721190308_qb_task_retention.sql +90 -0
- package/dist/dist/migrations/20260721234401_create_permission_role.sql +83 -0
- package/dist/dist/migrations/20260721234402_permission_role_rls.sql +22 -0
- package/dist/dist/migrations/20260721234403_user_role_add_permission_role_id.sql +12 -0
- package/dist/dist/migrations/20260721234404_seed_permission_roles.sql +100 -0
- package/dist/dist/migrations/20260721234405_backfill_user_role_permission_role_id.sql +20 -0
- package/dist/dist/migrations/20260722193800_permission_role_add_manage_employees.sql +56 -0
- package/dist/dist/migrations/20260723025606_staging_new_employee_company_read_rls.sql +10 -0
- package/dist/dist/migrations/20260723134328_create_google_lsa_integration.sql +1016 -0
- package/dist/dist/migrations/20260723134329_google_lsa_integration_rls.sql +205 -0
- package/dist/dist/migrations/20260723150640_google_lsa_hardening.sql +169 -0
- package/dist/dist/migrations/20260723150641_google_lsa_hardening_rls.sql +12 -0
- package/dist/dist/migrations/20260724230721_google_lsa_facebook_exclusivity_attach.sql +104 -0
- package/dist/dist/migrations/20260724230722_google_lsa_facebook_exclusivity_attach_rls.sql +20 -0
- package/dist/dist/migrations/20260725172630_add_message_pagination_and_search.sql +265 -0
- package/dist/dist/migrations/20260725172631_add_message_pagination_and_search_rls.sql +72 -0
- package/dist/dist/migrations/20260725172632_optimize_message_thread_pagination_search.sql +245 -0
- package/dist/dist/migrations/20260725172633_harden_message_search_and_photo_pagination.sql +256 -0
- package/dist/dist/migrations/20260725172634_fix_message_thread_line_filter.sql +250 -0
- package/dist/dist/migrations/20260725174948_google_lsa_attach_bing_exclusivity_guard.sql +23 -0
- package/dist/dist/migrations/20260725200430_client_portal_settings.sql +41 -0
- package/dist/dist/migrations/20260725200431_client_portal_settings_rls.sql +21 -0
- package/dist/dist/migrations/20260725200433_client_portal_auth_tables.sql +81 -0
- package/dist/dist/migrations/20260725200434_client_portal_auth_rls.sql +18 -0
- package/dist/dist/migrations/20260725200435_portal_claim_login_attempt.sql +36 -0
- package/dist/dist/migrations/20260725200436_portal_appointment_request.sql +39 -0
- package/dist/dist/migrations/20260725200437_portal_appointment_request_rls.sql +10 -0
- package/dist/dist/migrations/20260725210000_google_reserve_integration.sql +85 -0
- package/dist/dist/migrations/20260725210001_google_reserve_integration_rls.sql +10 -0
- package/dist/dist/migrations/20260725220000_add_analytics_query_indexes.sql +47 -0
- package/dist/dist/migrations/20260725230000_onboarding_preload_data.sql +1074 -0
- package/dist/dist/migrations/20260725230001_onboarding_preload_data_rls.sql +40 -0
- package/dist/dist/migrations/20260725230002_add_pricebook_query_indexes.sql +13 -0
- package/dist/dist/migrations/20260726000000_facebook_ads_integration.sql +1538 -0
- package/dist/dist/migrations/20260726000001_facebook_ads_integration_rls.sql +356 -0
- package/dist/dist/migrations/20260726000002_facebook_ads_attach_lsa_exclusivity_guard.sql +25 -0
- package/dist/dist/migrations/20260726000003_facebook_ads_attach_bing_exclusivity_guard.sql +22 -0
- package/dist/dist/migrations/20260726010000_create_bing_ads_integration.sql +1112 -0
- package/dist/dist/migrations/20260726010001_bing_ads_integration_rls.sql +227 -0
- package/dist/dist/migrations/20260726220000_add_document_theme_settings.sql +11 -0
- package/dist/dist/migrations/20260726220001_update_document_theme_comments.sql +7 -0
- package/dist/dist/migrations/20260727210319_evolve_tier_for_pricing.sql +68 -0
- package/dist/dist/migrations/20260727210320_create_billing_addon.sql +85 -0
- package/dist/dist/migrations/20260727210321_create_billing_addon_rls.sql +21 -0
- package/dist/dist/migrations/20260728213930_create_usage_metering.sql +189 -0
- package/dist/dist/migrations/20260728213931_create_usage_metering_rls.sql +32 -0
- package/dist/dist/migrations/20260729004305_marketing_charge_txn_functions.sql +242 -0
- package/dist/dist/migrations/20260729004306_marketing_charge_txn_functions_rls.sql +37 -0
- package/dist/dist/migrations/20260729005524_update_deduct_from_balance_errcode.sql +42 -0
- package/dist/dist/migrations/20260730193601_fix_deduct_from_balance_lost_update.sql +46 -0
- package/dist/dist/migrations/20260730193602_add_blast_sms_chunk_reaper_columns.sql +27 -0
- package/dist/dist/migrations/20260731011415_create_google_calendar_connection.sql +84 -0
- package/dist/dist/migrations/20260731011416_google_calendar_connection_rls.sql +23 -0
- package/dist/dist/migrations/20260731011417_create_google_calendar_sync.sql +157 -0
- package/dist/dist/migrations/20260731011418_google_calendar_sync_rls.sql +26 -0
- package/dist/dist/migrations/20260731011419_event_outbound_triggers.sql +28 -0
- package/dist/dist/migrations/20260731011420_add_google_calendar_addon_key.sql +24 -0
- package/dist/dist/migrations/20260731011421_gcal_task_retention.sql +109 -0
- package/dist/dist/migrations/20260731234245_create_estimate_proposal.sql +157 -0
- package/dist/dist/migrations/20260731234247_estimate_proposal_rls.sql +46 -0
- package/dist/dist/migrations/20260731234248_add_proposal_estimate_settings.sql +17 -0
- package/dist/dist/migrations/20260731234249_add_estimate_proposals_addon_key.sql +25 -0
- package/dist/dist/migrations/20260731234250_approve_estimate_proposal_function.sql +133 -0
- package/dist/dist/migrations/20260801010609_save_estimate_proposal_function.sql +154 -0
- package/dist/dist/migrations/20260801173554_add_hide_autopilot_branding_setting.sql +6 -0
- package/dist/dist/migrations/20260806230917_add_client_billing_address_columns.sql +9 -0
- package/dist/dist/migrations/20260806230944_api_create_client_billing_address.sql +93 -0
- package/dist/dist/migrations/20260807014702_create_parent_id_company_id_keys.sql +20 -0
- package/dist/dist/migrations/20260807014703_create_contract_template.sql +30 -0
- package/dist/dist/migrations/20260807014704_create_contract.sql +233 -0
- package/dist/dist/migrations/20260807014705_create_contract_signature.sql +39 -0
- package/dist/dist/migrations/20260807014706_create_item_contract_requirement.sql +38 -0
- package/dist/dist/migrations/20260807014707_create_settings_contract.sql +23 -0
- package/dist/dist/migrations/20260807014708_contract_rls.sql +74 -0
- package/dist/dist/migrations/20260807014709_sign_contract_function.sql +92 -0
- package/dist/dist/migrations/20260807014710_create_settings_rental.sql +34 -0
- package/dist/dist/migrations/20260807014711_create_saved_location.sql +56 -0
- package/dist/dist/migrations/20260807014712_create_rental_task_option.sql +52 -0
- package/dist/dist/migrations/20260807014713_create_asset.sql +90 -0
- package/dist/dist/migrations/20260807014714_add_job_schedule_asset_fkeys.sql +39 -0
- package/dist/dist/migrations/20260807014715_rental_rls.sql +48 -0
- package/dist/dist/migrations/20260807014716_add_job_schedule_any_time.sql +7 -0
- package/dist/dist/migrations/20260807014717_add_job_schedule_target_location.sql +48 -0
- package/dist/dist/migrations/20260807014718_job_schedule_completion_guard.sql +53 -0
- package/dist/dist/migrations/20260807014719_add_job_schedule_list_sort_key.sql +7 -0
- package/dist/dist/migrations/20260807014720_add_item_duration.sql +11 -0
- package/dist/dist/migrations/20260807014721_add_settings_booking_enforce_rental_availability.sql +9 -0
- package/dist/dist/migrations/20260807014722_add_job_unsigned_rental_agreement.sql +10 -0
- package/dist/dist/migrations/20260807014723_add_item_size.sql +12 -0
- package/dist/dist/migrations/20260809193533_add_booking_path_button_labels.sql +11 -0
- package/dist/dist/migrations/20260809231721_add_route_distance_cache.sql +37 -0
- package/dist/dist/migrations/20260809231722_route_distance_cache_rls.sql +15 -0
- package/dist/dist/migrations/20260809231723_apply_rental_route_plan_function.sql +275 -0
- package/dist/dist/migrations/20260810171550_add_settings_job_default_job_types.sql +9 -0
- package/dist/dist/migrations/20260810212430_backfill_rental_task_option_sort_order.sql +61 -0
- package/dist/dist/migrations/20260811224317_add_settings_user_dnd_hint_dismissed.sql +9 -0
- package/dist/dist/migrations/20260813174503_repair_user_role_email_drift.sql +59 -0
- package/dist/dist/migrations/20260813174504_sync_user_role_email_trigger.sql +30 -0
- package/dist/dist/migrations/20260813175210_add_event_list_sort_key.sql +5 -0
- package/dist/dist/migrations/20260814172222_add_client_auto_bill_on_completion.sql +6 -0
- package/dist/dist/migrations/20260816160252_create_automation_rule.sql +99 -0
- package/dist/dist/migrations/20260816160253_automation_rule_rls.sql +19 -0
- package/dist/dist/migrations/20260816160254_create_settings_automation.sql +36 -0
- package/dist/dist/migrations/20260816160255_settings_automation_rls.sql +18 -0
- package/dist/dist/migrations/20260816160256_create_automation_event.sql +71 -0
- package/dist/dist/migrations/20260816160257_automation_event_rls.sql +12 -0
- package/dist/dist/migrations/20260816160258_create_automation_run.sql +129 -0
- package/dist/dist/migrations/20260816160259_automation_run_rls.sql +19 -0
- package/dist/dist/migrations/20260816160300_add_client_created_via.sql +25 -0
- package/dist/dist/migrations/20260816160301_add_estimate_sent_at.sql +39 -0
- package/dist/dist/migrations/20260816160302_add_message_automation_ref.sql +10 -0
- package/dist/dist/migrations/20260816160303_automation_event_triggers.sql +236 -0
- package/dist/dist/migrations/20260816160304_automation_retention.sql +142 -0
- package/dist/dist/migrations/20260816202404_add_automation_center_addon_key.sql +26 -0
- package/dist/dist/migrations/20260816225501_widen_automation_rule_trigger_action_checks.sql +25 -0
- package/dist/dist/migrations/20260816225502_widen_automation_event_type_check.sql +18 -0
- package/dist/dist/migrations/20260816225503_add_invoice_id_to_automation_tables.sql +18 -0
- package/dist/dist/migrations/20260816225504_add_job_rescheduled_capture_trigger.sql +51 -0
- package/dist/dist/migrations/20260816225505_add_lead_converted_capture_trigger.sql +26 -0
- package/dist/dist/migrations/20260816225506_fix_booking_request_import_guard.sql +27 -0
- package/dist/dist/migrations/20260816225507_widen_outbound_event_for_automation.sql +38 -0
- package/dist/dist/migrations/20260817002626_add_user_last_login_platform_columns.sql +14 -0
- package/dist/dist/migrations/20260817221703_create_deletion.sql +34 -0
- package/dist/dist/migrations/20260817221707_deletion_rls.sql +21 -0
- package/dist/dist/migrations/20260817221708_add_soft_delete_columns.sql +82 -0
- package/dist/dist/migrations/20260817221709_trash_functions.sql +434 -0
- package/dist/dist/migrations/20260817221710_outbound_event_soft_delete.sql +55 -0
- package/dist/dist/migrations/20260817221711_automation_soft_delete_events.sql +77 -0
- package/dist/dist/migrations/20260817221712_fix_estimate_address_cascade.sql +14 -0
- package/dist/dist/migrations/20260817232630_trash_batch_function.sql +67 -0
- package/dist/dist/migrations/20260819170204_create_email_spam_complaint.sql +23 -0
- package/dist/dist/migrations/20260819170205_add_email_spam_complaint_rls.sql +5 -0
- package/dist/dist/migrations/20260819170206_email_unsubscribed_upsert_constraints.sql +14 -0
- package/dist/dist/migrations/20260819180151_get_suppressed_emails_function.sql +23 -0
- package/dist/dist/migrations/20260819191143_is_deleted_backfill_guard.sql +29 -0
- package/dist/dist/migrations/20260819191144_trash_functions_no_dual_write.sql +319 -0
- package/dist/dist/migrations/20260819191145_client_map_jobs_deleted_at.sql +33 -0
- package/dist/dist/migrations/20260819191147_booking_declined_deleted_at.sql +28 -0
- package/dist/dist/migrations/20260819191148_onboarding_preload_no_address_is_deleted.sql +1019 -0
- package/dist/dist/migrations/20260820222756_add_settings_job_hide_task_timer.sql +2 -0
- package/dist/dist/migrations/20260824234151_add_blast_chunk_recipients.sql +13 -0
- package/dist/dist/migrations/20260824234152_add_blast_pause_cancel_columns.sql +10 -0
- package/dist/dist/migrations/20260825014725_get_job_ids_in_range.sql +42 -0
- package/dist/dist/migrations/20260825194452_add_failed_job_status.sql +15 -0
- package/dist/dist/migrations/20260825194457_remove_take_to_rental_task_options.sql +24 -0
- package/dist/dist/migrations/20260825194458_remove_take_to_job_schedules.sql +12 -0
- package/dist/dist/migrations/20260825194459_rework_apply_rental_route_plan_no_take_to.sql +168 -0
- package/dist/dist/migrations/20260825194500_drop_job_schedule_target_location.sql +24 -0
- package/dist/dist/migrations/20260825194501_add_job_schedule_size.sql +17 -0
- package/dist/dist/migrations/20260825233001_add_job_schedule_id_company_id_key.sql +11 -0
- package/dist/dist/migrations/20260825233002_create_route_plan.sql +52 -0
- package/dist/dist/migrations/20260825233003_create_route_plan_stop.sql +159 -0
- package/dist/dist/migrations/20260825233004_route_plan_rls.sql +32 -0
- package/dist/dist/migrations/20260825233005_apply_rental_route_plan_v2.sql +351 -0
- package/dist/dist/migrations/20260826150934_facebook_ads_lead_ingestion.sql +1711 -0
- package/dist/dist/migrations/20260826151141_facebook_ads_lead_ingestion_rls_v2.sql +43 -0
- package/dist/dist/migrations/20260826234722_facebook_messenger_ingestion.sql +703 -0
- package/dist/dist/migrations/20260826234723_facebook_messenger_ingestion_rls.sql +80 -0
- package/dist/dist/migrations/20260826234724_widen_automations_messenger.sql +46 -0
- package/dist/dist/migrations/20260827100001_add_route_plan_minutes.sql +10 -0
- package/dist/dist/migrations/20260827100002_add_route_plan_stop_leg_minutes.sql +9 -0
- package/dist/dist/migrations/20260827100003_apply_rental_route_plan_v3.sql +341 -0
- package/dist/dist/migrations/20260827230346_apply_rental_route_plan_v4.sql +366 -0
- package/dist/dist/migrations/20260829090911_create_fleet_schema.sql +3698 -0
- package/dist/dist/migrations/20260829090912_fleet_rls.sql +1011 -0
- package/dist/dist/migrations/20260831102212_add_online_booking_address_display.sql +8 -0
- package/dist/dist/providers/AddressProvider.d.ts +9 -0
- package/dist/dist/providers/AddressProvider.d.ts.map +1 -0
- package/dist/dist/providers/AddressProvider.js +207 -0
- package/dist/dist/providers/AddressProvider.js.map +1 -0
- package/dist/dist/providers/AutomationsProvider.d.ts +11 -0
- package/dist/dist/providers/AutomationsProvider.d.ts.map +1 -0
- package/dist/dist/providers/AutomationsProvider.js +170 -0
- package/dist/dist/providers/AutomationsProvider.js.map +1 -0
- package/dist/dist/providers/BlockedNumbersProvider.d.ts +13 -0
- package/dist/dist/providers/BlockedNumbersProvider.d.ts.map +1 -0
- package/dist/dist/providers/BlockedNumbersProvider.js +71 -0
- package/dist/dist/providers/BlockedNumbersProvider.js.map +1 -0
- package/dist/dist/providers/CategoryProvider.d.ts +8 -0
- package/dist/dist/providers/CategoryProvider.d.ts.map +1 -0
- package/dist/dist/providers/CategoryProvider.js +95 -0
- package/dist/dist/providers/CategoryProvider.js.map +1 -0
- package/dist/dist/providers/ClientProvider.d.ts +39 -0
- package/dist/dist/providers/ClientProvider.d.ts.map +1 -0
- package/dist/dist/providers/ClientProvider.js +253 -0
- package/dist/dist/providers/ClientProvider.js.map +1 -0
- package/dist/dist/providers/CompanyProvider.d.ts +7 -0
- package/dist/dist/providers/CompanyProvider.d.ts.map +1 -0
- package/dist/dist/providers/CompanyProvider.js +114 -0
- package/dist/dist/providers/CompanyProvider.js.map +1 -0
- package/dist/dist/providers/DashboardProvider.d.ts +78 -0
- package/dist/dist/providers/DashboardProvider.d.ts.map +1 -0
- package/dist/dist/providers/DashboardProvider.js +568 -0
- package/dist/dist/providers/DashboardProvider.js.map +1 -0
- package/dist/dist/providers/DiscountProvider.d.ts +8 -0
- package/dist/dist/providers/DiscountProvider.d.ts.map +1 -0
- package/dist/dist/providers/DiscountProvider.js +92 -0
- package/dist/dist/providers/DiscountProvider.js.map +1 -0
- package/dist/dist/providers/EmployeesProvider.d.ts +6 -0
- package/dist/dist/providers/EmployeesProvider.d.ts.map +1 -0
- package/dist/dist/providers/EmployeesProvider.js +185 -0
- package/dist/dist/providers/EmployeesProvider.js.map +1 -0
- package/dist/dist/providers/EstimatesProvider.d.ts +16 -0
- package/dist/dist/providers/EstimatesProvider.d.ts.map +1 -0
- package/dist/dist/providers/EstimatesProvider.js +251 -0
- package/dist/dist/providers/EstimatesProvider.js.map +1 -0
- package/dist/dist/providers/EventsProvider.d.ts +4 -0
- package/dist/dist/providers/EventsProvider.d.ts.map +1 -0
- package/dist/dist/providers/EventsProvider.js +24 -0
- package/dist/dist/providers/EventsProvider.js.map +1 -0
- package/dist/dist/providers/FilesProvider.d.ts +17 -0
- package/dist/dist/providers/FilesProvider.d.ts.map +1 -0
- package/dist/dist/providers/FilesProvider.js +201 -0
- package/dist/dist/providers/FilesProvider.js.map +1 -0
- package/dist/dist/providers/InvoicesProvider.d.ts +13 -0
- package/dist/dist/providers/InvoicesProvider.d.ts.map +1 -0
- package/dist/dist/providers/InvoicesProvider.js +207 -0
- package/dist/dist/providers/InvoicesProvider.js.map +1 -0
- package/dist/dist/providers/ItemProvider.d.ts +9 -0
- package/dist/dist/providers/ItemProvider.d.ts.map +1 -0
- package/dist/dist/providers/ItemProvider.js +201 -0
- package/dist/dist/providers/ItemProvider.js.map +1 -0
- package/dist/dist/providers/JobSourceProvider.d.ts +8 -0
- package/dist/dist/providers/JobSourceProvider.d.ts.map +1 -0
- package/dist/dist/providers/JobSourceProvider.js +75 -0
- package/dist/dist/providers/JobSourceProvider.js.map +1 -0
- package/dist/dist/providers/JobTypeProvider.d.ts +8 -0
- package/dist/dist/providers/JobTypeProvider.d.ts.map +1 -0
- package/dist/dist/providers/JobTypeProvider.js +75 -0
- package/dist/dist/providers/JobTypeProvider.js.map +1 -0
- package/dist/dist/providers/JobsProvider.d.ts +35 -0
- package/dist/dist/providers/JobsProvider.d.ts.map +1 -0
- package/dist/dist/providers/JobsProvider.js +863 -0
- package/dist/dist/providers/JobsProvider.js.map +1 -0
- package/dist/dist/providers/MessagesProvider.d.ts +33 -0
- package/dist/dist/providers/MessagesProvider.d.ts.map +1 -0
- package/dist/dist/providers/MessagesProvider.js +415 -0
- package/dist/dist/providers/MessagesProvider.js.map +1 -0
- package/dist/dist/providers/PaymentProvider.d.ts +9 -0
- package/dist/dist/providers/PaymentProvider.d.ts.map +1 -0
- package/dist/dist/providers/PaymentProvider.js +48 -0
- package/dist/dist/providers/PaymentProvider.js.map +1 -0
- package/dist/dist/providers/PermissionRolesProvider.d.ts +5 -0
- package/dist/dist/providers/PermissionRolesProvider.d.ts.map +1 -0
- package/dist/dist/providers/PermissionRolesProvider.js +30 -0
- package/dist/dist/providers/PermissionRolesProvider.js.map +1 -0
- package/dist/dist/providers/PhoneNumberProvider.d.ts +12 -0
- package/dist/dist/providers/PhoneNumberProvider.d.ts.map +1 -0
- package/dist/dist/providers/PhoneNumberProvider.js +184 -0
- package/dist/dist/providers/PhoneNumberProvider.js.map +1 -0
- package/dist/dist/providers/ProfileProvider.d.ts +6 -0
- package/dist/dist/providers/ProfileProvider.d.ts.map +1 -0
- package/dist/dist/providers/ProfileProvider.js +71 -0
- package/dist/dist/providers/ProfileProvider.js.map +1 -0
- package/dist/dist/providers/RentalsProvider.d.ts +28 -0
- package/dist/dist/providers/RentalsProvider.d.ts.map +1 -0
- package/dist/dist/providers/RentalsProvider.js +438 -0
- package/dist/dist/providers/RentalsProvider.js.map +1 -0
- package/dist/dist/providers/SettingsBookingProvider.d.ts +9 -0
- package/dist/dist/providers/SettingsBookingProvider.d.ts.map +1 -0
- package/dist/dist/providers/SettingsBookingProvider.js +163 -0
- package/dist/dist/providers/SettingsBookingProvider.js.map +1 -0
- package/dist/dist/providers/SettingsProvider.d.ts +8 -0
- package/dist/dist/providers/SettingsProvider.d.ts.map +1 -0
- package/dist/dist/providers/SettingsProvider.js +86 -0
- package/dist/dist/providers/SettingsProvider.js.map +1 -0
- package/dist/dist/providers/TagsProvider.d.ts +12 -0
- package/dist/dist/providers/TagsProvider.d.ts.map +1 -0
- package/dist/dist/providers/TagsProvider.js +210 -0
- package/dist/dist/providers/TagsProvider.js.map +1 -0
- package/dist/dist/providers/TimeCardProvider.d.ts +8 -0
- package/dist/dist/providers/TimeCardProvider.d.ts.map +1 -0
- package/dist/dist/providers/TimeCardProvider.js +93 -0
- package/dist/dist/providers/TimeCardProvider.js.map +1 -0
- package/dist/dist/providers/TrashProvider.d.ts +13 -0
- package/dist/dist/providers/TrashProvider.d.ts.map +1 -0
- package/dist/dist/providers/TrashProvider.js +98 -0
- package/dist/dist/providers/TrashProvider.js.map +1 -0
- package/dist/dist/providers/dashboardAnalytics.d.ts +9 -0
- package/dist/dist/providers/dashboardAnalytics.d.ts.map +1 -0
- package/dist/dist/providers/dashboardAnalytics.js +41 -0
- package/dist/dist/providers/dashboardAnalytics.js.map +1 -0
- package/dist/dist/providers/dashboardAnalytics.test.d.ts +2 -0
- package/dist/dist/providers/dashboardAnalytics.test.d.ts.map +1 -0
- package/dist/dist/providers/dashboardAnalytics.test.js +111 -0
- package/dist/dist/providers/dashboardAnalytics.test.js.map +1 -0
- package/dist/dist/server-safe/BlockedNumberFunctions.d.ts +11 -0
- package/dist/dist/server-safe/BlockedNumberFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/BlockedNumberFunctions.js +16 -0
- package/dist/dist/server-safe/BlockedNumberFunctions.js.map +1 -0
- package/dist/dist/server-safe/EmployeeFunctions.d.ts +14 -0
- package/dist/dist/server-safe/EmployeeFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/EmployeeFunctions.js +70 -0
- package/dist/dist/server-safe/EmployeeFunctions.js.map +1 -0
- package/dist/dist/server-safe/EmployeeLocationFunctions.d.ts +7 -0
- package/dist/dist/server-safe/EmployeeLocationFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/EmployeeLocationFunctions.js +47 -0
- package/dist/dist/server-safe/EmployeeLocationFunctions.js.map +1 -0
- package/dist/dist/server-safe/EstimateFunctions.d.ts +15 -0
- package/dist/dist/server-safe/EstimateFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/EstimateFunctions.js +34 -0
- package/dist/dist/server-safe/EstimateFunctions.js.map +1 -0
- package/dist/dist/server-safe/InvoiceFunctions.d.ts +21 -0
- package/dist/dist/server-safe/InvoiceFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/InvoiceFunctions.js +124 -0
- package/dist/dist/server-safe/InvoiceFunctions.js.map +1 -0
- package/dist/dist/server-safe/JobFunctions.d.ts +15 -0
- package/dist/dist/server-safe/JobFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/JobFunctions.js +56 -0
- package/dist/dist/server-safe/JobFunctions.js.map +1 -0
- package/dist/dist/server-safe/PaymentFunctions.d.ts +16 -0
- package/dist/dist/server-safe/PaymentFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/PaymentFunctions.js +80 -0
- package/dist/dist/server-safe/PaymentFunctions.js.map +1 -0
- package/dist/dist/server-safe/PermissionFunctions.d.ts +7 -0
- package/dist/dist/server-safe/PermissionFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/PermissionFunctions.js +39 -0
- package/dist/dist/server-safe/PermissionFunctions.js.map +1 -0
- package/dist/dist/server-safe/TagFunctions.d.ts +18 -0
- package/dist/dist/server-safe/TagFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/TagFunctions.js +52 -0
- package/dist/dist/server-safe/TagFunctions.js.map +1 -0
- package/dist/dist/server-safe/autoJobType.d.ts +16 -0
- package/dist/dist/server-safe/autoJobType.d.ts.map +1 -0
- package/dist/dist/server-safe/autoJobType.js +39 -0
- package/dist/dist/server-safe/autoJobType.js.map +1 -0
- package/dist/dist/server-safe/autoJobType.test.d.ts +2 -0
- package/dist/dist/server-safe/autoJobType.test.d.ts.map +1 -0
- package/dist/dist/server-safe/autoJobType.test.js +83 -0
- package/dist/dist/server-safe/autoJobType.test.js.map +1 -0
- package/dist/dist/server-safe/automations.d.ts +197 -0
- package/dist/dist/server-safe/automations.d.ts.map +1 -0
- package/dist/dist/server-safe/automations.js +757 -0
- package/dist/dist/server-safe/automations.js.map +1 -0
- package/dist/dist/server-safe/automations.test.d.ts +2 -0
- package/dist/dist/server-safe/automations.test.d.ts.map +1 -0
- package/dist/dist/server-safe/automations.test.js +441 -0
- package/dist/dist/server-safe/automations.test.js.map +1 -0
- package/dist/dist/server-safe/constants.d.ts +156 -0
- package/dist/dist/server-safe/constants.d.ts.map +1 -0
- package/dist/dist/server-safe/constants.js +186 -0
- package/dist/dist/server-safe/constants.js.map +1 -0
- package/dist/dist/server-safe/contracts.d.ts +3 -0
- package/dist/dist/server-safe/contracts.d.ts.map +1 -0
- package/dist/dist/server-safe/contracts.js +15 -0
- package/dist/dist/server-safe/contracts.js.map +1 -0
- package/dist/dist/server-safe/database.types.d.ts +9510 -0
- package/dist/dist/server-safe/database.types.d.ts.map +1 -0
- package/dist/dist/server-safe/database.types.js +40 -0
- package/dist/dist/server-safe/database.types.js.map +1 -0
- package/dist/dist/server-safe/entitlements.d.ts +99 -0
- package/dist/dist/server-safe/entitlements.d.ts.map +1 -0
- package/dist/dist/server-safe/entitlements.js +487 -0
- package/dist/dist/server-safe/entitlements.js.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeads.d.ts +225 -0
- package/dist/dist/server-safe/facebookAdsLeads.d.ts.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeads.js +376 -0
- package/dist/dist/server-safe/facebookAdsLeads.js.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeads.test.d.ts +2 -0
- package/dist/dist/server-safe/facebookAdsLeads.test.d.ts.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeads.test.js +189 -0
- package/dist/dist/server-safe/facebookAdsLeads.test.js.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeadsSql.test.d.ts +2 -0
- package/dist/dist/server-safe/facebookAdsLeadsSql.test.d.ts.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeadsSql.test.js +32 -0
- package/dist/dist/server-safe/facebookAdsLeadsSql.test.js.map +1 -0
- package/dist/dist/server-safe/facebookMessenger.d.ts +20 -0
- package/dist/dist/server-safe/facebookMessenger.d.ts.map +1 -0
- package/dist/dist/server-safe/facebookMessenger.js +63 -0
- package/dist/dist/server-safe/facebookMessenger.js.map +1 -0
- package/dist/dist/server-safe/facebookMessenger.test.d.ts +2 -0
- package/dist/dist/server-safe/facebookMessenger.test.d.ts.map +1 -0
- package/dist/dist/server-safe/facebookMessenger.test.js +51 -0
- package/dist/dist/server-safe/facebookMessenger.test.js.map +1 -0
- package/dist/dist/server-safe/helpers.d.ts +78 -0
- package/dist/dist/server-safe/helpers.d.ts.map +1 -0
- package/dist/dist/server-safe/helpers.js +569 -0
- package/dist/dist/server-safe/helpers.js.map +1 -0
- package/dist/dist/server-safe/index.d.ts +30 -0
- package/dist/dist/server-safe/index.d.ts.map +1 -0
- package/dist/dist/server-safe/index.js +46 -0
- package/dist/dist/server-safe/index.js.map +1 -0
- package/dist/dist/server-safe/permissions.d.ts +29 -0
- package/dist/dist/server-safe/permissions.d.ts.map +1 -0
- package/dist/dist/server-safe/permissions.js +180 -0
- package/dist/dist/server-safe/permissions.js.map +1 -0
- package/dist/dist/server-safe/proposals.d.ts +6 -0
- package/dist/dist/server-safe/proposals.d.ts.map +1 -0
- package/dist/dist/server-safe/proposals.js +58 -0
- package/dist/dist/server-safe/proposals.js.map +1 -0
- package/dist/dist/server-safe/rentalAvailability.d.ts +56 -0
- package/dist/dist/server-safe/rentalAvailability.d.ts.map +1 -0
- package/dist/dist/server-safe/rentalAvailability.js +124 -0
- package/dist/dist/server-safe/rentalAvailability.js.map +1 -0
- package/dist/dist/server-safe/rentalAvailability.test.d.ts +2 -0
- package/dist/dist/server-safe/rentalAvailability.test.d.ts.map +1 -0
- package/dist/dist/server-safe/rentalAvailability.test.js +290 -0
- package/dist/dist/server-safe/rentalAvailability.test.js.map +1 -0
- package/dist/dist/server-safe/rentals.d.ts +95 -0
- package/dist/dist/server-safe/rentals.d.ts.map +1 -0
- package/dist/dist/server-safe/rentals.js +432 -0
- package/dist/dist/server-safe/rentals.js.map +1 -0
- package/dist/dist/server-safe/rentals.test.d.ts +2 -0
- package/dist/dist/server-safe/rentals.test.d.ts.map +1 -0
- package/dist/dist/server-safe/rentals.test.js +1034 -0
- package/dist/dist/server-safe/rentals.test.js.map +1 -0
- package/dist/dist/server-safe/routeOptimization.d.ts +155 -0
- package/dist/dist/server-safe/routeOptimization.d.ts.map +1 -0
- package/dist/dist/server-safe/routeOptimization.js +120 -0
- package/dist/dist/server-safe/routeOptimization.js.map +1 -0
- package/dist/dist/server-safe/routeOptimization.test.d.ts +2 -0
- package/dist/dist/server-safe/routeOptimization.test.d.ts.map +1 -0
- package/dist/dist/server-safe/routeOptimization.test.js +234 -0
- package/dist/dist/server-safe/routeOptimization.test.js.map +1 -0
- package/dist/dist/server-safe/routePlanFingerprint.d.ts +13 -0
- package/dist/dist/server-safe/routePlanFingerprint.d.ts.map +1 -0
- package/dist/dist/server-safe/routePlanFingerprint.js +49 -0
- package/dist/dist/server-safe/routePlanFingerprint.js.map +1 -0
- package/dist/dist/server-safe/routePlanFingerprint.test.d.ts +2 -0
- package/dist/dist/server-safe/routePlanFingerprint.test.d.ts.map +1 -0
- package/dist/dist/server-safe/routePlanFingerprint.test.js +68 -0
- package/dist/dist/server-safe/routePlanFingerprint.test.js.map +1 -0
- package/dist/dist/server-safe/scheduleListOrder.d.ts +18 -0
- package/dist/dist/server-safe/scheduleListOrder.d.ts.map +1 -0
- package/dist/dist/server-safe/scheduleListOrder.js +92 -0
- package/dist/dist/server-safe/scheduleListOrder.js.map +1 -0
- package/dist/dist/server-safe/scheduleListOrder.test.d.ts +2 -0
- package/dist/dist/server-safe/scheduleListOrder.test.d.ts.map +1 -0
- package/dist/dist/server-safe/scheduleListOrder.test.js +260 -0
- package/dist/dist/server-safe/scheduleListOrder.test.js.map +1 -0
- package/dist/dist/server-safe/serviceMinutes.d.ts +13 -0
- package/dist/dist/server-safe/serviceMinutes.d.ts.map +1 -0
- package/dist/dist/server-safe/serviceMinutes.js +38 -0
- package/dist/dist/server-safe/serviceMinutes.js.map +1 -0
- package/dist/dist/server-safe/serviceMinutes.test.d.ts +2 -0
- package/dist/dist/server-safe/serviceMinutes.test.d.ts.map +1 -0
- package/dist/dist/server-safe/serviceMinutes.test.js +86 -0
- package/dist/dist/server-safe/serviceMinutes.test.js.map +1 -0
- package/dist/dist/server-safe/settingsSearch.d.ts +24 -0
- package/dist/dist/server-safe/settingsSearch.d.ts.map +1 -0
- package/dist/dist/server-safe/settingsSearch.js +8 -0
- package/dist/dist/server-safe/settingsSearch.js.map +1 -0
- package/dist/dist/server-safe/supportChat.d.ts +59 -0
- package/dist/dist/server-safe/supportChat.d.ts.map +1 -0
- package/dist/dist/server-safe/supportChat.js +56 -0
- package/dist/dist/server-safe/supportChat.js.map +1 -0
- package/dist/dist/server-safe/templates.d.ts +15 -0
- package/dist/dist/server-safe/templates.d.ts.map +1 -0
- package/dist/dist/server-safe/templates.js +91 -0
- package/dist/dist/server-safe/templates.js.map +1 -0
- package/dist/dist/server-safe/templates.test.d.ts +2 -0
- package/dist/dist/server-safe/templates.test.d.ts.map +1 -0
- package/dist/dist/server-safe/templates.test.js +62 -0
- package/dist/dist/server-safe/templates.test.js.map +1 -0
- package/dist/dist/server-safe/trash.d.ts +50 -0
- package/dist/dist/server-safe/trash.d.ts.map +1 -0
- package/dist/dist/server-safe/trash.js +100 -0
- package/dist/dist/server-safe/trash.js.map +1 -0
- package/dist/dist/utils/LogHandler.d.ts +3 -0
- package/dist/dist/utils/LogHandler.d.ts.map +1 -0
- package/dist/dist/utils/LogHandler.js +16 -0
- package/dist/dist/utils/LogHandler.js.map +1 -0
- package/dist/dist/utils/convertSupabaseImagesToAssets.d.ts +28 -0
- package/dist/dist/utils/convertSupabaseImagesToAssets.d.ts.map +1 -0
- package/dist/dist/utils/convertSupabaseImagesToAssets.js +14 -0
- package/dist/dist/utils/convertSupabaseImagesToAssets.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/index.d.ts +1238 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +3 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/providers/AddressProvider.d.ts +9 -0
- package/dist/providers/AddressProvider.d.ts.map +1 -0
- package/dist/providers/AddressProvider.js +207 -0
- package/dist/providers/AddressProvider.js.map +1 -0
- package/dist/providers/AutomationsProvider.d.ts +11 -0
- package/dist/providers/AutomationsProvider.d.ts.map +1 -0
- package/dist/providers/AutomationsProvider.js +170 -0
- package/dist/providers/AutomationsProvider.js.map +1 -0
- package/dist/providers/BlockedNumbersProvider.d.ts +7 -0
- package/dist/providers/BlockedNumbersProvider.d.ts.map +1 -0
- package/dist/providers/BlockedNumbersProvider.js +71 -0
- package/dist/providers/BlockedNumbersProvider.js.map +1 -0
- package/dist/providers/CategoryProvider.d.ts +8 -0
- package/dist/providers/CategoryProvider.d.ts.map +1 -0
- package/dist/providers/CategoryProvider.js +95 -0
- package/dist/providers/CategoryProvider.js.map +1 -0
- package/dist/providers/ClientProvider.d.ts +39 -0
- package/dist/providers/ClientProvider.d.ts.map +1 -0
- package/dist/providers/ClientProvider.js +253 -0
- package/dist/providers/ClientProvider.js.map +1 -0
- package/dist/providers/CompanyProvider.d.ts +7 -0
- package/dist/providers/CompanyProvider.d.ts.map +1 -0
- package/dist/providers/CompanyProvider.js +114 -0
- package/dist/providers/CompanyProvider.js.map +1 -0
- package/dist/providers/DashboardProvider.d.ts +78 -0
- package/dist/providers/DashboardProvider.d.ts.map +1 -0
- package/dist/providers/DashboardProvider.js +568 -0
- package/dist/providers/DashboardProvider.js.map +1 -0
- package/dist/providers/DiscountProvider.d.ts +8 -0
- package/dist/providers/DiscountProvider.d.ts.map +1 -0
- package/dist/providers/DiscountProvider.js +92 -0
- package/dist/providers/DiscountProvider.js.map +1 -0
- package/dist/providers/EmployeesProvider.d.ts +6 -0
- package/dist/providers/EmployeesProvider.d.ts.map +1 -0
- package/dist/providers/EmployeesProvider.js +185 -0
- package/dist/providers/EmployeesProvider.js.map +1 -0
- package/dist/providers/EstimatesProvider.d.ts +16 -0
- package/dist/providers/EstimatesProvider.d.ts.map +1 -0
- package/dist/providers/EstimatesProvider.js +251 -0
- package/dist/providers/EstimatesProvider.js.map +1 -0
- package/dist/providers/EventsProvider.d.ts +4 -0
- package/dist/providers/EventsProvider.d.ts.map +1 -0
- package/dist/providers/EventsProvider.js +24 -0
- package/dist/providers/EventsProvider.js.map +1 -0
- package/dist/providers/FilesProvider.d.ts +17 -0
- package/dist/providers/FilesProvider.d.ts.map +1 -0
- package/dist/providers/FilesProvider.js +201 -0
- package/dist/providers/FilesProvider.js.map +1 -0
- package/dist/providers/InvoicesProvider.d.ts +13 -0
- package/dist/providers/InvoicesProvider.d.ts.map +1 -0
- package/dist/providers/InvoicesProvider.js +207 -0
- package/dist/providers/InvoicesProvider.js.map +1 -0
- package/dist/providers/ItemProvider.d.ts +9 -0
- package/dist/providers/ItemProvider.d.ts.map +1 -0
- package/dist/providers/ItemProvider.js +201 -0
- package/dist/providers/ItemProvider.js.map +1 -0
- package/dist/providers/JobSourceProvider.d.ts +8 -0
- package/dist/providers/JobSourceProvider.d.ts.map +1 -0
- package/dist/providers/JobSourceProvider.js +75 -0
- package/dist/providers/JobSourceProvider.js.map +1 -0
- package/dist/providers/JobTypeProvider.d.ts +8 -0
- package/dist/providers/JobTypeProvider.d.ts.map +1 -0
- package/dist/providers/JobTypeProvider.js +75 -0
- package/dist/providers/JobTypeProvider.js.map +1 -0
- package/dist/providers/JobsProvider.d.ts +20 -0
- package/dist/providers/JobsProvider.d.ts.map +1 -0
- package/dist/providers/JobsProvider.js +863 -0
- package/dist/providers/JobsProvider.js.map +1 -0
- package/dist/providers/MessagesProvider.d.ts +14 -0
- package/dist/providers/MessagesProvider.d.ts.map +1 -0
- package/dist/providers/MessagesProvider.js +415 -0
- package/dist/providers/MessagesProvider.js.map +1 -0
- package/dist/providers/PaymentProvider.d.ts +9 -0
- package/dist/providers/PaymentProvider.d.ts.map +1 -0
- package/dist/providers/PaymentProvider.js +48 -0
- package/dist/providers/PaymentProvider.js.map +1 -0
- package/dist/providers/PermissionRolesProvider.d.ts +5 -0
- package/dist/providers/PermissionRolesProvider.d.ts.map +1 -0
- package/dist/providers/PermissionRolesProvider.js +30 -0
- package/dist/providers/PermissionRolesProvider.js.map +1 -0
- package/dist/providers/PhoneNumberProvider.d.ts +12 -0
- package/dist/providers/PhoneNumberProvider.d.ts.map +1 -0
- package/dist/providers/PhoneNumberProvider.js +184 -0
- package/dist/providers/PhoneNumberProvider.js.map +1 -0
- package/dist/providers/ProfileProvider.d.ts +6 -0
- package/dist/providers/ProfileProvider.d.ts.map +1 -0
- package/dist/providers/ProfileProvider.js +71 -0
- package/dist/providers/ProfileProvider.js.map +1 -0
- package/dist/providers/RentalsProvider.d.ts +28 -0
- package/dist/providers/RentalsProvider.d.ts.map +1 -0
- package/dist/providers/RentalsProvider.js +438 -0
- package/dist/providers/RentalsProvider.js.map +1 -0
- package/dist/providers/SettingsBookingProvider.d.ts +9 -0
- package/dist/providers/SettingsBookingProvider.d.ts.map +1 -0
- package/dist/providers/SettingsBookingProvider.js +163 -0
- package/dist/providers/SettingsBookingProvider.js.map +1 -0
- package/dist/providers/SettingsProvider.d.ts +8 -0
- package/dist/providers/SettingsProvider.d.ts.map +1 -0
- package/dist/providers/SettingsProvider.js +86 -0
- package/dist/providers/SettingsProvider.js.map +1 -0
- package/dist/providers/TagsProvider.d.ts +12 -0
- package/dist/providers/TagsProvider.d.ts.map +1 -0
- package/dist/providers/TagsProvider.js +210 -0
- package/dist/providers/TagsProvider.js.map +1 -0
- package/dist/providers/TimeCardProvider.d.ts +8 -0
- package/dist/providers/TimeCardProvider.d.ts.map +1 -0
- package/dist/providers/TimeCardProvider.js +93 -0
- package/dist/providers/TimeCardProvider.js.map +1 -0
- package/dist/providers/TrashProvider.d.ts +13 -0
- package/dist/providers/TrashProvider.d.ts.map +1 -0
- package/dist/providers/TrashProvider.js +98 -0
- package/dist/providers/TrashProvider.js.map +1 -0
- package/dist/providers/dashboardAnalytics.d.ts +9 -0
- package/dist/providers/dashboardAnalytics.d.ts.map +1 -0
- package/dist/providers/dashboardAnalytics.js +41 -0
- package/dist/providers/dashboardAnalytics.js.map +1 -0
- package/dist/providers/dashboardAnalytics.test.d.ts +2 -0
- package/dist/providers/dashboardAnalytics.test.d.ts.map +1 -0
- package/dist/providers/dashboardAnalytics.test.js +111 -0
- package/dist/providers/dashboardAnalytics.test.js.map +1 -0
- package/dist/server-safe/BlockedNumberFunctions.d.ts +11 -0
- package/dist/server-safe/BlockedNumberFunctions.d.ts.map +1 -0
- package/dist/server-safe/BlockedNumberFunctions.js +16 -0
- package/dist/server-safe/BlockedNumberFunctions.js.map +1 -0
- package/dist/server-safe/EmployeeFunctions.d.ts +14 -0
- package/dist/server-safe/EmployeeFunctions.d.ts.map +1 -0
- package/dist/server-safe/EmployeeFunctions.js +70 -0
- package/dist/server-safe/EmployeeFunctions.js.map +1 -0
- package/dist/server-safe/EmployeeLocationFunctions.d.ts +7 -0
- package/dist/server-safe/EmployeeLocationFunctions.d.ts.map +1 -0
- package/dist/server-safe/EmployeeLocationFunctions.js +47 -0
- package/dist/server-safe/EmployeeLocationFunctions.js.map +1 -0
- package/dist/server-safe/EstimateFunctions.d.ts +15 -0
- package/dist/server-safe/EstimateFunctions.d.ts.map +1 -0
- package/dist/server-safe/EstimateFunctions.js +34 -0
- package/dist/server-safe/EstimateFunctions.js.map +1 -0
- package/dist/server-safe/InvoiceFunctions.d.ts +21 -0
- package/dist/server-safe/InvoiceFunctions.d.ts.map +1 -0
- package/dist/server-safe/InvoiceFunctions.js +124 -0
- package/dist/server-safe/InvoiceFunctions.js.map +1 -0
- package/dist/server-safe/JobFunctions.d.ts +15 -0
- package/dist/server-safe/JobFunctions.d.ts.map +1 -0
- package/dist/server-safe/JobFunctions.js +56 -0
- package/dist/server-safe/JobFunctions.js.map +1 -0
- package/dist/server-safe/PaymentFunctions.d.ts +16 -0
- package/dist/server-safe/PaymentFunctions.d.ts.map +1 -0
- package/dist/server-safe/PaymentFunctions.js +80 -0
- package/dist/server-safe/PaymentFunctions.js.map +1 -0
- package/dist/server-safe/PermissionFunctions.d.ts +7 -0
- package/dist/server-safe/PermissionFunctions.d.ts.map +1 -0
- package/dist/server-safe/PermissionFunctions.js +39 -0
- package/dist/server-safe/PermissionFunctions.js.map +1 -0
- package/dist/server-safe/TagFunctions.d.ts +18 -0
- package/dist/server-safe/TagFunctions.d.ts.map +1 -0
- package/dist/server-safe/TagFunctions.js +52 -0
- package/dist/server-safe/TagFunctions.js.map +1 -0
- package/dist/server-safe/autoJobType.d.ts +16 -0
- package/dist/server-safe/autoJobType.d.ts.map +1 -0
- package/dist/server-safe/autoJobType.js +39 -0
- package/dist/server-safe/autoJobType.js.map +1 -0
- package/dist/server-safe/autoJobType.test.d.ts +2 -0
- package/dist/server-safe/autoJobType.test.d.ts.map +1 -0
- package/dist/server-safe/autoJobType.test.js +83 -0
- package/dist/server-safe/autoJobType.test.js.map +1 -0
- package/dist/server-safe/automations.d.ts +197 -0
- package/dist/server-safe/automations.d.ts.map +1 -0
- package/dist/server-safe/automations.js +757 -0
- package/dist/server-safe/automations.js.map +1 -0
- package/dist/server-safe/automations.test.d.ts +2 -0
- package/dist/server-safe/automations.test.d.ts.map +1 -0
- package/dist/server-safe/automations.test.js +441 -0
- package/dist/server-safe/automations.test.js.map +1 -0
- package/dist/server-safe/constants.d.ts +156 -0
- package/dist/server-safe/constants.d.ts.map +1 -0
- package/dist/server-safe/constants.js +186 -0
- package/dist/server-safe/constants.js.map +1 -0
- package/dist/server-safe/contracts.d.ts +3 -0
- package/dist/server-safe/contracts.d.ts.map +1 -0
- package/dist/server-safe/contracts.js +15 -0
- package/dist/server-safe/contracts.js.map +1 -0
- package/dist/server-safe/database.types.d.ts +9510 -0
- package/dist/server-safe/database.types.d.ts.map +1 -0
- package/dist/server-safe/database.types.js +40 -0
- package/dist/server-safe/database.types.js.map +1 -0
- package/dist/server-safe/entitlements.d.ts +99 -0
- package/dist/server-safe/entitlements.d.ts.map +1 -0
- package/dist/server-safe/entitlements.js +487 -0
- package/dist/server-safe/entitlements.js.map +1 -0
- package/dist/server-safe/helpers.d.ts +78 -0
- package/dist/server-safe/helpers.d.ts.map +1 -0
- package/dist/server-safe/helpers.js +569 -0
- package/dist/server-safe/helpers.js.map +1 -0
- package/dist/server-safe/index.d.ts +30 -0
- package/dist/server-safe/index.d.ts.map +1 -0
- package/dist/server-safe/index.js +46 -0
- package/dist/server-safe/index.js.map +1 -0
- package/dist/server-safe/permissions.d.ts +29 -0
- package/dist/server-safe/permissions.d.ts.map +1 -0
- package/dist/server-safe/permissions.js +180 -0
- package/dist/server-safe/permissions.js.map +1 -0
- package/dist/server-safe/proposals.d.ts +6 -0
- package/dist/server-safe/proposals.d.ts.map +1 -0
- package/dist/server-safe/proposals.js +58 -0
- package/dist/server-safe/proposals.js.map +1 -0
- package/dist/server-safe/rentalAvailability.d.ts +56 -0
- package/dist/server-safe/rentalAvailability.d.ts.map +1 -0
- package/dist/server-safe/rentalAvailability.js +124 -0
- package/dist/server-safe/rentalAvailability.js.map +1 -0
- package/dist/server-safe/rentalAvailability.test.d.ts +2 -0
- package/dist/server-safe/rentalAvailability.test.d.ts.map +1 -0
- package/dist/server-safe/rentalAvailability.test.js +290 -0
- package/dist/server-safe/rentalAvailability.test.js.map +1 -0
- package/dist/server-safe/rentals.d.ts +95 -0
- package/dist/server-safe/rentals.d.ts.map +1 -0
- package/dist/server-safe/rentals.js +432 -0
- package/dist/server-safe/rentals.js.map +1 -0
- package/dist/server-safe/rentals.test.d.ts +2 -0
- package/dist/server-safe/rentals.test.d.ts.map +1 -0
- package/dist/server-safe/rentals.test.js +1034 -0
- package/dist/server-safe/rentals.test.js.map +1 -0
- package/dist/server-safe/routeOptimization.d.ts +155 -0
- package/dist/server-safe/routeOptimization.d.ts.map +1 -0
- package/dist/server-safe/routeOptimization.js +120 -0
- package/dist/server-safe/routeOptimization.js.map +1 -0
- package/dist/server-safe/routeOptimization.test.d.ts +2 -0
- package/dist/server-safe/routeOptimization.test.d.ts.map +1 -0
- package/dist/server-safe/routeOptimization.test.js +234 -0
- package/dist/server-safe/routeOptimization.test.js.map +1 -0
- package/dist/server-safe/routePlanFingerprint.d.ts +13 -0
- package/dist/server-safe/routePlanFingerprint.d.ts.map +1 -0
- package/dist/server-safe/routePlanFingerprint.js +49 -0
- package/dist/server-safe/routePlanFingerprint.js.map +1 -0
- package/dist/server-safe/routePlanFingerprint.test.d.ts +2 -0
- package/dist/server-safe/routePlanFingerprint.test.d.ts.map +1 -0
- package/dist/server-safe/routePlanFingerprint.test.js +68 -0
- package/dist/server-safe/routePlanFingerprint.test.js.map +1 -0
- package/dist/server-safe/scheduleListOrder.d.ts +18 -0
- package/dist/server-safe/scheduleListOrder.d.ts.map +1 -0
- package/dist/server-safe/scheduleListOrder.js +92 -0
- package/dist/server-safe/scheduleListOrder.js.map +1 -0
- package/dist/server-safe/scheduleListOrder.test.d.ts +2 -0
- package/dist/server-safe/scheduleListOrder.test.d.ts.map +1 -0
- package/dist/server-safe/scheduleListOrder.test.js +260 -0
- package/dist/server-safe/scheduleListOrder.test.js.map +1 -0
- package/dist/server-safe/serviceMinutes.d.ts +13 -0
- package/dist/server-safe/serviceMinutes.d.ts.map +1 -0
- package/dist/server-safe/serviceMinutes.js +38 -0
- package/dist/server-safe/serviceMinutes.js.map +1 -0
- package/dist/server-safe/serviceMinutes.test.d.ts +2 -0
- package/dist/server-safe/serviceMinutes.test.d.ts.map +1 -0
- package/dist/server-safe/serviceMinutes.test.js +86 -0
- package/dist/server-safe/serviceMinutes.test.js.map +1 -0
- package/dist/server-safe/settingsSearch.d.ts +24 -0
- package/dist/server-safe/settingsSearch.d.ts.map +1 -0
- package/dist/server-safe/settingsSearch.js +8 -0
- package/dist/server-safe/settingsSearch.js.map +1 -0
- package/dist/server-safe/supportChat.d.ts +59 -0
- package/dist/server-safe/supportChat.d.ts.map +1 -0
- package/dist/server-safe/supportChat.js +56 -0
- package/dist/server-safe/supportChat.js.map +1 -0
- package/dist/server-safe/templates.d.ts +15 -0
- package/dist/server-safe/templates.d.ts.map +1 -0
- package/dist/server-safe/templates.js +91 -0
- package/dist/server-safe/templates.js.map +1 -0
- package/dist/server-safe/templates.test.d.ts +2 -0
- package/dist/server-safe/templates.test.d.ts.map +1 -0
- package/dist/server-safe/templates.test.js +62 -0
- package/dist/server-safe/templates.test.js.map +1 -0
- package/dist/server-safe/trash.d.ts +50 -0
- package/dist/server-safe/trash.d.ts.map +1 -0
- package/dist/server-safe/trash.js +100 -0
- package/dist/server-safe/trash.js.map +1 -0
- package/dist/utils/LogHandler.d.ts +3 -0
- package/dist/utils/LogHandler.d.ts.map +1 -0
- package/dist/utils/LogHandler.js +16 -0
- package/dist/utils/LogHandler.js.map +1 -0
- package/dist/utils/convertSupabaseImagesToAssets.d.ts +28 -0
- package/dist/utils/convertSupabaseImagesToAssets.d.ts.map +1 -0
- package/dist/utils/convertSupabaseImagesToAssets.js +14 -0
- package/dist/utils/convertSupabaseImagesToAssets.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
-- Company-level settings for the automations engine. One row per company,
|
|
2
|
+
-- lazily created by the Automations settings page (web + mobile) with these
|
|
3
|
+
-- defaults on first visit; the engine treats a missing row as the defaults.
|
|
4
|
+
--
|
|
5
|
+
-- Quiet hours apply to AUTOMATION client SMS only (email and team push are
|
|
6
|
+
-- unaffected, as are all pre-existing send surfaces: job/estimate reminders,
|
|
7
|
+
-- status notifications, sequences, blasts). Sends that come due inside the
|
|
8
|
+
-- window are HELD, not dropped: the engine reschedules them to the window's
|
|
9
|
+
-- end and re-runs every gate (revalidation, conditions, suppression, A2P)
|
|
10
|
+
-- when they finally go out.
|
|
11
|
+
--
|
|
12
|
+
-- ON by default (product decision, Ryan 2026-08-16): a brand-new automation
|
|
13
|
+
-- surface should not be able to text customers at 3am out of the box.
|
|
14
|
+
-- Automations are themselves opt-in (a user must create/enable a rule), so
|
|
15
|
+
-- the default changes no existing behavior.
|
|
16
|
+
|
|
17
|
+
create table if not exists "public"."settings_automation" (
|
|
18
|
+
"id" uuid default gen_random_uuid() not null,
|
|
19
|
+
"created_at" timestamp with time zone default now() not null,
|
|
20
|
+
"company_id" uuid not null,
|
|
21
|
+
"quiet_hours_enabled" boolean default true not null,
|
|
22
|
+
-- local wall-clock in company.time_zone; the window may wrap midnight
|
|
23
|
+
-- (21:00 -> 08:00). start = end means no window (never inside).
|
|
24
|
+
"quiet_hours_start" time default '21:00' not null,
|
|
25
|
+
"quiet_hours_end" time default '08:00' not null
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
alter table only "public"."settings_automation"
|
|
29
|
+
add constraint "settings_automation_pkey" primary key ("id");
|
|
30
|
+
|
|
31
|
+
alter table only "public"."settings_automation"
|
|
32
|
+
add constraint "settings_automation_company_id_key" unique ("company_id");
|
|
33
|
+
|
|
34
|
+
alter table only "public"."settings_automation"
|
|
35
|
+
add constraint "settings_automation_company_id_fkey"
|
|
36
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
-- RLS for settings_automation.
|
|
2
|
+
--
|
|
3
|
+
-- Affected tables: settings_automation.
|
|
4
|
+
--
|
|
5
|
+
-- Standard house policy: any authenticated staff member of the owning
|
|
6
|
+
-- company can CRUD (quiet hours are edited on the Automations settings
|
|
7
|
+
-- page). No anon policies or grants.
|
|
8
|
+
|
|
9
|
+
alter table "public"."settings_automation" enable row level security;
|
|
10
|
+
|
|
11
|
+
grant all on table "public"."settings_automation" to "authenticated";
|
|
12
|
+
grant all on table "public"."settings_automation" to "service_role";
|
|
13
|
+
|
|
14
|
+
create policy "Anyone with matching company_id can CRUD"
|
|
15
|
+
on "public"."settings_automation"
|
|
16
|
+
to "authenticated"
|
|
17
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
|
|
18
|
+
with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
-- Transition facts for the automations engine, captured by dedicated AFTER
|
|
2
|
+
-- triggers (automation_event_triggers migration).
|
|
3
|
+
--
|
|
4
|
+
-- Deliberately SEPARATE from outbound_event: that outbox carries no
|
|
5
|
+
-- prev-state (snapshot only on *.deleted) and its fan-out coalesces
|
|
6
|
+
-- *.updated per entity per batch — both fatal for transition-based triggers
|
|
7
|
+
-- ("status became Completed" needs old/new, and Pending Confirmation → Open
|
|
8
|
+
-- → In Progress inside one batch must not collapse). Widening outbound_event
|
|
9
|
+
-- would change the contract every webhook subscriber depends on, so the
|
|
10
|
+
-- automations engine gets its own narrow event stream: triggers fire only on
|
|
11
|
+
-- the ~10 specific transitions rules can subscribe to, with exactly the
|
|
12
|
+
-- payload the engine needs.
|
|
13
|
+
--
|
|
14
|
+
-- Consumed at-least-once by /api/automations-cron Phase A (rows are marked
|
|
15
|
+
-- processed_at only AFTER runs are enqueued; a crash between the two
|
|
16
|
+
-- re-processes into automation_run's unique (rule_id, dedupe_key) claim and
|
|
17
|
+
-- converges). Processed rows are purged by cleanup_webhook_outbox.
|
|
18
|
+
|
|
19
|
+
create table if not exists "public"."automation_event" (
|
|
20
|
+
"id" uuid default gen_random_uuid() not null,
|
|
21
|
+
"created_at" timestamp with time zone default now() not null,
|
|
22
|
+
"company_id" uuid not null,
|
|
23
|
+
-- keep in sync with AUTOMATION_EVENT_TYPES in
|
|
24
|
+
-- autopilot-core src/server-safe/automations.ts
|
|
25
|
+
"event_type" text not null,
|
|
26
|
+
-- entity refs: deliberately NO foreign keys — events must survive entity
|
|
27
|
+
-- deletion (job_deleted / booking_declined are delete-derived) and the
|
|
28
|
+
-- engine tolerates dangling ids via revalidation.
|
|
29
|
+
"job_id" uuid,
|
|
30
|
+
"schedule_id" uuid,
|
|
31
|
+
"client_id" uuid,
|
|
32
|
+
"estimate_id" uuid,
|
|
33
|
+
-- old_status / new_status / task_type / start_time / any_time as
|
|
34
|
+
-- relevant; to_jsonb(OLD) snapshot for delete-derived events
|
|
35
|
+
"payload" jsonb default '{}'::jsonb not null,
|
|
36
|
+
"processed_at" timestamp with time zone
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
alter table only "public"."automation_event"
|
|
40
|
+
add constraint "automation_event_pkey" primary key ("id");
|
|
41
|
+
|
|
42
|
+
alter table only "public"."automation_event"
|
|
43
|
+
add constraint "automation_event_company_id_fkey"
|
|
44
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
45
|
+
|
|
46
|
+
alter table only "public"."automation_event"
|
|
47
|
+
add constraint "automation_event_event_type_check"
|
|
48
|
+
check ("event_type" in (
|
|
49
|
+
'job_created', 'job_deleted', 'job_status_changed',
|
|
50
|
+
'rental_task_completed',
|
|
51
|
+
'booking_request_received', 'booking_confirmed', 'booking_declined',
|
|
52
|
+
'estimate_sent', 'estimate_approved', 'estimate_declined',
|
|
53
|
+
'lead_created'));
|
|
54
|
+
|
|
55
|
+
create index if not exists "automation_event_unprocessed_idx"
|
|
56
|
+
on "public"."automation_event" ("created_at")
|
|
57
|
+
where "processed_at" is null;
|
|
58
|
+
|
|
59
|
+
create index if not exists "automation_event_company_idx"
|
|
60
|
+
on "public"."automation_event" ("company_id", "created_at");
|
|
61
|
+
|
|
62
|
+
-- Phase A resolves booking_declined (web path: schedule rows deleted with
|
|
63
|
+
-- the job already gone) against the same job's job_deleted snapshot event
|
|
64
|
+
create index if not exists "automation_event_job_idx"
|
|
65
|
+
on "public"."automation_event" ("job_id", "event_type")
|
|
66
|
+
where "job_id" is not null;
|
|
67
|
+
|
|
68
|
+
-- retention scan support ("old + processed")
|
|
69
|
+
create index if not exists "automation_event_cleanup_idx"
|
|
70
|
+
on "public"."automation_event" ("created_at")
|
|
71
|
+
where "processed_at" is not null;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
-- RLS for automation_event.
|
|
2
|
+
--
|
|
3
|
+
-- Affected tables: automation_event.
|
|
4
|
+
--
|
|
5
|
+
-- Engine-internal: rows are written by SECURITY DEFINER triggers and read
|
|
6
|
+
-- only by the service-role cron in autopilot-web. RLS is enabled with NO
|
|
7
|
+
-- policies and NO authenticated/anon grants, so nothing outside the engine
|
|
8
|
+
-- can touch it (outbound_event precedent).
|
|
9
|
+
|
|
10
|
+
alter table "public"."automation_event" enable row level security;
|
|
11
|
+
|
|
12
|
+
grant all on table "public"."automation_event" to "service_role";
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
-- automation_run is three things in one row, generalizing reminder_dispatch:
|
|
2
|
+
-- 1. The exactly-once claim: unique (rule_id, dedupe_key). Enqueue is a
|
|
3
|
+
-- supabase-js upsert with ignoreDuplicates against this FULL unique
|
|
4
|
+
-- constraint (reminder_dispatch precedent — no partial-index RPC
|
|
5
|
+
-- needed). Whatever storm of duplicate events or overlapping cron
|
|
6
|
+
-- ticks occurs, one row wins.
|
|
7
|
+
-- 2. The work queue: pending rows past next_attempt_at are claimed by
|
|
8
|
+
-- claim_automation_runs (FOR UPDATE SKIP LOCKED, qb_sync_task
|
|
9
|
+
-- precedent) and executed by /api/automations-cron Phase C.
|
|
10
|
+
-- 3. The user-visible run history: entity/recipient/rendered_body are
|
|
11
|
+
-- denormalized at enqueue/send time so history survives entity
|
|
12
|
+
-- deletion. Entity refs have NO FKs for the same reason; only rule_id
|
|
13
|
+
-- cascades (per-rule history dies with its rule, which matches the
|
|
14
|
+
-- product surface).
|
|
15
|
+
--
|
|
16
|
+
-- Dedupe key shapes live in buildDedupeKey in autopilot-core
|
|
17
|
+
-- src/server-safe/automations.ts — the catalog there and this table's
|
|
18
|
+
-- semantics MUST stay in sync. Keys are job/estimate/client-scoped (never
|
|
19
|
+
-- schedule-row-scoped: edits delete-and-recreate job_schedule rows with
|
|
20
|
+
-- fresh uuids, the lesson baked into reminder_dispatch).
|
|
21
|
+
|
|
22
|
+
create table if not exists "public"."automation_run" (
|
|
23
|
+
"id" uuid default gen_random_uuid() not null,
|
|
24
|
+
"created_at" timestamp with time zone default now() not null,
|
|
25
|
+
"company_id" uuid not null,
|
|
26
|
+
"rule_id" uuid not null,
|
|
27
|
+
-- informational: the event that enqueued this run. NO FK — events are
|
|
28
|
+
-- purged after their retention window and a dangling pointer is fine.
|
|
29
|
+
"event_id" uuid,
|
|
30
|
+
"dedupe_key" text not null,
|
|
31
|
+
-- pending: waiting for next_attempt_at (includes quiet-hours holds)
|
|
32
|
+
-- processing: claimed by an executor pass
|
|
33
|
+
-- sent: handed to the provider (Twilio/SMTP2GO/FCM)
|
|
34
|
+
-- skipped: intentionally not sent; see skip_reason
|
|
35
|
+
-- failed: deterministic pre-network failure; terminal
|
|
36
|
+
-- dead: stuck 'processing' swept here; NEVER retried — after a
|
|
37
|
+
-- network call we cannot know whether delivery happened,
|
|
38
|
+
-- and a duplicate text is worse than a missed one
|
|
39
|
+
-- (claimReminderDispatch doctrine)
|
|
40
|
+
"status" text default 'pending' not null,
|
|
41
|
+
"due_at" timestamp with time zone default now() not null,
|
|
42
|
+
"next_attempt_at" timestamp with time zone default now() not null,
|
|
43
|
+
-- 'quiet_hours' while a pending row is deferred past due_at
|
|
44
|
+
"held_reason" text,
|
|
45
|
+
"attempt_count" integer default 0 not null,
|
|
46
|
+
"last_attempt_at" timestamp with time zone,
|
|
47
|
+
-- ---- history / audit (denormalized) ----
|
|
48
|
+
"action_type" text not null,
|
|
49
|
+
"job_id" uuid,
|
|
50
|
+
"estimate_id" uuid,
|
|
51
|
+
"client_id" uuid,
|
|
52
|
+
-- phone / email / comma-joined user ids, filled at send time
|
|
53
|
+
"recipient" text,
|
|
54
|
+
-- exact content sent (the template may be edited later)
|
|
55
|
+
"rendered_body" text,
|
|
56
|
+
-- keep in sync with AUTOMATION_SKIP_REASONS in automations.ts:
|
|
57
|
+
-- a2p_not_approved | opted_out | do_not_sms | condition_not_met |
|
|
58
|
+
-- stale_reschedule | trigger_no_longer_true | rule_disabled |
|
|
59
|
+
-- missing_phone | missing_from_number | missing_email | email_suppressed |
|
|
60
|
+
-- entity_deleted |
|
|
61
|
+
-- no_recipients | not_entitled | missed_window
|
|
62
|
+
"skip_reason" text,
|
|
63
|
+
"last_error" text,
|
|
64
|
+
"sent_at" timestamp with time zone
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
alter table only "public"."automation_run"
|
|
68
|
+
add constraint "automation_run_pkey" primary key ("id");
|
|
69
|
+
|
|
70
|
+
alter table only "public"."automation_run"
|
|
71
|
+
add constraint "automation_run_company_id_fkey"
|
|
72
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
73
|
+
|
|
74
|
+
alter table only "public"."automation_run"
|
|
75
|
+
add constraint "automation_run_rule_id_fkey"
|
|
76
|
+
foreign key ("rule_id") references "public"."automation_rule"("id") on delete cascade;
|
|
77
|
+
|
|
78
|
+
alter table only "public"."automation_run"
|
|
79
|
+
add constraint "automation_run_status_check"
|
|
80
|
+
check ("status" in ('pending', 'processing', 'sent', 'skipped', 'failed', 'dead'));
|
|
81
|
+
|
|
82
|
+
-- THE exactly-once claim
|
|
83
|
+
alter table only "public"."automation_run"
|
|
84
|
+
add constraint "automation_run_rule_dedupe_key" unique ("rule_id", "dedupe_key");
|
|
85
|
+
|
|
86
|
+
create index if not exists "automation_run_due_idx"
|
|
87
|
+
on "public"."automation_run" ("next_attempt_at")
|
|
88
|
+
where "status" = 'pending';
|
|
89
|
+
|
|
90
|
+
-- run-history UI: newest first per rule
|
|
91
|
+
create index if not exists "automation_run_rule_history_idx"
|
|
92
|
+
on "public"."automation_run" ("rule_id", "created_at" desc);
|
|
93
|
+
|
|
94
|
+
-- FK support for the company cascade
|
|
95
|
+
create index if not exists "automation_run_company_idx"
|
|
96
|
+
on "public"."automation_run" ("company_id", "created_at" desc);
|
|
97
|
+
|
|
98
|
+
-- retention scan support ("old + terminal")
|
|
99
|
+
create index if not exists "automation_run_cleanup_idx"
|
|
100
|
+
on "public"."automation_run" ("created_at")
|
|
101
|
+
where "status" in ('sent', 'skipped', 'failed', 'dead');
|
|
102
|
+
|
|
103
|
+
-- Atomic claim, mirroring claim_qb_sync_tasks (SKIP LOCKED is not
|
|
104
|
+
-- expressible through supabase-js; overlapping cron runs must never
|
|
105
|
+
-- double-send).
|
|
106
|
+
create or replace function "public"."claim_automation_runs"("batch_size" integer)
|
|
107
|
+
returns setof "public"."automation_run"
|
|
108
|
+
language "sql"
|
|
109
|
+
security definer
|
|
110
|
+
set search_path = 'public'
|
|
111
|
+
as $$
|
|
112
|
+
update automation_run set
|
|
113
|
+
status = 'processing',
|
|
114
|
+
attempt_count = attempt_count + 1,
|
|
115
|
+
last_attempt_at = now()
|
|
116
|
+
where id in (
|
|
117
|
+
select id from automation_run
|
|
118
|
+
where status = 'pending' and next_attempt_at <= now()
|
|
119
|
+
order by next_attempt_at
|
|
120
|
+
limit least(batch_size, 500)
|
|
121
|
+
for update skip locked
|
|
122
|
+
)
|
|
123
|
+
returning *;
|
|
124
|
+
$$;
|
|
125
|
+
|
|
126
|
+
revoke all on function "public"."claim_automation_runs"(integer) from public;
|
|
127
|
+
revoke all on function "public"."claim_automation_runs"(integer) from "anon";
|
|
128
|
+
revoke all on function "public"."claim_automation_runs"(integer) from "authenticated";
|
|
129
|
+
grant execute on function "public"."claim_automation_runs"(integer) to "service_role";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-- RLS for automation_run.
|
|
2
|
+
--
|
|
3
|
+
-- Affected tables: automation_run.
|
|
4
|
+
--
|
|
5
|
+
-- Read-only for company staff: the per-rule run-history UI (web drawer,
|
|
6
|
+
-- mobile screen) selects directly. All writes go through the service-role
|
|
7
|
+
-- engine — authenticated gets SELECT only, so the claim/queue state machine
|
|
8
|
+
-- cannot be corrupted from clients. No anon access.
|
|
9
|
+
|
|
10
|
+
alter table "public"."automation_run" enable row level security;
|
|
11
|
+
|
|
12
|
+
grant select on table "public"."automation_run" to "authenticated";
|
|
13
|
+
grant all on table "public"."automation_run" to "service_role";
|
|
14
|
+
|
|
15
|
+
create policy "Anyone with matching company_id can read"
|
|
16
|
+
on "public"."automation_run"
|
|
17
|
+
for select
|
|
18
|
+
to "authenticated"
|
|
19
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
-- Provenance marker for client rows, consumed by the lead_created automation
|
|
2
|
+
-- trigger's WHEN clause: rows created with created_via = 'import' NEVER fire
|
|
3
|
+
-- lead automations (locked decision — a CSV import of 500 old contacts must
|
|
4
|
+
-- not mass-text the moment someone imports it).
|
|
5
|
+
--
|
|
6
|
+
-- A column rather than a session GUC because the import paths (web
|
|
7
|
+
-- clients/imports/importUtils.ts, fake-data seeding, onboarding preload)
|
|
8
|
+
-- insert from browser-side supabase-js, which cannot wrap a transaction to
|
|
9
|
+
-- set_config. One stamped field per insert path is the whole integration.
|
|
10
|
+
--
|
|
11
|
+
-- Free text; documented values so far:
|
|
12
|
+
-- 'import' — CSV imports, seed/preload/backfill paths. Suppresses
|
|
13
|
+
-- lead_created automation capture.
|
|
14
|
+
-- null — organic app paths (contact form, manual entry, softphone,
|
|
15
|
+
-- public API). Fires normally.
|
|
16
|
+
|
|
17
|
+
alter table "public"."client"
|
|
18
|
+
add column if not exists "created_via" text;
|
|
19
|
+
|
|
20
|
+
-- Same provenance marker for job rows, consumed by the job_created automation
|
|
21
|
+
-- trigger's WHEN clause (see 20260816160303): a bulk CSV import of historical
|
|
22
|
+
-- jobs must not fire a job_created automation per imported row. Same
|
|
23
|
+
-- documented values as client.created_via ('import' suppresses, null fires).
|
|
24
|
+
alter table "public"."job"
|
|
25
|
+
add column if not exists "created_via" text;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
-- Anchor timestamp for the estimate_pending automation trigger ("sent but
|
|
2
|
+
-- still pending after N days"). estimate has no such column today — only
|
|
3
|
+
-- created_at, which is wrong for estimates drafted long before sending.
|
|
4
|
+
--
|
|
5
|
+
-- Maintained by BEFORE triggers on the transition into 'Sent' (insert and
|
|
6
|
+
-- update variants per house style). Set once and kept even if status later
|
|
7
|
+
-- changes — it records when the estimate was FIRST sent; the engine's
|
|
8
|
+
-- scanner filters on status = 'Sent' anyway, and revalidation at send time
|
|
9
|
+
-- kills follow-ups for estimates that got approved/declined meanwhile.
|
|
10
|
+
--
|
|
11
|
+
-- Deliberately NO backfill: null sent_at = ineligible for estimate_pending,
|
|
12
|
+
-- so a company activating a "pending after 3 days" rule can never blast its
|
|
13
|
+
-- historical backlog of already-Sent estimates. Only estimates sent after
|
|
14
|
+
-- this migration applies are candidates.
|
|
15
|
+
|
|
16
|
+
alter table "public"."estimate"
|
|
17
|
+
add column if not exists "sent_at" timestamp with time zone;
|
|
18
|
+
|
|
19
|
+
create or replace function "public"."set_estimate_sent_at"()
|
|
20
|
+
returns trigger
|
|
21
|
+
language "plpgsql"
|
|
22
|
+
security definer
|
|
23
|
+
set search_path = 'public'
|
|
24
|
+
as $$
|
|
25
|
+
begin
|
|
26
|
+
if NEW.status = 'Sent' and NEW.sent_at is null then
|
|
27
|
+
NEW.sent_at := now();
|
|
28
|
+
end if;
|
|
29
|
+
return NEW;
|
|
30
|
+
end;
|
|
31
|
+
$$;
|
|
32
|
+
|
|
33
|
+
create or replace trigger "estimate_set_sent_at_u" before update on "public"."estimate"
|
|
34
|
+
for each row when (old.status is distinct from new.status and new.status = 'Sent')
|
|
35
|
+
execute function "public"."set_estimate_sent_at"();
|
|
36
|
+
|
|
37
|
+
create or replace trigger "estimate_set_sent_at_i" before insert on "public"."estimate"
|
|
38
|
+
for each row when (new.status = 'Sent')
|
|
39
|
+
execute function "public"."set_estimate_sent_at"();
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
-- Links a message-thread row to the automation_run that produced it, so
|
|
2
|
+
-- thread UIs (web + mobile) can render an "Automated" label distinctly from
|
|
3
|
+
-- other system:true rows, and support can trace any automated text back to
|
|
4
|
+
-- the exact rule/run that sent it.
|
|
5
|
+
--
|
|
6
|
+
-- Nullable, deliberately NO foreign key: run history has a retention window
|
|
7
|
+
-- and the thread must keep rendering after the run row is purged.
|
|
8
|
+
|
|
9
|
+
alter table "public"."message"
|
|
10
|
+
add column if not exists "automation_run_id" uuid;
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
-- Event capture for the automations engine. Detection happens at the DB
|
|
2
|
+
-- layer because the app layer has no chokepoint: job status writes are
|
|
3
|
+
-- scattered across debounced autosave loops on web and mobile plus the
|
|
4
|
+
-- public API and booking routes; estimate Sent transitions exist in three
|
|
5
|
+
-- drifted copies (one of which can fire twice); booking decline produces
|
|
6
|
+
-- different write shapes per platform. These triggers see all of it.
|
|
7
|
+
--
|
|
8
|
+
-- security definer is required: writes normally run as `authenticated`,
|
|
9
|
+
-- which deliberately has no grants on automation_event.
|
|
10
|
+
--
|
|
11
|
+
-- Volume note: unlike the outbound_event outbox, these fire only on the
|
|
12
|
+
-- specific transitions rules can subscribe to (WHEN clauses below), and
|
|
13
|
+
-- events are captured unconditionally — Phase A discards events matching no
|
|
14
|
+
-- enabled rule; retention purges everything processed. That keeps the
|
|
15
|
+
-- trigger bodies free of per-write rule lookups.
|
|
16
|
+
--
|
|
17
|
+
-- Duplicate-shaped facts are expected and collapsed downstream by
|
|
18
|
+
-- automation_run's unique (rule_id, dedupe_key) claim:
|
|
19
|
+
-- * mobile "Finish Job" completes N schedule rows one-by-one
|
|
20
|
+
-- * a 3-unit rental booking inserts 3 drop_off + 3 pick_up rows
|
|
21
|
+
-- * mobile decline writes Canceled then hard-deletes ~1.5s later
|
|
22
|
+
-- (both paths emit booking_declined; one key wins)
|
|
23
|
+
|
|
24
|
+
-- ============================================================
|
|
25
|
+
-- job: created / deleted
|
|
26
|
+
-- ============================================================
|
|
27
|
+
|
|
28
|
+
create or replace function "public"."capture_automation_job_insert"()
|
|
29
|
+
returns trigger
|
|
30
|
+
language "plpgsql"
|
|
31
|
+
security definer
|
|
32
|
+
set search_path = 'public'
|
|
33
|
+
as $$
|
|
34
|
+
begin
|
|
35
|
+
insert into automation_event (company_id, event_type, job_id, client_id)
|
|
36
|
+
values (NEW.company_id, 'job_created', NEW.id, NEW.client_id);
|
|
37
|
+
return null;
|
|
38
|
+
end;
|
|
39
|
+
$$;
|
|
40
|
+
|
|
41
|
+
-- created_via = 'import' rows (bulk CSV import of historical jobs) must never
|
|
42
|
+
-- fire job_created automations, mirroring the lead_created suppression below.
|
|
43
|
+
create or replace trigger "automation_job_created" after insert on "public"."job"
|
|
44
|
+
for each row when (coalesce(new.created_via, '') <> 'import')
|
|
45
|
+
execute function "public"."capture_automation_job_insert"();
|
|
46
|
+
|
|
47
|
+
-- Deletes are hard deletes app-wide, so the to_jsonb(OLD) snapshot is the
|
|
48
|
+
-- only payload available afterward. Used two ways: booking_declined
|
|
49
|
+
-- resolution (web decline deletes the job outright) and template context
|
|
50
|
+
-- for delete-derived sends.
|
|
51
|
+
create or replace function "public"."capture_automation_job_delete"()
|
|
52
|
+
returns trigger
|
|
53
|
+
language "plpgsql"
|
|
54
|
+
security definer
|
|
55
|
+
set search_path = 'public'
|
|
56
|
+
as $$
|
|
57
|
+
begin
|
|
58
|
+
insert into automation_event (company_id, event_type, job_id, client_id, payload)
|
|
59
|
+
values (OLD.company_id, 'job_deleted', OLD.id, OLD.client_id, to_jsonb(OLD));
|
|
60
|
+
return null;
|
|
61
|
+
end;
|
|
62
|
+
$$;
|
|
63
|
+
|
|
64
|
+
create or replace trigger "automation_job_deleted" after delete on "public"."job"
|
|
65
|
+
for each row execute function "public"."capture_automation_job_delete"();
|
|
66
|
+
|
|
67
|
+
-- ============================================================
|
|
68
|
+
-- job_schedule: the real status chokepoint
|
|
69
|
+
-- ============================================================
|
|
70
|
+
|
|
71
|
+
-- job.status is legacy (only the public API writes it); every in-app status
|
|
72
|
+
-- change lands on job_schedule.status. One status transition can imply up
|
|
73
|
+
-- to three facts: the generic status change, a booking transition, and a
|
|
74
|
+
-- rental task completion.
|
|
75
|
+
create or replace function "public"."capture_automation_schedule_status"()
|
|
76
|
+
returns trigger
|
|
77
|
+
language "plpgsql"
|
|
78
|
+
security definer
|
|
79
|
+
set search_path = 'public'
|
|
80
|
+
as $$
|
|
81
|
+
declare
|
|
82
|
+
v_client uuid;
|
|
83
|
+
begin
|
|
84
|
+
select client_id into v_client from job where id = NEW.job_id;
|
|
85
|
+
|
|
86
|
+
insert into automation_event (company_id, event_type, job_id, schedule_id, client_id, payload)
|
|
87
|
+
values (NEW.company_id, 'job_status_changed', NEW.job_id, NEW.id, v_client,
|
|
88
|
+
jsonb_build_object(
|
|
89
|
+
'old_status', OLD.status,
|
|
90
|
+
'new_status', NEW.status,
|
|
91
|
+
'task_type', NEW.task_type,
|
|
92
|
+
'start_time', NEW.start_time,
|
|
93
|
+
'any_time', NEW.any_time));
|
|
94
|
+
|
|
95
|
+
if OLD.status = 'Pending Confirmation' and NEW.status = 'Open' then
|
|
96
|
+
insert into automation_event (company_id, event_type, job_id, schedule_id, client_id)
|
|
97
|
+
values (NEW.company_id, 'booking_confirmed', NEW.job_id, NEW.id, v_client);
|
|
98
|
+
end if;
|
|
99
|
+
|
|
100
|
+
-- mobile decline path (web decline never writes Canceled — it surfaces
|
|
101
|
+
-- through the schedule-delete trigger below)
|
|
102
|
+
if OLD.status = 'Pending Confirmation' and NEW.status = 'Canceled' then
|
|
103
|
+
insert into automation_event (company_id, event_type, job_id, schedule_id, client_id)
|
|
104
|
+
values (NEW.company_id, 'booking_declined', NEW.job_id, NEW.id, v_client);
|
|
105
|
+
end if;
|
|
106
|
+
|
|
107
|
+
if NEW.status = 'Completed' and NEW.task_type is not null then
|
|
108
|
+
insert into automation_event (company_id, event_type, job_id, schedule_id, client_id, payload)
|
|
109
|
+
values (NEW.company_id, 'rental_task_completed', NEW.job_id, NEW.id, v_client,
|
|
110
|
+
jsonb_build_object('task_type', NEW.task_type, 'start_time', NEW.start_time));
|
|
111
|
+
end if;
|
|
112
|
+
|
|
113
|
+
return null;
|
|
114
|
+
end;
|
|
115
|
+
$$;
|
|
116
|
+
|
|
117
|
+
create or replace trigger "automation_schedule_status_u" after update on "public"."job_schedule"
|
|
118
|
+
for each row when (old.status is distinct from new.status)
|
|
119
|
+
execute function "public"."capture_automation_schedule_status"();
|
|
120
|
+
|
|
121
|
+
-- Booking request received: online booking stamps 'Pending Confirmation' on
|
|
122
|
+
-- every inserted schedule row (per-unit rentals insert many for one job;
|
|
123
|
+
-- the bookreq:{job_id} dedupe key collapses them).
|
|
124
|
+
create or replace function "public"."capture_automation_booking_received"()
|
|
125
|
+
returns trigger
|
|
126
|
+
language "plpgsql"
|
|
127
|
+
security definer
|
|
128
|
+
set search_path = 'public'
|
|
129
|
+
as $$
|
|
130
|
+
declare
|
|
131
|
+
v_client uuid;
|
|
132
|
+
begin
|
|
133
|
+
select client_id into v_client from job where id = NEW.job_id;
|
|
134
|
+
insert into automation_event (company_id, event_type, job_id, schedule_id, client_id)
|
|
135
|
+
values (NEW.company_id, 'booking_request_received', NEW.job_id, NEW.id, v_client);
|
|
136
|
+
return null;
|
|
137
|
+
end;
|
|
138
|
+
$$;
|
|
139
|
+
|
|
140
|
+
create or replace trigger "automation_booking_received" after insert on "public"."job_schedule"
|
|
141
|
+
for each row when (new.status = 'Pending Confirmation')
|
|
142
|
+
execute function "public"."capture_automation_booking_received"();
|
|
143
|
+
|
|
144
|
+
-- Web decline path: the job is hard-deleted while its rows still read
|
|
145
|
+
-- Pending Confirmation. Cascade ordering deletes the parent job row BEFORE
|
|
146
|
+
-- this fires, so "parent job still live" distinguishes a real decline from
|
|
147
|
+
-- schedule churn: in-app edits delete-and-recreate job_schedule rows (and
|
|
148
|
+
-- remove-day deletes one), and none of those are declines, so a surviving
|
|
149
|
+
-- parent job suppresses the event. Only the decline's job hard-delete (or a
|
|
150
|
+
-- soft-deleted job) reaches the insert. client_id stays null; Phase A
|
|
151
|
+
-- resolves it from the same job's job_deleted snapshot event (written in
|
|
152
|
+
-- the same transaction, so it always exists by fan-out time).
|
|
153
|
+
create or replace function "public"."capture_automation_booking_declined_delete"()
|
|
154
|
+
returns trigger
|
|
155
|
+
language "plpgsql"
|
|
156
|
+
security definer
|
|
157
|
+
set search_path = 'public'
|
|
158
|
+
as $$
|
|
159
|
+
begin
|
|
160
|
+
if exists (
|
|
161
|
+
select 1 from job
|
|
162
|
+
where id = OLD.job_id and coalesce(is_deleted, false) = false
|
|
163
|
+
) then
|
|
164
|
+
return null; -- schedule edit churn: parent job still live, not a decline
|
|
165
|
+
end if;
|
|
166
|
+
insert into automation_event (company_id, event_type, job_id, schedule_id, payload)
|
|
167
|
+
values (OLD.company_id, 'booking_declined', OLD.job_id, OLD.id, to_jsonb(OLD));
|
|
168
|
+
return null;
|
|
169
|
+
end;
|
|
170
|
+
$$;
|
|
171
|
+
|
|
172
|
+
create or replace trigger "automation_booking_declined_d" after delete on "public"."job_schedule"
|
|
173
|
+
for each row when (old.status = 'Pending Confirmation')
|
|
174
|
+
execute function "public"."capture_automation_booking_declined_delete"();
|
|
175
|
+
|
|
176
|
+
-- ============================================================
|
|
177
|
+
-- estimate: document-status lifecycle
|
|
178
|
+
-- ============================================================
|
|
179
|
+
|
|
180
|
+
-- WHEN (old IS DISTINCT FROM new) absorbs mobile EstimateEntry's known
|
|
181
|
+
-- double-Sent write (the second write is a same-value no-op); the run
|
|
182
|
+
-- dedupe key est*:{estimate_id} is the backstop.
|
|
183
|
+
create or replace function "public"."capture_automation_estimate_status"()
|
|
184
|
+
returns trigger
|
|
185
|
+
language "plpgsql"
|
|
186
|
+
security definer
|
|
187
|
+
set search_path = 'public'
|
|
188
|
+
as $$
|
|
189
|
+
begin
|
|
190
|
+
if NEW.status = 'Sent' then
|
|
191
|
+
insert into automation_event (company_id, event_type, estimate_id, client_id)
|
|
192
|
+
values (NEW.company_id, 'estimate_sent', NEW.id, NEW.client_id);
|
|
193
|
+
elsif NEW.status = 'Approved' then
|
|
194
|
+
insert into automation_event (company_id, event_type, estimate_id, client_id)
|
|
195
|
+
values (NEW.company_id, 'estimate_approved', NEW.id, NEW.client_id);
|
|
196
|
+
elsif NEW.status = 'Declined' then
|
|
197
|
+
insert into automation_event (company_id, event_type, estimate_id, client_id)
|
|
198
|
+
values (NEW.company_id, 'estimate_declined', NEW.id, NEW.client_id);
|
|
199
|
+
end if;
|
|
200
|
+
return null;
|
|
201
|
+
end;
|
|
202
|
+
$$;
|
|
203
|
+
|
|
204
|
+
create or replace trigger "automation_estimate_status_u" after update on "public"."estimate"
|
|
205
|
+
for each row when (old.status is distinct from new.status)
|
|
206
|
+
execute function "public"."capture_automation_estimate_status"();
|
|
207
|
+
|
|
208
|
+
create or replace trigger "automation_estimate_status_i" after insert on "public"."estimate"
|
|
209
|
+
for each row when (new.status in ('Sent', 'Approved', 'Declined'))
|
|
210
|
+
execute function "public"."capture_automation_estimate_status"();
|
|
211
|
+
|
|
212
|
+
-- ============================================================
|
|
213
|
+
-- client: lead created
|
|
214
|
+
-- ============================================================
|
|
215
|
+
|
|
216
|
+
-- Imports and backfills never fire lead automations (locked decision):
|
|
217
|
+
-- suppressed right here in the WHEN clause via client.created_via, the one
|
|
218
|
+
-- chokepoint that covers browser-side supabase-js imports, seeds, and any
|
|
219
|
+
-- future backfill that remembers to stamp the column.
|
|
220
|
+
create or replace function "public"."capture_automation_lead_created"()
|
|
221
|
+
returns trigger
|
|
222
|
+
language "plpgsql"
|
|
223
|
+
security definer
|
|
224
|
+
set search_path = 'public'
|
|
225
|
+
as $$
|
|
226
|
+
begin
|
|
227
|
+
insert into automation_event (company_id, event_type, client_id)
|
|
228
|
+
values (NEW.company_id, 'lead_created', NEW.id);
|
|
229
|
+
return null;
|
|
230
|
+
end;
|
|
231
|
+
$$;
|
|
232
|
+
|
|
233
|
+
create or replace trigger "automation_lead_created" after insert on "public"."client"
|
|
234
|
+
for each row when (new.client_or_lead = 'lead'
|
|
235
|
+
and coalesce(new.created_via, '') <> 'import')
|
|
236
|
+
execute function "public"."capture_automation_lead_created"();
|