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,12 @@
|
|
|
1
|
+
-- Size in yards on pricebook/booking items, mirroring asset.size: the soft
|
|
2
|
+
-- asset-size mismatch warning on the schedule cards compares a selected
|
|
3
|
+
-- asset's size against the sizes of the job's rental (duration) items,
|
|
4
|
+
-- resolved by item_name. Null = no size configured — the item never
|
|
5
|
+
-- contributes to the warning. The CHECK forbids 0/negatives
|
|
6
|
+
-- (item_duration_check's sibling): zero or negative yardage is always a
|
|
7
|
+
-- data error, and both UIs coerce empty/invalid input to null.
|
|
8
|
+
-- No RLS change needed: item's "If is_booking, public can read" policy
|
|
9
|
+
-- already covers new columns.
|
|
10
|
+
alter table item
|
|
11
|
+
add column "size" numeric null
|
|
12
|
+
constraint item_size_check check ("size" > 0);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
-- Labels for the rentals-vs-services chooser on the public booking page.
|
|
2
|
+
-- When a company's booking catalog offers both rentals (duration items) and
|
|
3
|
+
-- services, the Items step opens with two buttons; these columns are their
|
|
4
|
+
-- text. NOT NULL with defaults (enforce_rental_availability's sibling):
|
|
5
|
+
-- every row reads ready-to-render strings and no consumer branches on null.
|
|
6
|
+
-- Both settings UIs normalize cleared fields back to these defaults at save.
|
|
7
|
+
-- No RLS change needed: settings_booking's public-read policy and grants are
|
|
8
|
+
-- table-level, so new columns are automatically anon-readable.
|
|
9
|
+
alter table settings_booking
|
|
10
|
+
add column rental_button_label text not null default 'Dumpster Rental',
|
|
11
|
+
add column service_button_label text not null default 'Junk Removal';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
-- Global driving-distance cache for rental route optimization.
|
|
2
|
+
--
|
|
3
|
+
-- One row per DIRECTED coordinate pair, fetched from the Google Routes API
|
|
4
|
+
-- (computeRouteMatrix) by the web server's distance layer. Keyed by lat/lng
|
|
5
|
+
-- rounded to 4 decimal places (~11 m) — rounding happens in the application
|
|
6
|
+
-- layer at both write and lookup time, so re-geocoding jitter still hits the
|
|
7
|
+
-- cache. Coordinate pairs, not address strings: address formatting drifts,
|
|
8
|
+
-- coordinates don't.
|
|
9
|
+
--
|
|
10
|
+
-- Deliberately global (no company_id): the driving distance between two
|
|
11
|
+
-- points has no tenant dimension, and sharing rows across companies
|
|
12
|
+
-- multiplies the hit rate. Lot/landfill pairs are static, so they are
|
|
13
|
+
-- fetched once ever. Directed because road networks are asymmetric; the
|
|
14
|
+
-- read layer may use the reversed pair as an estimate but never stores a
|
|
15
|
+
-- reversed row.
|
|
16
|
+
--
|
|
17
|
+
-- No TTL logic yet; fetched_at supports a future refresh policy.
|
|
18
|
+
|
|
19
|
+
create table "public"."route_distance_cache" (
|
|
20
|
+
"id" uuid not null default gen_random_uuid(),
|
|
21
|
+
"created_at" timestamp with time zone not null default now(),
|
|
22
|
+
"origin_lat" numeric(8, 4) not null,
|
|
23
|
+
"origin_lng" numeric(9, 4) not null,
|
|
24
|
+
"dest_lat" numeric(8, 4) not null,
|
|
25
|
+
"dest_lng" numeric(9, 4) not null,
|
|
26
|
+
"distance_meters" integer not null,
|
|
27
|
+
"duration_seconds" integer not null,
|
|
28
|
+
"provider" text not null default 'google_routes',
|
|
29
|
+
"fetched_at" timestamp with time zone not null default now()
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
alter table "public"."route_distance_cache"
|
|
33
|
+
add constraint "route_distance_cache_pkey" primary key ("id");
|
|
34
|
+
|
|
35
|
+
create unique index "route_distance_cache_pair_idx"
|
|
36
|
+
on "public"."route_distance_cache"
|
|
37
|
+
("origin_lat", "origin_lng", "dest_lat", "dest_lng");
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
-- RLS + grants for route_distance_cache.
|
|
2
|
+
--
|
|
3
|
+
-- Affected table: route_distance_cache (created in the preceding
|
|
4
|
+
-- add_route_distance_cache migration).
|
|
5
|
+
--
|
|
6
|
+
-- The cache is server infrastructure: only the web server's distance layer
|
|
7
|
+
-- (service role) reads or writes it. Clients never touch it, so RLS is
|
|
8
|
+
-- enabled with NO policies and table grants are revoked from anon and
|
|
9
|
+
-- authenticated — service_role bypasses RLS and keeps its grant.
|
|
10
|
+
|
|
11
|
+
alter table "public"."route_distance_cache" enable row level security;
|
|
12
|
+
|
|
13
|
+
revoke all on table "public"."route_distance_cache" from "anon";
|
|
14
|
+
revoke all on table "public"."route_distance_cache" from "authenticated";
|
|
15
|
+
grant all on table "public"."route_distance_cache" to "service_role";
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
-- Transactional write-back for an approved rental route plan.
|
|
2
|
+
--
|
|
3
|
+
-- Approving a plan must atomically (1) verify every planned schedule row is
|
|
4
|
+
-- still in the state it had when the plan was computed, (2) apply the new
|
|
5
|
+
-- list_sort_key / asset_id values, (3) replace each planned row's job_user
|
|
6
|
+
-- assignments, and (4) insert the optimizer-created take_to_dump /
|
|
7
|
+
-- take_to_lot rows with their assignments. Done as separate PostgREST
|
|
8
|
+
-- calls, a failure mid-way could leave a half-applied plan (reassigned
|
|
9
|
+
-- drivers with stale ordering, or landfill legs without their haul), so it
|
|
10
|
+
-- is one function, one transaction.
|
|
11
|
+
--
|
|
12
|
+
-- The row locks plus the status precondition resolve the approve-vs-edit
|
|
13
|
+
-- race: any concurrent status change either commits first (this call then
|
|
14
|
+
-- fails the precondition, errcode P0010, surfaced to the dispatcher as
|
|
15
|
+
-- "plan is stale — re-run") or blocks on the lock until the plan is fully
|
|
16
|
+
-- applied.
|
|
17
|
+
--
|
|
18
|
+
-- The function is a dumb applier: every column value (including the
|
|
19
|
+
-- target_* location shape) is computed in TypeScript by the web server via
|
|
20
|
+
-- the canonical single-writer helpers, preserving the single-writer rule.
|
|
21
|
+
-- It enforces only tenancy, staleness, and the invariants of
|
|
22
|
+
-- optimizer-created rows (take_to_dump/take_to_lot only, asset required,
|
|
23
|
+
-- status Open, any_time true).
|
|
24
|
+
--
|
|
25
|
+
-- security definer + service_role-only: the sole caller is
|
|
26
|
+
-- /api/rental-routes/apply, which authenticates the dispatcher and checks
|
|
27
|
+
-- the create_jobs permission before calling.
|
|
28
|
+
--
|
|
29
|
+
-- Payload shapes:
|
|
30
|
+
-- p_expected: [{"schedule_id": uuid, "status": text,
|
|
31
|
+
-- "asset_id": uuid | null,
|
|
32
|
+
-- "secondary_asset_id": uuid | null,
|
|
33
|
+
-- "list_sort_key": numeric | null,
|
|
34
|
+
-- "user_ids": [uuid] (current assignees, sorted)}]
|
|
35
|
+
-- p_task_updates: [{"schedule_id": uuid, "list_sort_key": numeric,
|
|
36
|
+
-- "asset_id": uuid (key optional; absent = leave as-is)}]
|
|
37
|
+
-- p_assignments: [{"schedule_id": uuid, "user_ids": [uuid]}]
|
|
38
|
+
-- p_new_tasks: [{"id": uuid, "job_id": uuid, "task_type": text,
|
|
39
|
+
-- "start_time": timestamptz, "end_time": timestamptz,
|
|
40
|
+
-- "list_sort_key": numeric, "asset_id": uuid,
|
|
41
|
+
-- "target_saved_location_id": uuid | null,
|
|
42
|
+
-- "target_address": text | null,
|
|
43
|
+
-- "target_latitude": numeric | null,
|
|
44
|
+
-- "target_longitude": numeric | null,
|
|
45
|
+
-- "user_ids": [uuid]}]
|
|
46
|
+
|
|
47
|
+
create or replace function "public"."apply_rental_route_plan"(
|
|
48
|
+
"p_company_id" uuid,
|
|
49
|
+
"p_expected" jsonb,
|
|
50
|
+
"p_task_updates" jsonb,
|
|
51
|
+
"p_assignments" jsonb,
|
|
52
|
+
"p_new_tasks" jsonb
|
|
53
|
+
) returns void
|
|
54
|
+
language plpgsql
|
|
55
|
+
security definer
|
|
56
|
+
set search_path = public
|
|
57
|
+
as $$
|
|
58
|
+
declare
|
|
59
|
+
v_item jsonb;
|
|
60
|
+
v_sched "public"."job_schedule"%rowtype;
|
|
61
|
+
v_expected_ids uuid[] := '{}';
|
|
62
|
+
v_schedule_id uuid;
|
|
63
|
+
v_new_id uuid;
|
|
64
|
+
v_job_id uuid;
|
|
65
|
+
v_current_users uuid[];
|
|
66
|
+
v_expected_users uuid[];
|
|
67
|
+
begin
|
|
68
|
+
if p_company_id is null then
|
|
69
|
+
raise exception 'company id is required'
|
|
70
|
+
using errcode = 'P0011';
|
|
71
|
+
end if;
|
|
72
|
+
|
|
73
|
+
-- 1. Lock every planned row; verify tenancy and that its optimized
|
|
74
|
+
-- state — status, assets, ordering, assignees — is unchanged since
|
|
75
|
+
-- the plan was computed. Status alone is not enough: a dispatcher
|
|
76
|
+
-- can re-assign an asset or a driver without touching status, and a
|
|
77
|
+
-- stale plan must not overwrite that edit.
|
|
78
|
+
for v_item in
|
|
79
|
+
select * from jsonb_array_elements(coalesce(p_expected, '[]'::jsonb))
|
|
80
|
+
loop
|
|
81
|
+
v_schedule_id := (v_item->>'schedule_id')::uuid;
|
|
82
|
+
|
|
83
|
+
select * into v_sched
|
|
84
|
+
from "public"."job_schedule"
|
|
85
|
+
where "id" = v_schedule_id
|
|
86
|
+
for update;
|
|
87
|
+
|
|
88
|
+
if not found or v_sched."company_id" is distinct from p_company_id then
|
|
89
|
+
raise exception 'route plan references an unknown schedule row'
|
|
90
|
+
using errcode = 'P0011';
|
|
91
|
+
end if;
|
|
92
|
+
|
|
93
|
+
select coalesce(array_agg("user_id" order by "user_id"), '{}')
|
|
94
|
+
into v_current_users
|
|
95
|
+
from "public"."job_user"
|
|
96
|
+
where "job_schedule_id" = v_schedule_id;
|
|
97
|
+
|
|
98
|
+
select coalesce(array_agg(u.value::uuid order by u.value::uuid), '{}')
|
|
99
|
+
into v_expected_users
|
|
100
|
+
from jsonb_array_elements_text(
|
|
101
|
+
coalesce(v_item->'user_ids', '[]'::jsonb)) u;
|
|
102
|
+
|
|
103
|
+
if v_sched."status"::text is distinct from (v_item->>'status')
|
|
104
|
+
or v_sched."asset_id" is distinct from
|
|
105
|
+
(v_item->>'asset_id')::uuid
|
|
106
|
+
or v_sched."secondary_asset_id" is distinct from
|
|
107
|
+
(v_item->>'secondary_asset_id')::uuid
|
|
108
|
+
or v_sched."list_sort_key" is distinct from
|
|
109
|
+
(v_item->>'list_sort_key')::numeric
|
|
110
|
+
or v_current_users is distinct from v_expected_users
|
|
111
|
+
then
|
|
112
|
+
raise exception 'route plan is stale'
|
|
113
|
+
using errcode = 'P0010';
|
|
114
|
+
end if;
|
|
115
|
+
|
|
116
|
+
v_expected_ids := v_expected_ids || v_schedule_id;
|
|
117
|
+
end loop;
|
|
118
|
+
|
|
119
|
+
-- 2. Ordering / asset assignment updates. Every touched row must have
|
|
120
|
+
-- been locked and company-checked above.
|
|
121
|
+
for v_item in
|
|
122
|
+
select * from jsonb_array_elements(coalesce(p_task_updates, '[]'::jsonb))
|
|
123
|
+
loop
|
|
124
|
+
v_schedule_id := (v_item->>'schedule_id')::uuid;
|
|
125
|
+
|
|
126
|
+
if not (v_schedule_id = any (v_expected_ids)) then
|
|
127
|
+
raise exception 'task update outside the locked plan rows'
|
|
128
|
+
using errcode = 'P0011';
|
|
129
|
+
end if;
|
|
130
|
+
|
|
131
|
+
update "public"."job_schedule"
|
|
132
|
+
set "list_sort_key" = (v_item->>'list_sort_key')::numeric,
|
|
133
|
+
"asset_id" = case
|
|
134
|
+
when v_item ? 'asset_id' then (v_item->>'asset_id')::uuid
|
|
135
|
+
else "asset_id"
|
|
136
|
+
end
|
|
137
|
+
where "id" = v_schedule_id;
|
|
138
|
+
end loop;
|
|
139
|
+
|
|
140
|
+
-- 3. Full replacement of each planned row's assignments. job_id is read
|
|
141
|
+
-- from the schedule row itself, never from the payload, and every
|
|
142
|
+
-- assignee must belong to the company — user and company foreign
|
|
143
|
+
-- keys on job_user are enforced independently, so without this
|
|
144
|
+
-- check a crafted payload could create a cross-tenant assignment.
|
|
145
|
+
for v_item in
|
|
146
|
+
select * from jsonb_array_elements(coalesce(p_assignments, '[]'::jsonb))
|
|
147
|
+
loop
|
|
148
|
+
v_schedule_id := (v_item->>'schedule_id')::uuid;
|
|
149
|
+
|
|
150
|
+
if not (v_schedule_id = any (v_expected_ids)) then
|
|
151
|
+
raise exception 'assignment outside the locked plan rows'
|
|
152
|
+
using errcode = 'P0011';
|
|
153
|
+
end if;
|
|
154
|
+
|
|
155
|
+
perform 1
|
|
156
|
+
from jsonb_array_elements_text(
|
|
157
|
+
coalesce(v_item->'user_ids', '[]'::jsonb)) u
|
|
158
|
+
where not exists (
|
|
159
|
+
select 1 from "public"."user_role" ur
|
|
160
|
+
where ur."user_id" = u.value::uuid
|
|
161
|
+
and ur."company_id" = p_company_id
|
|
162
|
+
);
|
|
163
|
+
if found then
|
|
164
|
+
raise exception 'assignee outside the company'
|
|
165
|
+
using errcode = 'P0011';
|
|
166
|
+
end if;
|
|
167
|
+
|
|
168
|
+
delete from "public"."job_user"
|
|
169
|
+
where "job_schedule_id" = v_schedule_id;
|
|
170
|
+
|
|
171
|
+
insert into "public"."job_user"
|
|
172
|
+
("company_id", "job_id", "job_schedule_id", "user_id")
|
|
173
|
+
select p_company_id, js."job_id", v_schedule_id, u.value::uuid
|
|
174
|
+
from "public"."job_schedule" js
|
|
175
|
+
cross join jsonb_array_elements_text(
|
|
176
|
+
coalesce(v_item->'user_ids', '[]'::jsonb)) u
|
|
177
|
+
where js."id" = v_schedule_id;
|
|
178
|
+
end loop;
|
|
179
|
+
|
|
180
|
+
-- 4. Optimizer-created landfill / lot legs.
|
|
181
|
+
for v_item in
|
|
182
|
+
select * from jsonb_array_elements(coalesce(p_new_tasks, '[]'::jsonb))
|
|
183
|
+
loop
|
|
184
|
+
if (v_item->>'task_type') not in ('take_to_dump', 'take_to_lot') then
|
|
185
|
+
raise exception
|
|
186
|
+
'optimizer may only create take_to_dump or take_to_lot tasks'
|
|
187
|
+
using errcode = 'P0012';
|
|
188
|
+
end if;
|
|
189
|
+
|
|
190
|
+
if (v_item->>'asset_id') is null then
|
|
191
|
+
raise exception 'optimizer-created tasks require an asset'
|
|
192
|
+
using errcode = 'P0012';
|
|
193
|
+
end if;
|
|
194
|
+
|
|
195
|
+
v_job_id := (v_item->>'job_id')::uuid;
|
|
196
|
+
|
|
197
|
+
perform 1 from "public"."job"
|
|
198
|
+
where "id" = v_job_id and "company_id" = p_company_id;
|
|
199
|
+
|
|
200
|
+
if not found then
|
|
201
|
+
raise exception 'new task references a job outside the company'
|
|
202
|
+
using errcode = 'P0011';
|
|
203
|
+
end if;
|
|
204
|
+
|
|
205
|
+
perform 1
|
|
206
|
+
from jsonb_array_elements_text(
|
|
207
|
+
coalesce(v_item->'user_ids', '[]'::jsonb)) u
|
|
208
|
+
where not exists (
|
|
209
|
+
select 1 from "public"."user_role" ur
|
|
210
|
+
where ur."user_id" = u.value::uuid
|
|
211
|
+
and ur."company_id" = p_company_id
|
|
212
|
+
);
|
|
213
|
+
if found then
|
|
214
|
+
raise exception 'assignee outside the company'
|
|
215
|
+
using errcode = 'P0011';
|
|
216
|
+
end if;
|
|
217
|
+
|
|
218
|
+
v_new_id := coalesce((v_item->>'id')::uuid, gen_random_uuid());
|
|
219
|
+
|
|
220
|
+
-- on conflict do nothing keeps a retried approval (committed but
|
|
221
|
+
-- the response was lost) from raising a primary-key violation on
|
|
222
|
+
-- the client-generated id; the job_user insert is skipped for the
|
|
223
|
+
-- already-existing row so assignees never duplicate.
|
|
224
|
+
insert into "public"."job_schedule" (
|
|
225
|
+
"id", "company_id", "job_id", "task_type", "status", "any_time",
|
|
226
|
+
"start_time", "end_time", "list_sort_key", "asset_id",
|
|
227
|
+
"target_saved_location_id", "target_address",
|
|
228
|
+
"target_latitude", "target_longitude"
|
|
229
|
+
) values (
|
|
230
|
+
v_new_id,
|
|
231
|
+
p_company_id,
|
|
232
|
+
v_job_id,
|
|
233
|
+
v_item->>'task_type',
|
|
234
|
+
'Open'::"public"."job_status_enum",
|
|
235
|
+
true,
|
|
236
|
+
(v_item->>'start_time')::timestamptz,
|
|
237
|
+
(v_item->>'end_time')::timestamptz,
|
|
238
|
+
(v_item->>'list_sort_key')::numeric,
|
|
239
|
+
(v_item->>'asset_id')::uuid,
|
|
240
|
+
(v_item->>'target_saved_location_id')::uuid,
|
|
241
|
+
v_item->>'target_address',
|
|
242
|
+
(v_item->>'target_latitude')::numeric,
|
|
243
|
+
(v_item->>'target_longitude')::numeric
|
|
244
|
+
)
|
|
245
|
+
on conflict ("id") do nothing;
|
|
246
|
+
|
|
247
|
+
if found then
|
|
248
|
+
insert into "public"."job_user"
|
|
249
|
+
("company_id", "job_id", "job_schedule_id", "user_id")
|
|
250
|
+
select p_company_id, v_job_id, v_new_id, u.value::uuid
|
|
251
|
+
from jsonb_array_elements_text(
|
|
252
|
+
coalesce(v_item->'user_ids', '[]'::jsonb)) u;
|
|
253
|
+
end if;
|
|
254
|
+
end loop;
|
|
255
|
+
end;
|
|
256
|
+
$$;
|
|
257
|
+
|
|
258
|
+
alter function "public"."apply_rental_route_plan"(
|
|
259
|
+
uuid, jsonb, jsonb, jsonb, jsonb
|
|
260
|
+
) owner to "postgres";
|
|
261
|
+
|
|
262
|
+
-- security definer + service_role-only: /api/rental-routes/apply is the
|
|
263
|
+
-- sole caller; no authenticated/anon path exists.
|
|
264
|
+
revoke all on function "public"."apply_rental_route_plan"(
|
|
265
|
+
uuid, jsonb, jsonb, jsonb, jsonb
|
|
266
|
+
) from public;
|
|
267
|
+
revoke all on function "public"."apply_rental_route_plan"(
|
|
268
|
+
uuid, jsonb, jsonb, jsonb, jsonb
|
|
269
|
+
) from "anon";
|
|
270
|
+
revoke all on function "public"."apply_rental_route_plan"(
|
|
271
|
+
uuid, jsonb, jsonb, jsonb, jsonb
|
|
272
|
+
) from "authenticated";
|
|
273
|
+
grant execute on function "public"."apply_rental_route_plan"(
|
|
274
|
+
uuid, jsonb, jsonb, jsonb, jsonb
|
|
275
|
+
) to "service_role";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-- Default job type applied automatically from a job's task composition
|
|
2
|
+
-- (job_schedule.task_type: null = normal task, non-null = rental task).
|
|
3
|
+
-- normal = all tasks normal, rental = all tasks rental, mixed = both.
|
|
4
|
+
-- Null means "no default configured" — the automation leaves job.type alone.
|
|
5
|
+
-- ON DELETE SET NULL so deleting a job_type self-heals the setting.
|
|
6
|
+
alter table public.settings_job
|
|
7
|
+
add column default_job_type_normal_id uuid references public.job_type(id) on delete set null,
|
|
8
|
+
add column default_job_type_rental_id uuid references public.job_type(id) on delete set null,
|
|
9
|
+
add column default_job_type_mixed_id uuid references public.job_type(id) on delete set null;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
-- Display order for the Jobs Type dropdown and the settings preset list
|
|
2
|
+
-- now lives in rental_task_option.sort_order (fetchTaskOptions orders by
|
|
3
|
+
-- sort_order, then created_at). The app writes it going forward
|
|
4
|
+
-- (RentalsProvider: presets get their index in the company's industry
|
|
5
|
+
-- order, customs get 100); this backfills rows created before those
|
|
6
|
+
-- writes existed, mirroring presetSortOrder in server-safe/rentals.ts:
|
|
7
|
+
-- - custom tasks (label is not null) -> 100
|
|
8
|
+
-- - presets -> index in the company's settings_rental.industry_preset
|
|
9
|
+
-- offered list; 'other'/no settings row -> canonical PRESET_TASK_KEYS
|
|
10
|
+
-- order; a preset not in the applicable list -> 99 (stranded)
|
|
11
|
+
-- Idempotent: recomputes the same values on rerun. Non-destructive.
|
|
12
|
+
update "public"."rental_task_option" as "o"
|
|
13
|
+
set "sort_order" = case
|
|
14
|
+
when "o"."label" is not null then 100
|
|
15
|
+
else case coalesce(
|
|
16
|
+
(select "s"."industry_preset"
|
|
17
|
+
from "public"."settings_rental" as "s"
|
|
18
|
+
where "s"."company_id" = "o"."company_id"),
|
|
19
|
+
'other')
|
|
20
|
+
when 'dumpster' then case "o"."preset_key"
|
|
21
|
+
when 'drop_off' then 0
|
|
22
|
+
when 'pick_up' then 1
|
|
23
|
+
when 'swap' then 2
|
|
24
|
+
when 'live_load' then 3
|
|
25
|
+
when 'relocate' then 4
|
|
26
|
+
when 'dump_and_return' then 5
|
|
27
|
+
when 'take_to_dump' then 6
|
|
28
|
+
when 'take_to_lot' then 7
|
|
29
|
+
when 'take_to_other' then 8
|
|
30
|
+
else 99 end
|
|
31
|
+
when 'equipment' then case "o"."preset_key"
|
|
32
|
+
when 'drop_off' then 0
|
|
33
|
+
when 'pick_up' then 1
|
|
34
|
+
when 'repair' then 2
|
|
35
|
+
when 'swap' then 3
|
|
36
|
+
when 'take_to_lot' then 4
|
|
37
|
+
when 'take_to_other' then 5
|
|
38
|
+
else 99 end
|
|
39
|
+
when 'portable_toilet' then case "o"."preset_key"
|
|
40
|
+
when 'drop_off' then 0
|
|
41
|
+
when 'pick_up' then 1
|
|
42
|
+
when 'service' then 2
|
|
43
|
+
when 'relocate' then 3
|
|
44
|
+
when 'take_to_lot' then 4
|
|
45
|
+
when 'take_to_other' then 5
|
|
46
|
+
else 99 end
|
|
47
|
+
else case "o"."preset_key"
|
|
48
|
+
when 'drop_off' then 0
|
|
49
|
+
when 'pick_up' then 1
|
|
50
|
+
when 'swap' then 2
|
|
51
|
+
when 'live_load' then 3
|
|
52
|
+
when 'relocate' then 4
|
|
53
|
+
when 'dump_and_return' then 5
|
|
54
|
+
when 'take_to_dump' then 6
|
|
55
|
+
when 'repair' then 7
|
|
56
|
+
when 'service' then 8
|
|
57
|
+
when 'take_to_lot' then 9
|
|
58
|
+
when 'take_to_other' then 10
|
|
59
|
+
else 99 end
|
|
60
|
+
end
|
|
61
|
+
end;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
alter table "public"."settings_user"
|
|
2
|
+
add column "map_dnd_hint_dismissed" boolean not null default false,
|
|
3
|
+
add column "schedule_dnd_hint_dismissed" boolean not null default false;
|
|
4
|
+
|
|
5
|
+
comment on column "public"."settings_user"."map_dnd_hint_dismissed"
|
|
6
|
+
is 'Tracks whether this user has dismissed the one-time drag-and-drop hint on the web map sidebar.';
|
|
7
|
+
|
|
8
|
+
comment on column "public"."settings_user"."schedule_dnd_hint_dismissed"
|
|
9
|
+
is 'Tracks whether this user has dismissed the one-time drag-and-drop hint on the mobile schedule List View.';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
-- One-time data repair: email drift between user_role / staging_new_employee
|
|
2
|
+
-- and "user". Root cause: the change-user-auth-email route updated user.email
|
|
3
|
+
-- with the caller's session client, but user_role writes are owner-only under
|
|
4
|
+
-- RLS, so the user_role.email sync silently no-oped for non-owners; a later
|
|
5
|
+
-- reinvite then staged lower(user.email), which no user_role row matched by
|
|
6
|
+
-- email and fetchEmployees threw for the whole company.
|
|
7
|
+
--
|
|
8
|
+
-- Data backfill only — no schema or policy changes. Safe to apply
|
|
9
|
+
-- independently of any web/mobile deploy.
|
|
10
|
+
|
|
11
|
+
-- 1) Where user_role is linked to a user, the user row's email is
|
|
12
|
+
-- authoritative.
|
|
13
|
+
UPDATE public.user_role ur
|
|
14
|
+
SET email = lower(trim(u.email))
|
|
15
|
+
FROM public."user" u
|
|
16
|
+
WHERE ur.user_id = u.id
|
|
17
|
+
AND ur.email IS DISTINCT FROM lower(trim(u.email));
|
|
18
|
+
|
|
19
|
+
-- 2) Backfill user_role.user_id where the signup-time backfill was lost
|
|
20
|
+
-- (create-employee swallows that error), but only when the
|
|
21
|
+
-- (company, normalized email) match is unambiguous on BOTH sides: exactly
|
|
22
|
+
-- one user carries the email, and this is the only user_role row carrying
|
|
23
|
+
-- it. Without the role-side check, several unlinked user_role rows sharing
|
|
24
|
+
-- one email would all be linked to the same user, and readers that join
|
|
25
|
+
-- roles by user_id resolve the duplicates arbitrarily. (A row already
|
|
26
|
+
-- linked to the user also trips the role-side check — step 1 has just set
|
|
27
|
+
-- its email to lower(trim(user.email)) — so this can't add a second row
|
|
28
|
+
-- to an already-linked user either.)
|
|
29
|
+
UPDATE public.user_role ur
|
|
30
|
+
SET user_id = u.id
|
|
31
|
+
FROM public."user" u
|
|
32
|
+
WHERE ur.user_id IS NULL
|
|
33
|
+
AND ur.company_id = u.company_id
|
|
34
|
+
AND lower(trim(ur.email)) = lower(trim(u.email))
|
|
35
|
+
AND NOT EXISTS (
|
|
36
|
+
SELECT 1
|
|
37
|
+
FROM public."user" u2
|
|
38
|
+
WHERE u2.company_id = ur.company_id
|
|
39
|
+
AND lower(trim(u2.email)) = lower(trim(ur.email))
|
|
40
|
+
AND u2.id <> u.id
|
|
41
|
+
)
|
|
42
|
+
AND NOT EXISTS (
|
|
43
|
+
SELECT 1
|
|
44
|
+
FROM public.user_role ur2
|
|
45
|
+
WHERE ur2.company_id = ur.company_id
|
|
46
|
+
AND lower(trim(ur2.email)) = lower(trim(ur.email))
|
|
47
|
+
AND ur2.id <> ur.id
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
-- 3) Normalize remaining casing/whitespace. New staging rows are already
|
|
51
|
+
-- lowercased on insert; this catches legacy rows. "user".email is left
|
|
52
|
+
-- untouched (user-visible casing; readers are case-insensitive).
|
|
53
|
+
UPDATE public.user_role
|
|
54
|
+
SET email = lower(trim(email))
|
|
55
|
+
WHERE email <> lower(trim(email));
|
|
56
|
+
|
|
57
|
+
UPDATE public.staging_new_employee
|
|
58
|
+
SET email = lower(trim(email))
|
|
59
|
+
WHERE email <> lower(trim(email));
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
-- Keep user_role.email in sync whenever user.email changes, so email drift
|
|
2
|
+
-- between the two tables can't be recreated by any write path (app routes,
|
|
3
|
+
-- core updateProfile, manual edits).
|
|
4
|
+
--
|
|
5
|
+
-- SECURITY DEFINER is required: "user" writes are owner-or-self under RLS but
|
|
6
|
+
-- user_role writes are owner-only, so a non-owner updating their own
|
|
7
|
+
-- user.email would otherwise have this trigger's user_role write blocked.
|
|
8
|
+
-- Rows with user_id IS NULL are unreachable here by design — they are
|
|
9
|
+
-- backfilled by the repair migration and by the change-user-auth-email route.
|
|
10
|
+
|
|
11
|
+
CREATE OR REPLACE FUNCTION public.sync_user_role_email()
|
|
12
|
+
RETURNS trigger
|
|
13
|
+
LANGUAGE plpgsql
|
|
14
|
+
SECURITY DEFINER
|
|
15
|
+
SET search_path = public
|
|
16
|
+
AS $$
|
|
17
|
+
BEGIN
|
|
18
|
+
IF NEW.email IS DISTINCT FROM OLD.email THEN
|
|
19
|
+
UPDATE public.user_role
|
|
20
|
+
SET email = lower(trim(NEW.email))
|
|
21
|
+
WHERE user_id = NEW.id;
|
|
22
|
+
END IF;
|
|
23
|
+
RETURN NEW;
|
|
24
|
+
END;
|
|
25
|
+
$$;
|
|
26
|
+
|
|
27
|
+
CREATE TRIGGER trg_sync_user_role_email
|
|
28
|
+
AFTER UPDATE OF email ON public."user"
|
|
29
|
+
FOR EACH ROW
|
|
30
|
+
EXECUTE FUNCTION public.sync_user_role_email();
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
alter table "public"."event"
|
|
2
|
+
add column "list_sort_key" numeric null;
|
|
3
|
+
|
|
4
|
+
comment on column "public"."event"."list_sort_key"
|
|
5
|
+
is 'Manual position of an all-day (no-time) event in the schedule list ordering, sharing the day axis with job_schedule.list_sort_key. NULL = never manually placed (all-day events default to their 00:01 sentinel position). Timed events ignore it and anchor at their start time.';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
-- Additive and backward-compatible: existing rows default to false (no auto-billing).
|
|
2
|
+
alter table public.client
|
|
3
|
+
add column if not exists auto_bill_on_completion boolean not null default false;
|
|
4
|
+
|
|
5
|
+
comment on column public.client.auto_bill_on_completion is
|
|
6
|
+
'Bill this client automatically when their job is marked Completed (the transition that makes every schedule day Completed). Charges the client''s default Stripe card (invoice_settings.default_payment_method on the connected account) after an in-app confirmation of the job items and total. Only effective when cards are on file; card truth lives in Stripe, not here.';
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
-- Automation rules: user-authored "trigger + timing + action + conditions"
|
|
2
|
+
-- records (Automations settings page, web + mobile). The engine lives in
|
|
3
|
+
-- autopilot-web (/api/automations-cron): Phase A fans automation_event rows
|
|
4
|
+
-- out against enabled rules, Phase B scans date-anchored triggers live, and
|
|
5
|
+
-- Phase C executes claimed automation_run rows.
|
|
6
|
+
--
|
|
7
|
+
-- Column vs jsonb split: trigger_type / action_type / is_enabled are real
|
|
8
|
+
-- columns because the engine filters and indexes on them and the CHECKs give
|
|
9
|
+
-- DB-level integrity. Per-type parameters (trigger_config, action_config)
|
|
10
|
+
-- and the flat AND condition list are jsonb: heterogeneous across types,
|
|
11
|
+
-- interpreted only in TS, and evolvable without migrations. The TS
|
|
12
|
+
-- validators in autopilot-core src/server-safe/automations.ts are the schema
|
|
13
|
+
-- authority for the jsonb shapes.
|
|
14
|
+
|
|
15
|
+
create table if not exists "public"."automation_rule" (
|
|
16
|
+
"id" uuid default gen_random_uuid() not null,
|
|
17
|
+
"created_at" timestamp with time zone default now() not null,
|
|
18
|
+
"company_id" uuid not null,
|
|
19
|
+
"created_by" uuid,
|
|
20
|
+
"name" text not null,
|
|
21
|
+
"is_enabled" boolean default true not null,
|
|
22
|
+
-- keep in sync with AUTOMATION_TRIGGER_TYPES in
|
|
23
|
+
-- autopilot-core src/server-safe/automations.ts
|
|
24
|
+
"trigger_type" text not null,
|
|
25
|
+
-- shape depends on trigger_type; see TriggerConfig in automations.ts.
|
|
26
|
+
-- Timing lives here too (direction / offset_value / offset_unit /
|
|
27
|
+
-- send_at) because valid timing modes depend on the trigger.
|
|
28
|
+
"trigger_config" jsonb default '{}'::jsonb not null,
|
|
29
|
+
-- flat AND list: [{"field":"job_type"|"client_tag"|"job_source",
|
|
30
|
+
-- "op":"is"|"is_not","value":"<name string>"}]
|
|
31
|
+
"conditions" jsonb default '[]'::jsonb not null,
|
|
32
|
+
-- keep in sync with AUTOMATION_ACTION_TYPES in automations.ts
|
|
33
|
+
"action_type" text not null,
|
|
34
|
+
-- shape depends on action_type; see ActionConfig in automations.ts
|
|
35
|
+
"action_config" jsonb default '{}'::jsonb not null,
|
|
36
|
+
"message_template" text default '' not null,
|
|
37
|
+
-- messages actually sent (not attempts); incremented by the engine via
|
|
38
|
+
-- increment_automation_rule_counters
|
|
39
|
+
"times_triggered" integer default 0 not null,
|
|
40
|
+
-- informational: which preset prefilled this rule, for adoption analytics
|
|
41
|
+
"preset_key" text
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
alter table only "public"."automation_rule"
|
|
45
|
+
add constraint "automation_rule_pkey" primary key ("id");
|
|
46
|
+
|
|
47
|
+
alter table only "public"."automation_rule"
|
|
48
|
+
add constraint "automation_rule_company_id_fkey"
|
|
49
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
50
|
+
|
|
51
|
+
alter table only "public"."automation_rule"
|
|
52
|
+
add constraint "automation_rule_created_by_fkey"
|
|
53
|
+
foreign key ("created_by") references "public"."user"("id") on delete set null;
|
|
54
|
+
|
|
55
|
+
alter table only "public"."automation_rule"
|
|
56
|
+
add constraint "automation_rule_trigger_type_check"
|
|
57
|
+
check ("trigger_type" in (
|
|
58
|
+
'job_created', 'job_status_changed', 'schedule_time_relative',
|
|
59
|
+
'rental_date_relative', 'rental_task_completed',
|
|
60
|
+
'estimate_sent', 'estimate_approved', 'estimate_declined',
|
|
61
|
+
'estimate_pending',
|
|
62
|
+
'lead_created',
|
|
63
|
+
'booking_request_received', 'booking_confirmed', 'booking_declined'));
|
|
64
|
+
|
|
65
|
+
alter table only "public"."automation_rule"
|
|
66
|
+
add constraint "automation_rule_action_type_check"
|
|
67
|
+
check ("action_type" in ('sms_client', 'email_client', 'notify_team'));
|
|
68
|
+
|
|
69
|
+
create index if not exists "automation_rule_company_idx"
|
|
70
|
+
on "public"."automation_rule" ("company_id");
|
|
71
|
+
|
|
72
|
+
-- Phase B scans enabled anchor-type rules across all companies each tick
|
|
73
|
+
create index if not exists "automation_rule_enabled_type_idx"
|
|
74
|
+
on "public"."automation_rule" ("trigger_type")
|
|
75
|
+
where "is_enabled";
|
|
76
|
+
|
|
77
|
+
-- Batched counter bump for sent runs. An RPC because supabase-js cannot
|
|
78
|
+
-- express `set x = x + n`. Duplicate ids in the array count multiple times
|
|
79
|
+
-- (one increment per sent run).
|
|
80
|
+
create or replace function "public"."increment_automation_rule_counters"("rule_ids" uuid[])
|
|
81
|
+
returns void
|
|
82
|
+
language "sql"
|
|
83
|
+
security definer
|
|
84
|
+
set search_path = 'public'
|
|
85
|
+
as $$
|
|
86
|
+
update automation_rule r
|
|
87
|
+
set times_triggered = times_triggered + counts.n
|
|
88
|
+
from (
|
|
89
|
+
select id, count(*)::integer as n
|
|
90
|
+
from unnest(rule_ids) as id
|
|
91
|
+
group by id
|
|
92
|
+
) as counts
|
|
93
|
+
where r.id = counts.id;
|
|
94
|
+
$$;
|
|
95
|
+
|
|
96
|
+
revoke all on function "public"."increment_automation_rule_counters"(uuid[]) from public;
|
|
97
|
+
revoke all on function "public"."increment_automation_rule_counters"(uuid[]) from "anon";
|
|
98
|
+
revoke all on function "public"."increment_automation_rule_counters"(uuid[]) from "authenticated";
|
|
99
|
+
grant execute on function "public"."increment_automation_rule_counters"(uuid[]) to "service_role";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-- RLS for automation_rule.
|
|
2
|
+
--
|
|
3
|
+
-- Affected tables: automation_rule.
|
|
4
|
+
--
|
|
5
|
+
-- Standard house policy: any authenticated staff member of the owning
|
|
6
|
+
-- company can CRUD (rules are managed from the Automations settings page on
|
|
7
|
+
-- web and mobile; the page itself is gated by manage_company_settings). End
|
|
8
|
+
-- customers never touch this table — no anon policies or grants.
|
|
9
|
+
|
|
10
|
+
alter table "public"."automation_rule" enable row level security;
|
|
11
|
+
|
|
12
|
+
grant all on table "public"."automation_rule" to "authenticated";
|
|
13
|
+
grant all on table "public"."automation_rule" to "service_role";
|
|
14
|
+
|
|
15
|
+
create policy "Anyone with matching company_id can CRUD"
|
|
16
|
+
on "public"."automation_rule"
|
|
17
|
+
to "authenticated"
|
|
18
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
|
|
19
|
+
with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|